| <script lang="ts" setup> | |
| import { ref, onMounted, watch } from 'vue'; | |
| import { getLocalModels } from '../api'; | |
| import { useAppStore } from '../store'; | |
| import { useI18n } from 'vue-i18n'; | |
| import { MessagePlugin } from 'tdesign-vue-next'; | |
| const appStore = useAppStore(); | |
| const model = ref(appStore.localModel); | |
| const models = ref<string[]>([]); | |
| const loading = ref(false); | |
| const { t } = useI18n(); | |
| const onModelSelect = (val: any) => { | |
| appStore.updateLocalModel(val); | |
| }; | |
| watch(() => appStore.localProvider, async (val) => { | |
| if (val) { | |
| await listModels(); | |
| } | |
| }); | |
| onMounted(async () => { | |
| if (appStore.enableLocal && appStore.localProvider) await listModels(); | |
| if (appStore.localModel) { | |
| model.value = appStore.localModel; | |
| } else { | |
| model.value = models.value[0]; | |
| appStore.updateLocalModel(model.value); | |
| } | |
| }); | |
| async function listModels() { | |
| try { | |
| loading.value = true; | |
| const res = await getLocalModels(appStore.localProvider); | |
| const values: string[] = []; | |
| if (!res.models) { | |
| MessagePlugin.error(JSON.stringify(res.cause)); | |
| return; | |
| } | |
| res.models?.forEach((model: any) => { | |
| values.push(`${model.name}`); | |
| }); | |
| models.value = values; | |
| } catch (error: any) { | |
| MessagePlugin.error('Failed to get local models'); | |
| console.error(error); | |
| } | |
| loading.value = false; | |
| } | |
| </script> | |
| <script lang="ts"> | |
| export default { | |
| name: 'LocalModelSelect' | |
| }; | |
| </script> | |
| <template> | |
| <t-select v-model="model" :disabled="!appStore.enableLocal" :loading="loading" :label="t('llm')" | |
| :placeholder="t('selectModel')" @change="onModelSelect"> | |
| <t-option v-for="(item, index) in models" :key="index" :value="item" :label="item"></t-option> | |
| </t-select> | |
| </template> | |