{"record":{"id":"4d4c7b6206e6ddd8","repo":"vercel/ai","slug":"invalid-argument-for-parameter-output-invalid-out","errorCode":null,"errorMessage":"Invalid argument for parameter output: Invalid output type.","messagePattern":"Invalid argument for parameter output: Invalid output type\\.","errorType":"validation","errorClass":"InvalidArgumentError","httpStatus":null,"severity":"error","filePath":"packages/ai/src/generate-object/validate-object-generation-input.ts","lineNumber":24,"sourceCode":"  schema,\n  schemaName,\n  schemaDescription,\n  enumValues,\n}: {\n  output?: 'object' | 'array' | 'enum' | 'no-schema';\n  schema?: FlexibleSchema<unknown>;\n  schemaName?: string;\n  schemaDescription?: string;\n  enumValues?: Array<unknown>;\n}) {\n  if (\n    output != null &&\n    output !== 'object' &&\n    output !== 'array' &&\n    output !== 'enum' &&\n    output !== 'no-schema'\n  ) {\n    throw new InvalidArgumentError({\n      parameter: 'output',\n      value: output,\n      message: 'Invalid output type.',\n    });\n  }\n\n  if (output === 'no-schema') {\n    if (schema != null) {\n      throw new InvalidArgumentError({\n        parameter: 'schema',\n        value: schema,\n        message: 'Schema is not supported for no-schema output.',\n      });\n    }\n\n    if (schemaDescription != null) {\n      throw new InvalidArgumentError({\n        parameter: 'schemaDescription',","sourceCodeStart":6,"sourceCodeEnd":42,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/ai/src/generate-object/validate-object-generation-input.ts#L6-L42","documentation":"`validateObjectGenerationInput` throws this InvalidArgumentError when the `output` parameter is provided but is not one of the allowed literals `'object' | 'array' | 'enum' | 'no-schema'`. It runs at the entry of `generateObject` and `streamObject`, failing fast before any model call, and names the offending parameter and value.","triggerScenarios":"Passing a misspelled or arbitrary string as `output` (e.g. `'objects'`, `'Array'`, `'json'`), a non-string value, or reading `output` from untyped config/env into the options object — especially via `as any` or plain JavaScript.","commonSituations":"Typos in dynamic configuration; wrapper libraries forwarding user input; migration from older AI SDK versions where option names/values differed; templated code generators emitting wrong literals.","solutions":["Set `output` to exactly one of `'object'`, `'array'`, `'enum'`, or `'no-schema'` (or omit it for the default object mode).","Remove `as any` casts so TypeScript's literal union catches bad values at compile time.","If `output` comes from external config, validate it against the union before calling generateObject/streamObject."],"exampleFix":"// before\nstreamObject({ model, schema, output: (config.mode as any) }); // 'list'\n\n// after\nconst OUTPUT_MODES = ['object', 'array', 'enum', 'no-schema'] as const;\nstreamObject({ model, schema, output: OUTPUT_MODES.includes(config.mode) ? config.mode : 'object' });","handlingStrategy":"validation","validationCode":"const OUTPUT_MODES = ['object', 'array', 'enum', 'no-schema'] as const;\nfunction isValidOutputMode(v: unknown): v is typeof OUTPUT_MODES[number] {\n  return typeof v === 'string' && (OUTPUT_MODES as readonly string[]).includes(v);\n}\n// before calling: if (config.output !== undefined && !isValidOutputMode(config.output)) throw ...","typeGuard":"function isOutputMode(v: unknown): v is 'object' | 'array' | 'enum' | 'no-schema' {\n  return ['object','array','enum','no-schema'].includes(v as string);\n}","tryCatchPattern":"try {\n  return await generateObject({ model, schema, output });\n} catch (e) {\n  if (InvalidArgumentError.isInstance(e) && e.parameter === 'output') {\n    return generateObject({ model, schema }); // default object mode\n  }\n  throw e;\n}","preventionTips":["Type options objects with the SDK's parameter types, never `as any`.","Normalize/validate config values before passing them as `output`.","Omit `output` entirely for default object mode.","Add a unit test covering each allowed output literal in wrapper code."],"tags":["validation","api-misuse","configuration","invalid-argument"],"backgroundTag":"invalid-argument-value","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}