From a7c5240227b8ad9c8f76dcc7e8af0f5ead69fa54 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Mon, 8 Sep 2025 22:15:57 +0200 Subject: [PATCH] ai provider system --- cookbook/admin.py | 16 ++++++++++++- cookbook/migrations/0225_space_ai_enabled.py | 18 ++++++++++++++ ...226_aiprovider_log_credit_cost_and_more.py | 23 ++++++++++++++++++ cookbook/models.py | 4 +++- cookbook/serializer.py | 4 ++-- cookbook/views/api.py | 16 +++++++++++-- cookbook/views/views.py | 3 ++- docs/features/ai.md | 18 ++++++++++++++ docs/system/configuration.md | 16 ++++++------- recipes/settings.py | 2 ++ vue3/src/components/display/RecipeView.vue | 10 +++++--- .../model_editors/AiProviderEditor.vue | 8 +++---- vue3/src/locales/ar.json | 12 ++++++++++ vue3/src/locales/bg.json | 12 ++++++++++ vue3/src/locales/ca.json | 12 ++++++++++ vue3/src/locales/cs.json | 12 ++++++++++ vue3/src/locales/da.json | 12 ++++++++++ vue3/src/locales/de.json | 12 ++++++++++ vue3/src/locales/el.json | 12 ++++++++++ vue3/src/locales/en.json | 12 ++++++++++ vue3/src/locales/es.json | 12 ++++++++++ vue3/src/locales/fi.json | 12 ++++++++++ vue3/src/locales/fr.json | 12 ++++++++++ vue3/src/locales/he.json | 12 ++++++++++ vue3/src/locales/hr.json | 12 ++++++++++ vue3/src/locales/hu.json | 12 ++++++++++ vue3/src/locales/hy.json | 12 ++++++++++ vue3/src/locales/id.json | 12 ++++++++++ vue3/src/locales/is.json | 12 ++++++++++ vue3/src/locales/it.json | 12 ++++++++++ vue3/src/locales/lt.json | 12 ++++++++++ vue3/src/locales/lv.json | 12 ++++++++++ vue3/src/locales/nb_NO.json | 12 ++++++++++ vue3/src/locales/nl.json | 12 ++++++++++ vue3/src/locales/pl.json | 12 ++++++++++ vue3/src/locales/pt.json | 12 ++++++++++ vue3/src/locales/pt_BR.json | 12 ++++++++++ vue3/src/locales/ro.json | 12 ++++++++++ vue3/src/locales/ru.json | 12 ++++++++++ vue3/src/locales/sl.json | 12 ++++++++++ vue3/src/locales/sv.json | 12 ++++++++++ vue3/src/locales/tr.json | 12 ++++++++++ vue3/src/locales/uk.json | 12 ++++++++++ vue3/src/locales/zh_Hans.json | 12 ++++++++++ vue3/src/locales/zh_Hant.json | 12 ++++++++++ vue3/src/openapi/apis/ApiApi.ts | 24 +++++++++++++++++++ vue3/src/openapi/models/AiProvider.ts | 8 +++++++ vue3/src/openapi/models/PatchedAiProvider.ts | 8 +++++++ vue3/src/openapi/models/PatchedSpace.ts | 8 +++++++ vue3/src/openapi/models/Space.ts | 8 +++++++ vue3/src/pages/DatabasePage.vue | 21 +++++++++------- vue3/src/pages/ModelListPage.vue | 7 ++++++ vue3/src/types/Models.ts | 3 ++- 53 files changed, 588 insertions(+), 33 deletions(-) create mode 100644 cookbook/migrations/0225_space_ai_enabled.py create mode 100644 cookbook/migrations/0226_aiprovider_log_credit_cost_and_more.py create mode 100644 docs/features/ai.md diff --git a/cookbook/admin.py b/cookbook/admin.py index 7149f2e5b..fbfdaaa2b 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -17,7 +17,7 @@ from .models import (BookmarkletImport, Comment, CookLog, CustomFilter, Food, Im ShoppingListEntry, ShoppingListRecipe, Space, Step, Storage, Supermarket, SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, TelegramBot, Unit, UnitConversion, UserFile, UserPreference, UserSpace, - ViewLog, ConnectorConfig) + ViewLog, ConnectorConfig, AiProvider, AiLog) admin.site.login = secure_admin_login(admin.site.login) @@ -90,6 +90,20 @@ class SearchPreferenceAdmin(admin.ModelAdmin): admin.site.register(SearchPreference, SearchPreferenceAdmin) +class AiProviderAdmin(admin.ModelAdmin): + list_display = ('name', 'space', 'model',) + search_fields = ('name', 'space', 'model',) + + +admin.site.register(AiProvider, AiProviderAdmin) + + +class AiLogAdmin(admin.ModelAdmin): + list_display = ('ai_provider', 'function', 'credit_cost', 'created_by', 'created_at',) + +admin.site.register(AiLog, AiLogAdmin) + + class StorageAdmin(admin.ModelAdmin): list_display = ('name', 'method') search_fields = ('name',) diff --git a/cookbook/migrations/0225_space_ai_enabled.py b/cookbook/migrations/0225_space_ai_enabled.py new file mode 100644 index 000000000..3e38868ec --- /dev/null +++ b/cookbook/migrations/0225_space_ai_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.22 on 2025-09-08 19:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0224_space_ai_credits_balance_space_ai_credits_monthly_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='space', + name='ai_enabled', + field=models.BooleanField(default=True), + ), + ] diff --git a/cookbook/migrations/0226_aiprovider_log_credit_cost_and_more.py b/cookbook/migrations/0226_aiprovider_log_credit_cost_and_more.py new file mode 100644 index 000000000..2f1d1dfa8 --- /dev/null +++ b/cookbook/migrations/0226_aiprovider_log_credit_cost_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.22 on 2025-09-08 20:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0225_space_ai_enabled'), + ] + + operations = [ + migrations.AddField( + model_name='aiprovider', + name='log_credit_cost', + field=models.BooleanField(default=True), + ), + migrations.AlterField( + model_name='space', + name='ai_credits_monthly', + field=models.IntegerField(default=100), + ), + ] diff --git a/cookbook/models.py b/cookbook/models.py index 0edd82fab..e36e3e570 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -329,7 +329,8 @@ class Space(ExportModelOperationsMixin('space'), models.Model): demo = models.BooleanField(default=False) food_inherit = models.ManyToManyField(FoodInheritField, blank=True) - ai_credits_monthly = models.IntegerField(default=0) + ai_enabled = models.BooleanField(default=True) + ai_credits_monthly = models.IntegerField(default=100) ai_credits_balance = models.IntegerField(default=0) internal_note = models.TextField(blank=True, null=True) @@ -405,6 +406,7 @@ class AiProvider(models.Model): api_key = models.CharField(max_length=2048) model_name = models.CharField(max_length=256) url = models.CharField(max_length=2048, blank=True, null=True) + log_credit_cost = models.BooleanField(default=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 94c9852d4..2caecda6b 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -373,7 +373,7 @@ class SpaceSerializer(WritableNestedModelSerializer): 'allow_sharing', 'demo', 'food_inherit', 'user_count', 'recipe_count', 'file_size_mb', 'image', 'nav_logo', 'space_theme', 'custom_space_theme', 'nav_bg_color', 'nav_text_color', 'logo_color_32', 'logo_color_128', 'logo_color_144', 'logo_color_180', 'logo_color_192', 'logo_color_512', 'logo_color_svg', 'ai_credits_monthly', - 'ai_credits_balance', 'ai_monthly_credits_used') + 'ai_credits_balance', 'ai_monthly_credits_used', 'ai_enabled') read_only_fields = ( 'id', 'created_by', 'created_at', 'max_recipes', 'max_file_storage_mb', 'max_users', 'allow_sharing', 'demo', 'ai_credits_monthly', 'ai_credits_balance', 'ai_monthly_credits_used') @@ -412,7 +412,7 @@ class AiProviderSerializer(serializers.ModelSerializer): class Meta: model = AiProvider - fields = ('id','name', 'description', 'api_key', 'model_name', 'url', 'space', 'created_at', 'updated_at') + fields = ('id', 'name', 'description', 'api_key', 'model_name', 'url', 'log_credit_cost', 'space', 'created_at', 'updated_at') read_only_fields = ('created_at', 'updated_at',) extra_kwargs = { diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 1611811cc..b7f4f26b0 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -65,6 +65,7 @@ from cookbook.connectors.connector_manager import ConnectorManager, ActionType from cookbook.forms import ImportForm, ImportExportBase from cookbook.helper import recipe_url_import as helper from cookbook.helper.HelperFunctions import str2bool, validate_import_url +from cookbook.helper.ai_helper import has_monthly_token from cookbook.helper.image_processing import handle_image from cookbook.helper.ingredient_parser import IngredientParser from cookbook.helper.open_data_importer import OpenDataImporter @@ -2027,13 +2028,24 @@ class AiImportView(APIView): if 'ai_provider_id' not in serializer.validated_data: response = { 'error': True, - 'msg': 'You must select an AI provider to perform your request', + 'msg': _('You must select an AI provider to perform your request.'), + } + return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_400_BAD_REQUEST) + + if not has_monthly_token(request.space): + response = { + 'error': True, + 'msg': _("You don't have any credits remaining to use AI."), } return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_400_BAD_REQUEST) ai_provider = AiProvider.objects.filter(pk=serializer.validated_data['ai_provider_id']).filter(Q(space=request.space) | Q(space__isnull=True)).first() def log_ai_request(kwargs, completion_response, start_time, end_time): + credit_cost = 0 + if ai_provider.log_credit_cost: + credit_cost = kwargs.get("response_cost", 0) * 100 + AiLog.objects.create( created_by=request.user, space=request.space, @@ -2043,7 +2055,7 @@ class AiImportView(APIView): input_tokens=completion_response['usage']['prompt_tokens'], output_tokens=completion_response['usage']['completion_tokens'], function=AiLog.F_FILE_IMPORT, - credit_cost=kwargs.get("response_cost", 0) * 100, + credit_cost=credit_cost, credits_from_balance=False, # TODO implement ) diff --git a/cookbook/views/views.py b/cookbook/views/views.py index dc1fb5baa..cd2127560 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -97,7 +97,8 @@ def space_overview(request): max_recipes=settings.SPACE_DEFAULT_MAX_RECIPES, max_users=settings.SPACE_DEFAULT_MAX_USERS, allow_sharing=settings.SPACE_DEFAULT_ALLOW_SHARING, - ) + ai_enabled=settings.SPACE_AI_ENABLED, + ai_credits_monthly=settings.SPACE_AI_CREDITS_MONTHLY,) user_space = UserSpace.objects.create(space=created_space, user=request.user, active=False) user_space.groups.add(Group.objects.filter(name='admin').get()) diff --git a/docs/features/ai.md b/docs/features/ai.md new file mode 100644 index 000000000..e37015e8f --- /dev/null +++ b/docs/features/ai.md @@ -0,0 +1,18 @@ +Tandoor has several AI based features. To allow maximum flexibility, you can configure different AI providers and select them based on the task you want to perform. +To prevent accidental cost escalation Tandoor has a robust system of tracking and limiting AI costs. + +## Default Configuration +By default the AI features are enabled for every space. Each space has a spending limit of roughly 1 USD per month. +This can be changed using the [configuration variables](https://docs.tandoor.dev/system/configuration/#ai-integration) + +You can change these settings any time using the django admin. If you do not care about AI cost you can enter a very high limit or disable cost tracking for your providers. +The limit resets on the first of every month. + +## Configure AI Providers +When AI support is enabled for a space every user in a space can configure AI providers. +The models shown in the editor have been tested and work with Tandoor. Most other models that can parse images/files and return text should also work. + +Superusers also have the ability to configure global AI providers that every space can use. + +## AI Log +The AI Log allows you to track the usage of AI calls. Here you can also see the usage. \ No newline at end of file diff --git a/docs/system/configuration.md b/docs/system/configuration.md index 6d17efec7..b3a333bbf 100644 --- a/docs/system/configuration.md +++ b/docs/system/configuration.md @@ -472,16 +472,16 @@ S3_CUSTOM_DOMAIN= # when using a CDN/proxy to S3 (see https://github.com/Tandoor #### AI Integration -To use AI to perform different tasks you need to configure an API key and the AI provider. [LiteLLM](https://www.litellm.ai/) is used -to make a standardized request to different AI providers of your liking. - -Configuring this via environment parameters is a temporary solution. In the future I plan on adding support for multiple AI providers per Tandoor instance -with the option to select them for various tasks. For now only gemini 2.0 flash has been tested but feel free to try out other models. +Most AI features are configured trough the AI Provider settings in the Tandoor web interface. Some defaults can be set for new spaces on your instance. +Enables AI features for spaces by default ``` -AI_API_KEY= -AI_MODEL_NAME=gemini/gemini-2.0-flash -AI_RATELIMIT=60/hour +SPACE_AI_ENABLED=1 +``` + +Sets the monthly default credit limit for AI usage +``` +SPACE_AI_CREDITS_MONTHLY=100 ``` #### FDC Api diff --git a/recipes/settings.py b/recipes/settings.py index a98d550e5..ba9ad58f7 100644 --- a/recipes/settings.py +++ b/recipes/settings.py @@ -59,6 +59,8 @@ SPACE_DEFAULT_MAX_RECIPES = int(os.getenv('SPACE_DEFAULT_MAX_RECIPES', 0)) SPACE_DEFAULT_MAX_USERS = int(os.getenv('SPACE_DEFAULT_MAX_USERS', 0)) SPACE_DEFAULT_MAX_FILES = int(os.getenv('SPACE_DEFAULT_MAX_FILES', 0)) SPACE_DEFAULT_ALLOW_SHARING = extract_bool('SPACE_DEFAULT_ALLOW_SHARING', True) +SPACE_AI_ENABLED = extract_bool('SPACE_AI_ENABLED', True) +SPACE_AI_CREDITS_MONTHLY = int(os.getenv('SPACE_AI_CREDITS_MONTHLY', 100)) INTERNAL_IPS = extract_comma_list('INTERNAL_IPS', '127.0.0.1') diff --git a/vue3/src/components/display/RecipeView.vue b/vue3/src/components/display/RecipeView.vue index f5534fcdc..440752daa 100644 --- a/vue3/src/components/display/RecipeView.vue +++ b/vue3/src/components/display/RecipeView.vue @@ -121,12 +121,16 @@ diff --git a/vue3/src/components/model_editors/AiProviderEditor.vue b/vue3/src/components/model_editors/AiProviderEditor.vue index 12a652855..ec4a9a4bd 100644 --- a/vue3/src/components/model_editors/AiProviderEditor.vue +++ b/vue3/src/components/model_editors/AiProviderEditor.vue @@ -14,8 +14,7 @@ - - + @@ -23,10 +22,9 @@ -

