11<script setup lang="ts">
2+ import type { AgentsSettings , HostedProvider } from ' @local/common/src/chat'
23import type { Doc } from ' backend-convex/convex/_generated/dataModel'
34import { keyBy } from ' @namesmt/utils'
45import { useIDBKeyval } from ' @vueuse/integrations/useIDBKeyval'
@@ -7,14 +8,14 @@ import { SidebarProvider } from '@/lib/shadcn/components/ui/sidebar'
78// Load all async data
89const { data : threads, isFinished : threadsLoaded } = useIDBKeyval <Doc <' threads' >[]>(' chat/threads' , [])
910const { data : pinnedThreadIds, isFinished : pinnedThreadIdsLoaded } = useIDBKeyval <string []>(' chat/pinnedThreadIds' , [])
10- const { data : agentsSetting , isFinished : agentsSettingLoaded } = useIDBKeyval <AgentsSetting >(' chat/agentsSetting ' , {
11+ const { data : agentsSettings , isFinished : agentsSettingsLoaded } = useIDBKeyval <AgentsSettings >(' chat/agentsSettings ' , {
1112 providers: {
1213 },
1314 selectedAgent: ' hosted/qwen3-32b' ,
1415})
1516
1617await until (computed (() =>
17- threadsLoaded .value && agentsSettingLoaded .value && pinnedThreadIdsLoaded .value ,
18+ threadsLoaded .value && agentsSettingsLoaded .value && pinnedThreadIdsLoaded .value ,
1819)).toBeTruthy ({ timeout: 60000 , throwOnTimeout: true })
1920
2021// ## Threads
@@ -47,18 +48,28 @@ const hostedProvider = computed<HostedProvider>(() => ({
4748 ' llama-4-scout' : {
4849 enabled: true ,
4950 },
51+ ' gemini-2.0-flash-exp' : {
52+ enabled: true ,
53+ attachments: [' image/png' , ' image/jpeg' , ' image/webp' , ' application/pdf' , ' text/plain' ],
54+ },
5055 },
5156 default: ' qwen3-32b' ,
5257}))
5358
5459const activeAgent = computed (() => {
55- let [provider, model] = agentsSetting .value .selectedAgent ?.split (/ \/ (. * )/ ) as
56- [keyof typeof agentsSetting .value .providers | ' hosted' , string ]
60+ let [provider, model]: [string , string ] = agentsSettings .value .selectedAgent ?.split (/ \/ (. * )/ ) as any
5761
58- if (! provider || ! model || (provider !== ' hosted' && ! agentsSetting .value .providers [provider ]))
62+ if (! provider || ! model || (provider !== ' hosted' && ! agentsSettings .value .providers [provider ]))
5963 [provider , model ] = [' hosted' , hostedProvider .value .default ! ]
6064
61- return { provider , model , apiKey: agentsSetting .value .providers [provider ]?.apiKey }
65+ return {
66+ provider ,
67+ model ,
68+ modelSettings: provider === ' hosted'
69+ ? hostedProvider .value .models [model ]
70+ : agentsSettings .value .providers [provider ]?.models [model ],
71+ apiKey: agentsSettings .value .providers [provider ]?.apiKey ,
72+ }
6273})
6374
6475provideChatContext ({
@@ -68,7 +79,7 @@ provideChatContext({
6879 activeThread ,
6980
7081 hostedProvider ,
71- agentsSetting ,
82+ agentsSettings ,
7283 activeAgent ,
7384
7485 insaneUI: useLocalState (' chat/insaneUI' , () => false ),
0 commit comments