11import { ref , computed , watch } from 'vue'
22import type { AppContext , AIConfig , Message , Model , DatabaseDialect } from '@/types'
3- import { loadConfig , loadConfigForProvider , saveConfig , getMockModels , generateId , type Provider } from '@/utils/config'
3+ import { loadConfig , loadConfigForProvider , saveConfig , generateId , type Provider } from '@/utils/config'
44import { aiService } from '@/services/aiService'
55
66/**
@@ -27,6 +27,33 @@ export function useAIChat(_context: AppContext) {
2727 deepseek : [ ]
2828 } )
2929
30+ const catalogCache = ref < Record < string , Model [ ] > > ( { } )
31+
32+ async function initializeModelCatalog ( ) {
33+ try {
34+ const catalog = await aiService . fetchModelCatalog ( )
35+ const normalizedCatalog : Record < string , Model [ ] > = { }
36+
37+ Object . entries ( catalog ) . forEach ( ( [ provider , entry ] ) => {
38+ normalizedCatalog [ provider ] = entry . models || [ ]
39+ } )
40+
41+ catalogCache . value = normalizedCatalog
42+
43+ for ( const [ provider , models ] of Object . entries ( normalizedCatalog ) ) {
44+ if ( ! modelsByProvider . value [ provider ] ) {
45+ modelsByProvider . value [ provider ] = models
46+ } else if ( ( modelsByProvider . value [ provider ] || [ ] ) . length === 0 && models . length > 0 ) {
47+ modelsByProvider . value [ provider ] = models
48+ }
49+ }
50+ } catch ( error ) {
51+ console . error ( 'Failed to load model catalog' , error )
52+ }
53+ }
54+
55+ void initializeModelCatalog ( )
56+
3057 // Computed property to get models for current provider
3158 const availableModels = computed ( ( ) => {
3259 const key = resolveProviderKey ( config . value . provider )
@@ -98,8 +125,24 @@ export function useAIChat(_context: AppContext) {
98125 }
99126 } catch ( error ) {
100127 console . error ( 'Failed to fetch models:' , error )
101- // Use mock models as fallback for this provider
102- modelsByProvider . value [ storeKey ] = getMockModels ( storeKey )
128+ const cachedFallback = catalogCache . value [ storeKey ]
129+ if ( cachedFallback && cachedFallback . length ) {
130+ modelsByProvider . value [ storeKey ] = cachedFallback
131+ return
132+ }
133+
134+ try {
135+ const catalog = await aiService . fetchModelCatalog ( storeKey )
136+ const entry = catalog [ storeKey ]
137+ const fallbackModels = entry ?. models ?? [ ]
138+ modelsByProvider . value [ storeKey ] = fallbackModels
139+ if ( fallbackModels . length ) {
140+ catalogCache . value [ storeKey ] = fallbackModels
141+ }
142+ } catch ( catalogError ) {
143+ console . error ( 'Failed to fetch catalog fallback:' , catalogError )
144+ modelsByProvider . value [ storeKey ] = [ ]
145+ }
103146 }
104147 }
105148
0 commit comments