MCPcopy Index your code
hub / github.com/simstudioai/sim / uploadGeminiFile

Function uploadGeminiFile

apps/sim/providers/file-attachments.server.ts:231–262  ·  view source on GitHub ↗
(
  file: UserFile,
  ai: GoogleGenAI,
  maxBytes: number,
  signal?: AbortSignal
)

Source from the content-addressed store, hash-verified

229}
230
231async function uploadGeminiFile(
232 file: UserFile,
233 ai: GoogleGenAI,
234 maxBytes: number,
235 signal?: AbortSignal
236): Promise<void> {
237 const mimeType = inferAttachmentMimeType(file)
238 const blob = await downloadFileForUpload(file, maxBytes)
239
240 let uploaded = await ai.files.upload({ file: blob, config: { mimeType, abortSignal: signal } })
241 if (!uploaded.name) {
242 throw new Error(`Gemini upload for "${file.name}" returned no file name`)
243 }
244 const uploadedName = uploaded.name
245
246 const deadline = Date.now() + GEMINI_PROCESSING_TIMEOUT_MS
247 while (uploaded.state === FileState.PROCESSING) {
248 if (Date.now() > deadline) {
249 throw new Error(`Gemini file processing timed out for "${file.name}"`)
250 }
251 await sleep(GEMINI_POLL_INTERVAL_MS)
252 uploaded = await ai.files.get({ name: uploadedName })
253 }
254
255 if (uploaded.state === FileState.FAILED || !uploaded.uri) {
256 throw new Error(
257 `Gemini file processing failed for "${file.name}": ${getErrorMessage(uploaded.error, 'unknown error')}`
258 )
259 }
260 file.providerFileUri = uploaded.uri
261 logger.info(`Uploaded "${file.name}" to Gemini File API`, { fileUri: uploaded.uri })
262}

Callers 1

Calls 6

inferAttachmentMimeTypeFunction · 0.90
sleepFunction · 0.90
getErrorMessageFunction · 0.90
downloadFileForUploadFunction · 0.85
infoMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected