Обработка 429 Слишком много ошибок запросов с Google Gemini API в приложении на стороне клиента next.jsJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Обработка 429 Слишком много ошибок запросов с Google Gemini API в приложении на стороне клиента next.js

Сообщение Anonymous »

Я сталкиваюсь с ошибкой 429 слишком много запросов при использовании пакета @Google/Genai для генерации вопросов интервью в приложении Next.js на стороне клиента. Ошибка сохраняется, несмотря на реализацию механизма повторной попытки, и, по-видимому, связана с превышением пределов квоты свободного уровня для модели Gemini 2.5 Pro. Ниже приведена соответствующий код и журнал ошибок.
Приложение предназначено для создания вопросов собеседования с использованием модели Gemini 2.5 Pro на основе ввода пользователя (роль, описание и опыт). Функция Withretry пытается обработать ошибку 429 с экспоненциальным отбором (5, 10, 20 с), но после трех попыток не удается. Детали ошибки указывают на то, что я превышал бесплатные квоты для ежедневных токенов, ежедневные запросы, запросы за минуту и ​​токены на минуту.
мой код: < /p>
geminiaimodal.js:
>import { GoogleGenAI } from '@google/genai';

const apiKey = process.env.NEXT_PUBLIC_GEMINI_API_KEY;
if (!apiKey) {
throw new Error('NEXT_PUBLIC_GEMINI_API_KEY is not set in environment variables');
}

const ai = new GoogleGenAI({ apiKey });
const config = {
thinkingConfig: {
thinkingBudget: -1, // Unlimited thinking budget as per your UI
},
responseMimeType: 'application/json', // Structured output
};
const model = 'gemini-2.5-pro';

async function withRetry(fn, maxRetries = 3, baseDelay = 5000) {
for (let attempt = 1; attempt setTimeout(resolve, delay));
continue;
}
throw error;
}
}
}

export async function generateInterviewQuestions(prompt) {
try {
const result = await withRetry(async () => {
const response = await ai.models.generateContentStream({
model,
config,
contents: [
{
role: 'user',
parts: [{ text: prompt }],
},
],
});
let fullText = '';
for await (const chunk of response) {
fullText += chunk.text;
}
return fullText;
});
return JSON.parse(result);
} catch (error) {
console.error('Error in generateInterviewQuestions:', error);
throw new Error('Failed to generate interview questions from Gemini API');
}
}
< /code>
addcardwithdialog.jsx:
'use client';

import React, { useState } from 'react';
import { Dialog } from '@headlessui/react';
import { XMarkIcon } from '@heroicons/react/24/solid';
import { generateInterviewQuestions } from '../../utils/GeminiAIModal';

function AddCardWithDialog({ title, description }) {
const [isOpen, setIsOpen] = useState(false);
const [form, setForm] = useState({
role: '',
description: '',
experience: '',
});
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(null);

const handleStartInterview = async (e) => {
e.preventDefault();
setIsLoading(true);
setError(null);

const contents = `job position: ${form.role},
job description: ${form.description},
no of year experience: ${form.experience},
depends of those info give me 5 interview qs in json format
give qs and answers in json format`;

try {
const result = await generateInterviewQuestions(contents);
console.log('Interview Questions:', result);
setIsOpen(false);
} catch (err) {
console.error('Error generating questions:', err);
setError('Failed to generate interview questions. Please try again.');
} finally {
setIsLoading(false);
}
};

const handleChange = (e) => {
setForm({ ...form, [e.target.name]: e.target.value });
};

return (

onClick={() => setIsOpen(true)}
className='p-10 border rounded-2xl bg-secondary hover:scale-105 hover:shadow-lg cursor-pointer transition-all'
>
{title}

setIsOpen(false)} className='relative z-50'>



setIsOpen(false)}
className='absolute top-4 right-4 text-gray-500 hover:text-red-600 transition-colors'
>




Tell us more about Job you are interviewing


Add Details about job position, your skills and year of experience





Job Position / Role name




Job Description / Tech Stack in Short




No of Year Experience





{error && (
{error}
)}

setIsOpen(false)}
className='px-4 py-2 rounded-md bg-gray-200 text-gray-600 hover:bg-gray-300'
disabled={isLoading}
>
Cancel


{isLoading ? 'Generating...' : 'Start Interview'}






);
}

export default AddCardWithDialog;
< /code>
Журнал ошибок: < /p>
\utils\GeminiAIModal.js:24 429 error, retrying after 5000ms (attempt 1/3)
\utils\GeminiAIModal.js:36
POST https://generativelanguage.googleapis.c ... nt?alt=sse 429 (Too Many Requests)
[...stack trace...]
\utils\GeminiAIModal.js:24 429 error, retrying after 10000ms (attempt 2/3)
[...similar 429 error...]
\utils\GeminiAIModal.js:54 Error in generateInterviewQuestions: ClientError: got status: 429 . {"error":{"message":"{\n \"error\": {\n \"code\": 429,\n \"message\": \"You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits.\",\n \"status\": \"RESOURCE_EXHAUSTED\",\n \"details\": [\n {\n \"@type\": \"type.googleapis.com/google.rpc.QuotaFailure\",\n \"violations\": [\n {\n \"quotaMetric\": \"generativelanguage.googleapis.com/generate_content_free_tier_input_token_count\",\n \"quotaId\": \"GenerateContentInputTokensPerModelPerDay-FreeTier\",\n \"quotaDimensions\": {\n \"location\": \"global\",\n \"model\": \"gemini-2.5-pro\"\n }\n },\n {\n \"quotaMetric\": \"generativelanguage.googleapis.com/generate_content_free_tier_requests\",\n \"quotaId\": \"GenerateRequestsPerDayPerProjectPerModel-FreeTier\",\n \"quotaDimensions\": {\n \"model\": \"gemini-2.5-pro\",\n \"location\": \"global\"\n }\n },\n {\n \"quotaMetric\": \"generativelanguage.googleapis.com/generate_content_free_tier_requests\",\n \"quotaId\": \"GenerateRequestsPerMinutePerProjectPerModel-FreeTier\",\n \"quotaDimensions\": {\n \"model\": \"gemini-2.5-pro\",\n \"location\": \"global\"\n }\n },\n {\n \"quotaMetric\": \"generativelanguage.googleapis.com/generate_content_free_tier_input_token_count\",\n \"quotaId\": \"GenerateContentInputTokensPerModelPerMinute-FreeTier\",\n \"quotaDimensions\": {\n \"location\": \"global\",\n \"model\": \"gemini-2.5-pro\"\n }\n }\n ]\n },\n {\n \"@type\": \"type.googleapis.com/google.rpc.Help\",\n \"links\": [\n {\n \"description\": \"Learn more about Gemini API quotas\",\n \"url\": \"https://ai.google.dev/gemini-api/docs/rate-limits\"\n }\n ]\n },\n {\n \"@type\": \"type.googleapis.com/google.rpc.RetryInfo\",\n \"retryDelay\": \"49s\"\n }\n ]\n }\n}\n","code":429,"status":""}}
at throwErrorIfNotOK (\node_modules\@google\genai\dist\web\index.mjs:11201:1)
[...stack trace...]
\components\ui\AddCardWithDialog.jsx:34 Error generating questions: Error: Failed to generate interview questions from Gemini API
at generateInterviewQuestions (\utils\GeminiAIModal.js:55:15)
[...stack trace...]


Подробнее здесь: https://stackoverflow.com/questions/796 ... -client-si
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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