rag-prototype / app.py
QAway-to
Test1
73c61bc
raw
history blame
3.04 kB
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()