import os from dotenv import load_dotenv from pydantic import BaseModel, Field load_dotenv() PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) class LLMConfig(BaseModel): api_key: str = Field(default=os.getenv("LLM_API_KEY", "")) base_url: str = Field(default=os.getenv("LLM_BASE_URL", "https://api.deepseek.com/v1")) model: str = Field(default=os.getenv("LLM_MODEL", "deepseek-chat")) max_tokens: int = Field(default=64000) temperature: float = Field(default=0.95) class EmbeddingConfig(BaseModel): api_key: str = Field(default=os.getenv("EMBEDDING_API_KEY", "")) api_base: str = Field(default=os.getenv("EMBEDDING_BASE_URL", "https://api.openai.com/v1")) model: str = Field(default=os.getenv("EMBEDDING_MODEL", "text-embedding-3-small")) class StorageConfig(BaseModel): data_dir: str = Field(default=os.path.join(PROJECT_ROOT, "data")) raw_dir: str = Field(default=os.path.join(PROJECT_ROOT, "data", "raw")) class VectorStoreConfig(BaseModel): persist_dir: str = Field(default=os.path.join(PROJECT_ROOT, "vector_store_data")) class Neo4jConfig(BaseModel): enabled: bool = Field(default=os.getenv("NEO4J_ENABLED", "false").lower() == "true") uri: str = Field(default=os.getenv("NEO4J_URI", "bolt://localhost:7687")) user: str = Field(default=os.getenv("NEO4J_USER", "neo4j")) password: str = Field(default=os.getenv("NEO4J_PASSWORD", "")) database: str = Field(default=os.getenv("NEO4J_DATABASE", "neo4j")) class ProjectConfig(BaseModel): llm: LLMConfig = Field(default_factory=LLMConfig) embedding: EmbeddingConfig = Field(default_factory=EmbeddingConfig) storage: StorageConfig = Field(default_factory=StorageConfig) vector_store: VectorStoreConfig = Field(default_factory=VectorStoreConfig) neo4j: Neo4jConfig = Field(default_factory=Neo4jConfig) state_path: str = Field(default=os.path.join(PROJECT_ROOT, "data", "meeting_state.json")) config = ProjectConfig()