Skip to content

feat: add Nvidia backend and OpenAI-compatible adapter#20

Merged
matdev83 merged 7 commits into
mainfrom
feat/openaicompat-nvidia-backend
Jun 17, 2026
Merged

feat: add Nvidia backend and OpenAI-compatible adapter#20
matdev83 merged 7 commits into
mainfrom
feat/openaicompat-nvidia-backend

Conversation

@matdev83

@matdev83 matdev83 commented Jun 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • add NVIDIA NIM backend connector and reference backend coverage
  • extract OpenAI-compatible backend event mapping, invocation, and credential retry factory into internal/plugins/backends/openaicompat
  • add architecture guardrails and docs for the shared backend adapter boundary
  • include related runtime/plugin registration/config/conformance updates from the local change set

Verification

  • make quality-checks
  • make test
  • go test ./internal/plugins/backends/openaicompat ./internal/plugins/backends/openrouter ./internal/plugins/backends/nvidia ./internal/plugins/backends/openailegacy ./internal/plugins/backends/openairesponses ./pkg/lipapi -count=1
  • go test ./internal/archtest ./internal/pluginreg -count=1
  • staticcheck ./internal/plugins/backends/nvidia/... ./internal/plugins/backends/openrouter/...

Summary by CodeRabbit

Release Notes

  • New Features

    • Added NVIDIA NIM backend connector with streaming and non-streaming support, plus multi-key credential pooling (disabled by default in example/test configs).
    • Added transport negotiation with exact vs compatibility fallback behavior for matching requested streaming/non-streaming modes.
    • Improved transport negotiation observability with new decision metrics and better propagation of invocation metadata.
  • Documentation

    • Updated setup and configuration docs for NVIDIA/OpenRouter upstream API key resolution via environment variables.
    • Expanded architecture guardrails and boundary documentation to include the NVIDIA adapter layer.

@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@matdev83, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 3 minutes and 6 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f50c1c46-24b3-41ff-b560-8f3a1c4f2438

📥 Commits

Reviewing files that changed from the base of the PR and between cdec0f9 and 216e6cb.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (6)
  • go.mod
  • internal/core/extensions/pre_request_test.go
  • internal/core/runtime/lifecycle_cancel.go
  • internal/infra/tokenizers/tiktoken/counter_test.go
  • internal/plugins/backends/openaicompat/lifecycle_contract_test.go
  • internal/plugins/frontends/holdalive/wait_test.go
📝 Walkthrough

Walkthrough

This PR adds invocation and transport negotiation metadata, extracts a shared OpenAI-compatible backend layer, adds NVIDIA backend support and emulation, wires transport-aware runtime behavior and metrics, and updates docs, configs, tests, and review automation.

Changes

Transport negotiation and NVIDIA backend support

