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.Operationpolling with capped exponential backoff, operation identity pinning, and project/location scope validation.VertexResourceName— parsing and formatting ofprojects/*/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§
- GcpError
Codes - The machine-readable error codes a consumer brands its errors with.
- GcpError
Context - Error identity for one consuming backend.
- GcpHttp
Client - Authenticated, bounded HTTP client for Google Cloud REST APIs.
- GcpHttp
Client Builder - Builder for
GcpHttpClient. - LroPoller
- Polls long-running operations to completion with capped backoff.
- Operation
- A
google.longrunning.Operationwire value. - Operation
Error - The
google.rpc.Statuserror carried by a failed operation. - Vertex
Resource Name - A parsed
projects/*/locations/*/reasoningEngines/*resource name.
Functions§
- is_
canonical_ reasoning_ engine_ id - Whether
valueis a canonical numeric reasoning-engine ID. - is_
scoped_ resource_ name - Whether
namebelongs to the given project and location scope. - truncate_
for_ error - Sanitizes and truncates untrusted text for inclusion in error messages.