ekabaruh commited on
Commit
3843dff
·
verified ·
1 Parent(s): 8ba7e2c

Delete settings.py

Browse files
Files changed (1) hide show
  1. settings.py +0 -222
settings.py DELETED
@@ -1,222 +0,0 @@
1
- from enum import Enum
2
- from json import loads
3
- from typing import Annotated, Any
4
-
5
- from dotenv import find_dotenv
6
- from pydantic import (
7
- BeforeValidator,
8
- Field,
9
- HttpUrl,
10
- SecretStr,
11
- TypeAdapter,
12
- computed_field,
13
- )
14
- from pydantic_settings import BaseSettings, SettingsConfigDict
15
-
16
- from models import (
17
- AllModelEnum,
18
- AnthropicModelName,
19
- AWSModelName,
20
- AzureOpenAIModelName,
21
- DeepseekModelName,
22
- FakeModelName,
23
- GoogleModelName,
24
- GroqModelName,
25
- OllamaModelName,
26
- OpenAICompatibleName,
27
- OpenAIModelName,
28
- Provider,
29
- VertexAIModelName,
30
- )
31
-
32
-
33
- # Create a compatible StrEnum alternative for Python 3.10
34
- class DatabaseType(str, Enum):
35
- SQLITE = "sqlite"
36
- POSTGRES = "postgres"
37
- MONGO = "mongo"
38
-
39
-
40
- def check_str_is_http(x: str) -> str:
41
- http_url_adapter = TypeAdapter(HttpUrl)
42
- return str(http_url_adapter.validate_python(x))
43
-
44
-
45
- class Settings(BaseSettings):
46
- model_config = SettingsConfigDict(
47
- env_file=find_dotenv(),
48
- env_file_encoding="utf-8",
49
- env_ignore_empty=True,
50
- extra="ignore",
51
- validate_default=False,
52
- )
53
- MODE: str | None = None
54
-
55
- HOST: str = "0.0.0.0"
56
- PORT: int = 8080
57
-
58
- AUTH_SECRET: SecretStr | None = None
59
-
60
- OPENAI_API_KEY: SecretStr | None = None
61
- DEEPSEEK_API_KEY: SecretStr | None = None
62
- ANTHROPIC_API_KEY: SecretStr | None = None
63
- GOOGLE_API_KEY: SecretStr | None = None
64
- GOOGLE_APPLICATION_CREDENTIALS: SecretStr | None = None
65
- GROQ_API_KEY: SecretStr | None = None
66
- USE_AWS_BEDROCK: bool = False
67
- OLLAMA_MODEL: str | None = None
68
- OLLAMA_BASE_URL: str | None = None
69
- USE_FAKE_MODEL: bool = True # Set to True by default for testing without API keys
70
-
71
- # If DEFAULT_MODEL is None, it will be set in model_post_init
72
- DEFAULT_MODEL: AllModelEnum | None = None # type: ignore[assignment]
73
- AVAILABLE_MODELS: set[AllModelEnum] = set() # type: ignore[assignment]
74
-
75
- # Set openai compatible api, mainly used for proof of concept
76
- COMPATIBLE_MODEL: str | None = None
77
- COMPATIBLE_API_KEY: SecretStr | None = None
78
- COMPATIBLE_BASE_URL: str | None = None
79
-
80
- OPENWEATHERMAP_API_KEY: SecretStr | None = None
81
-
82
- LANGCHAIN_TRACING_V2: bool = False
83
- LANGCHAIN_PROJECT: str = "default"
84
- LANGCHAIN_ENDPOINT: Annotated[str, BeforeValidator(check_str_is_http)] = (
85
- "https://api.smith.langchain.com"
86
- )
87
- LANGCHAIN_API_KEY: SecretStr | None = None
88
-
89
- # Database Configuration
90
- DATABASE_TYPE: DatabaseType = (
91
- DatabaseType.SQLITE
92
- ) # Options: DatabaseType.SQLITE or DatabaseType.POSTGRES
93
- SQLITE_DB_PATH: str = "checkpoints.db"
94
-
95
- # PostgreSQL Configuration
96
- POSTGRES_USER: str | None = None
97
- POSTGRES_PASSWORD: SecretStr | None = None
98
- POSTGRES_HOST: str | None = None
99
- POSTGRES_PORT: int | None = None
100
- POSTGRES_DB: str | None = None
101
-
102
- # MongoDB Configuration
103
- MONGO_HOST: str | None = None
104
- MONGO_PORT: int | None = None
105
- MONGO_DB: str | None = None
106
- MONGO_USER: str | None = None
107
- MONGO_PASSWORD: SecretStr | None = None
108
- MONGO_AUTH_SOURCE: str | None = None
109
-
110
- # Azure OpenAI Settings
111
- AZURE_OPENAI_API_KEY: SecretStr | None = None
112
- AZURE_OPENAI_ENDPOINT: str | None = None
113
- AZURE_OPENAI_API_VERSION: str = "2024-02-15-preview"
114
- AZURE_OPENAI_DEPLOYMENT_MAP: dict[str, str] = Field(
115
- default_factory=dict, description="Map of model names to Azure deployment IDs"
116
- )
117
-
118
- def model_post_init(self, __context: Any) -> None:
119
- api_keys = {
120
- Provider.OPENAI: self.OPENAI_API_KEY,
121
- Provider.OPENAI_COMPATIBLE: self.COMPATIBLE_BASE_URL and self.COMPATIBLE_MODEL,
122
- Provider.DEEPSEEK: self.DEEPSEEK_API_KEY,
123
- Provider.ANTHROPIC: self.ANTHROPIC_API_KEY,
124
- Provider.GOOGLE: self.GOOGLE_API_KEY,
125
- Provider.VERTEXAI: self.GOOGLE_APPLICATION_CREDENTIALS,
126
- Provider.GROQ: self.GROQ_API_KEY,
127
- Provider.AWS: self.USE_AWS_BEDROCK,
128
- Provider.OLLAMA: self.OLLAMA_MODEL,
129
- Provider.FAKE: self.USE_FAKE_MODEL,
130
- Provider.AZURE_OPENAI: self.AZURE_OPENAI_API_KEY,
131
- }
132
- active_keys = [k for k, v in api_keys.items() if v]
133
-
134
- # Use fake model when no API keys are available
135
- if not active_keys:
136
- print("No LLM API keys provided. Using fake model for testing purposes.")
137
- self.USE_FAKE_MODEL = True
138
- active_keys = [Provider.FAKE]
139
-
140
- for provider in active_keys:
141
- match provider:
142
- case Provider.OPENAI:
143
- if self.DEFAULT_MODEL is None:
144
- self.DEFAULT_MODEL = OpenAIModelName.GPT_4O_MINI
145
- self.AVAILABLE_MODELS.update(set(OpenAIModelName))
146
- case Provider.OPENAI_COMPATIBLE:
147
- if self.DEFAULT_MODEL is None:
148
- self.DEFAULT_MODEL = OpenAICompatibleName.OPENAI_COMPATIBLE
149
- self.AVAILABLE_MODELS.update(set(OpenAICompatibleName))
150
- case Provider.DEEPSEEK:
151
- if self.DEFAULT_MODEL is None:
152
- self.DEFAULT_MODEL = DeepseekModelName.DEEPSEEK_CHAT
153
- self.AVAILABLE_MODELS.update(set(DeepseekModelName))
154
- case Provider.ANTHROPIC:
155
- if self.DEFAULT_MODEL is None:
156
- self.DEFAULT_MODEL = AnthropicModelName.HAIKU_3
157
- self.AVAILABLE_MODELS.update(set(AnthropicModelName))
158
- case Provider.GOOGLE:
159
- if self.DEFAULT_MODEL is None:
160
- self.DEFAULT_MODEL = GoogleModelName.GEMINI_20_FLASH
161
- self.AVAILABLE_MODELS.update(set(GoogleModelName))
162
- case Provider.VERTEXAI:
163
- if self.DEFAULT_MODEL is None:
164
- self.DEFAULT_MODEL = VertexAIModelName.GEMINI_20_FLASH
165
- self.AVAILABLE_MODELS.update(set(VertexAIModelName))
166
- case Provider.GROQ:
167
- if self.DEFAULT_MODEL is None:
168
- self.DEFAULT_MODEL = GroqModelName.LLAMA_31_8B
169
- self.AVAILABLE_MODELS.update(set(GroqModelName))
170
- case Provider.AWS:
171
- if self.DEFAULT_MODEL is None:
172
- self.DEFAULT_MODEL = AWSModelName.BEDROCK_HAIKU
173
- self.AVAILABLE_MODELS.update(set(AWSModelName))
174
- case Provider.OLLAMA:
175
- if self.DEFAULT_MODEL is None:
176
- self.DEFAULT_MODEL = OllamaModelName.OLLAMA_GENERIC
177
- self.AVAILABLE_MODELS.update(set(OllamaModelName))
178
- case Provider.FAKE:
179
- if self.DEFAULT_MODEL is None:
180
- self.DEFAULT_MODEL = FakeModelName.FAKE
181
- self.AVAILABLE_MODELS.update(set(FakeModelName))
182
- case Provider.AZURE_OPENAI:
183
- if self.DEFAULT_MODEL is None:
184
- self.DEFAULT_MODEL = AzureOpenAIModelName.AZURE_GPT_4O_MINI
185
- self.AVAILABLE_MODELS.update(set(AzureOpenAIModelName))
186
- # Validate Azure OpenAI settings if Azure provider is available
187
- if not self.AZURE_OPENAI_API_KEY:
188
- raise ValueError("AZURE_OPENAI_API_KEY must be set")
189
- if not self.AZURE_OPENAI_ENDPOINT:
190
- raise ValueError("AZURE_OPENAI_ENDPOINT must be set")
191
- if not self.AZURE_OPENAI_DEPLOYMENT_MAP:
192
- raise ValueError("AZURE_OPENAI_DEPLOYMENT_MAP must be set")
193
-
194
- # Parse deployment map if it's a string
195
- if isinstance(self.AZURE_OPENAI_DEPLOYMENT_MAP, str):
196
- try:
197
- self.AZURE_OPENAI_DEPLOYMENT_MAP = loads(
198
- self.AZURE_OPENAI_DEPLOYMENT_MAP
199
- )
200
- except Exception as e:
201
- raise ValueError(f"Invalid AZURE_OPENAI_DEPLOYMENT_MAP JSON: {e}")
202
-
203
- # Validate required deployments exist
204
- required_models = {"gpt-4o", "gpt-4o-mini"}
205
- missing_models = required_models - set(self.AZURE_OPENAI_DEPLOYMENT_MAP.keys())
206
- if missing_models:
207
- raise ValueError(f"Missing required Azure deployments: {missing_models}")
208
- case _:
209
- raise ValueError(f"Unknown provider: {provider}")
210
-
211
- @computed_field # type: ignore[prop-decorator]
212
- @property
213
- def BASE_URL(self) -> str:
214
- return f"http://{self.HOST}:{self.PORT}"
215
-
216
- @computed_field # type: ignore[prop-decorator]
217
- @property
218
- def is_dev(self) -> bool:
219
- return self.MODE and self.MODE.lower() == "dev"
220
-
221
-
222
- settings = Settings()