~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/asyncai

0
0
main
84 lines · 2.2 KB Raw History
use serde::{Deserialize, Serialize};

use crate::ids::{AgentId, ThreadId};
use crate::message::{AgentContent, Role};

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ActionType {
    NewAgent,
    IngestFile,
    NewThread,
    AddMessage,
    RunThread,
    CheckThread,
    Shutdown,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct NewAgentAction {
    pub agent_id: Option<AgentId>,
    pub agent_name: String,
    pub agent_instructions: String,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct IngestFileAction {
    pub agent_id: AgentId,
    pub file_path: String,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct NewThreadAction {
    pub agent_id: AgentId,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CheckThreadAction {
    pub agent_id: AgentId,
    pub thread_id: ThreadId,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AddMessageAction {
    pub agent_id: AgentId,
    pub thread_id: ThreadId,
    pub message_role: Role,
    pub message_content: AgentContent,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct RunThreadAction {
    pub agent_id: AgentId,
    pub thread_id: ThreadId,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(
    tag = "action_type",
    content = "action_data",
    rename_all = "snake_case"
)]
pub enum AgiAction {
    NewAgent(NewAgentAction),
    IngestFile(IngestFileAction),
    NewThread(NewThreadAction),
    AddMessage(AddMessageAction),
    RunThread(RunThreadAction),
    CheckThread(CheckThreadAction),
    Shutdown,
}

impl AgiAction {
    pub fn action_type(&self) -> ActionType {
        match self {
            Self::NewAgent(_) => ActionType::NewAgent,
            Self::IngestFile(_) => ActionType::IngestFile,
            Self::NewThread(_) => ActionType::NewThread,
            Self::AddMessage(_) => ActionType::AddMessage,
            Self::RunThread(_) => ActionType::RunThread,
            Self::CheckThread(_) => ActionType::CheckThread,
            Self::Shutdown => ActionType::Shutdown,
        }
    }
}