FPV2 / app.py
FORMATPOTTER's picture
Update app.py
4bccc6a verified
# app.py
import os
from docx import Document
from sentence_transformers import SentenceTransformer
import numpy as np
import gradio as gr
# Load the KB document
kb_path = "model/kb.docx"
doc = Document(kb_path)
kb_text = [p.text for p in doc.paragraphs if p.text.strip() != ""]
# Split into chunks (for simplicity, one paragraph per chunk)
chunks = kb_text
# Load sentence embedding model
embed_model = SentenceTransformer('all-MiniLM-L6-v2')
# Create embeddings for KB chunks
embeddings = embed_model.encode(chunks, convert_to_tensor=True)
# Simple cosine similarity function
def get_most_relevant(query, top_k=1):
query_emb = embed_model.encode([query], convert_to_tensor=True)
# Compute cosine similarity
cos_sim = np.dot(embeddings, query_emb.T) / (np.linalg.norm(embeddings, axis=1) * np.linalg.norm(query_emb))
top_indices = cos_sim.flatten().argsort()[-top_k:][::-1]
return [chunks[i] for i in top_indices]
# Gradio interface function
def answer_query(query):
relevant_texts = get_most_relevant(query, top_k=3)
# Combine top chunks into one answer
answer = "\n\n".join(relevant_texts)
return answer
# Gradio UI
iface = gr.Interface(
fn=answer_query,
inputs=gr.Textbox(lines=2, placeholder="Ask me anything..."),
outputs="textbox",
title="FPV2 KB Chatbot",
description="Ask questions about your KB document."
)
iface.launch(server_name="0.0.0.0", server_port=7860)