AISR / web /src /components /localModels.vue
zhzabcd's picture
Upload 101 files
755dd12 verified
raw
history blame
1.73 kB
<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>