CustomChatbot / app.py
awindbrake's picture
Update app.py
5635cac
Raw
History Blame Contribute Delete
2.94 kB
#!/usr/bin/env python3
import csv
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.vectorstores import Pinecone
from langchain.chains import RetrievalQA
import os
import gradio as gr
import time
from fuzzywuzzy import fuzz
import pinecone
from getpass import getpass
from huggingface_hub import HfFileSystem
os.environ["OPENAI_API_KEY"] = os.environ.get("OPENAI_API_KEY")
YOUR_API_KEY = os.environ.get("YOUR_API_KEY")
YOUR_ENV = os.environ.get("YOUR_ENV")
index_name = os.environ.get("index_name")
pinecone.init(
api_key=YOUR_API_KEY,
environment=YOUR_ENV
)
model_name = 'text-embedding-ada-002'
embed = OpenAIEmbeddings(
model=model_name,
openai_api_key=os.environ["OPENAI_API_KEY"]
)
text_field = "text"
res = embed.embed_documents(text_field)
# switch back to normal index for langchain
index = pinecone.Index(index_name)
vectorstore = Pinecone(index, embed.embed_query, text_field)
llm = ChatOpenAI(
openai_api_key=os.environ["OPENAI_API_KEY"],
model_name='gpt-4',
temperature=0.5 ,
max_tokens=850
)
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
inputs = gr.inputs.Textbox(lines=7, label="Frage:")
outputs = gr.outputs.Textbox(label="Antwort")
query = inputs
def answer_question(query):
result = vectorstore.similarity_search(query, k=3)
llm = ChatOpenAI(
openai_api_key=os.environ["OPENAI_API_KEY"],
model_name='gpt-4',
temperature=0.5 ,
max_tokens=850
)
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
answer = qa.run(query)
return {"answer": answer} # Return the result as a dictionary with an "answer" key
with gr.Blocks() as demo:
chatbot = gr.Chatbot()
msg = gr.Textbox()
clear = gr.Button("Clear")
def respond(message, chat_history):
#message = message[2:]
bot_response = answer_question(message)
if isinstance(bot_response, dict) and "answer" in bot_response:
bot_message = bot_response["answer"]
else:
bot_message = "Sorry, I couldn't generate a response."
# Save to CSV file
#with open(csv_file, "a", newline='') as f:
# writer = csv.writer(f)
# writer.writerow([message, bot_message])
chat_history.append((message, bot_message))
time.sleep(1)
return "", chat_history
msg.submit(respond, [msg, chatbot], [msg, chatbot])
clear.click(lambda: None, None, chatbot, queue=False)
with gr.Blocks() as demo:
instructions = gr.Markdown("## Willkommen zum KFO Abrechnungs-Bot\n\n\nBitte stelle deine Frage in der Textbox unten.")
chatbot = gr.Chatbot()
msg = gr.Textbox()
clear = gr.Button("Clear")
msg.submit(respond, [msg, chatbot], [msg, chatbot])
clear.click(lambda: None, None, chatbot, queue=False)
if __name__ == "__main__":
demo.launch(share=False, inbrowser=True)