Я следую инструкциям из пункта 5. Вызов Gemini API с изображениями из Автоматизация задач Google Workspace с помощью Gemini API. При запуске testGeminiVision
я получил сокращенное сообщение об ошибке с предложением использовать muteHttpExceptions
.
Я изменил код, добавив 'muteHttpExceptions': true
к объявлению переменной options
в функции callGeminiProVision
. Теперь в журналах выполнения я получил следующее:
Provide a fun fact about this object. {
"error": {
"code": 404,
"message": "Gemini 1.0 Pro Vision has been deprecated on July 12, 2024. Consider switching to different model, for example gemini-1.5-flash.",
"status": "NOT_FOUND"
}
}
Погуглив сообщение, я обнаружил проблему в репозитории GitHub: https://github.com/OthersideAI/self-operating-computer/issues/204, но пока не исправлена.
Я также искал примечания к выпуску и документацию Gemini, но мне нужна была помощь в исправлении кода Codelab. Я нашел предложения перейти на Google AI Vertex, но для этого требуются существенные изменения.
Код адаптирован из упомянутой Codelab. Я удалил части, которые не нужны для воспроизведения проблемы, с которой я столкнулся. Чтобы запустить этот код, вам необходимо получить ключ Gemini API и добавить свойство скрипта, используя GOOGLE_API_KEY
в качестве имени свойства. В упомянутой Codelab есть подробные инструкции для этого.
После завершения настройки проекта Apps Script в редакторе сценариев Google Apps выберите testGeminiVision
, затем нажмите «Выполнить».
const properties = PropertiesService.getScriptProperties().getProperties();
const geminiApiKey = properties['GOOGLE_API_KEY'];
const geminiProVisionEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-vision-latest:generateContent?key=${geminiApiKey}`;
function callGeminiProVision(prompt, image, temperature = 0) {
const imageData = Utilities.base64Encode(image.getAs('image/png').getBytes());
const payload = {
"contents": [
{
"parts": [
{
"text": prompt
},
{
"inlineData": {
"mimeType": "image/png",
"data": imageData
}
}
]
}
],
"generationConfig": {
"temperature": temperature,
},
};
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload),
'muteHttpExceptions': true
};
const response = UrlFetchApp.fetch(geminiProVisionEndpoint, options);
if (response.getResponseCode() !== 200) {
return response.getContentText();
}
const data = JSON.parse(response);
const content = data["candidates"][0]["content"]["parts"][0]["text"];
return content;
}
function testGeminiVision() {
const prompt = "Provide a fun fact about this object.";
const image = UrlFetchApp.fetch('https://storage.googleapis.com/generativeai-downloads/images/instrument.jpg').getBlob();
const output = callGeminiProVision(prompt, image);
console.info(prompt, output);
}
TLDR:
Замените models/gemini-1.0-pro-vision-latest
на models/gemini-1.5-flash-latest
.
От
const geminiProVisionEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-vision-latest:generateContent?key=${geminiApiKey}`;
К
const geminiProVisionEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=${geminiApiKey}`;
Это вопрос, на который можно ответить самому себе. Я опустил несколько вещей, которые пробовал. Некоторые были очень тупыми, а другие не очень.