File size: 1,452 Bytes
5a7dc20
581f828
 
 
 
a643efa
 
581f828
 
 
 
 
 
 
 
 
 
 
 
5a7dc20
581f828
 
5a7dc20
 
581f828
 
 
 
 
 
 
 
 
5a7dc20
 
581f828
5a7dc20
 
 
 
 
 
581f828
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from sentence_transformers import SentenceTransformer
import numpy as np
import logging, pickle,os
import faiss
import gradio as gr
INDEX_PATH = r"data/faiss_index.idx"
DOCUMENT_PATH = r"data/faiss_documents.pk1"
MODEL_NAME = 'all-MiniLM-L6-v2'
TOP_K_DEFAULT = 1
model = SentenceTransformer(MODEL_NAME)
def query_engine(query, top_k = TOP_K_DEFAULT):
    logging.info("Loading faiss index and documents")
    loaded_index = faiss.read_index(INDEX_PATH)
    with open(DOCUMENT_PATH,'rb') as f:
        docs = pickle.load(f)
    q_emb = model.encode([query],convert_to_numpy= True)
    q_emb = np.asarray(q_emb,dtype = np.float32)
    q_emb = np.ascontiguousarray(q_emb)
    faiss.normalize_L2(q_emb)
    D,I = loaded_index.search(q_emb, top_k)
    # print("FAISS score (inner product, larger is better)",D)
    # print("I is ",I)
    results = []
    for idx in I[0]:
        if idx < 0:
            continue
        results.append({
            'idx':int(idx),
            'instruction': docs[idx]['instruction'],
            'output': docs[idx]['output'],
            'text_for_embedding': docs[idx]['text_for_embedding']
        })
    return results[0]['output']

demo = gr.Interface(
    fn = query_engine,
    inputs = [gr.Textbox(label = "Question", lines = 4, max_lines = 8)],
    outputs = [gr.Textbox(label = "Answer", lines = 4, max_lines = 8)],
    title = "DSCM KNOWLEDGE BOT"
)

if __name__ == "__main__":
    demo.launch()