@lov3kaizen/agentsea-structured 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +330 -0
- package/dist/index.d.ts +783 -0
- package/dist/index.js +3210 -0
- package/dist/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/SchemaToPrompt.ts","../src/schema/SchemaValidator.ts","../src/streaming/IncrementalJsonParser.ts","../src/streaming/StreamingExtractor.ts","../src/core/StructuredClient.ts","../src/schema/index.ts","../src/streaming/index.ts","../src/providers/OpenAIAdapter.ts","../src/providers/AnthropicAdapter.ts","../src/providers/GoogleAdapter.ts","../src/integrations/agentsea/StructuredProvider.ts","../src/types/core.types.ts"],"names":["zodToJsonSchemaLib","z","options","current","error","getNestedValue","EventEmitter","createStreamingResult","MODEL_CAPABILITIES"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Schema to Prompt\n *\n * Converts Zod schemas to prompt-friendly representations.\n */\n\nimport { z } from 'zod';\nimport { zodToJsonSchema as zodToJsonSchemaLib } from 'zod-to-json-schema';\nimport type {\n SchemaPromptOptions,\n SchemaPrompt,\n JsonSchema,\n FieldInfo,\n FieldConstraint,\n} from '../types/index.js';\n\n/**\n * Default prompt options\n */\nconst DEFAULT_OPTIONS: Required<SchemaPromptOptions> = {\n format: 'json-schema',\n includeDescriptions: true,\n includeExamples: true,\n includeConstraints: true,\n maxDepth: 10,\n indent: 2,\n};\n\n/**\n * Convert Zod schema to JSON Schema\n */\nexport function zodToJsonSchema<T extends z.ZodType>(schema: T): JsonSchema {\n return zodToJsonSchemaLib(schema, { $refStrategy: 'none' }) as JsonSchema;\n}\n\n/**\n * Convert Zod schema to prompt-friendly representation\n */\nexport function schemaToPrompt<T extends z.ZodType>(\n schema: T,\n options: SchemaPromptOptions = {},\n): SchemaPrompt {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n switch (opts.format) {\n case 'json-schema':\n return generateJsonSchemaPrompt(schema, opts);\n case 'typescript':\n return generateTypeScriptPrompt(schema, opts);\n case 'natural':\n return generateNaturalPrompt(schema, opts);\n case 'examples':\n return generateExamplesPrompt(schema, opts);\n default:\n return generateJsonSchemaPrompt(schema, opts);\n }\n}\n\n/**\n * Generate JSON Schema based prompt\n */\nfunction generateJsonSchemaPrompt<T extends z.ZodType>(\n schema: T,\n opts: Required<SchemaPromptOptions>,\n): SchemaPrompt {\n const jsonSchema = zodToJsonSchemaLib(schema, {\n $refStrategy: 'none',\n errorMessages: true,\n }) as JsonSchema;\n\n // Clean up the schema\n const cleanedSchema = cleanJsonSchema(jsonSchema);\n\n const text = [\n 'Respond with a JSON object that matches this schema:',\n '',\n '```json',\n JSON.stringify(cleanedSchema, null, opts.indent),\n '```',\n ].join('\\n');\n\n return {\n text,\n format: 'json-schema',\n jsonSchema: cleanedSchema,\n };\n}\n\n/**\n * Generate TypeScript-style prompt\n */\nfunction generateTypeScriptPrompt<T extends z.ZodType>(\n schema: T,\n opts: Required<SchemaPromptOptions>,\n): SchemaPrompt {\n const typeScript = zodToTypeScript(schema, opts);\n const jsonSchema = zodToJsonSchemaLib(schema, {\n $refStrategy: 'none',\n }) as JsonSchema;\n\n const text = [\n 'Respond with a JSON object matching this TypeScript type:',\n '',\n '```typescript',\n typeScript,\n '```',\n ].join('\\n');\n\n return {\n text,\n format: 'typescript',\n jsonSchema,\n typeScript,\n };\n}\n\n/**\n * Generate natural language prompt\n */\nfunction generateNaturalPrompt<T extends z.ZodType>(\n schema: T,\n opts: Required<SchemaPromptOptions>,\n): SchemaPrompt {\n const fieldInfos = analyzeSchema(schema, opts);\n const jsonSchema = zodToJsonSchemaLib(schema, {\n $refStrategy: 'none',\n }) as JsonSchema;\n\n const lines: string[] = [\n 'Respond with a JSON object containing the following fields:',\n '',\n ];\n\n for (const field of fieldInfos) {\n const requiredStr = field.required ? '(required)' : '(optional)';\n let line = `- ${field.name} ${requiredStr}: ${field.jsonType}`;\n\n if (opts.includeDescriptions && field.description) {\n line += ` - ${field.description}`;\n }\n\n if (opts.includeConstraints && field.constraints.length > 0) {\n const constraintStrs = field.constraints.map((c) => c.description);\n line += ` [${constraintStrs.join(', ')}]`;\n }\n\n lines.push(line);\n\n // Add nested fields\n if (field.children && field.children.length > 0) {\n for (const child of field.children) {\n lines.push(` - ${child.name}: ${child.jsonType}`);\n }\n }\n }\n\n return {\n text: lines.join('\\n'),\n format: 'natural',\n jsonSchema,\n };\n}\n\n/**\n * Generate examples-based prompt\n */\nfunction generateExamplesPrompt<T extends z.ZodType>(\n schema: T,\n opts: Required<SchemaPromptOptions>,\n): SchemaPrompt {\n const jsonSchema = zodToJsonSchemaLib(schema, {\n $refStrategy: 'none',\n }) as JsonSchema;\n const example = generateExample(jsonSchema, opts.maxDepth);\n\n const text = [\n 'Respond with a JSON object following this example structure:',\n '',\n '```json',\n JSON.stringify(example, null, opts.indent),\n '```',\n ].join('\\n');\n\n return {\n text,\n format: 'examples',\n jsonSchema,\n };\n}\n\n/**\n * Clean JSON schema for prompt\n */\nfunction cleanJsonSchema(schema: JsonSchema): JsonSchema {\n const cleaned: JsonSchema = {};\n\n for (const [key, value] of Object.entries(schema)) {\n // Skip internal fields\n if (key.startsWith('$') && key !== '$defs') continue;\n if (key === 'additionalProperties' && value === false) continue;\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n cleaned[key] = cleanJsonSchema(value as JsonSchema);\n } else if (Array.isArray(value)) {\n cleaned[key] = value.map((item) =>\n typeof item === 'object' && item !== null\n ? cleanJsonSchema(item as JsonSchema)\n : item,\n );\n } else {\n cleaned[key] = value;\n }\n }\n\n return cleaned;\n}\n\n/**\n * Convert Zod schema to TypeScript-like type string\n */\nfunction zodToTypeScript<T extends z.ZodType>(\n schema: T,\n opts: Required<SchemaPromptOptions>,\n depth = 0,\n): string {\n if (depth > opts.maxDepth) return 'any';\n\n const indent = ' '.repeat(depth);\n const innerIndent = ' '.repeat(depth + 1);\n\n // Handle ZodObject\n if (schema instanceof z.ZodObject) {\n const shape = schema.shape;\n const lines: string[] = ['{'];\n\n for (const [key, value] of Object.entries(shape)) {\n const fieldSchema = value as z.ZodType;\n const isOptional = fieldSchema.isOptional?.() ?? false;\n const typeStr = zodToTypeScript(fieldSchema, opts, depth + 1);\n const optionalMarker = isOptional ? '?' : '';\n const description = (fieldSchema as { description?: string }).description;\n const descComment =\n opts.includeDescriptions && description ? ` // ${description}` : '';\n\n lines.push(\n `${innerIndent}${key}${optionalMarker}: ${typeStr};${descComment}`,\n );\n }\n\n lines.push(`${indent}}`);\n return lines.join('\\n');\n }\n\n // Handle ZodArray\n if (schema instanceof z.ZodArray) {\n const elementType = zodToTypeScript(schema.element, opts, depth);\n return `${elementType}[]`;\n }\n\n // Handle ZodString\n if (schema instanceof z.ZodString) {\n return 'string';\n }\n\n // Handle ZodNumber\n if (schema instanceof z.ZodNumber) {\n return 'number';\n }\n\n // Handle ZodBoolean\n if (schema instanceof z.ZodBoolean) {\n return 'boolean';\n }\n\n // Handle ZodNull\n if (schema instanceof z.ZodNull) {\n return 'null';\n }\n\n // Handle ZodUndefined\n if (schema instanceof z.ZodUndefined) {\n return 'undefined';\n }\n\n // Handle ZodLiteral\n if (schema instanceof z.ZodLiteral) {\n const value = schema.value;\n return typeof value === 'string' ? `'${value}'` : String(value);\n }\n\n // Handle ZodEnum\n if (schema instanceof z.ZodEnum) {\n const values = schema.options as string[];\n return values.map((v) => `'${v}'`).join(' | ');\n }\n\n // Handle ZodNativeEnum\n if (schema instanceof z.ZodNativeEnum) {\n return 'enum';\n }\n\n // Handle ZodUnion\n if (schema instanceof z.ZodUnion) {\n const options = (schema as { options: z.ZodType[] }).options;\n return options.map((o) => zodToTypeScript(o, opts, depth)).join(' | ');\n }\n\n // Handle ZodOptional\n if (schema instanceof z.ZodOptional) {\n const innerType = zodToTypeScript(schema.unwrap(), opts, depth);\n return `${innerType} | undefined`;\n }\n\n // Handle ZodNullable\n if (schema instanceof z.ZodNullable) {\n const innerType = zodToTypeScript(schema.unwrap(), opts, depth);\n return `${innerType} | null`;\n }\n\n // Handle ZodDefault\n if (schema instanceof z.ZodDefault) {\n return zodToTypeScript(schema.removeDefault(), opts, depth);\n }\n\n // Handle ZodRecord\n if (schema instanceof z.ZodRecord) {\n const valueType = zodToTypeScript(schema.valueSchema, opts, depth);\n return `Record<string, ${valueType}>`;\n }\n\n // Handle ZodTuple\n if (schema instanceof z.ZodTuple) {\n const items = (schema as { items: z.ZodType[] }).items;\n const types = items.map((item) => zodToTypeScript(item, opts, depth));\n return `[${types.join(', ')}]`;\n }\n\n // Handle ZodDate\n if (schema instanceof z.ZodDate) {\n return 'Date';\n }\n\n // Default\n return 'unknown';\n}\n\n/**\n * Analyze schema and extract field information\n */\nexport function analyzeSchema<T extends z.ZodType>(\n schema: T,\n opts: Required<SchemaPromptOptions>,\n path = '',\n): FieldInfo[] {\n const fields: FieldInfo[] = [];\n\n if (schema instanceof z.ZodObject) {\n const shape = schema.shape;\n\n for (const [key, value] of Object.entries(shape)) {\n const fieldSchema = value as z.ZodType;\n const fieldPath = path ? `${path}.${key}` : key;\n const info = extractFieldInfo(key, fieldSchema, fieldPath, opts);\n fields.push(info);\n }\n }\n\n return fields;\n}\n\n/**\n * Extract field information from a Zod schema\n */\nexport function extractFieldInfo(\n name: string,\n schema: z.ZodType,\n path: string,\n opts: Required<SchemaPromptOptions>,\n): FieldInfo {\n const constraints = extractConstraints(schema);\n const { zodType, jsonType } = getTypeNames(schema);\n const description = (schema as { description?: string }).description;\n const isOptional = schema.isOptional?.() ?? false;\n const hasDefault = schema instanceof z.ZodDefault;\n const defaultValue = hasDefault\n ? (schema as z.ZodDefault<z.ZodType>)._def.defaultValue()\n : undefined;\n\n let children: FieldInfo[] | undefined;\n\n // Get unwrapped schema for nested analysis\n const unwrapped = unwrapSchema(schema);\n\n if (unwrapped instanceof z.ZodObject) {\n children = analyzeSchema(unwrapped, opts, path);\n }\n\n return {\n path,\n name,\n zodType,\n jsonType,\n description,\n required: !isOptional,\n hasDefault,\n defaultValue,\n constraints,\n children,\n };\n}\n\n/**\n * Extract constraints from a Zod schema\n */\nfunction extractConstraints(schema: z.ZodType): FieldConstraint[] {\n const constraints: FieldConstraint[] = [];\n\n // Get checks for string/number schemas\n const def = (\n schema as { _def?: { checks?: Array<{ kind: string; value?: unknown }> } }\n )._def;\n const checks = def?.checks ?? [];\n\n for (const check of checks) {\n switch (check.kind) {\n case 'min':\n constraints.push({\n type: 'min',\n value: check.value,\n description: `minimum: ${String(check.value)}`,\n });\n break;\n case 'max':\n constraints.push({\n type: 'max',\n value: check.value,\n description: `maximum: ${String(check.value)}`,\n });\n break;\n case 'length':\n constraints.push({\n type: 'length',\n value: check.value,\n description: `length: ${String(check.value)}`,\n });\n break;\n case 'email':\n constraints.push({\n type: 'email',\n value: true,\n description: 'must be valid email',\n });\n break;\n case 'url':\n constraints.push({\n type: 'url',\n value: true,\n description: 'must be valid URL',\n });\n break;\n case 'regex':\n constraints.push({\n type: 'regex',\n value: check.value,\n description: `must match pattern`,\n });\n break;\n case 'int':\n constraints.push({\n type: 'int',\n value: true,\n description: 'must be integer',\n });\n break;\n case 'positive':\n constraints.push({\n type: 'positive',\n value: true,\n description: 'must be positive',\n });\n break;\n case 'negative':\n constraints.push({\n type: 'negative',\n value: true,\n description: 'must be negative',\n });\n break;\n }\n }\n\n return constraints;\n}\n\n/**\n * Get type names for a schema\n */\nfunction getTypeNames(schema: z.ZodType): {\n zodType: string;\n jsonType: string;\n} {\n const unwrapped = unwrapSchema(schema);\n\n if (unwrapped instanceof z.ZodString)\n return { zodType: 'ZodString', jsonType: 'string' };\n if (unwrapped instanceof z.ZodNumber)\n return { zodType: 'ZodNumber', jsonType: 'number' };\n if (unwrapped instanceof z.ZodBoolean)\n return { zodType: 'ZodBoolean', jsonType: 'boolean' };\n if (unwrapped instanceof z.ZodNull)\n return { zodType: 'ZodNull', jsonType: 'null' };\n if (unwrapped instanceof z.ZodArray)\n return { zodType: 'ZodArray', jsonType: 'array' };\n if (unwrapped instanceof z.ZodObject)\n return { zodType: 'ZodObject', jsonType: 'object' };\n if (unwrapped instanceof z.ZodEnum)\n return { zodType: 'ZodEnum', jsonType: 'string' };\n if (unwrapped instanceof z.ZodLiteral) {\n const value = unwrapped.value;\n const type = typeof value;\n return { zodType: 'ZodLiteral', jsonType: type };\n }\n if (unwrapped instanceof z.ZodUnion)\n return { zodType: 'ZodUnion', jsonType: 'union' };\n if (unwrapped instanceof z.ZodRecord)\n return { zodType: 'ZodRecord', jsonType: 'object' };\n if (unwrapped instanceof z.ZodDate)\n return { zodType: 'ZodDate', jsonType: 'string' };\n\n return { zodType: 'unknown', jsonType: 'unknown' };\n}\n\n/**\n * Unwrap optional/nullable/default wrappers\n */\nfunction unwrapSchema(schema: z.ZodType): z.ZodType {\n if (schema instanceof z.ZodOptional) return unwrapSchema(schema.unwrap());\n if (schema instanceof z.ZodNullable) return unwrapSchema(schema.unwrap());\n if (schema instanceof z.ZodDefault)\n return unwrapSchema(schema.removeDefault());\n return schema;\n}\n\n/**\n * Generate example value from JSON schema\n */\nexport function generateExample(\n schema: JsonSchema,\n maxDepth: number,\n depth = 0,\n): unknown {\n if (depth > maxDepth) return null;\n\n // Use provided example\n if (schema.examples && schema.examples.length > 0) {\n return schema.examples[0];\n }\n\n // Use default\n if (schema.default !== undefined) {\n return schema.default;\n }\n\n // Use const\n if (schema.const !== undefined) {\n return schema.const;\n }\n\n // Use first enum value\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum[0];\n }\n\n // Handle type\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n\n switch (type) {\n case 'string':\n return schema.format === 'email'\n ? 'example@email.com'\n : schema.format === 'uri'\n ? 'https://example.com'\n : 'string';\n\n case 'number':\n case 'integer':\n return schema.minimum ?? 0;\n\n case 'boolean':\n return true;\n\n case 'null':\n return null;\n\n case 'array':\n if (schema.items) {\n const itemExample = generateExample(\n Array.isArray(schema.items) ? schema.items[0] : schema.items,\n maxDepth,\n depth + 1,\n );\n return [itemExample];\n }\n return [];\n\n case 'object':\n if (schema.properties) {\n const obj: Record<string, unknown> = {};\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n obj[key] = generateExample(propSchema, maxDepth, depth + 1);\n }\n return obj;\n }\n return {};\n\n default:\n // Handle anyOf/oneOf\n if (schema.anyOf && schema.anyOf.length > 0) {\n return generateExample(schema.anyOf[0], maxDepth, depth);\n }\n if (schema.oneOf && schema.oneOf.length > 0) {\n return generateExample(schema.oneOf[0], maxDepth, depth);\n }\n return null;\n }\n}\n\n/**\n * Export helper for creating prompts\n */\nexport const SchemaPromptGenerator = {\n toJsonSchema: <T extends z.ZodType>(\n schema: T,\n options?: SchemaPromptOptions,\n ) => schemaToPrompt(schema, { ...options, format: 'json-schema' }),\n\n toTypeScript: <T extends z.ZodType>(\n schema: T,\n options?: SchemaPromptOptions,\n ) => schemaToPrompt(schema, { ...options, format: 'typescript' }),\n\n toNatural: <T extends z.ZodType>(schema: T, options?: SchemaPromptOptions) =>\n schemaToPrompt(schema, { ...options, format: 'natural' }),\n\n toExamples: <T extends z.ZodType>(schema: T, options?: SchemaPromptOptions) =>\n schemaToPrompt(schema, { ...options, format: 'examples' }),\n\n generateExample,\n};\n","/**\n * Schema Validator\n *\n * Validates data against Zod schemas with detailed error reporting.\n */\n\nimport { z, ZodError, ZodIssue } from 'zod';\nimport type {\n SchemaValidationResult,\n ValidationErrorDetail,\n} from '../types/schema.types.js';\n\n/**\n * Validates data against a Zod schema\n */\nexport function validateSchema<T extends z.ZodType>(\n schema: T,\n data: unknown,\n): SchemaValidationResult<z.infer<T>> {\n const result = schema.safeParse(data);\n\n if (result.success) {\n return {\n success: true,\n data: result.data,\n };\n }\n\n return {\n success: false,\n errors: formatZodErrors(result.error),\n };\n}\n\n/**\n * Validates data and throws on failure\n */\nexport function validateSchemaOrThrow<T extends z.ZodType>(\n schema: T,\n data: unknown,\n): z.infer<T> {\n return schema.parse(data);\n}\n\n/**\n * Validates partial data against a schema\n */\nexport function validatePartial<T extends z.ZodType>(\n schema: T,\n data: unknown,\n options: { requiredFields?: string[] } = {},\n): SchemaValidationResult<Partial<z.infer<T>>> {\n // Create a partial version of the schema\n const partialSchema = makePartial(schema);\n\n const result = partialSchema.safeParse(data);\n\n if (!result.success) {\n return {\n success: false,\n errors: formatZodErrors(result.error),\n };\n }\n\n // Check required fields if specified\n if (options.requiredFields && options.requiredFields.length > 0) {\n const missingFields: ValidationErrorDetail[] = [];\n\n for (const field of options.requiredFields) {\n const value = getNestedValue(result.data, field);\n if (value === undefined) {\n missingFields.push({\n path: field.split('.'),\n message: `Required field '${field}' is missing`,\n expected: 'value',\n received: undefined,\n code: 'custom',\n });\n }\n }\n\n if (missingFields.length > 0) {\n return {\n success: false,\n errors: missingFields,\n };\n }\n }\n\n return {\n success: true,\n data: result.data,\n };\n}\n\n/**\n * Checks if a value matches a schema without full validation\n */\nexport function matchesSchema<T extends z.ZodType>(\n schema: T,\n data: unknown,\n): boolean {\n return schema.safeParse(data).success;\n}\n\n/**\n * Coerces data to match a schema where possible\n */\nexport function coerceToSchema<T extends z.ZodType>(\n schema: T,\n data: unknown,\n): SchemaValidationResult<z.infer<T>> {\n // First try direct validation\n const directResult = schema.safeParse(data);\n if (directResult.success) {\n return { success: true, data: directResult.data };\n }\n\n // Try to coerce common types\n const coerced = coerceData(data, schema);\n const coercedResult = schema.safeParse(coerced);\n\n if (coercedResult.success) {\n return { success: true, data: coercedResult.data };\n }\n\n return {\n success: false,\n errors: formatZodErrors(coercedResult.error),\n };\n}\n\n/**\n * Gets validation hints for fixing invalid data\n */\nexport function getValidationHints<T extends z.ZodType>(\n schema: T,\n data: unknown,\n): string[] {\n const result = schema.safeParse(data);\n\n if (result.success) {\n return [];\n }\n\n return result.error.issues.map((issue) => generateHint(issue, data));\n}\n\n/**\n * Formats Zod errors into validation error details\n */\nexport function formatZodErrors(error: ZodError): ValidationErrorDetail[] {\n return error.issues.map((issue) => ({\n path: issue.path.map((p) => (typeof p === 'number' ? p : String(p))),\n message: issue.message,\n expected: getExpectedFromIssue(issue),\n received: getReceivedFromIssue(issue),\n code: issue.code,\n }));\n}\n\n/**\n * Creates a partial version of a Zod schema\n */\nfunction makePartial<T extends z.ZodType>(schema: T): z.ZodType {\n if (schema instanceof z.ZodObject) {\n return schema.partial();\n }\n\n if (schema instanceof z.ZodArray) {\n return z.array(makePartial(schema.element));\n }\n\n if (schema instanceof z.ZodUnion) {\n return z.union(\n schema.options.map((opt: z.ZodType) => makePartial(opt)) as [\n z.ZodType,\n z.ZodType,\n ...z.ZodType[],\n ],\n );\n }\n\n if (schema instanceof z.ZodIntersection) {\n return z.intersection(\n makePartial(schema._def.left),\n makePartial(schema._def.right),\n );\n }\n\n // For other types, make them optional\n return schema.optional();\n}\n\n/**\n * Gets a nested value from an object\n */\nfunction getNestedValue(obj: unknown, path: string): unknown {\n if (typeof obj !== 'object' || obj === null) {\n return undefined;\n }\n\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (typeof current !== 'object' || current === null) {\n return undefined;\n }\n\n // Handle array indices\n const arrayMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const [, key, index] = arrayMatch;\n const arr = (current as Record<string, unknown>)[key];\n if (!Array.isArray(arr)) {\n return undefined;\n }\n current = arr[parseInt(index, 10)];\n } else {\n current = (current as Record<string, unknown>)[part];\n }\n }\n\n return current;\n}\n\n/**\n * Attempts to coerce data to match a schema\n */\nfunction coerceData(data: unknown, schema: z.ZodType): unknown {\n // Use instanceof checks for type narrowing\n if (schema instanceof z.ZodString && typeof data === 'number') {\n return String(data);\n }\n\n if (schema instanceof z.ZodNumber && typeof data === 'string') {\n const num = Number(data);\n if (!isNaN(num)) {\n return num;\n }\n }\n\n if (schema instanceof z.ZodBoolean) {\n if (data === 'true' || data === 1) return true;\n if (data === 'false' || data === 0) return false;\n }\n\n if (schema instanceof z.ZodArray && typeof data === 'string') {\n try {\n const parsed = JSON.parse(data);\n if (Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Not valid JSON array\n }\n }\n\n if (schema instanceof z.ZodObject && typeof data === 'string') {\n try {\n return JSON.parse(data);\n } catch {\n // Not valid JSON object\n }\n }\n\n if (\n schema instanceof z.ZodObject &&\n typeof data === 'object' &&\n data !== null\n ) {\n const objSchema = schema as z.ZodObject<z.ZodRawShape>;\n const shape = objSchema.shape;\n const result: Record<string, unknown> = {\n ...(data as Record<string, unknown>),\n };\n\n for (const [key, fieldSchema] of Object.entries(shape)) {\n if (key in result) {\n result[key] = coerceData(result[key], fieldSchema as z.ZodType);\n }\n }\n\n return result;\n }\n\n return data;\n}\n\n/**\n * Generates a hint for fixing a validation issue\n */\nfunction generateHint(issue: ZodIssue, _data: unknown): string {\n const path = issue.path.join('.');\n const pathPrefix = path ? `At '${path}': ` : '';\n\n switch (issue.code) {\n case 'invalid_type':\n return `${pathPrefix}Expected ${issue.expected}, but received ${issue.received}. Please provide a value of type ${issue.expected}.`;\n\n case 'invalid_literal':\n return `${pathPrefix}Expected the exact value ${JSON.stringify(issue.expected)}, but received ${JSON.stringify(issue.received)}.`;\n\n case 'unrecognized_keys':\n return `${pathPrefix}Unexpected keys: ${(issue as { keys: string[] }).keys.join(', ')}. Remove these keys or check the schema.`;\n\n case 'invalid_union':\n return `${pathPrefix}Value doesn't match any of the allowed types. Check the schema for valid options.`;\n\n case 'invalid_enum_value':\n return `${pathPrefix}Value must be one of: ${(issue as { options: unknown[] }).options.join(', ')}`;\n\n case 'invalid_string':\n if ('validation' in issue) {\n const validation = issue.validation;\n if (typeof validation === 'string') {\n return `${pathPrefix}String must be a valid ${validation}.`;\n }\n }\n return `${pathPrefix}Invalid string format.`;\n\n case 'too_small': {\n const smallIssue = issue as {\n type: string;\n minimum: number;\n inclusive: boolean;\n };\n if (smallIssue.type === 'string') {\n return `${pathPrefix}String must be at least ${smallIssue.minimum} characters.`;\n }\n if (smallIssue.type === 'number') {\n return `${pathPrefix}Number must be ${smallIssue.inclusive ? 'at least' : 'greater than'} ${smallIssue.minimum}.`;\n }\n if (smallIssue.type === 'array') {\n return `${pathPrefix}Array must have at least ${smallIssue.minimum} items.`;\n }\n return `${pathPrefix}Value is too small.`;\n }\n\n case 'too_big': {\n const bigIssue = issue as {\n type: string;\n maximum: number;\n inclusive: boolean;\n };\n if (bigIssue.type === 'string') {\n return `${pathPrefix}String must be at most ${bigIssue.maximum} characters.`;\n }\n if (bigIssue.type === 'number') {\n return `${pathPrefix}Number must be ${bigIssue.inclusive ? 'at most' : 'less than'} ${bigIssue.maximum}.`;\n }\n if (bigIssue.type === 'array') {\n return `${pathPrefix}Array must have at most ${bigIssue.maximum} items.`;\n }\n return `${pathPrefix}Value is too big.`;\n }\n\n case 'custom':\n return `${pathPrefix}${issue.message}`;\n\n case 'invalid_date':\n return `${pathPrefix}Invalid date value. Provide a valid date string or Date object.`;\n\n default:\n return `${pathPrefix}${issue.message}`;\n }\n}\n\n/**\n * Gets expected value description from a Zod issue\n */\nfunction getExpectedFromIssue(issue: ZodIssue): string | undefined {\n if ('expected' in issue) {\n return String(issue.expected);\n }\n return undefined;\n}\n\n/**\n * Gets received value from a Zod issue\n */\nfunction getReceivedFromIssue(issue: ZodIssue): unknown {\n if ('received' in issue) {\n return issue.received;\n }\n return undefined;\n}\n\n/**\n * Schema Validator utility object\n */\nexport const SchemaValidator = {\n validate: validateSchema,\n validateOrThrow: validateSchemaOrThrow,\n validatePartial,\n matches: matchesSchema,\n coerce: coerceToSchema,\n getHints: getValidationHints,\n formatErrors: formatZodErrors,\n};\n","/**\n * Incremental JSON Parser\n *\n * Parses JSON incrementally as it streams in, emitting field updates.\n */\n\nimport type { JsonToken, ParserState } from '../types/streaming.types.js';\n\n/**\n * Field update from parser\n */\nexport interface FieldParseUpdate {\n path: string[];\n value: unknown;\n complete: boolean;\n}\n\n/**\n * Incremental JSON parser for streaming responses\n */\nexport class IncrementalJsonParser {\n private state: ParserState;\n private result: Record<string, unknown>;\n private pendingUpdates: FieldParseUpdate[];\n\n constructor() {\n this.state = this.createInitialState();\n this.result = {};\n this.pendingUpdates = [];\n }\n\n /**\n * Feed a chunk of text to the parser\n */\n feed(chunk: string): FieldParseUpdate[] {\n this.pendingUpdates = [];\n this.state.buffer += chunk;\n\n this.parse();\n\n return this.pendingUpdates;\n }\n\n /**\n * Get the current parsed result\n */\n getResult(): Record<string, unknown> {\n // Try to complete any pending parsing\n this.finalize();\n return this.result;\n }\n\n /**\n * Reset the parser state\n */\n reset(): void {\n this.state = this.createInitialState();\n this.result = {};\n this.pendingUpdates = [];\n }\n\n /**\n * Create initial parser state\n */\n private createInitialState(): ParserState {\n return {\n currentPath: [],\n depth: 0,\n buffer: '',\n partial: {},\n inString: false,\n inEscape: false,\n currentString: '',\n currentKey: null,\n containerStack: [],\n };\n }\n\n /**\n * Parse the current buffer\n */\n private parse(): void {\n let i = 0;\n let lastSuccessfulIndex = -1;\n\n while (i < this.state.buffer.length) {\n const char = this.state.buffer[i];\n\n if (this.state.inString) {\n i = this.parseStringChar(i, char);\n lastSuccessfulIndex = i;\n } else {\n // Check for potentially incomplete values BEFORE parsing them\n // Check for incomplete boolean/null\n if (char === 't' || char === 'f' || char === 'n') {\n const remaining = this.state.buffer.slice(i);\n const isComplete =\n remaining.startsWith('true') ||\n remaining.startsWith('false') ||\n remaining.startsWith('null');\n if (!isComplete) {\n // Incomplete literal - keep in buffer\n break;\n }\n }\n\n // Check for potentially incomplete number\n if (/[-\\d]/.test(char)) {\n const remaining = this.state.buffer.slice(i);\n // Find where the number ends\n const match = remaining.match(/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?/);\n if (match) {\n const numStr = match[0];\n // Check if there's a terminator after the number\n const afterNum = remaining.slice(numStr.length);\n if (\n afterNum.length === 0 ||\n (afterNum.length > 0 && !/[\\s,}\\]]/.test(afterNum[0]))\n ) {\n // Number goes to end of buffer without terminator - might be incomplete\n break;\n }\n }\n }\n\n i = this.parseChar(i, char);\n lastSuccessfulIndex = i;\n }\n\n i++;\n }\n\n // Only clear the successfully processed part of the buffer\n if (lastSuccessfulIndex >= 0) {\n this.state.buffer = this.state.buffer.slice(lastSuccessfulIndex + 1);\n }\n }\n\n /**\n * Parse a character inside a string\n */\n private parseStringChar(index: number, char: string): number {\n if (this.state.inEscape) {\n this.state.currentString += this.processEscape(char);\n this.state.inEscape = false;\n return index;\n }\n\n if (char === '\\\\') {\n this.state.inEscape = true;\n return index;\n }\n\n if (char === '\"') {\n this.state.inString = false;\n this.handleStringComplete();\n return index;\n }\n\n this.state.currentString += char;\n return index;\n }\n\n /**\n * Parse a character outside a string\n */\n private parseChar(index: number, char: string): number {\n // Skip whitespace\n if (/\\s/.test(char)) {\n return index;\n }\n\n switch (char) {\n case '{':\n this.handleObjectStart();\n break;\n\n case '}':\n this.handleObjectEnd();\n break;\n\n case '[':\n this.handleArrayStart();\n break;\n\n case ']':\n this.handleArrayEnd();\n break;\n\n case '\"':\n this.state.inString = true;\n this.state.currentString = '';\n break;\n\n case ':':\n // Colon after key, nothing special to do\n break;\n\n case ',':\n // Comma between values, reset current key if in object\n if (this.getCurrentContainer() === 'object') {\n this.state.currentKey = null;\n } else if (this.getCurrentContainer() === 'array') {\n // Increment array index\n const lastPath =\n this.state.currentPath[this.state.currentPath.length - 1];\n if (typeof lastPath === 'string' && /^\\d+$/.test(lastPath)) {\n this.state.currentPath[this.state.currentPath.length - 1] = String(\n parseInt(lastPath, 10) + 1,\n );\n }\n }\n break;\n\n case 't':\n case 'f':\n index = this.parseBoolean(index);\n break;\n\n case 'n':\n index = this.parseNull(index);\n break;\n\n default:\n if (/[-\\d]/.test(char)) {\n index = this.parseNumber(index);\n }\n }\n\n return index;\n }\n\n /**\n * Process an escape character\n */\n private processEscape(char: string): string {\n switch (char) {\n case 'n':\n return '\\n';\n case 'r':\n return '\\r';\n case 't':\n return '\\t';\n case '\\\\':\n return '\\\\';\n case '\"':\n return '\"';\n case '/':\n return '/';\n default:\n return char;\n }\n }\n\n /**\n * Handle completion of a string\n */\n private handleStringComplete(): void {\n const value = this.state.currentString;\n\n if (\n this.getCurrentContainer() === 'object' &&\n this.state.currentKey === null\n ) {\n // This is a key\n this.state.currentKey = value;\n } else {\n // This is a value\n this.setValue(value);\n }\n }\n\n /**\n * Handle start of object\n */\n private handleObjectStart(): void {\n this.state.depth++;\n this.state.containerStack.push('object');\n\n if (this.state.currentKey !== null) {\n this.state.currentPath.push(this.state.currentKey);\n this.state.currentKey = null;\n }\n // If parent is array, path already has the index - don't modify it\n\n this.setNestedValue(this.result, this.state.currentPath, {});\n }\n\n /**\n * Handle end of object\n */\n private handleObjectEnd(): void {\n this.state.depth--;\n this.state.containerStack.pop();\n\n // Emit object complete event\n const path = [...this.state.currentPath];\n const value = this.getNestedValue(this.result, path);\n\n this.pendingUpdates.push({\n path,\n value,\n complete: true,\n });\n\n // Only pop if we're not inside an array (array manages its own indices)\n // Check what the NEW current container is after popping 'object'\n const currentContainer = this.getCurrentContainer();\n if (currentContainer !== 'array' && this.state.currentPath.length > 0) {\n this.state.currentPath.pop();\n }\n }\n\n /**\n * Handle start of array\n */\n private handleArrayStart(): void {\n this.state.depth++;\n this.state.containerStack.push('array');\n\n if (this.state.currentKey !== null) {\n this.state.currentPath.push(this.state.currentKey);\n this.state.currentKey = null;\n }\n // If parent is array, path already has the index\n\n this.setNestedValue(this.result, this.state.currentPath, []);\n this.state.currentPath.push('0'); // Start at index 0\n }\n\n /**\n * Handle end of array\n */\n private handleArrayEnd(): void {\n this.state.depth--;\n this.state.containerStack.pop();\n\n // Remove array index from path\n this.state.currentPath.pop();\n\n // Emit array complete event\n const path = [...this.state.currentPath];\n const value = this.getNestedValue(this.result, path);\n\n this.pendingUpdates.push({\n path,\n value,\n complete: true,\n });\n\n // Only pop the array's key if we're not inside another array\n const currentContainer = this.getCurrentContainer();\n if (currentContainer !== 'array' && this.state.currentPath.length > 0) {\n this.state.currentPath.pop();\n }\n }\n\n /**\n * Parse a boolean value\n */\n private parseBoolean(startIndex: number): number {\n const remaining = this.state.buffer.slice(startIndex);\n\n if (remaining.startsWith('true')) {\n this.setValue(true);\n return startIndex + 3; // 4 - 1 for the loop increment\n }\n\n if (remaining.startsWith('false')) {\n this.setValue(false);\n return startIndex + 4; // 5 - 1 for the loop increment\n }\n\n // Incomplete boolean, wait for more data\n return startIndex;\n }\n\n /**\n * Parse a null value\n */\n private parseNull(startIndex: number): number {\n const remaining = this.state.buffer.slice(startIndex);\n\n if (remaining.startsWith('null')) {\n this.setValue(null);\n return startIndex + 3; // 4 - 1 for the loop increment\n }\n\n // Incomplete null, wait for more data\n return startIndex;\n }\n\n /**\n * Parse a number value\n */\n private parseNumber(startIndex: number): number {\n const remaining = this.state.buffer.slice(startIndex);\n const match = remaining.match(/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?/);\n\n if (match) {\n const numStr = match[0];\n const value =\n numStr.includes('.') || numStr.includes('e') || numStr.includes('E')\n ? parseFloat(numStr)\n : parseInt(numStr, 10);\n\n this.setValue(value);\n return startIndex + numStr.length - 1;\n }\n\n return startIndex;\n }\n\n /**\n * Set a value at the current path\n */\n private setValue(value: unknown): void {\n let path: string[];\n\n if (this.state.currentKey !== null) {\n path = [...this.state.currentPath, this.state.currentKey];\n this.state.currentKey = null;\n } else if (this.getCurrentContainer() === 'array') {\n path = [...this.state.currentPath];\n } else {\n path = [...this.state.currentPath];\n }\n\n this.setNestedValue(this.result, path, value);\n\n this.pendingUpdates.push({\n path,\n value,\n complete: true,\n });\n }\n\n /**\n * Get current container type\n */\n private getCurrentContainer(): 'object' | 'array' | null {\n if (this.state.containerStack.length === 0) {\n return null;\n }\n return this.state.containerStack[this.state.containerStack.length - 1];\n }\n\n /**\n * Set a nested value in an object\n */\n private setNestedValue(\n obj: Record<string, unknown>,\n path: string[],\n value: unknown,\n ): void {\n if (path.length === 0) {\n return;\n }\n\n let current: unknown = obj;\n\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n\n if (typeof current !== 'object' || current === null) {\n return;\n }\n\n const currentObj = current as Record<string, unknown>;\n\n if (!(key in currentObj)) {\n const nextKey = path[i + 1];\n currentObj[key] = /^\\d+$/.test(nextKey) ? [] : {};\n }\n\n current = currentObj[key];\n }\n\n const lastKey = path[path.length - 1];\n if (typeof current === 'object' && current !== null) {\n (current as Record<string, unknown>)[lastKey] = value;\n }\n }\n\n /**\n * Get a nested value from an object\n */\n private getNestedValue(\n obj: Record<string, unknown>,\n path: string[],\n ): unknown {\n if (path.length === 0) {\n return obj;\n }\n\n let current: unknown = obj;\n\n for (const key of path) {\n if (typeof current !== 'object' || current === null) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return current;\n }\n\n /**\n * Finalize parsing - try to complete any partial values\n */\n private finalize(): void {\n // If there's remaining buffer, try to parse as JSON\n if (this.state.buffer.trim()) {\n try {\n const parsed = JSON.parse(this.state.buffer);\n this.result = parsed;\n } catch {\n // Incomplete JSON, use what we have\n }\n }\n }\n}\n\n/**\n * Process an escape sequence character\n */\nfunction processEscapeChar(char: string): string {\n switch (char) {\n case 'n':\n return '\\n';\n case 'r':\n return '\\r';\n case 't':\n return '\\t';\n case '\\\\':\n return '\\\\';\n case '\"':\n return '\"';\n case '/':\n return '/';\n case 'b':\n return '\\b';\n case 'f':\n return '\\f';\n default:\n return char;\n }\n}\n\n/**\n * Tokenize a JSON string (utility for debugging)\n */\nexport function tokenizeJson(json: string): JsonToken[] {\n const tokens: JsonToken[] = [];\n const path: string[] = [];\n let inString = false;\n let inEscape = false;\n let currentString = '';\n let currentKey: string | null = null;\n\n for (let i = 0; i < json.length; i++) {\n const char = json[i];\n\n if (inString) {\n if (inEscape) {\n // Process escape sequence\n currentString += processEscapeChar(char);\n inEscape = false;\n } else if (char === '\\\\') {\n inEscape = true;\n } else if (char === '\"') {\n inString = false;\n tokens.push({\n type: currentKey === null ? 'key' : 'string',\n value: currentString,\n path: [...path],\n complete: true,\n });\n if (currentKey === null) {\n currentKey = currentString;\n }\n currentString = '';\n } else {\n currentString += char;\n }\n } else if (/\\s/.test(char)) {\n continue;\n } else if (char === '{') {\n tokens.push({\n type: 'object_start',\n value: '{',\n path: [...path],\n complete: true,\n });\n } else if (char === '}') {\n tokens.push({\n type: 'object_end',\n value: '}',\n path: [...path],\n complete: true,\n });\n path.pop();\n currentKey = null;\n } else if (char === '[') {\n tokens.push({\n type: 'array_start',\n value: '[',\n path: [...path],\n complete: true,\n });\n } else if (char === ']') {\n tokens.push({\n type: 'array_end',\n value: ']',\n path: [...path],\n complete: true,\n });\n } else if (char === ':') {\n tokens.push({\n type: 'colon',\n value: ':',\n path: [...path],\n complete: true,\n });\n if (currentKey) {\n path.push(currentKey);\n }\n } else if (char === ',') {\n tokens.push({\n type: 'comma',\n value: ',',\n path: [...path],\n complete: true,\n });\n path.pop();\n currentKey = null;\n } else if (char === '\"') {\n inString = true;\n currentString = '';\n }\n }\n\n return tokens;\n}\n","/**\n * Streaming Extractor\n *\n * Extracts structured data from streaming LLM responses.\n */\n\nimport { z } from 'zod';\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n StreamingResult,\n StreamingOptions,\n FieldUpdate,\n PartialState,\n StreamMetadata,\n} from '../types/streaming.types.js';\nimport type {\n StructuredRequestOptions,\n ChatMessage,\n} from '../types/core.types.js';\nimport type { ProviderAdapter } from '../types/provider.types.js';\nimport type { StructuredClient } from '../core/StructuredClient.js';\nimport { zodToJsonSchema, schemaToPrompt } from '../schema/SchemaToPrompt.js';\nimport { validatePartial } from '../schema/SchemaValidator.js';\nimport { IncrementalJsonParser } from './IncrementalJsonParser.js';\n\n/**\n * Events for streaming result\n */\ninterface StreamingResultEvents<T> {\n partial: { data: Partial<T>; path: string | null };\n field: { path: string; value: unknown };\n complete: { data: T };\n error: { error: Error };\n}\n\n/**\n * Create a streaming result for extracting structured data\n */\nexport function createStreamingResult<T extends z.ZodType>(\n _client: StructuredClient,\n provider: ProviderAdapter,\n options: StructuredRequestOptions<T>,\n streamingOptions?: StreamingOptions,\n): StreamingResult<z.infer<T>> {\n const emitter = new EventEmitter<StreamingResultEvents<z.infer<T>>>();\n const parser = new IncrementalJsonParser();\n\n let isComplete = false;\n const current: Partial<z.infer<T>> = {};\n let finalResult: z.infer<T> | undefined;\n let error: Error | undefined;\n let cancelled = false;\n\n const metadata: StreamMetadata = {\n totalChunks: 0,\n totalChars: 0,\n startTime: Date.now(),\n };\n\n // Start streaming extraction\n const streamPromise = executeStreamingExtraction();\n\n async function executeStreamingExtraction(): Promise<void> {\n try {\n const jsonSchema = zodToJsonSchema(options.response_format);\n const messages = prepareMessages(\n options.messages,\n options.response_format,\n );\n\n const stream = provider.createStreamingCompletion({\n model: options.model,\n messages,\n mode: 'json',\n jsonSchema,\n stream: true,\n });\n\n for await (const chunk of stream) {\n if (cancelled) {\n break;\n }\n\n metadata.totalChunks++;\n metadata.totalChars += chunk.content.length;\n\n // Feed chunk to parser\n const updates = parser.feed(chunk.content);\n\n // Process field updates\n for (const update of updates) {\n const fieldUpdate: FieldUpdate = {\n path: update.path.join('.'),\n value: update.value,\n complete: update.complete,\n timestamp: Date.now(),\n };\n\n // Update current partial\n setNestedValue(current, update.path, update.value);\n\n // Emit events\n if (streamingOptions?.onFieldComplete && update.complete) {\n streamingOptions.onFieldComplete(fieldUpdate.path, update.value);\n }\n\n emitter.emit('field', {\n path: fieldUpdate.path,\n value: update.value,\n });\n\n // Emit partial if we have enough fields\n if (shouldEmitPartial(current, streamingOptions)) {\n if (streamingOptions?.onPartial) {\n streamingOptions.onPartial(current, update.path.join('.'));\n }\n emitter.emit('partial', {\n data: current,\n path: update.path.join('.'),\n });\n }\n }\n\n if (chunk.isFinal) {\n metadata.endTime = Date.now();\n metadata.usage = chunk.usage;\n break;\n }\n }\n\n // Get final parsed result\n const parsedResult = parser.getResult();\n\n // Validate final result\n const validation = options.response_format.safeParse(parsedResult);\n\n if (validation.success) {\n finalResult = validation.data;\n isComplete = true;\n emitter.emit('complete', { data: finalResult });\n } else {\n error = new Error(\n `Validation failed: ${validation.error.issues.map((i) => i.message).join(', ')}`,\n );\n emitter.emit('error', { error });\n }\n } catch (err) {\n error = err instanceof Error ? err : new Error(String(err));\n emitter.emit('error', { error });\n if (streamingOptions?.onError) {\n streamingOptions.onError(error);\n }\n }\n }\n\n function prepareMessages(\n messages: ChatMessage[],\n schema: z.ZodType,\n ): ChatMessage[] {\n const prompt = schemaToPrompt(schema, {\n format: 'json-schema',\n includeConstraints: true,\n });\n\n const systemIndex = messages.findIndex((m) => m.role === 'system');\n\n if (systemIndex >= 0) {\n const newMessages = [...messages];\n newMessages[systemIndex] = {\n ...newMessages[systemIndex],\n content: `${newMessages[systemIndex].content}\\n\\nRespond with valid JSON matching this schema:\\n${prompt.text}`,\n };\n return newMessages;\n }\n\n return [\n {\n role: 'system',\n content: `Respond with valid JSON matching this schema:\\n${prompt.text}`,\n },\n ...messages,\n ];\n }\n\n function shouldEmitPartial(\n partial: Partial<z.infer<T>>,\n options?: StreamingOptions,\n ): boolean {\n if (!options?.yieldPartials) {\n return false;\n }\n\n const fieldCount = countFields(partial);\n const minFields = options.minFieldsBeforeYield ?? 1;\n\n return fieldCount >= minFields;\n }\n\n function countFields(obj: unknown, count = 0): number {\n if (typeof obj !== 'object' || obj === null) {\n return count + 1;\n }\n\n if (Array.isArray(obj)) {\n return obj.reduce((c, item) => countFields(item, c), count);\n }\n\n return Object.values(obj).reduce(\n (c, value) => countFields(value, c),\n count,\n );\n }\n\n function setNestedValue(\n obj: Record<string, unknown>,\n path: string[],\n value: unknown,\n ): void {\n let current = obj;\n\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n\n if (!(key in current)) {\n // Check if next key is numeric (array)\n const nextKey = path[i + 1];\n current[key] = /^\\d+$/.test(nextKey) ? [] : {};\n }\n\n current = current[key] as Record<string, unknown>;\n }\n\n const lastKey = path[path.length - 1];\n current[lastKey] = value;\n }\n\n // Return StreamingResult interface\n return {\n async *partials(): AsyncIterableIterator<Partial<z.infer<T>>> {\n const partialQueue: Partial<z.infer<T>>[] = [];\n let resolveNext:\n | ((value: IteratorResult<Partial<z.infer<T>>>) => void)\n | null = null;\n let done = false;\n\n const onPartial = ({ data }: { data: Partial<z.infer<T>> }) => {\n if (resolveNext) {\n resolveNext({ value: { ...data }, done: false });\n resolveNext = null;\n } else {\n partialQueue.push({ ...data });\n }\n };\n\n const onComplete = () => {\n done = true;\n if (resolveNext) {\n resolveNext({\n value: undefined as unknown as Partial<z.infer<T>>,\n done: true,\n });\n resolveNext = null;\n }\n };\n\n const onError = () => {\n done = true;\n if (resolveNext) {\n resolveNext({\n value: undefined as unknown as Partial<z.infer<T>>,\n done: true,\n });\n resolveNext = null;\n }\n };\n\n emitter.on('partial', onPartial);\n emitter.on('complete', onComplete);\n emitter.on('error', onError);\n\n try {\n while (!done || partialQueue.length > 0) {\n if (partialQueue.length > 0) {\n yield partialQueue.shift()!;\n } else if (!done) {\n const result = await new Promise<\n IteratorResult<Partial<z.infer<T>>>\n >((resolve) => {\n resolveNext = resolve;\n });\n if (!result.done) {\n yield result.value;\n }\n }\n }\n } finally {\n emitter.off('partial', onPartial);\n emitter.off('complete', onComplete);\n emitter.off('error', onError);\n }\n },\n\n async *fields(): AsyncIterableIterator<FieldUpdate> {\n const fieldQueue: FieldUpdate[] = [];\n let resolveNext: ((value: IteratorResult<FieldUpdate>) => void) | null =\n null;\n let done = false;\n\n const onField = ({ path, value }: { path: string; value: unknown }) => {\n const update: FieldUpdate = {\n path,\n value,\n complete: true,\n timestamp: Date.now(),\n };\n\n if (resolveNext) {\n resolveNext({ value: update, done: false });\n resolveNext = null;\n } else {\n fieldQueue.push(update);\n }\n };\n\n const onComplete = () => {\n done = true;\n if (resolveNext) {\n resolveNext({\n value: undefined as unknown as FieldUpdate,\n done: true,\n });\n resolveNext = null;\n }\n };\n\n const onError = () => {\n done = true;\n if (resolveNext) {\n resolveNext({\n value: undefined as unknown as FieldUpdate,\n done: true,\n });\n resolveNext = null;\n }\n };\n\n emitter.on('field', onField);\n emitter.on('complete', onComplete);\n emitter.on('error', onError);\n\n try {\n while (!done || fieldQueue.length > 0) {\n if (fieldQueue.length > 0) {\n yield fieldQueue.shift()!;\n } else if (!done) {\n const result = await new Promise<IteratorResult<FieldUpdate>>(\n (resolve) => {\n resolveNext = resolve;\n },\n );\n if (!result.done) {\n yield result.value;\n }\n }\n }\n } finally {\n emitter.off('field', onField);\n emitter.off('complete', onComplete);\n emitter.off('error', onError);\n }\n },\n\n async final(): Promise<z.infer<T>> {\n await streamPromise;\n\n if (error) {\n throw error;\n }\n\n if (!finalResult) {\n throw new Error('Stream completed without valid result');\n }\n\n return finalResult;\n },\n\n onPartial(\n callback: (partial: Partial<z.infer<T>>, path: string | null) => void,\n ): void {\n emitter.on('partial', ({ data, path }) => callback(data, path));\n },\n\n onField(callback: (path: string, value: unknown) => void): void {\n emitter.on('field', ({ path, value }) => callback(path, value));\n },\n\n onComplete(callback: (result: z.infer<T>) => void): void {\n emitter.on('complete', ({ data }) => callback(data));\n },\n\n onError(callback: (error: Error) => void): void {\n emitter.on('error', ({ error }) => callback(error));\n },\n\n cancel(): void {\n cancelled = true;\n },\n\n get isComplete(): boolean {\n return isComplete;\n },\n\n get current(): Partial<z.infer<T>> {\n return { ...current };\n },\n };\n}\n\n/**\n * Get partial state information\n */\nexport function getPartialState<T>(\n schema: z.ZodType<T>,\n partial: Partial<T>,\n): PartialState<T> {\n const fieldPaths = getAllFieldPaths(partial);\n const schemaFieldPaths = getSchemaFieldPaths(schema);\n\n const completedFields = fieldPaths.filter((p) => {\n const value = getNestedValue(partial as Record<string, unknown>, p);\n return value !== undefined;\n });\n\n const inProgressFields = schemaFieldPaths.filter(\n (p) => !completedFields.includes(p),\n );\n\n const validation = validatePartial(schema, partial);\n\n return {\n data: partial,\n completedFields,\n inProgressFields,\n completionPercent: (completedFields.length / schemaFieldPaths.length) * 100,\n isValid: validation.success,\n };\n}\n\nfunction getAllFieldPaths(\n obj: unknown,\n prefix = '',\n paths: string[] = [],\n): string[] {\n if (typeof obj !== 'object' || obj === null) {\n if (prefix) {\n paths.push(prefix);\n }\n return paths;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n getAllFieldPaths(item, `${prefix}[${index}]`, paths);\n });\n return paths;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n getAllFieldPaths(value, newPrefix, paths);\n }\n\n return paths;\n}\n\nfunction getSchemaFieldPaths(schema: z.ZodType, prefix = ''): string[] {\n const paths: string[] = [];\n\n if (schema instanceof z.ZodObject) {\n const shape = schema.shape;\n for (const [key, fieldSchema] of Object.entries(shape)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n paths.push(...getSchemaFieldPaths(fieldSchema as z.ZodType, newPrefix));\n }\n } else if (schema instanceof z.ZodArray) {\n // For arrays, just mark the array path\n if (prefix) {\n paths.push(prefix);\n }\n } else {\n if (prefix) {\n paths.push(prefix);\n }\n }\n\n return paths.length > 0 ? paths : [prefix].filter(Boolean);\n}\n\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.replace(/\\[(\\d+)\\]/g, '.$1').split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (typeof current !== 'object' || current === null) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n","/**\n * Structured Client\n *\n * Main client for extracting structured data from LLM responses.\n */\n\nimport { z } from 'zod';\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n StructuredClientConfig,\n StructuredRequestOptions,\n ExtractionResult,\n ExtractionMode,\n ExtractionModeConfig,\n RetryConfig,\n ExtractionAttempt,\n ExtractionMetadata,\n TokenUsage,\n ChatMessage,\n ValidationError,\n} from '../types/core.types.js';\nimport { StructuredError } from '../types/core.types.js';\nimport type {\n ProviderAdapter,\n ProviderResponse,\n} from '../types/provider.types.js';\nimport type {\n StreamingOptions,\n StreamingResult,\n} from '../types/streaming.types.js';\nimport type { JsonSchema, ToolDefinition } from '../types/schema.types.js';\nimport { zodToJsonSchema, schemaToPrompt } from '../schema/SchemaToPrompt.js';\nimport {\n validateSchema,\n getValidationHints,\n} from '../schema/SchemaValidator.js';\n\n/**\n * Events emitted by the StructuredClient\n */\ninterface StructuredClientEvents {\n 'extraction:start': { requestId: string; mode: ExtractionMode };\n 'extraction:attempt': {\n requestId: string;\n attempt: number;\n mode: ExtractionMode;\n };\n 'extraction:success': { requestId: string; data: unknown; attempts: number };\n 'extraction:error': { requestId: string; error: Error; attempt: number };\n 'extraction:retry': {\n requestId: string;\n attempt: number;\n reason: string;\n hints: string[];\n };\n 'validation:failed': { requestId: string; errors: ValidationError[] };\n 'mode:switch': {\n requestId: string;\n from: ExtractionMode;\n to: ExtractionMode;\n };\n}\n\n/**\n * Default retry configuration\n */\nconst DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxAttempts: 3,\n backoffMultiplier: 1.5,\n initialDelay: 1000,\n maxDelay: 10000,\n retryOn: ['validation_error', 'parse_error'],\n};\n\n/**\n * Main structured output client\n */\nexport class StructuredClient extends EventEmitter<StructuredClientEvents> {\n private readonly provider: ProviderAdapter;\n private readonly config: StructuredClientConfig;\n\n constructor(\n provider: ProviderAdapter,\n config: Partial<StructuredClientConfig> = {},\n ) {\n super();\n this.provider = provider;\n this.config = {\n defaultMode: config.defaultMode ?? 'json',\n defaultRetry: { ...DEFAULT_RETRY_CONFIG, ...config.defaultRetry },\n enableFixHints: config.enableFixHints ?? true,\n validatePartials: config.validatePartials ?? false,\n ...config,\n };\n }\n\n /**\n * Extract structured data from an LLM response\n */\n async extract<T extends z.ZodType>(\n options: StructuredRequestOptions<T>,\n ): Promise<ExtractionResult<z.infer<T>>> {\n const requestId = this.generateRequestId();\n const startTime = Date.now();\n const attempts: ExtractionAttempt[] = [];\n\n const mode = this.resolveMode(options.mode);\n const retryConfig: RetryConfig = {\n ...DEFAULT_RETRY_CONFIG,\n ...this.config.defaultRetry,\n ...options.retry,\n };\n\n this.emit('extraction:start', { requestId, mode });\n\n let lastError: Error | undefined;\n let currentMode = mode;\n const totalTokens: TokenUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n\n for (let attempt = 1; attempt <= retryConfig.maxAttempts; attempt++) {\n this.emit('extraction:attempt', {\n requestId,\n attempt,\n mode: currentMode,\n });\n\n try {\n const result = await this.executeExtraction(\n options,\n currentMode,\n attempts,\n attempt,\n );\n\n // Accumulate token usage\n if (result.usage) {\n totalTokens.promptTokens += result.usage.promptTokens;\n totalTokens.completionTokens += result.usage.completionTokens;\n totalTokens.totalTokens += result.usage.totalTokens;\n }\n\n // Validate the result\n const validation = validateSchema(\n options.response_format,\n result.content,\n );\n\n if (validation.success) {\n const attemptRecord: ExtractionAttempt = {\n attempt,\n mode: currentMode,\n success: true,\n duration: Date.now() - startTime,\n rawResponse: result.rawResponse,\n };\n attempts.push(attemptRecord);\n\n this.emit('extraction:success', {\n requestId,\n data: validation.data,\n attempts: attempt,\n });\n\n return {\n success: true,\n data: validation.data,\n raw: result.rawResponse,\n metadata: this.createMetadata(\n startTime,\n attempts,\n totalTokens,\n options.model,\n ),\n };\n }\n\n // Validation failed\n const validationErrors = validation.errors ?? [];\n this.emit('validation:failed', { requestId, errors: validationErrors });\n\n const hints = this.config.enableFixHints\n ? getValidationHints(options.response_format, result.content)\n : [];\n\n attempts.push({\n attempt,\n mode: currentMode,\n success: false,\n duration: Date.now() - startTime,\n rawResponse: result.rawResponse,\n error: 'Validation failed',\n validationErrors,\n });\n\n lastError = this.createStructuredError(\n 'Validation failed',\n 'VALIDATION_ERROR',\n attempts,\n validationErrors,\n result.content,\n );\n\n // Check if we should retry\n if (\n attempt < retryConfig.maxAttempts &&\n this.shouldRetry('validation_error', retryConfig, attempt)\n ) {\n this.emit('extraction:retry', {\n requestId,\n attempt,\n reason: 'validation_error',\n hints,\n });\n\n // Add fix hints to messages for retry\n if (hints.length > 0 && this.config.enableFixHints) {\n options = this.addFixHintsToMessages(\n options,\n hints,\n validationErrors,\n );\n }\n\n // Apply backoff\n await this.delay(this.calculateBackoff(attempt, retryConfig));\n\n // Consider mode switching for hybrid mode\n if (this.shouldSwitchMode(currentMode, attempt, options.mode)) {\n const newMode = this.getNextMode(currentMode);\n this.emit('mode:switch', {\n requestId,\n from: currentMode,\n to: newMode,\n });\n currentMode = newMode;\n }\n\n continue;\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit('extraction:error', { requestId, error: err, attempt });\n\n const errorType = this.classifyError(err);\n attempts.push({\n attempt,\n mode: currentMode,\n success: false,\n duration: Date.now() - startTime,\n error: err.message,\n });\n\n lastError = err;\n\n // Check if we should retry\n if (\n attempt < retryConfig.maxAttempts &&\n this.shouldRetry(errorType, retryConfig, attempt)\n ) {\n this.emit('extraction:retry', {\n requestId,\n attempt,\n reason: errorType,\n hints: [],\n });\n\n await this.delay(this.calculateBackoff(attempt, retryConfig));\n continue;\n }\n }\n }\n\n // All attempts failed\n return {\n success: false,\n error: lastError ?? new Error('All extraction attempts failed'),\n raw: attempts[attempts.length - 1]?.rawResponse,\n metadata: this.createMetadata(\n startTime,\n attempts,\n totalTokens,\n options.model,\n ),\n };\n }\n\n /**\n * Extract with streaming partial results\n */\n async extractStream<T extends z.ZodType>(\n options: StructuredRequestOptions<T>,\n streamingOptions?: StreamingOptions,\n ): Promise<StreamingResult<z.infer<T>>> {\n // Import streaming implementation dynamically to avoid circular deps\n const { createStreamingResult } = await import(\n '../streaming/StreamingExtractor.js'\n );\n return createStreamingResult(\n this,\n this.provider,\n options,\n streamingOptions,\n );\n }\n\n /**\n * Execute a single extraction attempt\n */\n private async executeExtraction<T extends z.ZodType>(\n options: StructuredRequestOptions<T>,\n mode: ExtractionMode,\n _previousAttempts: ExtractionAttempt[],\n _attempt: number,\n ): Promise<{ content: unknown; rawResponse: string; usage?: TokenUsage }> {\n const { model, messages } = options;\n const jsonSchema = zodToJsonSchema(options.response_format);\n\n let response: ProviderResponse;\n\n switch (mode) {\n case 'json':\n response = await this.extractWithJsonMode(model, messages, jsonSchema);\n break;\n case 'tool':\n response = await this.extractWithToolMode(\n model,\n messages,\n jsonSchema,\n options.response_format,\n );\n break;\n case 'prompt':\n response = await this.extractWithPromptMode(\n model,\n messages,\n options.response_format,\n );\n break;\n case 'hybrid':\n // Start with json mode for hybrid\n response = await this.extractWithJsonMode(model, messages, jsonSchema);\n break;\n default:\n throw new Error(`Unknown extraction mode: ${mode as string}`);\n }\n\n // Parse the response content\n const content = this.parseResponse(response, mode);\n\n return {\n content,\n rawResponse: response.content,\n usage: response.usage,\n };\n }\n\n /**\n * Extract using JSON mode\n */\n private async extractWithJsonMode(\n model: string,\n messages: ChatMessage[],\n jsonSchema: JsonSchema,\n ): Promise<ProviderResponse> {\n return this.provider.createCompletion({\n model,\n messages,\n mode: 'json',\n jsonSchema,\n });\n }\n\n /**\n * Extract using tool/function calling mode\n */\n private async extractWithToolMode<T extends z.ZodType>(\n model: string,\n messages: ChatMessage[],\n jsonSchema: JsonSchema,\n _schema: T,\n ): Promise<ProviderResponse> {\n const toolDefinition: ToolDefinition = {\n type: 'function',\n function: {\n name: 'extract_data',\n description: 'Extract structured data from the response',\n parameters: jsonSchema,\n strict: true,\n },\n };\n\n return this.provider.createCompletion({\n model,\n messages,\n mode: 'tool',\n toolDefinition,\n });\n }\n\n /**\n * Extract using prompt engineering mode\n */\n private async extractWithPromptMode<T extends z.ZodType>(\n model: string,\n messages: ChatMessage[],\n schema: T,\n ): Promise<ProviderResponse> {\n // Generate schema prompt\n const prompt = schemaToPrompt(schema, {\n format: 'natural',\n includeConstraints: true,\n includeExamples: true,\n });\n\n // Add schema prompt to system message\n const enhancedMessages = this.addSchemaPromptToMessages(\n messages,\n prompt.text,\n );\n\n return this.provider.createCompletion({\n model,\n messages: enhancedMessages,\n mode: 'prompt',\n });\n }\n\n /**\n * Parse the response based on mode\n */\n private parseResponse(\n response: ProviderResponse,\n mode: ExtractionMode,\n ): unknown {\n if (\n mode === 'tool' &&\n response.toolCalls &&\n response.toolCalls.length > 0\n ) {\n // Parse tool call arguments\n try {\n return JSON.parse(response.toolCalls[0].arguments);\n } catch {\n throw new Error('Failed to parse tool call arguments');\n }\n }\n\n // Extract JSON from response content\n return this.extractJsonFromContent(response.content);\n }\n\n /**\n * Extract JSON from text content\n */\n private extractJsonFromContent(content: string): unknown {\n // Try direct parse first\n try {\n return JSON.parse(content);\n } catch {\n // Try to find JSON in the content\n }\n\n // Look for JSON in code blocks\n const codeBlockMatch = content.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (codeBlockMatch) {\n try {\n return JSON.parse(codeBlockMatch[1].trim());\n } catch {\n // Continue to next approach\n }\n }\n\n // Look for JSON object/array anywhere in content\n const jsonMatch = content.match(/(\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])/);\n if (jsonMatch) {\n try {\n return JSON.parse(jsonMatch[1]);\n } catch {\n // Continue to throw\n }\n }\n\n throw new Error('No valid JSON found in response');\n }\n\n /**\n * Add schema prompt to messages\n */\n private addSchemaPromptToMessages(\n messages: ChatMessage[],\n schemaPrompt: string,\n ): ChatMessage[] {\n const systemIndex = messages.findIndex((m) => m.role === 'system');\n\n if (systemIndex >= 0) {\n const newMessages = [...messages];\n newMessages[systemIndex] = {\n ...newMessages[systemIndex],\n content: `${newMessages[systemIndex].content}\\n\\n${schemaPrompt}\\n\\nRespond with valid JSON only.`,\n };\n return newMessages;\n }\n\n // Add new system message\n return [\n {\n role: 'system',\n content: `${schemaPrompt}\\n\\nRespond with valid JSON only.`,\n },\n ...messages,\n ];\n }\n\n /**\n * Add fix hints to messages for retry\n */\n private addFixHintsToMessages<T extends z.ZodType>(\n options: StructuredRequestOptions<T>,\n hints: string[],\n errors: ValidationError[],\n ): StructuredRequestOptions<T> {\n const hintsText = hints.join('\\n');\n const errorsText = errors\n .map((e) => `- ${e.path.join('.')}: ${e.message}`)\n .join('\\n');\n\n const fixPrompt = `Your previous response had validation errors:\\n${errorsText}\\n\\nPlease fix these issues:\\n${hintsText}`;\n\n const newMessages: ChatMessage[] = [\n ...options.messages,\n {\n role: 'user',\n content: fixPrompt,\n },\n ];\n\n return {\n ...options,\n messages: newMessages,\n };\n }\n\n /**\n * Resolve the extraction mode\n */\n private resolveMode(modeConfig?: ExtractionModeConfig): ExtractionMode {\n if (!modeConfig) {\n return this.config.defaultMode ?? 'json';\n }\n\n if (typeof modeConfig === 'string') {\n return modeConfig;\n }\n\n return modeConfig.mode;\n }\n\n /**\n * Check if we should retry\n */\n private shouldRetry(\n errorType: string,\n config: RetryConfig,\n _attempt: number,\n ): boolean {\n return (config.retryOn ?? []).includes(\n errorType as RetryConfig['retryOn'][number],\n );\n }\n\n /**\n * Classify an error for retry logic\n */\n private classifyError(error: Error): string {\n const message = error.message.toLowerCase();\n\n if (message.includes('rate limit') || message.includes('429')) {\n return 'rate_limit';\n }\n if (message.includes('timeout')) {\n return 'timeout';\n }\n if (message.includes('json') || message.includes('parse')) {\n return 'parse_error';\n }\n if (message.includes('validation')) {\n return 'validation_error';\n }\n\n return 'unknown_error';\n }\n\n /**\n * Check if mode should be switched (for hybrid mode)\n */\n private shouldSwitchMode(\n _currentMode: ExtractionMode,\n attempt: number,\n modeConfig?: ExtractionModeConfig,\n ): boolean {\n if (!modeConfig || typeof modeConfig === 'string') {\n return false;\n }\n\n if (!('mode' in modeConfig) || modeConfig.mode !== 'hybrid') {\n return false;\n }\n\n // Switch modes after first failed attempt\n const hybridConfig = modeConfig as {\n mode: 'hybrid';\n fallbackOrder?: ExtractionMode[];\n };\n return (\n attempt > 0 &&\n !!hybridConfig.fallbackOrder &&\n hybridConfig.fallbackOrder.length > 0\n );\n }\n\n /**\n * Get next mode in fallback order\n */\n private getNextMode(currentMode: ExtractionMode): ExtractionMode {\n const fallbackOrder: ExtractionMode[] = ['json', 'tool', 'prompt'];\n const currentIndex = fallbackOrder.indexOf(currentMode);\n\n if (currentIndex < fallbackOrder.length - 1) {\n return fallbackOrder[currentIndex + 1];\n }\n\n return fallbackOrder[0];\n }\n\n /**\n * Calculate backoff delay\n */\n private calculateBackoff(attempt: number, config: RetryConfig): number {\n const delay =\n (config.initialDelay ?? 1000) *\n Math.pow(config.backoffMultiplier ?? 1.5, attempt - 1);\n return Math.min(delay, config.maxDelay ?? 10000);\n }\n\n /**\n * Delay helper\n */\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Generate a request ID\n */\n private generateRequestId(): string {\n return `req_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n\n /**\n * Create extraction metadata\n */\n private createMetadata(\n startTime: number,\n attempts: ExtractionAttempt[],\n usage: TokenUsage,\n model: string,\n ): ExtractionMetadata {\n return {\n totalAttempts: attempts.length,\n totalDuration: Date.now() - startTime,\n finalMode: attempts[attempts.length - 1]?.mode ?? 'json',\n tokenUsage: usage,\n attempts,\n model,\n };\n }\n\n /**\n * Create a structured error\n */\n private createStructuredError(\n message: string,\n code: string,\n attempts: ExtractionAttempt[],\n validationErrors?: ValidationError[],\n partial?: unknown,\n ): StructuredError {\n const error = new Error(message) as StructuredError;\n error.name = 'StructuredError';\n error.code = code;\n error.attempts = attempts;\n error.validationErrors = validationErrors;\n error.partial = partial;\n return error;\n }\n\n /**\n * Get provider capabilities\n */\n getProviderCapabilities(model: string) {\n return this.provider.getCapabilities(model);\n }\n\n /**\n * Check if a mode is supported\n */\n supportsMode(mode: ExtractionMode, model: string): boolean {\n const capabilities = this.provider.getCapabilities(model);\n\n switch (mode) {\n case 'json':\n return capabilities.jsonMode;\n case 'tool':\n return capabilities.toolCalling;\n case 'prompt':\n return true; // Always supported\n case 'hybrid':\n return capabilities.jsonMode || capabilities.toolCalling;\n default:\n return false;\n }\n }\n}\n\n/**\n * Create a StructuredClient instance\n */\nexport function createStructuredClient(\n provider: ProviderAdapter,\n config?: Partial<StructuredClientConfig>,\n): StructuredClient {\n return new StructuredClient(provider, config);\n}\n","/**\n * Schema Module\n *\n * Exports for schema processing and validation utilities.\n */\n\nexport {\n schemaToPrompt,\n zodToJsonSchema,\n analyzeSchema,\n extractFieldInfo,\n generateExample,\n SchemaPromptGenerator,\n} from './SchemaToPrompt.js';\n\nexport {\n validateSchema,\n validateSchemaOrThrow,\n validatePartial,\n matchesSchema,\n coerceToSchema,\n getValidationHints,\n formatZodErrors,\n SchemaValidator,\n} from './SchemaValidator.js';\n","/**\n * Streaming Module\n *\n * Exports for streaming structured output extraction.\n */\n\nexport {\n createStreamingResult,\n getPartialState,\n} from './StreamingExtractor.js';\n\nexport {\n IncrementalJsonParser,\n tokenizeJson,\n type FieldParseUpdate,\n} from './IncrementalJsonParser.js';\n","/**\n * OpenAI Provider Adapter\n *\n * Adapter for OpenAI's API for structured output extraction.\n */\n\nimport type {\n ProviderAdapter,\n ProviderCapabilities,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderToolCall,\n OpenAIOptions,\n} from '../types/provider.types.js';\nimport type { ChatMessage } from '../types/core.types.js';\nimport type { JsonSchema, ToolDefinition } from '../types/schema.types.js';\n\n/**\n * OpenAI client interface (from openai package)\n */\ninterface OpenAIClient {\n chat: {\n completions: {\n create(params: unknown): Promise<OpenAIChatCompletion>;\n };\n };\n}\n\n/**\n * OpenAI chat completion response\n */\ninterface OpenAIChatCompletion {\n id: string;\n choices: Array<{\n message: {\n role: string;\n content: string | null;\n tool_calls?: Array<{\n id: string;\n type: string;\n function: {\n name: string;\n arguments: string;\n };\n }>;\n };\n finish_reason: string;\n }>;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * OpenAI streaming chunk\n */\ninterface OpenAIStreamChunk {\n id: string;\n choices: Array<{\n delta: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason: string | null;\n }>;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * Model capabilities for OpenAI models\n */\nconst MODEL_CAPABILITIES: Record<string, Partial<ProviderCapabilities>> = {\n 'gpt-4o': {\n jsonMode: true,\n strictJsonMode: true,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 128000,\n maxOutputTokens: 16384,\n },\n 'gpt-4o-mini': {\n jsonMode: true,\n strictJsonMode: true,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 128000,\n maxOutputTokens: 16384,\n },\n 'gpt-4-turbo': {\n jsonMode: true,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 128000,\n maxOutputTokens: 4096,\n },\n 'gpt-4': {\n jsonMode: true,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 8192,\n maxOutputTokens: 4096,\n },\n 'gpt-3.5-turbo': {\n jsonMode: true,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 16385,\n maxOutputTokens: 4096,\n },\n 'o1-preview': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: false,\n streaming: false,\n systemMessages: false,\n maxContextWindow: 128000,\n maxOutputTokens: 32768,\n },\n 'o1-mini': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: false,\n streaming: false,\n systemMessages: false,\n maxContextWindow: 128000,\n maxOutputTokens: 65536,\n },\n};\n\n/**\n * OpenAI provider adapter\n */\nexport class OpenAIAdapter implements ProviderAdapter {\n readonly name = 'openai';\n private readonly client: OpenAIClient;\n\n constructor(client: OpenAIClient, _options: OpenAIOptions = {}) {\n this.client = client;\n }\n\n /**\n * Get capabilities for a model\n */\n getCapabilities(model: string): ProviderCapabilities {\n const base = MODEL_CAPABILITIES[model] ?? MODEL_CAPABILITIES['gpt-4o'];\n\n return {\n jsonMode: base.jsonMode ?? true,\n strictJsonMode: base.strictJsonMode ?? false,\n toolCalling: base.toolCalling ?? true,\n streaming: base.streaming ?? true,\n systemMessages: base.systemMessages ?? true,\n maxContextWindow: base.maxContextWindow,\n maxOutputTokens: base.maxOutputTokens,\n };\n }\n\n /**\n * Check if JSON mode is available\n */\n supportsJsonMode(model: string): boolean {\n return this.getCapabilities(model).jsonMode;\n }\n\n /**\n * Check if tool calling is available\n */\n supportsToolCalling(model: string): boolean {\n return this.getCapabilities(model).toolCalling;\n }\n\n /**\n * Create a completion request\n */\n async createCompletion(request: ProviderRequest): Promise<ProviderResponse> {\n const params = this.buildRequestParams(request);\n const response = await this.client.chat.completions.create(params);\n\n return this.parseResponse(response);\n }\n\n /**\n * Create a streaming completion request\n */\n async *createStreamingCompletion(\n request: ProviderRequest,\n ): AsyncIterableIterator<ProviderStreamChunk> {\n const params = this.buildRequestParams(request);\n params.stream = true;\n params.stream_options = { include_usage: true };\n\n const stream = await this.client.chat.completions.create(params);\n\n // Handle the stream as an async iterable\n const asyncStream = stream as unknown as AsyncIterable<OpenAIStreamChunk>;\n\n const toolCalls: Map<\n number,\n { id?: string; name?: string; arguments: string }\n > = new Map();\n\n for await (const chunk of asyncStream) {\n const choice = chunk.choices[0];\n\n if (!choice) continue;\n\n const delta = choice.delta;\n\n // Accumulate tool calls\n if (delta.tool_calls) {\n for (const tc of delta.tool_calls) {\n const existing = toolCalls.get(tc.index) ?? { arguments: '' };\n if (tc.id) existing.id = tc.id;\n if (tc.function?.name) existing.name = tc.function.name;\n if (tc.function?.arguments)\n existing.arguments += tc.function.arguments;\n toolCalls.set(tc.index, existing);\n }\n }\n\n const isFinal = choice.finish_reason !== null;\n\n yield {\n content: delta.content ?? '',\n isFinal,\n finishReason: choice.finish_reason ?? undefined,\n usage: chunk.usage\n ? {\n promptTokens: chunk.usage.prompt_tokens,\n completionTokens: chunk.usage.completion_tokens,\n totalTokens: chunk.usage.total_tokens,\n }\n : undefined,\n toolCallDeltas: delta.tool_calls?.map((tc) => ({\n index: tc.index,\n id: tc.id,\n name: tc.function?.name,\n arguments: tc.function?.arguments,\n })),\n };\n }\n }\n\n /**\n * Format messages for OpenAI\n */\n formatMessages(messages: ChatMessage[]): unknown {\n return messages.map((msg) => ({\n role: msg.role,\n content: msg.content,\n name: msg.name,\n }));\n }\n\n /**\n * Format JSON schema for OpenAI\n */\n formatJsonSchema(schema: JsonSchema): unknown {\n return {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n schema,\n strict: true,\n },\n };\n }\n\n /**\n * Format tool definition for OpenAI\n */\n formatToolDefinition(tool: ToolDefinition): unknown {\n return {\n type: 'function',\n function: {\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters,\n strict: tool.function.strict,\n },\n };\n }\n\n /**\n * Build request parameters\n */\n private buildRequestParams(\n request: ProviderRequest,\n ): Record<string, unknown> {\n const params: Record<string, unknown> = {\n model: request.model,\n messages: this.formatMessages(request.messages),\n temperature: request.temperature,\n max_tokens: request.maxTokens,\n };\n\n // Apply mode-specific settings\n switch (request.mode) {\n case 'json':\n if (request.jsonSchema) {\n const caps = this.getCapabilities(request.model);\n if (caps.strictJsonMode) {\n params.response_format = {\n type: 'json_schema',\n json_schema: {\n name: 'response',\n schema: request.jsonSchema,\n strict: true,\n },\n };\n } else {\n params.response_format = { type: 'json_object' };\n }\n }\n break;\n\n case 'tool':\n if (request.toolDefinition) {\n params.tools = [this.formatToolDefinition(request.toolDefinition)];\n params.tool_choice = {\n type: 'function',\n function: { name: request.toolDefinition.function.name },\n };\n }\n break;\n }\n\n // Merge additional options\n if (request.options) {\n Object.assign(params, request.options);\n }\n\n return params;\n }\n\n /**\n * Parse response\n */\n private parseResponse(response: OpenAIChatCompletion): ProviderResponse {\n const choice = response.choices[0];\n const message = choice?.message;\n\n let toolCalls: ProviderToolCall[] | undefined;\n\n if (message?.tool_calls && message.tool_calls.length > 0) {\n toolCalls = message.tool_calls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments,\n }));\n }\n\n return {\n content: message?.content ?? '',\n usage: response.usage\n ? {\n promptTokens: response.usage.prompt_tokens,\n completionTokens: response.usage.completion_tokens,\n totalTokens: response.usage.total_tokens,\n }\n : undefined,\n finishReason: choice?.finish_reason,\n toolCalls,\n raw: response,\n };\n }\n}\n\n/**\n * Create an OpenAI adapter\n */\nexport function createOpenAIAdapter(\n client: OpenAIClient,\n options?: OpenAIOptions,\n): OpenAIAdapter {\n return new OpenAIAdapter(client, options);\n}\n","/**\n * Anthropic Provider Adapter\n *\n * Adapter for Anthropic's Claude API for structured output extraction.\n */\n\nimport type {\n ProviderAdapter,\n ProviderCapabilities,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderToolCall,\n AnthropicOptions,\n} from '../types/provider.types.js';\nimport type { ChatMessage } from '../types/core.types.js';\nimport type { JsonSchema, ToolDefinition } from '../types/schema.types.js';\n\n/**\n * Anthropic client interface (from @anthropic-ai/sdk)\n */\ninterface AnthropicClient {\n messages: {\n create(params: unknown): Promise<AnthropicMessage>;\n };\n}\n\n/**\n * Anthropic message response\n */\ninterface AnthropicMessage {\n id: string;\n type: string;\n role: string;\n content: Array<{\n type: 'text' | 'tool_use';\n text?: string;\n id?: string;\n name?: string;\n input?: unknown;\n }>;\n model: string;\n stop_reason: string | null;\n stop_sequence: string | null;\n usage: {\n input_tokens: number;\n output_tokens: number;\n };\n}\n\n/**\n * Anthropic streaming event\n */\ninterface AnthropicStreamEvent {\n type: string;\n message?: AnthropicMessage;\n index?: number;\n content_block?: {\n type: 'text' | 'tool_use';\n text?: string;\n id?: string;\n name?: string;\n };\n delta?: {\n type: string;\n text?: string;\n partial_json?: string;\n };\n usage?: {\n input_tokens: number;\n output_tokens: number;\n };\n}\n\n/**\n * Model capabilities for Anthropic models\n */\nconst MODEL_CAPABILITIES: Record<string, Partial<ProviderCapabilities>> = {\n 'claude-opus-4-20250514': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 200000,\n maxOutputTokens: 32768,\n },\n 'claude-sonnet-4-20250514': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 200000,\n maxOutputTokens: 64000,\n },\n 'claude-3-5-sonnet-20241022': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 200000,\n maxOutputTokens: 8192,\n },\n 'claude-3-5-haiku-20241022': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 200000,\n maxOutputTokens: 8192,\n },\n 'claude-3-opus-20240229': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 200000,\n maxOutputTokens: 4096,\n },\n 'claude-3-sonnet-20240229': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 200000,\n maxOutputTokens: 4096,\n },\n 'claude-3-haiku-20240307': {\n jsonMode: false,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 200000,\n maxOutputTokens: 4096,\n },\n};\n\n/**\n * Anthropic provider adapter\n */\nexport class AnthropicAdapter implements ProviderAdapter {\n readonly name = 'anthropic';\n private readonly client: AnthropicClient;\n private readonly options: AnthropicOptions;\n\n constructor(client: AnthropicClient, options: AnthropicOptions = {}) {\n this.client = client;\n this.options = options;\n }\n\n /**\n * Get capabilities for a model\n */\n getCapabilities(model: string): ProviderCapabilities {\n // Find matching model (handle model aliases)\n const modelKey = Object.keys(MODEL_CAPABILITIES).find(\n (key) => model.includes(key) || key.includes(model),\n );\n const base = modelKey\n ? MODEL_CAPABILITIES[modelKey]\n : MODEL_CAPABILITIES['claude-3-5-sonnet-20241022'];\n\n return {\n jsonMode: base.jsonMode ?? false,\n strictJsonMode: base.strictJsonMode ?? false,\n toolCalling: base.toolCalling ?? true,\n streaming: base.streaming ?? true,\n systemMessages: base.systemMessages ?? true,\n maxContextWindow: base.maxContextWindow,\n maxOutputTokens: base.maxOutputTokens,\n };\n }\n\n /**\n * Check if JSON mode is available\n */\n supportsJsonMode(_model: string): boolean {\n // Anthropic doesn't have native JSON mode, but can use tool calling\n return false;\n }\n\n /**\n * Check if tool calling is available\n */\n supportsToolCalling(model: string): boolean {\n return this.getCapabilities(model).toolCalling;\n }\n\n /**\n * Create a completion request\n */\n async createCompletion(request: ProviderRequest): Promise<ProviderResponse> {\n const params = this.buildRequestParams(request);\n const response = await this.client.messages.create(params);\n\n return this.parseResponse(response);\n }\n\n /**\n * Create a streaming completion request\n */\n async *createStreamingCompletion(\n request: ProviderRequest,\n ): AsyncIterableIterator<ProviderStreamChunk> {\n const params = this.buildRequestParams(request);\n params.stream = true;\n\n const stream = await this.client.messages.create(params);\n\n // Handle the stream as an async iterable\n const asyncStream =\n stream as unknown as AsyncIterable<AnthropicStreamEvent>;\n\n let toolCallBuffer: {\n id?: string;\n name?: string;\n arguments: string;\n } | null = null;\n let inputTokens = 0;\n let outputTokens = 0;\n\n for await (const event of asyncStream) {\n switch (event.type) {\n case 'message_start':\n if (event.message?.usage) {\n inputTokens = event.message.usage.input_tokens;\n }\n break;\n\n case 'content_block_start':\n if (event.content_block?.type === 'tool_use') {\n toolCallBuffer = {\n id: event.content_block.id,\n name: event.content_block.name,\n arguments: '',\n };\n }\n break;\n\n case 'content_block_delta':\n if (event.delta?.type === 'text_delta' && event.delta.text) {\n yield {\n content: event.delta.text,\n isFinal: false,\n };\n } else if (\n event.delta?.type === 'input_json_delta' &&\n event.delta.partial_json\n ) {\n if (toolCallBuffer) {\n toolCallBuffer.arguments += event.delta.partial_json;\n }\n yield {\n content: '',\n isFinal: false,\n toolCallDeltas: toolCallBuffer\n ? [\n {\n index: 0,\n id: toolCallBuffer.id,\n name: toolCallBuffer.name,\n arguments: event.delta.partial_json,\n },\n ]\n : undefined,\n };\n }\n break;\n\n case 'message_delta':\n if (event.usage) {\n outputTokens = event.usage.output_tokens;\n }\n break;\n\n case 'message_stop':\n yield {\n content: '',\n isFinal: true,\n usage: {\n promptTokens: inputTokens,\n completionTokens: outputTokens,\n totalTokens: inputTokens + outputTokens,\n },\n };\n break;\n }\n }\n }\n\n /**\n * Format messages for Anthropic\n */\n formatMessages(messages: ChatMessage[]): unknown {\n // Separate system message from other messages\n const systemMessage = messages.find((m) => m.role === 'system');\n const otherMessages = messages.filter((m) => m.role !== 'system');\n\n return {\n system: systemMessage?.content,\n messages: otherMessages.map((msg) => ({\n role: msg.role === 'assistant' ? 'assistant' : 'user',\n content: msg.content,\n })),\n };\n }\n\n /**\n * Format JSON schema for Anthropic (via tool calling)\n */\n formatJsonSchema(schema: JsonSchema): unknown {\n // Anthropic uses tool calling for structured output\n return {\n name: 'extract_structured_data',\n description: 'Extract structured data from the conversation',\n input_schema: schema,\n };\n }\n\n /**\n * Format tool definition for Anthropic\n */\n formatToolDefinition(tool: ToolDefinition): unknown {\n return {\n name: tool.function.name,\n description: tool.function.description,\n input_schema: tool.function.parameters,\n };\n }\n\n /**\n * Build request parameters\n */\n private buildRequestParams(\n request: ProviderRequest,\n ): Record<string, unknown> {\n const formatted = this.formatMessages(request.messages) as {\n system?: string;\n messages: Array<{ role: string; content: string }>;\n };\n\n const params: Record<string, unknown> = {\n model: request.model,\n messages: formatted.messages,\n max_tokens: request.maxTokens ?? 4096,\n };\n\n if (formatted.system) {\n params.system = formatted.system;\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n // Apply mode-specific settings\n switch (request.mode) {\n case 'json':\n // For JSON mode, use tool calling with structured extraction\n if (request.jsonSchema) {\n params.tools = [this.formatJsonSchema(request.jsonSchema)];\n params.tool_choice = {\n type: 'tool',\n name: 'extract_structured_data',\n };\n }\n break;\n\n case 'tool':\n if (request.toolDefinition) {\n params.tools = [this.formatToolDefinition(request.toolDefinition)];\n params.tool_choice = {\n type: 'tool',\n name: request.toolDefinition.function.name,\n };\n }\n break;\n\n case 'prompt':\n // For prompt mode, add JSON instruction to system\n if (params.system) {\n params.system = `${params.system as string}\\n\\nRespond with valid JSON only.`;\n } else {\n params.system = 'Respond with valid JSON only.';\n }\n break;\n }\n\n // Add metadata if provided\n if (this.options.metadata) {\n params.metadata = this.options.metadata;\n }\n\n // Merge additional options\n if (request.options) {\n Object.assign(params, request.options);\n }\n\n return params;\n }\n\n /**\n * Parse response\n */\n private parseResponse(response: AnthropicMessage): ProviderResponse {\n let content = '';\n let toolCalls: ProviderToolCall[] | undefined;\n\n for (const block of response.content) {\n if (block.type === 'text' && block.text) {\n content += block.text;\n } else if (block.type === 'tool_use') {\n if (!toolCalls) {\n toolCalls = [];\n }\n toolCalls.push({\n id: block.id ?? '',\n name: block.name ?? '',\n arguments: JSON.stringify(block.input),\n });\n }\n }\n\n return {\n content,\n usage: {\n promptTokens: response.usage.input_tokens,\n completionTokens: response.usage.output_tokens,\n totalTokens: response.usage.input_tokens + response.usage.output_tokens,\n },\n finishReason: response.stop_reason ?? undefined,\n toolCalls,\n raw: response,\n };\n }\n}\n\n/**\n * Create an Anthropic adapter\n */\nexport function createAnthropicAdapter(\n client: AnthropicClient,\n options?: AnthropicOptions,\n): AnthropicAdapter {\n return new AnthropicAdapter(client, options);\n}\n","/**\n * Google Provider Adapter\n *\n * Adapter for Google's Gemini API for structured output extraction.\n */\n\nimport type {\n ProviderAdapter,\n ProviderCapabilities,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderToolCall,\n GoogleOptions,\n} from '../types/provider.types.js';\nimport type { ChatMessage } from '../types/core.types.js';\nimport type { JsonSchema, ToolDefinition } from '../types/schema.types.js';\n\n/**\n * Google Generative AI client interface\n */\ninterface GoogleClient {\n getGenerativeModel(params: {\n model: string;\n generationConfig?: unknown;\n tools?: unknown[];\n toolConfig?: unknown;\n }): GoogleGenerativeModel;\n}\n\n/**\n * Google Generative Model interface\n */\ninterface GoogleGenerativeModel {\n generateContent(request: unknown): Promise<GoogleGenerateContentResult>;\n generateContentStream(\n request: unknown,\n ): Promise<GoogleGenerateContentStreamResult>;\n}\n\n/**\n * Google generate content result\n */\ninterface GoogleGenerateContentResult {\n response: GoogleGenerateContentResponse;\n}\n\n/**\n * Google generate content response\n */\ninterface GoogleGenerateContentResponse {\n text(): string;\n candidates?: Array<{\n content: {\n parts: Array<{\n text?: string;\n functionCall?: {\n name: string;\n args: Record<string, unknown>;\n };\n }>;\n role: string;\n };\n finishReason?: string;\n }>;\n usageMetadata?: {\n promptTokenCount: number;\n candidatesTokenCount: number;\n totalTokenCount: number;\n };\n functionCalls?(): Array<{\n name: string;\n args: Record<string, unknown>;\n }>;\n}\n\n/**\n * Google streaming result\n */\ninterface GoogleGenerateContentStreamResult {\n stream: AsyncIterable<{\n text(): string;\n candidates?: Array<{\n content: {\n parts: Array<{\n text?: string;\n functionCall?: {\n name: string;\n args: Record<string, unknown>;\n };\n }>;\n };\n finishReason?: string;\n }>;\n usageMetadata?: {\n promptTokenCount: number;\n candidatesTokenCount: number;\n totalTokenCount: number;\n };\n }>;\n response: Promise<GoogleGenerateContentResponse>;\n}\n\n/**\n * Model capabilities for Google models\n */\nconst MODEL_CAPABILITIES: Record<string, Partial<ProviderCapabilities>> = {\n 'gemini-2.0-flash': {\n jsonMode: true,\n strictJsonMode: true,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 1000000,\n maxOutputTokens: 8192,\n },\n 'gemini-2.0-flash-lite': {\n jsonMode: true,\n strictJsonMode: true,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 1000000,\n maxOutputTokens: 8192,\n },\n 'gemini-1.5-pro': {\n jsonMode: true,\n strictJsonMode: true,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 2000000,\n maxOutputTokens: 8192,\n },\n 'gemini-1.5-flash': {\n jsonMode: true,\n strictJsonMode: true,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 1000000,\n maxOutputTokens: 8192,\n },\n 'gemini-1.0-pro': {\n jsonMode: true,\n strictJsonMode: false,\n toolCalling: true,\n streaming: true,\n systemMessages: true,\n maxContextWindow: 32000,\n maxOutputTokens: 8192,\n },\n};\n\n/**\n * Google provider adapter\n */\nexport class GoogleAdapter implements ProviderAdapter {\n readonly name = 'google';\n private readonly client: GoogleClient;\n private readonly options: GoogleOptions;\n\n constructor(client: GoogleClient, options: GoogleOptions = {}) {\n this.client = client;\n this.options = options;\n }\n\n /**\n * Get capabilities for a model\n */\n getCapabilities(model: string): ProviderCapabilities {\n // Find matching model\n const modelKey = Object.keys(MODEL_CAPABILITIES).find(\n (key) => model.includes(key) || key.includes(model),\n );\n const base = modelKey\n ? MODEL_CAPABILITIES[modelKey]\n : MODEL_CAPABILITIES['gemini-2.0-flash'];\n\n return {\n jsonMode: base.jsonMode ?? true,\n strictJsonMode: base.strictJsonMode ?? true,\n toolCalling: base.toolCalling ?? true,\n streaming: base.streaming ?? true,\n systemMessages: base.systemMessages ?? true,\n maxContextWindow: base.maxContextWindow,\n maxOutputTokens: base.maxOutputTokens,\n };\n }\n\n /**\n * Check if JSON mode is available\n */\n supportsJsonMode(model: string): boolean {\n return this.getCapabilities(model).jsonMode;\n }\n\n /**\n * Check if tool calling is available\n */\n supportsToolCalling(model: string): boolean {\n return this.getCapabilities(model).toolCalling;\n }\n\n /**\n * Create a completion request\n */\n async createCompletion(request: ProviderRequest): Promise<ProviderResponse> {\n const model = this.getModel(request);\n const contents = this.formatContents(request.messages);\n\n const result = await model.generateContent({ contents });\n\n return this.parseResponse(result.response);\n }\n\n /**\n * Create a streaming completion request\n */\n async *createStreamingCompletion(\n request: ProviderRequest,\n ): AsyncIterableIterator<ProviderStreamChunk> {\n const model = this.getModel(request);\n const contents = this.formatContents(request.messages);\n\n const streamResult = await model.generateContentStream({ contents });\n\n for await (const chunk of streamResult.stream) {\n const text = chunk.text();\n const candidate = chunk.candidates?.[0];\n const isFinal = candidate?.finishReason !== undefined;\n\n yield {\n content: text,\n isFinal,\n finishReason: candidate?.finishReason,\n usage: chunk.usageMetadata\n ? {\n promptTokens: chunk.usageMetadata.promptTokenCount,\n completionTokens: chunk.usageMetadata.candidatesTokenCount,\n totalTokens: chunk.usageMetadata.totalTokenCount,\n }\n : undefined,\n };\n }\n }\n\n /**\n * Format messages for Google\n */\n formatMessages(messages: ChatMessage[]): unknown {\n return this.formatContents(messages);\n }\n\n /**\n * Format JSON schema for Google\n */\n formatJsonSchema(schema: JsonSchema): unknown {\n return {\n responseMimeType: 'application/json',\n responseSchema: this.convertToGoogleSchema(schema),\n };\n }\n\n /**\n * Format tool definition for Google\n */\n formatToolDefinition(tool: ToolDefinition): unknown {\n return {\n functionDeclarations: [\n {\n name: tool.function.name,\n description: tool.function.description,\n parameters: this.convertToGoogleSchema(tool.function.parameters),\n },\n ],\n };\n }\n\n /**\n * Get the generative model with configuration\n */\n private getModel(request: ProviderRequest): GoogleGenerativeModel {\n const generationConfig: Record<string, unknown> = {};\n\n if (request.temperature !== undefined) {\n generationConfig.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n generationConfig.maxOutputTokens = request.maxTokens;\n }\n\n // Apply mode-specific settings\n let tools: unknown[] | undefined;\n let toolConfig: unknown;\n\n switch (request.mode) {\n case 'json':\n if (request.jsonSchema) {\n generationConfig.responseMimeType = 'application/json';\n generationConfig.responseSchema = this.convertToGoogleSchema(\n request.jsonSchema,\n );\n }\n break;\n\n case 'tool':\n if (request.toolDefinition) {\n tools = [\n {\n functionDeclarations: [\n {\n name: request.toolDefinition.function.name,\n description: request.toolDefinition.function.description,\n parameters: this.convertToGoogleSchema(\n request.toolDefinition.function.parameters,\n ),\n },\n ],\n },\n ];\n toolConfig = {\n functionCallingConfig: {\n mode: 'ANY',\n allowedFunctionNames: [request.toolDefinition.function.name],\n },\n };\n }\n break;\n }\n\n // Merge with custom generation config\n if (this.options.generationConfig) {\n Object.assign(generationConfig, this.options.generationConfig);\n }\n\n return this.client.getGenerativeModel({\n model: request.model,\n generationConfig,\n tools,\n toolConfig,\n });\n }\n\n /**\n * Format contents for Google API\n */\n private formatContents(messages: ChatMessage[]): unknown[] {\n const contents: Array<{\n role: string;\n parts: Array<{ text: string }>;\n }> = [];\n\n // Handle system message specially (prepend to first user message or use systemInstruction)\n const systemMessage = messages.find((m) => m.role === 'system');\n const otherMessages = messages.filter((m) => m.role !== 'system');\n\n if (systemMessage) {\n // Prepend system content to first message if user, otherwise add as separate\n if (otherMessages.length > 0 && otherMessages[0].role === 'user') {\n otherMessages[0] = {\n ...otherMessages[0],\n content: `${systemMessage.content}\\n\\n${otherMessages[0].content}`,\n };\n } else {\n // Add system as user message\n contents.push({\n role: 'user',\n parts: [{ text: systemMessage.content }],\n });\n }\n }\n\n for (const msg of otherMessages) {\n contents.push({\n role: msg.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: msg.content }],\n });\n }\n\n return contents;\n }\n\n /**\n * Convert JSON Schema to Google's schema format\n */\n private convertToGoogleSchema(schema: JsonSchema): unknown {\n // Google uses a similar but slightly different schema format\n const converted: Record<string, unknown> = {};\n\n if (schema.type) {\n converted.type = Array.isArray(schema.type)\n ? schema.type[0].toUpperCase()\n : schema.type.toUpperCase();\n }\n\n if (schema.description) {\n converted.description = schema.description;\n }\n\n if (schema.enum) {\n converted.enum = schema.enum;\n }\n\n if (schema.properties) {\n converted.properties = Object.fromEntries(\n Object.entries(schema.properties).map(([key, prop]) => [\n key,\n this.convertToGoogleSchema(prop),\n ]),\n );\n }\n\n if (schema.required) {\n converted.required = schema.required;\n }\n\n if (schema.items) {\n converted.items = this.convertToGoogleSchema(schema.items as JsonSchema);\n }\n\n if (schema.minimum !== undefined) {\n converted.minimum = schema.minimum;\n }\n\n if (schema.maximum !== undefined) {\n converted.maximum = schema.maximum;\n }\n\n if (schema.minLength !== undefined) {\n converted.minLength = schema.minLength;\n }\n\n if (schema.maxLength !== undefined) {\n converted.maxLength = schema.maxLength;\n }\n\n if (schema.pattern !== undefined) {\n converted.pattern = schema.pattern;\n }\n\n return converted;\n }\n\n /**\n * Parse response\n */\n private parseResponse(\n response: GoogleGenerateContentResponse,\n ): ProviderResponse {\n let content = '';\n let toolCalls: ProviderToolCall[] | undefined;\n\n try {\n content = response.text();\n } catch {\n // May throw if response only contains function calls\n }\n\n // Check for function calls\n const functionCalls = response.functionCalls?.();\n if (functionCalls && functionCalls.length > 0) {\n toolCalls = functionCalls.map((fc, index) => ({\n id: `call_${index}`,\n name: fc.name,\n arguments: JSON.stringify(fc.args),\n }));\n }\n\n // Also check candidates for function calls\n if (!toolCalls && response.candidates) {\n for (const candidate of response.candidates) {\n for (const part of candidate.content.parts) {\n if (part.functionCall) {\n if (!toolCalls) {\n toolCalls = [];\n }\n toolCalls.push({\n id: `call_${toolCalls.length}`,\n name: part.functionCall.name,\n arguments: JSON.stringify(part.functionCall.args),\n });\n }\n }\n }\n }\n\n return {\n content,\n usage: response.usageMetadata\n ? {\n promptTokens: response.usageMetadata.promptTokenCount,\n completionTokens: response.usageMetadata.candidatesTokenCount,\n totalTokens: response.usageMetadata.totalTokenCount,\n }\n : undefined,\n finishReason: response.candidates?.[0]?.finishReason,\n toolCalls,\n raw: response,\n };\n }\n}\n\n/**\n * Create a Google adapter\n */\nexport function createGoogleAdapter(\n client: GoogleClient,\n options?: GoogleOptions,\n): GoogleAdapter {\n return new GoogleAdapter(client, options);\n}\n","/**\n * AgentSea Structured Provider\n *\n * Integration with AgentSea framework for structured output extraction.\n */\n\nimport { z } from 'zod';\nimport { StructuredClient } from '../../core/StructuredClient.js';\nimport { OpenAIAdapter } from '../../providers/OpenAIAdapter.js';\nimport { AnthropicAdapter } from '../../providers/AnthropicAdapter.js';\nimport { GoogleAdapter } from '../../providers/GoogleAdapter.js';\nimport type {\n StructuredClientConfig,\n ExtractionResult,\n ChatMessage,\n ExtractionModeConfig,\n} from '../../types/core.types.js';\nimport type { ProviderAdapter } from '../../types/provider.types.js';\nimport type {\n StreamingOptions,\n StreamingResult,\n} from '../../types/streaming.types.js';\n\n/**\n * AgentSea provider type\n */\nexport type AgentSeaProviderType = 'openai' | 'anthropic' | 'google';\n\n/**\n * AgentSea client interface\n */\ninterface AgentSeaClient {\n readonly provider: AgentSeaProviderType;\n readonly client: unknown;\n readonly model?: string;\n}\n\n/**\n * Structured provider options\n */\nexport interface StructuredProviderOptions {\n /** Default model to use */\n defaultModel?: string;\n /** Default extraction mode */\n defaultMode?: ExtractionModeConfig;\n /** Enable fix hints for retries */\n enableFixHints?: boolean;\n /** Validate partial results in streaming */\n validatePartials?: boolean;\n /** Maximum retry attempts */\n maxRetries?: number;\n}\n\n/**\n * AgentSea Structured Provider\n *\n * Provides structured output extraction capabilities for AgentSea agents.\n */\nexport class StructuredProvider {\n private readonly clients: Map<string, StructuredClient>;\n private readonly adapters: Map<string, ProviderAdapter>;\n private readonly options: StructuredProviderOptions;\n private defaultProviderName: string | null = null;\n\n constructor(options: StructuredProviderOptions = {}) {\n this.clients = new Map();\n this.adapters = new Map();\n this.options = {\n enableFixHints: true,\n validatePartials: false,\n maxRetries: 3,\n ...options,\n };\n }\n\n /**\n * Register a provider client\n */\n registerProvider(\n name: string,\n agentSeaClient: AgentSeaClient,\n setAsDefault = false,\n ): this {\n const adapter = this.createAdapter(agentSeaClient);\n this.adapters.set(name, adapter);\n\n const client = new StructuredClient(adapter, {\n defaultMode: this.options\n .defaultMode as StructuredClientConfig['defaultMode'],\n enableFixHints: this.options.enableFixHints,\n validatePartials: this.options.validatePartials,\n defaultRetry: {\n maxAttempts: this.options.maxRetries ?? 3,\n retryOn: ['validation_error', 'parse_error'],\n },\n });\n\n this.clients.set(name, client);\n\n if (setAsDefault || !this.defaultProviderName) {\n this.defaultProviderName = name;\n }\n\n return this;\n }\n\n /**\n * Get a structured client\n */\n getClient(name?: string): StructuredClient {\n const providerName = name ?? this.defaultProviderName;\n\n if (!providerName) {\n throw new Error('No provider registered');\n }\n\n const client = this.clients.get(providerName);\n\n if (!client) {\n throw new Error(`Provider '${providerName}' not found`);\n }\n\n return client;\n }\n\n /**\n * Extract structured data\n */\n async extract<T extends z.ZodType>(\n schema: T,\n prompt: string | ChatMessage[],\n options?: {\n model?: string;\n provider?: string;\n mode?: ExtractionModeConfig;\n temperature?: number;\n maxTokens?: number;\n },\n ): Promise<ExtractionResult<z.infer<T>>> {\n const client = this.getClient(options?.provider);\n\n const messages: ChatMessage[] = Array.isArray(prompt)\n ? prompt\n : [{ role: 'user', content: prompt }];\n\n return client.extract({\n model: options?.model ?? this.options.defaultModel ?? 'gpt-4o',\n messages,\n response_format: schema,\n mode: options?.mode ?? this.options.defaultMode,\n });\n }\n\n /**\n * Extract structured data with streaming\n */\n extractStream<T extends z.ZodType>(\n schema: T,\n prompt: string | ChatMessage[],\n options?: {\n model?: string;\n provider?: string;\n mode?: ExtractionModeConfig;\n streaming?: StreamingOptions;\n },\n ): Promise<StreamingResult<z.infer<T>>> {\n const client = this.getClient(options?.provider);\n\n const messages: ChatMessage[] = Array.isArray(prompt)\n ? prompt\n : [{ role: 'user', content: prompt }];\n\n return client.extractStream(\n {\n model: options?.model ?? this.options.defaultModel ?? 'gpt-4o',\n messages,\n response_format: schema,\n mode: options?.mode ?? this.options.defaultMode,\n },\n options?.streaming,\n );\n }\n\n /**\n * Create a typed extractor for reuse\n */\n createExtractor<T extends z.ZodType>(\n schema: T,\n options?: {\n model?: string;\n provider?: string;\n mode?: ExtractionModeConfig;\n },\n ): TypedExtractor<z.infer<T>> {\n return new TypedExtractor(this, schema, options);\n }\n\n /**\n * Create adapter from AgentSea client\n */\n private createAdapter(agentSeaClient: AgentSeaClient): ProviderAdapter {\n switch (agentSeaClient.provider) {\n case 'openai':\n return new OpenAIAdapter(\n agentSeaClient.client as ConstructorParameters<\n typeof OpenAIAdapter\n >[0],\n );\n case 'anthropic':\n return new AnthropicAdapter(\n agentSeaClient.client as ConstructorParameters<\n typeof AnthropicAdapter\n >[0],\n );\n case 'google':\n return new GoogleAdapter(\n agentSeaClient.client as ConstructorParameters<\n typeof GoogleAdapter\n >[0],\n );\n default:\n throw new Error(\n `Unsupported provider: ${agentSeaClient.provider as string}`,\n );\n }\n }\n}\n\n/**\n * Typed extractor for reusable extraction\n */\nexport class TypedExtractor<T> {\n constructor(\n private readonly provider: StructuredProvider,\n private readonly schema: z.ZodType<T>,\n private readonly options?: {\n model?: string;\n provider?: string;\n mode?: ExtractionModeConfig;\n },\n ) {}\n\n /**\n * Extract structured data\n */\n async extract(\n prompt: string | ChatMessage[],\n overrideOptions?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n },\n ): Promise<ExtractionResult<T>> {\n return this.provider.extract(this.schema, prompt, {\n ...this.options,\n ...overrideOptions,\n });\n }\n\n /**\n * Extract with streaming\n */\n extractStream(\n prompt: string | ChatMessage[],\n streamingOptions?: StreamingOptions,\n ): Promise<StreamingResult<T>> {\n return this.provider.extractStream(this.schema, prompt, {\n ...this.options,\n streaming: streamingOptions,\n });\n }\n\n /**\n * Get the schema\n */\n getSchema(): z.ZodType<T> {\n return this.schema;\n }\n}\n\n/**\n * Create a structured provider\n */\nexport function createStructuredProvider(\n options?: StructuredProviderOptions,\n): StructuredProvider {\n return new StructuredProvider(options);\n}\n\n/**\n * Helper to create common extractors\n */\nexport const Extractors = {\n /**\n * Create a list extractor\n */\n list<T extends z.ZodType>(\n itemSchema: T,\n options?: { minItems?: number; maxItems?: number },\n ): z.ZodArray<T> {\n let schema = z.array(itemSchema);\n\n if (options?.minItems !== undefined) {\n schema = schema.min(options.minItems);\n }\n\n if (options?.maxItems !== undefined) {\n schema = schema.max(options.maxItems);\n }\n\n return schema;\n },\n\n /**\n * Create an entity extractor\n */\n entity<T extends z.ZodRawShape>(shape: T): z.ZodObject<T> {\n return z.object(shape);\n },\n\n /**\n * Create a classification extractor\n */\n classification<T extends [string, ...string[]]>(\n categories: T,\n options?: { confidence?: boolean },\n ): z.ZodType {\n if (options?.confidence) {\n return z.object({\n category: z.enum(categories),\n confidence: z.number().min(0).max(1),\n reasoning: z.string().optional(),\n });\n }\n\n return z.object({\n category: z.enum(categories),\n });\n },\n\n /**\n * Create a sentiment analyzer\n */\n sentiment(): z.ZodType {\n return z.object({\n sentiment: z.enum(['positive', 'negative', 'neutral', 'mixed']),\n score: z.number().min(-1).max(1),\n aspects: z\n .array(\n z.object({\n aspect: z.string(),\n sentiment: z.enum(['positive', 'negative', 'neutral']),\n }),\n )\n .optional(),\n });\n },\n\n /**\n * Create a key-value extractor\n */\n keyValue(): z.ZodType {\n return z.record(z.string(), z.unknown());\n },\n\n /**\n * Create a summary extractor\n */\n summary(options?: { maxLength?: number }): z.ZodType {\n let summarySchema = z.string();\n\n if (options?.maxLength) {\n summarySchema = summarySchema.max(options.maxLength);\n }\n\n return z.object({\n summary: summarySchema,\n keyPoints: z.array(z.string()),\n entities: z\n .array(\n z.object({\n name: z.string(),\n type: z.string(),\n }),\n )\n .optional(),\n });\n },\n};\n","/**\n * Core Types\n *\n * Core type definitions for structured output.\n */\n\nimport type { z } from 'zod';\n\n/**\n * Supported extraction modes\n */\nexport type ExtractionMode = 'json' | 'tool' | 'prompt' | 'hybrid';\n\n/**\n * Supported providers\n */\nexport type StructuredProvider = 'openai' | 'anthropic' | 'google' | 'generic';\n\n/**\n * Message role\n */\nexport type MessageRole = 'system' | 'user' | 'assistant';\n\n/**\n * Chat message\n */\nexport interface ChatMessage {\n role: MessageRole;\n content: string;\n name?: string;\n}\n\n/**\n * Structured request options\n */\nexport interface StructuredRequestOptions<T extends z.ZodType> {\n /** Model to use */\n model: string;\n /** Messages */\n messages: ChatMessage[];\n /** Response schema */\n response_format: T;\n /** Extraction mode */\n mode?: ExtractionModeConfig;\n /** Retry configuration */\n retry?: Partial<RetryConfig>;\n /** Temperature */\n temperature?: number;\n /** Max tokens */\n maxTokens?: number;\n /** Additional provider-specific options */\n options?: Record<string, unknown>;\n}\n\n/**\n * Extraction mode configuration\n */\nexport type ExtractionModeConfig =\n | ExtractionMode\n | JsonModeConfig\n | ToolModeConfig\n | PromptModeConfig\n | HybridModeConfig;\n\n/**\n * JSON mode configuration\n */\nexport interface JsonModeConfig {\n mode: 'json';\n /** Whether to use strict JSON mode (if available) */\n strict?: boolean;\n}\n\n/**\n * Tool mode configuration\n */\nexport interface ToolModeConfig {\n mode: 'tool';\n /** Tool name */\n toolName?: string;\n /** Tool description */\n toolDescription?: string;\n}\n\n/**\n * Prompt mode configuration\n */\nexport interface PromptModeConfig {\n mode: 'prompt';\n /** Format to embed in prompt */\n format?: 'json-schema' | 'typescript' | 'examples';\n /** Where to add schema in prompt */\n position?: 'system' | 'user' | 'suffix';\n /** Include examples */\n includeExamples?: boolean;\n}\n\n/**\n * Hybrid mode configuration\n */\nexport interface HybridModeConfig {\n mode: 'hybrid';\n /** Preferred order of modes to try */\n fallbackOrder?: ExtractionMode[];\n}\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n /** Maximum number of attempts */\n maxAttempts: number;\n /** Backoff multiplier */\n backoffMultiplier: number;\n /** Initial delay in ms */\n initialDelay: number;\n /** Maximum delay in ms */\n maxDelay: number;\n /** When to retry */\n retryOn: RetryCondition[];\n /** Fix hint configuration */\n fixHints?: FixHintConfig;\n /** Recovery options */\n recovery?: RecoveryConfig;\n}\n\n/**\n * Fix hint configuration\n */\nexport interface FixHintConfig {\n /** Include validation errors in retry */\n includeErrors?: boolean;\n /** Include correct format examples */\n includeExamples?: boolean;\n /** Suggest specific fixes */\n suggestFixes?: boolean;\n /** Custom hint generator */\n customHints?: (errors: ValidationError[], schema: z.ZodType) => string;\n}\n\n/**\n * Retry condition\n */\nexport type RetryCondition =\n | 'parse_error'\n | 'validation_error'\n | 'incomplete_response'\n | 'empty_response'\n | 'rate_limit'\n | 'timeout';\n\n/**\n * Recovery configuration\n */\nexport interface RecoveryConfig {\n /** Try to repair malformed JSON */\n repairJson?: boolean;\n /** Extract from markdown code blocks */\n extractFromMarkdown?: boolean;\n /** Coerce types where safe */\n coerceTypes?: boolean;\n /** Use partial response if complete fails */\n usePartial?: boolean;\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n /** JSON path to the error */\n path: (string | number)[];\n /** Error message */\n message: string;\n /** Expected type or value */\n expected?: string;\n /** Received value */\n received?: unknown;\n /** Error code */\n code?: string;\n}\n\n/**\n * Extraction result\n */\nexport interface ExtractionResult<T> {\n /** Whether extraction succeeded */\n success: boolean;\n /** Extracted data (if successful) */\n data?: T;\n /** Error (if failed) */\n error?: Error;\n /** Raw response from LLM */\n raw?: string;\n /** Extraction metadata */\n metadata: ExtractionMetadata;\n}\n\n/**\n * Extraction metadata\n */\nexport interface ExtractionMetadata {\n /** Total attempts made */\n totalAttempts: number;\n /** Total duration in ms */\n totalDuration: number;\n /** Final mode used */\n finalMode: ExtractionMode;\n /** Token usage */\n tokenUsage?: TokenUsage;\n /** All attempts */\n attempts: ExtractionAttempt[];\n /** Model used */\n model: string;\n}\n\n/**\n * Token usage\n */\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\n/**\n * Extraction attempt\n */\nexport interface ExtractionAttempt {\n /** Attempt number */\n attempt: number;\n /** Mode used */\n mode: ExtractionMode;\n /** Whether attempt succeeded */\n success: boolean;\n /** Duration in ms */\n duration: number;\n /** Raw response */\n rawResponse?: string;\n /** Error if failed */\n error?: string;\n /** Validation errors */\n validationErrors?: ValidationError[];\n}\n\n/**\n * Structured client configuration\n */\nexport interface StructuredClientConfig {\n /** Default model */\n defaultModel?: string;\n /** Default extraction mode */\n defaultMode?: ExtractionMode;\n /** Default retry configuration */\n defaultRetry?: Partial<RetryConfig>;\n /** Enable fix hints for retries */\n enableFixHints?: boolean;\n /** Validate partial results during streaming */\n validatePartials?: boolean;\n /** Provider-specific options */\n providerOptions?: Record<string, unknown>;\n}\n\n/**\n * Structured error\n */\nexport class StructuredError extends Error {\n /** Error code */\n code: string;\n /** Extraction attempts */\n attempts: ExtractionAttempt[];\n /** Last validation errors */\n validationErrors?: ValidationError[];\n /** Partial result if available */\n partial?: unknown;\n\n constructor(\n message: string,\n code: string,\n attempts: ExtractionAttempt[],\n validationErrors?: ValidationError[],\n partial?: unknown,\n ) {\n super(message);\n this.name = 'StructuredError';\n this.code = code;\n this.attempts = attempts;\n this.validationErrors = validationErrors;\n this.partial = partial;\n }\n}\n"]}
|