1
0
mirror of https://github.com/TandoorRecipes/recipes.git synced 2026-01-11 17:16:59 -05:00

basics of AI provider system

This commit is contained in:
vabene1111
2025-09-05 21:36:43 +02:00
parent 5572833f64
commit 41f0060c43
24 changed files with 1346 additions and 31 deletions

View File

@@ -35,6 +35,16 @@
<database-model-col model="MealType"></database-model-col>
</v-row>
<v-row>
<v-col>
<h2>{{ $t('Ai') }}</h2>
</v-col>
</v-row>
<v-row dense>
<database-model-col model="AiProvider"></database-model-col>
<database-model-col model="AiLog"></database-model-col>
</v-row>
<template v-for="p in TANDOOR_PLUGINS" :key="p.name">
<component :is="p.databasePageComponent" v-if="p.databasePageComponent"></component>
</template>

View File

@@ -140,10 +140,18 @@
@keydown.enter="loadRecipeFromUrl({url: importUrl})"></v-text-field>
<div v-if="importType == 'ai'">
<v-btn-toggle v-model="aiMode">
<v-btn value="file">{{ $t('File') }}</v-btn>
<v-btn value="text">{{ $t('Text') }}</v-btn>
</v-btn-toggle>
<v-row>
<v-col md="6">
<ModelSelect model="AiProvider" v-model="selectedAiProvider"></ModelSelect>
</v-col>
<v-col md="6">
<v-btn-toggle class="mb-2" border divided v-model="aiMode">
<v-btn value="file">{{ $t('File') }}</v-btn>
<v-btn value="text">{{ $t('Text') }}</v-btn>
</v-btn-toggle>
</v-col>
</v-row>
<v-file-upload v-model="image" v-if="aiMode == 'file'" :loading="loading" clearable>
<template #icon>
@@ -540,6 +548,7 @@ import {useI18n} from "vue-i18n";
import {computed, onMounted, ref} from "vue";
import {
AccessToken,
AiProvider,
ApiApi,
ImportLog,
Recipe,
@@ -648,6 +657,7 @@ const appImportDuplicates = ref(false)
const appImportLog = ref<null | ImportLog>(null)
const image = ref<null | File>(null)
const aiMode = ref<'file' | 'text'>('file')
const selectedAiProvider = ref<undefined | AiProvider>(undefined)
const editAfterImport = ref(false)
const bookmarkletToken = ref("")
@@ -724,12 +734,15 @@ function loadRecipeFromUrl(recipeFromSourceRequest: RecipeFromSource) {
*/
function loadRecipeFromAiImport() {
let request = null
if(selectedAiProvider.value == undefined) {
useMessageStore().addError(ErrorMessageType.CREATE_ERROR, "No AI Provider selected")
}
if (image.value != null && aiMode.value == 'file') {
console.log('file import')
request = doAiImport(image.value)
request = doAiImport(selectedAiProvider.value.id!,image.value)
} else if (sourceImportText.value != '' && aiMode.value == 'text') {
console.log('text import')
request = doAiImport(null, sourceImportText.value)
request = doAiImport(selectedAiProvider.value.id!, null, sourceImportText.value)
}
if (request != null) {
@@ -811,13 +824,13 @@ function deleteStep(step: SourceImportStep) {
}
function handleMergeAllSteps(): void {
if (importResponse.value.recipe && importResponse.value.recipe.steps){
if (importResponse.value.recipe && importResponse.value.recipe.steps) {
mergeAllSteps(importResponse.value.recipe.steps)
}
}
function handleSplitAllSteps(): void {
if (importResponse.value.recipe && importResponse.value.recipe.steps){
if (importResponse.value.recipe && importResponse.value.recipe.steps) {
splitAllSteps(importResponse.value.recipe.steps, '\n')
}
}