OpenMark / scripts /search.py
codingwithadi's picture
Upload folder using huggingface_hub
81598c5 verified
"""
OpenMark CLI Search — instant search from terminal.
Usage:
C:\\Python313\\python scripts/search.py "RAG tools"
C:\\Python313\\python scripts/search.py "LangGraph" --category "Agent Development"
C:\\Python313\\python scripts/search.py "embeddings" --n 20
C:\\Python313\\python scripts/search.py --tag "rag"
C:\\Python313\\python scripts/search.py --stats
"""
import sys
import os
import argparse
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
sys.stdout.reconfigure(encoding="utf-8")
from openmark.embeddings.factory import get_embedder
from openmark.stores import chroma as chroma_store
from openmark.stores import neo4j_store
def print_results(results: list[dict]):
if not results:
print("No results found.")
return
for r in results:
title = r.get("title") or r.get("url")
url = r.get("url", "")
cat = r.get("category", "")
sim = r.get("similarity", "")
score = r.get("score", "")
tags = ", ".join(t for t in r.get("tags", []) if t)
print(f"\n {r.get('rank', '-')}. {title}")
print(f" {url}")
if cat: print(f" Category: {cat}")
if tags: print(f" Tags: {tags}")
if score: print(f" Score: {score}")
if sim: print(f" Similarity: {sim}")
def main():
parser = argparse.ArgumentParser(description="OpenMark CLI Search")
parser.add_argument("query", nargs="?", default=None, help="Search query")
parser.add_argument("--category", default=None, help="Filter by category")
parser.add_argument("--tag", default=None, help="Search by tag (graph lookup)")
parser.add_argument("--n", type=int, default=10, help="Number of results")
parser.add_argument("--stats", action="store_true", help="Show knowledge base stats")
args = parser.parse_args()
if args.stats:
chroma = chroma_store.get_stats()
neo4j = neo4j_store.get_stats()
print("\nOpenMark Stats:")
print(f" ChromaDB vectors: {chroma.get('total', 0)}")
print(f" Neo4j bookmarks: {neo4j.get('bookmarks', 0)}")
print(f" Neo4j tags: {neo4j.get('tags', 0)}")
return
if args.tag:
print(f"\nSearching by tag: '{args.tag}'")
results = neo4j_store.find_by_tag(args.tag, limit=args.n)
for r in results:
print(f"\n - {r.get('title', '')}")
print(f" {r.get('url', '')} (score: {r.get('score', '')})")
return
if not args.query:
parser.print_help()
return
print(f"\nSearching: '{args.query}'")
if args.category:
print(f"Category filter: {args.category}")
embedder = get_embedder()
results = chroma_store.search(
args.query, embedder, n=args.n, category=args.category
)
print_results(results)
if __name__ == "__main__":
main()