diff --git a/src/haiku/rag/app.py b/src/haiku/rag/app.py index 51e63751..d5926312 100644 --- a/src/haiku/rag/app.py +++ b/src/haiku/rag/app.py @@ -192,9 +192,9 @@ class HaikuRAGApp: f"[yellow]Document with id {doc_id} not found.[/yellow]" ) - async def search(self, query: str, limit: int = 5): + async def search(self, query: str, limit: int = 5, filter: str | None = None): async with HaikuRAG(db_path=self.db_path) as self.client: - results = await self.client.search(query, limit=limit) + results = await self.client.search(query, limit=limit, filter=filter) if not results: self.console.print("[yellow]No results found.[/yellow]") return diff --git a/src/haiku/rag/cli.py b/src/haiku/rag/cli.py index 1d778487..1cc04154 100644 --- a/src/haiku/rag/cli.py +++ b/src/haiku/rag/cli.py @@ -221,6 +221,12 @@ def search( "-l", help="Maximum number of results to return", ), + filter: str | None = typer.Option( + None, + "--filter", + "-f", + help="SQL WHERE clause to filter documents (e.g., \"uri LIKE '%arxiv%'\")", + ), db: Path = typer.Option( Config.storage.data_dir / "haiku.rag.lancedb", "--db", @@ -230,7 +236,7 @@ def search( from haiku.rag.app import HaikuRAGApp app = HaikuRAGApp(db_path=db) - asyncio.run(app.search(query=query, limit=limit)) + asyncio.run(app.search(query=query, limit=limit, filter=filter)) @cli.command("ask", help="Ask a question using the QA agent")