| """Settings and configuration management.""" |
|
|
| import os |
| from pathlib import Path |
| from typing import Optional |
|
|
| from dotenv import load_dotenv |
| from pydantic import Field |
| from pydantic_settings import BaseSettings |
|
|
| |
| load_dotenv() |
|
|
|
|
| class Settings(BaseSettings): |
| """Application settings loaded from environment variables.""" |
|
|
| |
| openai_api_key: str = Field(..., description="OpenAI API key") |
| openai_model: str = Field(default="gpt-4o-mini", description="OpenAI model to use") |
| temperature: float = Field(default=0.7, description="LLM temperature") |
| max_tokens: int = Field(default=1000, description="Maximum tokens in response") |
|
|
| |
| langchain_tracing_v2: bool = Field(default=False, description="Enable LangSmith tracing") |
| langchain_api_key: Optional[str] = Field(default=None, description="LangSmith API key") |
| langchain_project: str = Field( |
| default="langgraph-agent", description="LangSmith project name" |
| ) |
|
|
| |
| project_root: Path = Field( |
| default_factory=lambda: Path(__file__).parent.parent, |
| description="Project root directory", |
| ) |
| docs_dir: Path = Field( |
| default_factory=lambda: Path(__file__).parent.parent / "docs", |
| description="Documentation directory", |
| ) |
|
|
| class Config: |
| """Pydantic configuration.""" |
|
|
| env_file = ".env" |
| env_file_encoding = "utf-8" |
| case_sensitive = False |
|
|
|
|
| def get_settings() -> Settings: |
| """Get application settings instance.""" |
| return Settings() |
|
|
| |
|
|