|
<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> |
|
|