diff --git a/src/app/api/models/[modelId]/route.ts b/src/app/api/models/[modelId]/route.ts index cf628870..930b8623 100644 --- a/src/app/api/models/[modelId]/route.ts +++ b/src/app/api/models/[modelId]/route.ts @@ -218,8 +218,8 @@ async function fetchFalSchema( const data = await response.json(); - // Response is { data: [{ openapi: {...}, ... }] } - const modelData = data.data?.[0]; + // Response is { models: [{ openapi: {...}, ... }] } + const modelData = data.models?.[0]; if (!modelData?.openapi) { console.log(`[fetchFalSchema] No OpenAPI schema in response for ${modelId}`); return []; @@ -227,27 +227,39 @@ async function fetchFalSchema( const spec = modelData.openapi; - // Navigate to request body schema - // Path: paths["/"]["post"].requestBody.content["application/json"].schema - const requestBodySchema = spec.paths?.["/"]?.post?.requestBody?.content?.["application/json"]?.schema; + // Find POST endpoint with requestBody - paths are keyed by full endpoint path + let inputSchema: Record | null = null; - if (!requestBodySchema) { - // Try alternate path structure - const postPath = Object.values(spec.paths || {})[0] as Record | undefined; - const postOp = postPath?.post as Record | undefined; + for (const pathObj of Object.values(spec.paths || {})) { + const postOp = (pathObj as Record)?.post as Record | undefined; const reqBody = postOp?.requestBody as Record | undefined; const content = reqBody?.content as Record> | undefined; const jsonContent = content?.["application/json"]; - if (!jsonContent?.schema) { - console.log(`[fetchFalSchema] Could not find request body schema in OpenAPI spec`); - return []; + if (jsonContent?.schema) { + const schema = jsonContent.schema as Record; + + // Handle $ref - resolve from components.schemas + if (schema.$ref && typeof schema.$ref === "string") { + const refPath = schema.$ref.replace("#/components/schemas/", ""); + const resolvedSchema = spec.components?.schemas?.[refPath] as Record | undefined; + if (resolvedSchema) { + inputSchema = resolvedSchema; + break; + } + } else if (schema.properties) { + inputSchema = schema; + break; + } } + } - return extractParametersFromSchema(jsonContent.schema as Record); + if (!inputSchema) { + console.log(`[fetchFalSchema] Could not find input schema in OpenAPI spec`); + return []; } - return extractParametersFromSchema(requestBodySchema as Record); + return extractParametersFromSchema(inputSchema); } /**