Spaces:
Runtime error
Runtime error
| import os | |
| import gradio as gr | |
| from langchain_redis import RedisConfig, RedisVectorStore | |
| from langchain_core.output_parsers import StrOutputParser | |
| from langchain_core.prompts import ChatPromptTemplate | |
| from langchain_core.runnables import RunnablePassthrough | |
| from langchain_groq import ChatGroq | |
| from langchain_community.embeddings import OpenAIEmbeddings | |
| import logging | |
| from huggingface_hub import login | |
| hf_token = os.getenv("HF_TOKEN") | |
| if hf_token is None: | |
| print("Please set your Hugging Face token in the environment variables.") | |
| else: | |
| login(token=hf_token) | |
| logging.basicConfig(level=logging.DEBUG) | |
| # Set API keys | |
| openai_api_key=os.environ["OPENAI_API_KEY"] | |
| groq_api_key=os.environ["GROQ_API_KEY"] | |
| # Define Redis configuration | |
| REDIS_URL = "redis://:KWq0uAoBYjBGErKvyMvexMqB9ep7v2Ct@redis-11044.c266.us-east-1-3.ec2.redns.redis-cloud.com:11044" | |
| config = RedisConfig( | |
| index_name="radar_data_index", | |
| redis_url=REDIS_URL, | |
| metadata_schema=[ | |
| {"name": "category", "type": "tag"}, | |
| {"name": "name", "type": "text"}, | |
| {"name": "address", "type": "text"}, | |
| {"name": "phone", "type": "text"}, | |
| ], | |
| ) | |
| # Initialize OpenAI Embeddings | |
| embeddings = OpenAIEmbeddings(api_key=os.environ['OPENAI_API_KEY']) | |
| # Initialize Redis Vector Store with Hugging Face embeddings | |
| vector_store = RedisVectorStore(embeddings, config=config) | |
| retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 5}) | |
| # Define the language model | |
| llm = ChatGroq(model="llama-3.2-1b-preview") | |
| # Define prompt | |
| prompt = ChatPromptTemplate.from_messages( | |
| [ | |
| ( | |
| "human", | |
| """"You’re Annie, a charming country music voicebot and media personality created by Amit Lamba, dedicated to guiding folks around Birmingham, Alabama. | |
| Your style is warm, witty, and conversational—like chatting with a clever, friendly neighbor. Deliver advice that’s concise, accurate, and sprinkled with humor, usually in one or two sentences. | |
| Focus on creating a delightful experience that feels like enjoying a slice of Southern hospitality, leaving users with a smile and encouraging follow-up questions to keep the conversation flowing smoothly—just like a perfect encore at a country music show. | |
| Question: {question} | |
| Context: {context} | |
| Answer:""", | |
| ), | |
| ] | |
| ) | |
| def format_docs(docs): | |
| return "\n\n".join(doc.page_content for doc in docs) | |
| rag_chain = ( | |
| {"context": retriever | format_docs, "question": RunnablePassthrough()} | |
| | prompt | |
| | llm | |
| | StrOutputParser() | |
| ) | |
| # | |
| # Function to handle chatbot interaction | |
| def rag_chain_response(messages, user_message): | |
| # Generate a response using the RAG chain | |
| response = rag_chain.invoke(user_message) | |
| # Append the user's message and the response to the chat | |
| messages.append((user_message, response)) | |
| # Return the updated chat and clear the input box | |
| return messages, "" | |
| # Define the Gradio app | |
| with gr.Blocks(theme="rawrsor1/Everforest") as app: | |
| chatbot = gr.Chatbot([], elem_id="RADAR", bubble_full_width=False) | |
| question_input = gr.Textbox(label="Ask a Question", placeholder="Type your question here...") | |
| submit_btn = gr.Button("Submit") | |
| # Set up interaction for both Enter key and Submit button | |
| question_input.submit( | |
| rag_chain_response, # Function to handle input and generate response | |
| inputs=[chatbot, question_input], # Pass current conversation state and user input | |
| outputs=[chatbot, question_input], # Update conversation state and clear the input | |
| api_name="api_get_response_on_enter" | |
| ) | |
| submit_btn.click( | |
| rag_chain_response, # Function to handle input and generate response | |
| inputs=[chatbot, question_input], # Pass current conversation state and user input | |
| outputs=[chatbot, question_input], # Update conversation state and clear the input | |
| api_name="api_get_response_on_submit_button" | |
| ) | |
| # Launch the Gradio app | |
| app.launch(show_error=True) | |