TrendingBot / app.py
TimoTM's picture
Rename Trending Media Chatbot App.py to app.py
8254cbf verified
raw
history blame
2.36 kB
import gradio as gr
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import CTransformers
# Lade und verarbeite das PDF beim Start
loader = PyPDFLoader("TrendingMedia_ChatbotBasis_FINAL.pdf")
documents = loader.load()
splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
texts = splitter.split_documents(documents)
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
db = FAISS.from_documents(texts, embeddings)
retriever = db.as_retriever(search_kwargs={"k": 2})
llm = CTransformers(
model="TheBloke/TinyLlama-1.1B-Chat-v1-GGUF",
model_file="tinyllama-1.1b-chat-v1.Q4_K_M.gguf",
config={'max_new_tokens': 512, 'temperature': 0.5}
)
qa_chain = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
# Frage-Antwort-Logik
def ask_question(user_input):
if user_input.lower() in ["start", "hallo", "hi", "hey"]:
return "👋 Willkommen bei Trending Media! Wie kann ich dir behilflich sein?"
response = qa_chain.run(user_input)
if response.strip() == "" or "I'm sorry" in response or len(response.split()) < 5:
if "kontakt" in user_input.lower() or "erreichen" in user_input.lower():
return (
"📬 Du kannst uns direkt über dieses Formular kontaktieren:\n\n"
"**Vorname & Nachname:**\n[_________]\n\n"
"**E-Mail:**\n[_________]\n\n"
"**Nachricht:**\n[__________________________]\n\n"
"*Oder direkt über:* [📨 Kontaktformular](https://trendingmedia.ch/kontakt)"
)
else:
return "❌ Das kann ich dir leider nicht beantworten. Ich bin auf Informationen aus unserem PDF spezialisiert."
return response
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## 🤖 TrendingBot\nWillkommen bei Trending Media! Stelle mir deine Frage.")
user_input = gr.Textbox(label="Deine Frage", placeholder="Frag mich etwas über unsere Lösungen...")
bot_response = gr.Textbox(label="TrendingBot antwortet")
user_input.submit(ask_question, inputs=user_input, outputs=bot_response)
demo.launch()