feat(id): brand ProviderID and ModelID (#17110)

This commit is contained in:
Kit Langton
2026-03-12 09:27:52 -04:00
committed by GitHub
parent 2eeba53b07
commit c45467964c
23 changed files with 157 additions and 107 deletions

View File

@@ -14,6 +14,7 @@ import { Agent } from "@/agent/agent"
import { Plugin } from "@/plugin"
import { Config } from "@/config/config"
import { ProviderTransform } from "@/provider/transform"
import { ModelID, ProviderID } from "@/provider/schema"
export namespace SessionCompaction {
const log = Log.create({ service: "session.compaction" })
@@ -298,8 +299,8 @@ When constructing the summary, try to stick to this template:
sessionID: SessionID.zod,
agent: z.string(),
model: z.object({
providerID: z.string(),
modelID: z.string(),
providerID: ProviderID.zod,
modelID: ModelID.zod,
}),
auto: z.boolean(),
overflow: z.boolean().optional(),

View File

@@ -27,6 +27,7 @@ import { WorkspaceID } from "../control-plane/schema"
import { SessionID, MessageID, PartID } from "./schema"
import type { Provider } from "@/provider/provider"
import { ModelID, ProviderID } from "@/provider/schema"
import { PermissionNext } from "@/permission/next"
import { Global } from "@/global"
import type { LanguageModelV2Usage } from "@ai-sdk/provider"
@@ -875,8 +876,8 @@ export namespace Session {
export const initialize = fn(
z.object({
sessionID: SessionID.zod,
modelID: z.string(),
providerID: z.string(),
modelID: ModelID.zod,
providerID: ProviderID.zod,
messageID: MessageID.zod,
}),
async (input) => {

View File

@@ -15,6 +15,7 @@ import { ProviderError } from "@/provider/error"
import { iife } from "@/util/iife"
import { type SystemError } from "bun"
import type { Provider } from "@/provider/provider"
import { ModelID, ProviderID } from "@/provider/schema"
export namespace MessageV2 {
export function isMedia(mime: string) {
@@ -213,8 +214,8 @@ export namespace MessageV2 {
agent: z.string(),
model: z
.object({
providerID: z.string(),
modelID: z.string(),
providerID: ProviderID.zod,
modelID: ModelID.zod,
})
.optional(),
command: z.string().optional(),
@@ -362,8 +363,8 @@ export namespace MessageV2 {
.optional(),
agent: z.string(),
model: z.object({
providerID: z.string(),
modelID: z.string(),
providerID: ProviderID.zod,
modelID: ModelID.zod,
}),
system: z.string().optional(),
tools: z.record(z.string(), z.boolean()).optional(),
@@ -411,8 +412,8 @@ export namespace MessageV2 {
])
.optional(),
parentID: MessageID.zod,
modelID: z.string(),
providerID: z.string(),
modelID: ModelID.zod,
providerID: ProviderID.zod,
/**
* @deprecated
*/
@@ -824,7 +825,7 @@ export namespace MessageV2 {
return result
}
export function fromError(e: unknown, ctx: { providerID: string }) {
export function fromError(e: unknown, ctx: { providerID: ProviderID }): NonNullable<Assistant["error"]> {
switch (true) {
case e instanceof DOMException && e.name === "AbortError":
return new MessageV2.AbortedError(

View File

@@ -1,5 +1,6 @@
import z from "zod"
import { SessionID } from "./schema"
import { ModelID, ProviderID } from "../provider/schema"
import { NamedError } from "@opencode-ai/util/error"
export namespace Message {
@@ -160,8 +161,8 @@ export namespace Message {
assistant: z
.object({
system: z.string().array(),
modelID: z.string(),
providerID: z.string(),
modelID: ModelID.zod,
providerID: ProviderID.zod,
path: z.object({
cwd: z.string(),
root: z.string(),

View File

@@ -10,6 +10,7 @@ import { SessionRevert } from "./revert"
import { Session } from "."
import { Agent } from "../agent/agent"
import { Provider } from "../provider/provider"
import { ModelID, ProviderID } from "../provider/schema"
import { type Tool as AITool, tool, jsonSchema, type ToolCallOptions, asSchema } from "ai"
import { SessionCompaction } from "./compaction"
import { Instance } from "../project/instance"
@@ -94,8 +95,8 @@ export namespace SessionPrompt {
messageID: MessageID.zod.optional(),
model: z
.object({
providerID: z.string(),
modelID: z.string(),
providerID: ProviderID.zod,
modelID: ModelID.zod,
})
.optional(),
agent: z.string().optional(),
@@ -1471,8 +1472,8 @@ NOTE: At any point in time through this workflow you should feel free to ask the
agent: z.string(),
model: z
.object({
providerID: z.string(),
modelID: z.string(),
providerID: ProviderID.zod,
modelID: ModelID.zod,
})
.optional(),
command: z.string(),