Spaces:
Sleeping
Sleeping
import gradio as gr | |
import torch | |
import pandas as pd | |
import yfinance as yf | |
from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration | |
# Check if GPU is available | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
print(f"Using device: {device}") | |
# Function to fetch and preprocess ICICI Bank data | |
def fetch_and_preprocess_data(): | |
try: | |
ticker = "ICICIBANK.BO" # ICICI Bank BSE Symbol | |
data = yf.download(ticker, start="2020-01-01", end="2023-01-01") | |
if data.empty: | |
raise ValueError("No data found for the given symbol.") | |
# Calculate Moving Averages | |
data['MA_50'] = data['Close'].rolling(window=50).mean() | |
data['MA_200'] = data['Close'].rolling(window=200).mean() | |
return data | |
except Exception as e: | |
print(f"Error fetching data: {e}") | |
return pd.DataFrame() # Return empty DataFrame if fetching fails | |
# Load the RAG model and tokenizer with error handling | |
try: | |
tokenizer = RagTokenizer.from_pretrained("facebook/rag-sequence-base") | |
print("Tokenizer loaded successfully.") | |
retriever = RagRetriever.from_pretrained( | |
"facebook/rag-sequence-base", | |
index_name="wiki_dpr", | |
passages_path=None, | |
index_path=None | |
) | |
print("Retriever loaded successfully.") | |
model = RagSequenceForGeneration.from_pretrained("facebook/rag-sequence-base", retriever=retriever).to(device) | |
print("Model loaded successfully.") | |
except Exception as e: | |
print(f"Error loading model or retriever: {e}") | |
retriever = None | |
model = None | |
# Function to analyze trading data | |
def analyze_trading_data(question): | |
if model is None or retriever is None: | |
return "Error: Model or retriever is not initialized. Please check the logs." | |
# Fetch and preprocess data | |
data = fetch_and_preprocess_data() | |
if data.empty: | |
return "Error: No data available for analysis." | |
# Prepare context for RAG model | |
context = ( | |
f"ICICI Bank stock data:\n" | |
f"Latest Close Price: {data['Close'].iloc[-1]:.2f}\n" | |
f"50-Day Moving Average: {data['MA_50'].iloc[-1]:.2f}\n" | |
f"200-Day Moving Average: {data['MA_200'].iloc[-1]:.2f}\n" | |
) | |
# Combine question and context | |
input_text = f"Question: {question}\nContext: {context}" | |
# Tokenize input | |
inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True).to(device) | |
# Generate answer using the model | |
outputs = model.generate(inputs['input_ids']) | |
# Decode output | |
answer = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
return answer | |
# Gradio interface | |
iface = gr.Interface( | |
fn=analyze_trading_data, | |
inputs="text", | |
outputs="text", | |
title="ICICI Bank Trading Analysis", | |
description="Ask any question about ICICI Bank's trading data and get a detailed analysis.", | |
examples=[ | |
"What is the current trend of ICICI Bank stock?", | |
"Is the 50-day moving average above the 200-day moving average?", | |
"What is the latest closing price of ICICI Bank?" | |
] | |
) | |
# Launch the app | |
if __name__ == "__main__": | |
iface.launch() | |