QOL fixes for interactive cli research

This commit is contained in:
Yiorgis Gozadinos 2025-12-17 17:55:40 +02:00
parent 9c766846c0
commit 08349e5c0e
No known key found for this signature in database
2 changed files with 37 additions and 23 deletions

View file

@ -359,6 +359,7 @@ def research(
client=client, client=client,
config=app.config, config=app.config,
search_filter=filter, search_filter=filter,
question=question,
) )
finally: finally:
client.close() client.close()

View file

@ -369,6 +369,7 @@ async def run_chat_loop(
client: HaikuRAG, client: HaikuRAG,
config: AppConfig | None = None, config: AppConfig | None = None,
search_filter: str | None = None, search_filter: str | None = None,
question: str | None = None,
) -> None: ) -> None:
"""Run an interactive chat loop for research. """Run an interactive chat loop for research.
@ -376,6 +377,7 @@ async def run_chat_loop(
client: HaikuRAG client for document operations client: HaikuRAG client for document operations
config: Application configuration (uses global config if None) config: Application configuration (uses global config if None)
search_filter: Optional SQL WHERE clause to filter documents search_filter: Optional SQL WHERE clause to filter documents
question: Optional initial research question (skips initial chat if provided)
""" """
config = config or get_config() config = config or get_config()
console = Console() console = Console()
@ -392,6 +394,12 @@ async def run_chat_loop(
while True: while True:
try: try:
# Use provided question or get one through conversation
if question:
research_question = question
console.print(f"[dim]Starting research: {research_question}[/dim]")
question = None # Clear so subsequent loops go through chat
else:
# Initial conversation loop - chat until user wants to research # Initial conversation loop - chat until user wants to research
research_question = None research_question = None
while research_question is None: while research_question is None:
@ -409,7 +417,9 @@ async def run_chat_loop(
if decision.action == "research" and decision.research_question: if decision.action == "research" and decision.research_question:
research_question = decision.research_question research_question = decision.research_question
console.print(f"[dim]Starting research: {research_question}[/dim]") console.print(
f"[dim]Starting research: {research_question}[/dim]"
)
elif decision.action == "chat" and decision.message: elif decision.action == "chat" and decision.message:
console.print( console.print(
f"\n[bold cyan]Assistant:[/bold cyan] {decision.message}" f"\n[bold cyan]Assistant:[/bold cyan] {decision.message}"
@ -447,7 +457,8 @@ async def run_chat_loop(
console.print(Markdown(f"**Sources:** {report.sources_summary}")) console.print(Markdown(f"**Sources:** {report.sources_summary}"))
except KeyboardInterrupt: except KeyboardInterrupt:
console.print("\n[dim]Interrupted. Type 'exit' to quit.[/dim]") console.print("\n[dim]Goodbye![/dim]")
return
except Exception as e: except Exception as e:
console.print(f"[red]Error: {e}[/red]") console.print(f"[red]Error: {e}[/red]")
@ -456,6 +467,7 @@ def interactive_research(
client: HaikuRAG, client: HaikuRAG,
config: AppConfig | None = None, config: AppConfig | None = None,
search_filter: str | None = None, search_filter: str | None = None,
question: str | None = None,
) -> None: ) -> None:
"""Entry point for interactive research mode. """Entry point for interactive research mode.
@ -463,5 +475,6 @@ def interactive_research(
client: HaikuRAG client for document operations client: HaikuRAG client for document operations
config: Application configuration (uses global config if None) config: Application configuration (uses global config if None)
search_filter: Optional SQL WHERE clause to filter documents search_filter: Optional SQL WHERE clause to filter documents
question: Optional initial research question (skips initial chat if provided)
""" """
asyncio.run(run_chat_loop(client, config, search_filter)) asyncio.run(run_chat_loop(client, config, search_filter, question))