import streamlit as st import os import getpass from langchain import PromptTemplate from langchain import hub from langchain.docstore.document import Document from langchain.document_loaders import WebBaseLoader from langchain.schema import StrOutputParser from langchain.schema.prompt_template import format_document from langchain.schema.runnable import RunnablePassthrough import google.generativeai as genai from langchain_google_genai import GoogleGenerativeAIEmbeddings from langchain_google_genai import ChatGoogleGenerativeAI from langchain.chains.llm import LLMChain from langchain.chains import StuffDocumentsChain from langchain_core.messages import HumanMessage import requests st.set_page_config(layout="wide") GOOGLE_API_KEY=os.environ['GOOGLE_API_KEY'] st.title('Stock Market Insights') st.sidebar.image("https://myndroot.com/wp-content/uploads/2023/12/Gemini-Dext.jpg",width =100) st.sidebar.markdown("The App uses **Google Gemini API** for Text and Vision along with 🦜️🔗 LangChain") st.sidebar.info("Know more about [NSE Tickers](https://www.google.com/search?q=nse+tickers+list&sca_esv=a6c39f4d03c5324c&sca_upv=1&rlz=1C1GCEB_enIN1011IN1011&sxsrf=ADLYWILQPbew-0SrvUUWpI8Y29_uOOgbvA%3A1716470016765&ei=AEFPZp-zLvzHp84P_ZWtuA0&oq=NSE+Tickers+&gs_lp=Egxnd3Mtd2l6LXNlcnAiDE5TRSBUaWNrZXJzICoCCAAyBRAAGIAEMggQABgWGAoYHjIGEAAYFhgeMgYQABgWGB4yBhAAGBYYHjIGEAAYFhgeMgYQABgWGB4yBhAAGBYYHjILEAAYgAQYhgMYigUyCxAAGIAEGIYDGIoFSIIbUL0PWL0PcAF4AZABAJgB8QKgAfECqgEDMy0xuAEByAEA-AEBmAICoAKKA8ICChAAGLADGNYEGEeYAwCIBgGQBgiSBwUxLjMtMaAHtQU&sclient=gws-wiz-serp)") st.sidebar.info("Know more about [Charts](https://chart-img.com/)") ticker_user = st.text_input("Enter Ticker for NSE Stocks","") gemini_embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001") llm = ChatGoogleGenerativeAI(model="gemini-1.5-pro-latest",google_api_key = GOOGLE_API_KEY) llm_vis = ChatGoogleGenerativeAI(model="gemini-pro-vision",google_api_key = GOOGLE_API_KEY) if ticker_user!="": url1 = f"https://www.google.com/finance/quote/{ticker_user}:NSE?hl=en" url2 = f"https://in.tradingview.com/symbols/NSE-{ticker_user}/" # url3 = f"https://www.nseindia.com/get-quotes/equity?symbol={ticker_user}" loader = WebBaseLoader([url1,url2]) docs = loader.load() st.divider() # llm_prompt_template = """You are an expert Stock Market Trader for stock market insights based on fundamental, analytical, profit based and company financials. # Based on the context below # {context}, Summarize the stock based on Historical data based on fundamental, price, news, sentiment , any red flags and suggest rating of the Stock in a 1 to 10 Scale""" llm_prompt_template = """You are an expert Stock Market Trader specializing in stock market insights derived from fundamental analysis, analytical trends, profit-based evaluations, and detailed company financials. Using your expertise, please analyze the stock based on the provided context below. Context: {context} Task: Summarize the stock based on its historical and current data. Evaluate the stock on the following parameters: 1. Company Fundamentals: Assess the stock's intrinsic value, growth potential, and financial health. 2. Current & Future Price Trends: Analyze historical price movements and current price trends. 3. News and Sentiment: Review recent news articles, press releases, and social media sentiment. 4. Red Flags: Identify any potential risks or warning signs. 5. Provide a rating for the stock on a scale of 1 to 10. 6. Advise if the stock is a good buy for the next 2 weeks. 7. Suggest at what price we need to buy and hold or sell """ st.sidebar.subheader('Prompt') # user_prompt = st.sidebar.text_area("Enter Prompt",llm_prompt_template) url = "https://api.chart-img.com/v2/tradingview/advanced-chart" api_key = "l0iUFRSeqC9z7nDPTd1hnafPh2RrdcEy6rl6tNqV" headers = { "x-api-key": api_key, "content-type": "application/json" } data = { "height": 400, "theme": "light", "interval": "1D", "session": "extended", "symbol": f"NSE:{ticker_user}" } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: with open("chart_t1.jpg", "wb") as f: f.write(response.content) st.image("chart_t1.jpg", caption='') llm_prompt = PromptTemplate.from_template(llm_prompt_template) llm_chain = LLMChain(llm=llm,prompt=llm_prompt) stuff_chain = StuffDocumentsChain(llm_chain=llm_chain,document_variable_name="context") res = stuff_chain.invoke(docs) #create the humanmassage propmt templete with the image file hmessage = HumanMessage( content=[ { "type": "text", "text": "Based on the Image, suggest a BUY and SELL Strategy along with Risk based approach using Stop loss/Target price. Suggest different Candlestick \ pattern based strategies which could be usefull", }, {"type": "image_url", "image_url": "chart_t1.jpg"}, ] ) message = llm_vis.invoke([hmessage]) st.write(message.content) st.write(res["output_text"]) # print("Image saved as chart-img-02.png") else: st.warning(f"Failed to retrieve image. Status code: {response.status_code}") st.warning("Response:", response.text)