File size: 3,702 Bytes
92648a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11e8c44
 
 
 
 
 
 
 
 
 
 
 
92648a6
11e8c44
92648a6
11e8c44
 
 
 
 
92648a6
 
 
 
 
 
 
 
11e8c44
92648a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import gradio as gr
import pandas as pd
from datetime import datetime, timedelta
import requests
import json
import os

def fetch_nifty_data():
    try:
        end_date = datetime.now()
        start_date = end_date - timedelta(days=15)
        
        url = f"https://query1.finance.yahoo.com/v8/finance/chart/%5ENSEI?period1={int(start_date.timestamp())}&period2={int(end_date.timestamp())}&interval=1d"
        
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
        
        response = requests.get(url, headers=headers)
        data = response.json()
        
        timestamps = data['chart']['result'][0]['timestamp']
        quote = data['chart']['result'][0]['indicators']['quote'][0]
        
        df = pd.DataFrame({
            'Date': [datetime.fromtimestamp(ts).strftime('%Y-%m-%d') for ts in timestamps],
            'Open': quote['open'],
            'High': quote['high'],
            'Low': quote['low'],
            'Close': quote['close'],
            'Volume': quote['volume']
        })
        
        numeric_columns = ['Open', 'High', 'Low', 'Close']
        df[numeric_columns] = df[numeric_columns].round(2)
        
        return df
    except Exception as e:
        print(f"Error fetching data: {str(e)}")
        return pd.DataFrame()

def get_mistral_analysis(df):
    try:
        # Get last 10 days of data
        last_10_days = df.tail(10)
        
        # Format data for prompt
        data_str = "this is the last 10 days data for nifty index, Open\tHigh\tLow\tClose\n"
        for _, row in last_10_days.iterrows():
            data_str += f"{row['Open']}\t{row['High']}\t{row['Low']}\t{row['Close']}\n"
        
        data_str += "so i need you to give me the setup for today by priceaction levels"
        
        # Mistral API endpoint
        url = "https://api.mistral.ai/v1/chat/completions"
        
        headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {os.environ.get('MISTRAL_API_KEY')}"
        }
        
        data = {
            "model": "mistral-tiny",
            "messages": [{"role": "user", "content": data_str}]
        }
        
        response = requests.post(url, headers=headers, json=data)
        
        if response.status_code == 200:
            return response.json()['choices'][0]['message']['content']
        else:
            return f"Error: {response.status_code} - {response.text}"
            
    except Exception as e:
        return f"Error getting analysis: {str(e)}"

def show_nifty_data_and_analysis():
    df = fetch_nifty_data()
    analysis = get_mistral_analysis(df) if not df.empty else "Unable to fetch data"
    return df, analysis

# Create Gradio interface
with gr.Blocks() as demo:
    gr.Markdown("# NIFTY 50 Analysis with Mistral AI")
    gr.Markdown("Displays the last 15 days of trading data and AI analysis for NIFTY 50 index")
    
    # Add refresh button
    refresh_btn = gr.Button("Refresh Data and Analysis")
    
    # Add outputs
    with gr.Row():
        with gr.Column():
            gr.Markdown("### Historical Data")
            output_table = gr.Dataframe()
        
        with gr.Column():
            gr.Markdown("### Mistral AI Analysis")
            analysis_output = gr.Textbox(label="Price Action Analysis", lines=10)
    
    # Set up refresh button click event
    refresh_btn.click(
        fn=show_nifty_data_and_analysis,
        outputs=[output_table, analysis_output],
    )
    
    # Initial load of data
    demo.load(
        fn=show_nifty_data_and_analysis,
        outputs=[output_table, analysis_output],
    )

demo.launch()