81 lines
1.6 KiB
TypeScript
81 lines
1.6 KiB
TypeScript
type ModelKey = {
|
|
providerID: string
|
|
modelID: string
|
|
}
|
|
|
|
type State = {
|
|
agent?: string
|
|
model?: ModelKey | null
|
|
variant?: string | null
|
|
}
|
|
|
|
export type ModelProbeState = {
|
|
dir?: string
|
|
sessionID?: string
|
|
last?: {
|
|
type: "agent" | "model" | "variant"
|
|
agent?: string
|
|
model?: ModelKey | null
|
|
variant?: string | null
|
|
}
|
|
agent?: string
|
|
model?: (ModelKey & { name?: string }) | undefined
|
|
variant?: string | null
|
|
selected?: string | null
|
|
configured?: string
|
|
pick?: State
|
|
base?: State
|
|
current?: string
|
|
}
|
|
|
|
export type ModelWindow = Window & {
|
|
__opencode_e2e?: {
|
|
model?: {
|
|
enabled?: boolean
|
|
current?: ModelProbeState
|
|
}
|
|
}
|
|
}
|
|
|
|
const clone = (state?: State) => {
|
|
if (!state) return undefined
|
|
return {
|
|
...state,
|
|
model: state.model ? { ...state.model } : state.model,
|
|
}
|
|
}
|
|
|
|
export const modelEnabled = () => {
|
|
if (typeof window === "undefined") return false
|
|
return (window as ModelWindow).__opencode_e2e?.model?.enabled === true
|
|
}
|
|
|
|
const root = () => {
|
|
if (!modelEnabled()) return
|
|
return (window as ModelWindow).__opencode_e2e?.model
|
|
}
|
|
|
|
export const modelProbe = {
|
|
set(input: ModelProbeState) {
|
|
const state = root()
|
|
if (!state) return
|
|
state.current = {
|
|
...input,
|
|
model: input.model ? { ...input.model } : undefined,
|
|
last: input.last
|
|
? {
|
|
...input.last,
|
|
model: input.last.model ? { ...input.last.model } : input.last.model,
|
|
}
|
|
: undefined,
|
|
pick: clone(input.pick),
|
|
base: clone(input.base),
|
|
}
|
|
},
|
|
clear() {
|
|
const state = root()
|
|
if (!state) return
|
|
state.current = undefined
|
|
},
|
|
}
|