"""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 environment variables from .env file load_dotenv() class Settings(BaseSettings): """Application settings loaded from environment variables.""" # OpenAI Configuration 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") # LangSmith Configuration (optional) 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 Paths 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() # Made with Bob