Skip to content

refactor(proxy): deepen provider and responses architecture#209

Merged
sozercan merged 4 commits into
mainfrom
codex/provider-responses-architecture-refactor
Jun 14, 2026
Merged

refactor(proxy): deepen provider and responses architecture#209
sozercan merged 4 commits into
mainfrom
codex/provider-responses-architecture-refactor

Conversation

@sozercan

Copy link
Copy Markdown
Owner

Summary

  • Centralize provider endpoint policy so default endpoints, routing support, unknown-model behavior, and discovered-model filtering live behind one provider-runtime seam.
  • Consolidate provider model registry updates so filtering and collision handling are shared by static setup, dynamic setup, and refresh paths.
  • Make Responses request preparation explicit by separating header extraction, stream detection, optimizer rewrites, dispatch/retry, and upstream failure mapping.
  • Centralize websocket planned-response memory updates so normal and compaction-trigger turns use the same session-state seam.

Why

The proxy had several shallow modules where provider ownership, endpoint capability, Responses dispatch, and websocket session mutation were spread across call sites. These refactors improve locality and make the test seams better match the behavior callers depend on.

Validation

  • go test ./proxy -run 'TestProviderEndpointPolicy|TestResolveProviderRequest|TestBuildProvidersGeneric|TestDecode' -count=1
  • go test ./proxy -run 'TestResponsesRequestStreams|TestPrepareResponsesRequestBuildsHeaderAndStreamingPlan|TestHandleResponses' -count=1
  • go test ./proxy -run 'TestResponsesWebSocketRememberPlannedResponse|TestResponsesWebSocket.*Turn|TestResponsesWebSocket.*Compaction' -count=1
  • make test
  • make build
  • ./vekil --help

Autoreview

Each commit was autoreviewed before commit with:

python3 /Users/sozercan/.codex/skills/autoreview/scripts/autoreview --mode local --parallel-tests "make test"

Every autoreview run reported autoreview clean: no accepted/actionable findings reported.

Progress log

Detailed progress and the completion audit are tracked locally in /tmp/refactor-vekil.md.

sozercan added 4 commits June 13, 2026 14:18
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI review requested due to automatic review settings June 14, 2026 01:28

Copilot AI 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.

Pull request overview

This PR refactors several aspects of the proxy layer to centralize provider endpoint policy, consolidate model registry operations, extract Responses request preparation into an explicit step, and unify WebSocket session-state mutation into a single seam.

Changes:

  • Introduces providerEndpointPolicy struct and per-kind policy factory, replacing scattered switch statements for endpoint routing, unknown-model allowance, and discovered-model filtering with method calls on providerRuntime.
  • Consolidates provider model registration into addProviderModels/mergeProviderModels helpers, sharing filtering and collision logic across static setup, dynamic setup, and refresh paths.
  • Extracts prepareResponsesRequest, postPreparedResponsesRequest, and writeResponsesUpstreamRequestFailure to separate concerns of header extraction, stream detection, dispatch/retry, and error mapping in the Responses HTTP handler.
  • Adds rememberPlannedResponse on the WebSocket session to centralize compaction-trigger and history-update logic for both generate=false and normal response turns.
Show a summary per file
File Description
proxy/provider_endpoint_policy.go New file: centralizes all per-provider-kind endpoint decisions into a single policy struct with factory function and providerRuntime method wrappers
proxy/provider_endpoint_policy_test.go New file: comprehensive tests for policy defaults and routing decisions across all provider types
proxy/providers.go Replaces inline model-registration loops with addProviderModels/addStaticProviderModels/mergeProviderModels; removes old scattered helper functions; uses new policy API
proxy/upstream_http.go Replaces free-function calls (providerSupportsEndpoint, providerAllowsUnknownModelEndpoint) with providerRuntime method calls; removes deleted functions
proxy/responses_handler.go Extracts prepareResponsesRequest, responsesRequestStreams, postPreparedResponsesRequest, and writeResponsesUpstreamRequestFailure; simplifies HandleResponses
proxy/responses_handler_test.go Tests for responsesRequestStreams and prepareResponsesRequest
proxy/responses_websocket.go Adds rememberPlannedResponse helper; replaces duplicated compaction-trigger + history-update logic at two call sites
proxy/responses_websocket_test.go Tests for rememberPlannedResponse covering both normal append and compaction-trigger reset paths

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 8/8 changed files
  • Comments generated: 0

@sozercan sozercan merged commit de0bb7a into main Jun 14, 2026
8 checks passed
@sozercan sozercan deleted the codex/provider-responses-architecture-refactor branch June 14, 2026 02:19
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.

2 participants