44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
|
|
import os
|
||
|
|
from pydantic import BaseModel, Field
|
||
|
|
from dotenv import load_dotenv
|
||
|
|
|
||
|
|
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 ObsidianConfig(BaseModel):
|
||
|
|
vault_path: str = Field(default=os.path.join(PROJECT_ROOT, "obsidian_vault"))
|
||
|
|
meetings_dir: str = Field(default="Meetings")
|
||
|
|
entities_dir: str = Field(default="Entities")
|
||
|
|
graphs_dir: str = Field(default="Graphs")
|
||
|
|
raw_dir: str = Field(default="Raw")
|
||
|
|
|
||
|
|
|
||
|
|
class VectorStoreConfig(BaseModel):
|
||
|
|
persist_dir: str = Field(default=os.path.join(PROJECT_ROOT, "vector_store_data"))
|
||
|
|
|
||
|
|
|
||
|
|
class ProjectConfig(BaseModel):
|
||
|
|
llm: LLMConfig = Field(default_factory=LLMConfig)
|
||
|
|
embedding: EmbeddingConfig = Field(default_factory=EmbeddingConfig)
|
||
|
|
obsidian: ObsidianConfig = Field(default_factory=ObsidianConfig)
|
||
|
|
vector_store: VectorStoreConfig = Field(default_factory=VectorStoreConfig)
|
||
|
|
state_path: str = Field(default=os.path.join(PROJECT_ROOT, "obsidian_vault", "meeting_state.json"))
|
||
|
|
|
||
|
|
|
||
|
|
config = ProjectConfig()
|