Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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