model-variant.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. type AgentModel = {
  2. providerID: string
  3. modelID: string
  4. }
  5. type Agent = {
  6. model?: AgentModel
  7. variant?: string
  8. }
  9. type Model = AgentModel & {
  10. variants?: Record<string, unknown>
  11. }
  12. type VariantInput = {
  13. variants: string[]
  14. selected: string | null | undefined
  15. configured: string | undefined
  16. }
  17. export function getConfiguredAgentVariant(input: { agent: Agent | undefined; model: Model | undefined }) {
  18. if (!input.agent?.variant) return undefined
  19. if (!input.agent.model) return undefined
  20. if (!input.model?.variants) return undefined
  21. if (input.agent.model.providerID !== input.model.providerID) return undefined
  22. if (input.agent.model.modelID !== input.model.modelID) return undefined
  23. if (!(input.agent.variant in input.model.variants)) return undefined
  24. return input.agent.variant
  25. }
  26. export function resolveModelVariant(input: VariantInput) {
  27. if (input.selected === null) return undefined
  28. if (input.selected && input.variants.includes(input.selected)) return input.selected
  29. if (input.configured && input.variants.includes(input.configured)) return input.configured
  30. return undefined
  31. }
  32. export function cycleModelVariant(input: VariantInput) {
  33. if (input.variants.length === 0) return undefined
  34. if (input.selected === null) return input.variants[0]
  35. if (input.selected && input.variants.includes(input.selected)) {
  36. const index = input.variants.indexOf(input.selected)
  37. if (index === input.variants.length - 1) return undefined
  38. return input.variants[index + 1]
  39. }
  40. if (input.configured && input.variants.includes(input.configured)) {
  41. const index = input.variants.indexOf(input.configured)
  42. if (index === input.variants.length - 1) return input.variants[0]
  43. return input.variants[index + 1]
  44. }
  45. return input.variants[0]
  46. }