# Common Skill Utilities This directory contains shared utilities used across multiple skills. ## API Key Helper `api_key_helper.py` provides standardized configuration for all Gemini-based skills, supporting both Google AI Studio and Vertex AI endpoints. ### Usage in Skills ```python import sys from pathlib import Path # Add common directory to path common_dir = Path(__file__).parent.parent.parent / 'common' sys.path.insert(0, str(common_dir)) from api_key_helper import get_api_key_or_exit # Get API key with automatic error handling api_key = get_api_key_or_exit() ``` ### API Key Lookup Order The helper checks for `GEMINI_API_KEY` in this order: 1. **Process environment variable** (recommended for development) ```bash export GEMINI_API_KEY='your-api-key' ``` 2. **Project root `.env` file** ```bash echo 'GEMINI_API_KEY=your-api-key' > .env ``` 3. **.claude/.env file** ```bash echo 'GEMINI_API_KEY=your-api-key' > .claude/.env ``` 4. **.claude/skills/.env file** (shared across all Gemini skills) ```bash echo 'GEMINI_API_KEY=your-api-key' > .claude/skills/.env ``` 5. **Skill directory `.env` file** ```bash echo 'GEMINI_API_KEY=your-api-key' > .claude/skills/your-skill/.env ``` ### Vertex AI Support To use Vertex AI instead of Google AI Studio: ```bash # Enable Vertex AI export GEMINI_USE_VERTEX=true export VERTEX_PROJECT_ID=your-gcp-project-id export VERTEX_LOCATION=us-central1 # Optional, defaults to us-central1 ``` Or in `.env` file: ``` GEMINI_USE_VERTEX=true VERTEX_PROJECT_ID=your-gcp-project-id VERTEX_LOCATION=us-central1 ``` ### Using get_client() Helper For automatic client selection (AI Studio or Vertex AI): ```python from api_key_helper import get_client # Get appropriate client based on configuration client_info = get_client() if client_info['type'] == 'vertex': # Using Vertex AI from vertexai.generative_models import GenerativeModel model = GenerativeModel('gemini-2.5-flash') response = model.generate_content("Hello") else: # Using AI Studio client = client_info['client'] response = client.models.generate_content( model='gemini-2.5-flash', contents="Hello" ) ``` ### Using get_vertex_config() Helper For checking Vertex AI configuration: ```python from api_key_helper import get_vertex_config vertex_config = get_vertex_config() if vertex_config['use_vertex']: print(f"Using Vertex AI") print(f"Project: {vertex_config['project_id']}") print(f"Location: {vertex_config['location']}") ``` ### Error Handling If the API key is not found, the helper will: - Print a clear error message - Show all available methods to set the API key - Provide the URL to obtain an API key - Exit with status code 1 For Vertex AI, if `VERTEX_PROJECT_ID` is missing when `GEMINI_USE_VERTEX=true`, the helper will provide clear instructions. This ensures users get immediate, actionable feedback when configuration is missing.