QAway-to commited on
Commit
b52d86a
·
1 Parent(s): a4c20c7

without k_metrics

Browse files
Files changed (1) hide show
  1. app.py +72 -23
app.py CHANGED
@@ -86,6 +86,38 @@ def fetch_metrics(portfolio_id: str) -> dict | None:
86
  except:
87
  return None
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  # Анализ одного портфеля
90
  def analyze_portfolio_streaming(text: str):
91
  portfolio_id = extract_portfolio_id(text)
@@ -93,30 +125,47 @@ def analyze_portfolio_streaming(text: str):
93
  yield "❗ Укажите корректный portfolioId или ссылку."
94
  return
95
 
96
- metrics = fetch_metrics(portfolio_id)
97
- if not metrics:
98
- yield "❗ Не удалось получить метрики портфеля."
99
- return
100
-
101
- metrics_text = ", ".join([f"{k}: {v}" for k, v in metrics.items()])
102
- prompt = f"Вот метрики портфеля: {metrics_text}. Проанализируй их и объясни сильные и слабые стороны на русском языке, как финансовый аналитик."
103
-
104
- response_llm = client.chat.completions.create(
105
- model="meta-llama/Meta-Llama-3.1-8B-Instruct",
106
- messages=[
107
- {"role": "system", "content": SYSTEM_PROMPT},
108
- {"role": "user", "content": prompt}
109
- ],
110
- stream=True
111
- )
112
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
- partial = ""
115
- for chunk in response_llm:
116
- delta = chunk.choices[0].delta.content
117
- if delta:
118
- partial += delta
119
- yield partial
120
 
121
  # Сравнение двух портфелей
122
  def compare_portfolios_streaming(text1: str, text2: str):
 
86
  except:
87
  return None
88
 
89
+ # # Анализ одного портфеля
90
+ # def analyze_portfolio_streaming(text: str):
91
+ # portfolio_id = extract_portfolio_id(text)
92
+ # if not portfolio_id:
93
+ # yield "❗ Укажите корректный portfolioId или ссылку."
94
+ # return
95
+ #
96
+ # metrics = fetch_metrics(portfolio_id)
97
+ # if not metrics:
98
+ # yield "❗ Не удалось получить метрики портфеля."
99
+ # return
100
+ #
101
+ # metrics_text = ", ".join([f"{k}: {v}" for k, v in metrics.items()])
102
+ # prompt = f"Вот метрики портфеля: {metrics_text}. Проанализируй их и объясни сильные и слабые стороны на русском языке, как финансовый аналитик."
103
+ #
104
+ # response_llm = client.chat.completions.create(
105
+ # model="meta-llama/Meta-Llama-3.1-8B-Instruct",
106
+ # messages=[
107
+ # {"role": "system", "content": SYSTEM_PROMPT},
108
+ # {"role": "user", "content": prompt}
109
+ # ],
110
+ # stream=True
111
+ # )
112
+ #
113
+ #
114
+ # partial = ""
115
+ # for chunk in response_llm:
116
+ # delta = chunk.choices[0].delta.content
117
+ # if delta:
118
+ # partial += delta
119
+ # yield partial
120
+
121
  # Анализ одного портфеля
122
  def analyze_portfolio_streaming(text: str):
123
  portfolio_id = extract_portfolio_id(text)
 
125
  yield "❗ Укажите корректный portfolioId или ссылку."
126
  return
127
 
128
+ try:
129
+ # Получение JSON по API
130
+ url = f"https://api.tradelink.pro/portfolio/get?portfolioId={portfolio_id}&extended=1&declaration=1&step=day&lang=en&incViews=1"
131
+ response = requests.get(url)
132
+ json_data = response.json()
133
+ extended = json_data.get("data", {}).get("extended", {})
134
+
135
+ if not extended:
136
+ yield "❗ Метрики не найдены в ответе API."
137
+ return
138
+
139
+ # Передаём все числовые метрики, без фильтрации
140
+ metrics = {k: v for k, v in extended.items() if isinstance(v, (int, float))}
141
+ if not metrics:
142
+ yield "❗ Нет числовых метрик для анализа."
143
+ return
144
+
145
+ metrics_text = ", ".join([f"{k}: {v}" for k, v in metrics.items()])
146
+ prompt = f"""Вот метрики портфеля: {metrics_text}.
147
+ Проанализируй их и объясни сильные и слабые стороны на русском языке, как финансовый аналитик."""
148
+
149
+ # Запрос к модели
150
+ response_llm = client.chat.completions.create(
151
+ model="meta-llama/Meta-Llama-3.1-8B-Instruct",
152
+ messages=[
153
+ {"role": "system", "content": "Ты — финансовый аналитик."},
154
+ {"role": "user", "content": prompt}
155
+ ],
156
+ stream=True
157
+ )
158
+
159
+ partial = ""
160
+ for chunk in response_llm:
161
+ delta = chunk.choices[0].delta.content
162
+ if delta:
163
+ partial += delta
164
+ yield partial
165
+
166
+ except Exception as e:
167
+ yield f"❌ Ошибка при обработке: {e}"
168
 
 
 
 
 
 
 
169
 
170
  # Сравнение двух портфелей
171
  def compare_portfolios_streaming(text1: str, text2: str):