|
|
|
import pandas as pd |
|
df = pd.read_csv('./Automobile_data.csv') |
|
|
|
|
|
context_data = [] |
|
for i in range(len(df)): |
|
context = "" |
|
for j in range(26): |
|
context += df.columns[j] |
|
context += ": " |
|
context += str(df.iloc[i][j]) |
|
context += " " |
|
context_data.append(context) |
|
|
|
|
|
import os |
|
|
|
|
|
groq_key = os.environ.get('groq_API_Keys') |
|
|
|
|
|
from langchain_groq import ChatGroq |
|
|
|
llm = ChatGroq(model="llama-3.1-70b-versatile",api_key=groq_key) |
|
|
|
|
|
from langchain_huggingface import HuggingFaceEmbeddings |
|
embed_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1") |
|
|
|
|
|
from langchain_chroma import Chroma |
|
|
|
vectorstore = Chroma( |
|
collection_name="car_dataset_store", |
|
embedding_function=embed_model, |
|
persist_directory="./", |
|
) |
|
|
|
|
|
vectorstore.add_texts(context_data) |
|
|
|
retriever = vectorstore.as_retriever() |
|
|
|
from langchain_core.prompts import PromptTemplate |
|
|
|
template = ("""You are a car expert. |
|
Use the provided context to answer the question. |
|
If you don't know the answer, say so. Explain your answer in detail. |
|
Do not discuss the context in your response; just provide the answer directly. |
|
|
|
Context: {context} |
|
|
|
Question: {question} |
|
|
|
Answer:""") |
|
|
|
rag_prompt = PromptTemplate.from_template(template) |
|
|
|
from langchain_core.output_parsers import StrOutputParser |
|
from langchain_core.runnables import RunnablePassthrough |
|
|
|
rag_chain = ( |
|
{"context": retriever, "question": RunnablePassthrough()} |
|
| rag_prompt |
|
| llm |
|
| StrOutputParser() |
|
) |
|
|
|
|
|
import gradio as gr |
|
|
|
|
|
def rag_memory_stream(message, history): |
|
partial_text = "" |
|
try: |
|
for new_text in rag_chain.stream(message): |
|
print(f"Processing: {new_text}") |
|
partial_text += new_text |
|
yield partial_text |
|
except Exception as e: |
|
yield f"An error occurred: {str(e)}" |
|
|
|
|
|
def process_preferences(make, budget, fuel_type): |
|
return ( |
|
f"You've selected:\n" |
|
f"- **Preferred Make**: {make}\n" |
|
f"- **Budget**: ${budget}\n" |
|
f"- **Fuel Type**: {fuel_type}\n\n" |
|
f"Based on your preferences, I recommend exploring the latest models of {make} " |
|
f"that fit your budget and offer {fuel_type.lower()} options!" |
|
) |
|
|
|
|
|
examples = ['I need a car', 'What is the make and fuel type of a car?'] |
|
description = "An advanced chatbot that helps you choose the right car based on your preferences and budget." |
|
title = "Car Expert :) Let Me Help You Find the Perfect Ride!" |
|
|
|
|
|
custom_theme = gr.themes.Base(primary_hue="blue", secondary_hue="green").set( |
|
body_background_fill="#87CEEB", |
|
body_text_color="#000000", |
|
) |
|
|
|
|
|
with gr.Blocks(theme=custom_theme) as demo: |
|
gr.Markdown(f"# {title}") |
|
gr.Markdown(description) |
|
|
|
with gr.Tabs(): |
|
|
|
with gr.Tab("Chat"): |
|
chat_interface = gr.ChatInterface( |
|
fn=rag_memory_stream, |
|
type="messages", |
|
examples=examples, |
|
fill_height=True, |
|
) |
|
|
|
|
|
with gr.Tab("Car Preferences"): |
|
gr.Markdown("### Provide your preferences to get tailored advice:") |
|
|
|
make = gr.Dropdown( |
|
choices=["Toyota", "Honda", "BMW", "Tesla", "Ford"], |
|
label="Preferred Make", |
|
info="Choose the car manufacturer you prefer.", |
|
) |
|
budget = gr.Slider( |
|
minimum=5000, maximum=100000, step=500, |
|
label="Budget (in USD)", |
|
info="Select your budget range.", |
|
) |
|
fuel_type = gr.Radio( |
|
choices=["Gasoline", "Diesel", "Electric", "Hybrid"], |
|
label="Fuel Type", |
|
info="Choose the type of fuel you prefer.", |
|
) |
|
submit_button = gr.Button("Submit Preferences") |
|
output = gr.Textbox( |
|
label="Recommendation", |
|
placeholder="Your recommendations will appear here...", |
|
) |
|
|
|
|
|
submit_button.click( |
|
process_preferences, |
|
inputs=[make, budget, fuel_type], |
|
outputs=output, |
|
) |
|
|
|
|
|
with gr.Tab("Upload Documents"): |
|
gr.Markdown("### Upload any related documents for personalized suggestions:") |
|
file_upload = gr.File(label="Upload Car Listings or Preferences") |
|
|
|
|
|
with gr.Tab("Help"): |
|
gr.Markdown("### Need Assistance?") |
|
gr.Markdown( |
|
""" |
|
- Use the **Chat** tab to ask questions about cars. |
|
- Fill in your **Car Preferences** for tailored recommendations. |
|
- Upload files in the **Upload Documents** tab. |
|
- Contact support at: [email protected] |
|
""" |
|
) |
|
|
|
gr.Markdown("### About") |
|
gr.Markdown( |
|
""" |
|
This chatbot is powered by LangChain and Groq API for real-time AI interactions. |
|
Designed to provide personalized car-buying assistance! |
|
""" |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|