Skip to content

AX Capabilities

The ax package defines 7 capability types for LLM observability operations.

Capability Types

Capability Description Example Operations
CapRead Retrieves data without modification getTraceById, findDatasets
CapWrite Creates or modifies data createTrace, updateSpan
CapDelete Removes data deleteTraceById, deleteDataset
CapAdmin Administrative operations upsertWorkspaceConfiguration
CapStream Supports streaming responses streamDatasetItems, streamExperiments
CapEvaluate Performs LLM evaluation evaluateTraces, evaluateSpans
CapAnalytics Retrieves analytics/metrics data getProjectMetrics, costsSummary

Checking Capabilities

// Check if operation has a capability
if ax.HasCapability("evaluateTraces", ax.CapEvaluate) {
    // This is an evaluation operation
}

// Get all capabilities for an operation
caps := ax.GetCapabilities("getTraceById")
// [CapRead]

caps = ax.GetCapabilities("deleteTraceById")
// [CapWrite, CapDelete]

Capability Helpers

// Check if read-only
ax.IsReadOnly("getTraceById")  // true
ax.IsReadOnly("createTrace")   // false

// Check if requires admin
ax.RequiresAdmin("upsertWorkspaceConfiguration")  // true
ax.RequiresAdmin("createTrace")                   // false

// Check if evaluation operation
ax.IsEvaluation("evaluateTraces")  // true
ax.IsEvaluation("createTrace")     // false

// Check if supports streaming
ax.SupportsStreaming("streamExperimentItems")  // true
ax.SupportsStreaming("getExperimentById")      // false

Finding Operations by Capability

// Find all evaluation operations
evalOps := ax.GetOperationsByCapability(ax.CapEvaluate)
// ["evaluateSpans", "evaluateThreads", "evaluateTraces"]

// Find all streaming operations
streamOps := ax.GetOperationsByCapability(ax.CapStream)
// ["streamDatasetItems", "streamExperimentItems", "streamExperiments"]

// Find all analytics operations
analyticsOps := ax.GetOperationsByCapability(ax.CapAnalytics)
// ["getProjectMetrics", "getProjectStats", "costsSummary", ...]

// Find all admin operations
adminOps := ax.GetOperationsByCapability(ax.CapAdmin)
// ["upsertWorkspaceConfiguration", "storeLlmProviderApiKey", ...]

Use Cases

Discover Evaluation Options

// Find available evaluation operations
evalOps := ax.GetOperationsByCapability(ax.CapEvaluate)

fmt.Println("Available evaluation methods:")
for _, op := range evalOps {
    fmt.Printf("  - %s\n", op)
}
// Available evaluation methods:
//   - evaluateSpans
//   - evaluateThreads
//   - evaluateTraces

Choose Streaming vs Batch

func getExperimentItems(ctx context.Context, experimentID string, large bool) {
    if large && ax.SupportsStreaming("streamExperimentItems") {
        // Use streaming for large result sets
        stream, _ := client.StreamExperimentItems(ctx, experimentID)
        for item := range stream {
            process(item)
        }
    } else {
        // Use batch for small result sets
        items, _ := client.GetExperimentItems(ctx, experimentID)
        for _, item := range items {
            process(item)
        }
    }
}

Check Admin Requirements

func updateWorkspaceConfig(ctx context.Context, config *Config) error {
    if ax.RequiresAdmin("upsertWorkspaceConfiguration") {
        // Verify admin permissions before calling
        if !hasAdminPermissions(ctx) {
            return ErrAdminRequired
        }
    }
    return client.UpsertWorkspaceConfiguration(ctx, config)
}

Audit Read vs Write Operations

func auditOperation(operationID string) {
    if ax.IsReadOnly(operationID) {
        log.Printf("READ: %s", operationID)
    } else if ax.HasCapability(operationID, ax.CapDelete) {
        log.Printf("DELETE: %s (requires confirmation)", operationID)
    } else if ax.HasCapability(operationID, ax.CapWrite) {
        log.Printf("WRITE: %s", operationID)
    }
}

Complete Example

func discoverCapabilities() {
    fmt.Println("=== Opik API Capabilities ===\n")

    // Evaluation
    fmt.Println("Evaluation Operations:")
    for _, op := range ax.GetOperationsByCapability(ax.CapEvaluate) {
        fmt.Printf("  - %s\n", op)
    }

    // Streaming
    fmt.Println("\nStreaming Operations:")
    for _, op := range ax.GetOperationsByCapability(ax.CapStream) {
        fmt.Printf("  - %s\n", op)
    }

    // Analytics
    fmt.Println("\nAnalytics Operations:")
    for _, op := range ax.GetOperationsByCapability(ax.CapAnalytics) {
        fmt.Printf("  - %s\n", op)
    }

    // Admin
    fmt.Println("\nAdmin Operations (require elevated permissions):")
    for _, op := range ax.GetOperationsByCapability(ax.CapAdmin) {
        fmt.Printf("  - %s\n", op)
    }
}