plover-gemini

Diagnose and fix Gemini SDK functionCalls accessor errors and 429 quota failures.

1|Updated May 24, 2026
One-click install
npx skills add https://github.com/tryplover/Plover --skill plover-gemini-tryplover
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: plover-gemini
Source: https://github.com/tryplover/Plover/tree/main/.claude/skills/plover-gemini
Command: npx skills add https://github.com/tryplover/Plover --skill plover-gemini-tryplover

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @google/generative-ai.

What problem does it solve? Developers using the @google/generative-ai SDK hit two recurring footguns: a TypeScript error when accessing functionCalls as a property instead of a method, and 429 quota-exceeded failures on free-tier Gemini keys that break goal decomposition calls. ## Core Features & Use Cases - functionCalls accessor fix: Explains that response.response.functionCalls is a method on EnhancedGenerateContentResponse, so it must be invoked as response.response.functionCalls()?.[0] rather than indexed as a property. - 429 quota fallback strategy: Describes an ordered model fallback loop (gemini-2.0-flash, gemini-1.5-flash, gemini-2.0-flash-lite-preview-02-05, gemini-1.5-pro) that retries on rate-limit errors and only throws when all candidates fail. - Use Case: Your Electron app's goal decomposition fails with "Quota exceeded" on a free-tier key. Apply the fallback loop in app/src/main/planner/decompose.ts (now executed on the backend proxy server) so requests recycle through alternate models automatically. ## Quick Start Ask the assistant to fix the TypeScript error on response.response.functionCalls and add a model fallback loop for Gemini 429 errors in decompose.ts.

Frequently Asked Questions about plover-gemini

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I fix Property '0' does not exist on type '() => FunctionCall[] | undefined'?▼

This TypeScript error occurs because functionCalls on the Gemini EnhancedGenerateContentResponse is a method, not an array property. Call it as a function: response.response.functionCalls()?.[0] instead of indexing it directly.

How to handle Gemini 429 Too Many Requests errors on the free tier?▼

Free-tier Gemini keys have strict limits (15 RPM / 1500 RPD). Implement a fallback loop that catches the 429 exception, logs a warning, and retries through ordered models like gemini-2.0-flash, gemini-1.5-flash, and gemini-1.5-pro, throwing only if all fail.

Is functionCalls a property or method in @google/generative-ai?▼

In the legacy @google/generative-ai SDK, functionCalls is a getter method on EnhancedGenerateContentResponse that returns FunctionCall[] | undefined. You must invoke it with parentheses to access the list of function calls.

Which Gemini models work as fallbacks when quota is exceeded?▼

The documented fallback order starts with the GEMINI_MODEL env var defaulting to gemini-2.0-flash, then tries gemini-1.5-flash, gemini-2.0-flash-lite-preview-02-05, gemini-1.5-pro, and other 2.5/3.x generations before throwing.

Where should the Gemini model fallback logic run in a client-server app?▼

After a client-server refactor, the fallback loop should execute on the backend proxy server rather than the Electron client. This centralizes quota handling and keeps model retry logic out of the desktop app.