You can use any model that LiteLLM supports, the list just contains some - of the most - commonly used models.

+

{{$t('AiModelHelp')}} LiteLLM

+ diff --git a/vue3/src/locales/ar.json b/vue3/src/locales/ar.json index e35d65137..489d565c7 100644 --- a/vue3/src/locales/ar.json +++ b/vue3/src/locales/ar.json @@ -14,6 +14,11 @@ "Added_by": "", "Added_on": "", "Advanced": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "App": "", "Apply": "", "Are_You_Sure": "", @@ -44,6 +49,7 @@ "Color": "", "Coming_Soon": "", "Completed": "", + "ConvertUsingAI": "", "Copy": "", "Copy Link": "", "Copy Token": "", @@ -58,6 +64,7 @@ "Create_New_Shopping Category": "", "Create_New_Shopping_Category": "", "Create_New_Unit": "", + "Credits": "", "Current_Period": "", "Custom Filter": "", "DELETE_ERROR": "", @@ -106,6 +113,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "", "Hide_Food": "", "Hide_Keyword": "", @@ -148,6 +157,8 @@ "Keywords": "", "Link": "", "Load_More": "", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "", "Log_Recipe_Cooking": "", "Make_Header": "", @@ -165,6 +176,7 @@ "Message": "", "MissingProperties": "", "Month": "", + "MonthlyCreditsUsed": "", "Move": "", "MoveCategory": "", "Move_Down": "", diff --git a/vue3/src/locales/bg.json b/vue3/src/locales/bg.json index c6d0adfab..c04e4e7ea 100644 --- a/vue3/src/locales/bg.json +++ b/vue3/src/locales/bg.json @@ -14,6 +14,11 @@ "Added_by": "Добавено от", "Added_on": "Добавено", "Advanced": "Разширено", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "App": "Приложение", "Apply": "", "Are_You_Sure": "Сигурен ли си?", @@ -44,6 +49,7 @@ "Color": "Цвят", "Coming_Soon": "Очаквайте скоро", "Completed": "Завършено", + "ConvertUsingAI": "", "Copy": "Копиране", "Copy_template_reference": "Копирайте препратка към шаблона", "CountMore": "...+{count} още", @@ -55,6 +61,7 @@ "Create_New_Meal_Type": "Добавете нов тип хранене", "Create_New_Shopping Category": "Създайте нова категория за пазаруване", "Create_New_Unit": "Добавяне на нова единица", + "Credits": "", "Current_Period": "Текущ период", "Custom Filter": "Персонализиран филтър", "DELETE_ERROR": "", @@ -103,6 +110,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Групирай по", "Hide_Food": "Скриване на храна", "Hide_Keyword": "Скриване на ключови думи", @@ -143,6 +152,8 @@ "Keywords": "Ключови думи", "Link": "Връзка", "Load_More": "Зареди още", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Дневник на Готвене", "Log_Recipe_Cooking": "Дневник на Рецепта за готвене", "Make_Header": "Направете заглавие", @@ -159,6 +170,7 @@ "Merge_Keyword": "Обединяване на ключова дума", "MissingProperties": "", "Month": "Месец", + "MonthlyCreditsUsed": "", "Move": "Премести", "MoveCategory": "Премести към: ", "Move_Down": "Премести надолу", diff --git a/vue3/src/locales/ca.json b/vue3/src/locales/ca.json index d8d1ea20f..6819105a2 100644 --- a/vue3/src/locales/ca.json +++ b/vue3/src/locales/ca.json @@ -16,6 +16,11 @@ "Added_by": "Afegit per", "Added_on": "Afegit el", "Advanced": "Avançat", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Alineació", "Amount": "Quantitat", "App": "Aplicació", @@ -57,6 +62,7 @@ "Comments_setting": "Mostrar comentaris", "Completed": "Completat", "Conversion": "Conversió", + "ConvertUsingAI": "", "Copy": "Copiar", "Copy Link": "Copiar Enllaç", "Copy Token": "Copiar Token", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "Afegir nova Categoria de Compres", "Create_New_Unit": "Afegir nova unitat", "Created": "Creada", + "Credits": "", "Current_Period": "Període Actual", "Custom Filter": "Filtre Personalitzat", "CustomImageHelp": "Carregar una imatge per mostrar a la vista general de l’espai.", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Agrupat per", "Hide_Food": "Amagar Aliment", "Hide_Keyword": "Amaga les paraules clau", @@ -197,6 +206,8 @@ "Learn_More": "Saber-me més", "Link": "Enllaç", "Load_More": "Carregueu-ne més", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Registreu el que s'ha cuinat", "Log_Recipe_Cooking": "Registre de receptes", "Logo": "Logotip", @@ -216,6 +227,7 @@ "Message": "Missatge", "MissingProperties": "", "Month": "Mes", + "MonthlyCreditsUsed": "", "Move": "Moure", "MoveCategory": "Moure a: ", "Move_Down": "Moveu avall", diff --git a/vue3/src/locales/cs.json b/vue3/src/locales/cs.json index 633616a8f..458d64fa8 100644 --- a/vue3/src/locales/cs.json +++ b/vue3/src/locales/cs.json @@ -16,6 +16,11 @@ "Added_by": "Přidáno uživatelem", "Added_on": "Přidáno v", "Advanced": "Rozšířené", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Zarovnání", "Amount": "Množství", "App": "Aplikace", @@ -57,6 +62,7 @@ "Comments_setting": "Zobrazit komentáře", "Completed": "Dokončeno", "Conversion": "Převod", + "ConvertUsingAI": "", "Copy": "Kopírovat", "Copy Link": "Kopírovat odkaz", "Copy Token": "Kopírovat token", @@ -73,6 +79,7 @@ "Create_New_Shopping Category": "Vytvořit novou nákupní kategorii", "Create_New_Shopping_Category": "Přidat novou nákupní kategorii", "Create_New_Unit": "Přidat novou jednotku", + "Credits": "", "Current_Period": "Současné období", "Custom Filter": "Uživatelský filtr", "CustomImageHelp": "Nahrajte obrázek, který se zobrazí v přehledu prostoru.", @@ -146,6 +153,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Seskupit podle", "Hide_Food": "Skrýt potravinu", "Hide_Keyword": "Skrýt štítky", @@ -195,6 +204,8 @@ "Learn_More": "Zjistit víc", "Link": "Odkaz", "Load_More": "Načíst další", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Zaznamenat vaření", "Log_Recipe_Cooking": "Záznam vaření receptu", "Logo": "Logo", @@ -214,6 +225,7 @@ "Message": "Zpráva", "MissingProperties": "", "Month": "Měsíc", + "MonthlyCreditsUsed": "", "Move": "Přesunout", "MoveCategory": "Přesunout do: ", "Move_Down": "Dolů", diff --git a/vue3/src/locales/da.json b/vue3/src/locales/da.json index e451b51d5..093c89053 100644 --- a/vue3/src/locales/da.json +++ b/vue3/src/locales/da.json @@ -16,6 +16,11 @@ "Added_by": "Tilføjet af", "Added_on": "Tilføjet den", "Advanced": "Avanceret", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Justering", "Amount": "Mængde", "App": "App", @@ -57,6 +62,7 @@ "Comments_setting": "Vis kommentarer", "Completed": "Afsluttet", "Conversion": "Konversion", + "ConvertUsingAI": "", "Copy": "Kopier", "Copy Link": "Kopier link", "Copy Token": "Kopier token", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "Opret ny indkøbskategori", "Create_New_Unit": "Tilføj ny enhed", "Created": "Skabt", + "Credits": "", "Current_Period": "Nuværende periode", "Custom Filter": "Tilpasset filter", "CustomImageHelp": "Upload et billede for at vise dets plade i område-oversigten.", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Grupper efter", "Hide_Food": "Skjul mad", "Hide_Keyword": "Skjul nøgleord", @@ -197,6 +206,8 @@ "Learn_More": "Lær mere", "Link": "Link", "Load_More": "Indlæs mere", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Noter tilberedning", "Log_Recipe_Cooking": "Noter tilberedning af opskrift", "Logo": "Logo", @@ -216,6 +227,7 @@ "Message": "Besked", "MissingProperties": "", "Month": "Måned", + "MonthlyCreditsUsed": "", "Move": "Flyt", "MoveCategory": "Flyt til: ", "Move_Down": "Flyt ned", diff --git a/vue3/src/locales/de.json b/vue3/src/locales/de.json index 39676d41c..3bb56a9dd 100644 --- a/vue3/src/locales/de.json +++ b/vue3/src/locales/de.json @@ -29,6 +29,11 @@ "Admin": "Admin", "Advanced": "Erweitert", "Advanced Search Settings": "Erweiterte Sucheinstellungen", + "AiLog": "AI Protokoll", + "AiLogHelp": "Eine Übersicht der AI Anfragen.", + "AiModelHelp": "Die Liste enthält Modelle die offiziell Unterstützt und getestet wurden. Weitere modelle können manuell eingetragen werden.", + "AiProvider": "AI Anbieter", + "AiProviderHelp": "Je nach Präferenz können verschiedene AI Anbieter angelegt werden. Diese können auch Space übergreifend sein.", "Alignment": "Ausrichtung", "AllRecipes": "Alle Rezepte", "Amount": "Menge", @@ -90,6 +95,7 @@ "Continue": "Weiter", "Conversion": "Umrechnung", "ConversionsHelp": "Mit Umrechnungen kann die Menge eines Lebensmittels in verschiedenen Einheiten ausgerechnet werden. Aktuell wird dies nur zur berechnung von Eigenschaften verwendet, später jedoch sollen auch andere Funktionen von Tandoor davon profitieren. ", + "ConvertUsingAI": "Mithilfe von AI Umwandeln", "CookLog": "Kochprotokoll", "CookLogHelp": "Einträge im Kochprotokoll für Rezepte. ", "Cooked": "Gekocht", @@ -112,6 +118,7 @@ "Create_New_Unit": "Neue Einheit hinzufügen", "Created": "Erstellt", "CreatedBy": "Erstellt von", + "Credits": "Credits", "Ctrl+K": "Strg+K", "Current_Period": "Aktueller Zeitraum", "Custom Filter": "Benutzerdefinierter Filter", @@ -210,6 +217,8 @@ "Fuzzy": "Unscharf", "FuzzySearchHelp": "Verwende unscharfe Suche um Einträge auch bei Unterschieden in der Schreibweise zu finden.", "GettingStarted": "Erste Schritte", + "Global": "Global", + "GlobalHelp": "Globale AI Anbieter können von Nutzern aller Spaces verwendet werden. ", "GroupBy": "Gruppieren nach", "HeaderWarning": "Achtung: Durch ändern auf Überschrift werden Menge/Einheit/Lebensmittel gelöscht", "Headline": "Überschrift", @@ -277,6 +286,8 @@ "Link": "Link", "Load": "Laden", "Load_More": "Weitere laden", + "LogCredits": "Credits Protokollieren", + "LogCreditsHelp": "Protokolliere die Credit Kosten der AI Anfragen. Ohne diese Protokollierung können Nutzer unbgerenzt viele Anfragen stellen.", "Log_Cooking": "Kochen protokollieren", "Log_Recipe_Cooking": "Kochen protokollieren", "Logo": "Logo", @@ -306,6 +317,7 @@ "ModelSelectResultsHelp": "Für mehr Ergebnisse suchen", "Monday": "Montag", "Month": "Monat", + "MonthlyCreditsUsed": "Monatliche Credits verwendet", "More": "Mehr", "Move": "Verschieben", "MoveCategory": "Verschieben nach: ", diff --git a/vue3/src/locales/el.json b/vue3/src/locales/el.json index 350518de4..06a9a9d8d 100644 --- a/vue3/src/locales/el.json +++ b/vue3/src/locales/el.json @@ -16,6 +16,11 @@ "Added_by": "Προστέθηκε από", "Added_on": "Προστέθηκε στις", "Advanced": "Για προχωρημένους", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Ευθυγράμμιση", "Amount": "Ποσότητα", "App": "Εφαρμογή", @@ -57,6 +62,7 @@ "Comments_setting": "Εμφάνιση σχολίων", "Completed": "Ολοκληρωμένο", "Conversion": "Μετατροπή", + "ConvertUsingAI": "", "Copy": "Αντιγραφή", "Copy Link": "Αντιγραφή συνδέσμου", "Copy Token": "Αντιγραφή token", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "Προσθήκη νέας κατηγορίας αγορών", "Create_New_Unit": "Προσθήκη νέας μονάδας μέτρησης", "Created": "Δημιουργήθηκε", + "Credits": "", "Current_Period": "Τρέχουσα περίοδος", "Custom Filter": "Προσαρμοσμένο φίλτρο", "CustomImageHelp": "Ανεβάστε μια εικόνα για να εμφανίζεται στην επισκόπηση χώρου", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Ομαδοποίηση κατά", "Hide_Food": "Απόκρυψη φαγητού", "Hide_Keyword": "Απόκρυψη λέξεων-κλειδί", @@ -197,6 +206,8 @@ "Learn_More": "Μάθετε περισσότερα", "Link": "Σύνδεσμος", "Load_More": "Φόρτωση περισσότερων", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Καταγραφή μαγειρέματος", "Log_Recipe_Cooking": "Καταγραφή εκτέλεσης συνταγής", "Logo": "Λογότυπο", @@ -216,6 +227,7 @@ "Message": "Μήνυμα", "MissingProperties": "", "Month": "Μήνας", + "MonthlyCreditsUsed": "", "Move": "Μετακίνηση", "MoveCategory": "Μετακίνηση σε: ", "Move_Down": "Μετακίνηση κάτω", diff --git a/vue3/src/locales/en.json b/vue3/src/locales/en.json index 4e438902f..474535c3e 100644 --- a/vue3/src/locales/en.json +++ b/vue3/src/locales/en.json @@ -27,6 +27,11 @@ "Added_on": "Added On", "Admin": "Admin", "Advanced": "Advanced", + "AiLog": "AI Log", + "AiLogHelp": "Overview of your spaces AI requests. ", + "AiModelHelp": "The list contains model that are offically tested and supported. You can add additional models if you want.", + "AiProvider": "AI Provider", + "AiProviderHelp": "You can configure multiple AI providers according to your preferences. They can even be configured to work across multiple spaces.", "Alignment": "Alignment", "AllRecipes": "All Recipes", "Amount": "Amount", @@ -88,6 +93,7 @@ "Continue": "Continue", "Conversion": "Conversion", "ConversionsHelp": "With conversions you can calculate the amount of a food in different units. Currently this is only used for property calculation, later it might also be used in other parts of tandoor. ", + "ConvertUsingAI": "Convert using AI", "CookLog": "Cook Log", "CookLogHelp": "Entries in the cook log for recipes. ", "Cooked": "Cooked", @@ -110,6 +116,7 @@ "Create_New_Unit": "Add New Unit", "Created": "Created", "CreatedBy": "Created by", + "Credits": "Credits", "Ctrl+K": "Ctrl+K", "Current_Period": "Current Period", "Custom Filter": "Custom Filter", @@ -208,6 +215,8 @@ "Fuzzy": "Fuzzy", "FuzzySearchHelp": "Use fuzzy search to find entries even when there are differences in how the word is written.", "GettingStarted": "Getting Started", + "Global": "Global", + "GlobalHelp": "Global AI Providers can be used by users of all spaces. ", "GroupBy": "Group By", "HeaderWarning": "Warning: Changing to a Heading deletes the Amount/Unit/Food", "Headline": "Headline", @@ -275,6 +284,8 @@ "Link": "Link", "Load": "Load", "Load_More": "Load More", + "LogCredits": "Log Credits.", + "LogCreditsHelp": "Log credit cost of AI requests. Without this users can perform as many AI requests as they want. ", "Log_Cooking": "Log Cooking", "Log_Recipe_Cooking": "Log Recipe Cooking", "Logo": "Logo", @@ -304,6 +315,7 @@ "ModelSelectResultsHelp": "Search for more results", "Monday": "Monday", "Month": "Month", + "MonthlyCreditsUsed": "Monthly credits used", "More": "More", "Move": "Move", "MoveCategory": "Move To: ", diff --git a/vue3/src/locales/es.json b/vue3/src/locales/es.json index 7423d7f5f..9e9f0c149 100644 --- a/vue3/src/locales/es.json +++ b/vue3/src/locales/es.json @@ -26,6 +26,11 @@ "Added_on": "Añadido el", "Admin": "Administrador", "Advanced": "Avanzado", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Alineación", "AllRecipes": "Todas las recetas", "Amount": "Cantidad", @@ -85,6 +90,7 @@ "Continue": "Continuar", "Conversion": "Conversión", "ConversionsHelp": "Con las conversiones puedes calcular la cantidad de un alimento en diferentes unidades. Actualmente esto solo se usa para el cálculo de propiedades, en un futuro podría ser usado en otras partes de Tandoor. ", + "ConvertUsingAI": "", "CookLog": "Historial de cocina", "CookLogHelp": "Entradas en el historial de cocina para recetas. ", "Cooked": "Cocinado", @@ -107,6 +113,7 @@ "Create_New_Unit": "Añadir nueva unidad", "Created": "Creada", "CreatedBy": "Creado por", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Periodo actual", "Custom Filter": "Filtro personalizado", @@ -201,6 +208,8 @@ "Foods": "Alimentos", "Friday": "Viernes", "GettingStarted": "Primeros pasos", + "Global": "", + "GlobalHelp": "", "GroupBy": "Agrupar por", "HeaderWarning": "Advertencia: Cambiar a un encabezado eliminará la cantidad/unidad/alimento", "Headline": "Encabezado", @@ -266,6 +275,8 @@ "Link": "Enlace", "Load": "Cargar", "Load_More": "Cargar más", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Registrar cocinada", "Log_Recipe_Cooking": "Registro de recetas", "Logo": "Logotipo", @@ -294,6 +305,7 @@ "ModelSelectResultsHelp": "Buscar más resultados", "Monday": "Lunes", "Month": "Mes", + "MonthlyCreditsUsed": "", "More": "Más", "Move": "Mover", "MoveCategory": "Mover a: ", diff --git a/vue3/src/locales/fi.json b/vue3/src/locales/fi.json index 8e50b203c..33996af11 100644 --- a/vue3/src/locales/fi.json +++ b/vue3/src/locales/fi.json @@ -17,6 +17,11 @@ "Added_on": "Lisätty", "Advanced": "Edistynyt", "Advanced Search Settings": "Tarkennetun Haun Asetukset", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Tasaus", "Amount": "Määrä", "App": "Applikaatio", @@ -55,6 +60,7 @@ "Comments_setting": "Näytä Kommentit", "Completed": "Valmis", "Conversion": "Muuntaminen", + "ConvertUsingAI": "", "Copy": "Kopioi", "Copy Link": "Kopioi Linkki", "Copy Token": "Kopioi Token", @@ -71,6 +77,7 @@ "Create_New_Shopping_Category": "Lisää uusi ostoskategoria", "Create_New_Unit": "Lisää Uusi Yksikkö", "Created": "Luotu", + "Credits": "", "Current_Period": "Nykyinen Jakso", "Custom Filter": "Mukautettu Suodatin", "CustomImageHelp": "Lataa kuva näytettäväksi tilan yleiskatsauksessa.", @@ -144,6 +151,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Ryhmittely peruste", "Hide_Food": "Piilota Ruoka", "Hide_Keyword": "Piilota avainsana", @@ -191,6 +200,8 @@ "Learn_More": "Lisätietoja", "Link": "Linkki", "Load_More": "Lataa Lisää", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Kirjaa kokkaus", "Log_Recipe_Cooking": "Kirjaa Reseptin valmistus", "Logo": "Logo", @@ -210,6 +221,7 @@ "Message": "Viesti", "MissingProperties": "", "Month": "Kuukausi", + "MonthlyCreditsUsed": "", "Move": "Siirry", "MoveCategory": "Siirrä paikkaan: ", "Move_Down": "Siirry alas", diff --git a/vue3/src/locales/fr.json b/vue3/src/locales/fr.json index 6ffa397a0..bdd4f6fb9 100644 --- a/vue3/src/locales/fr.json +++ b/vue3/src/locales/fr.json @@ -27,6 +27,11 @@ "Admin": "Admin", "Advanced": "Avancé", "Advanced Search Settings": "Paramètres de recherche avancée", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Alignement", "AllRecipes": "Toutes les recettes", "Amount": "Quantité", @@ -88,6 +93,7 @@ "Continue": "Continuer", "Conversion": "Conversion", "ConversionsHelp": "Avec les conversions, vous pouvez calculer une quantité dans différentes unités. Actuellement, c'est utilisé uniquement pour le calcul des propriétés, mais ça pourrait être utilisé dans d'autres parties de Tandoor dans le futur. ", + "ConvertUsingAI": "", "CookLog": "Journal de cuisine", "CookLogHelp": "Entrées dans le journal de cuisine pour les recettes. ", "Cooked": "Cuit", @@ -110,6 +116,7 @@ "Create_New_Unit": "Ajouter une nouvelle unité", "Created": "Créé", "CreatedBy": "Créé par", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Période actuelle", "Custom Filter": "Filtre personnalisé", @@ -208,6 +215,8 @@ "Fuzzy": "Approximatif", "FuzzySearchHelp": "Utilisez la recherche approximative pour trouver des entrées même lorsqu'il existe des différences dans la façon dont le mot est écrit.", "GettingStarted": "Commencer", + "Global": "", + "GlobalHelp": "", "GroupBy": "Grouper par", "HeaderWarning": "Attention : Changer pour un En-tête supprimera la quantité / l'unité / l'aliment", "Headline": "En-tête", @@ -275,6 +284,8 @@ "Link": "Lien", "Load": "Chargement", "Load_More": "Charger plus", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Marquer comme cuisiné", "Log_Recipe_Cooking": "Marquer la recette comme cuisinée", "Logo": "Logo", @@ -301,6 +312,7 @@ "ModelSelectResultsHelp": "Chercher plus de résultats", "Monday": "Lundi", "Month": "Mois", + "MonthlyCreditsUsed": "", "More": "Plus", "Move": "Déplacer", "MoveCategory": "Déplacer vers : ", diff --git a/vue3/src/locales/he.json b/vue3/src/locales/he.json index 37d22fbc6..c565a10d1 100644 --- a/vue3/src/locales/he.json +++ b/vue3/src/locales/he.json @@ -16,6 +16,11 @@ "Added_by": "נוסף ע\"י", "Added_on": "נוסף ב", "Advanced": "מתקדם", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "יישור", "Amount": "כמות", "App": "אפליקציה", @@ -57,6 +62,7 @@ "Comments_setting": "הצג תגובות", "Completed": "הושלם", "Conversion": "עברית", + "ConvertUsingAI": "", "Copy": "העתקה", "Copy Link": "העתק קישור", "Copy Token": "העתק טוקן", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "הוסף קטגוריות קניות חדשה", "Create_New_Unit": "הוסף יחידה", "Created": "נוצר", + "Credits": "", "Current_Period": "תקופה נוכחית", "Custom Filter": "פילטר מותאם", "CustomImageHelp": "העלאת תמונה שתראה באזור הסקירה.", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "אסוף לפי", "Hide_Food": "הסתר אוכל", "Hide_Keyword": "הסתר מילות מפתח", @@ -197,6 +206,8 @@ "Learn_More": "למד עוד", "Link": "קישור", "Load_More": "טען עוד", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "רשום הכנת מתכון", "Log_Recipe_Cooking": "רשום בישול מתכון", "Logo": "לוגו", @@ -216,6 +227,7 @@ "Message": "הודעה", "MissingProperties": "", "Month": "חודש", + "MonthlyCreditsUsed": "", "Move": "העברה", "MoveCategory": "העבר אל: ", "Move_Down": "העברה למטה", diff --git a/vue3/src/locales/hr.json b/vue3/src/locales/hr.json index e300900b4..0f2be32b3 100644 --- a/vue3/src/locales/hr.json +++ b/vue3/src/locales/hr.json @@ -16,6 +16,11 @@ "Added_by": "Dodao", "Added_on": "Dodano", "Advanced": "Napredno", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Poravnanje", "Amount": "Količina", "App": "Aplikacija", @@ -57,6 +62,7 @@ "Comments_setting": "Prikaži komentare", "Completed": "Završeno", "Conversion": "Konverzija", + "ConvertUsingAI": "", "Copy": "Kopiraj", "Copy Link": "Kopiraj vezu", "Copy Token": "Kopiraj token", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "Dodaj novu kategoriju za kupovinu", "Create_New_Unit": "Dodaj novu jedinicu", "Created": "Stvoreno", + "Credits": "", "Current_Period": "Trenutno razdoblje", "Custom Filter": "Prilagođeni filtar", "CustomImageHelp": "Učitaj sliku za prikaz u pregledu prostora.", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Grupiraj po", "Hide_Food": "Sakrij namirnicu", "Hide_Keyword": "Sakrij ključne riječi", @@ -197,6 +206,8 @@ "Learn_More": "Saznajte više", "Link": "Poveznica", "Load_More": "Učitaj više", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Zapis kuhanja", "Log_Recipe_Cooking": "Dnevnik recepata kuhanja", "Logo": "Logotip", @@ -216,6 +227,7 @@ "Message": "Poruka", "MissingProperties": "", "Month": "Mjesec", + "MonthlyCreditsUsed": "", "Move": "Premjesti", "MoveCategory": "Premjesti u: ", "Move_Down": "Premjesti dolje", diff --git a/vue3/src/locales/hu.json b/vue3/src/locales/hu.json index c6b2346ec..ad24b17dd 100644 --- a/vue3/src/locales/hu.json +++ b/vue3/src/locales/hu.json @@ -16,6 +16,11 @@ "Added_by": "Hozzádta", "Added_on": "Hozzáadva", "Advanced": "Haladó", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Igazítás", "Amount": "Összeg", "App": "Applikáció", @@ -56,6 +61,7 @@ "Comments_setting": "Hozzászólások megjelenítése", "Completed": "Kész", "Conversion": "Konverzió", + "ConvertUsingAI": "", "Copy": "Másolás", "Copy Link": "Link másolása", "Copy Token": "Token másolása", @@ -71,6 +77,7 @@ "Create_New_Shopping Category": "Új vásárlási kategória létrehozása", "Create_New_Shopping_Category": "Új vásárlási kategória hozzáadása", "Create_New_Unit": "Új mértékegység hozzáadása", + "Credits": "", "Current_Period": "Jelenlegi periódus", "Custom Filter": "Egyéni szűrő", "DELETE_ERROR": "", @@ -130,6 +137,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Csoportosítva", "Hide_Food": "Alapanyag elrejtése", "Hide_Keyword": "Kulcsszavak elrejtése", @@ -179,6 +188,8 @@ "Learn_More": "Tudjon meg többet", "Link": "Link", "Load_More": "Továbbiak betöltése", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Főzés naplózása", "Log_Recipe_Cooking": "Főzés naplózása", "Make_Header": "Átalakítás címsorra", @@ -197,6 +208,7 @@ "Message": "Üzenet", "MissingProperties": "", "Month": "Hónap", + "MonthlyCreditsUsed": "", "Move": "Mozgatás", "MoveCategory": "Áthelyezés ide: ", "Move_Down": "Lefelé mozgatás", diff --git a/vue3/src/locales/hy.json b/vue3/src/locales/hy.json index 92d9f1557..17905f5de 100644 --- a/vue3/src/locales/hy.json +++ b/vue3/src/locales/hy.json @@ -8,6 +8,11 @@ "Add_to_Plan": "Ավելացնել պլանին", "Add_to_Shopping": "Ավելացնել գնումներին", "Advanced Search Settings": "Ընդլայնված փնտրման կարգավորումներ", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Apply": "", "Automate": "Ավտոմատացնել", "BatchDeleteConfirm": "", @@ -22,11 +27,13 @@ "Categories": "", "Category": "", "Close": "", + "ConvertUsingAI": "", "Copy": "", "Create": "Ստեղծել", "Create_New_Food": "Ավելացնել նոր սննդամթերք", "Create_New_Keyword": "Ավելացնել նոր բանալի բառ", "Create_New_Shopping Category": "Ստեղծել գնումների նոր կատեգորիա", + "Credits": "", "DELETE_ERROR": "", "Date": "", "Delete": "", @@ -55,6 +62,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "Hide_Food": "Թաքցնել սննդամթերքը", "Hide_Keywords": "Թաքցնել բանալի բառը", "Hide_Recipes": "Թաքցնել բաղադրատոմսերը", @@ -69,6 +78,8 @@ "Keywords": "", "Link": "", "Load_More": "", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Գրանցել եփելը", "Log_Recipe_Cooking": "Գրանցել բաղադրատոմսի օգտագործում", "ManageSubscription": "", @@ -78,6 +89,7 @@ "MergeAutomateHelp": "", "Merge_Keyword": "Միացնել բանալի բառը", "MissingProperties": "", + "MonthlyCreditsUsed": "", "Move": "Տեղափոխել", "Move_Food": "Տեղափոխել սննդամթերքը", "Move_Keyword": "Տեղափոխել բանալի բառը", diff --git a/vue3/src/locales/id.json b/vue3/src/locales/id.json index 2ea45bcf6..86f220f19 100644 --- a/vue3/src/locales/id.json +++ b/vue3/src/locales/id.json @@ -16,6 +16,11 @@ "Added_by": "", "Added_on": "", "Advanced": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "App": "", "Apply": "", "Are_You_Sure": "", @@ -48,6 +53,7 @@ "Coming_Soon": "", "Comments_setting": "", "Completed": "", + "ConvertUsingAI": "", "Copy": "Salin", "Copy Link": "Salin Tautan", "Copy Token": "Salin Token", @@ -63,6 +69,7 @@ "Create_New_Shopping Category": "", "Create_New_Shopping_Category": "", "Create_New_Unit": "", + "Credits": "", "Current_Period": "", "Custom Filter": "", "DELETE_ERROR": "", @@ -118,6 +125,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "", "Hide_Food": "", "Hide_Keyword": "", @@ -164,6 +173,8 @@ "Last_name": "", "Link": "Link", "Load_More": "Muat lebih banyak", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Log Memasak", "Log_Recipe_Cooking": "Log Resep Memasak", "Make_Header": "Buat Header", @@ -182,6 +193,7 @@ "Message": "", "MissingProperties": "", "Month": "", + "MonthlyCreditsUsed": "", "Move": "Bergerak", "MoveCategory": "", "Move_Down": "Pindahkan kebawah", diff --git a/vue3/src/locales/is.json b/vue3/src/locales/is.json index ed22201bb..f6cf1390c 100644 --- a/vue3/src/locales/is.json +++ b/vue3/src/locales/is.json @@ -16,6 +16,11 @@ "Added_by": "", "Added_on": "", "Advanced": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "", "Amount": "", "App": "", @@ -57,6 +62,7 @@ "Comments_setting": "", "Completed": "", "Conversion": "", + "ConvertUsingAI": "", "Copy": "", "Copy Link": "", "Copy Token": "", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "", "Create_New_Unit": "", "Created": "", + "Credits": "", "Current_Period": "", "Custom Filter": "", "CustomImageHelp": "", @@ -146,6 +153,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "", "Hide_Food": "", "Hide_Keyword": "", @@ -196,6 +205,8 @@ "Learn_More": "", "Link": "", "Load_More": "", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "", "Log_Recipe_Cooking": "", "Logo": "", @@ -215,6 +226,7 @@ "Message": "", "MissingProperties": "", "Month": "", + "MonthlyCreditsUsed": "", "Move": "", "MoveCategory": "", "Move_Down": "", diff --git a/vue3/src/locales/it.json b/vue3/src/locales/it.json index 597c6a6bd..416c7e56c 100644 --- a/vue3/src/locales/it.json +++ b/vue3/src/locales/it.json @@ -27,6 +27,11 @@ "Admin": "Amministratore", "Advanced": "Avanzate", "Advanced Search Settings": "Impostazioni avanzate di ricerca", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Allineamento", "AllRecipes": "Tutte le ricette", "Amount": "Quantità", @@ -88,6 +93,7 @@ "Continue": "Continua", "Conversion": "Conversione", "ConversionsHelp": "Con le conversioni è possibile calcolare la quantità di un alimento in diverse unità. Attualmente, questo metodo viene utilizzato solo per il calcolo delle proprietà, ma in futuro potrebbe essere utilizzato anche in altre parti del tandoor. ", + "ConvertUsingAI": "", "CookLog": "Registro di cucina", "CookLogHelp": "Le voci nel registro di cucina per le ricette. ", "Cooked": "Cucinati", @@ -110,6 +116,7 @@ "Create_New_Unit": "Aggiungi nuova unità", "Created": "Creata", "CreatedBy": "Creata da", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Periodo attuale", "Custom Filter": "Filtro personalizzato", @@ -208,6 +215,8 @@ "Fuzzy": "Fuzzy", "FuzzySearchHelp": "Utilizza la ricerca fuzzy per trovare voci anche quando ci sono differenze nel modo in cui la parola è scritta.", "GettingStarted": "Iniziamo", + "Global": "", + "GlobalHelp": "", "GroupBy": "Raggruppa per", "HeaderWarning": "Attenzione: la modifica in un'intestazione elimina l'importo/unità/alimento", "Headline": "Intestazione", @@ -275,6 +284,8 @@ "Link": "Collegamento", "Load": "Carica", "Load_More": "Carica altro", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Registro ricette cucinate", "Log_Recipe_Cooking": "Aggiungi a ricette cucinate", "Logo": "Logo", @@ -303,6 +314,7 @@ "ModelSelectResultsHelp": "Cerca altri risultati", "Monday": "Lunedì", "Month": "Mese", + "MonthlyCreditsUsed": "", "More": "Altro", "Move": "Sposta", "MoveCategory": "Sposta in: ", diff --git a/vue3/src/locales/lt.json b/vue3/src/locales/lt.json index 0035e37a3..19fb30cdc 100644 --- a/vue3/src/locales/lt.json +++ b/vue3/src/locales/lt.json @@ -16,6 +16,11 @@ "Added_by": "", "Added_on": "", "Advanced": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "", "Amount": "Suma", "App": "", @@ -56,6 +61,7 @@ "Comments_setting": "", "Completed": "", "Conversion": "", + "ConvertUsingAI": "", "Copy": "", "Copy Link": "", "Copy Token": "", @@ -72,6 +78,7 @@ "Create_New_Shopping Category": "", "Create_New_Shopping_Category": "", "Create_New_Unit": "", + "Credits": "", "Current_Period": "", "Custom Filter": "", "DELETE_ERROR": "", @@ -132,6 +139,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "", "Hide_Food": "", "Hide_Keyword": "", @@ -181,6 +190,8 @@ "Learn_More": "", "Link": "", "Load_More": "Įkelti daugiau", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Užregistruoti patiekalo gaminimą", "Log_Recipe_Cooking": "Užregistruoti recepto pagaminimą", "Make_Header": "Padaryti antraštę", @@ -199,6 +210,7 @@ "Message": "", "MissingProperties": "", "Month": "", + "MonthlyCreditsUsed": "", "Move": "", "MoveCategory": "", "Move_Down": "Nuleisti žemyn", diff --git a/vue3/src/locales/lv.json b/vue3/src/locales/lv.json index 7c057c93c..2c3da36f8 100644 --- a/vue3/src/locales/lv.json +++ b/vue3/src/locales/lv.json @@ -16,6 +16,11 @@ "Added_by": "", "Added_on": "", "Advanced": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "", "Amount": "", "App": "", @@ -57,6 +62,7 @@ "Comments_setting": "", "Completed": "", "Conversion": "", + "ConvertUsingAI": "", "Copy": "", "Copy Link": "", "Copy Token": "", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "", "Create_New_Unit": "", "Created": "", + "Credits": "", "Current_Period": "", "Custom Filter": "", "CustomImageHelp": "", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "", "Hide_Food": "", "Hide_Keyword": "", @@ -197,6 +206,8 @@ "Learn_More": "", "Link": "", "Load_More": "", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "", "Log_Recipe_Cooking": "", "Logo": "", @@ -216,6 +227,7 @@ "Message": "", "MissingProperties": "", "Month": "", + "MonthlyCreditsUsed": "", "Move": "", "MoveCategory": "", "Move_Down": "", diff --git a/vue3/src/locales/nb_NO.json b/vue3/src/locales/nb_NO.json index 09b09217c..cb14f5c64 100644 --- a/vue3/src/locales/nb_NO.json +++ b/vue3/src/locales/nb_NO.json @@ -16,6 +16,11 @@ "Added_by": "Lagt til av", "Added_on": "Lagt til", "Advanced": "Avansert", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Justering", "Amount": "Mengde", "App": "App", @@ -55,6 +60,7 @@ "Comments_setting": "", "Completed": "Fullført", "Conversion": "Omregn enhet", + "ConvertUsingAI": "", "Copy": "Kopier", "Copy Link": "Kopier lenke", "Copy Token": "Kopier Token", @@ -71,6 +77,7 @@ "Create_New_Shopping Category": "Opprett ny handle kategori", "Create_New_Shopping_Category": "Opprett new handle kategori", "Create_New_Unit": "Opprett ny enhet", + "Credits": "", "Current_Period": "Gjeldende periode", "Custom Filter": "Egendefinert Filter", "CustomImageHelp": "Last opp et bilde for å vise \"space\"-oversikten.", @@ -138,6 +145,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Grupér", "Hide_Food": "Skjul Matrett", "Hide_Keyword": "Skjul nøkkelord", @@ -188,6 +197,8 @@ "Learn_More": "Lær mer", "Link": "Lenke", "Load_More": "Last inn flere", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Loggfør tilbereding", "Log_Recipe_Cooking": "Logg oppskriftsbruk", "Make_Header": "Bruk som overskrift", @@ -206,6 +217,7 @@ "Message": "Melding", "MissingProperties": "", "Month": "Måned", + "MonthlyCreditsUsed": "", "Move": "Flytt", "MoveCategory": "Flytt til: ", "Move_Down": "Flytt ned", diff --git a/vue3/src/locales/nl.json b/vue3/src/locales/nl.json index 4efe76835..11d1f19cd 100644 --- a/vue3/src/locales/nl.json +++ b/vue3/src/locales/nl.json @@ -28,6 +28,11 @@ "Admin": "Beheer", "Advanced": "Geavanceerd", "Advanced Search Settings": "Geavanceerde zoekinstellingen", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Afstemming", "AllRecipes": "Alle recepten", "Amount": "Hoeveelheid", @@ -89,6 +94,7 @@ "Continue": "Doorgaan", "Conversion": "Omrekening", "ConversionsHelp": "Met omrekeningen kun je de hoeveelheid van een ingrediënt in verschillende eenheden berekenen. Momenteel wordt dit alleen gebruikt voor het berekenen van eigenschappen, later kan het ook in andere onderdelen van Tandoor gebruikt worden. ", + "ConvertUsingAI": "", "CookLog": "Kooklogboek", "CookLogHelp": "Items in het kooklogboek voor recepten. ", "Cooked": "Gekookt", @@ -111,6 +117,7 @@ "Create_New_Unit": "Voeg nieuwe eenheid toe", "Created": "Gemaakt", "CreatedBy": "Gemaakt door", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Huidige periode", "Custom Filter": "Aangepast filter", @@ -209,6 +216,8 @@ "Fuzzy": "Fuzzy", "FuzzySearchHelp": "Gebruik fuzzy search om items te vinden, zelfs als het woord anders is gespeld.", "GettingStarted": "Aan de slag", + "Global": "", + "GlobalHelp": "", "GroupBy": "Groepeer per", "HeaderWarning": "Waarschuwing: Het wijzigen naar een kop verwijdert de hoeveelheid/eenheid/voedingsmiddel", "Headline": "Koptekst", @@ -276,6 +285,8 @@ "Link": "Link", "Load": "Laden", "Load_More": "Laad meer", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Registreer bereiding", "Log_Recipe_Cooking": "Bereiding registreren", "Logo": "Logo", @@ -304,6 +315,7 @@ "ModelSelectResultsHelp": "Zoek naar meer resultaten", "Monday": "Maandag", "Month": "Maand", + "MonthlyCreditsUsed": "", "More": "Meer", "Move": "Verplaats", "MoveCategory": "Verplaats naar: ", diff --git a/vue3/src/locales/pl.json b/vue3/src/locales/pl.json index 8af031444..df842c3be 100644 --- a/vue3/src/locales/pl.json +++ b/vue3/src/locales/pl.json @@ -25,6 +25,11 @@ "Admin": "Administator", "Advanced": "Zaawansowany", "Advanced Search Settings": "Ustawienia zaawansowanego wyszukiwania", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Wyrównanie", "AllRecipes": "Wszystkie przepisy", "Amount": "Ilość", @@ -83,6 +88,7 @@ "Confirm": "Potwierdź", "Continue": "Kontynuuj", "Conversion": "Konwersja", + "ConvertUsingAI": "", "Copy": "Kopiuj", "Copy Link": "Skopiuj link", "Copy Token": "Kopiuj Token", @@ -100,6 +106,7 @@ "Create_New_Shopping_Category": "Dodaj nową kategorię zakupów", "Create_New_Unit": "Dodaj nowa jednostkę", "Created": "Utworzony", + "Credits": "", "Current_Period": "Bieżący okres", "Custom Filter": "Filtr niestandardowy", "CustomImageHelp": "Prześlij obraz, który będzie wyświetlany w przeglądzie przestrzeni.", @@ -173,6 +180,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Grupuj według", "Hide_Food": "Ukryj żywność", "Hide_Keyword": "Ukryj słowa kluczowe", @@ -223,6 +232,8 @@ "Learn_More": "Dowiedz się więcej", "Link": "Link", "Load_More": "Załaduj więcej", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Zanotuj ugotowanie", "Log_Recipe_Cooking": "Zaloguj gotowanie przepisu", "Logo": "Logo", @@ -242,6 +253,7 @@ "Message": "Wiadomość", "MissingProperties": "", "Month": "Miesiąc", + "MonthlyCreditsUsed": "", "Move": "Przenieś", "MoveCategory": "Przenieś do: ", "Move_Down": "Przesunąć w dół", diff --git a/vue3/src/locales/pt.json b/vue3/src/locales/pt.json index b37524024..b90508f44 100644 --- a/vue3/src/locales/pt.json +++ b/vue3/src/locales/pt.json @@ -14,6 +14,11 @@ "Added_by": "Adicionado por", "Added_on": "Adicionado a", "Advanced": "Avançado", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Alinhamento", "Amount": "Quantidade", "Apply": "", @@ -46,6 +51,7 @@ "Coming_Soon": "", "Completed": "Completo", "Conversion": "Conversão", + "ConvertUsingAI": "", "Copy": "Copiar", "Copy Link": "Copiar Ligação", "Copy Token": "Copiar Chave", @@ -60,6 +66,7 @@ "Create_New_Shopping Category": "Criar nova categoria de Compras", "Create_New_Shopping_Category": "Adicionar nova categoria de compras", "Create_New_Unit": "Adicionar nova unidade", + "Credits": "", "Current_Period": "Período atual", "Custom Filter": "", "CustomImageHelp": "Fazer upload de uma image para mostrar na visão geral do espaço.", @@ -118,6 +125,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Agrupar por", "Hide_Food": "Esconder comida", "Hide_Keyword": "", @@ -155,6 +164,8 @@ "Learn_More": "Aprenda mais", "Link": "Ligação", "Load_More": "Carregar Mais", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Registrar Culinária", "Log_Recipe_Cooking": "Registrar Receitas de Culinária", "Make_Header": "Tornar cabeçalho", @@ -171,6 +182,7 @@ "Merge_Keyword": "Unir palavra-chave", "MissingProperties": "", "Month": "Mês", + "MonthlyCreditsUsed": "", "Move": "Mover", "MoveCategory": "Mover para: ", "Move_Down": "Mover para baixo", diff --git a/vue3/src/locales/pt_BR.json b/vue3/src/locales/pt_BR.json index 7a064bb96..bea72c7cd 100644 --- a/vue3/src/locales/pt_BR.json +++ b/vue3/src/locales/pt_BR.json @@ -26,6 +26,11 @@ "Added_on": "Incluído Em", "Admin": "Administrador", "Advanced": "Avançado", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Alinhamento", "AllRecipes": "Todas Receitas", "Amount": "Quantidade", @@ -87,6 +92,7 @@ "Continue": "Continuar", "Conversion": "Conversão", "ConversionsHelp": "Com conversões, você pode calcular a quantidade de um alimento em diferentes unidades. Atualmente, isso é usado apenas para cálculo de propriedades, posteriormente poderá ser usado em outras partes do Tandoor. ", + "ConvertUsingAI": "", "CookLog": "Registro de cozimento", "CookLogHelp": "Entradas no registro de cozimento para receitas. ", "Cooked": "Cozido", @@ -109,6 +115,7 @@ "Create_New_Unit": "Incluir Nova Unidade", "Created": "Criado", "CreatedBy": "Criado por", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Período Atual", "Custom Filter": "Filtro Customizado", @@ -207,6 +214,8 @@ "Fuzzy": "Fuzzy", "FuzzySearchHelp": "Use pesquisa fuzzy para encontrar registros mesmo quando existem diferenças na grafia das palavras utilizadas.", "GettingStarted": "Começando", + "Global": "", + "GlobalHelp": "", "GroupBy": "Agrupar Por", "HeaderWarning": "Alerta: Mudanças de Cabeçalho apagam a Quantidade/Unidade/Alimento", "Headline": "Título", @@ -274,6 +283,8 @@ "Link": "Link", "Load": "Carregar", "Load_More": "Carregar mais", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Registro de Cozinha", "Log_Recipe_Cooking": "Registrar receitas feitas", "Logo": "Logotipo", @@ -296,6 +307,7 @@ "Message": "Mensagem", "MissingProperties": "", "Month": "Mês", + "MonthlyCreditsUsed": "", "Move": "Mover", "MoveCategory": "Mover Para: ", "Move_Down": "Mover para baixo", diff --git a/vue3/src/locales/ro.json b/vue3/src/locales/ro.json index 6047f05f4..c8eb2358a 100644 --- a/vue3/src/locales/ro.json +++ b/vue3/src/locales/ro.json @@ -17,6 +17,11 @@ "Added_on": "Adăugat la", "Advanced": "Avansat", "Advanced Search Settings": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Amount": "Cantitate", "App": "Aplicație", "Apply": "", @@ -53,6 +58,7 @@ "Coming_Soon": "În curând", "Comments_setting": "Afișează comentarii", "Completed": "Completat", + "ConvertUsingAI": "", "Copy": "Copie", "Copy Link": "Copiere link", "Copy Token": "Copiere token", @@ -69,6 +75,7 @@ "Create_New_Shopping Category": "Creați o nouă categorie de cumpărături", "Create_New_Shopping_Category": "Adaugă categorie de cumpărături nouă", "Create_New_Unit": "Adaugă unitate nouă", + "Credits": "", "Current_Period": "Perioada curentă", "Custom Filter": "Filtru personalizat", "DELETE_ERROR": "", @@ -125,6 +132,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Grupat de", "Hide_Food": "Ascunde mâncare", "Hide_Keyword": "Ascunde cuvintele cheie", @@ -173,6 +182,8 @@ "Last_name": "Nume de familie", "Link": "Link", "Load_More": "Încărcați mai mult", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Jurnal de pregătire", "Log_Recipe_Cooking": "Jurnalul rețetelor de pregătire", "Make_Header": "Creare antet", @@ -191,6 +202,7 @@ "Message": "Mesaj", "MissingProperties": "", "Month": "Lună", + "MonthlyCreditsUsed": "", "Move": "Mută", "MoveCategory": "Mută la: ", "Move_Down": "Deplasați-vă în jos", diff --git a/vue3/src/locales/ru.json b/vue3/src/locales/ru.json index 73595d283..77ce89eba 100644 --- a/vue3/src/locales/ru.json +++ b/vue3/src/locales/ru.json @@ -27,6 +27,11 @@ "Admin": "Админ", "Advanced": "Расширенный", "Advanced Search Settings": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Выравнивание", "AllRecipes": "Все рецепты", "Amount": "Количество", @@ -88,6 +93,7 @@ "Continue": "Продолжить", "Conversion": "Преобразование", "ConversionsHelp": "С помощью преобразований вы можете рассчитывать количество продукта в разных единицах измерения. В настоящее время это используется только для расчёта свойств, но в будущем может применяться и в других частях Tandoor. ", + "ConvertUsingAI": "", "CookLog": "Журнал приготовления", "CookLogHelp": "История приготовлений по рецептам. ", "Cooked": "Приготовлено", @@ -110,6 +116,7 @@ "Create_New_Unit": "Добавить единицу измерения", "Created": "Создано", "CreatedBy": "Создано пользователем", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Текущий период", "Custom Filter": "Пользовательский фильтр", @@ -208,6 +215,8 @@ "Fuzzy": "Нечёткий", "FuzzySearchHelp": "Нечёткий поиск позволяет находить записи, даже если в написании есть ошибки или отличия.", "GettingStarted": "Начало работы", + "Global": "", + "GlobalHelp": "", "GroupBy": "Сгруппировать по", "HeaderWarning": "Внимание: при преобразовании в заголовок удаляются данные о количестве, единице/измерения/продукте.", "Headline": "Заголовок", @@ -275,6 +284,8 @@ "Link": "Гиперссылка", "Load": "Загрузить", "Load_More": "Загрузить еще", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Журнал приготовления", "Log_Recipe_Cooking": "Журнал приготовления", "Logo": "Логотип", @@ -302,6 +313,7 @@ "ModelSelectResultsHelp": "Показать больше результатов", "Monday": "Понедельник", "Month": "Месяц", + "MonthlyCreditsUsed": "", "More": "Ещё", "Move": "Переместить", "MoveCategory": "Переместить в: ", diff --git a/vue3/src/locales/sl.json b/vue3/src/locales/sl.json index d47cfb6c3..8effaf7a2 100644 --- a/vue3/src/locales/sl.json +++ b/vue3/src/locales/sl.json @@ -27,6 +27,11 @@ "Admin": "Skrbnik", "Advanced": "Napredno", "Advanced Search Settings": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Poravnava", "AllRecipes": "Vsi recepti", "Amount": "Količina", @@ -88,6 +93,7 @@ "Continue": "Nadaljuj", "Conversion": "Pogovor", "ConversionsHelp": "S pretvorbami lahko izračunate količino živila v različnih enotah. Trenutno se to uporablja le za izračun lastnosti, kasneje pa se lahko uporabi tudi v drugih delih Tandoorja. ", + "ConvertUsingAI": "", "CookLog": "Kuharski dnevnik", "CookLogHelp": "Vnosi v dnevnik kuhanja za recepte. ", "Cooked": "Kuhano", @@ -110,6 +116,7 @@ "Create_New_Unit": "Dodaj novo enoto", "Created": "Ustvarjeno", "CreatedBy": "Ustvaril/a", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Trenutno obdobje", "Custom Filter": "Filter po meri", @@ -208,6 +215,8 @@ "Fuzzy": "Nejasno", "FuzzySearchHelp": "Uporabite mehko iskanje za iskanje vnosov, tudi če obstajajo razlike v načinu pisanja besede.", "GettingStarted": "Začetek", + "Global": "", + "GlobalHelp": "", "GroupBy": "Združi po", "HeaderWarning": "Opozorilo: Sprememba naslova izbriše količino/enoto/hrano", "Headline": "Glavni naslov", @@ -275,6 +284,8 @@ "Link": "Hiperpovezava", "Load": "Naloži", "Load_More": "Naloži več", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Zgodovina kuhanja", "Log_Recipe_Cooking": "Beleži kuharski recept", "Logo": "Logotip", @@ -303,6 +314,7 @@ "ModelSelectResultsHelp": "Išči več rezultatov", "Monday": "Ponedeljek", "Month": "Mesec", + "MonthlyCreditsUsed": "", "More": "Več", "Move": "Premakni", "MoveCategory": "Premakni v: ", diff --git a/vue3/src/locales/sv.json b/vue3/src/locales/sv.json index 8d14f9a43..1de5b68d0 100644 --- a/vue3/src/locales/sv.json +++ b/vue3/src/locales/sv.json @@ -26,6 +26,11 @@ "Added_on": "Tillagd på", "Admin": "Administratör", "Advanced": "Avancerat", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Orientering", "AllRecipes": "Alla recept", "Amount": "Mängd", @@ -87,6 +92,7 @@ "Continue": "Fortsätt", "Conversion": "Omvandling", "ConversionsHelp": "Med omvandlingar kan du beräkna mängden av ett livsmedel i olika enheter. För närvarande används detta endast för egenskapsberäkning, senare kan det även användas i andra delar av Tandoor. ", + "ConvertUsingAI": "", "CookLog": "Tillagningslogg", "CookLogHelp": "Poster i tillagningsloggen för recept. ", "Cooked": "Tillagad", @@ -109,6 +115,7 @@ "Create_New_Unit": "Lägg till enhet", "Created": "Skapad", "CreatedBy": "Skapad av", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "Nuvarande period", "Custom Filter": "Anpassat filter", @@ -184,6 +191,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Gruppera enligt", "Hide_Food": "Dölj livsmedel", "Hide_Keyword": "Dölj nyckelord", @@ -234,6 +243,8 @@ "Learn_More": "Läs mer", "Link": "Länk", "Load_More": "Ladda mer", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Logga tillagning", "Log_Recipe_Cooking": "Logga tillagningen av receptet", "Logo": "Logga", @@ -253,6 +264,7 @@ "Message": "Meddelande", "MissingProperties": "", "Month": "Månad", + "MonthlyCreditsUsed": "", "Move": "Flytta", "MoveCategory": "Flytta till: ", "Move_Down": "Flytta ned", diff --git a/vue3/src/locales/tr.json b/vue3/src/locales/tr.json index 10f6e7bf0..a7d0c5154 100644 --- a/vue3/src/locales/tr.json +++ b/vue3/src/locales/tr.json @@ -16,6 +16,11 @@ "Added_by": "Ekleyen", "Added_on": "Eklenme Zamanı", "Advanced": "Gelişmiş", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Hizalama", "Amount": "Miktar", "App": "Uygulama", @@ -57,6 +62,7 @@ "Comments_setting": "Yorumları Göster", "Completed": "Tamamlandı", "Conversion": "Dönüşüm", + "ConvertUsingAI": "", "Copy": "Kopyala", "Copy Link": "Bağlantıyı Kopyala", "Copy Token": "Anahtarı Kopyala", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "Yeni Alışveriş Kategorisi Ekle", "Create_New_Unit": "Yeni Birim Ekle", "Created": "Oluşturuldu", + "Credits": "", "Current_Period": "Mevcut Dönem", "Custom Filter": "Özel Filtre", "CustomImageHelp": "Alan genel bakışında gösterilecek bir resim yükleyin.", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "Gruplandırma Ölçütü", "Hide_Food": "Yiyeceği Gizle", "Hide_Keyword": "Anahtar kelimeleri gizle", @@ -197,6 +206,8 @@ "Learn_More": "Daha Fazla", "Link": "Bağlantı", "Load_More": "Daha Fazla Yükle", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Günlük Pişirme", "Log_Recipe_Cooking": "Günlük Tarif Pişirme", "Logo": "Logo", @@ -216,6 +227,7 @@ "Message": "Mesaj", "MissingProperties": "", "Month": "Ay", + "MonthlyCreditsUsed": "", "Move": "Taşı", "MoveCategory": "Taşı: ", "Move_Down": "Aşağıya Taşı", diff --git a/vue3/src/locales/uk.json b/vue3/src/locales/uk.json index afe342a82..c4355b18b 100644 --- a/vue3/src/locales/uk.json +++ b/vue3/src/locales/uk.json @@ -14,6 +14,11 @@ "Added_by": "Додано", "Added_on": "Додано На", "Advanced": "", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "Вирівнювання", "Amount": "Кількість", "App": "", @@ -50,6 +55,7 @@ "Coming_Soon": "", "Completed": "Виконано", "Conversion": "Конвертування", + "ConvertUsingAI": "", "Copy": "Копіювати", "Copy Link": "Скопіювати Посилання", "Copy Token": "Скопіювати Токен", @@ -64,6 +70,7 @@ "Create_New_Shopping Category": "Створити Нову Категорію Покупок", "Create_New_Shopping_Category": "Додати Нову Категорію Покупок", "Create_New_Unit": "Додати Нову Одиницю", + "Credits": "", "Current_Period": "Теперішній Період", "Custom Filter": "", "CustomImageHelp": "Завантажте зображення що буде показуватись у огляді простору.", @@ -128,6 +135,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "По Групі", "Hide_Food": "Сховати Їжу", "Hide_Keyword": "", @@ -172,6 +181,8 @@ "Learn_More": "Дізнатися Більше", "Link": "Посилання", "Load_More": "Завантажити більше", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "Занотувати приготування", "Log_Recipe_Cooking": "Журнал приготування", "Make_Header": "Створити Заголовок", @@ -188,6 +199,7 @@ "Merge_Keyword": "Об'єднати Ключове слово", "MissingProperties": "", "Month": "Місяць", + "MonthlyCreditsUsed": "", "Move": "Перемістити", "MoveCategory": "Перемістити До: ", "Move_Down": "Перемістити вниз", diff --git a/vue3/src/locales/zh_Hans.json b/vue3/src/locales/zh_Hans.json index 6d95955d7..bee29c59e 100644 --- a/vue3/src/locales/zh_Hans.json +++ b/vue3/src/locales/zh_Hans.json @@ -16,6 +16,11 @@ "Added_by": "添加者", "Added_on": "添加到", "Advanced": "高级", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "校准", "Amount": "数量", "App": "应用", @@ -57,6 +62,7 @@ "Comments_setting": "显示评论", "Completed": "完成", "Conversion": "转换", + "ConvertUsingAI": "", "Copy": "复制", "Copy Link": "复制链接", "Copy Token": "复制令牌", @@ -74,6 +80,7 @@ "Create_New_Shopping_Category": "添加新的购物类别", "Create_New_Unit": "添加新的单位", "Created": "已创建", + "Credits": "", "Current_Period": "本期", "Custom Filter": "自定义筛选器", "CustomImageHelp": "上传图片以在空间概览中显示。", @@ -147,6 +154,8 @@ "FulltextHelp": "", "Fuzzy": "", "FuzzySearchHelp": "", + "Global": "", + "GlobalHelp": "", "GroupBy": "分组", "Hide_Food": "隐藏食物", "Hide_Keyword": "隐藏关键词", @@ -197,6 +206,8 @@ "Learn_More": "了解更多", "Link": "链接", "Load_More": "加载更多", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "烹饪记录", "Log_Recipe_Cooking": "食谱烹饪记录", "Logo": "徽标", @@ -216,6 +227,7 @@ "Message": "信息", "MissingProperties": "", "Month": "月份", + "MonthlyCreditsUsed": "", "Move": "移动", "MoveCategory": "移动到: ", "Move_Down": "下移", diff --git a/vue3/src/locales/zh_Hant.json b/vue3/src/locales/zh_Hant.json index 5dc48b21d..75d11accb 100644 --- a/vue3/src/locales/zh_Hant.json +++ b/vue3/src/locales/zh_Hant.json @@ -26,6 +26,11 @@ "Added_on": "添加於", "Admin": "管理者", "Advanced": "高級", + "AiLog": "", + "AiLogHelp": "", + "AiModelHelp": "", + "AiProvider": "", + "AiProviderHelp": "", "Alignment": "對齊", "AllRecipes": "所有食譜", "Amount": "數量", @@ -87,6 +92,7 @@ "Continue": "繼續", "Conversion": "轉換", "ConversionsHelp": "透過轉換功能,您可以計算食物在不同單位下的數量。目前這僅用於屬性計算,未來也可能用於 Tandoor 的其他部分。 ", + "ConvertUsingAI": "", "CookLog": "烹飪記錄", "CookLogHelp": "食譜的烹飪記錄條目。 ", "Cooked": "已烹飪", @@ -109,6 +115,7 @@ "Create_New_Unit": "建立新單位", "Created": "建立", "CreatedBy": "建立者", + "Credits": "", "Ctrl+K": "Ctrl+K", "Current_Period": "當前期間", "Custom Filter": "自定義篩選器", @@ -207,6 +214,8 @@ "Fuzzy": "模糊", "FuzzySearchHelp": "使用模糊搜索來查找條目,即使單詞的寫法存在差異。", "GettingStarted": "開始使用", + "Global": "", + "GlobalHelp": "", "GroupBy": "分組依據", "HeaderWarning": "警告:變更為標題會刪除數量/單位/食物", "Headline": "標題", @@ -274,6 +283,8 @@ "Link": "連結", "Load": "載入", "Load_More": "載入更多", + "LogCredits": "", + "LogCreditsHelp": "", "Log_Cooking": "記錄烹飪", "Log_Recipe_Cooking": "記錄食譜烹飪", "Logo": "標誌", @@ -302,6 +313,7 @@ "ModelSelectResultsHelp": "搜尋更多結果", "Monday": "星期一", "Month": "月", + "MonthlyCreditsUsed": "", "More": "更多", "Move": "移動", "MoveCategory": "移動至: ", diff --git a/vue3/src/openapi/apis/ApiApi.ts b/vue3/src/openapi/apis/ApiApi.ts index d9e526ff1..328adbb98 100644 --- a/vue3/src/openapi/apis/ApiApi.ts +++ b/vue3/src/openapi/apis/ApiApi.ts @@ -537,6 +537,7 @@ export interface ApiAccessTokenUpdateRequest { } export interface ApiAiImportCreateRequest { + aiProviderId: number; file: string | null; text: string | null; recipeId: string | null; @@ -1034,6 +1035,7 @@ export interface ApiGroupRetrieveRequest { } export interface ApiImportCreateRequest { + aiProviderId: number; file: string | null; text: string | null; recipeId: string | null; @@ -2420,6 +2422,13 @@ export class ApiApi extends runtime.BaseAPI { * given an image or PDF file convert its content to a structured recipe using AI and the scraping system */ async apiAiImportCreateRaw(requestParameters: ApiAiImportCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['aiProviderId'] == null) { + throw new runtime.RequiredError( + 'aiProviderId', + 'Required parameter "aiProviderId" was null or undefined when calling apiAiImportCreate().' + ); + } + if (requestParameters['file'] == null) { throw new runtime.RequiredError( 'file', @@ -2463,6 +2472,10 @@ export class ApiApi extends runtime.BaseAPI { formParams = new URLSearchParams(); } + if (requestParameters['aiProviderId'] != null) { + formParams.append('ai_provider_id', requestParameters['aiProviderId'] as any); + } + if (requestParameters['file'] != null) { formParams.append('file', requestParameters['file'] as any); } @@ -6616,6 +6629,13 @@ export class ApiApi extends runtime.BaseAPI { /** */ async apiImportCreateRaw(requestParameters: ApiImportCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['aiProviderId'] == null) { + throw new runtime.RequiredError( + 'aiProviderId', + 'Required parameter "aiProviderId" was null or undefined when calling apiImportCreate().' + ); + } + if (requestParameters['file'] == null) { throw new runtime.RequiredError( 'file', @@ -6659,6 +6679,10 @@ export class ApiApi extends runtime.BaseAPI { formParams = new URLSearchParams(); } + if (requestParameters['aiProviderId'] != null) { + formParams.append('ai_provider_id', requestParameters['aiProviderId'] as any); + } + if (requestParameters['file'] != null) { formParams.append('file', requestParameters['file'] as any); } diff --git a/vue3/src/openapi/models/AiProvider.ts b/vue3/src/openapi/models/AiProvider.ts index bb4d01ecf..1818b7b5b 100644 --- a/vue3/src/openapi/models/AiProvider.ts +++ b/vue3/src/openapi/models/AiProvider.ts @@ -55,6 +55,12 @@ export interface AiProvider { * @memberof AiProvider */ url?: string; + /** + * + * @type {boolean} + * @memberof AiProvider + */ + logCreditCost?: boolean; /** * * @type {number} @@ -103,6 +109,7 @@ export function AiProviderFromJSONTyped(json: any, ignoreDiscriminator: boolean) 'apiKey': json['api_key'], 'modelName': json['model_name'], 'url': json['url'] == null ? undefined : json['url'], + 'logCreditCost': json['log_credit_cost'] == null ? undefined : json['log_credit_cost'], 'space': json['space'] == null ? undefined : json['space'], 'createdAt': (new Date(json['created_at'])), 'updatedAt': (new Date(json['updated_at'])), @@ -121,6 +128,7 @@ export function AiProviderToJSON(value?: Omit - - -

{{ $t('Ai') }}

-
-
- - - - + + + {{ $t('ImportAll') }} + + + {{$t('MonthlyCreditsUsed')}} ({{ useUserPreferenceStore().activeSpace.aiMonthlyCreditsUsed }} / {{ useUserPreferenceStore().activeSpace.aiCreditsMonthly }}) + + diff --git a/vue3/src/types/Models.ts b/vue3/src/types/Models.ts index 37bbc2e45..ed139cb92 100644 --- a/vue3/src/types/Models.ts +++ b/vue3/src/types/Models.ts @@ -831,8 +831,9 @@ export const TAiLog = { disableUpdate: true, tableHeaders: [ - {title: 'Name', key: 'function'}, + {title: 'Type', key: '_function'}, {title: 'AiProvider', key: 'aiProvider.name',}, + {title: 'Credits', key: 'creditCost',}, {title: 'CreatedAt', key: 'createdAt'}, {title: 'Actions', key: 'action', align: 'end'}, ]