import { DyFM_AI_Provider } from '@futdevpro/fsm-dynamo/ai'; import { DyNTS_AI_ProviderError } from '../_models/interfaces/dynts-ai-provider-error.interface'; /** * Provider-faithful hiba-alakok eloallitasa a FR-048 `settingsSchema` szabalysertesekhez — ugyanaz a * hiba-alak, mint amit a valodi provider adna. A forras-igazsag a `settingsSchema` (SSoT); itt CSAK a * hiba formazasa tortenik, szabaly-duplikatum nincs. * * **Pontossag (D4):** a hiba **strukturaja** (mezok + `code`/`type`) a dokumentalt provider-alak szerint * keszult; a `message` SZOVEGE a valodi capture-ig kozelites. A gepileg fogyasztott resz (`reason`, `code`, * `param`, `httpStatus`) a stabil — a byte-hu message a fixture-capture passzal pontosithato. */ export class DyNTS_AI_ProviderError_Util { /** Az Anthropic provider-azonositoja (a hiba-alak valasztasahoz) — az enumbol, nem beegetett stringkent. */ private static readonly anthropicProviderId: string = DyFM_AI_Provider.Anthropic; /** * Nem tamogatott parameter → provider-hu HTTP 400 hiba-leiro. * @param set - provider-azonosito + modell-azonosito + a kifogasolt parameter neve */ static buildUnsupportedParamError( set: { provider: string, model: string, param: string, } ): DyNTS_AI_ProviderError { if (set.provider === this.anthropicProviderId) { return { httpStatus: 400, providerErrorBody: { type: 'error', error: { type: 'invalid_request_error', // MERT (capture 2026-07-21, claude-opus-4-8 + temperature): a valodi uzenet ez, NEM a korabbi // kozelitesem ("Extra inputs are not permitted"). message: `\`${set.param}\` is deprecated for this model.`, }, // VERIFIED (capture 2026-07-21): a valodi Anthropic hiba-body TOP-LEVEL `request_id`-t is hoz — // ez korabban hianyzott a sablonbol. Fixture-oknel a rogzitett valodi ertek szerepel; itt // szintetikus placeholder, hogy az ALAK hu legyen. request_id: 'req_mock', }, reason: `invalid_request_error:${set.param}`, }; } return { httpStatus: 400, providerErrorBody: { error: { message: `Unsupported parameter: '${set.param}' is not supported with model '${set.model}'.`, type: 'invalid_request_error', param: set.param, code: 'unsupported_parameter', }, }, reason: `unsupported_parameter:${set.param}`, }; } /** * Tamogatott parameter, de ERVENYTELEN ertek (tartomanyon kivul, vagy nem az engedett keszletbol) → * provider-hu HTTP 400. Ez a `settingsSchema.constraints` (min/max/allowed) megsertese. * @param set - provider + modell + parameter-nev + a rovid indoklas (pl. 'out of range 0..2') */ static buildInvalidValueError( set: { provider: string, model: string, param: string, detail: string, } ): DyNTS_AI_ProviderError { if (set.provider === this.anthropicProviderId) { return { httpStatus: 400, providerErrorBody: { type: 'error', error: { type: 'invalid_request_error', message: `${set.param}: ${set.detail} (model '${set.model}').`, }, }, reason: `invalid_request_error:${set.param}`, }; } // MERT (capture 2026-07-21, gpt-4o-mini + temperature: 3): a valodi OpenAI range-hiba kodja // `decimal_above_max_value`, NEM az altalam felteteleztt `invalid_value`, es a message formatuma ez: // "Invalid 'temperature': decimal above maximum value. Expected a value <= 2, but got 3 instead." return { httpStatus: 400, providerErrorBody: { error: { message: `Invalid '${set.param}': ${set.detail}.`, type: 'invalid_request_error', param: set.param, code: 'decimal_above_max_value', }, }, reason: `invalid_value:${set.param}`, }; } /** * Ismeretlen modell → **HTTP 404** (NEM 400), `code: 'model_not_found'`. * MERT (capture 2026-07-21): `The model \`X\` does not exist or you do not have access to it.` * @param set - provider + a nem letezo modell-azonosito */ static buildModelNotFoundError( set: { provider: string, model: string, } ): DyNTS_AI_ProviderError { if (set.provider === this.anthropicProviderId) { return { httpStatus: 404, providerErrorBody: { type: 'error', error: { type: 'not_found_error', message: `model: ${set.model}` }, request_id: 'req_mock', }, reason: `not_found_error:${set.model}`, }; } return { httpStatus: 404, providerErrorBody: { error: { message: `The model \`${set.model}\` does not exist or you do not have access to it.`, type: 'invalid_request_error', param: null, code: 'model_not_found', }, }, reason: `model_not_found:${set.model}`, }; } }