{"record":{"id":"bf8236da5ca7e64e","repo":"vercel/ai","slug":"file-part-media-type-part-mediatype-functiona","errorCode":null,"errorMessage":"'file part media type ${part.mediaType}' functionality not supported.","messagePattern":"'file part media type (.+?)' functionality not supported\\.","errorType":"exception","errorClass":"UnsupportedFunctionalityError","httpStatus":null,"severity":"error","filePath":"packages/xai/src/convert-to-xai-chat-messages.ts","lineNumber":87,"sourceCode":"                      provider: 'xai',\n                      providerOptions: part.providerOptions,\n                      schema: xaiFilePartProviderOptions,\n                    });\n\n                    userContent.push({\n                      type: 'image_url',\n                      image_url: {\n                        url:\n                          part.data.type === 'url'\n                            ? part.data.url.toString()\n                            : `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`,\n                        ...(filePartOptions?.imageDetail != null && {\n                          detail: filePartOptions.imageDetail,\n                        }),\n                      },\n                    });\n                  } else {\n                    throw new UnsupportedFunctionalityError({\n                      functionality: `file part media type ${part.mediaType}`,\n                    });\n                  }\n                  break;\n                }\n              }\n              break;\n            }\n          }\n        }\n\n        messages.push({ role: 'user', content: userContent });\n\n        break;\n      }\n\n      case 'assistant': {\n        let text = '';","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/xai/src/convert-to-xai-chat-messages.ts#L69-L105","documentation":"For xAI file parts, only image media types are supported (mapped to image_url content). A file part with any other media type (e.g. application/pdf, audio) cannot be represented in xAI chat format and throws UnsupportedFunctionalityError naming the media type.","triggerScenarios":"Passing a FilePart whose mediaType is not an image (e.g. 'application/pdf', 'audio/mpeg') to an @ai-sdk/xai model via generateText/streamText.","commonSituations":"Attaching PDFs or audio recordings to chat messages; multi-provider code paths assuming all providers accept documents; upload UIs forwarding arbitrary files to the model.","solutions":["Only send image file parts (image/*) to xAI models.","Inline non-image documents as text (extracted content) in a TextPart.","Use Grok's dedicated document/API surface or a provider that supports the media type.","Filter unsupported media types with a warning before the request."],"exampleFix":"// before\ncontent: [{ type: 'file', data: pdfBuffer, mediaType: 'application/pdf' }]\n// after\ncontent: [{ type: 'text', text: extractedPdfText }]","handlingStrategy":"validation","validationCode":"function filterNonImageFileParts(messages: ModelMessage[]) {\n  return messages.map(m => Array.isArray(m.content)\n    ? { ...m, content: m.content.filter(p => !(p.type === 'file' && !p.mediaType.startsWith('image/'))) }\n    : m);\n}","typeGuard":"const isImageFilePart = (p: unknown): p is FilePart & { mediaType: `image/${string}` } =>\n  typeof p === 'object' && p !== null && (p as any).type === 'file' &&\n  String((p as any).mediaType).startsWith('image/');","tryCatchPattern":"try {\n  await generateText({ model: xai('grok-4'), messages });\n} catch (e) {\n  if (UnsupportedFunctionalityError.isInstance(e) && e.functionality.startsWith('file part media type')) {\n    return generateText({ model: xai('grok-4'), messages: filterNonImageFileParts(messages) });\n  }\n  throw e;\n}","preventionTips":["Whitelist image/* media types in upload handling for xAI-backed chats.","Handle PDFs/audio via providers that support them or extract content to text first.","Check UnsupportedFunctionalityError.functionality in tests for each provider you target."],"tags":["xai","file-parts","media-type","unsupported"],"backgroundTag":"unsupported-functionality","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}