Support multiline chat input.

This commit is contained in:
AI Christianson 2024-12-20 16:07:03 -05:00
parent 1a125a0139
commit 5b4aa746bf
2 changed files with 28 additions and 5 deletions

View File

@ -341,4 +341,5 @@ Exit Criteria:
Remember: Remember:
- Always begin by calling ask_human. - Always begin by calling ask_human.
- Always ask_human before finalizing or exiting. - Always ask_human before finalizing or exiting.
- Never announce that you are going to ask the human, just do it.
""" """

View File

@ -1,13 +1,23 @@
"""Tool for asking questions to the human user."""
from langchain_core.tools import tool from langchain_core.tools import tool
from prompt_toolkit import PromptSession
from prompt_toolkit.key_binding import KeyBindings
from rich.console import Console from rich.console import Console
from rich.prompt import Prompt
from rich.panel import Panel from rich.panel import Panel
from rich.markdown import Markdown from rich.markdown import Markdown
console = Console() console = Console()
def create_keybindings():
"""Create custom key bindings for Ctrl+D submission."""
bindings = KeyBindings()
@bindings.add('c-d')
def submit(event):
"""Trigger submission when Ctrl+D is pressed."""
event.current_buffer.validate_and_handle()
return bindings
@tool @tool
def ask_human(question: str) -> str: def ask_human(question: str) -> str:
"""Ask the human user a question with a nicely formatted display. """Ask the human user a question with a nicely formatted display.
@ -19,10 +29,22 @@ def ask_human(question: str) -> str:
The user's response as a string The user's response as a string
""" """
console.print(Panel( console.print(Panel(
Markdown(question), Markdown(question + "\n\n*Multiline input is supported; use Ctrl+D to submit. Use Ctrl+C to exit the program.*"),
title="💭 Question for Human", title="💭 Question for Human",
border_style="yellow bold" border_style="yellow bold"
)) ))
response = Prompt.ask("\nYour response")
session = PromptSession(
multiline=True,
key_bindings=create_keybindings(),
prompt_continuation='. ',
vi_mode=True # Enable Vi mode for more intuitive Ctrl+D behavior
)
response = session.prompt(
"> ",
wrap_lines=True
)
print() print()
return response return response