| import gradio as gr |
| from langchain.embeddings import SentenceTransformerEmbeddings |
| from langchain.vectorstores import FAISS |
| from langchain_community.chat_models.huggingface import ChatHuggingFace |
| from langchain.schema import SystemMessage, HumanMessage, AIMessage |
| from langchain_community.llms import HuggingFaceEndpoint |
|
|
| model_name = "sentence-transformers/all-mpnet-base-v2" |
| embedding_llm = SentenceTransformerEmbeddings(model_name=model_name) |
|
|
| db = FAISS.load_local("faiss_index", embedding_llm, allow_dangerous_deserialization=True) |
|
|
| |
| llm = HuggingFaceEndpoint( |
| repo_id="HuggingFaceH4/starchat2-15b-v0.1", |
| task="text-generation", |
| max_new_tokens=4096, |
| temperature=0.6, |
| top_p=0.9, |
| top_k=40, |
| repetition_penalty=1.2, |
| do_sample=True, |
| ) |
| chat_model = ChatHuggingFace(llm=llm) |
|
|
| messages = [ |
| SystemMessage(content="You are a helpful assistant."), |
| HumanMessage(content="Hi AI, how are you today?"), |
| AIMessage(content="I'm great thank you. How can I help you?") |
| ] |
|
|
| def handle_query(query: str, mode: str): |
| |
| |
| if not query.strip(): |
| return "Enter a valid message." |
| if mode == "Chat": |
| return chat_mode(query) |
| elif mode == "Web-Search": |
| return web_search(query) |
| else: |
| return "Select a valid mode." |
|
|
| def chat_mode(query: str): |
| global messages |
| prompt = HumanMessage(content=query) |
| messages.append(prompt) |
| response = chat_model.invoke(messages) |
| messages.append(response.content) |
| if len(messages) >= 6: |
| messages = messages[-6:] |
| return f"You: {query}\nIT-Assistant: {response.content}" |
|
|
| def web_search(query: str): |
| global messages |
| similar_docs = db.similarity_search(query, k=3) |
| if similar_docs: |
| source_knowledge = "\n".join([x.page_content for x in similar_docs]) |
| else: |
| source_knowledge = "" |
| augmented_prompt = f""" |
| If the answer to the next query is not contained in the Web Search say 'No Answer Available' and then give advice. |
| |
| Query: {query} |
| |
| Web Search: |
| {source_knowledge} |
| """ |
| prompt = HumanMessage(content=augmented_prompt) |
| messages.append(prompt) |
| response = chat_model.invoke(messages) |
| messages.append(response.content) |
| if len(messages) >= 6: |
| messages = messages[-6:] |
| return f"You: {query}\nIT-Assistant: {response.content}" |
|
|
| demo = gr.Interface( |
| fn=handle_query, |
| inputs=["text", gr.Radio(["Chat", "Web-Search"], label="Mode", info="Choose a mode and enter your message, then click submit to interact.")], |
| outputs="text", |
| title="IT Assistant") |
| demo.launch() |