Repository navigation
$ llm plane: Bedrock InvokeModel (protocol: bedrock-invoke), the Anthropic dialect inside the invoke envelope (stacked on #841) - #985
Merged
Conversation
…nd is served, fail-closed (#51) Row-159 audit plane-llm L1#3: a model entry's `protocol` (#51, THE DESIGN §2 BEDROCK-INVOKE ruling; CHANGELOG "a model entry takes `protocol`") was dropped by the root's section builder and never read by the plane, so the plane wrote that model's requests in its provider's dialect and accepted an unknown override. The root now hands the member through (`kernel_sections`), and the plane resolves model override, else provider default, else the default dialect, refusing a dialect it does not serve naming the model. RED-able: exchange_shaping::a_models_protocol_overrides_its_providers_and_an_unknown_one_is_refused, root door_steps::a_models_protocol_override_is_handed_to_the_plane.
…lect (kind-isolation law0 busbar x vendor 92 -> 89) The root hands the model's override through as opaque data; its test now spells two neutral dialect words, so the root carries no vendor name (#841 gates: law0 busbar x vendor 92/89, law0-base 89/0).
…drock InvokeModel, the carried dialect inside the invoke envelope (stacked on #841)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PARITY-SCOPE item 2. The owner's 2026-09-29 compat scope puts the "Bedrock InvokeModel dialect" in scope (BUSBAR-1.6.0.md l.4805; l.4810 "Anthropic-on-Bedrock InvokeModel chat only"; l.4835; E table l.5499 "no evidence found"). #841 is only the model-override seam. The design is ARCHITECT-approved 2026-10-14 with four conditions, each met below. Stacked on #841: DRAFT until #841 lands. It is
$, so it lands alone (rule 15).Design. InvokeModel takes Anthropic's own Messages body and answers with Anthropic's own body and events, so
bedrock-invokeis the Anthropic dialect carried inside Bedrock's envelope, not a seventh dialect. A model selects it withmodels.<m>.protocol: bedrock-invokeon a Bedrock provider.exchange/invoke.rsowns the envelope:/model/{model}/invoke, or/invoke-with-response-stream. It is encoded by the samewire_and_canonical_paththe Converse target goes through.modelandstreamare removed,anthropic_version: bedrock-2023-05-31is stated, and the caller'santhropic-betafield moves to bodyanthropic_beta. Theanthropic-versionfield and the dialect's static headers are not sent. A streamed request asksaccept: application/vnd.amazon.eventstream.chunkframe's base64bytesis one Anthropic stream event.Transcoderre-frames it as that dialect's own SSE, the event JSON byte for byte, on the sharedcodec/eventstream.rs. A mid-stream exception frame or a malformed frame becomes the dialect'serrorevent and ends the stream.{message}plusx-amzn-ErrorTypeis restated as Anthropic's error envelope, with the exception mapped to its kind, before the failure judge reads it.root::door_steps::member_routesnow falls back to the provider protocol's default style when the member's own protocol states none, so the model keeps its Bedrock provider's SigV4. No dialect is named.Conditions (ARCHITECT 2026-10-14)
tests/dialect_self_contained.rsneeds no exemption. Nothing undersrc/codecchanged; the envelope lives in the plane's exchange adapter.model_onlyflag: a provider cannot default to it because the kernel's provider sweep does not know the name.the_envelope_is_no_declared_protocol_and_the_1_5_5_list_is_unchangedpins DECLS to 1.5.5's six in order, which is the list BOOT-020 andvalidate_unknown_protocol_lists_only_the_configured_planes_dialectsprint.a_provider_never_defaults_to_the_envelopepins the plane's refusal.REDs (
busbar-plane-llm/tests/exchange_invoke.rs, plus the root'sa_member_whose_protocol_states_no_default_style_rides_its_providers): lane resolution; the provider refusal; targets; relay inside the envelope (body members, beta flags, fields, accept); the whole-answer target; byte preservation of the body edit; stream re-framing at four chunkings; a mid-stream exception; refusal restatement; money: a streamed answer over the envelope meters the carried dialect's 11 in and 7 out throughReply, with the carried dialect'stext/event-streamhead; and the 1.5.5 protocol list.