Spaces:
Sleeping
Sleeping
| import requests, pandas as pd | |
| from transformers import pipeline | |
| from datetime import datetime, timedelta | |
| import gradio as gr | |
| # ============================================================ | |
| # 1️⃣ FRED API — экономические данные США1 | |
| # ============================================================ | |
| API_KEY = "YOUR_FRED_API_KEY" # зарегистрируй на https://fred.stlouisfed.org/ | |
| FRED_URL = "https://api.stlouisfed.org/fred/series/observations" | |
| INDICATORS = { | |
| "GDP": "GDP", | |
| "Inflation (CPI)": "CPIAUCSL", | |
| "Unemployment Rate": "UNRATE", | |
| "Interest Rate (Fed Funds)": "FEDFUNDS" | |
| } | |
| def fetch_fred_data(series_id, start="2024-01-01", end=None): | |
| if end is None: | |
| end = datetime.now().strftime("%Y-%m-%d") | |
| params = { | |
| "series_id": series_id, | |
| "api_key": API_KEY, | |
| "file_type": "json", | |
| "observation_start": start, | |
| "observation_end": end | |
| } | |
| r = requests.get(FRED_URL, params=params) | |
| data = r.json().get("observations", []) | |
| df = pd.DataFrame(data) | |
| if not df.empty: | |
| df["value"] = pd.to_numeric(df["value"], errors="coerce") | |
| return df | |
| # ============================================================ | |
| # 2️⃣ Генерация сводки (LLM) | |
| # ============================================================ | |
| generator = pipeline("text2text-generation", model="google/flan-t5-base") | |
| def generate_summary(topic): | |
| sid = INDICATORS.get(topic) | |
| df = fetch_fred_data(sid) | |
| if df.empty: | |
| return "⚠️ No data available for this indicator." | |
| last = df.tail(5) | |
| trend = last["value"].pct_change().mean() * 100 | |
| context = f"Recent values of {topic}:\n{last[['date','value']].to_string(index=False)}\n\nAverage change: {trend:.2f}%" | |
| prompt = f"Provide an analytical summary of the trend:\n{context}" | |
| summary = generator(prompt, max_new_tokens=150)[0]["generated_text"] | |
| return summary, df | |
| # ============================================================ | |
| # 3️⃣ Экспорт CSV → Power BI | |
| # ============================================================ | |
| def export_csv(df, topic): | |
| filename = f"powerbi_{topic.replace(' ', '_').lower()}.csv" | |
| df.to_csv(filename, index=False) | |
| return filename | |
| # ============================================================ | |
| # 4️⃣ Gradio UI | |
| # ============================================================ | |
| with gr.Blocks(title="🏦 RAG Financial Analytics → Power BI") as app: | |
| gr.Markdown("## 🏦 Financial RAG: FRED API → LLM → Power BI") | |
| topic = gr.Dropdown(list(INDICATORS.keys()), label="Select Indicator", value="Inflation (CPI)") | |
| out_summary = gr.Textbox(label="Generated Summary", lines=8) | |
| out_file = gr.File(label="Power BI Export") | |
| def run_pipeline(topic): | |
| summary, df = generate_summary(topic) | |
| file_path = export_csv(df, topic) | |
| return summary, file_path | |
| gr.Button("Generate & Export").click(run_pipeline, inputs=topic, outputs=[out_summary, out_file]) | |
| app.launch() | |