Spaces:
Sleeping
Sleeping
from langchain.retrievers import WikipediaRetriever | |
import wikipedia | |
from chatbot.llm import gemini_llm | |
from chatbot.memory import memory | |
from chatbot.prompts import chat_prompt | |
from langchain.chains import ConversationalRetrievalChain | |
def search_wikipedia(query: str, language: str = "vi"): | |
"""Search Wikipedia in the specified language (vi or en).""" | |
wikipedia.set_lang(language) # Set Wikipedia language dynamically | |
retriever = WikipediaRetriever() # Create a new retriever each time to apply language setting | |
return retriever.get_relevant_documents(query) | |
def get_retriever(user_input: str): | |
"""Decide which language retriever to use based on user input.""" | |
# Example logic: If input contains English words, use "en"; otherwise, use "vi". | |
if any(char.isascii() for char in user_input): | |
return search_wikipedia(user_input, language="en") | |
return search_wikipedia(user_input, language="vi") | |
qa_chain = ConversationalRetrievalChain.from_llm( | |
llm=gemini_llm, | |
retriever=get_retriever, # Dynamic Wikipedia search | |
memory=memory, | |
return_source_documents=False, | |
combine_docs_chain_kwargs={"prompt": chat_prompt}, | |
output_key="result" | |
) | |
def get_chat_response(user_input: str) -> str: | |
response = qa_chain(user_input) | |
# Lưu vào bộ nhớ hội thoại | |
memory.save_context({"input": user_input}, {"output": response["result"]}) | |
return response["result"] | |