2023-04-07 03:25:17 +00:00
import abc
2023-04-03 02:35:28 +00:00
import os
2023-04-03 02:57:51 +00:00
import openai
2023-04-03 02:35:28 +00:00
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv ( )
2023-04-04 00:31:01 +00:00
2023-04-07 03:25:17 +00:00
class Singleton ( abc . ABCMeta , type ) :
2023-03-31 03:13:31 +00:00
"""
Singleton metaclass for ensuring only one instance of a class .
"""
_instances = { }
def __call__ ( cls , * args , * * kwargs ) :
if cls not in cls . _instances :
2023-04-02 08:13:15 +00:00
cls . _instances [ cls ] = super (
Singleton , cls ) . __call__ (
* args , * * kwargs )
2023-03-31 03:13:31 +00:00
return cls . _instances [ cls ]
2023-04-07 03:25:17 +00:00
class AbstractSingleton ( abc . ABC , metaclass = Singleton ) :
pass
2023-03-31 03:13:31 +00:00
class Config ( metaclass = Singleton ) :
"""
Configuration class to store the state of bools for different scripts access .
"""
def __init__ ( self ) :
self . continuous_mode = False
self . speak_mode = False
2023-04-03 02:35:28 +00:00
# TODO - make these models be self-contained, using langchain, so we can configure them once and call it good
self . fast_llm_model = os . getenv ( " FAST_LLM_MODEL " , " gpt-3.5-turbo " )
self . smart_llm_model = os . getenv ( " SMART_LLM_MODEL " , " gpt-4 " )
2023-04-03 10:30:39 +00:00
self . fast_token_limit = int ( os . getenv ( " FAST_TOKEN_LIMIT " , 4000 ) )
self . smart_token_limit = int ( os . getenv ( " SMART_TOKEN_LIMIT " , 8000 ) )
2023-04-03 03:03:48 +00:00
2023-04-03 02:35:28 +00:00
self . openai_api_key = os . getenv ( " OPENAI_API_KEY " )
2023-04-05 17:44:28 +00:00
self . use_azure = False
2023-04-06 07:15:45 +00:00
self . use_azure = os . getenv ( " USE_AZURE " ) == ' True '
2023-04-05 17:44:28 +00:00
if self . use_azure :
self . openai_api_base = os . getenv ( " OPENAI_API_BASE " )
self . openai_api_version = os . getenv ( " OPENAI_API_VERSION " )
self . openai_deployment_id = os . getenv ( " OPENAI_DEPLOYMENT_ID " )
openai . api_type = " azure "
openai . api_base = self . openai_api_base
openai . api_version = self . openai_api_version
2023-04-03 02:35:28 +00:00
self . elevenlabs_api_key = os . getenv ( " ELEVENLABS_API_KEY " )
2023-04-03 20:44:10 +00:00
self . google_api_key = os . getenv ( " GOOGLE_API_KEY " )
self . custom_search_engine_id = os . getenv ( " CUSTOM_SEARCH_ENGINE_ID " )
2023-04-03 02:35:28 +00:00
2023-04-04 00:31:01 +00:00
self . pinecone_api_key = os . getenv ( " PINECONE_API_KEY " )
self . pinecone_region = os . getenv ( " PINECONE_ENV " )
2023-04-05 21:44:16 +00:00
# User agent headers to use when browsing web
# Some websites might just completely deny request with an error code if no user agent was found.
self . user_agent_header = { " User-Agent " : " Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 " }
2023-04-07 05:08:25 +00:00
self . redis_host = os . getenv ( " REDIS_HOST " )
self . redis_port = os . getenv ( " REDIS_PORT " )
self . redis_password = os . getenv ( " REDIS_PASSWORD " )
# Note that indexes must be created on db 0 in redis, this is not configureable.
self . memory_backend = os . getenv ( " MEMORY_BACKEND " , ' pinecone ' )
2023-04-03 02:57:38 +00:00
# Initialize the OpenAI API client
openai . api_key = self . openai_api_key
2023-04-03 02:35:28 +00:00
2023-03-31 03:13:31 +00:00
def set_continuous_mode ( self , value : bool ) :
self . continuous_mode = value
def set_speak_mode ( self , value : bool ) :
2023-04-02 08:13:15 +00:00
self . speak_mode = value
2023-04-02 22:17:46 +00:00
def set_fast_llm_model ( self , value : str ) :
self . fast_llm_model = value
def set_smart_llm_model ( self , value : str ) :
self . smart_llm_model = value
2023-04-03 10:30:39 +00:00
def set_fast_token_limit ( self , value : int ) :
self . fast_token_limit = value
def set_smart_token_limit ( self , value : int ) :
self . smart_token_limit = value
2023-04-03 02:35:28 +00:00
def set_openai_api_key ( self , value : str ) :
2023-04-03 21:35:01 +00:00
self . openai_api_key = value
2023-04-03 02:35:28 +00:00
def set_elevenlabs_api_key ( self , value : str ) :
self . elevenlabs_api_key = value
2023-04-03 20:44:10 +00:00
def set_google_api_key ( self , value : str ) :
self . google_api_key = value
def set_custom_search_engine_id ( self , value : str ) :
2023-04-04 00:31:01 +00:00
self . custom_search_engine_id = value
def set_pinecone_api_key ( self , value : str ) :
self . pinecone_api_key = value
def set_pinecone_region ( self , value : str ) :
self . pinecone_region = value