QAway-to commited on
Commit
00ddeb7
·
1 Parent(s): df30e28

model change

Browse files
Files changed (2) hide show
  1. app.py +8 -3
  2. comparer.py +44 -0
app.py CHANGED
@@ -6,6 +6,7 @@ from fetch import extract_portfolio_id
6
  from fetch import fetch_metrics
7
  from openai import OpenAI
8
  from analyzer import analyze_portfolio_streaming
 
9
 
10
  api_key = os.getenv("featherless") #
11
  client = OpenAI(
@@ -69,10 +70,14 @@ def handle_chat_streaming(user_input):
69
  partial += delta
70
  yield partial
71
 
72
- def analyze_with_client(text):
73
  yield from analyze_portfolio_streaming(text, client)
74
 
75
 
 
 
 
 
76
  # Gradio интерфейс
77
  with gr.Blocks() as demo:
78
  gr.Markdown("## 🧠 Анализ и сравнение инвестиционных портфелей Tradelink")
@@ -82,7 +87,7 @@ with gr.Blocks() as demo:
82
  analyze_button = gr.Button("🔍 Проанализировать")
83
  output_box = gr.Textbox(label="📈 Результат анализа", lines=15)
84
  analyze_button.click(
85
- fn=analyze_with_client,
86
  inputs=portfolio_input,
87
  outputs=output_box # Textbox
88
  )
@@ -92,7 +97,7 @@ with gr.Blocks() as demo:
92
  compare_input_2 = gr.Textbox(label="Портфель 2", placeholder="d52f55cc-...")
93
  compare_button = gr.Button("📊 Сравнить")
94
  compare_output = gr.Textbox(label="📉 Результат сравнения", lines=20)
95
- compare_button.click(fn=compare_portfolios_streaming, inputs=[compare_input_1, compare_input_2], outputs=compare_output)
96
 
97
  with gr.Tab("💬 Диалог"):
98
  chat_input = gr.Textbox(label="Ваш вопрос", placeholder="Что такое TradeLink Passport?")
 
6
  from fetch import fetch_metrics
7
  from openai import OpenAI
8
  from analyzer import analyze_portfolio_streaming
9
+ from comparer import compare_portfolio
10
 
11
  api_key = os.getenv("featherless") #
12
  client = OpenAI(
 
70
  partial += delta
71
  yield partial
72
 
73
+ def analyze_one_portfolio(text):
74
  yield from analyze_portfolio_streaming(text, client)
75
 
76
 
77
+ def compare_analyze(text):
78
+ yield from compare_portfolio(text, client)
79
+
80
+
81
  # Gradio интерфейс
82
  with gr.Blocks() as demo:
83
  gr.Markdown("## 🧠 Анализ и сравнение инвестиционных портфелей Tradelink")
 
87
  analyze_button = gr.Button("🔍 Проанализировать")
88
  output_box = gr.Textbox(label="📈 Результат анализа", lines=15)
89
  analyze_button.click(
90
+ fn=analyze_one_portfolio,
91
  inputs=portfolio_input,
92
  outputs=output_box # Textbox
93
  )
 
97
  compare_input_2 = gr.Textbox(label="Портфель 2", placeholder="d52f55cc-...")
98
  compare_button = gr.Button("📊 Сравнить")
99
  compare_output = gr.Textbox(label="📉 Результат сравнения", lines=20)
100
+ compare_button.click(fn=compare_portfolio, inputs=[compare_input_1, compare_input_2], outputs=compare_output)
101
 
102
  with gr.Tab("💬 Диалог"):
103
  chat_input = gr.Textbox(label="Ваш вопрос", placeholder="Что такое TradeLink Passport?")
comparer.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from fetch import extract_portfolio_id
3
+ from fetch import fetch_metrics
4
+ from prompts import SYSTEM_PROMPT
5
+ from openai import OpenAI
6
+
7
+ # Сравнение двух портфелей
8
+ def compare_portfolio(text1: str, text2: str, client: OpenAI):
9
+ id1 = extract_portfolio_id(text1)
10
+ id2 = extract_portfolio_id(text2)
11
+ if not id1 or not id2:
12
+ yield "❗ Один или оба portfolioId некорректны."
13
+ return
14
+
15
+ m1 = fetch_metrics(id1)
16
+ m2 = fetch_metrics(id2)
17
+ if not m1 or not m2:
18
+ yield "❗ Не удалось получить метрики одного из портфелей."
19
+ return
20
+
21
+ m1_text = ", ".join([f"{k}: {v}" for k, v in m1.items()])
22
+ m2_text = ", ".join([f"{k}: {v}" for k, v in m2.items()])
23
+ prompt = f"""Сравни два инвестиционных портфеля:
24
+
25
+ Портфель 1: {m1_text}
26
+ Портфель 2: {m2_text}
27
+
28
+ Сделай сравнительный анализ на русском языке как финансовый аналитик. Укажи, какой портфель сильнее, в чём риски, где преимущества."""
29
+
30
+ response = client.chat.completions.create(
31
+ model="meta-llama/Meta-Llama-3.1-8B-Instruct",
32
+ messages=[
33
+ {"role": "system", "content": SYSTEM_PROMPT},
34
+ {"role": "user", "content": prompt}
35
+ ],
36
+ stream=True
37
+ )
38
+
39
+ partial = ""
40
+ for chunk in response:
41
+ delta = chunk.choices[0].delta.content
42
+ if delta:
43
+ partial += delta
44
+ yield partial