File size: 1,456 Bytes
4381f6e
057fb7e
b58afd7
a1ca5ac
c373fe4
e545578
06e5903
 
 
e63adc7
 
bd902db
e63adc7
380268b
06e5903
 
aab93e8
06e5903
 
 
 
 
c3841c4
06e5903
f4f3f95
e63adc7
23af882
e63adc7
4fdc68b
e63adc7
 
 
 
 
 
 
8219948
 
 
 
e63adc7
 
06e5903
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

from prompts import TEST1
from fetch import extract_portfolio_id, fetch_metrics_async
from useCasesReferences import REFERENCE_PROMPT

from openai import OpenAI
import asyncio

def analyze_portfolio_streaming(text: str, client: OpenAI):
    portfolio_id = extract_portfolio_id(text)
    if not portfolio_id:
        yield "❗ Укажите корректный portfolioId или ссылку."
        return

    yield "⏳ Загружаю метрики портфеля..."

    metrics = asyncio.run(fetch_metrics_async(portfolio_id))
    if not metrics:
        yield "❗ Не удалось получить метрики портфеля."
        return

    metrics_text = ", ".join([f"{k}: {v}" for k, v in metrics.items()])
    prompt = f"{REFERENCE_PROMPT} используй этот промпт для анализа:{metrics_text}"

    try:
        response_llm = 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_llm:
            delta = chunk.choices[0].delta.content
            if delta:
                partial += delta
                yield partial

    except Exception as e:
        yield f"❌ Ошибка при генерации ответа: {e}"