mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-26 01:12:21 +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>
1.5 KiB
1.5 KiB
Rust workspace rules
Test placement
- Never create a
tests.rs(ortest.rs) file undersrc/, and never#[path = "tests.rs"] mod tests; - A test that reaches private items lives inline, in a
#[cfg(test)] mod tests { ... }at the bottom of the file that owns those items - A test that only uses the crate's public API lives in
crates/<crate>/tests/<subject>.rs, next tosrc/ - Split a mixed test file along that line instead of widening visibility to move it
- A test for another crate's item belongs in that crate, not in a downstream one
- Never set
autotests = falseor hand-list[[test]]targets; every file directly undertests/is discovered by cargo, and a shared helper goes intests/<name>/mod.rsortests/<subject>/support.rsso it is not picked up as a test crate of its own
Error definitions
- A crate's errors live in
src/error.rs, defined withthiserror, and re-exported fromlib.rs - Default to one top-level
Errorenum per crate, with one variant per failure mode and a#[error(...)]message on each - Wrap a lower-level error as a variant with
#[from]or#[source]instead of flattening it to a string - Exception: split into separate types when different functions fail in disjoint ways, especially when different callers see them. A shared enum would force every caller to match variants its function can never return
- Name a split type after what went wrong (a unit struct is fine for a single failure mode), not after the function that returns it