Skip to content

[mirror] feat: add general subagent model override#5

Open
yashwant86 wants to merge 6 commits intomm-base-24610from
mm-pr-24610
Open

[mirror] feat: add general subagent model override#5
yashwant86 wants to merge 6 commits intomm-base-24610from
mm-pr-24610

Conversation

@yashwant86
Copy link
Copy Markdown

@yashwant86 yashwant86 commented Apr 26, 2026

Mirror of upstream coder#24610 for benchmark. Do not merge.


Summary by MergeMonkey

  • New Features:
    • Add general subagent model override configuration alongside existing explore override, allowing deployment-wide model selection for delegated subagents with write capabilities.
    • Generalize model override API endpoints from explore-specific to context-parameterized agent-model-override routes supporting both general and explore contexts.
    • Extend subagent spawn logic to resolve and apply general model override when spawning general-type delegated agents.
  • Refactors:
    • Refactor model override resolution logic into reusable functions supporting multiple override contexts.
    • Update test helpers and test cases to support parameterized model override testing across contexts.
    • Migrate Explore model override UI components to generic SubagentModelOverrideSettings supporting multiple contexts.

@bot-mergemonkey
Copy link
Copy Markdown

bot-mergemonkey Bot commented Apr 26, 2026

Risk AssessmentNEEDS-TESTING · ~45 min review

Focus areas: Model override resolution logic and fallback behavior · Authorization checks for general override access · Frontend integration with parameterized API endpoints

Assessment: Adds new general model override feature and refactors existing explore override to parameterized endpoints.

Walkthrough

User navigates to Agent Settings and sees two model override sections: General (for delegated subagents with write capabilities) and Explore (for read-only discovery subagents). Admin selects a model for each context and saves. When a general-type subagent is spawned, the system resolves the general override from site_configs, validates the model is enabled and credentials are available, and uses it; otherwise falls back to parent chat's model. Explore subagents similarly resolve their override with fallback to current turn model.

Changes

Files Summary
Database Layer: General Model Override Storage
coderd/database/queries/siteconfig.sql
coderd/database/queries.sql.go
coderd/database/querier.go
Adds GetChatGeneralModelOverride and UpsertChatGeneralModelOverride SQL queries and generated Go methods to persist general subagent model override in site_configs table.
Authorization Layer: General Model Override Access Control
coderd/database/dbauthz/dbauthz.go, dbauthz_test.go
Wraps general model override database methods with RBAC authorization checks requiring DeploymentConfig read/update permissions, consistent with explore override pattern.
Mock and Metrics: General Model Override Instrumentation
coderd/database/dbmock/dbmock.go
coderd/database/dbmetrics/querymetrics.go
Adds mock and metrics instrumentation for GetChatGeneralModelOverride and UpsertChatGeneralModelOverride methods.
HTTP API: Generalized Model Override Endpoints
coderd/coderd.go, exp_chats.go
Replaces explore-specific /explore-model-override endpoints with parameterized /agent-model-override/{context} routes supporting both general and explore contexts. Refactors validation and configuration logic into context-agnostic helpers.
SDK: Model Override Type Definitions and Client Methods
codersdk/chats.go
site/src/api/typesGenerated.ts
Replaces ChatExploreModelOverrideResponse and UpdateChatExploreModelOverrideRequest with ChatAgentModelOverrideResponse and UpdateChatAgentModelOverrideRequest supporting context parameter. Adds ChatAgentModelOverrideContext enum and validation helpers.
Frontend API Client: Model Override Methods
site/src/api/api.ts
Updates getChatExploreModelOverride and updateChatExploreModelOverride to getChatAgentModelOverride and updateChatAgentModelOverride accepting context parameter in URL path.
Frontend UI: Generic Model Override Settings Component
site/src/pages/AgentsPage/components/ExploreModelOverrideSettings.tsx, SubagentModelOverrideSettings.tsx
Replaces explore-specific ExploreModelOverrideSettings with generic SubagentModelOverrideSettings component accepting title, description, and callbacks, supporting both general and explore overrides.
Frontend Page: Agent Settings View and Container
site/src/pages/AgentsPage/AgentSettingsAgentsPageView.tsx, AgentSettingsAgentsPage.tsx
Adds general model override section alongside explore override. Updates to use generic SubagentModelOverrideSettings and parameterized query/mutation hooks for both contexts.
Frontend Stories: Model Override UI Test Cases
site/src/pages/AgentsPage/AgentSettingsAgentsPageView.stories.tsx, AgentsPageView.stories.tsx
Refactors Storybook stories to test both general and explore overrides with parameterized test data builders and shared test helpers.
Subagent Runtime: Model Override Resolution and Application
coderd/x/chatd/subagent.go, subagent_catalog.go
Refactors explore-specific model override resolution into context-agnostic resolveConfiguredModelOverride and resolveSubagentModelConfigID methods. Applies general override when spawning general-type subagents. Adds provider validation and ambient credentials support.
Subagent Tests: Model Override Test Coverage
coderd/x/chatd/subagent_internal_test.go
coderd/exp_chats_test.go
Adds comprehensive tests for general model override resolution, fallback on missing credentials/disabled providers, and ambient credentials support. Refactors test helpers to support parameterized model config creation and logging inspection.

Sequence Diagram

sequenceDiagram
    participant Admin as Admin User
    participant UI as Frontend
    participant API as HTTP API
    participant DB as Database
    participant Chatd as Chatd Server
    Admin->>UI: Navigate to Agent Settings
    UI->>API: GET /agent-model-override/general
    API->>DB: GetChatGeneralModelOverride()
    DB-->>API: stored_model_id or empty
    API-->>UI: ChatAgentModelOverrideResponse
    UI->>UI: Render General & Explore sections
    Admin->>UI: Select model, click Save
    UI->>API: PUT /agent-model-override/general {model_config_id}
    API->>API: validateChatModelOverrideID()
    API->>DB: UpsertChatGeneralModelOverride(model_id)
    DB-->>API: success
    API-->>UI: 204 No Content
    UI->>UI: Refresh override data
    Note over Chatd: Later: User spawns general subagent
    Chatd->>DB: GetChatGeneralModelOverride()
    DB-->>Chatd: model_id
    Chatd->>Chatd: resolveConfiguredModelOverride()
    Chatd->>DB: GetEnabledChatModelConfigByID(model_id)
    DB-->>Chatd: ChatModelConfig or error
    alt Model enabled and credentials available
        Chatd->>Chatd: Use override model
    else Model disabled or credentials missing
        Chatd->>Chatd: Log info, fall back to parent model
    end
    Chatd->>DB: InsertChat(with resolved model_id)
    DB-->>Chatd: Chat created
Loading

Dig Deeper With Commands

  • /review <file-path> <function-optional>
  • /chat <file-path> "<question>"
  • /roast <file-path>

Runs only when explicitly triggered.

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