diff --git a/changelog.md b/changelog.md index 8a970bf..9736d84 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and follows [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.15.0] - 2025-09-16 +### Added +- Retry button for failed API calls next to the error message +### Fixed +- deprecated `max_tokens` parameter in OpenAI API is replaced with `max_completion_tokens` and changed label + ## [1.14.1] - 2025-09-01 ### Fixed - Cases where structured fields have a different structure diff --git a/package-lock.json b/package-lock.json index e037ec9..87a5500 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "datocms-plugin-translate-fields", - "version": "1.14.1", + "version": "1.15.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "datocms-plugin-translate-fields", - "version": "1.14.1", + "version": "1.15.0", "license": "ISC", "dependencies": { "@types/jest": "^29.5.6", diff --git a/package.json b/package.json index 34d8f48..002c6bd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "datocms-plugin-translate-fields", "homepage": "https://github.com/voorhoede/datocms-plugin-translate-fields", - "version": "1.14.1", + "version": "1.15.0", "description": "A DatoCMS plugin that gives you the ability to translate `structured-text`, `rich-text`, `string`, `text`, `seo` and `slug` fields in DatoCMS", "engines": { "node": ">=18.0.0" diff --git a/src/components/OpenAI/OpenAIAddonConfigScreen/OpenAIAddonConfigScreen.tsx b/src/components/OpenAI/OpenAIAddonConfigScreen/OpenAIAddonConfigScreen.tsx index 85f2961..fe258dd 100644 --- a/src/components/OpenAI/OpenAIAddonConfigScreen/OpenAIAddonConfigScreen.tsx +++ b/src/components/OpenAI/OpenAIAddonConfigScreen/OpenAIAddonConfigScreen.tsx @@ -17,7 +17,7 @@ export default function OpenAIAddonConfigScreen({ openAIApiKey, selectedModel, temperature, - maxTokens, + maxCompletionTokens, topP, prompt, } = useOpenAIConfigFields({ ctx }) @@ -38,7 +38,7 @@ export default function OpenAIAddonConfigScreen({ error={error} selectedModel={selectedModel} temperature={temperature} - maxTokens={maxTokens} + maxCompletionTokens={maxCompletionTokens} topP={topP} prompt={prompt} /> diff --git a/src/components/OpenAI/OpenAIConfigFields/OpenAIConfigFields.tsx b/src/components/OpenAI/OpenAIConfigFields/OpenAIConfigFields.tsx index 8f4256f..cf74d21 100644 --- a/src/components/OpenAI/OpenAIConfigFields/OpenAIConfigFields.tsx +++ b/src/components/OpenAI/OpenAIConfigFields/OpenAIConfigFields.tsx @@ -10,7 +10,7 @@ type OpenAIConfigFieldsProps = { error: string selectedModel: SettingOption temperature: number - maxTokens: number + maxCompletionTokens: number topP: number prompt: string } @@ -23,7 +23,7 @@ export default function OpenAIConfigFields({ openAIApiKey, selectedModel, temperature, - maxTokens, + maxCompletionTokens, topP, prompt, }: OpenAIConfigFieldsProps) { @@ -74,12 +74,12 @@ export default function OpenAIConfigFields({ /> { updateParametersFn({ - maxTokens: Number(newValue), + maxCompletionTokens: Number(newValue), }) }} /> @@ -116,7 +116,7 @@ export default function OpenAIConfigFields({ openAIApiKey={openAIApiKey} selectedModel={selectedModel} temperature={temperature} - maxTokens={maxTokens} + maxCompletionTokens={maxCompletionTokens} topP={topP} value={prompt} onBlur={(newValue) => { diff --git a/src/components/OpenAI/OpenAIConfigScreen/OpenAIConfigScreen.tsx b/src/components/OpenAI/OpenAIConfigScreen/OpenAIConfigScreen.tsx index b9bec65..74d1875 100644 --- a/src/components/OpenAI/OpenAIConfigScreen/OpenAIConfigScreen.tsx +++ b/src/components/OpenAI/OpenAIConfigScreen/OpenAIConfigScreen.tsx @@ -15,7 +15,7 @@ export default function OpenAIConfigScreen({ ctx }: OpenAIConfigScreenProps) { openAIApiKey, selectedModel, temperature, - maxTokens, + maxCompletionTokens, topP, prompt, } = useOpenAIConfigFields({ ctx }) @@ -37,7 +37,7 @@ export default function OpenAIConfigScreen({ ctx }: OpenAIConfigScreenProps) { error={error} selectedModel={selectedModel} temperature={temperature} - maxTokens={maxTokens} + maxCompletionTokens={maxCompletionTokens} topP={topP} prompt={prompt} /> diff --git a/src/components/PromptTextareaField/PromptTextareaField.tsx b/src/components/PromptTextareaField/PromptTextareaField.tsx index 36e864c..7e5b056 100644 --- a/src/components/PromptTextareaField/PromptTextareaField.tsx +++ b/src/components/PromptTextareaField/PromptTextareaField.tsx @@ -11,7 +11,7 @@ type PromptTextareaFieldProps = { openAIApiKey: string selectedModel: SettingOption temperature: number - maxTokens: number + maxCompletionTokens: number topP: number value: string onBlur: (newValue: string) => void @@ -21,7 +21,7 @@ export default function PromptTextareaField({ openAIApiKey, selectedModel, temperature, - maxTokens, + maxCompletionTokens, topP, value, onBlur, @@ -59,7 +59,7 @@ export default function PromptTextareaField({ openAIOptions: { model: selectedModel.value, temperature, - maxTokens, + maxCompletionTokens, topP, prompt, }, diff --git a/src/entrypoints/FieldAddon/FieldAddon.tsx b/src/entrypoints/FieldAddon/FieldAddon.tsx index 68f42f6..9355fbd 100644 --- a/src/entrypoints/FieldAddon/FieldAddon.tsx +++ b/src/entrypoints/FieldAddon/FieldAddon.tsx @@ -77,10 +77,10 @@ export default function FieldAddon({ ctx }: Props) { pluginGlobalParameters.temperature ?? OpenAIDefaultValues.temperature - const maxTokens = - pluginParameters.maxTokens ?? - pluginGlobalParameters.maxTokens ?? - OpenAIDefaultValues.maxTokens + const maxCompletionTokens = + pluginParameters.maxCompletionTokens ?? + pluginGlobalParameters.maxCompletionTokens ?? + OpenAIDefaultValues.maxCompletionTokens const topP = pluginParameters.topP ?? @@ -158,7 +158,7 @@ export default function FieldAddon({ ctx }: Props) { openAIOptions: { model: modelValue, temperature, - maxTokens, + maxCompletionTokens, topP, prompt, }, @@ -243,7 +243,20 @@ export default function FieldAddon({ ctx }: Props) { if (hasError) { return ( -

