File size: 2,645 Bytes
0394b1d 6dacbc2 0394b1d 6dacbc2 0394b1d 6dacbc2 6ab4abb ceaa0db 52548bf 6dacbc2 52548bf 6dacbc2 ceaa0db 6dacbc2 6fea818 6dacbc2 98d5b5d 6dacbc2 6fea818 6dacbc2 bb2fbe5 6dacbc2 98d5b5d 6dacbc2 c98d37d c2f639d c98d37d c2f639d 0394b1d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
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)
# Set up Hugging Face model
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):
# Check if query is empty
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}\n\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}\n\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() |