FIN_ASSISTANT / comparer.py
QAway-to
model change
a1ca5ac
raw
history blame
2 kB
import asyncio
from fetch import extract_portfolio_id, fetch_metrics_async
from prompts import TEST1
from openai import OpenAI
from useCasesReferences import REFERENCE_COMPARISON_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_COMPARISON_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}"