Update 5 files

- /rag/config_models.py
- /rag/utils/config_loader.py
- /rag/rag_orchestrator.py
- /rag/rag_server.py
- /rag/rag_api.py
This commit is contained in:
Markov Andrey
2026-06-30 14:11:06 +00:00
parent a3f52888db
commit 068504c988
5 changed files with 395 additions and 102 deletions

View File

@@ -9,14 +9,11 @@ import os
import yaml
import logging
from pathlib import Path
from typing import Optional, Dict, Any
from typing import Dict, Any
from dotenv import load_dotenv
from .config_models import AppConfig, DatabaseConfig, QdrantConfig, GigaChatConfig, \
EmbeddingConfig, ChunkingConfig, RAGConfig, HTTPServerConfig, HTTPConfig, \
SummarizationConfig, PathsConfig, FeaturesConfig, CleanupConfig, FilePermissionsConfig, \
AIConfig, PromptsConfig, PromptTemperatures
from ..config_models import AppConfig
logger = logging.getLogger(__name__)
@@ -66,16 +63,13 @@ def load_config(profile_dir: str) -> AppConfig:
}
# Подставляем пароли и ключи в секции
# В database: password_env -> фактический пароль
if 'database' in merged and 'password_env' in merged['database']:
env_name = merged['database']['password_env']
merged['database']['password'] = env_vars.get(env_name)
if not merged['database']['password']:
raise ValueError(f"Переменная окружения {env_name} не задана или пуста")
# удаляем password_env, чтобы не передавать в модель
del merged['database']['password_env']
# Аналогично для gigachat
if 'gigachat' in merged and 'credentials_env' in merged['gigachat']:
env_name = merged['gigachat']['credentials_env']
merged['gigachat']['api_key'] = env_vars.get(env_name)
@@ -83,7 +77,6 @@ def load_config(profile_dir: str) -> AppConfig:
raise ValueError(f"Переменная окружения {env_name} не задана или пуста")
del merged['gigachat']['credentials_env']
# Для XMPP пароля
if 'password_env' in merged:
env_name = merged['password_env']
merged['xmpp_password'] = env_vars.get(env_name)
@@ -91,30 +84,30 @@ def load_config(profile_dir: str) -> AppConfig:
raise ValueError(f"Переменная окружения {env_name} не задана или пуста")
del merged['password_env']
# Для SaluteSpeech (если есть в секции features или отдельно)
# У нас он может быть в .env, но в модели нет отдельного поля; добавим в итоговый объект
merged['salute_speech_auth'] = env_vars.get('SALUTE_SPEECH_AUTH')
# Преобразуем пути в абсолютные с учётом profile_dir
paths_section = merged.get('paths', {})
# Если пути относительные, дополняем их относительно profile_dir
for key in ['data_dir', 'temp_dir', 'prompts_dir', 'upload_dir', 'log_dir']:
if key in paths_section:
p = Path(paths_section[key])
if not p.is_absolute():
paths_section[key] = str(profile_path / p)
# log_filename оставляем как есть
# Добавляем profile_dir в merged для передачи в модель
# Добавляем profile_dir
merged['profile_dir'] = str(profile_path)
# Создаём экземпляр AppConfig (Pydantic выполнит валидацию)
# Добавляем web_scraper (если отсутствует)
if 'web_scraper' not in merged:
merged['web_scraper'] = {'max_pages': 5, 'max_depth': 1}
# Создаём экземпляр AppConfig
try:
config = AppConfig(**merged)
except Exception as e:
raise ValueError(f"Ошибка валидации конфигурации: {e}")
# Дополнительно загружаем промпты из файлов
# Загружаем промпты из файлов
prompts_dir = config.prompts_dir_path
if prompts_dir and prompts_dir.exists():
prompts_content = {}