/** * Google Gemini API - Combined Advanced Features Example * * Demonstrates how to use all Phase 2 advanced features together: * - Context Caching (cost optimization) * - Code Execution (computational tasks) * - Grounding with Google Search (real-time information) * * Use Case: Financial analysis chatbot that: * 1. Caches financial data and analysis instructions * 2. Uses code execution for calculations and data analysis * 3. Uses grounding for current market information * * Requirements: * - @google/genai@1.27.0+ * - GEMINI_API_KEY environment variable * - Google Cloud project (for grounding) */ import { GoogleGenAI } from '@google/genai'; const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY! }); async function financialAnalysisChatbot() { console.log('=== Combined Advanced Features: Financial Analysis Chatbot ===\n'); // Step 1: Create cache with financial data and analysis instructions console.log('Step 1: Creating cache with financial data...'); const financialData = ` Company Financial Data (Q1-Q4 2024): Revenue: Q1: $2.5M Q2: $3.1M Q3: $2.9M Q4: $3.8M Expenses: Q1: $1.8M Q2: $2.2M Q3: $2.1M Q4: $2.6M Customer Acquisition: Q1: 1,200 new customers Q2: 1,500 new customers Q3: 1,350 new customers Q4: 1,800 new customers `.trim(); const cache = await ai.caches.create({ model: 'gemini-2.5-flash-001', // Explicit version required for caching config: { displayName: 'financial-analysis-cache', systemInstruction: ` You are a financial analyst chatbot. You have access to: 1. Company financial data (cached) 2. Code execution for calculations 3. Google Search for current market information Provide detailed, accurate financial analysis. `, contents: financialData, ttl: '3600s', // Cache for 1 hour }, }); console.log(`āœ“ Cache created: ${cache.name}\n`); // Step 2: Create chat with all advanced features enabled console.log('Step 2: Creating chat with code execution and grounding...\n'); const chat = await ai.chats.create({ model: cache.name, // Use cached context config: { tools: [ { codeExecution: {} }, // Enable code execution { googleSearch: {} }, // Enable grounding ], }, }); // Query 1: Analysis requiring code execution (uses cache) console.log('==========================================='); console.log('Query 1: Calculate year-over-year growth'); console.log('===========================================\n'); let response = await chat.sendMessage(` Calculate the following for 2024: 1. Total annual revenue 2. Total annual expenses 3. Net profit 4. Profit margin percentage 5. Quarter-over-quarter revenue growth rates Use code to perform these calculations. `); console.log('šŸ“Š Financial Analysis:\n'); for (const part of response.candidates[0].content.parts) { if (part.text) { console.log(part.text); } if (part.executableCode) { console.log('\nšŸ’» Calculations Code:'); console.log(part.executableCode.code); } if (part.codeExecutionResult) { console.log('\nšŸ“ˆ Results:'); console.log(part.codeExecutionResult.output); } } // Query 2: Current market information (uses grounding) console.log('\n\n==========================================='); console.log('Query 2: Compare with industry benchmarks'); console.log('===========================================\n'); response = await chat.sendMessage(` What are the current industry benchmarks for SaaS companies in terms of: 1. Profit margins 2. Customer acquisition cost trends 3. Growth rate expectations Use current market data to provide context. `); console.log('šŸ“° Market Context:\n'); console.log(response.text); if (response.candidates[0].groundingMetadata) { console.log('\nāœ“ Used current market data from:'); const sources = response.candidates[0].groundingMetadata.webPages || []; sources.slice(0, 3).forEach((source, i) => { console.log(`${i + 1}. ${source.title}`); console.log(` ${source.url}`); }); } // Query 3: Combined analysis (uses cache + code + grounding) console.log('\n\n==========================================='); console.log('Query 3: Comprehensive recommendation'); console.log('===========================================\n'); response = await chat.sendMessage(` Based on: 1. Our company's financial performance (from cached data) 2. Calculated growth metrics (using code execution) 3. Current industry trends (from search) Provide a comprehensive recommendation for Q1 2025 strategy. `); console.log('šŸ’” Strategic Recommendation:\n'); console.log(response.text); // Show which features were used console.log('\n\nšŸ“‹ Features Used in This Query:'); let featuresUsed = []; // Check for code execution const hasCode = response.candidates[0].content.parts.some( (part) => part.executableCode ); if (hasCode) featuresUsed.push('āœ“ Code Execution'); // Check for grounding if (response.candidates[0].groundingMetadata) { featuresUsed.push('āœ“ Google Search Grounding'); } // Cache is always used when we use cache.name as model featuresUsed.push('āœ“ Context Caching'); featuresUsed.forEach((feature) => console.log(feature)); // Clean up console.log('\n\nStep 3: Cleaning up...'); await ai.caches.delete({ name: cache.name }); console.log('āœ“ Cache deleted'); console.log('\n=== Financial Analysis Chatbot Complete ==='); } async function researchAssistant() { console.log('\n\n=== Combined Advanced Features: Research Assistant ===\n'); // Create cache with research paper console.log('Step 1: Caching research paper...'); const researchPaper = ` Title: Climate Change Impact on Arctic Ecosystems (2024) Abstract: This study examines the effects of climate change on Arctic ecosystems over the past decade... [Imagine full research paper content here] Key Findings: - Temperature increase of 2.3°C in Arctic regions - 15% reduction in sea ice coverage - Migration pattern changes in polar species - etc. `.trim(); const cache = await ai.caches.create({ model: 'gemini-2.5-flash-001', config: { displayName: 'research-paper-cache', systemInstruction: 'You are a research assistant. Analyze papers and provide insights.', contents: researchPaper, ttl: '1800s', // 30 minutes }, }); console.log(`āœ“ Cache created\n`); // Create chat with all tools const chat = await ai.chats.create({ model: cache.name, config: { tools: [{ codeExecution: {} }, { googleSearch: {} }], }, }); // Query combining all features console.log('Query: Comprehensive climate analysis\n'); const response = await chat.sendMessage(` 1. Calculate the average temperature change per year from the data in the paper (use code) 2. Find the latest climate predictions for the next decade (use search) 3. Synthesize findings from both sources into a summary `); console.log('Response:\n'); for (const part of response.candidates[0].content.parts) { if (part.text) console.log(part.text); if (part.executableCode) { console.log('\nCode:'); console.log(part.executableCode.code); } if (part.codeExecutionResult) { console.log('\nResults:'); console.log(part.codeExecutionResult.output); } } if (response.candidates[0].groundingMetadata) { console.log('\nSources:'); const sources = response.candidates[0].groundingMetadata.webPages || []; sources.slice(0, 2).forEach((s) => console.log(`- ${s.title}`)); } // Clean up await ai.caches.delete({ name: cache.name }); console.log('\n=== Research Assistant Complete ==='); } // Run examples async function main() { await financialAnalysisChatbot(); await researchAssistant(); console.log('\n\nāœ… All advanced features demonstrated!'); console.log('\nKey Takeaways:'); console.log('- Context Caching: Saves costs by reusing large context'); console.log('- Code Execution: Enables computational analysis'); console.log('- Grounding: Provides real-time, fact-checked information'); console.log('- Combined: Creates powerful, cost-effective AI applications'); } main().catch((error) => { console.error('Error:', error.message); process.exit(1); });