lucifer7210's picture
Upload folder using huggingface_hub
ead6b26 verified
raw
history blame
3.98 kB
import gradio as gr
from urllib.request import urlopen
import certifi
import json
import pandas as pd
import os
import warnings
warnings.filterwarnings("ignore")
from langchain.document_loaders import CSVLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
from langchain_community.llms import HuggingFacePipeline
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
# Hugging Face API Key
os.environ["HUGGINGFACEHUB_API_TOKEN"] = ""
# Load Falcon-7B
model_id = "tiiuae/falcon-7b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=512,
do_sample=True,
temperature=0.1,
top_k=50,
top_p=0.95,
eos_token_id=tokenizer.eos_token_id,
)
llm = HuggingFacePipeline(pipeline=pipe)
# Prompt Template
template = """
You are a Financial Market Expert. Get the Market Economic Data and Market News about Company and Build the Financial Report.
Understand this Market Information: {context}
Answer the Query: {question}
Output must be in tabular form.
"""
PROMPT = PromptTemplate(input_variables=["context", "question"], template=template)
# === Core Function ===
def generate_report(ticker: str, exchange: str):
api_key = "C1HRSweTniWdBuLmTTse9w8KpkoiouM5"
try:
# Fetch Data
if exchange == "NSE":
url = f"https://financialmodelingprep.com/api/v3/search?query={ticker}&exchange=NSE&apikey={api_key}"
else:
url = f"https://financialmodelingprep.com/api/v3/quote/{ticker}?apikey={api_key}"
response = urlopen(url, cafile=certifi.where())
data = json.loads(response.read().decode("utf-8"))
# Save to CSV
df = pd.DataFrame(data)
if 'timestamp' in df.columns:
df['timestamp'] = pd.to_datetime(df['timestamp'], errors='coerce')
if 'earningsAnnouncement' in df.columns:
df['earningsAnnouncement'] = pd.to_datetime(df['earningsAnnouncement'], errors='coerce')
df.to_csv("eco_ind.csv", index=False)
# Chroma Vector Store
loader = CSVLoader("eco_ind.csv")
documents = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=10)
texts = splitter.split_documents(documents)
embeddings = HuggingFaceEmbeddings()
chroma = Chroma.from_documents(
documents=texts,
collection_name="economic_data",
embedding=embeddings,
persist_directory="docs/chroma_rag"
)
retriever = chroma.as_retriever(search_kwargs={"k": 2})
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
chain_type_kwargs={"prompt": PROMPT},
retriever=retriever,
return_source_documents=False
)
# Ask LLM
query = f"{ticker} Financial Report"
result = qa({"query": query})
return result["result"]
except Exception as e:
return f"❌ Error occurred: {e}"
# === Gradio UI ===
iface = gr.Interface(
fn=generate_report,
inputs=[
gr.Textbox(label="Enter Ticker (e.g., MSFT)"),
gr.Radio(choices=["US", "NSE"], label="Select Exchange")
],
outputs=gr.Textbox(label="Generated Financial Report"),
title="πŸ“Š Financial Report Generator using Falcon + Chroma + LangChain",
description="Enter a stock ticker and choose an exchange to get an LLM-generated tabular financial report."
)
if __name__ == "__main__":
iface.launch(share=True)