Spaces:
Sleeping
Sleeping
QAway-to
commited on
Commit
·
00ddeb7
1
Parent(s):
df30e28
model change
Browse files- app.py +8 -3
- 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
|
| 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=
|
| 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=
|
| 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
|