{"id":39882258,"url":"https://github.com/scrrlt/vertex-batch-embeddings-api","last_synced_at":"2026-01-18T14:32:12.410Z","repository":{"id":332680000,"uuid":"1092722315","full_name":"scrrlt/vertex-batch-embeddings-api","owner":"scrrlt","description":"REST API for managing large-scale text embedding jobs on Google Cloud Vertex AI. Provides support for batch processing, authentication, rate limiting, and integration with Google Cloud Storage for reproducible and scalable workflows.","archived":false,"fork":false,"pushed_at":"2026-01-15T00:58:13.000Z","size":357,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-15T07:38:39.428Z","etag":null,"topics":["batch-processing","cloud-run-function","embeddings-and-vector-databases","error-handling","flask-rest-api","google-cloud-platform","jsonl-input-output","rate-limiting","text-processing","vertex-ai","webhook-callbacks","workflow-tool","wrapper-api"],"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/scrrlt.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-09T07:03:37.000Z","updated_at":"2026-01-15T04:40:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/scrrlt/vertex-batch-embeddings-api","commit_stats":null,"previous_names":["scrrlt/vertex-batch-embeddings-api"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/scrrlt/vertex-batch-embeddings-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrrlt%2Fvertex-batch-embeddings-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrrlt%2Fvertex-batch-embeddings-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrrlt%2Fvertex-batch-embeddings-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrrlt%2Fvertex-batch-embeddings-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scrrlt","download_url":"https://codeload.github.com/scrrlt/vertex-batch-embeddings-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scrrlt%2Fvertex-batch-embeddings-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28537637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T13:04:05.990Z","status":"ssl_error","status_checked_at":"2026-01-18T13:01:44.092Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["batch-processing","cloud-run-function","embeddings-and-vector-databases","error-handling","flask-rest-api","google-cloud-platform","jsonl-input-output","rate-limiting","text-processing","vertex-ai","webhook-callbacks","workflow-tool","wrapper-api"],"created_at":"2026-01-18T14:32:11.398Z","updated_at":"2026-01-18T14:32:12.387Z","avatar_url":"https://github.com/scrrlt.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vertex AI Batch Embeddings API\n\n[![CI/CD](https://github.com/scrrlt/vertex-batch-embeddings-api/actions/workflows/ci.yml/badge.svg)](https://github.com/scrrlt/vertex-batch-embeddings-api/actions/workflows/ci.yml)\n[![Lint](https://github.com/scrrlt/vertex-batch-embeddings-api/actions/workflows/lint.yml/badge.svg)](https://github.com/scrrlt/vertex-batch-embeddings-api/actions/workflows/lint.yml)\n[![Tests](https://github.com/scrrlt/vertex-batch-embeddings-api/actions/workflows/tests.yml/badge.svg)](https://github.com/scrrlt/vertex-batch-embeddings-api/actions/workflows/tests.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)\n\nA REST API service for managing batch text embedding workflows on Google Cloud Vertex AI. It stages input payloads in Cloud Storage, initiates Vertex AI batch prediction jobs, and returns structured job metadata.\n\n## Capabilities\n\n- Production deployment support (Docker, Cloud Run, health checks)\n- API key authentication with configurable rate limiting\n- Real-time job metadata and status retrieval\n- Input validation with clear error responses\n- Cloud Storage integration for input staging and output retrieval\n- Performance optimizations: Gzip compression for faster uploads\n\n\n## Prerequisites\n\nBefore using this API, ensure you have:\n\n### 1. Google Cloud Project Setup\n- A GCP project with billing enabled\n- The Vertex AI API enabled: `gcloud services enable aiplatform.googleapis.com`\n- The Cloud Storage API enabled: `gcloud services enable storage-api.googleapis.com`\n\n### 2. Cloud Storage Buckets\nCreate two GCS buckets for input and output:\n```bash\ngsutil mb gs://your-project-embed-input\ngsutil mb gs://your-project-embed-output\n```\n\n### 3. Local GCP Authentication\nAuthenticate with GCP locally:\n```bash\ngcloud auth application-default login\n```\n\nThis creates credentials that the API will use to access GCP services.\n\n### 4. Python Environment\n- Python 3.9 or later\n- pip or conda for package management\n\n## Quick Start\n\n### For Users (Production)\n\n```bash\n# Install from PyPI\npip install vertex-embeddings\n\n# Or clone and install locally\ngit clone https://github.com/scrrlt/vertex-batch-embeddings-api.git\ncd vertex-batch-embeddings\npip install -r requirements.txt\npip install -e .\n\n# Set environment variables\nexport GOOGLE_CLOUD_PROJECT=your-project-id\nexport GCS_EMBED_INPUT_BUCKET=your-input-bucket\nexport GCS_EMBED_OUTPUT_BUCKET=your-output-bucket\nexport API_KEY_SECRET=your-api-key\n\n# Run locally\nvertex-cli run\n\n# Or directly\npython -m vertex_batch_embeddings_api.api\n```\n\n### For Developers\n\n```bash\n# Clone repository\ngit clone https://github.com/scrrlt/vertex-batch-embeddings-api.git\ncd vertex-batch-embeddings\n\n# Simple setup (Windows)\n.\\setup.ps1\n\n# Or manual setup\npython -m venv .venv\nsource .venv/bin/activate  # On Windows: .venv\\Scripts\\activate\npip install -r requirements.txt\npip install -e .\n\n# Run tests to verify\nmake test\n\n# Run linters\nmake lint\n\n# Start development\nmake run\n```\n\n**Individual Tool Installation (if needed):**\n```bash\npip install mypy      # Type checking\npip install black     # Code formatting\npip install isort     # Import sorting\npip install flake8    # Linting\npip install pytest    # Testing\npip install bandit    # Security scanning\n```\n\n\n## API Usage\n\n### Submit Batch Job\n\n```bash\ncurl -X POST http://localhost:8080/v1/embeddings/batch \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: your-api-key\" \\\n  -d '{\n    \"texts\": [\"Hello world\", \"How are you?\"],\n    \"job_name\": \"my-embeddings-job\",\n    \"webhook_url\": \"https://your-app.com/webhook\"\n  }'\n```\n\nResponse:\n```json\n{\n  \"job_name\": \"my-embeddings-job\",\n  \"resource_name\": \"projects/.../locations/.../batchPredictionJobs/...\",\n  \"input_uri\": \"gs://bucket/embeddings/inputs/instances_20231109.jsonl\",\n  \"output_uri\": \"gs://bucket/embeddings/outputs/my-embeddings-job/\",\n  \"status\": \"submitted\",\n  \"text_count\": 2\n}\n```\n\n### Check Job Status\n\n```bash\ncurl http://localhost:8080/v1/embeddings/batch/my-embeddings-job/status \\\n  -H \"X-API-Key: your-api-key\"\n```\n\n### Retrieve and Parse Embeddings Output\n\nOnce your job completes, retrieve the embeddings from Cloud Storage:\n\n```python\nfrom google.cloud import storage\nimport json\n\ndef download_embeddings(project_id: str, bucket: str, job_name: str):\n    \"\"\"Download and parse embeddings from GCS.\"\"\"\n    client = storage.Client(project=project_id)\n    bucket_obj = client.bucket(bucket)\n\n    # List all prediction files for this job\n    prefix = f\"embeddings/outputs/{job_name}/\"\n    blobs = bucket_obj.list_blobs(prefix=prefix)\n\n    embeddings = []\n    for blob in blobs:\n        if blob.name.endswith(\".jsonl\"):\n            # Download and parse JSONL file\n            content = blob.download_as_text()\n            for line in content.strip().split('\\n'):\n                if line:\n                    prediction = json.loads(line)\n                    embeddings.append(prediction)\n\n    return embeddings\n\n# Usage\nembeddings = download_embeddings(\n    project_id=\"your-project\",\n    bucket=\"your-output-bucket\",\n    job_name=\"my-embeddings-job\"\n)\n\n# Each embedding is a dict with:\n# {\n#   \"predictions\": [[0.123, 0.456, ...]]  # 768-dimensional vector\n# }\nprint(f\"Retrieved {len(embeddings)} embeddings\")\n```\n\n## Webhook Notifications\n\nThe API supports webhook notifications for job completion. When you submit a batch job with a `webhook_url`, you'll receive a POST request when the job finishes (success or failure).\n\n### Webhook Payload\n\n```json\n{\n  \"event\": \"batch_embedding_job_completed\",\n  \"job\": {\n    \"job_name\": \"my-embeddings-job\",\n    \"status\": \"JOB_STATE_SUCCEEDED\",\n    \"resource_name\": \"projects/.../locations/.../batchPredictionJobs/...\",\n    \"create_time\": \"2024-01-15T10:30:00Z\",\n    \"start_time\": \"2024-01-15T10:31:00Z\",\n    \"end_time\": \"2024-01-15T10:45:00Z\",\n    \"output_uri\": \"gs://bucket/embeddings/outputs/my-embeddings-job/\",\n    \"error_message\": null\n  },\n  \"timestamp\": \"2024-01-15T10:45:05Z\"\n}\n```\n\n### Webhook Security\n\n- Webhooks are sent as HTTP POST requests with `Content-Type: application/json`\n- Implement authentication on your webhook endpoint to verify requests\n- The API does not retry failed webhook deliveries (implement your own retry logic if needed)\n\n### Usage Example\n\n```bash\ncurl -X POST http://localhost:8080/v1/embeddings/batch \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: your-api-key\" \\\n  -d '{\n    \"texts\": [\"Hello world\", \"How are you?\"],\n    \"job_name\": \"my-embeddings-job\",\n    \"webhook_url\": \"https://your-app.com/webhook/endpoint\"\n  }'\n```\n\n## Performance Tips\n\n**For Large Datasets:**\n- Use compression: `{\"compress_upload\": true}`\n- Split into smaller batches (100-500 texts each)\n- Use webhooks for async processing\n\n**For Speed:**\n- Choose appropriate model (text-embedding-004 is fastest)\n- Use regional buckets close to your Vertex AI region\n- Monitor with `/metrics` endpoint\n\n**For Cost Optimization:**\n- Enable compression to reduce storage costs\n- Use batch sizes that match your processing needs\n- Monitor usage via Cloud Logging\n\n## Performance Optimizations\n\nThe API includes several optimizations to reduce processing time and costs for large datasets:\n\n### Compression\n\nEnable gzip compression for faster uploads to Cloud Storage:\n\n```bash\ncurl -X POST http://localhost:8080/v1/embeddings/batch \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: your-api-key\" \\\n  -d '{\n    \"texts\": [\"text1\", \"text2\", \"text3\"],\n    \"compress_upload\": true\n  }'\n```\n\n**Benefits:**\n- 60-80% reduction in upload time for large text datasets\n- Lower Cloud Storage costs\n- Faster job startup times\n\n## Document Processing Workflow\n\n### Text Chunking Strategies\n\nFor optimal embedding quality, split documents into appropriately-sized chunks. Recommended parameters:\n- **Chunk size**: 500–1000 characters\n- **Overlap**: 100–200 characters (prevents context loss at boundaries)\n- **Separators**: Prioritize semantic boundaries (paragraphs, sentences, words)\n\nPopular libraries for text chunking include LangChain, LlamaIndex, or NLTK. See the `examples/` directory for implementation details.\n\n### Batch Submission\n\nSubmit document chunks for embedding:\n\n```bash\ncurl -X POST http://localhost:8080/v1/embeddings/batch \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: your-api-key\" \\\n  -d '{\n    \"texts\": [\"chunk1\", \"chunk2\", \"chunk3\"],\n    \"job_name\": \"document-embeddings-batch-1\"\n  }'\n```\n\n### Embedding Retrieval\n\nOnce the batch job completes, retrieve embeddings from Cloud Storage:\n\n```python\nfrom google.cloud import storage\nimport json\n\ndef retrieve_embeddings(project_id: str, bucket: str, job_name: str):\n    \"\"\"Retrieve embeddings from GCS output.\"\"\"\n    client = storage.Client(project=project_id)\n    bucket_obj = client.bucket(bucket)\n    prefix = f\"embeddings/outputs/{job_name}/\"\n\n    embeddings = []\n    for blob in bucket_obj.list_blobs(prefix=prefix):\n        if blob.name.endswith(\".jsonl\"):\n            content = blob.download_as_text()\n            for line in content.strip().split('\\n'):\n                if line:\n                    embeddings.append(json.loads(line))\n    return embeddings\n```\n\n**Output format:** Each embedding is a 768-dimensional vector stored as `{\"predictions\": [[vector]]}`\n\n\n## Security Best Practices\n\n### Endpoint Protection\nSecure your Cloud Run endpoint using IAM:\n\n```bash\n# Require authentication for the endpoint\ngcloud run services update vertex-embeddings \\\n  --no-allow-unauthenticated \\\n  --region us-central1\n\n# Grant access to specific service accounts\ngcloud run services add-iam-policy-binding vertex-embeddings \\\n  --member=serviceAccount:your-service-account@your-project.iam.gserviceaccount.com \\\n  --role=roles/run.invoker \\\n  --region us-central1\n```\n\n### API Key Management\n- Store API keys in GCP Secret Manager, not in code\n- Rotate keys regularly (recommended: every 90 days)\n- Use separate keys for different environments (dev, staging, prod)\n- Monitor API key usage via Cloud Logging\n\n```bash\n# Create a secret in Secret Manager\necho -n \"your-api-key\" | gcloud secrets create vertex-api-key --data-file=-\n\n# Reference in Cloud Run\ngcloud run deploy vertex-embeddings \\\n  --set-env-vars API_KEY_SECRET=$(gcloud secrets versions access latest --secret=vertex-api-key)\n```\n\n### VPC Service Controls\nFor enhanced security, use VPC Service Controls to restrict data exfiltration:\n- Create a VPC perimeter around your GCP resources\n- Restrict API access to authorized networks only\n- Monitor and audit all API calls\n\n### Data Privacy\n- Embeddings are stored in your GCS buckets (not shared with Google)\n- Use GCS encryption at rest (default: Google-managed keys)\n- Consider customer-managed encryption keys (CMEK) for sensitive data\n- Enable audit logging for all GCS access\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `GOOGLE_CLOUD_PROJECT` | Yes | - | GCP project ID |\n| `LOCATION` | No | `us-central1` | GCP region |\n| `EMBEDDING_MODEL` | No | `text-embedding-004` | Vertex AI model |\n| `GCS_EMBED_INPUT_BUCKET` | Yes | - | Input bucket for text data |\n| `GCS_EMBED_OUTPUT_BUCKET` | Yes | - | Output bucket for embeddings |\n| `API_KEY_SECRET` | Yes | - | API keys accepted by the service (comma-separated) |\n| `RATE_LIMIT_REQUESTS` | No | `100` | Requests per hour per API key |\n| `RATE_LIMIT_WINDOW` | No | `3600` | Rate limit window in seconds |\n| `REDIS_URL` | No | - | Redis URL for distributed rate limiting (optional) |\n| `MAX_TEXTS_PER_REQUEST` | No | `1000` | Maximum texts per request |\n| `MAX_TEXT_LENGTH` | No | `10000` | Maximum characters per text |\n| `ALLOWED_MODELS` | No | `text-embedding-004,text-embedding-preview-0815,text-multilingual-embedding-002` | Comma-separated list of allowed models |\n\n## Deployment\n\n### Cloud Run (Recommended)\n\nDeploy to Google Cloud Run for serverless, auto-scaling execution:\n\n```bash\ngcloud run deploy vertex-embeddings \\\n  --source . \\\n  --platform managed \\\n  --region us-central1 \\\n  --set-env-vars \"GOOGLE_CLOUD_PROJECT=your-project,API_KEY_SECRET=your-api-key\"\n```\n\n### Docker\n\nBuild and run locally or in any container environment:\n\n```bash\ndocker build -t vertex-batch-embeddings:latest .\ndocker run -p 8080:8080 \\\n  -e GOOGLE_CLOUD_PROJECT=your-project \\\n  -e API_KEY_SECRET=your-api-key \\\n  vertex-batch-embeddings:latest\n```\n\nSee `Dockerfile` for production-ready configuration with health checks and non-root user.\n\n## Cost Estimation\n\nVertex AI batch embeddings pricing depends on:\n- **Model**: Different models have different costs\n- **Volume**: Bulk discounts apply for large volumes\n- **Region**: Pricing varies by region\n\nFor current pricing details, see:\n- [Vertex AI Pricing](https://cloud.google.com/vertex-ai/pricing)\n- [Batch Prediction Pricing](https://cloud.google.com/vertex-ai/pricing#batch-prediction)\n\n**Rough Estimates (as of 2024):**\n- `text-embedding-004`: ~$0.02 per 1M tokens\n- 1,000 texts (~500 tokens each) ≈ $0.01\n\n## Model Selection\n\n### Available Models\n\n| Model | Dimensions | Use Case | Cost |\n|-------|-----------|----------|------|\n| `text-embedding-004` | 768 | General purpose, recommended | Standard |\n| `text-embedding-preview-0815` | 768 | Preview/experimental | Standard |\n| `text-multilingual-embedding-002` | 768 | Multilingual content | Standard |\n\n### Choosing a Model\n\n- **General English text**: Use `text-embedding-004` (recommended)\n- **Multilingual content**: Use `text-multilingual-embedding-002`\n- **Experimental features**: Use `text-embedding-preview-0815`\n\nTo use a different model, pass it in the request:\n```bash\ncurl -X POST http://localhost:8080/v1/embeddings/batch \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: your-api-key\" \\\n  -d '{\n    \"texts\": [\"Your text here\"],\n    \"model\": \"text-multilingual-embedding-002\"\n  }'\n```\n\nOr set the default model via environment variable:\n```bash\nexport EMBEDDING_MODEL=text-multilingual-embedding-002\n```\n\n## Troubleshooting\n\n### Common Issues\n\n**❌ API won't start:**\n- **Check environment variables**: Ensure all required variables are set (`GOOGLE_CLOUD_PROJECT`, `GCS_EMBED_INPUT_BUCKET`, etc.)\n- **Verify GCP credentials**: Run `gcloud auth application-default login`\n- **Check Python version**: Requires Python 3.9+\n- **Dependencies**: Run `pip install -r requirements.txt`\n\n**❌ Jobs fail with permission errors:**\n- **GCS bucket permissions**: Ensure service account has read/write access to buckets\n- **Vertex AI API enabled**: Check that Vertex AI API is enabled in your GCP project\n- **Project billing**: Ensure billing is enabled for your GCP project\n\n**❌ Webhook notifications not working:**\n- **URL accessibility**: Ensure webhook URL is accessible from your server\n- **HTTPS requirement**: Webhook URLs must use HTTPS (not HTTP)\n- **Endpoint accepts POST**: Verify your webhook endpoint accepts POST requests with JSON\n- **Timeout**: Webhooks timeout after 10 seconds\n\n**Issue: Job stuck in \"QUEUED\" state**\n- Solution: This is normal for batch jobs. Check status periodically.\n- Typical duration: 5-30 minutes, depending on job size\n- Monitor via: `gcloud ai batch-prediction-jobs list --region=us-central1`\n\n**❌ Import errors:**\n- **Virtual environment**: Activate your virtual environment: `source venv/bin/activate`\n- **Dependencies**: Reinstall: `pip install -r requirements.txt`\n- **Python path**: Ensure you're running from the project root directory\n\n### Quick Tests\n\n**Test API health:**\n```bash\ncurl http://localhost:8080/health\n```\n\n**Test with curl examples:**\n```bash\n./examples/curl_examples.sh\n```\n\n## Development\n\nFor information on setting up your development environment and contributing to the project, see:\n\n- **[Development Guide](docs/DEVELOPMENT.md)**: Complete setup instructions and development workflow\n- **[Contributing Guidelines](CONTRIBUTING.md)**: How to contribute to this project\n\nQuick start for developers:\n\n```bash\n# Clone and setup\ngit clone https://github.com/scrrlt/vertex-batch-embeddings-api.git\ncd vertex-batch-embeddings-api\npython -m venv .venv \u0026\u0026 source .venv/bin/activate\npip install -r requirements.txt\n\n# Run tests\nmake test\n\n# Run linters\nmake lint\n\n# Auto-format code\nmake format\n\n# Run locally\nexport FLASK_DEBUG=true\npython -m src\n\n# Run with coverage\npython -m pytest tests/ --cov=src --cov-report=html\n```\n\n### Getting Help\n\n- **Check logs**: API logs contain detailed error information\n- **GitHub Issues**: Search existing issues or create a new one\n- **Environment info**: Include your Python version, OS, and GCP project details\n\n## Additional Resources\n\n- **[API Reference](docs/api.md)**: Complete endpoint documentation with request/response schemas\n- **[Development Guide](docs/DEVELOPMENT.md)**: Setup instructions and development workflow\n- **[Examples](examples/)**: Runnable code samples for common use cases\n- **[Security Policy](SECURITY.md)**: Security features and best practices\n- **[Contributing Guidelines](CONTRIBUTING.md)**: How to contribute to this project\n- **[Code of Conduct](CODE_OF_CONDUCT.md)**: Community standards and expectations\n\n## Citation\n\nIf you use this software in your research or project, please cite it:\n\n```bibtex\n@software{vertex_batch_embeddings_api,\n  title = {Vertex AI Batch Embeddings API},\n  author = {Vertex AI Batch Embeddings API Contributors},\n  year = {2025},\n  url = {https://github.com/scrrlt/vertex-batch-embeddings-api},\n  license = {MIT}\n}\n```\n\nSee [CITATION.cff](CITATION.cff) for more citation formats.\n\n## License\n\nThis project is licensed under the MIT License. See [LICENSE](LICENSE) for details.\n\n## Support\n\nFor issues, questions, or feedback:\n- **Issues**: https://github.com/scrrlt/vertex-batch-embeddings-api/issues\n- **Discussions**: https://github.com/scrrlt/vertex-batch-embeddings-api/discussions\n\n---\n\nThe **Vertex AI Batch Embeddings ** API offers a REST interface for orchestrating large-scale embedding jobs, combining authentication, rate limiting, monitoring, and error handling into a reproducible, cloud-native workflow.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscrrlt%2Fvertex-batch-embeddings-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscrrlt%2Fvertex-batch-embeddings-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscrrlt%2Fvertex-batch-embeddings-api/lists"}