-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvector_search.py
46 lines (37 loc) · 1.37 KB
/
vector_search.py
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
import mongo_db
import embedder
def vector_search(user_query, collection):
query_embedding = embedder.get_embedding(user_query)
if query_embedding is None:
return "Invalid query or embedding generation failed"
pipeline = [
{
"$vectorSearch": {
"index": "news_idx",
"queryVector": query_embedding,
"path": "News_embedding",
"numCandidates": 25,
"limit": 1, # Return top 4 matches
}
},
{
"$project": {
"_id": 0,
"Name": 1,
"Price": 1,
"Change": 1,
"Volume": 1,
"Market Cap": 1,
"News": 1,
"score": {"$meta": "vectorSearchScore"},
}
},
]
results = mongo_db.get_collection().aggregate(pipeline)
return list(results)
def get_search_result(query, collection):
get_knowledge = vector_search(query, mongo_db.get_collection())
search_result = ""
for result in get_knowledge:
search_result += f"- Name: {result.get('Name', 'N/A')}, Price: {result.get('Price', 'N/A')}, Change: {result.get('Change', 'N/A')}, Volume: {result.get('Volume', 'N/A')}, Market Cap: {result.get('Market Cap', 'N/A')}, News: {result.get('News', 'N/A')}\n\n"
return search_result