use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct NodeId(pub usize);
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum NodeKind {
Llm(String),
Tool(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkerNode {
pub id: NodeId,
pub name: String,
pub kind: NodeKind,
pub affinity: Vec<f32>,
pub bias: f32,
}
impl WorkerNode {
pub fn new(id: usize, name: impl Into<String>, kind: NodeKind, affinity: Vec<f32>) -> Self {
Self { id: NodeId(id), name: name.into(), kind, affinity, bias: 0.0 }
}
pub fn with_bias(mut self, bias: f32) -> Self {
self.bias = bias;
self
}
}