Проблема загрузка файлов с API Gemini (с помощью PHP)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Проблема загрузка файлов с API Gemini (с помощью PHP)

Сообщение Anonymous »

Я борюсь с API Gemini, в частности, загружаю файлы. У меня есть функциональность чата, работающая точно так же, как и ожидалось, включая историю чата, с прокомментированным ниже кодом, который добавляет URL -адреса к полезной нагрузке. Если я расстроен этот код, чат разрывается. < /P>
// Add user message to history
$history[] = ["role" => "user", "parts" => [["text" => $userMessage]]];

// Add file URIs to the history as separate parts
// if (!empty($fileUris)) {
// $history[] = [
// "role" => "user",
// "parts" => array_merge(
// array_map(fn($fileUri) => ["fileData" => $fileUri], $fileUris)
// )
// ];
// }

$payload = [
"contents" => $history,
"systemInstruction" => [
"role" => "user",
"parts" => [
["text" => $instructions]
]
],
"generationConfig" => [
"temperature" => 1,
"topK" => 40,
"topP" => 0.95,
"maxOutputTokens" => 8192,
"responseMimeType" => "text/plain"
]
];

$requestBody = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
file_put_contents('debug_payload.json', $requestBody);

// gemini-2.0-flash-exp
// gemini-exp-1206
// gemini-1.5-pro
// gemini-1.5-flash-8b
//
$api_version = 'gemini-1.5-flash-8b';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://generativelanguage.googleapis.c ... t=sse&key=" . API_KEY);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $chunk) use ($historyFile, &$history, $textResponseLog) {
$lines = explode("data: ", $chunk);
foreach ($lines as $line) {
$line = trim($line);
if ($line) {
$json = json_decode($line, true);
if (isset($json['candidates'][0]['content']['parts'])) {
foreach ($json['candidates'][0]['content']['parts'] as $part) {
if (isset($part['text'])) {
$history[] = ["role" => "model", "parts" => [["text" => $part['text']]]];
file_put_contents($historyFile, json_encode($history, JSON_PRETTY_PRINT));
echo "data: " . json_encode(["response" => $part['text']]) . "\n\n";
ob_flush();
flush();
}
}
}
}
}
file_put_contents($textResponseLog, $chunk, FILE_APPEND);
return strlen($chunk);
});

curl_exec($ch);
curl_close($ch);
< /code>
Это объект, который я отправляю: < /p>
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Hey"
}
]
},
{
"role": "user",
"parts": [
{
"fileData": {
"fileUri": "https://generativelanguage.googleapis.c ... r9bb3f4w61",
"mimeType": "application/json"
}
},
{
"fileData": {
"fileUri": "https://generativelanguage.googleapis.c ... rd7cowjb45",
"mimeType": "application/json"
}
},
{
"fileData": {
"fileUri": "https://generativelanguage.googleapis.c ... 8bsh0fw458",
"mimeType": "application/json"
}
}
]
}
],
"systemInstruction": {
"role": "user",
"parts": [
{
"text": "Instructions ..."
}
]
},
"generationConfig": {
"temperature": 1,
"topK": 40,
"topP": 0.95,
"maxOutputTokens": 8192,
"responseMimeType": "text/plain"
}
}

И ошибка, которую я получаю назад:
Использование gemini-1.5-flash-8b или gemini-2,0-flash-exp ( ни один из них не работает теми, которые я только что подтвердил перед публикацией )

{
"error": {
"code": 400,
"message": "Unable to submit request because it has a mimeType parameter with value application/json, which is not supported. Update the mimeType and try again. Learn more: https://cloud.google.com/vertex-ai/gene ... nce/gemini",
"status": "INVALID_ARGUMENT"
}
}

Но это ответ, который я получаю после загрузки ... это приложение/json и заставляя его в PDF, дает мне другую ошибку.
{
"file": {
"name": "files/zwfo9w8j0v9k",
"mimeType": "application/json",
"sizeBytes": "74",
"createTime": "2025-01-29T20:29:30.655895Z",
"updateTime": "2025-01-29T20:29:30.655895Z",
"expirationTime": "2025-01-31T20:29:30.632984185Z",
"sha256Hash": "MDI0MjRmOGQ5ZDk5YmM2MTMxMDVjMjg5ZTg2NWJjYmUxMTdhN2VjZjc2NzJlZTQ5MjU2MDg5ZGNlMWFmM2I1MQ==",
"uri": "https://generativelanguage.googleapis.c ... fo9w8j0v9k",
"state": "ACTIVE",
"source": "UPLOADED"
}
}
< /code>
Пример код, поставляемый Google AI Studio < /p>
# TODO: Make the following files available on the local file system.
FILES=("file1.pdf" "file2.pdf" "file3.pdf")
MIME_TYPES=("application/pdf" "application/pdf" "application/pdf")
for i in "${!FILES[@]}"; do
NUM_BYTES=$(wc -c < "${FILES[$i]}")
curl "https://generativelanguage.googleapis.c ... =${API_KEY}" \
-H "X-Goog-Upload-Command: start, upload, finalize" \
-H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPES[$i]}" \
-H "Content-Type: application/json" \
-d "{'file': {'display_name': '${FILES[$i]}'}}" \
--data-binary "@${FILES[$i]}"
# TODO: Read the file.uri from the response, store it as FILE_URI_${i}
done

...

{
"role": "user",
"parts": [
{
"fileData": {
"fileUri": "${FILE_URI_0}",
"mimeType": "application/pdf"
}
},
{
"fileData": {
"fileUri": "${FILE_URI_1}",
"mimeType": "application/pdf"
}
},
{
"fileData": {
"fileUri": "${FILE_URI_2}",
"mimeType": "application/pdf"
}
}
]
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -using-php
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»