Update 9 files
- /rag/config_models.py - /rag/utils/config_loader.py - /rag/auth.py - /rag/rag_server.py - /rag/rag_api.py - /rag/rag_orchestrator.py - /rag/__init__.py - /bots/xmpp/client.py - /bots/rag_client.py
This commit is contained in:
@@ -174,6 +174,11 @@ class WebScraperConfig(BaseModel):
|
||||
max_depth: int = Field(1, description="Максимальная глубина рекурсии")
|
||||
|
||||
|
||||
class AuthConfig(BaseModel):
|
||||
"""Настройки аутентификации."""
|
||||
api_key_env: str = Field("RAG_API_KEY", description="Имя переменной окружения с API-ключом для доступа к RAG-серверу")
|
||||
|
||||
|
||||
# ============================================================
|
||||
# Главная модель конфигурации приложения
|
||||
# ============================================================
|
||||
@@ -213,6 +218,7 @@ class AppConfig(BaseModel):
|
||||
ai: AIConfig
|
||||
prompts: PromptsConfig
|
||||
web_scraper: WebScraperConfig = Field(default_factory=WebScraperConfig)
|
||||
auth: AuthConfig = Field(default_factory=AuthConfig)
|
||||
|
||||
# Дополнительные поля для путей (заполняются при загрузке)
|
||||
profile_dir: Optional[Path] = Field(None, description="Корень профиля")
|
||||
@@ -226,11 +232,17 @@ class AppConfig(BaseModel):
|
||||
# Промпты (загружаются из файлов)
|
||||
prompts_content: Optional[Dict[str, str]] = Field(default_factory=dict, description="Содержимое промптов")
|
||||
|
||||
# Приватное поле для API-ключа RAG (не сериализуется)
|
||||
_rag_api_key: Optional[str] = Field(None, description="API-ключ RAG-сервера", exclude=True)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Прокси-свойства для обратной совместимости со старым BotConfig
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
# База данных
|
||||
@property
|
||||
def rag_api_key(self) -> Optional[str]:
|
||||
return self._rag_api_key
|
||||
|
||||
@property
|
||||
def db_host(self) -> str:
|
||||
return self.database.host
|
||||
@@ -259,7 +271,6 @@ class AppConfig(BaseModel):
|
||||
def db_ssl_mode(self) -> Optional[str]:
|
||||
return self.database.ssl_mode
|
||||
|
||||
# Qdrant
|
||||
@property
|
||||
def qdrant_host(self) -> str:
|
||||
return self.qdrant.host
|
||||
@@ -284,7 +295,6 @@ class AppConfig(BaseModel):
|
||||
def qdrant_distance(self) -> str:
|
||||
return self.qdrant.distance
|
||||
|
||||
# GigaChat
|
||||
@property
|
||||
def gigachat_api_key(self) -> Optional[str]:
|
||||
return self.gigachat.api_key
|
||||
@@ -305,7 +315,6 @@ class AppConfig(BaseModel):
|
||||
def gigachat_temperature(self) -> float:
|
||||
return self.gigachat.temperature
|
||||
|
||||
# Embedding
|
||||
@property
|
||||
def embedding_cache_size(self) -> int:
|
||||
return self.embedding.cache_size
|
||||
@@ -322,7 +331,6 @@ class AppConfig(BaseModel):
|
||||
def embedding_verify_ssl(self) -> bool:
|
||||
return self.embedding.verify_ssl_certs
|
||||
|
||||
# Chunking
|
||||
@property
|
||||
def chunking_enabled(self) -> bool:
|
||||
return self.chunking.enabled
|
||||
@@ -347,7 +355,6 @@ class AppConfig(BaseModel):
|
||||
def chunking_approx_overlap_chars(self) -> int:
|
||||
return self.chunking.approx_overlap_chars
|
||||
|
||||
# RAG
|
||||
@property
|
||||
def rag_default_top_k(self) -> int:
|
||||
return self.rag.default_top_k
|
||||
@@ -380,7 +387,6 @@ class AppConfig(BaseModel):
|
||||
def rerank_min_length(self) -> int:
|
||||
return self.rag.rerank_min_length
|
||||
|
||||
# HTTP
|
||||
@property
|
||||
def http_download_timeout(self) -> int:
|
||||
return self.http.download_timeout
|
||||
@@ -389,7 +395,6 @@ class AppConfig(BaseModel):
|
||||
def http_upload_timeout(self) -> int:
|
||||
return self.http.upload_timeout
|
||||
|
||||
# Features
|
||||
@property
|
||||
def file_processing(self) -> bool:
|
||||
return self.features.file_processing
|
||||
@@ -442,7 +447,6 @@ class AppConfig(BaseModel):
|
||||
def mention_keyword(self) -> Optional[str]:
|
||||
return self.features.mention_keyword
|
||||
|
||||
# AI
|
||||
@property
|
||||
def ai_model(self) -> str:
|
||||
return self.ai.model or self.gigachat.model_generation
|
||||
@@ -455,7 +459,6 @@ class AppConfig(BaseModel):
|
||||
def ai_timeout(self) -> int:
|
||||
return self.ai.timeout
|
||||
|
||||
# Cleanup
|
||||
@property
|
||||
def temp_cleanup_days(self) -> int:
|
||||
return self.cleanup.temp_days
|
||||
@@ -472,7 +475,6 @@ class AppConfig(BaseModel):
|
||||
def user_data_cleanup_days(self) -> int:
|
||||
return self.cleanup.user_data_days
|
||||
|
||||
# Web scraper
|
||||
@property
|
||||
def ws_max_pages(self) -> int:
|
||||
return self.web_scraper.max_pages
|
||||
@@ -481,7 +483,6 @@ class AppConfig(BaseModel):
|
||||
def ws_max_depth(self) -> int:
|
||||
return self.web_scraper.max_depth
|
||||
|
||||
# Prompts temperatures
|
||||
@property
|
||||
def intent_temperature(self) -> float:
|
||||
return self.prompts.intent.temperature
|
||||
@@ -522,7 +523,6 @@ class AppConfig(BaseModel):
|
||||
def generate_document_temperature(self) -> float:
|
||||
return self.prompts.generate_document.temperature
|
||||
|
||||
# File permissions
|
||||
@property
|
||||
def file_mode(self) -> int:
|
||||
return int(self.file_permissions.mode, 8)
|
||||
|
||||
Reference in New Issue
Block a user