Skip to main content

synapto_interface/
interaction.rs

1#![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 AiSpoken(pub String);
14
15#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Debug, Clone)]
16pub struct AiWritten {
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 ai_spoken: Option<AiSpoken>,
28    pub ai_written: Option<AiWritten>,
29    pub ai_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 ai_spoken: Option<AiSpoken>,
37    pub ai_written: Option<AiWritten>,
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);