Skip to main content

atomr_agents_core/
context.rs

1use serde::{Deserialize, Serialize};
2
3use crate::budget::{IterationBudget, MoneyBudget, TimeBudget, TokenBudget};
4use crate::ids::{AgentId, OrgId, TeamId};
5use crate::value::Value;
6
7/// Conversation message — mirrors `atomr_infer_core::batch::Message`
8/// but lives at this layer so strategies can construct turns without
9/// pulling in the full inference crate.
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct Message {
12    pub role: MessageRole,
13    pub content: String,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
17#[serde(rename_all = "snake_case")]
18pub enum MessageRole {
19    System,
20    User,
21    Assistant,
22    Tool,
23}
24
25/// What a single agent turn consumes.
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct TurnInput {
28    pub user: String,
29    #[serde(default)]
30    pub history: Vec<Message>,
31}
32
33/// State the per-turn pipeline reads from. Strategies receive a
34/// reference to this; they do not mutate it directly (they return
35/// fragments which the `ContextAssembler` merges).
36#[derive(Debug, Clone)]
37pub struct AgentContext {
38    pub agent_id: AgentId,
39    pub team_id: Option<TeamId>,
40    pub org_id: Option<OrgId>,
41    pub turn: TurnInput,
42}
43
44impl AgentContext {
45    pub fn for_agent(agent_id: AgentId, turn: TurnInput) -> Self {
46        Self {
47            agent_id,
48            team_id: None,
49            org_id: None,
50            turn,
51        }
52    }
53}
54
55/// Context passed to `Callable::call`. Carries the budgets so a
56/// callable can refuse work it can't afford.
57#[derive(Debug, Clone)]
58pub struct CallCtx {
59    pub agent_id: Option<AgentId>,
60    pub tokens: TokenBudget,
61    pub time: TimeBudget,
62    pub money: MoneyBudget,
63    pub iterations: IterationBudget,
64    pub trace: Vec<String>,
65}
66
67/// Context passed to `Tool::invoke`.
68#[derive(Debug, Clone)]
69pub struct InvokeCtx {
70    pub call: CallCtx,
71    pub tool_call_id: String,
72    pub raw_args: Value,
73}