import streamlit as st from PIL import Image from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain_groq import ChatGroq # Groq model for predictions # Set the title and subtitle st.title('Bike Purchase Predictions') st.subheader("Get details and purchase suggestions for your bike.") # Initialize Groq API with your API key LLM = ChatGroq( temperature=0.6, groq_api_key='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' # Replace with your actual Groq API key ) # Upload image of bike uploaded_image = st.file_uploader("Upload an image of the Bike", type=["jpg", "jpeg", "png"]) # Input fields for bike details kilometres = st.number_input("Kilometres driven", min_value=0) owner = st.text_input("Owner") purchase_year = st.number_input("Purchased Year", min_value=1900, max_value=2025) brand_model = st.text_input("Brand and Model") # Define a function to process file and make a prediction based on the uploaded bike image and details def process_file_and_search(uploaded_file, kilometres, owner, purchase_year, brand_model): if uploaded_file is not None: # Display the uploaded bike image c_image = Image.open(uploaded_file) st.image(c_image, caption="Uploaded Bike Image", use_column_width=True) # Create the prompt for Groq model prompt = f"Based on the uploaded bike image and the following details:\n" \ f"1. Kilometres driven: {kilometres}\n" \ f"2. Owner: {owner}\n" \ f"3. Purchased Year: {purchase_year}\n" \ f"4. Brand and Model: {brand_model}\n" \ f"This is an Indian app, Predict the details of the bike. Should the bike be purchased? What is its in INDIA expected price? Provide the reasons for your suggestions." # Define the prompt template for the model B = PromptTemplate(input=['image', 'kilometres', 'owner', 'purchase_year', 'brand_model'], template=prompt) # Format the prompt with the uploaded file and other details D = B.format(image=uploaded_file, kilometres=kilometres, owner=owner, purchase_year=purchase_year, brand_model=brand_model) try: # Invoke the LLM (Groq model) with the formatted prompt E = LLM.invoke(D) # Display the result from the model st.write("Prediction Result:") st.write(E.content) except Exception as e: st.error(f"Error: {e}") # Display the result when the submit button is clicked if st.button('Submit'): process_file_and_search(uploaded_file,kilometres,owner,purchase_year,brand_model)