synapto_interface/
interaction.rs1#![doc = include_str!("interaction.md")]
2
3use crate::cognitive::CognitiveReasoning;
4use crate::peer_input::PeerInput;
5use crate::plugin::MessageChannel;
6use crate::plugin::Plugin;
7use crate::sync::{mpsc, watch};
8use async_trait::async_trait;
9use schemars::JsonSchema;
10use serde::{Deserialize, Serialize};
11
12#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Debug, Clone)]
13pub struct CognitiveSpoken(pub String);
14
15#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Debug, Clone)]
16pub struct CognitiveWritten {
17 pub target_channel: MessageChannel,
18 pub text: String,
19}
20
21#[derive(
22 Clone, Debug, serde :: Serialize, serde :: Deserialize, schemars :: JsonSchema, PartialEq, Eq,
23)]
24pub struct ObservedInteraction {
25 pub timestamp: Timestamp,
26 pub user_messages: Vec<PeerInput>,
27 pub cognitive_spoken: Option<CognitiveSpoken>,
28 pub cognitive_written: Option<CognitiveWritten>,
29 pub cognitive_reasoning: Option<CognitiveReasoning>,
30}
31
32#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone, schemars :: JsonSchema)]
33pub struct NotClearInteraction {
34 pub timestamp: Timestamp,
35 pub user_messages: Vec<PeerInput>,
36 pub cognitive_spoken: Option<CognitiveSpoken>,
37 pub cognitive_written: Option<CognitiveWritten>,
38}
39
40#[derive(
41 Serialize,
42 Deserialize,
43 PartialEq,
44 Eq,
45 Debug,
46 Clone,
47 Default,
48 schemars :: JsonSchema,
49 derive_more :: Deref,
50 derive_more :: DerefMut,
51 derive_more :: IntoIterator,
52)]
53pub struct NotClearInteractionMemory(pub std::collections::VecDeque<NotClearInteraction>);
54
55impl From<Vec<NotClearInteraction>> for NotClearInteractionMemory {
56 fn from(value: Vec<NotClearInteraction>) -> Self {
57 Self(value.into())
58 }
59}
60
61#[async_trait]
62pub trait RetrospectiveConsolidationPlugin: Plugin + Send + Sync {
63 async fn start(
64 &self,
65 not_clear_memory_rx: watch::Receiver<crate::interaction::NotClearInteractionMemory>,
66 resolve_not_clear_tx: mpsc::Sender<crate::interaction::Timestamp>,
67 ) -> Result<(), String>;
68}
69
70#[async_trait]
71pub trait InteractionObserver: Plugin + Send + Sync {
72 async fn start(
73 &self,
74 interaction_rx: mpsc::Receiver<crate::interaction::ObservedInteraction>,
75 ) -> Result<(), String>;
76}
77
78#[derive(
79 Serialize, Deserialize, JsonSchema, PartialEq, Eq, Debug, Clone, PartialOrd, Ord, Copy,
80)]
81pub struct Timestamp(pub i64);