CoolFace
Apppublic

nvtitan/graphRAG

sourceHugging Facemitupdated 10mo agoView on Hugging Face
0likes
config.py128 linesDownload Raw Back to root
1"""2Configuration management for GraphLLM system3"""4from pydantic_settings import BaseSettings5from pydantic import Field, field_validator6from typing import Optional7import os8 9 10class Settings(BaseSettings):11    """Application settings loaded from environment variables"""12 13    # Application14    app_name: str = "GraphLLM"15    app_version: str = "1.0.0"16    environment: str = "development"17    debug: bool = True18 19    # API20    api_host: str = "0.0.0.0"21    api_port: int = 800022    api_workers: int = 423 24    # LLM Settings - Gemini (Primary)25    gemini_api_key: str = Field(default="", env="GEMINI_API_KEY")26    gemini_model: str = "gemini-2.5-flash"27 28    # LLM Settings - Mistral (Fallback)29    mistral_api_key: str = Field(default="", env="MISTRAL_API_KEY")30    mistral_model: str = "mistral-7b-instruct-v0.1"31 32    # LLM Parameters33    llm_temperature: float = 0.034    llm_max_tokens: int = 204835    llm_timeout: int = 12036 37    # Embedding Settings38    embedding_model: str = "sentence-transformers/multi-qa-MiniLM-L6-cos-v1"39    embedding_dimension: int = 38440    embedding_batch_size: int = 3241 42    # FAISS Vector DB43    faiss_index_path: str = "./data/faiss_index"44    faiss_metric: str = "cosine"45 46    # Neo4j Graph DB47    neo4j_uri: str = "bolt://localhost:7687"48    neo4j_user: str = "neo4j"49    neo4j_password: str = Field(default="", env="NEO4J_PASSWORD")50    neo4j_database: str = "neo4j"51 52    # PostgreSQL53    postgres_host: str = "localhost"54    postgres_port: int = 543255    postgres_db: str = "graphllm"56    postgres_user: str = "postgres"57    postgres_password: str = Field(default="", env="POSTGRES_PASSWORD")58 59    # MongoDB (optional)60    mongodb_uri: str = "mongodb://localhost:27017"61    mongodb_database: str = "graphllm"62 63    # Chunking64    chunk_size: int = 51265    chunk_overlap: int = 12866    min_chunk_size: int = 10067 68    # Triplet Extraction69    triplet_confidence_threshold: float = 0.670    entity_similarity_threshold: float = 0.8571    max_triples_per_chunk: int = 1072 73    # Graph Pruning74    node_importance_threshold: float = 0.375    edge_confidence_threshold: float = 0.576    min_node_mentions: int = 277 78    # RAG79    rag_top_k: int = 1080    rag_rerank_top_k: int = 581    max_context_length: int = 400082 83    # File Upload84    max_file_size_mb: int = 5085    allowed_extensions: str = "pdf"86    upload_dir: str = "./data/uploads"87 88    # Storage89    data_dir: str = "./data"90    logs_dir: str = "./logs"91    cache_dir: str = "./cache"92 93    # Monitoring94    enable_metrics: bool = True95    metrics_port: int = 909096    log_level: str = "INFO"97 98    @property99    def postgres_url(self) -> str:100        """Build PostgreSQL connection URL"""101        return f"postgresql://{self.postgres_user}:{self.postgres_password}@{self.postgres_host}:{self.postgres_port}/{self.postgres_db}"102 103    @property104    def max_file_size_bytes(self) -> int:105        """Convert MB to bytes"""106        return self.max_file_size_mb * 1024 * 1024107 108    class Config:109        env_file = ".env"110        case_sensitive = False111 112 113# Global settings instance114settings = Settings()115 116 117def ensure_directories():118    """Ensure all required directories exist"""119    dirs = [120        settings.data_dir,121        settings.upload_dir,122        settings.logs_dir,123        settings.cache_dir,124        settings.faiss_index_path,125    ]126    for directory in dirs:127        os.makedirs(directory, exist_ok=True)128