zkmine commited on
Commit
bfe3791
·
verified ·
1 Parent(s): 7b38496

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -0
app.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import chromadb
2
+ from sentence_transformers import SentenceTransformer
3
+ import gradio as gr
4
+
5
+ # Load embedding model
6
+ EMBED_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
7
+ model = SentenceTransformer(EMBED_MODEL)
8
+
9
+ # Load existing ChromaDB
10
+ client = chromadb.Client(persist_directory=".chromadb")
11
+ collection_name = "semantic_docs"
12
+ collection = client.get_collection(collection_name)
13
+
14
+ # Semantic search function
15
+ def semantic_search(query, top_k=3):
16
+ q_emb = model.encode([query], convert_to_numpy=True)[0].tolist()
17
+ results = collection.query(
18
+ query_embeddings=[q_emb],
19
+ n_results=top_k,
20
+ include=["documents", "metadatas", "distances"]
21
+ )
22
+ docs = results.get("documents", [[]])[0]
23
+ metas = results.get("metadatas", [[]])[0]
24
+ dists = results.get("distances", [[]])[0]
25
+ out = []
26
+ for doc, meta, dist in zip(docs, metas, dists):
27
+ out.append(f"#{meta['chunk_id']} (dist={dist:.4f})\nSource: {meta['source']}\n{doc}\n")
28
+ return "\n\n".join(out)
29
+
30
+ # Gradio UI
31
+ def gr_search(query, top_k=3):
32
+ return semantic_search(query, top_k=top_k)
33
+
34
+ demo = gr.Interface(
35
+ fn=gr_search,
36
+ inputs=[gr.Textbox(lines=1, placeholder="Enter query here"), gr.Slider(1, 10, value=3, label="Top K")],
37
+ outputs=gr.Textbox(label="Top Matches"),
38
+ title="Semantic Search Demo"
39
+ )
40
+
41
+ if __name__ == "__main__":
42
+ demo.launch(server_name="0.0.0.0", server_port=7860)