Google Gemini API Tutorial 2026: Complete Developer Guide
Google Gemini API Tutorial 2026: Complete Developer Guide
Google Gemini is the most powerful AI model for multimodal applications. In this comprehensive tutorial, I’ll show you how to integrate Gemini into your web applications.
Why Choose Google Gemini?
Key Advantages
- 1M+ Token Context - Process entire codebases or books
- Best Multimodal - Images, video, audio, and text
- Lowest Cost - 50-70% cheaper than GPT-4
- Fastest Response - Gemini Flash is incredibly fast
- Google Integration - Native Vertex AI support
Getting Started with Gemini API
Step 1: Get Your API Key
- Go to Google AI Studio
- Click “Get API Key”
- Create a new project or select existing
- Copy your API key
Step 2: Install the SDK
npm install @google/generative-ai
Step 3: Basic Text Generation
import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
async function generateText(prompt) {
const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
const result = await model.generateContent(prompt);
const response = await result.response;
return response.text();
}
// Usage
const answer = await generateText("Explain quantum computing simply");
console.log(answer);
Gemini Models Comparison
| Model | Best For | Context | Speed | Cost |
|---|---|---|---|---|
| Gemini 1.5 Flash | High volume | 1M | Fastest | $0.35/1M |
| Gemini 1.5 Pro | Complex tasks | 1M | Fast | $3.50/1M |
| Gemini Ultra | Research | 1M | Medium | $7/1M |
Building a Chat Application
Complete Chat Implementation
import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
class GeminiChat {
constructor() {
this.model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
this.chat = null;
}
async startChat(systemPrompt = "") {
this.chat = this.model.startChat({
history: [],
generationConfig: {
maxOutputTokens: 8192,
temperature: 0.7,
},
});
if (systemPrompt) {
await this.chat.sendMessage(systemPrompt);
}
}
async sendMessage(message) {
if (!this.chat) {
await this.startChat();
}
const result = await this.chat.sendMessage(message);
return result.response.text();
}
async streamMessage(message, onChunk) {
const result = await this.chat.sendMessageStream(message);
let fullResponse = "";
for await (const chunk of result.stream) {
const text = chunk.text();
fullResponse += text;
onChunk(text);
}
return fullResponse;
}
}
// Usage
const chat = new GeminiChat();
await chat.startChat("You are a helpful AI coding assistant.");
const response = await chat.sendMessage("How do I sort an array in JavaScript?");
console.log(response);
Image Analysis with Gemini Vision
Analyzing Images
import { GoogleGenerativeAI } from "@google/generative-ai";
import fs from "fs";
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
async function analyzeImage(imagePath, prompt) {
const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
// Read image and convert to base64
const imageData = fs.readFileSync(imagePath);
const base64Image = imageData.toString("base64");
const result = await model.generateContent([
{
inlineData: {
mimeType: "image/jpeg",
data: base64Image,
},
},
prompt,
]);
return result.response.text();
}
// Usage
const analysis = await analyzeImage(
"./screenshot.png",
"Describe what you see in this image and identify any UI issues"
);
Processing Multiple Images
async function compareImages(image1Path, image2Path) {
const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
const image1 = fs.readFileSync(image1Path).toString("base64");
const image2 = fs.readFileSync(image2Path).toString("base64");
const result = await model.generateContent([
{ inlineData: { mimeType: "image/jpeg", data: image1 } },
{ inlineData: { mimeType: "image/jpeg", data: image2 } },
"Compare these two images and describe the differences",
]);
return result.response.text();
}
Processing Large Documents
Handling 1M Token Context
async function analyzeDocument(documentText) {
const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
// Gemini can handle up to 1M tokens!
const result = await model.generateContent([
documentText,
`
Analyze this document and provide:
1. Executive summary (2-3 paragraphs)
2. Key points (bullet list)
3. Action items identified
4. Questions or concerns
`,
]);
return result.response.text();
}
Streaming Responses
Real-time Streaming
async function streamResponse(prompt) {
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const result = await model.generateContentStream(prompt);
process.stdout.write("Response: ");
for await (const chunk of result.stream) {
process.stdout.write(chunk.text());
}
console.log(); // newline at end
}
Building a RAG System with Gemini
Complete RAG Implementation
import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
class GeminiRAG {
constructor() {
this.model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
this.embeddingModel = genAI.getGenerativeModel({
model: "text-embedding-004"
});
}
async getEmbedding(text) {
const result = await this.embeddingModel.embedContent(text);
return result.embedding.values;
}
async query(question, relevantDocs) {
const context = relevantDocs.join("\n\n---\n\n");
const prompt = `
Based on the following context, answer the question.
If the answer is not in the context, say "I don't have that information."
Context:
${context}
Question: ${question}
Answer:
`;
const result = await this.model.generateContent(prompt);
return result.response.text();
}
}
Error Handling Best Practices
async function safeGenerate(prompt) {
const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
try {
const result = await model.generateContent(prompt);
const response = result.response;
// Check for safety blocks
if (response.promptFeedback?.blockReason) {
throw new Error(`Blocked: ${response.promptFeedback.blockReason}`);
}
return response.text();
} catch (error) {
if (error.message.includes("RATE_LIMIT")) {
// Wait and retry
await new Promise(r => setTimeout(r, 5000));
return safeGenerate(prompt);
}
throw error;
}
}
Cost Optimization Tips
1. Use the Right Model
const selectModel = (task) => {
// Use Flash for simple tasks (70% cheaper)
if (task.complexity === 'simple') return 'gemini-1.5-flash';
// Use Pro for complex reasoning
return 'gemini-1.5-pro';
};
2. Implement Caching
const cache = new Map();
async function cachedGenerate(prompt) {
const cacheKey = prompt.substring(0, 100);
if (cache.has(cacheKey)) {
return cache.get(cacheKey);
}
const result = await generateText(prompt);
cache.set(cacheKey, result);
return result;
}
Production Deployment Checklist
✅ Store API key in environment variables ✅ Implement rate limiting ✅ Add error handling and retries ✅ Set up monitoring and logging ✅ Configure safety settings ✅ Implement response caching ✅ Add cost alerts
Need Help with Gemini Integration?
I’m an expert Google Gemini developer with experience building production AI applications.
Get in touch for help with your Gemini project.
Related Articles
- ChatGPT vs Claude vs Gemini 2026 - Complete comparison
- How to Integrate ChatGPT - OpenAI tutorial
- RAG Pipelines Guide - Build with vector databases
- Building AI Chatbots - Production tips
- Free AI Resources - Tools, APIs, templates
Written by Umar Jamil
Senior AI Systems Engineer with 8+ years experience. I design and build production-grade AI systems powered by LLMs and agent architectures — reliable, scalable, and usable in real-world applications.
Need Help with Your AI Project?
Let's discuss how I can help you build powerful AI solutions.
Get in Touch