Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default function OpenAIAddonConfigScreen({
openAIApiKey,
selectedModel,
temperature,
maxTokens,
maxCompletionTokens,
topP,
prompt,
} = useOpenAIConfigFields({ ctx })
Expand All @@ -38,7 +38,7 @@ export default function OpenAIAddonConfigScreen({
error={error}
selectedModel={selectedModel}
temperature={temperature}
maxTokens={maxTokens}
maxCompletionTokens={maxCompletionTokens}
topP={topP}
prompt={prompt}
/>
Expand Down
16 changes: 8 additions & 8 deletions src/components/OpenAI/OpenAIConfigFields/OpenAIConfigFields.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ type OpenAIConfigFieldsProps = {
error: string
selectedModel: SettingOption<string>
temperature: number
maxTokens: number
maxCompletionTokens: number
topP: number
prompt: string
}
Expand All @@ -23,7 +23,7 @@ export default function OpenAIConfigFields({
openAIApiKey,
selectedModel,
temperature,
maxTokens,
maxCompletionTokens,
topP,
prompt,
}: OpenAIConfigFieldsProps) {
Expand Down Expand Up @@ -74,12 +74,12 @@ export default function OpenAIConfigFields({
/>

<TextField
name="maxTokens"
id="maxTokens"
label="Max Tokens"
name="maxCompletionTokens"
id="maxCompletionTokens"
label="Max Completion Tokens"
hint="The maximum number of tokens to generate in the completion. The exact limit varies per model."
placeholder="100"
value={maxTokens}
value={maxCompletionTokens}
textInputProps={{
type: 'number',
min: 0,
Expand All @@ -88,7 +88,7 @@ export default function OpenAIConfigFields({
}}
onChange={(newValue) => {
updateParametersFn({
maxTokens: Number(newValue),
maxCompletionTokens: Number(newValue),
})
}}
/>
Expand Down Expand Up @@ -116,7 +116,7 @@ export default function OpenAIConfigFields({
openAIApiKey={openAIApiKey}
selectedModel={selectedModel}
temperature={temperature}
maxTokens={maxTokens}
maxCompletionTokens={maxCompletionTokens}
topP={topP}
value={prompt}
onBlur={(newValue) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export default function OpenAIConfigScreen({ ctx }: OpenAIConfigScreenProps) {
openAIApiKey,
selectedModel,
temperature,
maxTokens,
maxCompletionTokens,
topP,
prompt,
} = useOpenAIConfigFields({ ctx })
Expand All @@ -37,7 +37,7 @@ export default function OpenAIConfigScreen({ ctx }: OpenAIConfigScreenProps) {
error={error}
selectedModel={selectedModel}
temperature={temperature}
maxTokens={maxTokens}
maxCompletionTokens={maxCompletionTokens}
topP={topP}
prompt={prompt}
/>
Expand Down
6 changes: 3 additions & 3 deletions src/components/PromptTextareaField/PromptTextareaField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ type PromptTextareaFieldProps = {
openAIApiKey: string
selectedModel: SettingOption<string>
temperature: number
maxTokens: number
maxCompletionTokens: number
topP: number
value: string
onBlur: (newValue: string) => void
Expand All @@ -21,7 +21,7 @@ export default function PromptTextareaField({
openAIApiKey,
selectedModel,
temperature,
maxTokens,
maxCompletionTokens,
topP,
value,
onBlur,
Expand Down Expand Up @@ -59,7 +59,7 @@ export default function PromptTextareaField({
openAIOptions: {
model: selectedModel.value,
temperature,
maxTokens,
maxCompletionTokens,
topP,
prompt,
},
Expand Down
25 changes: 19 additions & 6 deletions src/entrypoints/FieldAddon/FieldAddon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 ??
Expand Down Expand Up @@ -158,7 +158,7 @@ export default function FieldAddon({ ctx }: Props) {
openAIOptions: {
model: modelValue,
temperature,
maxTokens,
maxCompletionTokens,
topP,
prompt,
},
Expand Down Expand Up @@ -243,7 +243,20 @@ export default function FieldAddon({ ctx }: Props) {
if (hasError) {
return (
<Canvas ctx={ctx}>
<p className="text-error body--small">{hasError}</p>
<p className="text-error body--small">
{hasError}
&nbsp; &nbsp;
<Button
className="text-underline"
buttonSize="xxs"
onClick={() => {
setHasError('')
translateField([currentLocale], locales[0])
}}
>
Retry
</Button>
</p>
</Canvas>
)
}
Expand Down
10 changes: 5 additions & 5 deletions src/hooks/useOpenAIConfigFields.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 ??
Expand Down Expand Up @@ -119,7 +119,7 @@ export function useOpenAIConfigFields({
openAIApiKey,
selectedModel,
temperature,
maxTokens,
maxCompletionTokens,
topP,
prompt,
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/translation-services/openAI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}),
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/translation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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}}",
Expand Down
6 changes: 3 additions & 3 deletions src/lib/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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}}",
}
Expand All @@ -69,7 +69,7 @@ export type Parameters = {
translationService?: SettingOption<TranslationService>
model?: SettingOption<string>
temperature?: number
maxTokens?: number
maxCompletionTokens?: number
topP?: number
prompt?: string
deeplGlossaryId?: string
Expand Down Expand Up @@ -107,7 +107,7 @@ export type TranslationOptions = {
openAIOptions: {
model: string
temperature: number
maxTokens: number
maxCompletionTokens: number
topP: number
prompt: string
}
Expand Down
4 changes: 4 additions & 0 deletions src/styles/typography.css
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ strong,
color: var(--alert-color);
}

.text-underline {
text-decoration: underline;
}

pre,
.code {
font-family: var(--monospaced-font-family);
Expand Down