# Анализ одного портфеля 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}"