From 2635e07bf035126ba41b749bdc5f8d2a11f40cac Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 5 Apr 2026 12:57:19 +0100 Subject: [PATCH] fix(openai): add multilingual gpt ack prompts --- .../run.incomplete-turn.test.ts | 10 +++++++ .../pi-embedded-runner/run/incomplete-turn.ts | 28 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts b/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts index 32488112734..e258a432495 100644 --- a/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts +++ b/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts @@ -109,6 +109,16 @@ describe("runEmbeddedPiAgent incomplete-turn safety", () => { expect(isLikelyExecutionAckPrompt("Can you do it?")).toBe(false); }); + it("detects short execution approvals across requested locales", () => { + expect(isLikelyExecutionAckPrompt("نفذها")).toBe(true); + expect(isLikelyExecutionAckPrompt("mach es")).toBe(true); + expect(isLikelyExecutionAckPrompt("進めて")).toBe(true); + expect(isLikelyExecutionAckPrompt("fais-le")).toBe(true); + expect(isLikelyExecutionAckPrompt("adelante")).toBe(true); + expect(isLikelyExecutionAckPrompt("vai em frente")).toBe(true); + expect(isLikelyExecutionAckPrompt("진행해")).toBe(true); + }); + it("adds an ack-turn fast-path instruction for GPT action turns", () => { const instruction = resolveAckExecutionFastPathInstruction({ provider: "openai", diff --git a/src/agents/pi-embedded-runner/run/incomplete-turn.ts b/src/agents/pi-embedded-runner/run/incomplete-turn.ts index 8792daac534..a4660d6e57e 100644 --- a/src/agents/pi-embedded-runner/run/incomplete-turn.ts +++ b/src/agents/pi-embedded-runner/run/incomplete-turn.ts @@ -49,6 +49,31 @@ const ACK_EXECUTION_NORMALIZED_SET = new Set([ "make it so", "yes do it", "yep do it", + "تمام", + "حسنا", + "حسنًا", + "امض قدما", + "نفذها", + "mach es", + "leg los", + "los geht s", + "weiter", + "やって", + "進めて", + "そのまま進めて", + "allez y", + "vas y", + "fais le", + "continue", + "hazlo", + "adelante", + "sigue", + "faz isso", + "vai em frente", + "pode fazer", + "해줘", + "진행해", + "계속해", ]); export const PLANNING_ONLY_RETRY_INSTRUCTION = @@ -113,9 +138,10 @@ function shouldApplyPlanningOnlyRetryGuard(params: { function normalizeAckPrompt(text: string): string { return text + .normalize("NFKC") .trim() .toLowerCase() - .replace(/[`"'.,!?]+/g, " ") + .replace(/[\p{P}\p{S}]+/gu, " ") .replace(/\s+/g, " ") .trim(); }