Я использую Postman и пытаюсь получить ответ от Gemini API при попытке создать приглашение, включающее изображение. Я отправляю запрос по адресу: https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent
{
"contents":[
{
"parts":[
{"text": "What is this picture?"},
{
"inline_data": {
"mime_type":"image/jpeg",
"data": "https://i.ibb.co/3mX1qcB/Document-sans-titre-page-0001.jpg"
}
}
]
}
]
}
Я получаю такой ответ:
{
"error": {
"code": 400,
"message": "Invalid value at 'contents[0].parts[1].inline_data.data' (TYPE_BYTES), Base64 decoding failed for \"https://pastebin.com/raw/kL4WEnnn\"",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "contents[0].parts[1].inline_data.data",
"description": "Invalid value at 'contents[0].parts[1].inline_data.data' (TYPE_BYTES), Base64 decoding failed for \"https://pastebin.com/raw/kL4WEnnn\""
}
]
}
]
}
}
Я попытался преобразовать изображение в необработанный текст base64, загрузить его в Pastebin и передать в запросе, но у меня та же ошибка. Кто-нибудь может мне помочь?
🤔 А знаете ли вы, что...
JavaScript можно использовать для создания анимаций и игр на веб-страницах.
Вы пытаетесь использовать изображение, расположенное по URL-адресу, но inline_data
Part
, который вы пытаетесь использовать, предназначен для передачи представления необработанных байтов файла изображения в кодировке Base64.
Вместо этого используйте часть FileData, которая принимает «данные на основе URI»:
{
"contents": [
{
"parts": [
{
"text": "What is this picture?"
},
{
"fileData": {
"mime_type": "image/jpeg",
"fileUri": "https://i.ibb.co/3mX1qcB/Document-sans-titre-page-0001.jpg"
}
}
]
}
]
}
Как насчет следующих шаблонов?
В этом шаблоне используется inlineData
.
В этом случае необходимо преобразовать данные изображения (https://i.ibb.co/3mX1qcB/Document-sans-titre-page-0001.jpg
) в данные base64. Когда
Сначала я создал текстовые данные, включая данные base64, из URL-адреса следующим образом. Имя файла sampleRequestBody.txt
.
{"contents":[{"parts":[{"text":"What is this picture?"},{"inline_data":{"mime_type":"image/jpeg","data":"{base64 data converted from image data}"}}]}]}
Когда это используется с командой curl, это выглядит следующим образом.
curl -s -X POST \
-H "Content-Type: application/json" \
-d @sampleRequestBody.txt \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key = {your API key}"
При запуске этой команды curl получается результат, показанный в разделе «Тестирование».
В этом шаблоне используется fileData
. В этом случае запускается следующий поток.
curl "https://i.ibb.co/3mX1qcB/Document-sans-titre-page-0001.jpg" | curl --data-binary @- -X POST -H "Content-Type: image/jpeg" "https://generativelanguage.googleapis.com/upload/v1beta/files?uploadType=media&key = {your API key}"
При этом возвращается следующий результат.
{
"file": {
"name": "files/###s",
"mimeType": "image/jpeg",
"sizeBytes": "1271543",
"createTime": "2024-07-17T00:00:00.000000Z",
"updateTime": "2024-07-17T00:00:00.000000Z",
"expirationTime": "2024-07-19T00:00:00.000000Z",
"sha256Hash": "###",
"uri": "https://generativelanguage.googleapis.com/v1beta/files/###",
"state": "ACTIVE"
}
}
Пожалуйста, скопируйте значение uri
из возвращенного значения.
Используя значение uri
, контент генерируется следующим образом. Здесь используется свойство fileData
.
curl -s -X POST \
-d '{"contents":[{"parts":[{"text":"What is this picture?"},{"fileData":{"mimeType":"image/jpeg","fileUri":"https://generativelanguage.googleapis.com/v1beta/files/###"}}]}]}' \
-H "Content-Type: application/json" \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key = {your API key}"
Оба шаблона возвращают следующий результат. Сгенерированный текст будет другим.
{
"candidates": [
{
"content": {
"parts": [
{
"text": "This image shows the Swagger documentation for a petstore API. Swagger is a specification and toolset for describing, documenting, and consuming RESTful web services. This particular documentation defines the endpoints and data structures for a petstore API. It outlines how users can interact with the API to create, read, update, and delete pets, as well as manage their inventory."
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE"
}
]
}
],
"usageMetadata": {
"promptTokenCount": 263,
"candidatesTokenCount": 76,
"totalTokenCount": 339
}
}