{"id":"797b6d87-deb3-40d5-9262-e93364fca8ec","shortId":"KbbjtQ","kind":"skill","title":"gemini-api-integration","tagline":"Use when integrating Google Gemini API into projects. Covers model selection, multimodal inputs, streaming, function calling, and production best practices.","description":"# Gemini API Integration\n\n## Overview\n\nThis skill guides AI agents through integrating Google Gemini API into applications — from basic text generation to advanced multimodal, function calling, and streaming use cases. It covers the full Gemini SDK lifecycle with production-grade patterns.\n\n## When to Use This Skill\n\n- Use when setting up Gemini API for the first time in a Node.js, Python, or browser project\n- Use when implementing multimodal inputs (text + image/audio/video)\n- Use when adding streaming responses to improve perceived latency\n- Use when implementing function calling / tool use with Gemini\n- Use when optimizing model selection (Flash vs Pro vs Ultra) for cost and performance\n- Use when debugging Gemini API errors, rate limits, or quota issues\n\n## Step-by-Step Guide\n\n### 1. Installation & Setup\n\n**Node.js / TypeScript:**\n```bash\nnpm install @google/generative-ai\n```\n\n**Python:**\n```bash\npip install google-generativeai\n```\n\nSet your API key securely:\n```bash\nexport GEMINI_API_KEY=\"your-api-key-here\"\n```\n\n### 2. Basic Text Generation\n\n**Node.js:**\n```javascript\nimport { GoogleGenerativeAI } from \"@google/generative-ai\";\n\nconst genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);\nconst model = genAI.getGenerativeModel({ model: \"gemini-1.5-flash\" });\n\nconst result = await model.generateContent(\"Explain async/await in JavaScript\");\nconsole.log(result.response.text());\n```\n\n**Python:**\n```python\nimport google.generativeai as genai\nimport os\n\ngenai.configure(api_key=os.environ[\"GEMINI_API_KEY\"])\nmodel = genai.GenerativeModel(\"gemini-1.5-flash\")\n\nresponse = model.generate_content(\"Explain async/await in JavaScript\")\nprint(response.text)\n```\n\n### 3. Streaming Responses\n\n```javascript\nconst result = await model.generateContentStream(\"Write a detailed blog post about AI\");\n\nfor await (const chunk of result.stream) {\n  process.stdout.write(chunk.text());\n}\n```\n\n### 4. Multimodal Input (Text + Image)\n\n```javascript\nimport fs from \"fs\";\n\nconst imageData = fs.readFileSync(\"screenshot.png\");\nconst imagePart = {\n  inlineData: {\n    data: imageData.toString(\"base64\"),\n    mimeType: \"image/png\",\n  },\n};\n\nconst result = await model.generateContent([\"Describe this image:\", imagePart]);\nconsole.log(result.response.text());\n```\n\n### 5. Function Calling / Tool Use\n\n```javascript\nconst tools = [{\n  functionDeclarations: [{\n    name: \"get_weather\",\n    description: \"Get current weather for a city\",\n    parameters: {\n      type: \"OBJECT\",\n      properties: {\n        city: { type: \"STRING\", description: \"City name\" },\n      },\n      required: [\"city\"],\n    },\n  }],\n}];\n\nconst model = genAI.getGenerativeModel({ model: \"gemini-1.5-pro\", tools });\nconst result = await model.generateContent(\"What's the weather in Mumbai?\");\n\nconst call = result.response.functionCalls()?.[0];\nif (call) {\n  // Execute the actual function\n  const weatherData = await getWeather(call.args.city);\n  // Send result back to model\n}\n```\n\n### 6. Multi-turn Chat\n\n```javascript\nconst chat = model.startChat({\n  history: [\n    { role: \"user\", parts: [{ text: \"You are a helpful coding assistant.\" }] },\n    { role: \"model\", parts: [{ text: \"Sure! I'm ready to help with code.\" }] },\n  ],\n});\n\nconst response = await chat.sendMessage(\"How do I reverse a string in Python?\");\nconsole.log(response.response.text());\n```\n\n### 7. Model Selection Guide\n\n| Model | Best For | Speed | Cost |\n|-------|----------|-------|------|\n| `gemini-1.5-flash` | High-throughput, cost-sensitive tasks | Fast | Low |\n| `gemini-1.5-pro` | Complex reasoning, long context | Medium | Medium |\n| `gemini-2.0-flash` | Latest fast model, multimodal | Very Fast | Low |\n| `gemini-2.0-pro` | Most capable, advanced tasks | Slow | High |\n\n## Best Practices\n\n- ✅ **Do:** Use `gemini-1.5-flash` for most tasks — it's fast and cost-effective\n- ✅ **Do:** Always stream responses for user-facing chat UIs to reduce perceived latency\n- ✅ **Do:** Store API keys in environment variables, never hard-code them\n- ✅ **Do:** Implement exponential backoff for rate limit (429) errors\n- ✅ **Do:** Use `systemInstruction` to set persistent model behavior\n- ❌ **Don't:** Use `gemini-pro` for simple tasks — Flash is cheaper and faster\n- ❌ **Don't:** Send large base64 images inline for files > 20MB — use File API instead\n- ❌ **Don't:** Ignore safety ratings in responses for production apps\n\n## Error Handling\n\n```javascript\ntry {\n  const result = await model.generateContent(prompt);\n  return result.response.text();\n} catch (error) {\n  if (error.status === 429) {\n    // Rate limited — wait and retry with exponential backoff\n    await new Promise(r => setTimeout(r, 2 ** retryCount * 1000));\n  } else if (error.status === 400) {\n    // Invalid request — check prompt or parameters\n    console.error(\"Invalid request:\", error.message);\n  } else {\n    throw error;\n  }\n}\n```\n\n## Troubleshooting\n\n**Problem:** `API_KEY_INVALID` error\n**Solution:** Ensure `GEMINI_API_KEY` environment variable is set and the key is active in Google AI Studio.\n\n**Problem:** Response blocked by safety filters\n**Solution:** Check `result.response.promptFeedback.blockReason` and adjust your prompt or safety settings.\n\n**Problem:** Slow response times\n**Solution:** Switch to `gemini-1.5-flash` and enable streaming. Consider caching repeated prompts.\n\n**Problem:** `RESOURCE_EXHAUSTED` (quota exceeded)\n**Solution:** Check your quota in Google Cloud Console. Implement request queuing and exponential backoff.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["gemini","api","integration","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-gemini-api-integration","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/gemini-api-integration","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34768 github stars · SKILL.md body (5,780 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T18:51:21.763Z","embedding":null,"createdAt":"2026-04-18T21:37:49.731Z","updatedAt":"2026-04-23T18:51:21.763Z","lastSeenAt":"2026-04-23T18:51:21.763Z","tsv":"'-1.5':196,226,328,417,429,461,652 '-2.0':438,448 '0':344 '1':143 '1000':586 '2':174,584 '20mb':539 '3':237 '4':260 '400':590 '429':506,569 '5':292 '6':361 '7':407 'activ':623 'actual':349 'ad':97 'adjust':638 'advanc':46,452 'agent':33 'ai':32,251,626 'alway':474 'api':3,10,26,38,76,131,161,167,171,189,217,221,489,542,606,613 'app':553 'applic':40 'ask':713 'assist':380 'async/await':203,232 'await':200,243,253,284,333,353,395,560,578 'back':358 'backoff':502,577,679 'base64':279,534 'bash':148,153,164 'basic':42,175 'behavior':515 'best':23,412,456 'block':630 'blog':248 'boundari':721 'browser':86 'cach':658 'call':20,49,108,294,342,346 'call.args.city':355 'capabl':451 'case':53 'catch':565 'chat':365,368,481 'chat.sendmessage':396 'cheaper':527 'check':593,635,667 'chunk':255 'chunk.text':259 'citi':310,315,319,322 'clarif':715 'clear':688 'cloud':672 'code':379,392,497 'complex':431 'consid':657 'consol':673 'console.error':597 'console.log':206,290,405 'const':184,191,198,241,254,270,274,282,298,323,331,341,351,367,393,558 'content':230 'context':434 'cost':124,415,423,471 'cost-effect':470 'cost-sensit':422 'cover':13,55 'criteria':724 'current':306 'data':277 'debug':129 'describ':286,692 'descript':304,318 'detail':247 'effect':472 'els':587,601 'enabl':655 'ensur':611 'environ':492,615,704 'environment-specif':703 'error':132,507,554,566,603,609 'error.message':600 'error.status':568,589 'exceed':665 'execut':347 'exhaust':663 'expert':709 'explain':202,231 'exponenti':501,576,678 'export':165 'face':480 'fast':426,441,445,468 'faster':529 'file':538,541 'filter':633 'first':79 'flash':118,197,227,418,439,462,525,653 'fs':267,269 'fs.readfilesync':272 'full':57 'function':19,48,107,293,350 'functiondeclar':300 'gemini':2,9,25,37,58,75,112,130,166,195,220,225,327,416,428,437,447,460,520,612,651 'gemini-api-integr':1 'gemini-pro':519 'genai':185,213 'genai.configure':216 'genai.generativemodel':224 'genai.getgenerativemodel':193,325 'generat':44,177 'generativeai':158 'get':302,305 'getweath':354 'googl':8,36,157,625,671 'google-generativeai':156 'google.generativeai':211 'google/generative-ai':151,183 'googlegenerativeai':181,187 'grade':64 'guid':31,142,410 'handl':555 'hard':496 'hard-cod':495 'help':378,390 'high':420,455 'high-throughput':419 'histori':370 'ignor':546 'imag':264,288,535 'image/audio/video':94 'image/png':281 'imagedata':271 'imagedata.tostring':278 'imagepart':275,289 'implement':90,106,500,674 'import':180,210,214,266 'improv':101 'inlin':536 'inlinedata':276 'input':17,92,262,718 'instal':144,150,155 'instead':543 'integr':4,7,27,35 'invalid':591,598,608 'issu':137 'javascript':179,205,234,240,265,297,366,556 'key':162,168,172,190,218,222,490,607,614,621 'larg':533 'latenc':103,486 'latest':440 'lifecycl':60 'limit':134,505,571,680 'long':433 'low':427,446 'm':387 'match':689 'medium':435,436 'mimetyp':280 'miss':726 'model':14,116,192,194,223,324,326,360,382,408,411,442,514 'model.generate':229 'model.generatecontent':201,285,334,561 'model.generatecontentstream':244 'model.startchat':369 'multi':363 'multi-turn':362 'multimod':16,47,91,261,443 'mumbai':340 'name':301,320 'never':494 'new':186,579 'node.js':83,146,178 'npm':149 'object':313 'optim':115 'os':215 'os.environ':219 'output':698 'overview':28 'paramet':311,596 'part':373,383 'pattern':65 'perceiv':102,485 'perform':126 'permiss':719 'persist':513 'pip':154 'post':249 'practic':24,457 'print':235 'pro':120,329,430,449,521 'problem':605,628,644,661 'process.env.gemini':188 'process.stdout.write':258 'product':22,63,552 'production-grad':62 'project':12,87 'promis':580 'prompt':562,594,640,660 'properti':314 'python':84,152,208,209,404 'queu':676 'quota':136,664,669 'r':581,583 'rate':133,504,548,570 'readi':388 'reason':432 'reduc':484 'repeat':659 'request':592,599,675 'requir':321,717 'resourc':662 'respons':99,228,239,394,476,550,629,646 'response.response.text':406 'response.text':236 'result':199,242,283,332,357,559 'result.response.functioncalls':343 'result.response.promptfeedback.blockreason':636 'result.response.text':207,291,564 'result.stream':257 'retri':574 'retrycount':585 'return':563 'revers':400 'review':710 'role':371,381 'safeti':547,632,642,720 'scope':691 'screenshot.png':273 'sdk':59 'secur':163 'select':15,117,409 'send':356,532 'sensit':424 'set':73,159,512,618,643 'settimeout':582 'setup':145 'simpl':523 'skill':30,70,683 'skill-gemini-api-integration' 'slow':454,645 'solut':610,634,648,666 'source-sickn33' 'specif':705 'speed':414 'step':139,141 'step-by-step':138 'stop':711 'store':488 'stream':18,51,98,238,475,656 'string':317,402 'studio':627 'substitut':701 'success':723 'sure':385 'switch':649 'systeminstruct':510 'task':425,453,465,524,687 'test':707 'text':43,93,176,263,374,384 'throughput':421 'throw':602 'time':80,647 'tool':109,295,299,330 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':696 'tri':557 'troubleshoot':604 'turn':364 'type':312,316 'typescript':147 'ui':482 'ultra':122 'use':5,52,68,71,88,95,104,110,113,127,296,459,509,518,540,681 'user':372,479 'user-fac':478 'valid':706 'variabl':493,616 'vs':119,121 'wait':572 'weather':303,307,338 'weatherdata':352 'write':245 'your-api-key-her':169","prices":[{"id":"e4034109-dc12-4a2d-953f-a2efc7c1b212","listingId":"797b6d87-deb3-40d5-9262-e93364fca8ec","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:37:49.731Z"}],"sources":[{"listingId":"797b6d87-deb3-40d5-9262-e93364fca8ec","source":"github","sourceId":"sickn33/antigravity-awesome-skills/gemini-api-integration","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/gemini-api-integration","isPrimary":false,"firstSeenAt":"2026-04-18T21:37:49.731Z","lastSeenAt":"2026-04-23T18:51:21.763Z"}],"details":{"listingId":"797b6d87-deb3-40d5-9262-e93364fca8ec","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"gemini-api-integration","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34768,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"154d8a6e402525ab9f1c7dd018a6e612749b589c","skill_md_path":"skills/gemini-api-integration/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/gemini-api-integration"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"gemini-api-integration","description":"Use when integrating Google Gemini API into projects. Covers model selection, multimodal inputs, streaming, function calling, and production best practices."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/gemini-api-integration"},"updatedAt":"2026-04-23T18:51:21.763Z"}}