-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathsearch.py
More file actions
39 lines (33 loc) · 1.51 KB
/
search.py
File metadata and controls
39 lines (33 loc) · 1.51 KB
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
import os
from argparse import ArgumentParser
import dotenv
import psycopg
from jixia.structs import pp_name
from pydantic import TypeAdapter
from retrieve import Retriever, QueryResult
def main(query: list[str], num_results: int, json_output: bool):
with psycopg.connect(os.environ["CONNECTION_STRING"], autocommit=True) as conn:
retriever = Retriever(os.environ["CHROMA_PATH"], conn)
results = retriever.batch_search(query, num_results)
if json_output:
print(TypeAdapter(list[list[QueryResult]]).dump_json(results).decode())
else:
for q, rs in zip(query, results):
print("Results for", q)
for i, r in enumerate(rs):
result = r.result
print(str(i) + ":")
print("Distance:", r.distance)
print(result.kind, pp_name(result.name), result.signature)
print("Elaborated type:", result.type)
print(result.informal_name + ":", result.informal_description)
print()
print("---")
if __name__ == "__main__":
dotenv.load_dotenv()
parser = ArgumentParser()
parser.add_argument("-n", "--num", type=int, help="Number of results per each query", default=5)
parser.add_argument("--json", action="store_true", help="Output in JSON format")
parser.add_argument("query", nargs="+", help="Any number of query strings")
args = parser.parse_args()
main(args.query, args.num, args.json)