From ccd9d15fdae67a998af8cfe5e1e6268ec1ddf7ae Mon Sep 17 00:00:00 2001 From: uinstinct <61635505+uinstinct@users.noreply.github.com> Date: Tue, 10 Feb 2026 12:18:33 +0530 Subject: [PATCH 1/2] fix: validate unicode in model apikey or headers --- packages/config-yaml/src/validation.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/config-yaml/src/validation.ts b/packages/config-yaml/src/validation.ts index 874eb3ad89..99985ab314 100644 --- a/packages/config-yaml/src/validation.ts +++ b/packages/config-yaml/src/validation.ts @@ -12,6 +12,10 @@ export interface ConfigResult { configLoadInterrupted: boolean; } +function containsUnicode(str: string): boolean { + return /[^\x00-\x7F]/.test(str); +} + export function validateConfigYaml( config: ConfigYaml, ): ConfigValidationError[] { @@ -32,6 +36,25 @@ export function validateConfigYaml( if ("uses" in model) { return; } + + // request headers to the llm api should not contain unicode characters + if (model.apiKey && containsUnicode(model.apiKey)) { + errors.push({ + fatal: true, + message: `Model "${model.name}" has an API key containing unicode characters. API keys should only contain ASCII characters.`, + }); + } + + if (model.requestOptions?.headers) { + for (const [key, value] of Object.entries(model.requestOptions.headers)) { + if (containsUnicode(value)) { + errors.push({ + fatal: true, + message: `Model "${model.name}" has a request header "${key}" containing unicode characters. Request headers should only contain ASCII characters.`, + }); + } + } + } // Max tokens not too close to context length if ( model.defaultCompletionOptions?.contextLength && From 81607110974eaf69f3d936fc92d604faaa62eba0 Mon Sep 17 00:00:00 2001 From: Aditya Mitra <61635505+uinstinct@users.noreply.github.com> Date: Wed, 11 Feb 2026 10:11:34 +0530 Subject: [PATCH 2/2] Update packages/config-yaml/src/validation.ts Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --- packages/config-yaml/src/validation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/config-yaml/src/validation.ts b/packages/config-yaml/src/validation.ts index 99985ab314..b6378f12e8 100644 --- a/packages/config-yaml/src/validation.ts +++ b/packages/config-yaml/src/validation.ts @@ -47,7 +47,7 @@ export function validateConfigYaml( if (model.requestOptions?.headers) { for (const [key, value] of Object.entries(model.requestOptions.headers)) { - if (containsUnicode(value)) { + if (containsUnicode(key) || containsUnicode(value)) { errors.push({ fatal: true, message: `Model "${model.name}" has a request header "${key}" containing unicode characters. Request headers should only contain ASCII characters.`,