# -*- coding: utf-8 -*- """ Модуль проверки противоречий между несколькими фрагментами текста. Анализирует логические, числовые и терминологические расхождения. АДАПТАЦИЯ: теперь функция принимает промпт как аргумент. """ import logging from typing import List from core.services.giga_client import GigaClient logger = logging.getLogger(__name__) async def check_consistency( giga: GigaClient, chunks: List[str], query: str, prompt_text: str, bot_config, ) -> str: """ Проверяет, есть ли противоречия между переданными фрагментами. Аргументы: giga (GigaClient): клиент GigaChat chunks (List[str]): список текстовых фрагментов (минимум 2) query (str): исходный вопрос пользователя prompt_text (str): содержимое промпта проверки согласованности bot_config (BotConfig): объект конфигурации Возвращает: str: "[OK]" или "[CONFLICT] ..." с описанием """ if len(chunks) < 2: return "Недостаточно фрагментов для проверки (нужно минимум 2)." if not prompt_text: logger.warning("Промпт проверки согласованности не загружен") return "Промпт проверки согласованности не загружен." cons_cfg = getattr(bot_config, 'consistency', {}) temperature = cons_cfg.get('temperature', 0.1) max_fragments = cons_cfg.get('max_fragments', 5) if len(chunks) > max_fragments: logger.debug(f"Ограничиваем количество фрагментов с {len(chunks)} до {max_fragments}") chunks = chunks[:max_fragments] combined = "\n\n---\n\n".join( [f"Фрагмент {i+1}:\n{chunk}" for i, chunk in enumerate(chunks)] ) full_prompt = f"{prompt_text}\n\nЗапрос: {query}\n\nФрагменты:\n{combined}" try: response = await giga.chat( history=[], query=full_prompt, system_prompt=None, file_id=None, temperature=temperature ) return response.strip() except Exception as e: logger.error(f"Ошибка проверки согласованности: {e}", exc_info=True) return "Ошибка при проверке противоречий."