Приложение предназначено для создания вопросов собеседования с использованием модели 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
[...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