38
38
</template >
39
39
<script setup lang="ts">
40
40
import { useI18n } from ' vue-i18n'
41
- import { ref , computed , onMounted , PropType } from ' vue'
41
+ import { ref , computed , PropType } from ' vue'
42
42
import Input from ' ./ui/input/Input.vue'
43
43
// import Badge from './ui/badge/Badge.vue'
44
44
import { useChatStore } from ' @/stores/chat'
@@ -54,8 +54,6 @@ const chatStore = useChatStore()
54
54
const settingsStore = useSettingsStore ()
55
55
const themeStore = useThemeStore ()
56
56
const langStore = useLanguageStore ()
57
- const providers = ref <{ id: string ; name: string ; models: RENDERER_MODEL_META [] }[]>([])
58
-
59
57
const emit = defineEmits <{
60
58
(e : ' update:model' , model : RENDERER_MODEL_META , providerId : string ): void
61
59
}>()
@@ -66,6 +64,35 @@ const props = defineProps({
66
64
default: undefined // ← explicit for clarity
67
65
}
68
66
})
67
+ const providers = computed (() => {
68
+ const sortedProviders = settingsStore .sortedProviders
69
+ const enabledModels = settingsStore .enabledModels
70
+ const orderedProviders = sortedProviders
71
+ .filter ((provider ) => provider .enable )
72
+ .map ((provider ) => {
73
+ const enabledProvider = enabledModels .find ((ep ) => ep .providerId === provider .id )
74
+ if (! enabledProvider || enabledProvider .models .length === 0 ) {
75
+ return null
76
+ }
77
+
78
+ return {
79
+ id: provider .id ,
80
+ name: provider .name ,
81
+ models:
82
+ ! props .type || props .type .length === 0
83
+ ? enabledProvider .models
84
+ : enabledProvider .models .filter (
85
+ (model ) => model .type !== undefined && props .type ! .includes (model .type as ModelType )
86
+ )
87
+ }
88
+ })
89
+ .filter (
90
+ (provider ): provider is { id: string ; name : string ; models : RENDERER_MODEL_META [] } =>
91
+ provider !== null && provider .models .length > 0
92
+ )
93
+
94
+ return orderedProviders
95
+ })
69
96
70
97
const filteredProviders = computed (() => {
71
98
if (! keyword .value ) return providers .value .filter ((provider ) => provider .models .length > 0 )
@@ -99,25 +126,4 @@ const handleModelSelect = async (providerId: string, model: RENDERER_MODEL_META)
99
126
// if (model.description) tags.push(model.description)
100
127
// return tags
101
128
// }
102
-
103
- onMounted (async () => {
104
- try {
105
- const enabledModels = settingsStore .enabledModels
106
- providers .value = enabledModels .map (({ providerId , models }) => {
107
- const provider = settingsStore .providers .find ((p ) => p .id === providerId )
108
- return {
109
- id: providerId ,
110
- name: provider ?.name || providerId ,
111
- models:
112
- ! props .type || props .type .length === 0
113
- ? models
114
- : models .filter (
115
- (model ) => model .type !== undefined && props .type ! .includes (model .type as ModelType )
116
- )
117
- }
118
- })
119
- } catch (error ) {
120
- console .error (t (' model.error.loadFailed' ), error )
121
- }
122
- })
123
129
</script >
0 commit comments