Spaces:
Build error
Build error
| 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() | |