mirxakamran893's picture
Update app.py
efa5f27 verified
raw
history blame
2.38 kB
import gradio as gr
import requests
import json
import os
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
# Load files
index = faiss.read_index("faiss_index.bin")
with open("texts.json", "r") as f:
texts = json.load(f)
# Embedding model
model = SentenceTransformer("all-MiniLM-L6-v2")
# API key
API_KEY = os.environ.get("OPENROUTER_API_KEY")
MODEL = "deepseek/deepseek-chat-v3-0324:free"
# Function: Get relevant chunks
def get_relevant_context(query, k=5):
query_vector = model.encode([query])
scores, indices = index.search(np.array(query_vector), k)
return [texts[i] for i in indices[0] if i < len(texts)]
# Chatbot logic
def chat_with_data(message, history):
greetings = ["hi", "hello", "hey", "salam", "assalamualaikum"]
message_lower = message.lower().strip()
if any(greet in message_lower for greet in greetings):
return "πŸ‘‹ Hello! How can I assist you regarding LogiqCurve today?"
context = get_relevant_context(message)
if not context or all(len(c.strip()) < 10 for c in context):
return "❌ Sorry, I can only answer questions based on content from LogiqCurve.com."
context_text = "\n".join(context)
prompt = (
f"You are a helpful assistant for LogiqCurve.\n"
f"ONLY use the context below to answer the user. Do not use any outside knowledge.\n\n"
f"Context:\n{context_text}\n\n"
f"User question: {message}\n\n"
f"Answer strictly using the context above."
)
messages = [
{"role": "system", "content": "You are a strict assistant who only answers using provided context."},
{"role": "user", "content": prompt}
]
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": MODEL,
"messages": messages
}
try:
res = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=payload)
res.raise_for_status()
reply = res.json()["choices"][0]["message"]["content"]
except Exception as e:
reply = f"❌ Error: {e}"
return reply
# UI
gr.ChatInterface(
fn=chat_with_data,
title="MK Private Assistant",
description="Ask me about LogiqCurve services. I respond only using website data.",
theme="soft"
).launch()