{hasError}

+

+ {hasError} +     + +

) } diff --git a/src/hooks/useOpenAIConfigFields.ts b/src/hooks/useOpenAIConfigFields.ts index a314fe3..1066d41 100644 --- a/src/hooks/useOpenAIConfigFields.ts +++ b/src/hooks/useOpenAIConfigFields.ts @@ -72,10 +72,10 @@ export function useOpenAIConfigFields({ pluginGlobalParameters.temperature ?? OpenAIDefaultValues.temperature - const maxTokens = - pluginParameters?.maxTokens ?? - pluginGlobalParameters.maxTokens ?? - OpenAIDefaultValues.maxTokens + const maxCompletionTokens = + pluginParameters?.maxCompletionTokens ?? + pluginGlobalParameters.maxCompletionTokens ?? + OpenAIDefaultValues.maxCompletionTokens const topP = pluginParameters?.topP ?? @@ -119,7 +119,7 @@ export function useOpenAIConfigFields({ openAIApiKey, selectedModel, temperature, - maxTokens, + maxCompletionTokens, topP, prompt, } diff --git a/src/lib/translation-services/openAI.ts b/src/lib/translation-services/openAI.ts index 823de0a..ea55669 100644 --- a/src/lib/translation-services/openAI.ts +++ b/src/lib/translation-services/openAI.ts @@ -20,7 +20,7 @@ export default async function translate( messages: [{ role: 'user', content: prompt }], model: options.openAIOptions.model, temperature: options.openAIOptions.temperature, - max_tokens: options.openAIOptions.maxTokens, + max_completion_tokens: options.openAIOptions.maxCompletionTokens, top_p: options.openAIOptions.topP, }), } diff --git a/src/lib/translation.test.ts b/src/lib/translation.test.ts index 8e642c5..e7f5f0d 100644 --- a/src/lib/translation.test.ts +++ b/src/lib/translation.test.ts @@ -10,7 +10,7 @@ const tranlationOptions = { openAIOptions: { model: 'text-davinci-003', temperature: 0, - maxTokens: 100, + maxCompletionTokens: 100, topP: 0, prompt: "Translate the following from the locale '{{fromLocale}}' to the locale '{{toLocale}}': {{value}}", diff --git a/src/lib/types.ts b/src/lib/types.ts index 852371c..605a2c2 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -51,7 +51,7 @@ export enum TranslationServiceKey { export enum OpenAIDefaultValues { model = 'text-davinci-003', temperature = 0, - maxTokens = 100, + maxCompletionTokens = 100, topP = 0, prompt = "Translate the following from the locale '{{fromLocale}}' to the locale '{{toLocale}}': {{value}}", } @@ -69,7 +69,7 @@ export type Parameters = { translationService?: SettingOption model?: SettingOption temperature?: number - maxTokens?: number + maxCompletionTokens?: number topP?: number prompt?: string deeplGlossaryId?: string @@ -107,7 +107,7 @@ export type TranslationOptions = { openAIOptions: { model: string temperature: number - maxTokens: number + maxCompletionTokens: number topP: number prompt: string } diff --git a/src/styles/typography.css b/src/styles/typography.css index b2ec697..65267ef 100644 --- a/src/styles/typography.css +++ b/src/styles/typography.css @@ -51,6 +51,10 @@ strong, color: var(--alert-color); } +.text-underline { + text-decoration: underline; +} + pre, .code { font-family: var(--monospaced-font-family);