agent_stream_kit/
output.rs

1use crate::agent::Agent;
2use crate::context::AgentContext;
3use crate::error::AgentError;
4use crate::value::AgentValue;
5
6pub trait AgentOutput {
7    fn try_output_raw(
8        &self,
9        ctx: AgentContext,
10        pin: String,
11        value: AgentValue,
12    ) -> Result<(), AgentError>;
13
14    fn try_output<S: Into<String>>(
15        &self,
16        ctx: AgentContext,
17        pin: S,
18        value: AgentValue,
19    ) -> Result<(), AgentError> {
20        self.try_output_raw(ctx, pin.into(), value)
21    }
22
23    fn emit_display_raw(&self, key: String, value: AgentValue);
24
25    fn emit_display<S: Into<String>>(&self, key: S, value: AgentValue) {
26        self.emit_display_raw(key.into(), value);
27    }
28
29    fn emit_agent_spec_updated_raw(&self);
30
31    fn emit_agent_spec_updated(&self) {
32        self.emit_agent_spec_updated_raw();
33    }
34
35    fn emit_error_raw(&self, message: String);
36
37    #[allow(unused)]
38    fn emit_error<S: Into<String>>(&self, message: S) {
39        self.emit_error_raw(message.into());
40    }
41}
42
43impl<T: Agent> AgentOutput for T {
44    fn try_output_raw(
45        &self,
46        ctx: AgentContext,
47        pin: String,
48        value: AgentValue,
49    ) -> Result<(), AgentError> {
50        self.askit()
51            .try_send_agent_out(self.id().into(), ctx, pin, value)
52    }
53
54    fn emit_display_raw(&self, key: String, value: AgentValue) {
55        self.askit()
56            .emit_agent_display(self.id().to_string(), key, value);
57    }
58
59    fn emit_agent_spec_updated_raw(&self) {
60        self.askit().emit_agent_spec_updated(self.id().to_string());
61    }
62
63    fn emit_error_raw(&self, message: String) {
64        self.askit()
65            .emit_agent_error(self.id().to_string(), message);
66    }
67}