Lokasi ngalangkungan proxy:   [ UP ]  
[Ngawartoskeun bug]   [Panyetelan cookie]                
Skip to content

feat(agent): add push_notification to inject messages during multi-turn prompts#1858

Open
lazytanuki wants to merge 1 commit into
0xPlaygrounds:mainfrom
lazytanuki:agent-notification
Open

feat(agent): add push_notification to inject messages during multi-turn prompts#1858
lazytanuki wants to merge 1 commit into
0xPlaygrounds:mainfrom
lazytanuki:agent-notification

Conversation

@lazytanuki

Copy link
Copy Markdown

Hi!

This PR adds a push_notification method to Agent that allows injecting user messages into an already-running multi-turn prompt, similar to how OpenCode makes it possible to send input to an active agent mid-conversation.

How it works

  • Agent::push_notification(conversation_id, message) enqueues a message into a per-conversation pending queue.
  • At the start of each loop iteration (both streaming and non-streaming), the queue is drained and messages are injected as User messages into the conversation history.
  • The queue is stored behind Arc<Mutex<...>>, so cloning the agent shares the same queue, enabling cross-task patterns like spawning a background watcher that calls push_notification when an external event occurs.

Example

let agent = openai::Client::from_env()?
    .agent(openai::GPT_5_2)
    .conversation_id("my-conv")
    .toot(some_tool)
    .build();
let agent_clone = agent.clone();

let prompt_task = tokio::spawn(async move {
    // Start a long running multi-turn prompt.
    let resp = agent.prompt("Do this and that with your available tools.").await.unwrap();
    println!("{resp}");
})

let some_watcher_task = tokio::spawn(async move {
    // ... wait for some condition ...
    agent_clone.push_notification("my-conv", "Continue, but you should know that ...".to_string());
});

// Wait on both tasks...

Disclosure

  • Feature code was handwritten.
  • Tests were AI-generated then checked.

Thanks!

…turn prompts

Add a `pending_notifications` field to `Agent` that acts as a
per-conversation
message queue, and a `push_notification` method to enqueue messages from
outside the prompt loop.

The queued messages are consumed as `User` messages at the start of each
loop iteration in both the non-streaming and streaming prompt paths,
allowing
external events (e.g. a background task or signal from a tool) to inject
new input mid-conversation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant