Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,6 @@ jobs:
nemo-relay
nemo-relay-adaptive
nemo-relay-pii-redaction
nemo-relay-switchyard
nemo-relay-ffi
nemo-relay-cli
)
Expand Down
422 changes: 0 additions & 422 deletions ATTRIBUTIONS-Rust.md

Large diffs are not rendered by default.

40 changes: 0 additions & 40 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ members = [
"crates/worker",
"crates/adaptive",
"crates/pii-redaction",
"crates/switchyard",
"crates/cli",
# Language Bindings
"crates/python",
Expand All @@ -34,8 +33,6 @@ nemo-relay-worker-proto = { version = "0.8.0", path = "crates/worker-proto" }
nemo-relay-worker = { version = "0.8.0", path = "crates/worker" }
nemo-relay-adaptive = { version = "0.8.0", path = "crates/adaptive" }
nemo-relay-pii-redaction = { version = "0.8.0", path = "crates/pii-redaction" }
nemo-relay-switchyard = { version = "0.8.0", path = "crates/switchyard" }
switchyard-translation = "0.1.0"
nemo-relay-ffi = { version = "0.8.0", path = "crates/ffi" }
nemo-relay-cli = { version = "0.8.0", path = "crates/cli" }
opentelemetry = { version = "0.32", default-features = false }
Expand Down
15 changes: 6 additions & 9 deletions RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ The release pipeline publishes these package surfaces from a tag push:

| Ecosystem | Published Surface |
|---|---|
| crates.io | `nemo-relay-types`, `nemo-relay-plugin`, `nemo-relay-worker-proto`, `nemo-relay-worker`, `nemo-relay`, `nemo-relay-adaptive`, `nemo-relay-pii-redaction`, `nemo-relay-switchyard`, `nemo-relay-ffi`, `nemo-relay-cli` |
| crates.io | `nemo-relay-types`, `nemo-relay-plugin`, `nemo-relay-worker-proto`, `nemo-relay-worker`, `nemo-relay`, `nemo-relay-adaptive`, `nemo-relay-pii-redaction`, `nemo-relay-ffi`, `nemo-relay-cli` |
| PyPI | `nemo-relay` wheels and source distribution, `nemo-relay-plugin` and `nemo-relay-cli-bin` wheels |
| npm | `nemo-relay-node` and its seven platform packages, and `nemo-relay-openclaw` |
| GitHub Releases | CLI binaries, `nemo-relay` and `nemo-relay-cli-bin` wheels, Node npm tarballs, and checksums |
Expand All @@ -56,8 +56,7 @@ NeMo Relay versions are anchored on the workspace SemVer in the repository root
- The root `Cargo.toml` `workspace.dependencies` entries for
`nemo-relay-types`, `nemo-relay-plugin`, `nemo-relay-worker-proto`,
`nemo-relay-worker`, `nemo-relay`, `nemo-relay-adaptive`,
`nemo-relay-pii-redaction`, `nemo-relay-switchyard`, `nemo-relay-ffi`, and
`nemo-relay-cli` must
`nemo-relay-pii-redaction`, `nemo-relay-ffi`, and `nemo-relay-cli` must
stay aligned with that same version.
- `crates/node/package.json` carries the base npm version for the Node.js
package. The repository-root `package-lock.json` carries the npm workspace
Expand Down Expand Up @@ -141,7 +140,7 @@ Before you create a release tag, confirm the following:
- crates.io trusted publishers for `nemo-relay-types`,
`nemo-relay-plugin`, `nemo-relay-worker-proto`, `nemo-relay-worker`,
`nemo-relay`, `nemo-relay-adaptive`, `nemo-relay-pii-redaction`,
`nemo-relay-switchyard`, `nemo-relay-ffi`, and `nemo-relay-cli` are
`nemo-relay-ffi`, and `nemo-relay-cli` are
configured for the top-level
[`.github/workflows/ci.yaml`](.github/workflows/ci.yaml) workflow
- GitHub Actions `id-token: write` access is available for the top-level npm publish job
Expand Down Expand Up @@ -171,8 +170,7 @@ The helper updates:
2. The root [`Cargo.toml`](Cargo.toml) `workspace.dependencies` versions for
`nemo-relay-types`, `nemo-relay-plugin`, `nemo-relay-worker-proto`,
`nemo-relay-worker`, `nemo-relay`, `nemo-relay-adaptive`,
`nemo-relay-pii-redaction`, `nemo-relay-switchyard`, `nemo-relay-ffi`, and
`nemo-relay-cli`.
`nemo-relay-pii-redaction`, `nemo-relay-ffi`, and `nemo-relay-cli`.
3. [`crates/node/package.json`](crates/node/package.json) and the `crates/node`
entry in the root [`package-lock.json`](package-lock.json) to the same
release version.
Expand Down Expand Up @@ -280,7 +278,7 @@ The release pipeline then:
runs `cargo publish --package` for `nemo-relay-types`,
`nemo-relay-plugin`, `nemo-relay-worker-proto`, `nemo-relay-worker`,
`nemo-relay`, `nemo-relay-adaptive`, `nemo-relay-pii-redaction`,
`nemo-relay-switchyard`, `nemo-relay-ffi`, and `nemo-relay-cli` through
`nemo-relay-ffi`, and `nemo-relay-cli` through
trusted publishing from
the top-level workflow
- `publish-python` downloads the `nemo-relay` wheel and source distribution
Expand Down Expand Up @@ -351,8 +349,7 @@ After the release is live, verify:

1. The `nemo-relay-types`, `nemo-relay-plugin`, `nemo-relay-worker-proto`,
`nemo-relay-worker`, `nemo-relay`, `nemo-relay-adaptive`,
`nemo-relay-pii-redaction`, `nemo-relay-switchyard`, `nemo-relay-ffi`, and
`nemo-relay-cli` crates
`nemo-relay-pii-redaction`, `nemo-relay-ffi`, and `nemo-relay-cli` crates
are visible on crates.io.
2. The `nemo-relay` and `nemo-relay-cli-bin` wheels are visible on PyPI, and
`pip install "nemo-relay[cli]"` exposes `nemo-relay`.
Expand Down
4 changes: 2 additions & 2 deletions crates/adaptive/src/response_cache/key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use crate::response_cache::store::CACHE_SCHEMA_VERSION;
/// dropped before fingerprinting (IDs, routing, bookkeeping, streaming flag).
pub const DEFAULT_SKIP_KEYS: &[&str] = &["stream", "user", "metadata", "store"];

/// Relay-owned Switchyard backend partition. It is always keyed and never
/// Relay-owned routing backend partition. It is always keyed and never
/// depends on the user-configured header allowlist.
const INTERNAL_DISPATCH_BACKEND_HEADER: &str = "x-nemo-relay-internal-dispatch-backend";

Expand Down Expand Up @@ -562,7 +562,7 @@ fn allowlisted_headers(headers: &Map<String, Json>, allowlist: &[String]) -> Map
}

