Skip to main content

Crate adk_gcp

Crate adk_gcp 

Source
Expand description

Shared Google Cloud REST plumbing for ADK-Rust Vertex AI backends.

Every Vertex integration in the workspace — sessions, memory, example store, artifact storage, deployment — needs the same three pieces:

  • GcpHttpClient — Application Default Credentials with cached auth headers, a redirect-disabled HTTP client with connect/request timeouts, HTTPS-or-loopback endpoint validation, and bounded JSON response reads.
  • LroPoller — google.longrunning.Operation polling with capped exponential backoff, operation identity pinning, and project/location scope validation.
  • VertexResourceName — parsing and formatting of projects/*/locations/*/reasoningEngines/* resource names.

Errors cross the adk_core::AdkError boundary carrying each consumer’s own identity: a GcpErrorContext bundles the ErrorComponent, a GcpErrorCodes table of &'static str codes, the human-readable subject, and the provider tag, so errors from the shared plumbing are indistinguishable from the ones each backend previously built for itself.

§Example

use adk_core::ErrorComponent;
use adk_gcp::{GcpErrorCodes, GcpErrorContext, GcpHttpClient, LroPoller};
use serde_json::json;

const CODES: GcpErrorCodes = GcpErrorCodes {
    invalid_input: "memory.vertex.invalid_input",
    unauthorized: "memory.vertex.unauthorized",
    forbidden: "memory.vertex.forbidden",
    not_found: "memory.vertex.not_found",
    rate_limited: "memory.vertex.rate_limited",
    timeout: "memory.vertex.timeout",
    unavailable: "memory.vertex.unavailable",
    credentials_unavailable: "memory.vertex.credentials_unavailable",
    invalid_response: "memory.vertex.invalid_response",
    invalid_request: "memory.vertex.invalid_request",
    upstream_error: "memory.vertex.upstream_error",
    operation_failed: "memory.vertex.operation_failed",
};

let client = GcpHttpClient::builder(
    GcpErrorContext::new(ErrorComponent::Memory, CODES, "vertex memory"),
    "https://us-central1-aiplatform.googleapis.com",
)
.build()?;

let parent = "projects/my-project/locations/us-central1/reasoningEngines/4242";
let request = client
    .request(reqwest::Method::POST, &format!("{parent}/memories:generate"))
    .await?
    .json(&json!({ "directContentsSource": { "events": [] } }));
let operation = client.send_value(request).await?;

LroPoller::new()
    .wait_for_operation(&client, operation, "memories generate", false, "my-project", "us-central1")
    .await?;

Structs§

GcpErrorCodes
The machine-readable error codes a consumer brands its errors with.
GcpErrorContext
Error identity for one consuming backend.
GcpHttpClient
Authenticated, bounded HTTP client for Google Cloud REST APIs.
GcpHttpClientBuilder
Builder for GcpHttpClient.
LroPoller
Polls long-running operations to completion with capped backoff.
Operation
A google.longrunning.Operation wire value.
OperationError
The google.rpc.Status error carried by a failed operation.
VertexResourceName
A parsed projects/*/locations/*/reasoningEngines/* resource name.

Functions§

is_canonical_reasoning_engine_id
Whether value is a canonical numeric reasoning-engine ID.
is_scoped_resource_name
Whether name belongs to the given project and location scope.
truncate_for_error
Sanitizes and truncates untrusted text for inclusion in error messages.