Documentation
¶
Overview ¶
Package schemas provides shared type definitions aligned with the x402 and ERC-8004 ecosystems. These types are the canonical source for ServiceOffer CRD fields, verifier config, CLI flag mapping, and reconciler logic.
Field names are chosen to match the x402 PaymentRequirements wire format where possible (payTo, network, scheme, maxTimeoutSeconds). Human-friendly values (e.g., "base-sepolia" instead of CAIP-2 "eip155:84532") are used in CRD specs; the reconciler translates to wire format at runtime.
Index ¶
- Constants
- func ApproximateRequestPriceFromPerHour(perHour string) (string, error)
- func ApproximateRequestPriceFromPerMTok(perMTok string) (string, error)
- type Condition
- type ModelSpec
- type PaymentTerms
- type PriceTable
- type RegistrationSpec
- type ServiceDef
- type ServiceOfferSpec
- type ServiceOfferStatus
- type UpstreamSpec
- type WorkloadType
Constants ¶
const ApproxMinutesPerRequest = 5
ApproxMinutesPerRequest is the temporary phase-1 time estimate used to convert per-hour pricing into an x402 per-request charge. Based on the autoresearch 5-minute experiment budget.
const ApproxTokensPerRequest = 1000
ApproxTokensPerRequest is the temporary phase-1 token estimate used to convert per-million-token pricing into an x402 per-request charge.
Variables ¶
This section is empty.
Functions ¶
func ApproximateRequestPriceFromPerHour ¶
ApproximateRequestPriceFromPerHour converts a per-hour price into a temporary per-request x402 charge using ApproxMinutesPerRequest (default 5 min, matching the autoresearch experiment budget). Formula: perRequest = perHour * (minutesPerRequest / 60)
func ApproximateRequestPriceFromPerMTok ¶
ApproximateRequestPriceFromPerMTok converts a per-million-token price into a temporary per-request x402 charge using ApproxTokensPerRequest.
Types ¶
type Condition ¶
type Condition struct {
Type string `json:"type" yaml:"type"`
Status string `json:"status" yaml:"status"`
Reason string `json:"reason,omitempty" yaml:"reason,omitempty"`
Message string `json:"message,omitempty" yaml:"message,omitempty"`
LastTransitionTime string `json:"lastTransitionTime,omitempty" yaml:"lastTransitionTime,omitempty"`
}
Condition represents a ServiceOffer status condition.
type ModelSpec ¶
type ModelSpec struct {
// Name is the model identifier (e.g., "qwen3.5:35b").
Name string `json:"name" yaml:"name"`
// Runtime is the serving runtime.
Runtime string `json:"runtime" yaml:"runtime"`
}
ModelSpec describes the LLM model served by the upstream.
type PaymentTerms ¶
type PaymentTerms struct {
// Scheme is the x402 payment scheme. Default: "exact".
Scheme string `json:"scheme,omitempty" yaml:"scheme,omitempty"`
// Network is the chain identifier (human-friendly, e.g., "base-sepolia").
// The reconciler resolves to CAIP-2 format (e.g., "eip155:84532").
Network string `json:"network" yaml:"network"`
// PayTo is the USDC recipient wallet address (0x-prefixed EVM address).
PayTo string `json:"payTo" yaml:"payTo"`
// MaxTimeoutSeconds is the payment validity window. Default: 300.
MaxTimeoutSeconds int `json:"maxTimeoutSeconds,omitempty" yaml:"maxTimeoutSeconds,omitempty"`
// Price defines the pricing model (type-specific).
Price PriceTable `json:"price" yaml:"price"`
}
PaymentTerms defines x402 payment requirements for a ServiceOffer. Field names align with x402 PaymentRequirements (V2).
type PriceTable ¶
type PriceTable struct {
// PerRequest is a flat per-request price in USDC. Applicable to all types.
// This is the amount passed to the x402 verifier as-is.
PerRequest string `json:"perRequest,omitempty" yaml:"perRequest,omitempty"`
// PerMTok is the price per million tokens in USDC. Inference only.
// Metering layer converts token counts to request-level charges.
PerMTok string `json:"perMTok,omitempty" yaml:"perMTok,omitempty"`
// PerHour is the price per compute-hour in USDC. Fine-tuning only.
PerHour string `json:"perHour,omitempty" yaml:"perHour,omitempty"`
// PerEpoch is the price per training epoch in USDC. Fine-tuning only.
PerEpoch string `json:"perEpoch,omitempty" yaml:"perEpoch,omitempty"`
}
PriceTable holds per-unit prices in USDC as human-readable decimal strings. Which fields are applicable depends on the ServiceOffer type.
x402 wire format uses amounts in smallest units (e.g., "1000000" = $1.00 USDC with 6 decimals). The reconciler converts from human-readable to wire format.
func (PriceTable) EffectiveRequestPrice ¶
func (p PriceTable) EffectiveRequestPrice() string
EffectiveRequestPrice returns the per-request price to use for x402 gating. If PerRequest is set, it is returned directly. If only PerMTok is set, it is temporarily approximated using ApproxTokensPerRequest until exact metering exists. Invalid decimal inputs fall back to "0".
func (PriceTable) EffectiveRequestPriceE ¶
func (p PriceTable) EffectiveRequestPriceE() (string, error)
EffectiveRequestPriceE returns the per-request price to use for x402 gating. It performs the same conversion as EffectiveRequestPrice but returns parsing errors to callers that need to validate input.
type RegistrationSpec ¶
type RegistrationSpec struct {
// Enabled controls whether the reconciler registers on-chain.
// Replaces the bare "register: boolean" field from v1alpha1.
Enabled bool `json:"enabled" yaml:"enabled"`
// Name is the agent name. Maps to AgentRegistration.name.
Name string `json:"name,omitempty" yaml:"name,omitempty"`
// Description is a human-readable description.
// Maps to AgentRegistration.description.
Description string `json:"description,omitempty" yaml:"description,omitempty"`
// Image is a URL to the agent image/icon.
// Maps to AgentRegistration.image.
Image string `json:"image,omitempty" yaml:"image,omitempty"`
// Services lists endpoints the agent exposes.
// Maps to AgentRegistration.services[].
Services []ServiceDef `json:"services,omitempty" yaml:"services,omitempty"`
// SupportedTrust lists trust verification methods.
// Maps to AgentRegistration.supportedTrust[].
// Valid values: "reputation", "crypto-economic", "tee-attestation".
SupportedTrust []string `json:"supportedTrust,omitempty" yaml:"supportedTrust,omitempty"`
// Skills lists OASF skills for discovery.
Skills []string `json:"skills,omitempty" yaml:"skills,omitempty"`
// Domains lists OASF domains for discovery.
Domains []string `json:"domains,omitempty" yaml:"domains,omitempty"`
// Metadata carries arbitrary string metadata published into the generated
// registration document and mirrored on-chain as indexed metadata entries.
Metadata map[string]string `json:"metadata,omitempty" yaml:"metadata,omitempty"`
}
RegistrationSpec defines ERC-8004 registration metadata for a ServiceOffer. Field names align with the AgentRegistration document schema defined in the ERC-8004 specification.
type ServiceDef ¶
type ServiceDef struct {
// Name identifies the service type (e.g., "web", "A2A", "MCP").
Name string `json:"name" yaml:"name"`
// Endpoint is the service URL. Auto-filled from tunnel URL if empty.
Endpoint string `json:"endpoint" yaml:"endpoint"`
// Version is the protocol version (SHOULD per ERC-8004 spec).
Version string `json:"version,omitempty" yaml:"version,omitempty"`
}
ServiceDef describes an endpoint the agent exposes. Mirrors erc8004.ServiceDef and the ERC-8004 service definition schema.
type ServiceOfferSpec ¶
type ServiceOfferSpec struct {
// Type discriminates the workload. Default: "inference".
Type WorkloadType `json:"type,omitempty" yaml:"type,omitempty"`
// Model holds LLM model metadata. Required for inference/fine-tuning.
Model *ModelSpec `json:"model,omitempty" yaml:"model,omitempty"`
// Upstream identifies the in-cluster service handling the workload.
Upstream UpstreamSpec `json:"upstream" yaml:"upstream"`
// Payment defines x402 payment terms. Field names align with x402.
Payment PaymentTerms `json:"payment" yaml:"payment"`
// Path is the URL path prefix for the HTTPRoute.
// Defaults to /services/<name>.
Path string `json:"path,omitempty" yaml:"path,omitempty"`
// Provenance tracks how the service or model was produced.
Provenance map[string]string `json:"provenance,omitempty" yaml:"provenance,omitempty"`
// Registration holds ERC-8004 registration metadata.
Registration *RegistrationSpec `json:"registration,omitempty" yaml:"registration,omitempty"`
}
ServiceOfferSpec is the Go representation of a ServiceOffer CRD spec. Used by the CLI to build manifests and by Go-side reconciliation logic.
type ServiceOfferStatus ¶
type ServiceOfferStatus struct {
Conditions []Condition `json:"conditions,omitempty" yaml:"conditions,omitempty"`
Endpoint string `json:"endpoint,omitempty" yaml:"endpoint,omitempty"`
AgentID string `json:"agentId,omitempty" yaml:"agentId,omitempty"`
RegistrationTxHash string `json:"registrationTxHash,omitempty" yaml:"registrationTxHash,omitempty"`
ObservedGeneration int64 `json:"observedGeneration,omitempty" yaml:"observedGeneration,omitempty"`
}
ServiceOfferStatus is the Go representation of a ServiceOffer status.
type UpstreamSpec ¶
type UpstreamSpec struct {
// Service is the Kubernetes Service name.
Service string `json:"service" yaml:"service"`
// Namespace is the namespace of the upstream Service.
Namespace string `json:"namespace" yaml:"namespace"`
// Port is the port on the upstream Service.
Port int `json:"port" yaml:"port"`
// HealthPath is the HTTP path for health probes.
HealthPath string `json:"healthPath,omitempty" yaml:"healthPath,omitempty"`
}
UpstreamSpec identifies the in-cluster Kubernetes Service.
type WorkloadType ¶
type WorkloadType string
WorkloadType discriminates between different types of compute services.
const ( // WorkloadInference is an LLM inference service (synchronous, per-request). WorkloadInference WorkloadType = "inference" // WorkloadFineTuning is a model fine-tuning service (batch, per-hour/epoch). WorkloadFineTuning WorkloadType = "fine-tuning" )