mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-16 04:29:31 +00:00
Move the generic async coroutine out of the host crate into litellm-coroutine, with its requirements documented in the crate's AGENTS.md. RouteMachine becomes CallMachine on top of it, host protocol ops move to host/src/protocol.rs, and the messages, OCR, host-python, python-bridge and legacy callbacks crates adopt the new types. Adds error definition rules to litellm-rust/AGENTS.md. Co-authored-by: Yujong Lee <yujong@berri.ai>
60 lines
1.4 KiB
Rust
60 lines
1.4 KiB
Rust
use std::{
|
|
fmt,
|
|
future::Future,
|
|
pin::Pin,
|
|
sync::{Arc, Weak},
|
|
task::{Context, Poll},
|
|
};
|
|
|
|
use tokio::sync::oneshot;
|
|
|
|
use crate::Abandoned;
|
|
|
|
/// The one way to answer a yield. Sending or dropping it settles the yield.
|
|
pub struct Reply<A> {
|
|
slot: oneshot::Sender<A>,
|
|
outstanding: Arc<()>,
|
|
}
|
|
|
|
impl<A> Reply<A> {
|
|
/// An answer the yield no longer awaits is discarded.
|
|
pub fn send(self, answer: A) {
|
|
let _ = self.slot.send(answer);
|
|
}
|
|
|
|
/// Alive until this reply is sent or dropped.
|
|
pub(crate) fn outstanding(&self) -> Weak<()> {
|
|
Arc::downgrade(&self.outstanding)
|
|
}
|
|
}
|
|
|
|
impl<A> fmt::Debug for Reply<A> {
|
|
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
formatter.write_str("Reply")
|
|
}
|
|
}
|
|
|
|
/// The waiting end of a [`Reply`].
|
|
pub struct Answer<A> {
|
|
slot: oneshot::Receiver<A>,
|
|
}
|
|
|
|
impl<A> Future for Answer<A> {
|
|
type Output = Result<A, Abandoned>;
|
|
|
|
fn poll(mut self: Pin<&mut Self>, context: &mut Context<'_>) -> Poll<Self::Output> {
|
|
Pin::new(&mut self.slot)
|
|
.poll(context)
|
|
.map(|answer| answer.map_err(|_| Abandoned))
|
|
}
|
|
}
|
|
|
|
/// A reply outside any coroutine, for answering a host operation directly.
|
|
pub fn reply<A>() -> (Reply<A>, Answer<A>) {
|
|
let (slot, answer) = oneshot::channel();
|
|
let reply = Reply {
|
|
slot,
|
|
outstanding: Arc::new(()),
|
|
};
|
|
(reply, Answer { slot: answer })
|
|
}
|