use ts_collective::{Group, Mesh};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BootstrapInfo {
pub host: String,
pub port: u16,
pub room: u64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct RemotePrefill {
pub rid: String,
pub bootstrap_token: i32,
pub cached_tokens: i64,
pub bootstrap_logprob: Option<f64>,
pub spec_candidate_ids: Option<Vec<i32>>,
pub request_pool_index: i32,
}
#[derive(Debug, Clone, PartialEq)]
pub enum PdEvent {
Bootstrapped(String),
Failed(String),
Succeeded(String),
RemotePrefillDone(RemotePrefill),
}
#[derive(Debug, thiserror::Error)]
pub enum PdError {
#[error(transparent)]
Collective(#[from] ts_collective::Error),
#[error("PD transfer: {0}")]
Peer(String),
}
pub trait TransferPeer {
fn register(&mut self, rid: &str, bootstrap: &BootstrapInfo) -> Result<(), PdError>;
fn poll(&mut self, mesh: &mut Mesh, replica: &Group) -> Result<Vec<PdEvent>, PdError>;
fn record_usage(&mut self, rid: &str, cached_tokens: i64, bootstrap_logprob: Option<f64>);
fn has_in_flight(&self) -> bool;
fn abort_room(&mut self, rid: &str, room: u64);
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EmbeddingItem {
pub index: usize,
pub host: String,
pub port: u16,
pub room: u64,
pub rows: i64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LandedItem {
pub index: usize,
pub slot: Option<usize>,
pub row_start: i64,
pub row_count: i64,
pub rows: i64,
pub sharded: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LandedRequest {
pub rid: String,
pub items: Vec<LandedItem>,
}
pub trait EmbeddingReceiver {
fn stage(&mut self, rid: &str, items: &[EmbeddingItem]);
fn poll(&mut self) -> Vec<i64>;
fn settle(&mut self, codes: &[i64]) -> Vec<LandedRequest>;
fn release(&mut self, slots: &[usize]);
fn awaiting_release(&self) -> bool;
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EmbeddingChunk {
pub room: u64,
pub source: u64,
pub rows: i64,
pub hidden: i64,
pub dtype: String,
pub nbytes: u64,
pub deepstack_source: u64,
pub deepstack_width: i64,
pub deepstack_nbytes: u64,
}
pub trait EmbeddingSender {
fn begin(&mut self, room: u64) -> bool;
fn send(&mut self, chunk: EmbeddingChunk);
fn fail(&mut self, room: u64, reason: &str);
fn concluded(&mut self) -> Vec<u64>;
}