39 lines
909 B
Rust
39 lines
909 B
Rust
use crate::agent::persistence::types::{
|
|
AgentRealtime, AgentRuntime, AgentStreamEvent,
|
|
};
|
|
use crate::error::AiResult;
|
|
|
|
pub async fn publish_event(
|
|
runtime: &AgentRuntime,
|
|
_realtime: Option<&AgentRealtime>,
|
|
event: &AgentStreamEvent,
|
|
) -> AiResult<()> {
|
|
let Some(tx) = &runtime.tx else {
|
|
return Ok(());
|
|
};
|
|
|
|
let payload = match serde_json::to_string(event) {
|
|
Ok(p) => p,
|
|
Err(error) => {
|
|
tracing::warn!(error = %error, "agent sse: serialize failed");
|
|
return Ok(());
|
|
}
|
|
};
|
|
|
|
if tx.send(payload).is_err() {
|
|
tracing::debug!("agent sse: mpsc send failed, client disconnected");
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
impl AgentRuntime {
|
|
pub async fn publish(
|
|
&self,
|
|
realtime: Option<&AgentRealtime>,
|
|
event: &AgentStreamEvent,
|
|
) -> AiResult<()> {
|
|
publish_event(self, realtime, event).await
|
|
}
|
|
}
|