Spaces:
Running
Running
File size: 2,296 Bytes
8c35759 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
"""Application settings and configuration management."""
from __future__ import annotations
import os
from dataclasses import dataclass, field
from typing import Optional
from dotenv import load_dotenv
@dataclass
class Neo4jConfig:
"""Neo4j database connection configuration."""
uri: str = ""
username: str = "neo4j"
password: str = ""
database: str = "neo4j"
def is_valid(self) -> bool:
return bool(self.uri and self.username and self.password)
@dataclass
class TogetherAIConfig:
"""Together AI API configuration."""
api_key: str = ""
chat_model: str = "meta-llama/meta-llama-3.1-8b-instruct-turbo"
embedding_model: str = "BAAI/bge-base-en-v1.5"
def is_valid(self) -> bool:
return bool(self.api_key)
@dataclass
class AppConfig:
"""Application-level configuration."""
port: int = 7860
host: str = "0.0.0.0"
@dataclass
class Settings:
"""Centralized application settings."""
neo4j: Neo4jConfig = field(default_factory=Neo4jConfig)
together_ai: TogetherAIConfig = field(default_factory=TogetherAIConfig)
app: AppConfig = field(default_factory=AppConfig)
@classmethod
def from_env(cls, dotenv_path: Optional[str] = None) -> "Settings":
"""Load settings from environment variables."""
load_dotenv(dotenv_path)
neo4j = Neo4jConfig(
uri=os.getenv("NEO4J_URI", ""),
username=os.getenv("NEO4J_USERNAME", "neo4j"),
password=os.getenv("NEO4J_PASSWORD", ""),
database=os.getenv("NEO4J_DATABASE", "neo4j"),
)
together_ai = TogetherAIConfig(
api_key=os.getenv("TOGETHER_API_KEY", ""),
chat_model=os.getenv("TOGETHER_CHAT_MODEL", "meta-llama/meta-llama-3.1-8b-instruct-turbo"),
embedding_model=os.getenv("TOGETHER_EMBED_MODEL", "BAAI/bge-base-en-v1.5"),
)
app = AppConfig(
port=int(os.getenv("PORT", "7860")),
host=os.getenv("HOST", "0.0.0.0"),
)
return cls(neo4j=neo4j, together_ai=together_ai, app=app)
def apply_to_env(self) -> None:
"""Apply current settings to environment variables."""
if self.together_ai.api_key:
os.environ["TOGETHER_API_KEY"] = self.together_ai.api_key
|