Spaces:
Sleeping
Sleeping
File size: 2,134 Bytes
e63adc7 fe31096 e545578 fe31096 e545578 e63adc7 380268b f4f3f95 e63adc7 f4f3f95 e63adc7 f4f3f95 e63adc7 f4f3f95 e63adc7 f4f3f95 e63adc7 f4f3f95 e63adc7 |
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 requests
from fetch import extract_portfolio_id
from prompts import SYSTEM_PROMPT
from openai import OpenAI
def analyze_portfolio_streaming(text: str, client:OpenAI):
portfolio_id = extract_portfolio_id(text)
if not portfolio_id:
yield "❗ Укажите корректный portfolioId или ссылку."
return
try:
# Получение JSON по API
url = f"https://api.tradelink.pro/portfolio/get?portfolioId={portfolio_id}&extended=1&declaration=1&step=day&lang=en&incViews=1"
response = requests.get(url)
json_data = response.json()
extended = json_data.get("data", {}).get("extended", {})
if not extended:
yield "❗ Метрики не найдены в ответе API."
return
# Передаём все числовые метрики, без фильтрации
metrics = {k: v for k, v in extended.items() if isinstance(v, (int, float))}
if not metrics:
yield "❗ Нет числовых метрик для анализа."
return
metrics_text = ", ".join([f"{k}: {v}" for k, v in metrics.items()])
prompt = f"""Вот метрики портфеля: {metrics_text}.
Проанализируй их и объясни сильные и слабые стороны на русском языке, как финансовый аналитик."""
# Запрос к модели
response_llm = client.chat.completions.create(
model="nasiruddin15/Mistral-dolphin-2.8-grok-instract-2-7B-slerp",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"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}"
|