File size: 1,997 Bytes
0d80e79
 
e631111
00ddeb7
a1ca5ac
0d80e79
00ddeb7
 
 
 
0d80e79
ceee2e5
 
 
00ddeb7
d494c47
00ddeb7
 
0d80e79
 
 
 
 
 
 
 
00ddeb7
 
 
 
 
 
a1ca5ac
00ddeb7
0d80e79
 
b678d7e
0d80e79
a39e805
0d80e79
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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}"