Layer / File(s) Summary
Invocation and transport contracts
pkg/lipapi/*, internal/core/config/*, internal/core/execbackend/backend.go, internal/core/runtime/executor.go, internal/core/runtime/metrics_sink.go, internal/infra/metrics/executor_prom.go, internal/infra/runtimebundle/build.go
Adds invocation and transport negotiation types, routing transport config, backend transport capability hooks, executor policy wiring, and transport negotiation metrics plumbing.
Frontend invocation and extra-body capture
internal/plugins/openrouterwire/*, internal/plugins/frontends/openailegacy/*, internal/plugins/frontends/openairesponses/*
Decoders now set invocation metadata and capture extra request body fields, while both encoder paths emit richer usage payloads with detailed token fields.
Shared OpenAI-compatible backend layer
internal/plugins/backends/openaicompat/*, internal/plugins/backends/openrouter/*, internal/archtest/*
Adds the shared OpenAI-compatible adapter, moves OpenRouter onto it, updates event-stream handling, and adds dependency and lifecycle boundary coverage.
NVIDIA backend, registry, and conformance wiring
internal/plugins/backends/nvidia/*, internal/refbackend/nvidia/*, internal/pluginreg/*, internal/testkit/conformance/*, config/..., cmd/lipstd/testdata/..., pkg/lipsdk/standard_bundle.go
Introduces the NVIDIA backend, its request mutation and flavor/model resolution, registry/env/config wiring, ref backend emulator, conformance support, standard bundle registration, and extensive tests.
Runtime transport negotiation and logging
internal/core/runtime/executor_open_attempt.go, internal/core/runtime/*transport*, internal/core/runtime/executor_invocation_metadata_test.go, internal/infra/metrics/bundle_test.go
Negotiates transport before backend open, tracks transport rejects, records spans and metrics, updates decision logging, and verifies invocation metadata and transport behavior in tests.
Concurrent stream state handling
internal/core/runtime/attempt_stream.go, internal/core/runtime/completion_recv.go, internal/core/runtime/parallel_race.go, internal/core/runtime/*race*test.go, internal/core/runtime/secure_session_*
Replaces stream completion and commit flags with atomic state handling across retry and parallel race paths, and adds blocked-recv close race coverage.
Documentation and review automation
README.md, docs/*, .coderabbit.yaml
Updates backend and architecture docs for NVIDIA and openaicompat, expands README key-resolution notes, and adds CodeRabbit review configuration.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Poem

🐇 I sniffed a trail through streams and wire,
where transports choose and logs climb higher.
A NVIDIA burrow joined the run,
with shared adapters neatly spun.
I thumped the tests till all was bright,
then nibbled docs by moonlit night.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (5)
internal/core/runtime/executor_open_attempt.go (1)

208-210: 💤 Low value

Consider adding a comment for the transport mode fallback logic.

The fallback from transportRes.Selected to transportRes.Mode when Selected is empty might not be immediately obvious to future readers. A brief comment explaining when this occurs (e.g., during rejection when no mode is selected) would improve code clarity.

📝 Suggested comment
 transportRes := lipapi.NegotiateTransport(attempt.Invocation, transportCaps, e.effectiveTransportFallbackPolicy())
 transportMode := transportRes.Selected
 if transportMode == "" {
+	// Fall back to Mode when Selected is empty (e.g., during rejection when no specific mode was chosen)
 	transportMode = transportRes.Mode
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/core/runtime/executor_open_attempt.go` around lines 208 - 210, Add a
brief explanatory comment above or within the transportMode fallback logic
(where transportMode is checked for empty string and assigned to
transportRes.Mode) to clarify when this fallback occurs and why. The comment
should explain that this fallback happens during rejection scenarios when no
specific mode is selected, so that future readers understand the context and
purpose of this conditional assignment.
pkg/lipapi/call.go (1)

66-66: ⚡ Quick win

Clarify JSON serialization intent for internal metadata.

The Invocation field is framework-populated metadata (frontends derive it from client request parameters), not a direct client-provided JSON field. MaxPendingWireEvents on line 70 follows a similar pattern and includes both a json:"-" tag and a comment explaining it's "Not client API; the core executor sets this...".

Consider adding json:"-" to Invocation if it should not appear in marshaled Call JSON, or document its wire-format role if it should be serialized.

Proposed consistency fix
 	Extensions   map[string]json.RawMessage
-	Invocation   Invocation
+	// Invocation carries protocol operation and delivery metadata populated by frontend decoders.
+	Invocation   Invocation `json:"-"`

 	// MaxPendingWireEvents caps backend adapter-internal pending event queues per stream (0 = unlimited).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/lipapi/call.go` at line 66, The Invocation field is framework-populated
metadata that should be handled consistently with other internal fields like
MaxPendingWireEvents. Add a json:"-" tag to the Invocation field declaration to
indicate it should not be included in marshaled JSON, matching the pattern used
by MaxPendingWireEvents on line 70. Alternatively, if the Invocation field is
intended to be serialized, add a comment above it explaining its wire-format
role and why it differs from the json:"-" approach, similar to the comment
provided for MaxPendingWireEvents.
internal/plugins/openrouterwire/extensions.go (1)

114-116: 💤 Low value

Consider the naming/organizational alignment of this NVIDIA-specific constant.

The ExtraBodyExtPrefix = "nvidia.extra_body." constant is NVIDIA-specific but resides in the openrouterwire package (OpenRouter-focused). While the PR context shows this is intentional (NVIDIA backend support through OpenAI-compatible frontends), future maintainers may find this placement unexpected.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/plugins/openrouterwire/extensions.go` around lines 114 - 116, The
`ExtraBodyExtPrefix` constant is NVIDIA-specific but located in the
`openrouterwire` package which focuses on OpenRouter functionality, potentially
confusing future maintainers about its purpose. Add a clarifying comment above
the constant definition to explain that this NVIDIA-specific extension key is
used to support NVIDIA backend integration through OpenAI-compatible frontend
adapters, making the intentional placement and purpose clear to future readers.
internal/plugins/backends/openaicompat/backend_test.go (1)

76-102: ⚡ Quick win

Add cleanup for httptest.Server instances.

The test creates an httptest.Server but doesn't register cleanup. For consistency with the integration tests (which use t.Cleanup(srv.Close) at internal/plugins/backends/openrouter/integration_test.go:726) and to prevent resource leaks, add cleanup for the test server.

🧹 Suggested fix
 func TestNewBackend_routesByFlavor(t *testing.T) {
 	t.Parallel()
 	rec := newInvokeRecorder()
 	srv := newInvokeServer(t, rec)
+	t.Cleanup(srv.Close)
 
 	be := NewBackend(validBackendSpec(srv.URL))

Apply the same pattern to the test servers created at lines 125, 165, 193, and 222.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/plugins/backends/openaicompat/backend_test.go` around lines 76 -
102, The TestNewBackend_routesByFlavor test creates an httptest.Server via the
newInvokeServer function but does not register cleanup, causing a resource leak.
Add t.Cleanup(srv.Close) immediately after the srv is created to ensure the
server is properly closed after the test completes. Apply this same cleanup
pattern consistently to all other test functions that create server instances
using newInvokeServer.
internal/plugins/backends/openaicompat/invoke_test.go (1)

20-48: ⚡ Quick win

Add cleanup for httptest.Server instances.

The test creates an httptest.Server but doesn't register cleanup. For consistency with the integration tests and to prevent resource leaks, add t.Cleanup(srv.Close) after creating the server.

🧹 Suggested fix
 func TestOpenChat_nonStreamingUsesNonStreamEndpoint(t *testing.T) {
 	t.Parallel()
 	rec := newInvokeRecorder()
 	srv := newInvokeServer(t, rec)
+	t.Cleanup(srv.Close)
 	cli := openaicred.NewOpenAIClient(srv.URL, "sk-test", srv.Client(), intPtr(0))

Apply the same pattern to test servers created at lines 53, 78, 103, and 128.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/plugins/backends/openaicompat/invoke_test.go` around lines 20 - 48,
The httptest.Server instances created with newInvokeServer() in the
TestOpenChat_nonStreamingUsesNonStreamEndpoint test function and similar test
functions at lines 53, 78, 103, and 128 lack proper cleanup registration. After
each srv := newInvokeServer(t, rec) call, immediately add t.Cleanup(srv.Close)
to register the server's Close method as a cleanup function that will be
executed when the test completes, preventing resource leaks.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/archtest/runtime_transport_boundaries_test.go`:
- Line 22: The exec.Command in the boundary check test uses the pattern
"./internal/core/runtime" which only scans that single package and misses the
subpackage "./internal/core/runtime/failclosed". Change the path argument from
"./internal/core/runtime" to "./internal/core/runtime/..." to use Go's recursive
pattern that includes all subpackages, ensuring all packages under runtime are
checked for forbidden imports as intended by the architectural boundary test.

In `@internal/pluginreg/keys.go`:
- Around line 106-134: The collectNvidiaEnvKeys function duplicates the
identical logic found in collectOpenRouterEnvKeys (lines 75-104), including the
1-indexed numbering loop, gap detection, and deduplication logic. Extract this
shared logic into a new helper function that accepts the environment variable
prefix as a parameter (for example, "NVIDIA_API_KEY" or "OPENROUTER_API_KEY"),
then refactor both collectOpenRouterEnvKeys and collectNvidiaEnvKeys to call
this shared helper function instead of duplicating the implementation.

---

Nitpick comments:
In `@internal/core/runtime/executor_open_attempt.go`:
- Around line 208-210: Add a brief explanatory comment above or within the
transportMode fallback logic (where transportMode is checked for empty string
and assigned to transportRes.Mode) to clarify when this fallback occurs and why.
The comment should explain that this fallback happens during rejection scenarios
when no specific mode is selected, so that future readers understand the context
and purpose of this conditional assignment.

In `@internal/plugins/backends/openaicompat/backend_test.go`:
- Around line 76-102: The TestNewBackend_routesByFlavor test creates an
httptest.Server via the newInvokeServer function but does not register cleanup,
causing a resource leak. Add t.Cleanup(srv.Close) immediately after the srv is
created to ensure the server is properly closed after the test completes. Apply
this same cleanup pattern consistently to all other test functions that create
server instances using newInvokeServer.

In `@internal/plugins/backends/openaicompat/invoke_test.go`:
- Around line 20-48: The httptest.Server instances created with
newInvokeServer() in the TestOpenChat_nonStreamingUsesNonStreamEndpoint test
function and similar test functions at lines 53, 78, 103, and 128 lack proper
cleanup registration. After each srv := newInvokeServer(t, rec) call,
immediately add t.Cleanup(srv.Close) to register the server's Close method as a
cleanup function that will be executed when the test completes, preventing
resource leaks.

In `@internal/plugins/openrouterwire/extensions.go`:
- Around line 114-116: The `ExtraBodyExtPrefix` constant is NVIDIA-specific but
located in the `openrouterwire` package which focuses on OpenRouter
functionality, potentially confusing future maintainers about its purpose. Add a
clarifying comment above the constant definition to explain that this
NVIDIA-specific extension key is used to support NVIDIA backend integration
through OpenAI-compatible frontend adapters, making the intentional placement
and purpose clear to future readers.

In `@pkg/lipapi/call.go`:
- Line 66: The Invocation field is framework-populated metadata that should be
handled consistently with other internal fields like MaxPendingWireEvents. Add a
json:"-" tag to the Invocation field declaration to indicate it should not be
included in marshaled JSON, matching the pattern used by MaxPendingWireEvents on
line 70. Alternatively, if the Invocation field is intended to be serialized,
add a comment above it explaining its wire-format role and why it differs from
the json:"-" approach, similar to the comment provided for MaxPendingWireEvents.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a8c2a9cf-12dd-431d-adc8-8bc19f985bd7

📥 Commits

Reviewing files that changed from the base of the PR and between 2c07b1b and 2280426.

📒 Files selected for processing (96)
  • .coderabbit.yaml
  • README.md
  • cmd/lipstd/testdata/dogfood-local-stub/inventory.golden.json
  • cmd/lipstd/testdata/dogfood-local-stub/routes.golden.json
  • config/config.yaml
  • config/examples/anthropic-stub.yaml
  • config/examples/dogfood-local-stub.yaml
  • config/examples/gemini-stub.yaml
  • config/examples/openai-legacy-stub.yaml
  • config/examples/openai-responses-stub.yaml
  • docs/architecture-guardrails.md
  • docs/backend-adapter-boundaries.md
  • docs/conformance-golden-coverage.md
  • internal/archtest/backend_lifecycle_contract_test.go
  • internal/archtest/openaicompat_boundaries_test.go
  • internal/archtest/runtime_transport_boundaries_test.go
  • internal/core/config/model.go
  • internal/core/config/transport.go
  • internal/core/config/transport_test.go
  • internal/core/execbackend/backend.go
  • internal/core/runtime/attempt_stream.go
  • internal/core/runtime/completion_recv.go
  • internal/core/runtime/executor.go
  • internal/core/runtime/executor_invocation_metadata_test.go
  • internal/core/runtime/executor_open_attempt.go
  • internal/core/runtime/executor_open_attempt_diagnostics_test.go
  • internal/core/runtime/executor_test.go
  • internal/core/runtime/executor_transport_span_test.go
  • internal/core/runtime/executor_transport_test.go
  • internal/core/runtime/metrics_sink.go
  • internal/core/runtime/parallel_race.go
  • internal/core/runtime/parallel_race_test.go
  • internal/core/runtime/secure_session_recorder_mandatory_test.go
  • internal/core/runtime/secure_session_stream_record.go
  • internal/infra/metrics/bundle_test.go
  • internal/infra/metrics/executor_prom.go
  • internal/infra/runtimebundle/build.go
  • internal/pluginreg/backends_install.go
  • internal/pluginreg/default_wire_model.go
  • internal/pluginreg/hosted_backend_build_test.go
  • internal/pluginreg/keys.go
  • internal/pluginreg/resolve_upstream_api_keys_test.go
  • internal/pluginreg/spec_bundle_standard_inventory_test.go
  • internal/pluginreg/standard_bundle_posture_test.go
  • internal/pluginreg/standard_table.go
  • internal/plugins/backends/nvidia/doc.go
  • internal/plugins/backends/nvidia/integration_test.go
  • internal/plugins/backends/nvidia/payload_mutate.go
  • internal/plugins/backends/nvidia/payload_mutate_test.go
  • internal/plugins/backends/nvidia/plugin.go
  • internal/plugins/backends/nvidia/plugin_config_test.go
  • internal/plugins/backends/nvidia/resolve.go
  • internal/plugins/backends/nvidia/resolve_test.go
  • internal/plugins/backends/openaicompat/backend.go
  • internal/plugins/backends/openaicompat/backend_test.go
  • internal/plugins/backends/openaicompat/chat_events.go
  • internal/plugins/backends/openaicompat/chat_events_test.go
  • internal/plugins/backends/openaicompat/chat_stream.go
  • internal/plugins/backends/openaicompat/doc.go
  • internal/plugins/backends/openaicompat/invoke.go
  • internal/plugins/backends/openaicompat/invoke_test.go
  • internal/plugins/backends/openaicompat/lifecycle_contract_test.go
  • internal/plugins/backends/openaicompat/responses_events.go
  • internal/plugins/backends/openaicompat/responses_events_test.go
  • internal/plugins/backends/openrouter/integration_test.go
  • internal/plugins/backends/openrouter/invoke_chat.go
  • internal/plugins/backends/openrouter/invoke_responses.go
  • internal/plugins/backends/openrouter/plugin.go
  • internal/plugins/backends/openrouter/plugin_config_test.go
  • internal/plugins/frontends/openailegacy/decode.go
  • internal/plugins/frontends/openailegacy/decode_test.go
  • internal/plugins/frontends/openailegacy/encode.go
  • internal/plugins/frontends/openailegacy/encode_test.go
  • internal/plugins/frontends/openairesponses/decode.go
  • internal/plugins/frontends/openairesponses/decode_test.go
  • internal/plugins/frontends/openairesponses/encode.go
  • internal/plugins/frontends/openairesponses/encode_test.go
  • internal/plugins/openrouterwire/extensions.go
  • internal/plugins/openrouterwire/extensions_test.go
  • internal/refbackend/nvidia/doc.go
  • internal/refbackend/nvidia/server.go
  • internal/refbackend/nvidia/server_test.go
  • internal/stdhttp/testdata/dogfood_gemini_dual_stub_failover.yaml
  • internal/testkit/conformance/error_upstream.go
  • internal/testkit/conformance/harness.go
  • internal/testkit/conformance/matrix.go
  • internal/testkit/conformance/parity_evidence.go
  • internal/testkit/conformance/refparity.go
  • internal/testkit/conformance/sanity_emulator_wiring_test.go
  • internal/testkit/conformance/tools_refbackend.go
  • pkg/lipapi/call.go
  • pkg/lipapi/invocation.go
  • pkg/lipapi/transport.go
  • pkg/lipapi/transport_incomplete_test.go
  • pkg/lipapi/transport_test.go
  • pkg/lipsdk/standard_bundle.go
💤 Files with no reviewable changes (2)
  • internal/plugins/backends/openrouter/invoke_responses.go
  • internal/plugins/backends/openrouter/invoke_chat.go

Comment thread internal/archtest/runtime_transport_boundaries_test.go Outdated
Comment thread internal/pluginreg/keys.go

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
pkg/lipapi/call.go (1)

66-66: ⚡ Quick win

Document Call.Invocation as internal execution metadata.

Invocation is exported but excluded from JSON, so this boundary is easy to misread by pkg/lipapi consumers. Add a short field comment clarifying it is runtime/internal-only metadata and not part of the wire contract.

Suggested diff
 type Call struct {
@@
-	Invocation   Invocation `json:"-"`
+	// Invocation carries runtime-selected operation/transport metadata.
+	// Internal-only: excluded from wire JSON and set by execution paths.
+	Invocation   Invocation `json:"-"`

As per coding guidelines, pkg/lipapi public contracts “must be versionable, documented, and minimal,” so this explicit contract note helps keep the public boundary clear.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/lipapi/call.go` at line 66, Add a field documentation comment above the
Invocation field in the Call struct to clarify that it contains internal
execution metadata and is not part of the public wire contract. The comment
should explicitly note that while the field is exported, it is excluded from
JSON serialization and is intended for runtime use only, helping consumers
understand the boundary between the public API contract and internal
implementation details.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@pkg/lipapi/call.go`:
- Line 66: Add a field documentation comment above the Invocation field in the
Call struct to clarify that it contains internal execution metadata and is not
part of the public wire contract. The comment should explicitly note that while
the field is exported, it is excluded from JSON serialization and is intended
for runtime use only, helping consumers understand the boundary between the
public API contract and internal implementation details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cb58e41b-f363-4d1f-ae3a-85d51cc71976

📥 Commits

Reviewing files that changed from the base of the PR and between 2280426 and cdec0f9.

📒 Files selected for processing (24)
  • Makefile
  • internal/archtest/runtime_transport_boundaries_test.go
  • internal/core/affinity/memorystore/store_test.go
  • internal/core/extensions/pre_request.go
  • internal/core/extensions/pre_request_test.go
  • internal/core/runtime/executor_affinity_test.go
  • internal/core/runtime/executor_open_attempt.go
  • internal/core/runtime/parallel_race.go
  • internal/core/runtime/parallel_race_test.go
  • internal/pluginreg/feature_yaml_test.go
  • internal/pluginreg/keys.go
  • internal/plugins/backends/nvidia/integration_test.go
  • internal/plugins/backends/openaicompat/backend_test.go
  • internal/plugins/backends/openaicompat/invoke_test.go
  • internal/plugins/backends/openrouter/integration_test.go
  • internal/plugins/openrouterwire/extensions.go
  • internal/refbackend/nvidia/server_test.go
  • internal/refbackend/openrouter/server_test.go
  • internal/testkit/conformance/conformance_multimodal_test.go
  • internal/testkit/conformance/refparity.go
  • internal/testkit/conformance/tools_refbackend.go
  • pkg/lipapi/call.go
  • pkg/lipsdk/prerequest/handler_test.go
  • pkg/lipsdk/prerequest/sort_test.go
💤 Files with no reviewable changes (1)
  • internal/core/runtime/executor_affinity_test.go
✅ Files skipped from review due to trivial changes (2)
  • internal/core/extensions/pre_request.go
  • internal/core/extensions/pre_request_test.go
🚧 Files skipped from review as they are similar to previous changes (11)
  • internal/archtest/runtime_transport_boundaries_test.go
  • internal/testkit/conformance/tools_refbackend.go
  • internal/plugins/openrouterwire/extensions.go
  • internal/core/runtime/executor_open_attempt.go
  • internal/pluginreg/keys.go
  • internal/testkit/conformance/refparity.go
  • internal/refbackend/nvidia/server_test.go
  • internal/core/runtime/parallel_race.go
  • internal/plugins/backends/openaicompat/invoke_test.go
  • internal/plugins/backends/openrouter/integration_test.go
  • internal/plugins/backends/openaicompat/backend_test.go

@matdev83 matdev83 merged commit 3a5fd4a into main Jun 17, 2026
2 checks passed
@matdev83 matdev83 deleted the feat/openaicompat-nvidia-backend branch June 17, 2026 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant