diff --git a/GUI/src/components/MainNavigation/index.tsx b/GUI/src/components/MainNavigation/index.tsx index 2ae1c70..90dccb4 100644 --- a/GUI/src/components/MainNavigation/index.tsx +++ b/GUI/src/components/MainNavigation/index.tsx @@ -19,19 +19,19 @@ const MainNavigation: FC = () => { const items = [ { id: 'userManagement', - label: 'User Management', + label: t('menu.userManagement'), path: '/user-management', icon: , }, { id: 'llmConnections', - label: 'LLM Connections', + label: t('menu.llmConnections'), path: '/llm-connections', icon: , }, { id: 'testLLM', - label: 'Test LLM', + label: t('menu.testLLM'), path: '/test-llm', icon: }, diff --git a/GUI/src/components/molecules/BudgetBanner/index.tsx b/GUI/src/components/molecules/BudgetBanner/index.tsx index 743900d..40703c4 100644 --- a/GUI/src/components/molecules/BudgetBanner/index.tsx +++ b/GUI/src/components/molecules/BudgetBanner/index.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { useQuery } from '@tanstack/react-query'; import { useNavigate } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; import { checkBudgetStatus, BudgetStatus } from 'services/llmConnections'; import { llmConnectionsQueryKeys } from 'utils/queryKeys'; import './BudgetBanner.scss'; @@ -8,6 +9,7 @@ import Button from 'components/Button'; import { MdOutlineGppMaybe, MdWarning } from 'react-icons/md'; const BudgetBanner: React.FC = () => { + const { t } = useTranslation(); const navigate = useNavigate(); const { data: budgetStatus } = useQuery({ queryKey: llmConnectionsQueryKeys.budgetStatus(), @@ -20,12 +22,14 @@ const BudgetBanner: React.FC = () => { const getBannerContent = (status: BudgetStatus) => { const { used_budget_percentage, exceeded_stop_budget, exceeded_warn_budget, data } = status; + const platformKey = data?.llmPlatform === "aws" ? "aws" : "azure"; + const platformName = t(`budgetBanner.platforms.${platformKey}`); if (exceeded_stop_budget) { return { type: 'error' as const, - message: `Production LLM connection disabled`, - description: `${data?.llmPlatform === "aws" ? "AWS Bedrock" : "Azure OpenAI"} integration has exceeded its budget. Update budget to reactivate LLM connection.`, + message: t('budgetBanner.productionDisabled'), + description: t('budgetBanner.budgetExceededDescription', { platform: platformName }), icon: }; } @@ -33,10 +37,12 @@ const BudgetBanner: React.FC = () => { if (exceeded_warn_budget) { return { type: 'warning' as const, - message: `${used_budget_percentage?.toFixed(1)}% of connection budget is used.`, - description: `${data?.llmPlatform === "aws" ? "AWS Bedrock" : "Azure OpenAI"} integration has used ${used_budget_percentage?.toFixed(1)}% of its budget. Review connection budget to avoid disconnections`, + message: t('budgetBanner.budgetUsageMessage', { percentage: used_budget_percentage?.toFixed(1) }), + description: t('budgetBanner.budgetUsageDescription', { + platform: platformName, + percentage: used_budget_percentage?.toFixed(1) + }), icon: - }; } @@ -65,11 +71,11 @@ const BudgetBanner: React.FC = () => { {budgetStatus.exceeded_warn_budget && !budgetStatus.exceeded_stop_budget ? ( ) : ( ) } diff --git a/GUI/src/components/molecules/LLMConnectionCard/index.tsx b/GUI/src/components/molecules/LLMConnectionCard/index.tsx index 8d843ff..48342e7 100644 --- a/GUI/src/components/molecules/LLMConnectionCard/index.tsx +++ b/GUI/src/components/molecules/LLMConnectionCard/index.tsx @@ -85,13 +85,13 @@ const LLMConnectionCard: FC> = ({ if (deploymentEnvironment === "testing") { return ( ); } else if (deploymentEnvironment === "production") { return ( ); } @@ -101,19 +101,19 @@ const LLMConnectionCard: FC> = ({ if (status === "within_budget") { return ( ); } else if (status === "over_budget") { return ( ); } else if (status === "close_to_exceed") { return ( ); } @@ -135,13 +135,13 @@ const LLMConnectionCard: FC> = ({
- {'Platform'}: + {t('dataModels.filters.platform')}: {platform ?? 'N/A'}
- {'Model'}: + {t('dataModels.filters.model')}: {model ?? 'N/A'}
@@ -156,7 +156,7 @@ const LLMConnectionCard: FC> = ({ size="s" onClick={() => navigate(`/view-llm-connection?id=${llmConnectionId}`)} > - {t('datasets.datasetCard.settings') ?? ''} + {t('dataModels.settings') ?? ''}
diff --git a/GUI/src/components/molecules/LLMConnectionForm/index.tsx b/GUI/src/components/molecules/LLMConnectionForm/index.tsx index a86e7bd..3662097 100644 --- a/GUI/src/components/molecules/LLMConnectionForm/index.tsx +++ b/GUI/src/components/molecules/LLMConnectionForm/index.tsx @@ -185,8 +185,8 @@ const embeddingModelOptions = toOptions(embeddingModelsData); }; const deploymentEnvironments = [ - { label: 'Testing', value: 'testing' }, - { label: 'Production', value: 'production' }, + { label: t('llmConnectionForm.environments.testing') || 'Testing', value: 'testing' }, + { label: t('llmConnectionForm.environments.production') || 'Production', value: 'production' }, ]; const renderPlatformSpecificFields = () => { @@ -195,17 +195,17 @@ const embeddingModelOptions = toOptions(embeddingModelsData); return ( <>
-

Access Key

-

AWS Access Key for Bedrock service

+

{t('llmConnectionForm.aws.accessKey.label') || 'Access Key'}

+

{t('llmConnectionForm.aws.accessKey.description') || 'AWS Access Key for Bedrock service'}

( )} />
-

Secret Key

-

AWS Secret Key for Bedrock service

+

{t('llmConnectionForm.aws.secretKey.label') || 'Secret Key'}

+

{t('llmConnectionForm.aws.secretKey.description') || 'AWS Secret Key for Bedrock service'}

( )} @@ -250,16 +250,16 @@ const embeddingModelOptions = toOptions(embeddingModelsData); return ( <>
-

Deployment Name

-

Azure OpenAI deployment name

+

{t('llmConnectionForm.azure.deploymentName.label') || 'Deployment Name'}

+

{t('llmConnectionForm.azure.deploymentName.description') || 'Azure OpenAI deployment name'}

( @@ -267,22 +267,22 @@ const embeddingModelOptions = toOptions(embeddingModelsData); />
-

Endpoint / Target URI

-

Azure OpenAI service endpoint URL

+

{t('llmConnectionForm.azure.targetUri.label') || 'Endpoint / Target URI'}

+

{t('llmConnectionForm.azure.targetUri.description') || 'Azure OpenAI service endpoint URL'}

( @@ -290,18 +290,18 @@ const embeddingModelOptions = toOptions(embeddingModelsData); />
-

API Key

-

Azure OpenAI API key

+

{t('llmConnectionForm.azure.apiKey.label') || 'API Key'}

+

{t('llmConnectionForm.azure.apiKey.description') || 'Azure OpenAI API key'}

( )} @@ -321,17 +321,17 @@ const embeddingModelOptions = toOptions(embeddingModelsData); default: return (
-

LLM API Key

-

The API key of the LLM model

+

{t('llmConnectionForm.generic.llmApiKey.label') || 'LLM API Key'}

+

{t('llmConnectionForm.generic.llmApiKey.description') || 'The API key of the LLM model'}

( @@ -348,17 +348,17 @@ const embeddingModelOptions = toOptions(embeddingModelsData); return ( <>
-

Embedding Access Key

-

AWS Access Key for Bedrock embedding service

+

{t('llmConnectionForm.aws.embeddingAccessKey.label') || 'Embedding Access Key'}

+

{t('llmConnectionForm.aws.embeddingAccessKey.description') || 'AWS Access Key for Bedrock embedding service'}

( )} />
-

Embedding Secret Key

-

AWS Secret Key for Bedrock embedding service

+

{t('llmConnectionForm.aws.embeddingSecretKey.label') || 'Embedding Secret Key'}

+

{t('llmConnectionForm.aws.embeddingSecretKey.description') || 'AWS Secret Key for Bedrock embedding service'}

( )} @@ -403,16 +403,16 @@ const embeddingModelOptions = toOptions(embeddingModelsData); return ( <>
-

Embedding Deployment Name

-

Azure OpenAI embedding deployment name

+

{t('llmConnectionForm.azure.embeddingDeploymentName.label') || 'Embedding Deployment Name'}

+

{t('llmConnectionForm.azure.embeddingDeploymentName.description') || 'Azure OpenAI embedding deployment name'}

( @@ -420,22 +420,22 @@ const embeddingModelOptions = toOptions(embeddingModelsData); />
-

Embedding Endpoint / Target URI

-

Azure OpenAI embedding service endpoint URL

+

{t('llmConnectionForm.azure.embeddingTargetUri.label') || 'Embedding Endpoint / Target URI'}

+

{t('llmConnectionForm.azure.embeddingTargetUri.description') || 'Azure OpenAI embedding service endpoint URL'}

( @@ -443,17 +443,17 @@ const embeddingModelOptions = toOptions(embeddingModelsData); />
-

Embedding API Key

-

Azure OpenAI embedding API key

+

{t('llmConnectionForm.azure.embeddingApiKey.label') || 'Embedding API Key'}

+

{t('llmConnectionForm.azure.embeddingApiKey.description') || 'Azure OpenAI embedding API key'}

( )} @@ -473,17 +473,17 @@ const embeddingModelOptions = toOptions(embeddingModelsData); default: return (
-

Embedding Model API Key

-

API key of your embedding model

+

{t('llmConnectionForm.generic.embeddingApiKey.label') || 'Embedding Model API Key'}

+

{t('llmConnectionForm.generic.embeddingApiKey.description') || 'API key of your embedding model'}

( )} @@ -515,19 +515,19 @@ const embeddingModelOptions = toOptions(embeddingModelsData);
-

LLM Configuration

+

{t('llmConnectionForm.sections.llmConfiguration') || 'LLM Configuration'}

-

Connection Name

-

A unique name to identify this LLM connection

+

{t('llmConnectionForm.fields.connectionName.label') || 'Connection Name'}

+

{t('llmConnectionForm.fields.connectionName.description') || 'A unique name to identify this LLM connection'}

(
-

LLM Platform

-

Cloud / local platform in which your model is hosted

+

{t('llmConnectionForm.fields.llmPlatform.label') || 'LLM Platform'}

+

{t('llmConnectionForm.fields.llmPlatform.description') || 'Cloud / local platform in which your model is hosted'}

( { field.onChange(selected?.value || ''); @@ -568,27 +568,27 @@ const embeddingModelOptions = toOptions(embeddingModelsData);
-

LLM Model

-

The LLM model that you want to use

+

{t('llmConnectionForm.fields.llmModel.label') || 'LLM Model'}

+

{t('llmConnectionForm.fields.llmModel.description') || 'The LLM model that you want to use'}

( { field.onChange(selected?.value || ''); @@ -605,28 +605,28 @@ const embeddingModelOptions = toOptions(embeddingModelsData);
-

Embedding Model Configuration

+

{t('llmConnectionForm.sections.embeddingConfiguration') || 'Embedding Model Configuration'}

-

Embedding Model Platform

-

This is the cloud / local platform in which your embedding model is hosted

+

{t('llmConnectionForm.fields.embeddingPlatform.label') || 'Embedding Model Platform'}

+

{t('llmConnectionForm.fields.embeddingPlatform.description') || 'This is the cloud / local platform in which your embedding model is hosted'}

( { field.onChange(selected?.value || ''); @@ -640,27 +640,27 @@ const embeddingModelOptions = toOptions(embeddingModelsData);
-

Embedding Model

-

The embedding model that will be used for searching your knowledge base

+

{t('llmConnectionForm.fields.embeddingModel.label') || 'Embedding Model'}

+

{t('llmConnectionForm.fields.embeddingModel.description') || 'The embedding model that will be used for searching your knowledge base'}

( { field.onChange(selected?.value || ''); @@ -677,31 +677,30 @@ const embeddingModelOptions = toOptions(embeddingModelsData);
-

Budget & Deployment

+

{t('llmConnectionForm.sections.budgetDeployment') || 'Budget & Deployment'}

-

Monthly Budget

-

Total monthly budget including embedding model and LLM model. If the LLM integration usage cost exceeds the below - budget, the LLM will respond with an “inactive” status

+

{t('llmConnectionForm.fields.monthlyBudget.label') || 'Monthly Budget'}

+

{t('llmConnectionForm.fields.monthlyBudget.description') || 'Total monthly budget including embedding model and LLM model. If the LLM integration usage cost exceeds the below budget, the LLM will respond with an "inactive" status'}

{ const numericValue = value.replace(/,/g, ''); - return Number(numericValue) > 0 || 'Monthly Budget must be a positive number'; + return Number(numericValue) > 0 || t('llmConnectionForm.validationMessages.monthlyBudgetPositive') || 'Monthly Budget must be a positive number'; } }} render={({ field }) => (
-

Warn Budget Threshold

-

You will get a notification when your usage reaches this percentage of your allocated monthly budget.

+

{t('llmConnectionForm.fields.warnBudget.label') || 'Warn Budget Threshold'}

+

{t('llmConnectionForm.fields.warnBudget.description') || 'You will get a notification when your usage reaches this percentage of your allocated monthly budget.'}

{ const numericValue = Number(value.replace('%', '')); if (numericValue < 1 || numericValue > 100) { - return 'Warn Budget Threshold must be between 1-100%'; + return t('llmConnectionForm.validationMessages.warnBudgetRange') || 'Warn Budget Threshold must be between 1-100%'; } return true; } @@ -758,7 +757,7 @@ const embeddingModelOptions = toOptions(embeddingModelsData); render={({ field }) => ( { @@ -774,18 +773,17 @@ const embeddingModelOptions = toOptions(embeddingModelsData); {disconnectOnBudgetExceed && (
-

Disconnect Budget Threshold

-

Your LLM connection will be automatically disconnected and all further requests will be stopped when your usage reaches - this percentage of your monthly budget.

+

{t('llmConnectionForm.fields.stopBudget.label') || 'Disconnect Budget Threshold'}

+

{t('llmConnectionForm.fields.stopBudget.description') || 'Your LLM connection will be automatically disconnected and all further requests will be stopped when your usage reaches this percentage of your monthly budget.'}

{ if (!disconnectOnBudgetExceed) return true; @@ -794,11 +792,11 @@ const embeddingModelOptions = toOptions(embeddingModelsData); const warnValue = Number(formValues.warnBudget?.replace('%', '') || 0); if (numericValue < 1 || numericValue > 200) { - return 'Stop Budget Threshold must be between 1-200%'; + return t('llmConnectionForm.validationMessages.stopBudgetRange') || 'Stop Budget Threshold must be between 1-200%'; } if (warnValue > 0 && numericValue <= warnValue) { - return 'Stop Budget Threshold must be greater than Warn Budget Threshold'; + return t('llmConnectionForm.validationMessages.stopBudgetGreater') || 'Stop Budget Threshold must be greater than Warn Budget Threshold'; } return true; @@ -807,7 +805,7 @@ const embeddingModelOptions = toOptions(embeddingModelsData); render={({ field }) => ( { @@ -826,10 +824,10 @@ const embeddingModelOptions = toOptions(embeddingModelsData); (
- +
{deploymentEnvironments?.map((env) => (
diff --git a/GUI/src/pages/LLMConnections/CreateLLMConnection.tsx b/GUI/src/pages/LLMConnections/CreateLLMConnection.tsx index c77bdfc..3f2a901 100644 --- a/GUI/src/pages/LLMConnections/CreateLLMConnection.tsx +++ b/GUI/src/pages/LLMConnections/CreateLLMConnection.tsx @@ -2,6 +2,7 @@ import BackArrowButton from "assets/BackArrowButton"; import LLMConnectionForm, { LLMConnectionFormData } from "components/molecules/LLMConnectionForm"; import { Link, useNavigate } from "react-router-dom"; import { useMutation, useQueryClient, useQuery } from '@tanstack/react-query'; +import { useTranslation } from 'react-i18next'; import { useDialog } from 'hooks/useDialog'; import { createLLMConnection, getProductionConnection } from 'services/llmConnections'; import { llmConnectionsQueryKeys } from 'utils/queryKeys'; @@ -9,6 +10,7 @@ import { ButtonAppearanceTypes } from 'enums/commonEnums'; import { Button } from 'components'; const CreateLLMConnection = () => { + const { t } = useTranslation(); const navigate = useNavigate(); const { open: openDialog, close: closeDialog } = useDialog(); const queryClient = useQueryClient(); @@ -27,8 +29,8 @@ const CreateLLMConnection = () => { }); openDialog({ - title: 'Connection Succeeded', - content:

The provide LLM configuration is successfully configured

, + title: t('llmConnectionForm.createConnection.successDialogTitle') || 'Connection Succeeded', + content:

{t('llmConnectionForm.createConnection.successDialogMessage') || 'The provided LLM configuration is successfully configured'}

, footer: ( ), }); @@ -45,14 +47,14 @@ const CreateLLMConnection = () => { onError: (error: any) => { console.error('Error creating LLM connection:', error); openDialog({ - title: 'Connection Failed', - content:

{'The connection couldn’t be established either due to invalid API credentials or misconfiguration in the deployment platform'}

, + title: t('llmConnectionForm.createConnection.errorDialogTitle') || 'Connection Failed', + content:

{t('llmConnectionForm.createConnection.errorDialogMessage') || 'The connection couldn\'t be established either due to invalid API credentials or misconfiguration in the deployment platform'}

, footer: ( ), }); @@ -65,11 +67,11 @@ const CreateLLMConnection = () => { if (isCreatingProductionConnection && hasExistingProductionConnection) { openDialog({ - title: 'Replace Production Connection', + title: t('llmConnectionForm.createConnection.replaceProductionDialogTitle') || 'Replace Production Connection', content: (
-

A production connection "{existingProductionConnection.connectionName}" already exists.

-

Creating this new production connection will replace the current one. Are you sure you want to proceed?

+

{t('llmConnectionForm.createConnection.replaceProductionDialogMessage', { connectionName: existingProductionConnection.connectionName }) || `A production connection "${existingProductionConnection.connectionName}" already exists.`}

+

{t('llmConnectionForm.createConnection.replaceProductionDialogWarning') || 'Creating this new production connection will replace the current one. Are you sure you want to proceed?'}

), footer: ( @@ -78,7 +80,7 @@ const CreateLLMConnection = () => { appearance={ButtonAppearanceTypes.SECONDARY} onClick={closeDialog} > - Cancel + {t('llmConnectionForm.createConnection.cancelButton') || 'Cancel'}
), @@ -108,7 +110,7 @@ const CreateLLMConnection = () => { -
{'Create LLM Connection'}
+
{t('llmConnectionForm.createConnection.title') || 'Create LLM Connection'}
{ }); openDialog({ - title: 'Connection Update Succeeded', - content:

LLM configuration updated successfully!

, + title: t('llmConnectionForm.viewConnection.updateSuccessTitle') || 'Connection Update Succeeded', + content:

{t('llmConnectionForm.viewConnection.updateSuccessMessage') || 'LLM configuration updated successfully!'}

, footer: ( ), }); @@ -54,14 +54,14 @@ const ViewLLMConnection = () => { onError: (error: any) => { console.error('Error updating LLM connection:', error); openDialog({ - title: 'Connection Update Failed', - content:

{ 'Failed to update LLM connection. Please try again.'}

, + title: t('llmConnectionForm.viewConnection.updateErrorTitle') || 'Connection Update Failed', + content:

{t('llmConnectionForm.viewConnection.updateErrorMessage') || 'Failed to update LLM connection. Please try again.'}

, footer: ( ), }); @@ -79,8 +79,8 @@ const ViewLLMConnection = () => { navigate('/llm-connections'); openDialog({ - title: 'Connection Deletion Succeeded', - content:

LLM connection deleted successfully!

, + title: t('llmConnectionForm.viewConnection.deleteSuccessTitle') || 'Connection Deletion Succeeded', + content:

{t('llmConnectionForm.viewConnection.deleteSuccessMessage') || 'LLM connection deleted successfully!'}

, footer: ( ), }); @@ -97,14 +97,14 @@ const ViewLLMConnection = () => { onError: (error: any) => { console.error('Error deleting LLM connection:', error); openDialog({ - title: 'Error', - content:

{error?.message || 'Failed to delete LLM connection. Please try again.'}

, + title: t('llmConnectionForm.viewConnection.deleteErrorTitle') || 'Error', + content:

{error?.message || t('llmConnectionForm.viewConnection.deleteErrorMessage') || 'Failed to delete LLM connection. Please try again.'}

, footer: ( ), }); @@ -117,11 +117,11 @@ const ViewLLMConnection = () => { if (isCurrentlyProduction && isChangingToTesting) { openDialog({ - title: 'Confirm Production Environment Change', + title: t('llmConnectionForm.viewConnection.confirmEnvironmentChangeTitle') || 'Confirm Production Environment Change', content: (
-

You are about to change a production connection to testing environment.

-

This will affect the current production setup. Are you sure you want to proceed?

+

{t('llmConnectionForm.viewConnection.confirmEnvironmentChangeMessage') || 'You are about to change a production connection to testing environment.'}

+

{t('llmConnectionForm.viewConnection.confirmEnvironmentChangeWarning') || 'This will affect the current production setup. Are you sure you want to proceed?'}

), footer: ( @@ -130,7 +130,7 @@ const ViewLLMConnection = () => { appearance={ButtonAppearanceTypes.SECONDARY} onClick={closeDialog} > - Cancel + {t('llmConnectionForm.viewConnection.cancelButton') || 'Cancel'}
), @@ -161,11 +161,11 @@ const ViewLLMConnection = () => { if (isProductionConnection) { openDialog({ - title: 'Cannot Delete Production Connection', + title: t('llmConnectionForm.viewConnection.cannotDeleteProductionTitle') || 'Cannot Delete Production Connection', content: (
-

This LLM connection is currently set as the production connection and cannot be deleted.

-

To delete this connection, please ensure another connection is set as the production connection.

+

{t('llmConnectionForm.viewConnection.cannotDeleteProductionMessage') || 'This LLM connection is currently set as the production connection and cannot be deleted.'}

+

{t('llmConnectionForm.viewConnection.cannotDeleteProductionInstructions') || 'To delete this connection, please ensure another connection is set as the production connection.'}

), footer: ( @@ -173,21 +173,21 @@ const ViewLLMConnection = () => { appearance={ButtonAppearanceTypes.PRIMARY} onClick={closeDialog} > - OK + {t('llmConnectionForm.viewConnection.okButton') || 'OK'} ), }); } else { openDialog({ - title: 'Confirm Delete', - content:

Are you sure you want to delete this LLM connection? This action cannot be undone.

, + title: t('llmConnectionForm.viewConnection.confirmDeleteTitle') || 'Confirm Delete', + content:

{t('llmConnectionForm.viewConnection.confirmDeleteMessage') || 'Are you sure you want to delete this LLM connection? This action cannot be undone.'}

, footer: (
), @@ -220,10 +220,10 @@ const ViewLLMConnection = () => { -
Connection Not Found
+
{t('llmConnectionForm.viewConnection.connectionNotFoundTitle') || 'Connection Not Found'}
-

The requested LLM connection could not be found.

+

{t('llmConnectionForm.viewConnection.connectionNotFoundMessage') || 'The requested LLM connection could not be found.'}

); } diff --git a/GUI/src/pages/LLMConnections/index.tsx b/GUI/src/pages/LLMConnections/index.tsx index 18dd7f4..2484a82 100644 --- a/GUI/src/pages/LLMConnections/index.tsx +++ b/GUI/src/pages/LLMConnections/index.tsx @@ -119,37 +119,37 @@ const LLMConnections: FC = () => { // Platform filter options const platformOptions = [ - { label: 'All Platforms', value: 'all' }, - { label: 'Azure OpenAI', value: 'azure' }, - { label: 'AWS Bedrock', value: 'aws' }, + { label: t('dataModels.filters.allPlatforms'), value: 'all' }, + { label: t('dataModels.platforms.azure'), value: 'azure' }, + { label: t('dataModels.platforms.aws'), value: 'aws' }, ]; // LLM Model filter options - these would ideally come from an API const llmModelOptions = [ - { label: 'All Models', value: 'all' }, - { label: 'GPT-4 Mini', value: 'gpt-4o-mini' }, - { label: 'GPT-4o', value: 'gpt-4o' }, - { label: 'Anthropic Claude 3.5 Sonnet', value: 'anthropic-claude-3.5-sonnet' }, - { label: 'Anthropic Claude 3.7 Sonnet', value: 'anthropic-claude-3.7-sonnet' }, + { label: t('dataModels.filters.allModels'), value: 'all' }, + { label: t('dataModels.models.gpt4Mini'), value: 'gpt-4o-mini' }, + { label: t('dataModels.models.gpt4o'), value: 'gpt-4o' }, + { label: t('dataModels.models.claude35Sonnet'), value: 'anthropic-claude-3.5-sonnet' }, + { label: t('dataModels.models.claude37Sonnet'), value: 'anthropic-claude-3.7-sonnet' }, ]; // Environment filter options const environmentOptions = [ - { label: 'All Environments', value: 'all' }, - { label: 'Testing', value: 'testing' }, - { label: 'Production', value: 'production' }, + { label: t('dataModels.filters.allEnvironments'), value: 'all' }, + { label: t('dataModels.environments.testing'), value: 'testing' }, + { label: t('dataModels.environments.production'), value: 'production' }, ]; // Sort options - using snake_case format for backend const sortOptions = [ - { label: 'Created Date (Newest)', value: 'created_at desc' }, - { label: 'Created Date (Oldest)', value: 'created_at asc' }, - { label: 'Platform A-Z', value: 'llm_platform asc' }, - { label: 'Platform Z-A', value: 'llm_platform desc' }, - { label: 'Model A-Z', value: 'llm_model asc' }, - { label: 'Model Z-A', value: 'llm_model desc' }, - { label: 'Budget (High to Low)', value: 'monthly_budget desc' }, - { label: 'Budget (Low to High)', value: 'monthly_budget asc' }, + { label: t('dataModels.sortOptions.createdDateNewest'), value: 'created_at desc' }, + { label: t('dataModels.sortOptions.createdDateOldest'), value: 'created_at asc' }, + { label: t('dataModels.sortOptions.platformAZ'), value: 'llm_platform asc' }, + { label: t('dataModels.sortOptions.platformZA'), value: 'llm_platform desc' }, + { label: t('dataModels.sortOptions.modelAZ'), value: 'llm_model asc' }, + { label: t('dataModels.sortOptions.modelZA'), value: 'llm_model desc' }, + { label: t('dataModels.sortOptions.budgetHighToLow'), value: 'monthly_budget desc' }, + { label: t('dataModels.sortOptions.budgetLowToHigh'), value: 'monthly_budget asc' }, ]; const currentSorting = `${filters.sortBy || 'created_at'} ${filters.sortOrder || 'desc'}`; @@ -170,7 +170,7 @@ const LLMConnections: FC = () => { size="m" onClick={() => navigate('/create-llm-connection')} > - {'Create LLM Connection'} + {t('dataModels.createModel')}
@@ -178,7 +178,7 @@ const LLMConnections: FC = () => { handleFilterChange('llmPlatform', selection?.value === 'all' ? '' : selection?.value) @@ -188,7 +188,7 @@ const LLMConnections: FC = () => { handleFilterChange('llmModel', selection?.value === 'all' ? '' : selection?.value) @@ -198,7 +198,7 @@ const LLMConnections: FC = () => { handleFilterChange('environment', selection?.value === 'all' ? '' : selection?.value) @@ -209,7 +209,7 @@ const LLMConnections: FC = () => { handleFilterChange('sorting', selection?.value) @@ -247,7 +247,7 @@ const LLMConnections: FC = () => { {productionConnection && filters?.environment !== "testing" && (
-

Production LLM Connection

+

{t('dataModels.productionConnections')}

{ {otherConnections?.length > 0 ? (
-

Other LLM Connections

+

{t('dataModels.otherConnections')}

{otherConnections?.map((llmConnection: LLMConnection) => { return ( diff --git a/GUI/src/pages/TestModel/index.tsx b/GUI/src/pages/TestModel/index.tsx index 7730d2b..4b16522 100644 --- a/GUI/src/pages/TestModel/index.tsx +++ b/GUI/src/pages/TestModel/index.tsx @@ -48,14 +48,14 @@ const TestLLM: FC = () => { onError: (error: any) => { console.error('Error getting inference result:', error); openDialog({ - title: 'Inference Error', - content:

Failed to get inference result. Please try again.

, + title: t('testModels.inferenceErrorTitle') || 'Inference Error', + content:

{t('testModels.inferenceErrorMessage') || 'Failed to get inference result. Please try again.'}

, footer: ( ), }); @@ -85,28 +85,28 @@ const TestLLM: FC = () => { ) : (
-
{'Test LLM'}
+
{t('testModels.title') || 'Test LLM'}
-

{"LLM Connection"}

+

{t('testModels.llmConnectionLabel') || 'LLM Connection'}

{ handleChange('connectionId', selection?.value as string); }} - value={testLLM?.connectionId === null ? 'Connection does not exist' : undefined} + value={testLLM?.connectionId === null ? t('testModels.connectionNotExist') || 'Connection does not exist' : undefined} defaultValue={testLLM?.connectionId ?? undefined} />
-

{t('testModels.classifyTextLabel')}

+

{t('testModels.classifyTextLabel') || 'Enter text to test'}

{ onClick={handleSend} disabled={!testLLM.connectionId || !testLLM.text || inferenceMutation.isLoading} > - {inferenceMutation.isLoading ? 'Sending...' : 'Send'} + {inferenceMutation.isLoading ? t('testModels.sendingButton') || 'Sending...' : t('testModels.sendButton') || 'Send'}
@@ -129,7 +129,7 @@ const TestLLM: FC = () => { {inferenceResult && (
- Response: + {t('testModels.responseLabel') || 'Response:'}
{inferenceResult.content}
diff --git a/GUI/translations/en/common.json b/GUI/translations/en/common.json index bfb6729..eede26f 100644 --- a/GUI/translations/en/common.json +++ b/GUI/translations/en/common.json @@ -61,24 +61,8 @@ }, "menu": { "userManagement": "User Management", - "agencies": "Integrated Clients", - "dataSets": { - "title": "Datasets", - "overview": "Overview", - "progress": "Data Generation Progress" - }, - "datasetGroups": "Dataset Groups", - "validationSessions": "Data Generation Sessions", - "dataModels": { - "title": "Data Models", - "overview": "Overview", - "progress": "Training Progress" - }, - "models": "Models", - "trainingSessions": "Training Sessions", - "testModel": "Test Model", - "stopWords": "Stop Words", - "correctedTexts": "Corrected Texts" + "testLLM": "Test LLM", + "llmConnections": "LLM Connections" }, "userManagement": { "title": "User Management", @@ -116,396 +100,304 @@ "title": "Title" } }, - "integratedAgencies": { - "title": "Integrated Clients", - "search": "Search client", - "noClients": "No clients found", - "sortOptions": { - "agencyAsc": "Client Name: A-Z", - "agencyDesc": "Client Name: Z-A", - "createdDateAsc": "Created: Oldest First", - "createdDateDesc": "Created: Newest First", - "lastUpdatedDateAsc": "Updated: Oldest First", - "lastUpdatedDateDesc": "Updated: Newest First" - }, - "agencyCard": { - "lastModelTrained": "Last Model Trained", - "lastUsedForTraining": "Last Used For Training", - "lastSynced": "Last Synced", - "latest": "Latest", - "syncStatus": { - "synced": "Synced with CKB", - "unavailable": "Unavailable in CKB", - "resync": "Resync needed with CKB", - "inProgress": "Sync in Progress with CKB", - "resyncInProgress": "Resync in Progress with CKB", - "failed": "Sync with CKB Failed" - }, - "resync": "Resync" - } - }, - "integration": { - "title": "Integration", - "jira": "Jira", - "outlook": "Outlook", - "jiraDesc": "Atlassian issue tracking and project management software", - "outlookDesc": "Personal information manager and email application developed by Microsoft", - "connected": "Connected", - "disconnected": "Disconnected", - "integrationErrorTitle": "Integration Unsuccessful", - "integrationErrorDesc": "Failed to connect with {{channel}}. Please check your settings and try again. If the problem persists, contact support for assistance.", - "integrationSuccessTitle": "Integration Successful", - "integrationSuccessDesc": "You have successfully connected with {{channel}}! Your integration is now complete, and you can start working with {{channel}} seamlessly.", - "confirmationModalTitle": "Are you sure?", - "disconnectConfirmationModalDesc": "Are you sure you want to disconnect the {{channel}} integration? This action cannot be undone and may affect your workflow and linked issues.", - "connectConfirmationModalDesc": "Are you sure you want to connect the {{channel}} integration? This action cannot be undone and may affect your workflow and linked issues.", - "disconnectErrorTi/tle": "Disconnection Unsuccessful", - "disconnectErrorDesc": "Failed to disconnect {{channel}}. Please check your settings and try again. If the problem persists, contact support for assistance.", - "addUserButton": " Add a user", - "addUser": { - "name": "First and last name", - "namePlaceholder": "Enter name", - "role": "Role", - "rolePlaceholder": "-Select-", - "personalId": "Personal ID", - "personalIdPlaceholder": "Enter personal ID", - "title": "Title", - "titlePlaceholder": "Enter title", - "email": "Email", - "emailPlaceholder": "Enter email" - } - }, + "roles": { "ROLE_ADMINISTRATOR": "Administrator", "ROLE_MODEL_TRAINER": "Model Trainer" }, "toast": { "success": { + "title": "Success", "updateSuccess": "Updated Successfully", "copied": "Copied", "userDeleted": "User deleted", "newUserAdded": "New user added", "userUpdated": "User updated" - } - }, - "datasets": { - "title": "Datasets", - "noDatasets": "No data sets available", - "sortOptions": { - "createdDateAsc": "Created: Oldest First", - "createdDateDesc": "Created: Newest First" }, - "datasetCard": { - "inProgress": "Data Generation in Progress", - "failed": "Data Generation Failed", - "success": "Data Generation Successful", - "settings": "Settings", - "lastModelTrained": "Last Model Trained", - "lastUsedForTraining": "Last Used For Training", - "lastUpdate": "Last Updated", - "latest": "Latest" - }, - "detailedView": { - "dataset": "Dataset", - "version": "Dataset Version", - "connectedModels": "Connected Models", - "noOfItems": "Number of items", - "export": "Export Dataset", - "unsavedChangesWarning": "You have made changes to the dataset which are not saved. Please save the changes to apply", - "noData": "No Data Available", - "editDataRowTitle": "Edit Data Record", - "editDataRowDesc": "Updates you make to the data record will be saved in the dataset", - "deleteDataRowTitle": "Delete Data Record", - "deleteDataRowDesc": "Are you sure you want to delete this data record?", - "data": "Data", - "clientName": "Client Name", - "patchUpdateBanner": "You have edited individual items in the dataset which are not saved. Please save the changes to apply", - "confirmUpdateDatasetTitle": "Confirm dataset update", - "confirmUpdateDatasetDesc": "Changed data rows will be updated in the dataset", - "confirmDeleteDatasetTitle": "Confirm dataset deletion", - "confirmDeleteDatasetDesc": "Deleted data rows will be removed from the dataset", - "datasetUpdateUnsuccessfulTitle": "Dataset update unsuccessful", - "datasetUpdateUnsuccessfulDesc": "Something went wrong while updating the dataset. Please try again.", - "datasetUpdateSuccessfulTitle": "Dataset update successful", - "datasetUpdateSuccessfulDesc": "The dataset has been successfully updated.", - "datasetDeleteUnsuccessfulTitle": "Dataset delete unsuccessful", - "datasetDeleteUnsuccessfulDesc": "Something went wrong while deleting the dataset. Please try again.", - "datasetDeleteSuccessfulTitle": "Dataset delete successful", - "datasetDeleteSuccessfulDesc": "The dataset has been successfully deleted.", - "exportDataSuccessTitle": "Data export was successful", - "exportDataSuccessDesc": "Your data has been successfully exported.", - "exportDataUnsucessTitle": "Dataset export unsuccessful", - "exportDataUnsucessDesc": "Something went wrong. Please try again.", - "itemsUpdated": "items updated", - "itemsDeleted": "items deleted", - "dataBeingUpdated": "Data is being updated...", - "itemsSelected": "items selected", - "bulkDeleteTitle": "Delete Selected Items", - "bulkDeleteDesc1": "Are you sure you want to delete the selected items?", - "bulkDeleteDesc2": "Note : This deletion will not be affected in the original dataset until you click on Save Changes.", - "bulkDeleteSuccessTitle": "Items Deleted Successfully", - "table": { - "id": "Item ID", - "data": "Data", - "client": "Client", - "actions": "Actions" - }, - "validationsTitle": "Dataset Group Validations", - "classHierarchy": "Class Hierarchies", - "delete": "Delete Dataset", - "modals": { - "import": { - "title": "Import new data", - "fileFormatlabel": "Select the file format", - "attachments": "Attachments", - "maxSize": "Maximum file size - 10mb", - "browse": "Browse file", - "import": "Import", - "cancel": "Cancel", - "uploadInProgress": "Upload in Progress...", - "uploadDesc": "Uploading dataset. Please wait until the upload finishes. If you cancel midway, the data and progress will be lost.", - "invalidFile": "Invalid File Format", - "invalidFileDesc": "The uploaded file is not in the correct {{format}} format. Please upload a valid {{format}} file and try again." - }, - "export": { - "export": "Export data", - "exportButton": "Export", - "fileFormatlabel": "Select the file format", - "title": "Data export was successful", - "description": "Your data has been successfully exported." - }, - "delete": { - "title": "Are you sure?", - "description": "Once you delete the dataset all models connected to this model will become untrainable. Are you sure you want to proceed?", - "error": "Dataset Group Deletion Unsuccessful", - "errorDesc": "There was an issue deleting the dataset group. Please try again. If the problem persists, contact support for assistance." - }, - "edit": { - "title": "Edit", - "data": "Data", - "label": "Label", - "update": "Update", - "error": "Dataset Group Update Unsuccessful", - "errorDesc": "There was an issue updating the dataset group. Please try again. If the problem persists, contact support for assistance." - }, - "upload": { - "title": "Data upload successful", - "desc": "The dataset file was successfully uploaded. Please save the changes to initiate data validation and preprocessing" - }, - "datasetDelete": { - "confirmationTitle": "Are you sure?", - "confirmationDesc": "Confirm that you are wish to delete the following dataset", - "successTitle": "Success: Dataset Deleted", - "successDesc": "You have successfully deleted the dataset. The dataset is no longer available and all related data has been removed.", - "proceedToDashboard": "Proceed to dataset groups" - } - } - } - }, - "stopWords": { - "title": "Stop Words", - "import": "Import stop words", - "stopWordInputHint": "Enter stop word", - "add": "Add", - "importModal": { - "title": "Import stop words", - "importButton": "Import", - "selectionLabel": "Select the option below", - "addOption": "Import to add", - "updateOption": "Import to update", - "deleteOption": "Import to delete", - "attachements": "Attachments (TXT, XLSX, YAML, JSON)", - "inprogressTitle": "Import in Progress", - "inprogressDesc": "The import of stop words is currently in progress. Please wait until the process is complete.", - "successTitle": "Data import was successful", - "successDesc": "Your data has been successfully imported.", - "unsuccessTitle": "Data import was unsuccessful", - "unsuccessDesc": "Stop words Import Unsuccessful" + "error": { + "title": "Error" } }, - "validationSessions": { - "title": "Data Generation Sessions", - "inprogress": "Data Generation in-Progress", - "fail": "Data Generation failed because {{class}} class found in the {{column}} column does not exist in hierarchy", - "noSessions": "No ongoing Data Generation sessions available" - }, - "correctedTexts": { - "title": "Corrected Texts", - "export": "Export Data", - "searchIncomingText": "Search incoming texts", - "filterAsc": "Filter by date created - Ascending", - "filterDesc": "Filter by date created - Descending", - "platform": "Platform", - "dateAndTime": "Date & Time", - "inferenceTime": "Inference Time", - "text": "Text", - "predictedHierarchy": "Predicted Class Hierarchy", - "predictedConfidenceProbability": "Predicted Classes Average Confidence Probability", - "correctedHierarchy": "Corrected Class Hierarchy", - "correctedConfidenceProbability": "Corrected Classes Average Confidence Probability", - "labelNotFoundText": "Label not in dataset", - "exportSuccessTitle": "Data export was successful", - "exportSuccessDesc": "Your data has been successfully exported.", - "exportDataUnsucessTitle": "Data Export Unsuccessful", - "exportDataUnsucessDesc": "Something went wrong. Please try again." - }, "dataModels": { - "productionModels": "Production Models", - "dataModels": "Data Models", - "createModel": "Create Model", - "noProdModels": "No production models available", - "noModels": "No models available", + "settings": "Settings", + "dataModels": "LLM Connections", + "noModels": "No LLM connections found", + "createModel": "Create LLM Connection", + "productionConnections": "Production LLM Connection", + "otherConnections": "Other LLM Connections", "sortOptions": { - "dataModelAsc": "Data Model Name: A-Z", - "dataModelDesc": "Data Model Name: Z-A", - "createdDateAsc": "Created: Oldest First", - "createdDateDesc": "Created: Newest First" + "createdDateNewest": "Created Date (Newest)", + "createdDateOldest": "Created Date (Oldest)", + "platformAZ": "Platform A-Z", + "platformZA": "Platform Z-A", + "modelAZ": "Model A-Z", + "modelZA": "Model Z-A", + "budgetHighToLow": "Budget (High to Low)", + "budgetLowToHigh": "Budget (Low to High)" }, "filters": { - "modelName": "Model Name", - "version": "Version", - "modelStatus": "Model Status", - "datasetGroup": "Dataset Group", - "trainingStatus": "Training Status", - "maturity": "Deployment Environment", - "sort": "Sort by name (A - Z)" + "platform": "Platform", + "model": "Model", + "environment": "Environment", + "sortBy": "Sort By", + "allPlatforms": "All Platforms", + "allModels": "All Models", + "allEnvironments": "All Environments" }, - "trainingStatus": { - "retrainingNeeded": "Retraining Needed", - "trained": "Trained", - "initiatingTraining": "Initiating Training", - "trainingFailed": "Training Failed", - "notTrained": "Not Trained" + "platforms": { + "azure": "Azure OpenAI", + "aws": "AWS Bedrock" }, - "maturity": { - "production": "Production", - "undeployed": "Undeployed", - "testing": "Testing" + "models": { + "gpt4Mini": "GPT-4 Mini", + "gpt4o": "GPT-4o", + "claude35Sonnet": "Anthropic Claude 3.5 Sonnet", + "claude37Sonnet": "Anthropic Claude 3.7 Sonnet" }, - "dataModelCard": { - "dataset": "Dataset", - "datasetVersion": "Dataset Version", - "lastTrained": "Last Trained" + "environments": { + "testing": "Testing", + "production": "Production" }, - "trainingResults": { - "title": "Training Results", - "bestPerformingModel": "Best Performing Model", - "classes": "Classes", - "accuracy": "Accuracy", - "f1Score": "F1 Score", - "noResults": "No training results available", - "viewResults": " View Results" + "budgetStatus": { + "withinBudget": "Within Budget", + "overBudget": "Over Budget", + "closeToExceed": "Close to Exceed Budget" + } + }, + "llmConnectionForm": { + "createTitle": "Create LLM Connection", + "editTitle": "Edit LLM Connection", + "sections": { + "llmConfiguration": "LLM Configuration", + "embeddingConfiguration": "Embedding Model Configuration", + "budgetDeployment": "Budget & Deployment" }, - "createDataModel": { - "title": "Create Data Model", - "replaceTitle": "Warning: Replace Production Model", - "replaceDesc": "Adding this model to production will replace the current production model. Are you sure you want to proceed?", - "successTitle": "Data Model Created and Started Training", - "successDesc": " You have successfully created and started training the data model. You can view it on the data model dashboard.", - "viewAll": "View All Data Models", - "errorTitle": "Error Creating Data Model", - "errorDesc": " There was an issue creating or training the data model. Please try again. If the problem persists, contact support for assistance.", - "replaceWarning": "{{platform}} integration is currently disabled, therefore the model wouldn't receive any inputs or make any predictions" + "fields": { + "connectionName": { + "label": "Connection Name", + "description": "A unique name to identify this LLM connection", + "placeholder": "Enter connection name (e.g., Azure GPT-4 Production)" + }, + "llmPlatform": { + "label": "LLM Platform", + "description": "Cloud / local platform in which your model is hosted", + "placeholder": "Select LLM Platform" + }, + "llmModel": { + "label": "LLM Model", + "description": "The LLM model that you want to use", + "placeholder": "Select LLM Model" + }, + "embeddingPlatform": { + "label": "Embedding Model Platform", + "description": "This is the cloud / local platform in which your embedding model is hosted", + "placeholder": "Select Embedding Platform" + }, + "embeddingModel": { + "label": "Embedding Model", + "description": "The embedding model that will be used for searching your knowledge base", + "placeholder": "Select Embedding Model" + }, + "monthlyBudget": { + "label": "Monthly Budget", + "description": "Total monthly budget including embedding model and LLM model. If the LLM integration usage cost exceeds the below budget, the LLM will respond with an \"inactive\" status", + "placeholder": "Enter monthly budget" + }, + "disconnectOnBudgetExceed": { + "label": "Automatically disconnect LLM connection when stop budget threshold is exceeded" + }, + "warnBudget": { + "label": "Warn Budget Threshold", + "description": "You will get a notification when your usage reaches this percentage of your allocated monthly budget.", + "placeholder": "Enter warn budget threshold" + }, + "stopBudget": { + "label": "Disconnect Budget Threshold", + "description": "Your LLM connection will be automatically disconnected and all further requests will be stopped when your usage reaches this percentage of your monthly budget.", + "placeholder": "Enter stop budget threshold" + }, + "deploymentEnvironment": { + "label": "Deployment Environment" + } }, - "loadDataModel": { - "title": "Load Data Model", - "loading": "Loading Data Model...", - "loaded": "Data Model Loaded", - "errorTitle": "Error Loading Data Model", - "errorDesc": " There was an issue loading the data model. Please try again. If the problem persists, contact support for assistance." + "aws": { + "accessKey": { + "label": "Access Key", + "description": "AWS Access Key for Bedrock service", + "placeholder": "Enter AWS Access Key" + }, + "secretKey": { + "label": "Secret Key", + "description": "AWS Secret Key for Bedrock service", + "placeholder": "Enter AWS Secret Key" + }, + "embeddingAccessKey": { + "label": "Embedding Access Key", + "description": "AWS Access Key for Bedrock embedding service", + "placeholder": "Enter AWS Access Key for embeddings" + }, + "embeddingSecretKey": { + "label": "Embedding Secret Key", + "description": "AWS Secret Key for Bedrock embedding service", + "placeholder": "Enter AWS Secret Key for embeddings" + } }, - "configureDataModel": { - "saveChangesTitile": "Changes Saved Successfully", - "saveChangesDesc": "You have successfully saved the changes. You can view the data model in the \"Data Models\" view.", - "updateErrorTitile": "Error Updating Data Model", - "updateErrorDesc": "There was an issue updating the data model. Please try again. If the problem persists, contact support for assistance.", - "deleteErrorTitle": "Cannot Delete Model", - "deleteErrorDesc": "The model cannot be deleted because it is currently in production. Please escalate another model to production before proceeding to delete this model.", - "deleteConfirmation": "Are you sure?", - "deleteConfirmationDesc": "Confirm that you are wish to delete the following data model", - "deleteModalErrorTitle": "Error deleting data model", - "deleteModalErrorDesc": "There was an issue deleting the data model. Please try again. If the problem persists, contact support for assistance.", - "deleteModalSuccessTitle": "Model Deleted Successfully", - "deleteModalSuccessDesc": "You have successfully deleted the data model. The model is no longer available and all related data has been removed.", - "deployDataModalSuccessTitle": "Model Deployed Successfully", - "deployDataModalSuccessDesc": "You have successfully deployed the data model.", - "deployDataModalErrorTitle": "Error deploying data model", - "deployDataModalErrorDesc": "There was an issue deploying the data model. Please try again. If the problem persists, contact support for assistance.", - "changeProdModelTitle": "Warning: Changing Production Model", - "changeProdModelDesc": "Changing this model will impact the current production model. Are you sure you want to proceed?", - "title": "Configure Data Model", - "retrainCard": "Model updated. Please initiate retraining to continue benefiting from the latest improvements.", - "retrain": "Retrain", - "deleteModal": "Delete model", - "confirmRetrain": "Confirm retrain model", - "confirmRetrainDesc": "Are you sure you want to retrain this model?", - "save": "Save Changes" + "azure": { + "deploymentName": { + "label": "Deployment Name", + "description": "Azure OpenAI deployment name", + "placeholder": "Enter deployment name" + }, + "targetUri": { + "label": "Endpoint / Target URI", + "description": "Azure OpenAI service endpoint URL", + "placeholder": "https://your-resource.openai.azure.com/" + }, + "apiKey": { + "label": "API Key", + "description": "Azure OpenAI API key", + "placeholder": "Enter Azure OpenAI API key" + }, + "embeddingDeploymentName": { + "label": "Embedding Deployment Name", + "description": "Azure OpenAI embedding deployment name", + "placeholder": "Enter embedding deployment name" + }, + "embeddingTargetUri": { + "label": "Embedding Endpoint / Target URI", + "description": "Azure OpenAI embedding service endpoint URL" + }, + "embeddingApiKey": { + "label": "Embedding API Key", + "description": "Azure OpenAI embedding API key", + "placeholder": "Enter Azure OpenAI embedding API key" + } }, - "dataModelForm": { - "modelVersion": "Model Version", - "datasetGroup": "Select Dataset Version", - "baseModels": "Select Base Models", - "deploymentPlatform": "Select Deployment Environment", - "errors": { - "datasetVersionNotExist": "Dataset version does not exist" + "generic": { + "llmApiKey": { + "label": "LLM API Key", + "description": "The API key of the LLM model", + "placeholder": "Enter your LLM API key" + }, + "embeddingApiKey": { + "label": "Embedding Model API Key", + "description": "API key of your embedding model", + "placeholder": "Enter your Embedding API key" } + }, + "placeholders": { + "loadingPlatforms": "Loading platforms...", + "errorLoadingPlatforms": "Error loading platforms", + "loadingModels": "Loading models...", + "errorLoadingModels": "Error loading models", + "selectPlatformFirst": "Select a platform first" + }, + "validationMessages": { + "connectionNameRequired": "Connection Name is required", + "llmPlatformRequired": "LLM Platform is required", + "llmModelRequired": "LLM Model is required", + "embeddingPlatformRequired": "Embedding Model Platform is required", + "embeddingModelRequired": "Embedding Model is required", + "monthlyBudgetRequired": "Monthly Budget is required", + "monthlyBudgetInvalid": "Please enter a valid budget amount", + "monthlyBudgetPositive": "Monthly Budget must be a positive number", + "warnBudgetRequired": "Warn Budget Threshold is required", + "warnBudgetRange": "Warn Budget Threshold must be between 1-100%", + "stopBudgetRequired": "Stop Budget Threshold is required", + "stopBudgetRange": "Stop Budget Threshold must be between 1-200%", + "stopBudgetGreater": "Stop Budget Threshold must be greater than Warn Budget Threshold", + "deploymentEnvironmentRequired": "Deployment Environment is required", + "numbersOnly": "Please enter numbers only", + "accessKeyRequiredAws": "Access Key is required for AWS Bedrock", + "secretKeyRequiredAws": "Secret Key is required for AWS Bedrock", + "deploymentNameRequiredAzure": "Deployment Name is required for Azure OpenAI", + "endpointRequiredAzure": "Endpoint is required for Azure OpenAI", + "apiKeyRequiredAzure": "API Key is required for Azure OpenAI", + "llmApiKeyRequired": "LLM API Key is required", + "embeddingAccessKeyRequiredAws": "Embedding Access Key is required for AWS Bedrock", + "embeddingSecretKeyRequiredAws": "Embedding Secret Key is required for AWS Bedrock", + "embeddingDeploymentNameRequiredAzure": "Embedding Deployment Name is required for Azure OpenAI", + "embeddingEndpointRequiredAzure": "Embedding Endpoint is required for Azure OpenAI", + "embeddingApiKeyRequiredAzure": "Embedding API Key is required for Azure OpenAI", + "embeddingApiKeyRequired": "Embedding API Key is required", + "invalidUrl": "Please enter a valid URL starting with http:// or https://", + "failedToLoadPlatforms": "Failed to load platforms", + "failedToLoadModels": "Failed to load models" + }, + "buttons": { + "deleteConnection": "Delete Connection", + "updateConnection": "Update Connection", + "createConnection": "Create Connection" + }, + "environments": { + "testing": "Testing", + "production": "Production" + }, + "createConnection": { + "title": "Create LLM Connection", + "successDialogTitle": "Connection Succeeded", + "successDialogMessage": "The provided LLM configuration is successfully configured", + "viewConnectionsButton": "View LLM Connections", + "errorDialogTitle": "Connection Failed", + "errorDialogMessage": "The connection couldn't be established either due to invalid API credentials or misconfiguration in the deployment platform", + "goBackButton": "Go Back", + "replaceProductionDialogTitle": "Replace Production Connection", + "replaceProductionDialogMessage": "A production connection \"{connectionName}\" already exists.", + "replaceProductionDialogWarning": "Creating this new production connection will replace the current one. Are you sure you want to proceed?", + "cancelButton": "Cancel", + "confirmReplaceButton": "Yes, Replace Production Connection" + }, + "viewConnection": { + "updateSuccessTitle": "Connection Update Succeeded", + "updateSuccessMessage": "LLM configuration updated successfully!", + "updateErrorTitle": "Connection Update Failed", + "updateErrorMessage": "Failed to update LLM connection. Please try again.", + "deleteSuccessTitle": "Connection Deletion Succeeded", + "deleteSuccessMessage": "LLM connection deleted successfully!", + "deleteErrorTitle": "Error", + "deleteErrorMessage": "Failed to delete LLM connection. Please try again.", + "viewConnectionsButton": "View LLM Connections", + "goBackButton": "Go Back", + "confirmEnvironmentChangeTitle": "Confirm Production Environment Change", + "confirmEnvironmentChangeMessage": "You are about to change a production connection to testing environment.", + "confirmEnvironmentChangeWarning": "This will affect the current production setup. Are you sure you want to proceed?", + "cancelButton": "Cancel", + "confirmChangeButton": "Yes, Change Environment", + "cannotDeleteProductionTitle": "Cannot Delete Production Connection", + "cannotDeleteProductionMessage": "This LLM connection is currently set as the production connection and cannot be deleted.", + "cannotDeleteProductionInstructions": "To delete this connection, please ensure another connection is set as the production connection.", + "confirmDeleteTitle": "Confirm Delete", + "confirmDeleteMessage": "Are you sure you want to delete this LLM connection? This action cannot be undone.", + "deleteButton": "Delete", + "okButton": "OK", + "connectionNotFoundTitle": "Connection Not Found", + "connectionNotFoundMessage": "The requested LLM connection could not be found." } }, - "trainingSessions": { - "title": "Training Sessions", - "inprogress": "Validation in-Progress", - "fail": "Validation failed because {{class}} class found in the {{column}} column does not exist in hierarchy", - "noSessions": "No Active Training Sessions", - "noSessionsDesc": "There are currently no active training sessions. Once you start a training session, it will appear here. In the meantime, you can initiate a new training session to begin improving your models." - }, "testModels": { - "title": "Test Model", - "selectionLabel": "Model", - "placeholder": "Choose model", - "classifyTextLabel": "Enter Text", - "classify": "Classify", - "predictedHierarchy": "Predicted Class Hierarchy : ", - "averageConfidence": "Average Confidence : ", - "classProbabilities": "Class Probabilities : ", - "error": "Classification Error", - "errorDesc": "There was an issue classifying the text. Please try again. If the problem persists, contact support for assistance.", - "results": "Classification Results", - "topPrediction": "Top Prediction", - "allPredictions": "All Predictions", - "classificationFailed": "Classification failed. Please try again." - }, - "optionLists": { - "text": "Text", - "numbers": "Number", - "dateTimes": "Date Time", - "email": "Email", - "fileAttachements": "File Attachments", - "importToAdd": "Import to add", - "importToDelete": "Import to delete", - "userManagement": "User Management", - "integration": "Integration", - "dataset": "Dataset", - "dataModels": "Data Models", - "classes": "Classes", - "stopWords": "Stop Words", - "incomingTexts": "Incoming Texts", - "testModel": "Test Model", - "testProductionLLM": "Test Production LLM", - "clearChat": "Clear Chat", - "welcomeTitle": "Welcome to Production LLM Testing", - "welcomeSubtitle": "Start a conversation by typing a message below.", - "messagePlaceholder": "Type your message here... (Press Enter to send, Shift+Enter for new line)", + "title": "Test LLM", + "llmConnectionLabel": "LLM Connection", + "selectConnectionPlaceholder": "Select LLM Connection", + "connectionNotExist": "Connection does not exist", + "classifyTextLabel": "Enter text to test", "sendButton": "Send", "sendingButton": "Sending...", - "responseReceived": "Response Received", - "errorOccurred": "Error", - "successMessage": "Successfully received response from production LLM", - "errorMessage": "Failed to get response from production LLM", - "connectionError": "Connection Error", - "connectionErrorMessage": "Unable to connect to the production LLM service.", - "chatCleared": "Chat Cleared", - "chatClearedMessage": "All messages have been cleared.", - "warningTitle": "Warning", - "emptyMessageWarning": "Please enter a message before sending." + "responseLabel": "Response:", + "inferenceErrorTitle": "Inference Error", + "inferenceErrorMessage": "Failed to get inference result. Please try again.", + "classificationFailed": "Inference failed. Please try again.", + "closeButton": "Close" + }, + "budgetBanner": { + "productionDisabled": "Production LLM connection disabled", + "budgetExceededDescription": "{{platform}} integration has exceeded its budget. Update budget to reactivate LLM connection.", + "budgetUsageMessage": "{{percentage}}% of connection budget is used.", + "budgetUsageDescription": "{{platform}} integration has used {{percentage}}% of its budget. Review connection budget to avoid disconnections", + "reviewBudgetButton": "Review Budget", + "updateBudgetButton": "Update Budget", + "platforms": { + "aws": "AWS Bedrock", + "azure": "Azure OpenAI" + } } } \ No newline at end of file diff --git a/GUI/translations/et/common.json b/GUI/translations/et/common.json index 924845f..4c0e43a 100644 --- a/GUI/translations/et/common.json +++ b/GUI/translations/et/common.json @@ -6,6 +6,7 @@ "delete": "Kustuta", "cancel": "Tühista", "confirm": "Kinnita", + "continue": "Jätka", "modifiedAt": "Viimati muudetud", "addNew": "Lisa uus", "search": "Otsi", @@ -50,20 +51,18 @@ "sessionTimeOutDesc": "Pikendage oma sessiooni või logige rakendusest välja {{seconds}}", "close": "Sulge", "proceed": "Jätka", - "maxFileSize": "Faili suurus ei tohiks ületada 20 MB." + "maxFileSize": "Faili suurus ei tohiks ületada 20 MB.", + "select": "-Vali-", + "replace": "Asenda", + "clearFilters": "Puhasta Filtrid", + "showEntries": "Näita", + "entries": "kirjeid", + "deleteSelected": "Kustuta Valik" }, "menu": { "userManagement": "Kasutajate haldus", - "agencies": "Integreeritud asutused", - "dataSets": "Andmekogumid", - "datasetGroups": "Andmekogude grupid", - "validationSessions": "Valideerimine", - "dataModels": "Andmemudelid", - "models": "Mudelid", - "trainingSessions": "Treenimine", - "testModel": "Testmudel", - "stopWords": "Stop-sõnad", - "correctedTexts": "Parandatud tekstid" + "testLLM": "Testi LLM", + "llmConnections": "LLM Ühendused" }, "userManagement": { "title": "Kasutajate haldus", @@ -102,386 +101,303 @@ } }, - "integratedAgencies":{ - "title": "Integreeritud asutused", - "search":"Otsi asutust" -}, - - "integration": { - "title": "Integratsioon", - "jira": "Jira", - "outlook": "Outlook", - "jiraDesc": "Atlassiani teemade jälgimise ja projektide juhtimise tarkvara", - "outlookDesc": "Isikliku teabehalduri ja e-posti rakendus, mille on välja töötanud Microsoft", - "connected": "Ühendatud", - "disconnected": "Ühendus katkestatud", - "integrationErrorTitle": "Integratsioon ebaõnnestus", - "integrationErrorDesc": "Ebaõnnestus ühenduse loomine {{channel}}-iga. Palun kontrollige oma seadistusi ja proovige uuesti. Kui probleem püsib, võtke ühendust toe saamiseks.", - "integrationSuccessTitle": "Integratsioon edukas", - "integrationSuccessDesc": "Olete edukalt ühendatud {{channel}}-iga! Teie integratsioon on nüüd lõppenud ja saate alustada {{channel}}-iga sujuvat töötamist.", - "confirmationModalTitle": "Oled kindel?", - "disconnectConfirmationModalDesc": "Kas oled kindel, et soovid katkestada {{channel}} integratsiooni? See tegevus on pöördumatu ja võib mõjutada teie töövoogu ja seotud teemasid.", - "connectConfirmationModalDesc": "Kas oled kindel, et soovid luua ühenduse {{channel}}-iga? See tegevus on pöördumatu ja võib mõjutada teie töövoogu ja seotud teemasid.", - "disconnectErrorTitle": "Katkestamine ebaõnnestus", - "disconnectErrorDesc": "Ebaõnnestus {{channel}} katkestamine. Palun kontrollige oma seadistusi ja proovige uuesti. Kui probleem püsib, võtke ühendust toe saamiseks.", - "addUserButton": " Lisa kasutaja", - "addUser": { - "name": "Ees- ja perekonnanimi", - "namePlaceholder": "Sisesta nimi", - "role": "Roll", - "rolePlaceholder": "-Vali-", - "personalId": "Isiklik ID", - "personalIdPlaceholder": "Sisesta isiklik ID", - "title": "Ametinimetus", - "titlePlaceholder": "Sisesta ametinimetus", - "email": "E-post", - "emailPlaceholder": "Sisesta e-post" - } - }, "roles": { "ROLE_ADMINISTRATOR": "Administraator", "ROLE_MODEL_TRAINER": "Mudeli treener" }, "toast": { "success": { + "title": "Edu", "updateSuccess": "Uuendamine õnnestus", "copied": "Kopeeritud", "userDeleted": "Kasutaja kustutatud", "newUserAdded": "Uus kasutaja lisatud", "userUpdated": "Kasutaja uuendatud" + }, + "error": { + "title": "Viga" } }, - "datasetGroups": { - "title": "Andmestiku grupid", - "createDatasetGroupButton": "Loo andmestiku grupp", - "noDatasets": "Andmestike komplekte ei ole saadaval", + "dataModels": { + "settings": "Seaded", + "dataModels": "LLM Ühendused", + "noModels": "LLM ühendusi ei leitud", + "createModel": "Loo LLM Ühendus", + "productionConnections": "Tootmise LLM Ühendus", + "otherConnections": "Muud LLM Ühendused", "sortOptions": { - "datasetAsc": "Andmestiku grupi nimi A-Z", - "datasetDesc": "Andmestiku grupi nimi Z-A", - "createdDateAsc": "Loomise kuupäev vanim enne", - "createdDateDesc": "Loomise kuupäev uusim enne", - "lastUpdatedDateAsc": "Viimati uuendatud kuupäev, vanim enne", - "lastUpdatedDateDesc": "Viimati uuendatud kuupäev, uusim enne" + "createdDateNewest": "Loomise Kuupäev (Uusim)", + "createdDateOldest": "Loomise Kuupäev (Vanim)", + "platformAZ": "Platvorm A-Z", + "platformZA": "Platvorm Z-A", + "modelAZ": "Mudel A-Z", + "modelZA": "Mudel Z-A", + "budgetHighToLow": "Eelarve (Kõrgest Madalani)", + "budgetLowToHigh": "Eelarve (Madalast Kõrgeni)" }, - "table": { - "group": "Andmestiku grupp", - "version": "Versioon", - "validationStatus": "Valideerimise staatus", + "filters": { + "platform": "Platvorm", + "model": "Mudel", + "environment": "Keskkond", "sortBy": "Sorteeri", - "email": "E-post", - "actions": "Tegevused" + "allPlatforms": "Kõik Platvormid", + "allModels": "Kõik Mudelid", + "allEnvironments": "Kõik Keskkonnad" }, - "datasetCard": { - "validationFail": "Kontroll ebaõnnestus", - "validationSuccess": "Kontroll õnnestus", - "validationInprogress": "Kontroll on käimas", - "notValidated": "Ei ole kontrollitud", - "settings": "Seaded", - "lastModelTrained": "Viimane mudel treenitud", - "lastUsedForTraining": "Viimane kasutatud treenimiseks", - "lastUpdate": "Viimane uuendus", - "latest": "Viimased" + "platforms": { + "azure": "Azure OpenAI", + "aws": "AWS Bedrock" }, - "createDataset": { - "title": "Loo andmestiku grupp", - "datasetDetails": "Andmestiku üksikasjad", - "datasetName": "Andmestiku nimi", - "datasetInputPlaceholder": "Sisesta andmestiku nimi", - "validationCriteria": "Loo valideerimise kriteeriumid", - "fieldName": "Välja nimi", - "datasetType": "Andmestiku tüübid", - "dataClass": "Andmeklass", - "typeText": "Tekst", - "typeNumbers": "Numbrid", - "typeDateTime": "Kuupäev ja aeg", - "addClassButton": "Lisa klass", - "addNowButton": "Lisa nüüd", - "selectPlaceholder": "- Valige -" + "models": { + "gpt4Mini": "GPT-4 Mini", + "gpt4o": "GPT-4o", + "claude35Sonnet": "Anthropic Claude 3.5 Sonnet", + "claude37Sonnet": "Anthropic Claude 3.7 Sonnet" }, - "classHierarchy": { - "title": "Klassi hierarhia", - "addClassButton": "Lisa peamine klass", - "addSubClass": "Lisa alamklass", - "fieldHint": "Sisesta välja nimi", - "filedHintIfExists": "Klassi nimi juba olemas" + "environments": { + "testing": "Testimine", + "production": "Tootmine" }, - "modals": { - "deleteClassTitle": "Oled sa kindel?", - "deleteClaassDesc": "Kinnita, et soovid kustutada järgmise kirje", - "columnInsufficientHeader": "Andmestikus puuduvad veerud", - "columnInsufficientDescription": "Andmestikus peab olema vähemalt 2 veergu. Lisaks peab olema vähemalt üks veerg määratud andmeklassiks ja üks veerg, mis ei ole andmeklass. Palun kohanda oma andmestikku vastavalt.", - "classsesInsufficientHeader": "Andmestikus puuduvad klassid", - "classsesInsufficientDescription": "Andmestikus peab olema vähemalt 2 peamist klassi hierarhias", - "createDatasetSuccessTitle": "Andmestiku grupp loodud edukalt", - "createDatasetUnsuccessTitle": "Andmestiku grupi loomine ebaõnnestus", - "createDatasetSucceessDesc": "Oled edukalt loonud andmestiku grupi. Detailvaates saad nüüd andmestikku vaadata ja vajadusel redigeerida.", - "navigateDetailedViewButton": "Mine detailvaatesse", - "enableDatasetTitle": "Andmestiku grupi lülitamine ebaõnnestus", - "enableDatasetDesc": "Andmestiku gruppi ei saa aktiveerida, kuni andmed on lisatud. Palun lisa andmestikke sellesse gruppi ja proovi uuesti.", - "errorTitle": "Tegevus ebaõnnestus", - "errorDesc": "Midagi läks valesti. Palun proovi uuesti." + "budgetStatus": { + "withinBudget": "Eelarve Piires", + "overBudget": "Eelarve Ületatud", + "closeToExceed": "Lähedal Eelarve Ületamisele" + } + }, + "llmConnectionForm": { + "createTitle": "Loo LLM Ühendus", + "editTitle": "Redigeeri LLM Ühendust", + "sections": { + "llmConfiguration": "LLM Konfiguratsioon", + "embeddingConfiguration": "Sisestamismudeli Konfiguratsioon", + "budgetDeployment": "Eelarve ja Kasutuselevõtt" }, - "detailedView": { - "connectedModels": "Ühendatud mudelid", - "noOfItems": "Arv", - "export": "Eksporti andmestik", - "import": "Impordi andmestik", - "unsavedChangesWarning": "Oled teinud muudatusi andmestikus, mis ei ole salvestatud. Palun salvesta muudatused, et neid rakendada", - "insufficientExamplesDesc": "Näidisandmed puuduvad - andmestiku grupi aktiveerimiseks on vajalik vähemalt 10 näidist", - "noData": "Andmeid ei ole saadaval", - "noCorrectedTexts": "Parandatud tekste ei ole saadaval", - "noDataDesc": "Oled loonud andmestiku grupi, kuid andmeid, mida siin kuvada, pole saadaval. Saad üles laadida andmestiku, et vaadata seda siin. Kui andmed on lisatud, saad neid vajadusel redigeerida või kustutada.", - "importExamples": "Impordi näidised", - "importNewData": "Impordi uued andmed", - "majorUpdateBanner": "Oled värskendanud andmestiku skeemi olulisi seadistusi, mis ei ole salvestatud. Palun salvesta, et rakendada muudatusi. Kõik imporditud failid või olemasolevates andmetes tehtud muudatused kõrvaldatakse pärast muudatuste rakendamist", - "minorUpdateBanner": "Oled importinud andmestikku uusi andmeid, palun salvesta muudatused, et neid rakendada. Kõik individuaalsetele andmeelementidele tehtud muudatused kõrvaldatakse pärast muudatuste rakendamist", - "patchUpdateBanner": "Oled redigeerinud andmestikus individuaalseid elemente, mis ei ole salvestatud. Palun salvesta muudatused, et neid rakendada", - "confirmMajorUpdatesTitle": "Kinnita oluline värskendus", - "confirmMajorUpdatesDesc": "Kõik imporditud failid või olemasolevates andmetes tehtud muudatused kõrvaldatakse pärast muudatuste rakendamist", - "confirmMinorUpdatesTitle": "Kinnita värskendus", - "confirmMinorUpdatesDesc": "Kõik individuaalsetele andmeelementidele tehtud muudatused (patch värskendus) kõrvaldatakse pärast muudatuste rakendamist", - "confirmPatchUpdatesTitle": "Kinnita Patch värskendus", - "confirmPatchUpdatesDesc": "Muutunud andmeread uuendatakse andmestikus", - "patchDataUnsuccessfulTitle": "Patch andmete uuendamine ebaõnnestus", - "patchDataUnsuccessfulDesc": "Midagi läks valesti. Palun proovi uuesti.", - "exportDataSuccessTitle": "Andmete eksportimine õnnestus", - "exportDataSuccessDesc": "Sinu andmed on edukalt eksporditud.", - "exportDataUnsucessTitle": "Andmete eksportimine ebaõnnestus", - "exportDataUnsucessDesc": "Midagi läks valesti. Palun proovi uuesti.", - "ImportDataUnsucessTitle": "Andmete import ebaõnnestus", - "importDataUnsucessDesc": "Midagi läks valesti. Palun proovi uuesti.", - "validationInitiatedTitle": "Andmestik laaditi üles ja alustati kontrolli", - "validationInitiatedDesc": "Andmestiku fail laaditi edukalt üles. Kontroll ja eeltöötlus on nüüd alanud", - "viewValidations": "Vaata valideerimise sessioone", - "fieldName": "Sisesta välja nimi", - "fieldNameError": "{{name}} ei saa kasutada välja nime", - "fieldNameExist": "{{name}} on juba olemas välja nimeena", - "selectDataType": "Vali andme tüüp", - "table": { - "id": "rowId", - "data": "Andmed", - "label": "Märgis", - "actions": "Tegevused" + "fields": { + "connectionName": { + "label": "Ühenduse Nimi", + "description": "Unikaalne nimi selle LLM ühenduse tuvastamiseks", + "placeholder": "Sisesta ühenduse nimi (nt Azure GPT-4 Tootmine)" + }, + "llmPlatform": { + "label": "LLM Platvorm", + "description": "Pilve/kohalik platvorm, kus teie mudel on majutatud", + "placeholder": "Vali LLM Platvorm" + }, + "llmModel": { + "label": "LLM Mudel", + "description": "LLM mudel, mida soovite kasutada", + "placeholder": "Vali LLM Mudel" + }, + "embeddingPlatform": { + "label": "Sisestamismudeli Platvorm", + "description": "See on pilve/kohalik platvorm, kus teie sisestamismudel on majutatud", + "placeholder": "Vali Sisestamisplatvorm" + }, + "embeddingModel": { + "label": "Sisestamismudel", + "description": "Sisestamismudel, mida kasutatakse teie teadmistebaasi otsimiseks", + "placeholder": "Vali Sisestamismudel" + }, + "monthlyBudget": { + "label": "Kuueelarve", + "description": "Kogu kuueelarve sisestamismudeli ja LLM mudeli jaoks. Kui LLM integratsiooni kasutamise kulu ületab alljärgneva eelarve, vastab LLM 'mitteaktiivse' olekuga", + "placeholder": "Sisesta kuueelarve" + }, + "disconnectOnBudgetExceed": { + "label": "Katkesta LLM ühendus automaatselt, kui peatamise eelarve lävi on ületatud" + }, + "warnBudget": { + "label": "Hoiatuse Eelarve Lävi", + "description": "Saate teatise, kui teie kasutus jõuab sellise protsendini teie eraldatud kuueelarvest.", + "placeholder": "Sisesta hoiatuse eelarve lävi" }, - "validationsTitle": "Andmestiku grupi kontrollid", - "classHierarchy": "Klassi hierarhiad", - "delete": "Kusta andmestik", - "modals": { - "import": { - "title": "Impordi uusi andmeid", - "fileFormatlabel": "Vali faili formaat", - "attachments": "Lisad", - "maxSize": "Maksimaalne faili suurus - 10 MB", - "browse": "Sirvi faili", - "import": "Impordi", - "cancel": "Tühista", - "uploadInProgress": "Üleslaadimine käib...", - "uploadDesc": "Andmestiku üleslaadimine. Palun oota, kuni laadimine lõpeb. Kui tühistad poole pealt, kaovad andmed.", - "invalidFile": "Kehtetu faili formaat", - "invalidFileDesc": "Laaditud fail ei ole õiges {{format}} formaadis. Palun laadi üles kehtiv {{format}} fail ja proovi uuesti." - }, - "export": { - "export": "Ekspordi andmed", - "exportButton": "Ekspordi", - "fileFormatlabel": "Vali faili formaat", - "title": "Andmete eksportimine õnnestus", - "description": "Sinu andmed on edukalt eksporditud." - }, - "delete": { - "title": "Oled sa kindel?", - "description": "Kui kustutad andmestiku, muutuvad kõik sellega ühendatud mudelid treenimisvõimetuks. Kas oled kindel, et soovid jätkata?", - "error": "Andmestiku grupi kustutamine ebaõnnestus", - "errorDesc": "Andmekogumi rühma kustutamisel ilmnes probleem. Palun proovige uuesti. Kui probleem püsib, võtke abi saamiseks ühendust toega." - }, - "edit": { - "title": "Redigeeri", - "data": "Andmed", - "label": "Märgis", - "update": "Uuenda", - "error": "Andmestiku grupi uuendamine ebaõnnestus", - "errorDesc": "Andmekogumi rühma värskendamisel ilmnes probleem. Palun proovige uuesti. Kui probleem püsib, võtke abi saamiseks ühendust toega." - }, - "upload": { - "title": "Andmete üleslaadimine õnnestus", - "desc": "Andmestiku fail laaditi edukalt üles. Palun salvesta muudatused, et alustada andmete kontrollimist ja eeltöötlust" - }, - "datasetDelete": { - "confirmationTitle": "Oled sa kindel?", - "confirmationDesc": "Kinnita, et soovid kustutada andmestiku", - "successTitle": "Edu - andmestik kustutatud", - "successDesc": "Oled edukalt kustutanud andmestiku. Andmestik ei ole enam saadaval ja kõik seotud andmed on eemaldatud.", - "proceedToDashboard": "Jätkake andmekogumite gruppidega" - } + "stopBudget": { + "label": "Katkestamise Eelarve Lävi", + "description": "Teie LLM ühendus katkestatakse automaatselt ja kõik edaspidised päringud peatatakse, kui teie kasutus jõuab sellise protsendini teie kuueelarvest.", + "placeholder": "Sisesta peatamise eelarve lävi" + }, + "deploymentEnvironment": { + "label": "Kasutuselevõtu Keskkond" } - } - }, - "stopWords": { - "title": "Stop-sõnad", - "import": "Impordi stop-sõnad", - "stopWordInputHint": "Sisesta stop-sõna", - "add": "Lisa", - "importModal": { - "title": "Impordi stop-sõnu", - "importButton": "Impordi", - "selectionLabel": "Vali järgmine valik", - "addOption": "Impordi, et lisada", - "updateOption": "Impordi, et uuendada", - "deleteOption": "Impordi, et kustutada", - "attachements": "Lisad (TXT, XLSX, YAML, JSON)", - "inprogressTitle": "Importimine käib", - "inprogressDesc": "Stop-sõnade importimine käib. Palun oota, kuni protsess lõpeb.", - "successTitle": "Andmete importimine õnnestus", - "successDesc": "Sinu andmed on edukalt imporditud.", - "unsuccessTitle": "Andmete importimine ebaõnnestus", - "unsuccessDesc": "Stop-sõnade importimine ebaõnnestus" - } - }, - "validationSessions": { - "title": "Valideerimise sessioonid", - "inprogress": "Kontroll käib", - "fail": "Kontroll ebaõnnestus, kuna {{class}} klassi ei leitud {{column}} veerus hierarhias", - "noSessions": "Käimasolevaid valideerimissessioone pole saadaval" - }, - "correctedTexts": { - "title": "Parandatud tekstid", - "export": "Ekspordi andmed", - "searchIncomingText": "Otsi sissetulevaid tekste", - "filterAsc": "Filtreeri kuupäeva järgi - kasvav", - "filterDesc": "Filtreeri kuupäeva järgi - kahanev", - "platform": "Platvorm", - "dateAndTime": "Kuupäev & aeg", - "inferenceTime": "Järeldamise aeg", - "text": "Tekst", - "predictedHierarchy": "Prognoositud klassihierarhia", - "predictedConfidenceProbability": "Prognoositud klasside keskmine usaldusväärsuse tõenäosus", - "correctedHierarchy": "Parandatud klassihierarhia", - "correctedConfidenceProbability": "Parandatud klasside keskmine usaldusväärsuse tõenäosus", - "labelNotFoundText": "Märgistus ei ole andmekogumis", - "exportSuccessTitle": "Andmete eksportimine õnnestus", - "exportSuccessDesc": "Sinu andmed on edukalt eksporditud.", - "exportDataUnsucessTitle": "Andmete eksportimine ebaõnnestus", - "exportDataUnsucessDesc": "Midagi läks valesti. Palun proovi uuesti." - }, - "dataModels": { - "productionModels": "Toodangumudelid", - "dataModels": "Andmemudelid", - "createModel": "Loo mudel", - "noProdModels": "Toodangumudeleid pole saadaval", - "noModels": "Mudeleid pole saadaval", - "sortOptions": { - "dataModelAsc": "Andmemudeli nimi A-Z", - "dataModelDesc": "Andmemudeli nimi Z-A", - "createdDateAsc": "Loomise kuupäev vanim enne", - "createdDateDesc": "Loomise kuupäev uusim enne" }, - "filters": { - "modelName": "Mudeli nimi", - "version": "Versioon", - "platform": "Platvorm", - "datasetGroup": "Andmestiku grupp", - "trainingStatus": "Koolitusstaatus", - "maturity": "Valmidus", - "sort": "Sorteeri nime järgi (A - Z)" + "aws": { + "accessKey": { + "label": "Juurdepääsuvõti", + "description": "AWS juurdepääsuvõti Bedrock teenuse jaoks", + "placeholder": "Sisesta AWS juurdepääsuvõti" + }, + "secretKey": { + "label": "Salavõti", + "description": "AWS salavõti Bedrock teenuse jaoks", + "placeholder": "Sisesta AWS salavõti" + }, + "embeddingAccessKey": { + "label": "Sisestamise Juurdepääsuvõti", + "description": "AWS juurdepääsuvõti Bedrock sisestamise teenuse jaoks", + "placeholder": "Sisesta AWS juurdepääsuvõti sisestamiste jaoks" + }, + "embeddingSecretKey": { + "label": "Sisestamise Salavõti", + "description": "AWS salavõti Bedrock sisestamise teenuse jaoks", + "placeholder": "Sisesta AWS salavõti sisestamiste jaoks" + } + }, + "azure": { + "deploymentName": { + "label": "Kasutuselevõtu Nimi", + "description": "Azure OpenAI kasutuselevõtu nimi", + "placeholder": "Sisesta kasutuselevõtu nimi" + }, + "targetUri": { + "label": "Lõpp-punkt / Siht URI", + "description": "Azure OpenAI teenuse lõpp-punkti URL", + "placeholder": "https://your-resource.openai.azure.com/" + }, + "apiKey": { + "label": "API Võti", + "description": "Azure OpenAI API võti", + "placeholder": "Sisesta Azure OpenAI API võti" + }, + "embeddingDeploymentName": { + "label": "Sisestamise Kasutuselevõtu Nimi", + "description": "Azure OpenAI sisestamise kasutuselevõtu nimi", + "placeholder": "Sisesta sisestamise kasutuselevõtu nimi" + }, + "embeddingTargetUri": { + "label": "Sisestamise Lõpp-punkt / Siht URI", + "description": "Azure OpenAI sisestamise teenuse lõpp-punkti URL" + }, + "embeddingApiKey": { + "label": "Sisestamise API Võti", + "description": "Azure OpenAI sisestamise API võti", + "placeholder": "Sisesta Azure OpenAI sisestamise API võti" + } }, - "trainingStatus": { - "retrainingNeeded": "Treening uuesti vajalik", - "trained": "Treenitud", - "trainingInProgress": "Treening käib", - "untrainable": "Ei saa treenida", - "notTrained": "Ei ole treenitud" + "generic": { + "llmApiKey": { + "label": "LLM API Võti", + "description": "LLM mudeli API võti", + "placeholder": "Sisesta oma LLM API võti" + }, + "embeddingApiKey": { + "label": "Sisestamismudeli API Võti", + "description": "Teie sisestamismudeli API võti", + "placeholder": "Sisesta oma sisestamise API võti" + } }, - "maturity": { - "development": "Arenduses", - "production": "Toodangus", - "staging": "Staging", - "testing": "Testimine" + "placeholders": { + "loadingPlatforms": "Platvormide laadimine...", + "errorLoadingPlatforms": "Viga platvormide laadimisel", + "loadingModels": "Mudelite laadimine...", + "errorLoadingModels": "Viga mudelite laadimisel", + "selectPlatformFirst": "Vali esmalt platvorm" }, - "dataModelCard": { - "datasetGroup": "Andmestiku grupp", - "dgVersion": "Andmestiku grupi versioon", - "lastTrained": "Viimane treening" + "validationMessages": { + "connectionNameRequired": "Ühenduse nimi on kohustuslik", + "llmPlatformRequired": "LLM platvorm on kohustuslik", + "llmModelRequired": "LLM mudel on kohustuslik", + "embeddingPlatformRequired": "Sisestamismudeli platvorm on kohustuslik", + "embeddingModelRequired": "Sisestamismudel on kohustuslik", + "monthlyBudgetRequired": "Kuueelarve on kohustuslik", + "monthlyBudgetInvalid": "Palun sisesta kehtiv eelarve summa", + "monthlyBudgetPositive": "Kuueelarve peab olema positiivne arv", + "warnBudgetRequired": "Hoiatuse eelarve lävi on kohustuslik", + "warnBudgetRange": "Hoiatuse eelarve lävi peab olema vahemikus 1-100%", + "stopBudgetRequired": "Peatamise eelarve lävi on kohustuslik", + "stopBudgetRange": "Peatamise eelarve lävi peab olema vahemikus 1-200%", + "stopBudgetGreater": "Peatamise eelarve lävi peab olema suurem kui hoiatuse eelarve lävi", + "deploymentEnvironmentRequired": "Kasutuselevõtu keskkond on kohustuslik", + "numbersOnly": "Palun sisesta ainult numbrid", + "accessKeyRequiredAws": "Juurdepääsuvõti on AWS Bedrock jaoks kohustuslik", + "secretKeyRequiredAws": "Salavõti on AWS Bedrock jaoks kohustuslik", + "deploymentNameRequiredAzure": "Kasutuselevõtu nimi on Azure OpenAI jaoks kohustuslik", + "endpointRequiredAzure": "Lõpp-punkt on Azure OpenAI jaoks kohustuslik", + "apiKeyRequiredAzure": "API võti on Azure OpenAI jaoks kohustuslik", + "llmApiKeyRequired": "LLM API võti on kohustuslik", + "embeddingAccessKeyRequiredAws": "Sisestamise juurdepääsuvõti on AWS Bedrock jaoks kohustuslik", + "embeddingSecretKeyRequiredAws": "Sisestamise salavõti on AWS Bedrock jaoks kohustuslik", + "embeddingDeploymentNameRequiredAzure": "Sisestamise kasutuselevõtu nimi on Azure OpenAI jaoks kohustuslik", + "embeddingEndpointRequiredAzure": "Sisestamise lõpp-punkt on Azure OpenAI jaoks kohustuslik", + "embeddingApiKeyRequiredAzure": "Sisestamise API võti on Azure OpenAI jaoks kohustuslik", + "embeddingApiKeyRequired": "Sisestamise API võti on kohustuslik", + "invalidUrl": "Palun sisesta kehtiv URL, mis algab http:// või https://", + "failedToLoadPlatforms": "Platvormide laadimine ebaõnnestus", + "failedToLoadModels": "Mudelite laadimine ebaõnnestus" }, - "trainingResults": { - "title": "Treeningu tulemused", - "bestPerformingModel": "Parim esitusmudel", - "classes": "Klassid", - "accuracy": "Täpsus", - "f1Score": "F1 skoor", - "noResults": "Treeningu tulemusi pole saadaval", - "viewResults": "Vaata tulemusi" + "buttons": { + "deleteConnection": "Kustuta Ühendus", + "updateConnection": "Uuenda Ühendus", + "createConnection": "Loo Ühendus" }, - "createDataModel": { - "title": "Loo andmemudel", - "replaceTitle": "Hoiatus: asenda toodangumudel", - "replaceDesc": "Selle mudeli lisamine toodangusse asendab praeguse toodangumudeli. Kas oled kindel, et soovid jätkata?", - "successTitle": "Andmemudel loodud ja treeninguga alustatud", - "successDesc": "Oled edukalt loonud ja alustanud andmemudeli treenimist. Sa saad seda vaadata andmemudeli töölaualt.", - "viewAll": "Vaata kõiki andmemudeleid", - "errorTitle": "Viga andmemudeli loomisel", - "errorDesc": "Tekkis probleem andmemudeli loomise või koolitamise käigus. Palun proovi uuesti. Kui probleem püsib, võta ühendust toega.", - "replaceWarning": "{{platform}} integratsioon on hetkel keelatud, seega mudel ei saa mingeid sisendeid ega tee ennustusi" + "environments": { + "testing": "Testimine", + "production": "Tootmine" }, - "configureDataModel": { - "saveChangesTitile": "Muudatused on edukalt salvestatud", - "saveChangesDesc": "Oled edukalt salvestanud muudatused. Saad andmemudelit vaadata „Kõik Andmemudelid“ vaates.", - "updateErrorTitile": "Viga Andmemudeli Uuendamisel", - "updateErrorDesc": "Tekkis probleem andmemudeli uuendamise käigus. Palun proovi uuesti. Kui probleem püsib, võta ühendust toega.", - "deleteErrorTitle": "Mudelit ei saaks kustutada", - "deleteErrorDesc": "Mudelit ei saa kustutada, kuna see on praegu toodangus. Palun edasta teine mudel toodangusse enne, kui jätkad selle mudeli kustutamist.", - "deleteConfirmation": "Kas oled kindel?", - "deleteConfirmationDesc": "Kinnita, et soovid kustutada andmemudeli", - "deleteModalErrorTitle": "Viga andmemudeli kustutamisel", - "deleteModalErrorDesc": "Andmemudeli kustutamise käigus tekkis probleem. Palun proovi uuesti. Kui probleem püsib, võta ühendust toega.", - "retrainDataModalErrorTitle": "Viga andmemudeli uuesti treenimisel", - "retrainDataModalErrorDesc": "Andmemudeli uuesti koolitamise käigus tekkis probleem. Palun proovi uuesti. Kui probleem püsib, võta ühendust toega.", - "title": "Seadista andmemudel", - "retrainCard": "Mudel uuendatud. Palun alusta uuesti koolitamist, et jätkata uusimate täiustuste saamist.", - "retrain": "Treeni uuesti", - "deleteModal": "Kustuta mudel", - "confirmRetrain": "Kinnita mudeli treenimine", - "confirmRetrainDesc": "Kas oled kindel, et soovid seda mudelit uuesti treenida?", - "save": "Salvesta muudatused" + "createConnection": { + "title": "Loo LLM Ühendus", + "successDialogTitle": "Ühendus Õnnestus", + "successDialogMessage": "Esitatud LLM konfiguratsioon on edukalt konfigureeritud", + "viewConnectionsButton": "Vaata LLM Ühendusi", + "errorDialogTitle": "Ühendus Ebaõnnestus", + "errorDialogMessage": "Ühendust ei saanud luua kas vigaste API mandaatide või kasutuselevõtu platvormi valekonfiguratsiooni tõttu", + "goBackButton": "Mine Tagasi", + "replaceProductionDialogTitle": "Asenda Tootmisühendus", + "replaceProductionDialogMessage": "Tootmisühendus \"{connectionName}\" on juba olemas.", + "replaceProductionDialogWarning": "Selle uue tootmisühenduse loomine asendab praeguse. Kas oled kindel, et soovid jätkata?", + "cancelButton": "Tühista", + "confirmReplaceButton": "Jah, Asenda Tootmisühendus" }, - "dataModelForm": { - "modelVersion": "Mudeli versioon", - "datasetGroup": "Vali andmestiku grupp", - "baseModels": "Vali baasmudelid", - "deploymentPlatform": "Vali rakenduse platvorm", - "maturityLabel": "Vali valmiduse silt" + "viewConnection": { + "updateSuccessTitle": "Ühenduse Uuendamine Õnnestus", + "updateSuccessMessage": "LLM konfiguratsioon uuendati edukalt!", + "updateErrorTitle": "Ühenduse Uuendamine Ebaõnnestus", + "updateErrorMessage": "LLM ühenduse uuendamine ebaõnnestus. Palun proovi uuesti.", + "deleteSuccessTitle": "Ühenduse Kustutamine Õnnestus", + "deleteSuccessMessage": "LLM ühendus kustutati edukalt!", + "deleteErrorTitle": "Viga", + "deleteErrorMessage": "LLM ühenduse kustutamine ebaõnnestus. Palun proovi uuesti.", + "viewConnectionsButton": "Vaata LLM Ühendusi", + "goBackButton": "Mine Tagasi", + "confirmEnvironmentChangeTitle": "Kinnita Tootmiskeskkonna Muutus", + "confirmEnvironmentChangeMessage": "Oled tootmisühendust muutmas testimiskeskkonnaks.", + "confirmEnvironmentChangeWarning": "See mõjutab praegust tootmisseadistust. Kas oled kindel, et soovid jätkata?", + "cancelButton": "Tühista", + "confirmChangeButton": "Jah, Muuda Keskkonda", + "cannotDeleteProductionTitle": "Ei Saa Kustutada Tootmisühendust", + "cannotDeleteProductionMessage": "See LLM ühendus on praegu määratud tootmisühendusena ja seda ei saa kustutada.", + "cannotDeleteProductionInstructions": "Selle ühenduse kustutamiseks veendu, et mõni teine ühendus on määratud tootmisühendusena.", + "confirmDeleteTitle": "Kinnita Kustutamine", + "confirmDeleteMessage": "Kas oled kindel, et soovid selle LLM ühenduse kustutada? Seda tegevust ei saa tagasi võtta.", + "deleteButton": "Kustuta", + "okButton": "OK", + "connectionNotFoundTitle": "Ühendust Ei Leitud", + "connectionNotFoundMessage": "Soovitud LLM ühendust ei leitud." } }, - "trainingSessions": { - "title": "Treening-sessioonid", - "inprogress": "Treening käib", - "fail": "Treening ebaõnnestus, kuna {{class}} klass, mida leiti {{column}} veerust, ei eksisteeri hierarhias", - "noSessions": "Aktiivsed treeningsessioonid puuduvad", - "noSessionsDesc": "Praegu ei ole ühtegi aktiivset treeningsessiooni. Kui alustate treeningsessiooni, ilmub see siia. Seniks saate alustada uue treeningsessiooniga, et alustada oma mudelite täiustamist." - }, "testModels": { - "title": "Testige mudelit", - "selectionLabel": "Mudel", - "placeholder": "Valige mudel", - "classifyTextLabel": "Sisestage tekst", - "classify": "Klassifitseeri", - "predictedHierarchy": "Prognoositud klassihierarhia: ", - "averageConfidence": "Keskmine kindlus: ", - "classProbabilities": "Klassi tõenäosused: " + "title": "Testi LLM", + "llmConnectionLabel": "LLM Ühendus", + "selectConnectionPlaceholder": "Vali LLM Ühendus", + "connectionNotExist": "Ühendus ei eksisteeri", + "classifyTextLabel": "Sisesta tekst testimiseks", + "sendButton": "Saada", + "sendingButton": "Saatmine...", + "responseLabel": "Vastus:", + "inferenceErrorTitle": "Järeldamise Viga", + "inferenceErrorMessage": "Järeldamise tulemuse saamine ebaõnnestus. Palun proovi uuesti.", + "classificationFailed": "Järeldamine ebaõnnestus. Palun proovi uuesti.", + "closeButton": "Sulge" }, - "optionLists": { - "text": "Tekst", - "numbers": "Numbrid", - "dateTimes": "Kuupäev ja kellaaeg", - "email": "E-posti aadress", - "fileAttachements": "Faili lisad", - "importToAdd": "Impordi lisamiseks", - "importToDelete": "Impordi kustutamiseks", - "userManagement": "Kasutajate haldus", - "integration": "Integreerimine", - "dataset": "Andmekogum", - "dataModels": "Andmemudelid", - "classes": "Klassid", - "stopWords": "Stop-sõnad", - "incomingTexts": "Sissetulevad tekstid", - "testModel": "Testi mudelit" + "budgetBanner": { + "productionDisabled": "Tootmise LLM ühendus keelatud", + "budgetExceededDescription": "{{platform}} integratsioon on oma eelarve ületanud. Uuenda eelarvet LLM ühenduse taasaktiveerimiseks.", + "budgetUsageMessage": "{{percentage}}% ühenduse eelarvest on kasutatud.", + "budgetUsageDescription": "{{platform}} integratsioon on kasutanud {{percentage}}% oma eelarvest. Vaata üle ühenduse eelarve, et vältida katkestusi", + "reviewBudgetButton": "Vaata Eelarvet", + "updateBudgetButton": "Uuenda Eelarvet", + "platforms": { + "aws": "AWS Bedrock", + "azure": "Azure OpenAI" + } } -} +} \ No newline at end of file diff --git a/src/optimization/optimizers/generator_optimizer.py b/src/optimization/optimizers/generator_optimizer.py index f19dc23..93743c5 100644 --- a/src/optimization/optimizers/generator_optimizer.py +++ b/src/optimization/optimizers/generator_optimizer.py @@ -144,9 +144,7 @@ def optimize_generator( logger.info(f"Running bootstrap with {len(bootstrap_trainset)} examples...") try: - module_v1 = bootstrap.compile( - student=base_module, trainset=bootstrap_trainset - ) + bootstrap.compile(student=base_module, trainset=bootstrap_trainset) bootstrap_time = (datetime.now() - bootstrap_start).total_seconds() phase_times["bootstrap"] = bootstrap_time @@ -155,10 +153,8 @@ def optimize_generator( except Exception as e: logger.warning(f"Bootstrap failed: {e}, continuing with base module") - module_v1 = base_module phase_times["bootstrap"] = 0 else: - module_v1 = base_module phase_times["bootstrap"] = 0 # Phase 2: MIPROv2 diff --git a/src/optimization/optimizers/refiner_optimizer.py b/src/optimization/optimizers/refiner_optimizer.py index f5ea391..526ab9d 100644 --- a/src/optimization/optimizers/refiner_optimizer.py +++ b/src/optimization/optimizers/refiner_optimizer.py @@ -148,9 +148,7 @@ def optimize_refiner( logger.info(f"Running bootstrap with {len(bootstrap_trainset)} examples...") try: - module_v1 = bootstrap.compile( - student=base_module, trainset=bootstrap_trainset - ) + bootstrap.compile(student=base_module, trainset=bootstrap_trainset) bootstrap_time = (datetime.now() - bootstrap_start).total_seconds() phase_times["bootstrap"] = bootstrap_time @@ -159,12 +157,9 @@ def optimize_refiner( except Exception as e: logger.warning(f"Bootstrap failed: {e}, continuing with base module") - module_v1 = base_module phase_times["bootstrap"] = 0 else: - module_v1 = base_module phase_times["bootstrap"] = 0 - # Phase 2: MIPROv2 logger.info("Phase 2: MIPROv2 optimization with LLM Judge") mipro_start = datetime.now()