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,31 +394,39 @@ async def run_chat_loop(
while True: while True:
try: try:
# Initial conversation loop - chat until user wants to research # Use provided question or get one through conversation
research_question = None if question:
while research_question is None: research_question = question
user_input = Prompt.ask("\n[bold blue]You[/bold blue]") 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
research_question = None
while research_question is None:
user_input = Prompt.ask("\n[bold blue]You[/bold blue]")
if not user_input.strip(): if not user_input.strip():
continue continue
if user_input.lower().strip() in ("exit", "quit", "q"): if user_input.lower().strip() in ("exit", "quit", "q"):
console.print("[dim]Goodbye![/dim]") console.print("[dim]Goodbye![/dim]")
return return
console.print("[dim]Thinking...[/dim]") console.print("[dim]Thinking...[/dim]")
decision = await initial_chat(user_input, config) decision = await initial_chat(user_input, config)
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(
elif decision.action == "chat" and decision.message: f"[dim]Starting research: {research_question}[/dim]"
console.print( )
f"\n[bold cyan]Assistant:[/bold cyan] {decision.message}" elif decision.action == "chat" and decision.message:
) console.print(
else: f"\n[bold cyan]Assistant:[/bold cyan] {decision.message}"
# Fallback - treat as research question )
research_question = user_input else:
# Fallback - treat as research question
research_question = user_input
console.print() console.print()
report = await run_interactive_research( report = await run_interactive_research(
@ -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))