| <script lang="ts" setup> | |
| import { ref, onMounted } from 'vue'; | |
| import { getModels } from '../api'; | |
| import { useAppStore } from '../store'; | |
| import { useI18n } from 'vue-i18n'; | |
| const appStore = useAppStore(); | |
| const model = ref(appStore.model); | |
| const models = ref<string[]>([]); | |
| const loading = ref(false); | |
| const { t } = useI18n(); | |
| const onModelSelect = (val: any) => { | |
| appStore.updateModel(val); | |
| }; | |
| onMounted(async () => { | |
| await listModels(); | |
| if (appStore.model) { | |
| model.value = appStore.model; | |
| } else { | |
| model.value = models.value[0]; | |
| } | |
| appStore.updateModel(model.value); | |
| }); | |
| async function listModels () { | |
| loading.value = true; | |
| const res = await getModels(); | |
| const keys = Object.keys(res); | |
| const values: string[] = []; | |
| keys.forEach((key) => { | |
| const vals = res[key] as string[]; | |
| values.push(...vals.map(i => `${key}:${i}`)); | |
| }); | |
| models.value = values; | |
| loading.value = false; | |
| } | |
| </script> | |
| <script lang="ts"> | |
| export default { | |
| name: 'ModelSelect' | |
| }; | |
| </script> | |
| <template> | |
| <t-select v-model="model" :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> | |