QAway-to commited on
Commit
14df075
·
1 Parent(s): be92cc8

Base app.py interface v1.4

Browse files
Files changed (1) hide show
  1. app.py +40 -95
app.py CHANGED
@@ -1,110 +1,55 @@
1
- # app.py — Financial RAG Dashboard
2
  import gradio as gr
3
  import requests
4
  import pandas as pd
5
- from transformers import pipeline
6
- from datetime import datetime
7
 
8
- # ======================================================
9
- # ⚙️ Конфигурация
10
- # ======================================================
11
- FRED_API_KEY = "YOUR_FRED_API_KEY"
12
- FRED_URL = "https://api.stlouisfed.org/fred/series/observations"
13
-
14
- INDICATORS = {
15
- "GDP": "GDP",
16
- "Inflation (CPI)": "CPIAUCSL",
17
- "Unemployment Rate": "UNRATE",
18
- "Interest Rate (Fed Funds)": "FEDFUNDS",
19
- }
20
-
21
- generator = pipeline("text2text-generation", model="google/flan-t5-base")
22
-
23
- # ======================================================
24
- # 🧠 Логика
25
- # ======================================================
26
- def fetch_fred_data(series_id: str, start_date="2024-01-01"):
27
- params = {
28
- "series_id": series_id,
29
- "api_key": FRED_API_KEY,
30
- "file_type": "json",
31
- "observation_start": start_date,
32
- }
33
- response = requests.get(FRED_URL, params=params)
34
- data = response.json().get("observations", [])
35
- df = pd.DataFrame(data)
36
- if df.empty:
37
- return pd.DataFrame()
38
- df["value"] = pd.to_numeric(df["value"], errors="coerce")
39
- return df[["date", "value"]].tail(12)
40
-
41
- def generate_financial_summary(indicator_name: str):
42
- """Основная функция — загружает данные, генерирует сводку, экспортирует CSV."""
43
- series_id = INDICATORS[indicator_name]
44
- df = fetch_fred_data(series_id)
45
- if df.empty:
46
- return "⚠️ No data found.", None
47
-
48
- # --- контекст для LLM ---
49
- trend = df["value"].pct_change().mean() * 100
50
- context = f"Recent {indicator_name} data:\n{df.to_string(index=False)}"
51
- prompt = (
52
- f"Analyze the following economic indicator data and describe the recent trend:\n"
53
- f"{context}\nAverage change: {trend:.2f}%"
54
- )
55
  try:
56
- summary = generator(prompt, max_new_tokens=150)[0]["generated_text"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  except Exception as e:
58
- summary = f"⚠️ LLM generation error: {e}"
59
-
60
- # --- экспорт ---
61
- file_name = f"powerbi_{indicator_name.lower().replace(' ', '_')}.csv"
62
- df.to_csv(file_name, index=False)
63
- return summary, file_name
64
 
65
- # ======================================================
66
- # 💻 Интерфейс
67
- # ======================================================
68
- with gr.Blocks(title="🏦 Financial RAG → Power BI", theme=gr.themes.Soft()) as demo:
69
  gr.Markdown(
70
- """
71
- ## 🏦 Financial RAG Dashboard
72
- Автоматическая аналитика по ключевым банковским показателям (FRED API)
73
- Экспортируй данные для Power BI и DAX визуализаций.
74
- """
75
  )
76
 
77
  with gr.Row():
78
  with gr.Column(scale=1):
79
- indicator_dropdown = gr.Dropdown(
80
- label="Выберите показатель",
81
- choices=list(INDICATORS.keys()),
82
- value="Inflation (CPI)",
83
- )
84
- generate_btn = gr.Button("📊 Сформировать отчёт", variant="primary")
85
-
86
- with gr.Column(scale=2):
87
- summary_box = gr.Textbox(
88
- label="📈 Аналитическая сводка",
89
- placeholder="Здесь появится результат анализа...",
90
- lines=10,
91
- )
92
- export_box = gr.File(label="📂 Файл для Power BI")
93
-
94
- def run_pipeline(indicator):
95
- summary, file_path = generate_financial_summary(indicator)
96
- return summary, file_path
97
-
98
- generate_btn.click(
99
- fn=run_pipeline,
100
- inputs=indicator_dropdown,
101
- outputs=[summary_box, export_box],
102
  show_progress=True,
103
  )
104
 
105
- gr.Markdown(
106
- "<center><small>Developed with ❤️ for Financial RAG prototyping • Powered by Hugging Face</small></center>"
107
- )
108
-
109
- if __name__ == "__main__":
110
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
1
+ # app.py
2
  import gradio as gr
3
  import requests
4
  import pandas as pd
 
 
5
 
6
+ # --------------------------------------------------------------
7
+ # ⚙️ Функция: загрузка данных с открытого банковского API
8
+ # --------------------------------------------------------------
9
+ def fetch_bank_data():
10
+ """Получаем список банков (пример: открытое API OpenBankProject)."""
11
+ url = "https://api.openbankproject.com/obp/v4.0.0/banks"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  try:
13
+ resp = requests.get(url, timeout=10)
14
+ data = resp.json().get("banks", [])
15
+ if not data:
16
+ return "⚠️ Нет данных.", pd.DataFrame()
17
+
18
+ # Преобразуем в таблицу
19
+ df = pd.DataFrame([
20
+ {
21
+ "Название": b.get("full_name", ""),
22
+ "ID": b.get("id", ""),
23
+ "URL": b.get("website", ""),
24
+ "Город": b.get("bank_code", "")
25
+ }
26
+ for b in data
27
+ ])
28
+ return "✅ Данные успешно загружены.", df.head(10)
29
  except Exception as e:
30
+ return f" Ошибка при загрузке данных: {e}", pd.DataFrame()
 
 
 
 
 
31
 
32
+ # --------------------------------------------------------------
33
+ # 🧱 Интерфейс Gradio
34
+ # --------------------------------------------------------------
35
+ with gr.Blocks(theme=gr.themes.Soft(), title="🏦 Bank API Viewer") as demo:
36
  gr.Markdown(
37
+ "## 🏦 Open Banking Data Viewer\n"
38
+ "Загружай данные с открытых банковских API и анализируй их прямо здесь."
 
 
 
39
  )
40
 
41
  with gr.Row():
42
  with gr.Column(scale=1):
43
+ load_btn = gr.Button("🔄 Загрузить данные банков", variant="primary")
44
+ with gr.Column(scale=3):
45
+ status = gr.Textbox(label="Статус", value="Ожидание запроса...")
46
+ table = gr.DataFrame(label="📋 Список банков", interactive=False)
47
+
48
+ load_btn.click(
49
+ fetch_bank_data,
50
+ inputs=None,
51
+ outputs=[status, table],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  show_progress=True,
53
  )
54
 
55
+ demo.queue(max_size=32).launch(server_name="0.0.0.0", server_port=7860)