{"id":28463821,"url":"https://github.com/alexey-tyurin/a2a-double-validation","last_synced_at":"2026-04-27T18:34:54.718Z","repository":{"id":296426756,"uuid":"984367264","full_name":"alexey-tyurin/a2a-double-validation","owner":"alexey-tyurin","description":"Multi-agent system for query processing with safety verification and critique built with Google A2A protocol, Google ADK, Llama Prompt Guard 2, Gemma 3 and Gemini 2.0 Flash.","archived":false,"fork":false,"pushed_at":"2025-06-01T17:35:46.000Z","size":145,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-30T17:47:03.345Z","etag":null,"topics":["adk","agent","agentdevelopmentkit","ai","aisecurity","gemini","gemma3","genai","google-cloud","google-cloud-run","googlecloudplatform","jailbreaking","llama","llm","vertex-ai"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexey-tyurin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-15T20:18:27.000Z","updated_at":"2025-06-28T22:20:17.000Z","dependencies_parsed_at":"2025-05-30T23:33:44.379Z","dependency_job_id":"ed0d324d-bf8d-4c47-bcc4-519a0c1c50b1","html_url":"https://github.com/alexey-tyurin/a2a-double-validation","commit_stats":null,"previous_names":["alexey-tyurin/a2a-double-validation"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alexey-tyurin/a2a-double-validation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexey-tyurin%2Fa2a-double-validation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexey-tyurin%2Fa2a-double-validation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexey-tyurin%2Fa2a-double-validation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexey-tyurin%2Fa2a-double-validation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexey-tyurin","download_url":"https://codeload.github.com/alexey-tyurin/a2a-double-validation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexey-tyurin%2Fa2a-double-validation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32349858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T17:12:42.749Z","status":"ssl_error","status_checked_at":"2026-04-27T17:12:41.658Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adk","agent","agentdevelopmentkit","ai","aisecurity","gemini","gemma3","genai","google-cloud","google-cloud-run","googlecloudplatform","jailbreaking","llama","llm","vertex-ai"],"created_at":"2025-06-07T05:01:05.726Z","updated_at":"2026-04-27T18:34:54.711Z","avatar_url":"https://github.com/alexey-tyurin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A2A Double Validation\n\nMulti-agent system for query processing with safety verification and critique \n  built with Google A2A protocol, Google ADK, Llama Prompt Guard 2, Gemma 3 and Gemini 2.0 Flash.\n\n## Architecture\n\n```mermaid\ngraph TD\n    User[User/Client] \u003c--\u003e|Query/Response| Manager[Manager Agent]\n    \n    subgraph \"A2A Protocol Communication\"\n        Manager \u003c--\u003e|Step 1: Check Query Safety| Safeguard[Safeguard Agent]\n        Manager \u003c--\u003e|Step 2: Process Query| Processor[Processor Agent]\n        Manager \u003c--\u003e|Step 3: Evaluate Response| Critic[Critic Agent]\n    end\n    \n    Safeguard --\u003e|Uses| Guard[Llama Prompt Guard 2]\n    Processor --\u003e|Uses| Gemma[Gemma 3 Model]\n    Critic --\u003e|Uses| Gemini[Gemini 2.0 Flash]\n    \n    classDef models fill:#f9f,stroke:#333,stroke-width:2px\n    classDef agents fill:#bbf,stroke:#333,stroke-width:2px\n    classDef external fill:#fff,stroke:#333,stroke-width:2px\n    \n    class Guard,Gemma,Gemini models\n    class Manager,Safeguard,Processor,Critic agents\n    class User external\n    \n    %% Flow description\n    linkStyle 0 stroke:#000,stroke-width:2px\n    linkStyle 1 stroke:#f00,stroke-width:2px\n    linkStyle 2 stroke:#0a0,stroke-width:2px\n    linkStyle 3 stroke:#00f,stroke-width:2px\n```\n\nThis system uses four agents that work together:\n\n1. **Manager Agent**: Coordinates the flow between agents\n2. **Safeguard Agent**: Checks user queries for vulnerabilities using Meta's Prompt Guard 2 model\n3. **Processor Agent**: Processes user queries using Gemma 3\n4. **Critic Agent**: Evaluates responses for completeness and validity using Gemini 2.0 Flash\n\nEach agent communicates using the Google Agent-to-Agent (A2A) Protocol for inter-agent communication, with FastAPI handling only external user-facing APIs.\n\n## Project Structure\n\nThe project is organized by agent, with each agent in its own module:\n\n- **agent_manager/**: Manager Agent implementation\n- **agent_processor/**: Processor Agent implementation\n- **agent_critic/**: Critic Agent implementation\n- **agent_safeguard/**: Safeguard Agent implementation\n- **models/**: AI model integrations (Gemini, Gemma, Guard)\n- **config/**: Configuration settings\n- **utils/**: Utility functions\n- **common/**: Common types and A2A protocol implementation\n\nEach agent folder contains:\n- **__init__.py**: Module exports\n- **__main__.py**: Entry point for running the agent individually\n- **task_manager.py**: Agent-specific task management\n- **[agent_name].py**: Agent implementation\n\n## Flow\n\n1. User sends a query to the Manager Agent\n2. Manager Agent sends user query to Safeguard Agent via A2A\n3. Safeguard Agent checks query safety with Prompt Guard 2 and returns assessment via A2A\n4. If the query is unsafe, Manager Agent rejects it\n5. If safe, Manager Agent sends query to Processor Agent via A2A\n6. Processor Agent processes query with Gemma 3 and returns result via A2A\n7. Manager Agent sends the query and response to Critic Agent via A2A\n8. Critic Agent evaluates response with Gemini 2.0 Flash and returns via A2A\n9. Manager Agent returns the processed response with evaluation to the user\n\n## Setup\n\n### Requirements\n\n- Python 3.10+\n- Google API Key for Gemini and Gemma models\n- Google Vertex AI project for Vertex AI models\n- HuggingFace API Token for Prompt Guard 2 model\n\n\u003e **Important Note about Llama Prompt Guard 2**: To use the Llama Prompt Guard 2 model, you must:\n\u003e 1. Fill out the \"LLAMA 4 COMMUNITY LICENSE AGREEMENT\" at [https://huggingface.co/meta-llama/Llama-Prompt-Guard-2-86M](https://huggingface.co/meta-llama/Llama-Prompt-Guard-2-86M)\n\u003e 2. Get your request to access this repository approved by Meta\n\u003e 3. Only after approval will you be able to download and use this model in the project\n\n### Installation\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/alexey-tyurin/a2a-double-validation.git\n   cd a2a-double-validation\n   ```\n\n2. Create and activate a fresh virtual environment:\n   ```\n   python -m venv fresh_env\n   source fresh_env/bin/activate  # On Windows: fresh_env\\Scripts\\activate\n   ```\n3. Install dependencies:\n   ```\n   pip install -r requirements.txt\n   ```\n   \n   \u003e **Note**: This project requires NumPy 1.x (not 2.x) for compatibility with PyTorch.\n   \u003e If you encounter NumPy-related errors, downgrade NumPy:\n   \u003e ```bash\n   \u003e pip install numpy==1.26.4\n   \u003e ```\n   \u003e\n   \u003e The Prompt Guard 2 model requires accelerate for efficient loading:\n   \u003e ```bash\n   \u003e pip install accelerate\n   \u003e ```\n\n4. Copy `env.sample` to `.env` and fill in your API keys and project details:\n   ```\n   cp env.sample .env\n   ```\n   Be sure to add your HuggingFace token for Prompt Guard 2 model access.\n\n\u003e **Note for Python 3.10 Users**: If you're using Python 3.10, you need to apply a compatibility patch after installation:\n\u003e ```bash\n\u003e python python310_compatibility_patch.py\n\u003e ```\n\u003e This patch updates the typing imports to work with Python 3.10. Python 3.11+ users don't need this step.\n\n## Running the System\n\n### Running All Agents\n\nYou can start all agents at once using either:\n\n```bash\npython run_all.py\n```\n\nor\n\n```bash\npython main.py\n```\n\n### Process Management\n\nThe repository includes utility scripts to help you manage running processes:\n\n```bash\n# Check if all processes are running\n./check_processes.sh\n\n# Stop all running processes\n./kill_processes.sh\n```\n\nThe `check_processes.sh` script will verify:\n- If the main Python process is running\n- If all A2A servers are listening on their expected ports\n- The count of running agent processes\n\nThe `kill_processes.sh` script will:\n- Gracefully terminate all processes related to the application\n- Force kill any processes that don't respond to graceful termination\n- Clear any processes bound to the application's ports\n\n### Running Individual Agents\n\nYou can also run agents individually, which is useful for development or debugging:\n\n```bash\n# Start the Manager Agent\npython -m agent_manager\n\n# Start the Processor Agent\npython -m agent_processor\n\n# Start the Critic Agent\npython -m agent_critic\n\n# Start the Safeguard Agent\npython -m agent_safeguard\n```\n\nThe agents will be available on the following ports:\n\n- **A2A Communication Ports**:\n  - Manager Agent: http://localhost:8001\n  - Safeguard Agent: http://localhost:8002\n  - Processor Agent: http://localhost:8003\n  - Critic Agent: http://localhost:8004\n\n- **External API Ports** (A2A port + 1000):\n  - Manager Agent API: http://localhost:9001\n  - Safeguard Agent API: http://localhost:9002\n  - Processor Agent API: http://localhost:9003\n  - Critic Agent API: http://localhost:9004\n\n## Usage\n\n### Using the Client Utility\n\nThe project includes a client utility for interacting with the system:\n\n#### Interactive Mode\n\n```bash\npython user_client.py\n```\n\nThis opens an interactive session where you can type queries and see responses.\n\n#### Single Query Mode\n\n```bash\npython user_client.py --query \"What is the capital of France?\"\n```\n\n#### Check System Status\n\n```bash\npython user_client.py --status\n```\n\n### Running Test Scenarios\n\nThe project includes a test script for evaluating the system's performance with both benign queries and prompt injection attacks:\n\n```bash\npython test_a2a_scenarios.py\n```\n\nThis will run 10 benign test queries and 10 prompt injection tests, and provide a summary of the results.\n\n#### Test Options\n\n```bash\n# Save test results to a JSON file\npython test_a2a_scenarios.py --output results.json\n\n# Test against a different host or port\npython test_a2a_scenarios.py --host your-host.com --port 9001\n```\n\nThe test script will:\n- Process 20 predefined test queries (10 benign, 10 prompt injections)\n- Parse each response into its components (answer, evaluation, explanation)\n- Track which injection attempts were blocked by the system\n- Provide a summary of test results\n- Optionally save detailed results to a JSON file\n\n### Using API Directly\n\nSend a query to the Manager Agent's API endpoint:\n\n```bash\ncurl -X POST http://localhost:9001/api/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"What is the capital of France?\"}'\n```\n\nThe response will include both the answer and an evaluation of the response quality.\n\n## Cloud Deployment\n\nThe A2A Double Validation system can be deployed to **Google Cloud Platform (Vertex AI)** for scalable, serverless operation using Cloud Run and Vertex AI services.\n\n### Prerequisites\n\n- Google Cloud Platform account with billing enabled\n- Access to Google Vertex AI services\n- gcloud CLI installed and configured\n- Docker installed locally (for local development) or access to Cloud Shell\n\n### Google Cloud Setup\n\n#### 1. Setup Cloud Project in Cloud Shell Terminal\n\n1. **Access Google Cloud Console**: Go to [https://console.cloud.google.com](https://console.cloud.google.com)\n\n2. **Open Cloud Shell**: Click the Cloud Shell icon (terminal icon) in the top right corner of the Google Cloud Console\n\n3. **Authenticate with Google Cloud**:\n   ```bash\n   # Authenticate with your Google Cloud account\n   gcloud auth login\n   \n   # Verify authentication\n   gcloud auth list\n   ```\n\n4. **Create or select a project**:\n   ```bash\n   # Create a new project (replace PROJECT_ID with your desired project ID)\n   gcloud projects create PROJECT_ID --name=\"A2A Double Validation\"\n   \n   # Or list existing projects\n   gcloud projects list\n   \n   # Set the active project\n   gcloud config set project PROJECT_ID\n   ```\n\n5. **Enable required APIs**:\n   ```bash\n   # Enable necessary Google Cloud APIs\n   gcloud services enable run.googleapis.com\n   gcloud services enable cloudbuild.googleapis.com\n   gcloud services enable containerregistry.googleapis.com\n   gcloud services enable secretmanager.googleapis.com\n   gcloud services enable aiplatform.googleapis.com\n   gcloud services enable compute.googleapis.com\n   gcloud services enable logging.googleapis.com\n   gcloud services enable cloudresourcemanager.googleapis.com\n   ```\n\n#### 2. Setup Vertex AI Permissions\n\nGrant your account the necessary permissions for Vertex AI and related services:\n\n```bash\n# Get your current account email\nACCOUNT_EMAIL=$(gcloud config get-value account)\n\n# Grant Vertex AI permissions\ngcloud projects add-iam-policy-binding PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/aiplatform.user\"\n\ngcloud projects add-iam-policy-binding PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/aiplatform.serviceAgent\"\n\n# Grant Cloud Run permissions\ngcloud projects add-iam-policy-binding PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/run.admin\"\n\n# Grant Secret Manager permissions\ngcloud projects add-iam-policy-binding PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/secretmanager.admin\"\n\n# Grant Compute Engine permissions (for VM creation)\ngcloud projects add-iam-policy-binding PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/compute.admin\"\n\n# Grant necessary service account permissions\ngcloud projects add-iam-policy-binding PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/iam.serviceAccountAdmin\"\n```\n\n#### 3. Create and Setup VM Instance\n\nCloud Shell will not work for this project as Cloud Shell is limited to 5GB of disk space.\nThis project needs more than 30GB of disk space to build docker images, get all dependencies and \n  download Llama Prompt Guard 2 model locally. So you need to use a dedicated VM instead of Cloud Shell.\n\n```bash\n# Create Ubuntu VM with necessary permissions and scopes\ngcloud compute instances create \"py310-vm\" \\\n    --machine-type=\"e2-standard-2\" \\\n    --image-family=\"ubuntu-2204-lts\" \\\n    --image-project=\"ubuntu-os-cloud\" \\\n    --boot-disk-size=\"50GB\" \\\n    --zone=\"us-central1-a\" \\\n    --scopes=\"https://www.googleapis.com/auth/cloud-platform\" \\\n    --service-account=\"$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')-compute@developer.gserviceaccount.com\" \\\n    --tags=\"a2a-vm\"\n\n# Create firewall rule for the VM (if needed for external access)\ngcloud compute firewall-rules create allow-a2a-vm \\\n    --allow tcp:22,tcp:8001-8005,tcp:9001-9005 \\\n    --source-ranges 0.0.0.0/0 \\\n    --target-tags a2a-vm \\\n    --description \"Allow SSH and A2A ports for A2A Double Validation VM\"\n```\n\n#### 4. Connect to VM\n\n```bash\n# Connect to the VM via SSH\ngcloud compute ssh py310-vm --zone=us-central1-a\n```\n\n#### 5. Clone Repository\n\n```bash\n# Clone the A2A Double Validation repository\ngit clone https://github.com/alexey-tyurin/a2a-double-validation.git\ncd a2a-double-validation\n```\n\n### Deployment Steps\n\n1. Copy `env.sample` to `.env` and fill in your API keys and project details:\n   ```bash\n   cp env.sample .env\n   ```\n   Be sure to add your HuggingFace token for Prompt Guard 2 model access.\n\n2. Authenticate with Google Cloud:\n   ```bash\n   gcloud auth login\n   ```\n   This ensures you have the necessary permissions to create secrets and grant access to service accounts.\n\n3. Set up Google Cloud Secret Manager for sensitive credentials:\n   ```bash\n   ./setup_secrets.sh --project your-gcp-project-id\n   ```\n   \n   This script will:\n   - Read `GOOGLE_API_KEY` and `HUGGINGFACE_TOKEN` from your `.env` file\n   - Create secrets in Google Cloud Secret Manager\n   - Grant access permissions to the default compute service account\n   - Enable the Secret Manager API if needed\n\n4. Run setup script:\n   ```bash\n   ./setup_cloud.sh\n   ```\n   \n   This script will:\n   - Install Python 3.10+ if not already installed\n   - Install Docker and Docker Compose if not already installed\n   - Install Google Cloud CLI if not already installed\n   - Create a Python virtual environment\n   - Install all dependencies from requirements.txt\n   - Apply Python 3.10 compatibility patch if needed\n   - Start the application\n   - Download Llama Prompt Guard 2 model in local cache, so it can be used in creating Docker image for safeguard\n   \n   \u003e **Note**: After Docker installation, you may need to log out and back in for group permissions to take effect. If you plan to use Cloud Run deployment, run `gcloud auth login` after the script completes.\n\n   **Docker Permissions Fix**: If you encounter a Docker permissions error like \"permission denied while trying to connect to the Docker daemon socket\", run:\n   ```bash\n   ./fix_docker_permissions.sh\n   ```\n   Then either log out/in, use `newgrp docker`, or try the deployment again.\n\n5. Run script to check if all processes are running\n   ```bash\n   ./check_processes.sh\n   ```\n\n6. Optionally - run client:\n```bash\npython user_client.py\n```\n\n7. Stop all running processes\n```bash\n./kill_processes.sh\n```\n\n8. Deploy all agents to Cloud Run:\n   ```bash\n   ./deploy_to_cloud_run.sh --project your-gcp-project-id\n   ```\n   \n   This script will:\n   - Read non-sensitive environment variables from your `.env` file (`VERTEX_AI_PROJECT`, `VERTEX_AI_LOCATION`)\n   - Validate that all required variables are set\n   - Check that required secrets exist in Secret Manager\n   - Build Docker images for each agent\n   - For safeguard Docker image it uses Llama Prompt Guard 2 model downloaded to local cache in previous step.\n     This way safeguard instance will not download Llama Prompt Guard 2 model, and instead use it from its image.\n     This will improve latency.\n   - Push them to Google Container Registry\n   - Deploy them as Cloud Run services with:\n     - Environment variables set via `--set-env-vars` (non-sensitive data)\n     - Secrets mounted via `--set-secrets` (sensitive credentials)\n   - Generate a `cloud_config.py` file with service URLs\n   \n   \u003e **Security Note**: Sensitive credentials (`GOOGLE_API_KEY`, `HUGGINGFACE_TOKEN`) are stored securely in Google Cloud Secret Manager and mounted as environment variables at runtime. They are never embedded in container images or visible in deployment configurations.\n\n### Cloud Service Management\n\nOnce your services are deployed, you can use the included management scripts to monitor and control them:\n\n#### Check Cloud Services Status\n\n```bash\n# Check status of all A2A Cloud Run services\n./check_cloud_status.sh --project your-gcp-project-id\n\n# Check services in a different region\n./check_cloud_status.sh --project your-gcp-project-id --region us-central1\n```\n\nThe status check script will:\n- List all A2A Cloud Run services and their status\n- Show detailed information for each service (URL, status, latest revision)\n- Test endpoint connectivity for each service\n- Provide a summary of service URLs for easy access\n- Give helpful tips for troubleshooting\n\n#### Stop/Delete Cloud Services\n\n```bash\n# Delete all A2A Cloud Run services (with confirmation)\n./kill_cloud_services.sh --project your-gcp-project-id\n\n# Force deletion without confirmation prompt\n./kill_cloud_services.sh --project your-gcp-project-id --force\n\n# Delete services in a different region\n./kill_cloud_services.sh --project your-gcp-project-id --region us-central1\n```\n\nThe deletion script will:\n- Check which A2A services exist before deletion\n- Show a summary of services to be deleted\n- Prompt for confirmation (unless `--force` is used)\n- Delete all A2A Cloud Run services\n- Clean up temporary deployment files (`url_*.txt`, `cloud_config.py`)\n- Provide a summary of the deletion operation\n\n\u003e **Note**: Deleting Cloud Run services is permanent and cannot be undone. The services will need to be redeployed using the deployment script.\n\n### Cloud Client\n\nOnce deployed, you can interact with the cloud-deployed system using the cloud client:\n\n```bash\npython user_client_cloud.py\n```\n\nThe cloud client works similarly to the local client but connects to the Cloud Run endpoints automatically.\n\n### Cloud Testing\n\nYou can also run test scenarios against the cloud deployment:\n\n```bash\npython test_a2a_scenarios_cloud.py\n```\n\nThis will run the same test scenarios as the local test script but against the cloud deployment.\n\n## Cleanup Google Cloud Resources\n\nWhen you're done with the project, you can clean up all created resources to avoid ongoing charges:\n\n### 1. Delete Cloud Run Services\n\n```bash\n# Delete all A2A Cloud Run services\n./kill_cloud_services.sh --project your-gcp-project-id --force\n```\n\n### 2. Delete VM Instance\n\n```bash\n# Delete the VM instance\ngcloud compute instances delete py310-vm --zone=us-central1-a --quiet\n\n# Delete the firewall rule\ngcloud compute firewall-rules delete allow-a2a-vm --quiet\n```\n\n### 3. Delete Secrets from Secret Manager\n\n```bash\n# Delete secrets\ngcloud secrets delete google-api-key --quiet\ngcloud secrets delete huggingface-token --quiet\n```\n\n### 4. Clean up Container Images\n\n```bash\n# List and delete container images from Container Registry\ngcloud container images list --repository=gcr.io/your-gcp-project-id\n\n# Delete specific images (replace with actual image names)\ngcloud container images delete gcr.io/your-gcp-project-id/a2a-manager-agent --force-delete-tags --quiet\ngcloud container images delete gcr.io/your-gcp-project-id/a2a-safeguard-agent --force-delete-tags --quiet\ngcloud container images delete gcr.io/your-gcp-project-id/a2a-processor-agent --force-delete-tags --quiet\ngcloud container images delete gcr.io/your-gcp-project-id/a2a-critic-agent --force-delete-tags --quiet\n```\n\n### 5. Remove IAM Policy Bindings (Optional)\n\n```bash\n# Get your account email\nACCOUNT_EMAIL=$(gcloud config get-value account)\nPROJECT_ID=$(gcloud config get-value project)\n\n# Remove Vertex AI permissions\ngcloud projects remove-iam-policy-binding $PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/aiplatform.user\"\n\ngcloud projects remove-iam-policy-binding $PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/aiplatform.serviceAgent\"\n\n# Remove other permissions (only if you don't need them for other projects)\ngcloud projects remove-iam-policy-binding $PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/run.admin\"\n\ngcloud projects remove-iam-policy-binding $PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/secretmanager.admin\"\n\ngcloud projects remove-iam-policy-binding $PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/compute.admin\"\n\ngcloud projects remove-iam-policy-binding $PROJECT_ID \\\n    --member=\"user:$ACCOUNT_EMAIL\" \\\n    --role=\"roles/iam.serviceAccountAdmin\"\n```\n\n### 6. Delete the Entire Project (Nuclear Option)\n\nIf you created a dedicated project for this A2A system and want to remove everything:\n\n```bash\n# ⚠️ WARNING: This will delete the ENTIRE project and ALL resources in it\n# Make sure this project only contains A2A resources\ngcloud projects delete your-gcp-project-id\n```\n\n\u003e **Important**: Deleting the project will remove ALL resources, billing data, and access permissions. This action cannot be undone.\n\n### 7. Verify Cleanup\n\nCheck that all resources have been removed:\n\n```bash\n# Check Cloud Run services\ngcloud run services list --region=us-central1\n\n# Check VM instances\ngcloud compute instances list\n\n# Check secrets\ngcloud secrets list\n\n# Check container images\ngcloud container images list --repository=gcr.io/your-gcp-project-id\n```\n\n## 🙏 Acknowledgements\n\nThis project relies on several advanced AI and communication technologies:\n\n- **Google Agent-to-Agent (A2A) Protocol**: For standardized inter-agent communication\n- **Google Agent Development Kit (ADK)**: For agent infrastructure components\n- **Meta's Llama Prompt Guard 2**: For safe query validation and prompt injection protection\n- **Google Gemma 3**: For efficient user query processing\n- **Google Gemini 2.0 Flash**: For rapid response evaluation and criticism\n\nThanks to all the teams developing these cutting-edge technologies that make advanced multi-agent systems possible.\n\n## Contact Information\n\nFor any questions or feedback, please contact Alexey Tyurin at altyurin3@gmail.com.\n\n## License\n\nThis project uses MIT license: [License](LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexey-tyurin%2Fa2a-double-validation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexey-tyurin%2Fa2a-double-validation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexey-tyurin%2Fa2a-double-validation/lists"}