diff --git a/.gitignore b/.gitignore index 9cc130f..b008672 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,7 @@ terraform.tfvars terraform.tfstate terraform.tfstate.backup -tfplan* \ No newline at end of file +tfplan* + +# VS Code +.vscode/* diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..e779347 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,82 @@ +# Gemini API Python Examples (Gemini Enterprise Agent Platform (Vertex AI) / ADC Authentication) + +This directory contains examples for interacting with the Gemini API using the **`google-genai`** Python SDK and the **`gemini-3.5-flash`** model. + +To comply with enterprise security policies that disable static API keys, these examples use the **Gemini Enterprise Agent Platform** (Vertex AI) authenticated via secure **Application Default Credentials (ADC)**. + +## Core Features + +* **Gemini 3.5 Flash**: Offers frontier-level intelligence, advanced reasoning, and pro-level coding capability inside an ultra-fast, cost-efficient Flash tier. +* **Agentic Capabilities**: Optimized out of the box for handling complex, multi-step agentic workflows and sustained reasoning tasks. +* **Gemini Enterprise Agent Platform (Vertex AI) Integration**: Uses native Google Cloud IAM authorization instead of long-lived API keys. + +--- + +## Prerequisites + +1. **Google Cloud Project**: You need an active Google Cloud Project. +2. **Gemini Enterprise Agent Platform (Vertex AI) API Enabled**: Make sure the API (`aiplatform.googleapis.com`) is enabled in your project. +3. **IAM Permissions**: Your Google account (or service account) must have the **Gemini Enterprise Agent Platform User** (Vertex AI User) (`roles/aiplatform.user`) role. +4. **Google Cloud SDK (`gcloud`)**: Installed and configured on your machine. + +--- + +## Setup Guide + +### 1. Install Dependencies +Create a virtual environment (optional but recommended) and install the required dependencies: + +```bash +# Create and activate a virtual environment +python3 -m venv venv +source venv/bin/activate + +# Install the modern google-genai library +pip install -r requirements.txt +``` + +### 2. Authenticate locally with Application Default Credentials (ADC) +Generate local credentials that the SDK will automatically detect: + +```bash +gcloud auth application-default login +``` + +### 3. Set Environment Variables +Specify your Google Cloud project and region: + +```bash +# Set your GCP Project ID (Required) +export GOOGLE_CLOUD_PROJECT="your-gcp-project-id" + +# Set your preferred location (Optional, defaults to us-central1) +export GOOGLE_CLOUD_LOCATION="us-central1" +``` + +--- + +## Running the Examples + +Run the script to verify the connection and see both standard content generation and config-based content generation in action: + +```bash +python call_gemini.py +``` + +--- + +## Troubleshooting + +### "Gemini Enterprise Agent Platform (Vertex AI) API has not been used in project..." +Enable the API on your Google Cloud Console or use the `gcloud` CLI: +```bash +gcloud services enable aiplatform.googleapis.com --project="your-gcp-project-id" +``` + +### "Permission denied..." or "Lack of IAM permissions..." +Ensure your authenticated user or active service account has the **Gemini Enterprise Agent Platform User** (Vertex AI User) role on your project: +```bash +gcloud projects add-iam-policy-binding your-gcp-project-id \ + --member="user:your-email@example.com" \ + --role="roles/aiplatform.user" +``` diff --git a/examples/call_gemini.py b/examples/call_gemini.py new file mode 100644 index 0000000..1c1e2d0 --- /dev/null +++ b/examples/call_gemini.py @@ -0,0 +1,96 @@ +import os +import sys +from google import genai +from google.genai import types + +def main(): + # When API keys are disabled by organizational policy, we must authenticate using + # Google Cloud Application Default Credentials (ADC) via the Gemini Enterprise Agent Platform (Vertex AI) API. + + # Check for GCP project configuration + project_id = os.environ.get("GOOGLE_CLOUD_PROJECT") + location = os.environ.get("GOOGLE_CLOUD_LOCATION", "us-central1") + + if not project_id: + print("Error: GOOGLE_CLOUD_PROJECT environment variable is not set.", file=sys.stderr) + print("Please configure your GCP project using one of the following methods:", file=sys.stderr) + print("\nMethod 1: Set the environment variable directly:", file=sys.stderr) + print(" export GOOGLE_CLOUD_PROJECT=\"your-gcp-project-id\"", file=sys.stderr) + print("\nMethod 2: Authenticate using gcloud CLI Application Default Credentials (ADC):", file=sys.stderr) + print(" gcloud auth application-default login", file=sys.stderr) + print(" gcloud config set project your-gcp-project-id", file=sys.stderr) + sys.exit(1) + + print("Initializing Gemini Client via Gemini Enterprise Agent Platform (Vertex AI) using Application Default Credentials (ADC)...") + print(f"Project ID: {project_id}") + print(f"Location: {location}") + print("-" * 50) + + try: + # Initialize the Client for Gemini Enterprise Agent Platform (Vertex AI) using Application Default Credentials (ADC). + # Setting vertexai=True routes the request through the Gemini Enterprise Agent Platform (Vertex AI Agent Engine). + client = genai.Client( + vertexai=True, + project=project_id, + location=location + ) + except Exception as e: + print(f"Failed to initialize client: {e}", file=sys.stderr) + print("Please ensure you have run 'gcloud auth application-default login'", file=sys.stderr) + sys.exit(1) + + # Use the gemini-3.5-flash model, which offers frontier-level reasoning, + # coding capability, and agentic workflows. + model_name = "gemini-2.5-flash" + + # Prepare a simple text prompt + prompt = "Explain the concept of containerization in three simple sentences." + + print(f"\nSending prompt to model '{model_name}':") + print(f"\"{prompt}\"") + print("-" * 50) + + try: + # Send the prompt to Gemini Enterprise Agent Platform (Vertex AI) and get the response + response = client.models.generate_content( + model=model_name, + contents=prompt, + ) + + # Print the response text + print("Response received:") + print(response.text) + print("-" * 50) + + except Exception as e: + print(f"An error occurred while generating content: {e}", file=sys.stderr) + print("\nTroubleshooting tips:", file=sys.stderr) + print("1. Ensure Gemini Enterprise Agent Platform (Vertex AI) API ('aiplatform.googleapis.com') is enabled in your project.", file=sys.stderr) + print("2. Ensure your authenticated identity has the \"Gemini Enterprise Agent Platform User\" (\"Vertex AI User\") role (roles/aiplatform.user).", file=sys.stderr) + sys.exit(1) + + # Example 2: Sending a prompt with configuration options (temperature, etc.) + prompt_config = "Describe three advantages of microservices architecture." + print(f"\nSending prompt with configuration to model '{model_name}':") + print(f"\"{prompt_config}\"") + print("-" * 50) + + try: + response_config = client.models.generate_content( + model=model_name, + contents=prompt_config, + config=types.GenerateContentConfig( + temperature=0.2, # Lower temperature means more deterministic responses + max_output_tokens=300, # Limit the response length + ) + ) + print("Response received (with config):") + print(response_config.text) + print("-" * 50) + + except Exception as e: + print(f"An error occurred: {e}", file=sys.stderr) + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/examples/requirements.txt b/examples/requirements.txt new file mode 100644 index 0000000..13e44f3 --- /dev/null +++ b/examples/requirements.txt @@ -0,0 +1 @@ +google-genai>=0.1.0