import gradio as gr import faiss import numpy as np import json from sentence_transformers import SentenceTransformer import os # Load your content and index with open("texts.json", "r") as f: texts = json.load(f) index = faiss.read_index("faiss_index.bin") # Load embedding model embed_model = SentenceTransformer("all-MiniLM-L6-v2") # Helper to retrieve relevant chunks def retrieve_chunks(query, k=5): query_emb = embed_model.encode([query]) D, I = index.search(np.array(query_emb), k) return [texts[i] for i in I[0] if i < len(texts)] # Main chatbot function def rag_chatbot(message, history, request: gr.Request): user_header = request.headers.get("X-Source", "") if user_header == "wordpress": # RAG logic for WordPress embed context_chunks = retrieve_chunks(message) context = "\n".join(context_chunks) if not context.strip(): return "❌ I'm sorry, I can only assist with questions related to LogiqCurve.com." prompt = f"Answer based ONLY on this content:\n{context}\n\nQuestion: {message}" else: # Public fallback (general AI) prompt = message # Use OpenRouter API headers = { "Authorization": f"Bearer {os.environ.get('OPENROUTER_API_KEY')}", "Content-Type": "application/json" } payload = { "model": "deepseek/deepseek-chat-v3-0324:free", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] } try: import requests res = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=payload) res.raise_for_status() return res.json()["choices"][0]["message"]["content"] except Exception as e: return f"❌ API Error: {e}" # Gradio interface iface = gr.ChatInterface( fn=rag_chatbot, title="LogiqCurve WordPress Assistant", description="Answers only based on the content of LogiqCurve.com", theme="soft" ) iface.launch()