import asyncio from fetch import extract_portfolio_id, fetch_metrics_async from prompts import TEST1 from openai import OpenAI from useCasesPrompts import REFERENCE_PROMPT # Сравнение двух портфелей def compare_portfolio(text1: str, text2: str, client: OpenAI): id1 = extract_portfolio_id(text1) id2 = extract_portfolio_id(text2) if text2 == text1: yield "❗ Пожалуйста, укажите два разных portfolioId для сравнения." return if not id1 or not id2: yield "❗ Один или оба portfolioId некорректны!" return try: # Асинхронное получение метрик m1 = asyncio.run(fetch_metrics_async(id1)) m2 = asyncio.run(fetch_metrics_async(id2)) except Exception as e: yield f"❌ Ошибка при получении данных: {e}" return if not m1 or not m2: yield "❗ Не удалось получить метрики одного из портфелей." return m1_text = ", ".join([f"{k}: {v}" for k, v in m1.items()]) m2_text = ", ".join([f"{k}: {v}" for k, v in m2.items()]) prompt= f"{REFERENCE_PROMPT} используй этот промпт для сравнения:Потрфель 'А'{m1_text}Портфель 'Б': {m2_text}" try: response = client.chat.completions.create( model="meta-llama/Meta-Llama-3.1-8B-Instruct", messages=[ {"role": "system", "content": TEST1}, {"role": "user", "content": prompt} ], stream=True ) partial = "" for chunk in response: delta = chunk.choices[0].delta.content if delta: partial += delta yield partial except Exception as e: yield f"❌ Ошибка при обработке запроса LLM: {e}"