dapa / src /settings.py
raushan-in's picture
file added
66c0d0c
from typing import Any
from dotenv import find_dotenv
from pydantic import SecretStr, computed_field
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
"""
Environment specific configuration
"""
model_config = SettingsConfigDict(
env_file=find_dotenv(),
env_file_encoding="utf-8",
env_ignore_empty=True,
extra="ignore",
validate_default=False,
)
# path
MODE: str | None = None # dev, prod
HOST: str = "0.0.0.0"
PORT: int = 8080
# Secret keys
AUTH_SECRET: SecretStr | None = None
JWT_ALGORITHM: str = "HS256"
# LLM API keys
GROQ_API_KEY: SecretStr
GROQ_MODEL: str = "llama3-8b-8192"
GROQ_MODEL_TEMP: float = 0.5
# Tracing for Langchain
LANGCHAIN_TRACING_V2: bool = (
False # Data will be sent to Langchain for monitering and improvement, If enabled.
)
LANGCHAIN_PROJECT: str = "default"
LANGCHAIN_ENDPOINT: str = "https://api.smith.langchain.com"
LANGCHAIN_API_KEY: SecretStr | None = None # LangSmith API key
# DB
DATABASE_URL: SecretStr
def model_post_init(self, __context: Any) -> None:
"""
Validate the settings after initialization
"""
if self.LANGCHAIN_TRACING_V2 and self.LANGCHAIN_API_KEY is None:
raise ValueError("Tracing is enabled, but LANGCHAIN_API_KEY is missing!")
if self.GROQ_API_KEY is None:
raise ValueError(
"GROQ_API_KEY is required! This key enables the application to connect with an advanced language model that understands queries and provides intelligent responses. You can generate your API at https://console.groq.com/keys ."
)
@computed_field
@property
def BASE_URL(self) -> str:
return f"http://{self.HOST}:{self.PORT}"
def is_dev(self) -> bool:
return self.MODE == "dev"
settings = Settings()