QOL fixes for interactive cli research
This commit is contained in:
parent
9c766846c0
commit
08349e5c0e
2 changed files with 37 additions and 23 deletions
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue