Spaces:
Sleeping
Sleeping
| # Анализ одного портфеля | |
| 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", | |
| model="meta-llama/Meta-Llama-3.1-8B-Instruct", | |
| 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}" | |