Kaynağa Gözat

fix(app): improve agent selection logic passing in configured models and variants correctly (#16072)

OpeOginni 1 ay önce
ebeveyn
işleme
a60e715fc6

+ 20 - 10
packages/app/src/context/local.tsx

@@ -35,6 +35,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
 
     const agent = (() => {
       const list = createMemo(() => sync.data.agent.filter((x) => x.mode !== "subagent" && !x.hidden))
+      const models = useModels()
+
       const [store, setStore] = createStore<{
         current?: string
       }>({
@@ -53,11 +55,17 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
             setStore("current", undefined)
             return
           }
-          if (name && available.some((x) => x.name === name)) {
-            setStore("current", name)
-            return
-          }
-          setStore("current", available[0].name)
+          const match = name ? available.find((x) => x.name === name) : undefined
+          const value = match ?? available[0]
+          if (!value) return
+          setStore("current", value.name)
+          if (!value.model) return
+          setModel({
+            providerID: value.model.providerID,
+            modelID: value.model.modelID,
+          })
+          if (value.variant) 
+            models.variant.set({ providerID: value.model.providerID, modelID: value.model.modelID }, value.variant)
         },
         move(direction: 1 | -1) {
           const available = list()
@@ -71,11 +79,13 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
           const value = available[next]
           if (!value) return
           setStore("current", value.name)
-          if (value.model)
-            setModel({
-              providerID: value.model.providerID,
-              modelID: value.model.modelID,
-            })
+          if (!value.model) return
+          setModel({
+            providerID: value.model.providerID,
+            modelID: value.model.modelID,
+          })
+          if (value.variant) 
+            models.variant.set({ providerID: value.model.providerID, modelID: value.model.modelID }, value.variant)
         },
       }
     })()

+ 4 - 1
packages/app/src/pages/session.tsx

@@ -416,7 +416,10 @@ export default function Page() {
       () => {
         const msg = lastUserMessage()
         if (!msg) return
-        if (msg.agent) local.agent.set(msg.agent)
+        if (msg.agent) {
+          local.agent.set(msg.agent)
+          if (local.agent.current()?.model) return
+        }
         if (msg.model) local.model.set(msg.model)
       },
     ),