File size: 1,227 Bytes
05c5ed5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
export const DEFAULT_FILE_PART_MIME_TYPES = [
  "image/jpeg",
  "image/png",
  "image/webp",
  "image/gif",
  // Enable PDF when supported by the chosen model/provider
  "application/pdf",
] as const;

export const OPENAI_FILE_MIME_TYPES = [
  ...DEFAULT_FILE_PART_MIME_TYPES,
] as const;

export const GEMINI_FILE_MIME_TYPES = [
  ...DEFAULT_FILE_PART_MIME_TYPES,
] as const;

export const ANTHROPIC_FILE_MIME_TYPES = [
  ...DEFAULT_FILE_PART_MIME_TYPES,
] as const;

export const XAI_FILE_MIME_TYPES = [...DEFAULT_FILE_PART_MIME_TYPES] as const;

const DEFAULT_FILE_PART_MIME_SET = new Set<string>(
  DEFAULT_FILE_PART_MIME_TYPES,
);

export const INGEST_SUPPORTED_MIME = new Set<string>([
  "text/csv",
  "application/csv",
  // Future: xlsx when server-side parser is added
  // "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
]);

export const isFilePartSupported = (
  mime?: string,
  supportedMimeTypes?: readonly string[],
) => {
  if (!mime) return false;
  if (supportedMimeTypes !== undefined) {
    return supportedMimeTypes.includes(mime);
  }
  return DEFAULT_FILE_PART_MIME_SET.has(mime);
};

export const isIngestSupported = (mime?: string) =>
  !!mime && INGEST_SUPPORTED_MIME.has(mime);