firebase / genkit

An open source framework for building AI-powered apps with familiar code-centric patterns. Genkit makes it easy to integrate, test, and deploy sophisticated AI features to Firebase or Google Cloud.
Apache License 2.0
595 stars 73 forks source link

Prompting with videos return 403 error #737

Closed kadzaki closed 1 month ago

kadzaki commented 1 month ago

Prompting with videos return the following error, while it works with classic Gemini API: HTTP error downloading media 'https://generativelanguage.googleapis.com/v1beta/files/uu320af6jeh8': { "error": { "code": 403, "message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.", "status": "PERMISSION_DENIED" } }

With Genkit (not working): const response = await generate({ model: gemini15Pro, prompt: [ { text: prompt }, { media: { url: uploadResponse.file.uri, contentType: uploadResponse.file.mimeType, }, }, ] });

With classic Gemini API (works): const result = await model.generateContent([ { fileData: { mimeType: uploadResponse.file.mimeType, fileUri: uploadResponse.file.uri } }, { text: "Summarize this video." }, ]);

mbleigh commented 1 month ago

I suspect this is because Genkit attempts to download https URLs and inline them as base64-encoded data for Gemini APIs since Gemini hasn't traditionally supports https URLs directly.

We may need to special case the File API URLs.

Can you show me the code that you are running that gave you uploadResponse?

kadzaki commented 1 month ago

const uploadResponse = await fileManager.uploadFile("test-video.mp4", { mimeType: "video/mp4", displayName: "Test video", }); .... const response = await generate({ model: gemini15Pro, prompt: [ { text: prompt }, { media: { url: uploadResponse.file.uri, contentType: uploadResponse.file.mimeType, }, }, ] });

mbleigh commented 1 month ago

This should be fixed by #742 and will be included in the next release after it's merged!