Files.
Upload one file or many, then attach the IDs to a chat request.
files.upload(file, options?)
Uploads a single file. Files at or above the server's chunked threshold use the parallel multipart protocol; smaller files use single-shot upload.
const file = new File(['Hello, world!'], 'hello.txt', { type: 'text/plain' });
const result = await client.files.upload(file, {
onProgress: (pct) => console.log(`Upload: ${pct}%`),
});
console.log(`File ID: ${result.fileId}, Status: ${result.status}`);FileUploadOptions
Extends MatildaRequestOptions:
| Field | type | description |
|---|---|---|
| onProgress | (pct: number) => void | Progress callback (0–100). |
| fingerprint | string | null | Device fingerprint. |
| accessToken | string | null | Override access token. |
| signal | AbortSignal | Abort the upload. |
Returns Promise<FileCompleteResponse>:
interface FileCompleteResponse {
fileId: string;
status: FileAttachmentStatus;
failureReason?: FileFailureReason;
}
type FileAttachmentStatus = 'pending' | 'scanning' | 'processing' | 'ready' | 'failed' | 'rejected';files.uploadMany(files, options?)
Uploads multiple files in parallel. One file's failure does not abort the others. Inspect each PromiseSettledResult for per-file outcomes.
const files = [
new File(['doc 1'], 'doc1.txt', { type: 'text/plain' }),
new File(['doc 2'], 'doc2.txt', { type: 'text/plain' }),
];
const results = await client.files.uploadMany(files);
for (let i = 0; i < results.length; i++) {
const result = results[i];
if (result.status === 'fulfilled') {
console.log(`File ${i}: ${result.value.fileId} (${result.value.status})`);
} else {
console.error(`File ${i} failed:`, result.reason);
}
}Returns Promise<PromiseSettledResult<FileCompleteResponse>[]>.
files.retrieve(fileId, options?)
Retrieves metadata for a previously uploaded file.
const file = await client.files.retrieve('file-abc123');
console.log(`${file.filename} — ${file.status} (${file.sizeBytes} bytes)`);
if (file.extractedText) {
console.log(`Extracted: ${file.extractedText.slice(0, 100)}...`);
}Returns Promise<FileAttachment>:
interface FileAttachment {
id: string;
filename: string;
contentType: string;
sizeBytes: number;
status: FileAttachmentStatus;
extractedText?: string;
thumbnailUrl?: string;
localUri?: string;
failureReason?: FileFailureReason;
createdAt: string;
}
interface FileFailureReason {
code: string;
message: string;
retryable: boolean;
}Using files in chat
Upload a file, then reference its fileId in a chat message:
const fileResult = await client.files.upload(
new File(['Quarterly report content...'], 'report.txt', { type: 'text/plain' }),
);
const response = await client.chat.create({
input: 'Summarise this report.',
fileIds: [fileResult.fileId],
});
console.log(response.outputText);