/// Builds the key's header partition from configured headers plus the
/// Relay-owned Switchyard backend ID.
/// Relay-owned routing backend ID.
fn cache_key_headers(headers: &Map<String, Json>, allowlist: &[String]) -> Map<String, Json> {
let mut kept = allowlisted_headers(headers, allowlist);
for (header_name, value) in headers {
Expand Down
8 changes: 4 additions & 4 deletions crates/adaptive/tests/integration/response_cache_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ mod response_cache_common;
use response_cache_common::{activate_cache, call, chat_request};

static TEST_MUTEX: Mutex<()> = Mutex::const_new(());
const SWITCHYARD_BACKEND_HEADER: &str = "x-nemo-relay-internal-dispatch-backend";
const ROUTING_BACKEND_HEADER: &str = "x-nemo-relay-internal-dispatch-backend";

fn reset_global() {
let _ = clear_plugin_configuration();
Expand Down Expand Up @@ -79,7 +79,7 @@ fn chat_request_for_backend(prompt: &str, backend: &str) -> LlmRequest {
let mut request = chat_request(prompt);
request
.headers
.insert(SWITCHYARD_BACKEND_HEADER.to_string(), json!(backend));
.insert(ROUTING_BACKEND_HEADER.to_string(), json!(backend));
request
}

Expand Down Expand Up @@ -269,7 +269,7 @@ async fn a_different_request_is_a_miss() {
}

#[tokio::test]
async fn switchyard_backends_use_independent_buffered_entries() {
async fn routing_backends_use_independent_buffered_entries() {
let _guard = TEST_MUTEX.lock().await;
reset_global();
activate_cache(scoped_cache_config()).await;
Expand Down Expand Up @@ -933,7 +933,7 @@ async fn streaming_repeat_is_a_hit_that_skips_the_provider_and_replays_the_aggre
}

#[tokio::test]
async fn switchyard_backends_use_independent_streaming_entries() {
async fn routing_backends_use_independent_streaming_entries() {
let _guard = TEST_MUTEX.lock().await;
reset_global();
activate_cache(scoped_cache_config()).await;
Expand Down
2 changes: 1 addition & 1 deletion crates/adaptive/tests/unit/response_cache/key_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ fn namespace_and_provider_separate_keys() {
}

#[test]
fn switchyard_backend_partition_is_keyed_without_allowlisting() {
fn routing_backend_partition_is_keyed_without_allowlisting() {
let config = cache_all_config();
assert!(config.header_allowlist.is_empty());
let make = |backend: &str| {
Expand Down
7 changes: 0 additions & 7 deletions crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,11 @@ workspace = true
[features]
default = ["atof-streaming"]
atof-streaming = ["nemo-relay/atof-streaming"]
switchyard = ["dep:nemo-relay-switchyard"]

[dependencies]
nemo-relay = { workspace = true, features = ["guardrails-remote", "object-store", "worker-grpc"] }
nemo-relay-adaptive = { workspace = true, features = ["redis-backend"] }
nemo-relay-pii-redaction.workspace = true
nemo-relay-switchyard = { workspace = true, optional = true, features = ["schema"] }
async-stream = "0.3"
axum = "0.8"
base64 = "0.22"
Expand Down Expand Up @@ -82,8 +80,3 @@ syn = { version = "2", features = ["full", "visit"] }
tempfile = "3"
tokio = { version = "1", features = ["test-util"] }
tower = { version = "0.5", features = ["util"] }

[[test]]
name = "switchyard_process_e2e"
path = "tests/switchyard_process_e2e.rs"
required-features = ["switchyard"]
2 changes: 1 addition & 1 deletion crates/cli/src/gateway/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ pub(crate) async fn passthrough(

/// Exact failure material from one ordinary upstream attempt.
///
/// Retry-aware Switchyard attempts use [`FlowError::Upstream`] for routing.
/// Retry-aware routing attempts use [`FlowError::Upstream`].
/// Ordinary attempts keep their original HTTP bytes and multi-value headers so
/// the selected attempt can be relayed without a shared last-write-wins slot.
enum CapturedUpstreamFailure {
Expand Down
Loading
Loading