init. project
This commit is contained in:
123
rag-web-ui/backend/app/core/config.py
Normal file
123
rag-web-ui/backend/app/core/config.py
Normal file
@@ -0,0 +1,123 @@
|
||||
import os
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic_settings import BaseSettings
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
PROJECT_NAME: str = "RAG Web UI" # Project name
|
||||
VERSION: str = "0.1.0" # Project version
|
||||
API_V1_STR: str = "/api" # API version string
|
||||
|
||||
# MySQL settings
|
||||
MYSQL_SERVER: str = os.getenv("MYSQL_SERVER", "localhost")
|
||||
MYSQL_PORT: int = int(os.getenv("MYSQL_PORT", "3306"))
|
||||
MYSQL_USER: str = os.getenv("MYSQL_USER", "ragagent")
|
||||
MYSQL_PASSWORD: str = os.getenv("MYSQL_PASSWORD", "ragagent")
|
||||
MYSQL_DATABASE: str = os.getenv("MYSQL_DATABASE", "ragagent")
|
||||
SQLALCHEMY_DATABASE_URI: Optional[str] = None
|
||||
|
||||
@property
|
||||
def get_database_url(self) -> str:
|
||||
if self.SQLALCHEMY_DATABASE_URI:
|
||||
return self.SQLALCHEMY_DATABASE_URI
|
||||
return (
|
||||
f"mysql+mysqlconnector://{self.MYSQL_USER}:{self.MYSQL_PASSWORD}"
|
||||
f"@{self.MYSQL_SERVER}:{self.MYSQL_PORT}/{self.MYSQL_DATABASE}"
|
||||
)
|
||||
|
||||
# JWT settings
|
||||
SECRET_KEY: str = os.getenv("SECRET_KEY", "your-secret-key-here")
|
||||
ALGORITHM: str = "HS256"
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES: int = int(os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "10080"))
|
||||
|
||||
# Chat Provider settings
|
||||
CHAT_PROVIDER: str = os.getenv("CHAT_PROVIDER", "openai")
|
||||
|
||||
# Embeddings settings
|
||||
EMBEDDINGS_PROVIDER: str = os.getenv("EMBEDDINGS_PROVIDER", "openai")
|
||||
|
||||
# MinIO settings
|
||||
MINIO_ENDPOINT: str = os.getenv("MINIO_ENDPOINT", "localhost:9000")
|
||||
MINIO_ACCESS_KEY: str = os.getenv("MINIO_ACCESS_KEY", "minioadmin")
|
||||
MINIO_SECRET_KEY: str = os.getenv("MINIO_SECRET_KEY", "minioadmin")
|
||||
MINIO_BUCKET_NAME: str = os.getenv("MINIO_BUCKET_NAME", "documents")
|
||||
|
||||
# Shared model API key fallback
|
||||
API_KEY: str = os.getenv("API_KEY", "")
|
||||
|
||||
# OpenAI settings
|
||||
OPENAI_API_BASE: str = os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1")
|
||||
OPENAI_API_KEY: str = os.getenv(
|
||||
"OPENAI_API_KEY", os.getenv("API_KEY", "your-openai-api-key-here")
|
||||
)
|
||||
OPENAI_MODEL: str = os.getenv("OPENAI_MODEL", "gpt-4")
|
||||
OPENAI_EMBEDDINGS_MODEL: str = os.getenv("OPENAI_EMBEDDINGS_MODEL", "text-embedding-ada-002")
|
||||
|
||||
# DashScope settings
|
||||
DASH_SCOPE_API_KEY: str = os.getenv(
|
||||
"DASH_SCOPE_API_KEY",
|
||||
os.getenv("DASHSCOPE_API_KEY", os.getenv("API_KEY", "")),
|
||||
)
|
||||
DASH_SCOPE_API_BASE: str = os.getenv(
|
||||
"DASH_SCOPE_API_BASE", "https://dashscope.aliyuncs.com/compatible-mode/v1"
|
||||
)
|
||||
DASH_SCOPE_CHAT_MODEL: str = os.getenv("DASH_SCOPE_CHAT_MODEL", "qwen3-max")
|
||||
DASH_SCOPE_EMBEDDINGS_MODEL: str = os.getenv("DASH_SCOPE_EMBEDDINGS_MODEL", "")
|
||||
|
||||
# Vector Store settings
|
||||
VECTOR_STORE_TYPE: str = os.getenv("VECTOR_STORE_TYPE", "chroma")
|
||||
|
||||
# External reranker settings
|
||||
RERANKER_API_URL: str = os.getenv("RERANKER_API_URL", "")
|
||||
RERANKER_API_KEY: str = os.getenv(
|
||||
"RERANKER_API_KEY",
|
||||
os.getenv(
|
||||
"DASH_SCOPE_API_KEY",
|
||||
os.getenv("DASHSCOPE_API_KEY", os.getenv("API_KEY", "")),
|
||||
),
|
||||
)
|
||||
RERANKER_MODEL: str = os.getenv("RERANKER_MODEL", "")
|
||||
RERANKER_TIMEOUT_SECONDS: float = float(os.getenv("RERANKER_TIMEOUT_SECONDS", "8"))
|
||||
RERANKER_WEIGHT: float = float(os.getenv("RERANKER_WEIGHT", "0.75"))
|
||||
|
||||
# GraphRAG settings
|
||||
GRAPHRAG_ENABLED: bool = os.getenv("GRAPHRAG_ENABLED", "false").lower() == "true"
|
||||
GRAPHRAG_WORKING_DIR: str = os.getenv("GRAPHRAG_WORKING_DIR", "./graphrag_cache")
|
||||
GRAPHRAG_GRAPH_STORAGE: str = os.getenv("GRAPHRAG_GRAPH_STORAGE", "neo4j")
|
||||
GRAPHRAG_QUERY_LEVEL: int = int(os.getenv("GRAPHRAG_QUERY_LEVEL", "2"))
|
||||
GRAPHRAG_LOCAL_TOP_K: int = int(os.getenv("GRAPHRAG_LOCAL_TOP_K", "20"))
|
||||
GRAPHRAG_ENTITY_EXTRACT_MAX_GLEANING: int = int(os.getenv("GRAPHRAG_ENTITY_EXTRACT_MAX_GLEANING", "1"))
|
||||
GRAPHRAG_EMBEDDING_DIM: int = int(os.getenv("GRAPHRAG_EMBEDDING_DIM", "1024"))
|
||||
GRAPHRAG_EMBEDDING_MAX_TOKEN_SIZE: int = int(os.getenv("GRAPHRAG_EMBEDDING_MAX_TOKEN_SIZE", "8192"))
|
||||
|
||||
# Neo4j settings
|
||||
NEO4J_URL: str = os.getenv("NEO4J_URL", "bolt://localhost:7687")
|
||||
NEO4J_USERNAME: str = os.getenv("NEO4J_USERNAME", "neo4j")
|
||||
NEO4J_PASSWORD: str = os.getenv("NEO4J_PASSWORD", "neo4j")
|
||||
|
||||
# Chroma DB settings
|
||||
CHROMA_DB_HOST: str = os.getenv("CHROMA_DB_HOST", "chromadb")
|
||||
CHROMA_DB_PORT: int = int(os.getenv("CHROMA_DB_PORT", "8000"))
|
||||
|
||||
# Qdrant DB settings
|
||||
QDRANT_URL: str = os.getenv("QDRANT_URL", "http://localhost:6333")
|
||||
QDRANT_PREFER_GRPC: bool = os.getenv("QDRANT_PREFER_GRPC", "true").lower() == "true"
|
||||
|
||||
# Deepseek settings
|
||||
DEEPSEEK_API_KEY: str = ""
|
||||
DEEPSEEK_API_BASE: str = "https://api.deepseek.com/v1" # 默认 API 地址
|
||||
DEEPSEEK_MODEL: str = "deepseek-chat" # 默认模型名称
|
||||
|
||||
# Ollama settings
|
||||
OLLAMA_API_BASE: str = "http://localhost:11434"
|
||||
OLLAMA_MODEL: str = "deepseek-r1:7b"
|
||||
OLLAMA_EMBEDDINGS_MODEL: str = os.getenv(
|
||||
"OLLAMA_EMBEDDINGS_MODEL", "nomic-embed-text"
|
||||
) # Added this line
|
||||
|
||||
class Config:
|
||||
env_file = ".env"
|
||||
|
||||
|
||||
settings = Settings()
|
||||
Reference in New Issue
Block a user