summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session/session-model-helpers.ts
blob: 7600f16d5c74e9e62ce6636eeace77cfc18f4a1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import type { UserMessage } from "@opencode-ai/sdk/v2"
import { batch } from "solid-js"

type Local = {
  agent: {
    current():
      | {
          model?: UserMessage["model"]
          variant?: string
        }
      | undefined
    set(name: string | undefined): void
  }
  model: {
    set(model: UserMessage["model"] | undefined): void
    current():
      | {
          id: string
          provider: { id: string }
        }
      | undefined
    variant: {
      set(value: string | undefined): void
    }
  }
}

export const resetSessionModel = (local: Local) => {
  const agent = local.agent.current()
  if (!agent) return
  batch(() => {
    local.model.set(agent.model)
    local.model.variant.set(agent.variant)
  })
}

export const syncSessionModel = (local: Local, msg: UserMessage) => {
  batch(() => {
    local.agent.set(msg.agent)
    local.model.set(msg.model)
  })

  const model = local.model.current()
  if (!model) return
  if (model.provider.id !== msg.model.providerID) return
  if (model.id !== msg.model.modelID) return
  local.model.variant.set(msg.variant)
}