fix(pi): recover from Works prompt rejection

This commit is contained in:
2026-08-25 14:50:10 +08:00
parent 4580568384
commit 5f0ef761ea
9 changed files with 439 additions and 31 deletions

View File

@@ -43,6 +43,7 @@ export interface PiProviderModelDescriptor {
compat?: {
thinkingFormat?: 'deepseek' | 'openrouter';
sessionAffinityFormat?: 'openrouter';
supportsDeveloperRole?: boolean;
requiresReasoningContentOnAssistantMessages?: boolean;
};
thinkingLevelMap?: Partial<Record<ProductModelRef['thinkingLevel'], string | null>>;
@@ -291,6 +292,7 @@ function modelDescriptor(
summaries: readonly ModelSummary[],
compat: PiProviderModelDescriptor['compat'],
backendModels: Map<string, ProviderModelEntry>,
enforcedCompat: PiProviderModelDescriptor['compat'],
): PiProviderModelDescriptor {
const summary = summaries.find((candidate) => (
candidate.id === modelId
@@ -320,8 +322,8 @@ function modelDescriptor(
|| backend?.reasoning === true,
...(contextWindow ? { contextWindow } : {}),
...(maxOutputTokens ? { maxOutputTokens } : {}),
...(compat || profile?.pi?.compat
? { compat: { ...compat, ...profile?.pi?.compat } }
...(compat || profile?.pi?.compat || enforcedCompat
? { compat: { ...compat, ...profile?.pi?.compat, ...enforcedCompat } }
: {}),
...(profile?.pi?.thinkingLevelMap
? { thinkingLevelMap: { ...profile.pi.thinkingLevelMap } }
@@ -367,12 +369,19 @@ function descriptorForAccount(
);
}
const apiKeyEnv = apiKeyEnvForAccount(account.id);
const credentialMode = account.metadata?.worksSquareCredentialMode;
const enforcedCompat: PiProviderModelDescriptor['compat'] = mapping.api === 'openai-completions'
&& (credentialMode === WORKS_SQUARE_AI_GATEWAY_CREDENTIAL_MODE
|| credentialMode === WORKS_SQUARE_AI_GATEWAY_PROXY_CREDENTIAL_MODE)
? { supportsDeveloperRole: false }
: undefined;
const models = modelIdsForAccount(account).map((modelId) => modelDescriptor(
account,
modelId,
summaries,
mapping.compat,
backendModelEntries(account),
enforcedCompat,
));
if (models.length === 0) {
throw new PiProviderConfigError(