import { defineComponent, ref, onMounted, computed } from 'vue' import { useI18n } from '@src/boot/i18n' import { tools } from '../../store/Modules/tools' import { shared_consts } from '@/common/shared_vuejs' import { useUserStore } from '@store/UserStore' import { useGlobalStore } from '@store/globalStore' import { useQuasar } from 'quasar' import { costanti } from '@costanti' import { useRouter } from 'vue-router' import { serv_constants } from '@store/Modules/serv_constants' export default defineComponent({ name: 'CAITools', props: { }, components: { }, setup(props, { emit }) { const $q = useQuasar() const { t } = useI18n() const userStore = useUserStore() const globalStore = useGlobalStore() const isfinishLoading = computed(() => globalStore.finishLoading) const $router = useRouter() const options = ref({}) const querySel = ref('') const contestSysteList = [ { label: 'Standard', value: '' }, { label: 'Matematica', value: 'Sei un esperto in Matematica' }, { label: 'Editoriale', value: 'Sei un esperto in Editoria e scrittura di articoli e blog' }, { label: 'Programmazione', value: 'Sei un esperto in programmazione' }, ] const modelList = [ { label: 'DeepSeek', value: 'deepseek-chat' }, ] const outputTypeList = [ { label: 'Formato Testo', value: 'Ritornami l\'output in formato testo' }, { label: 'Per Telegram', value: 'Ritornami l\'output formattato per incollarlo sulla chat Telegram, usando delle emoticons in punti chiave e il grassetto (**) nelle parole chiave.' }, { label: 'Formato JSON', value: 'Ritornami l\'output in formato JSON' }, { label: 'Formato CSV (campi separati da \'|\')', value: 'Ritornami l\'output in formato CSV, con i campi separati da \'|\'' }, ] const tempList = [{ label: 'Temperatura a 0.3', value: 0.3 }, { label: 'Temperatura a 0.5', value: 0.5 }, { label: 'Temperatura a 1', value: 1 }, { label: 'Temperatura a 1.2', value: 1.2 }, { label: 'Temperatura a 1.5', value: 1.5 }, ] const tokenList = [ { label: '50 Token', value: 50 }, { label: '100 Token', value: 100 }, { label: '200 Token', value: 200 }, { label: '500 Token', value: 500 }, { label: '1000 Token', value: 1000 }, { label: '2500 Token', value: 2500 }, { label: '4000 Token', value: 4000 }, { label: '5000 Token', value: 5000 }, { label: '10000 Token', value: 10000 }, ] const model = ref('deepseek-chat') const max_tokens = ref(100) const outputType = ref('') const temp = ref(0.3) const stream = ref(false) const contestsystem = ref('') const inputPrompt = ref(''); const result = ref(''); const isLoading = ref(false); const errorMessage = ref(''); const finish_reason = ref(''); const withexplain = ref(false); const querylist = ref([]) const modelLabel = computed(() => { const foundModel = modelList.find((item: any) => item.value === model.value); return foundModel ? foundModel.label : null; }) function mount() { // Mount querylist.value = globalStore.getQueryAI() outputType.value = outputTypeList[0].value } async function handleSubmit() { isLoading.value = true; errorMessage.value = ''; result.value = ''; options.value = { model: model.value, max_tokens: max_tokens.value, temp: temp.value, stream: stream.value, withexplain: withexplain.value, } try { const resdata = await globalStore.getQueryDS(inputPrompt.value, options.value) if (resdata.code === serv_constants.RIS_CODE_OK) { if (resdata.choice) { finish_reason.value = resdata.choice.finish_reason || '' } if (resdata.choice.message) { result.value = resdata.choice.message.content || '' } } else if (resdata.code === serv_constants.RIS_CODE_ERR) { errorMessage.value = resdata.error.message || resdata.error; $q.notify({ color: 'negative', icon: 'error', message: 'Errore durante la richiesta', caption: errorMessage.value }); } } catch (error: any) { errorMessage.value = error.response?.data?.error || error.message; $q.notify({ color: 'negative', icon: 'error', message: 'Errore durante la richiesta', caption: errorMessage.value }); } isLoading.value = false; } const copyToClipboard = () => { if (!result.value) return; navigator.clipboard.writeText(result.value).then(() => { $q.notify({ message: 'Copiato negli appunti!', color: 'positive', icon: 'check', }); }).catch(err => { console.error('Errore nella copia:', err); $q.notify({ message: 'Errore nella copia!', color: 'negative', icon: 'error', }); }); }; onMounted(mount) return { t, querySel, $q, globalStore, inputPrompt, result, isLoading, errorMessage, handleSubmit, querylist, copyToClipboard, max_tokens, tokenList, modelList, tempList, stream, model, contestSysteList, contestsystem, finish_reason, modelLabel, withexplain, outputType, outputTypeList, } } })