5a558eb09e
TypeScript SDK Compatibility V1.x E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / TypeScript SDK Compatibility V1.x E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
TypeScript SDK E2E Tests / TypeScript SDK E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
Python SDK E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK E2E Tests / Python SDK E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK E2E Tests / build-opik (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Python SDK Compatibility V1.x E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK E2E Tests / build-opik (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer E2E Tests Python ${{matrix.python_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer Integration Smoke Tests (push) Has been cancelled
🐙 Code Quality / detect (push) Has been cancelled
🐙 Code Quality / lint (${{ matrix.leg.name }}) (push) Has been cancelled
🐙 Code Quality / summary (push) Has been cancelled
TypeScript SDK Library Integration Tests / Check Secrets (push) Has been cancelled
TypeScript SDK Library Integration Tests / opik-vercel (Vercel AI SDK / eve) (push) Has been cancelled
SDK Library Integration Tests Runner / Check Secrets (push) Has been cancelled
SDK Library Integration Tests Runner / Missed OpenAI API Key Warning (push) Has been cancelled
SDK Library Integration Tests Runner / Build (push) Has been cancelled
SDK Library Integration Tests Runner / openai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_legacy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / llama_index_tests (push) Has been cancelled
SDK Library Integration Tests Runner / anthropic_tests (push) Has been cancelled
SDK Library Integration Tests Runner / mistral_tests (push) Has been cancelled
SDK Library Integration Tests Runner / groq_tests (push) Has been cancelled
SDK Library Integration Tests Runner / aisuite_tests (push) Has been cancelled
SDK Library Integration Tests Runner / haystack_tests (push) Has been cancelled
SDK Library Integration Tests Runner / dspy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v1_tests (push) Has been cancelled
SDK Library Integration Tests Runner / genai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_legacy_1_3_0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / evaluation_metrics_tests (push) Has been cancelled
SDK Library Integration Tests Runner / bedrock_tests (push) Has been cancelled
SDK Library Integration Tests Runner / litellm_tests (push) Has been cancelled
SDK Library Integration Tests Runner / harbor_tests (push) Has been cancelled
SDK Library Integration Tests Runner / Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / render-equality (push) Has been cancelled
Opik Optimizer - Unit Tests / Opik Optimizer Unit Tests Python ${{matrix.python_version}} (push) Has been cancelled
Python BE E2E Tests / Python BE E2E (push) Has been cancelled
Python Backend Tests / run-python-backend-tests (push) Has been cancelled
Python SDK Unit Tests / Python SDK Unit Tests ${{matrix.python_version}} (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
SDK E2E Libraries Integration Tests / Check Secrets (push) Has been cancelled
SDK E2E Libraries Integration Tests / Missed OpenAI API Key Warning (push) Has been cancelled
SDK E2E Libraries Integration Tests / build-opik (push) Has been cancelled
SDK E2E Libraries Integration Tests / E2E Lib Integration Python ${{matrix.python_version}} (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-gemini) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-langchain) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-openai) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-otel) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-vercel) (push) Has been cancelled
TypeScript SDK Build & Publish / build-and-publish (push) Has been cancelled
TypeScript SDK Unit Tests / Test on Node ${{ matrix.node-version }} (push) Has been cancelled
Backend Tests / discover-tests (push) Has been cancelled
Backend Tests / ${{ matrix.name }} (push) Has been cancelled
Build and Publish SDK / build-and-publish (push) Has been cancelled
Build Opik Docker Images / set-version (push) Has been cancelled
Build Opik Docker Images / build-backend (push) Has been cancelled
Build Opik Docker Images / build-sandbox-executor-python (push) Has been cancelled
Build Opik Docker Images / build-python-backend (push) Has been cancelled
Build Opik Docker Images / build-frontend (push) Has been cancelled
Build Opik Docker Images / create-git-tag (push) Has been cancelled
ClickHouse Migration Cluster Check / validate-clickhouse-migrations (push) Has been cancelled
Docs - Publish / run (push) Has been cancelled
E2E Tests - Post Merge (v2) / 🧪 E2E v2 Tests (${{ github.event.inputs.tier || 't1' }}) (push) Has been cancelled
E2E Tests - Post Merge (v2) / 📢 Slack Notification (push) Has been cancelled
Frontend Unit Tests / Test on Node 20 (push) Has been cancelled
Guardrails E2E Tests / Select Python version matrix (push) Has been cancelled
Guardrails E2E Tests / Guardrails E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Guardrails E2E Tests / 📢 Slack Notification (push) Has been cancelled
Guardrails Backend Unit Tests / Guardrails Backend Unit Tests (push) Has been cancelled
Guardrails Backend Unit Tests / 📢 Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v3.21.0) (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v4.2.0) (push) Has been cancelled
Lint Opik Helm Chart / unittest-helm-chart (push) Has been cancelled
211 lines
6.5 KiB
Plaintext
211 lines
6.5 KiB
Plaintext
---
|
|
headline: REST API Client | Opik Documentation
|
|
og:description: Access all Opik platform functionality with the Python SDK's REST
|
|
API client for advanced operations and custom integrations.
|
|
og:site_name: Opik Documentation
|
|
og:title: REST API Client - Opik Python SDK
|
|
title: REST API Client
|
|
---
|
|
|
|
The Opik Python SDK includes a complete REST API client that provides direct access to all Opik platform functionality. This low-level client is available through the `rest_client` property and is useful for advanced operations, custom integrations, and scenarios where the high-level SDK doesn't provide the needed functionality.
|
|
|
|
<Warning>
|
|
The REST client is not guaranteed to be backward compatible with future SDK versions. While it provides convenient
|
|
access to the current REST API, it's not considered safe to heavily rely on its API as Opik's REST API contracts may
|
|
change.
|
|
</Warning>
|
|
|
|
## Accessing the REST Client
|
|
|
|
The REST client is accessible through any Opik instance:
|
|
|
|
```python
|
|
import opik
|
|
|
|
# Initialize Opik client
|
|
client = opik.Opik()
|
|
|
|
# Access the REST API client
|
|
rest_client = client.rest_client
|
|
|
|
# Now you can use any of the available client methods
|
|
traces = rest_client.traces.search_traces(project_name="my-project")
|
|
```
|
|
|
|
## Available Clients
|
|
|
|
The REST API is organized into functional client modules:
|
|
|
|
### Core Resources
|
|
|
|
- **`traces`** - Manage traces and their lifecycle
|
|
- **`spans`** - Manage spans within traces
|
|
- **`datasets`** - Manage datasets and dataset items
|
|
- **`experiments`** - Manage experiments and results
|
|
- **`projects`** - Manage projects and project settings
|
|
|
|
### Feedback & Evaluation
|
|
|
|
- **`feedback_definitions`** - Define feedback score types
|
|
- **`automation_rule_evaluators`** - Set up automated evaluation rules
|
|
- **`optimizations`** - Run optimization experiments
|
|
|
|
### Content & Assets
|
|
|
|
- **`prompts`** - Manage prompt templates and versions
|
|
- **`attachments`** - Handle file attachments for traces and spans
|
|
|
|
### System & Configuration
|
|
|
|
- **`check`** - System health and access verification
|
|
- **`workspaces`** - Workspace management
|
|
- **`llm_provider_key`** - API key management for LLM providers
|
|
- **`service_toggles`** - Feature flag management
|
|
- **`system_usage`** - Usage metrics and monitoring
|
|
|
|
### Integrations
|
|
|
|
- **`chat_completions`** - Chat completion endpoints
|
|
- **`open_telemetry_ingestion`** - OpenTelemetry data ingestion
|
|
- **`guardrails`** - Content validation and safety checks
|
|
|
|
## Common Usage Patterns
|
|
|
|
### Working with Traces
|
|
|
|
```python
|
|
# Get a specific trace by ID
|
|
trace = client.rest_client.traces.get_trace_by_id("trace-id")
|
|
|
|
# Search traces with advanced filters
|
|
traces = client.rest_client.traces.search_traces(
|
|
project_name="my-project",
|
|
filters=[{
|
|
"field": "name",
|
|
"operator": "contains",
|
|
"value": "important"
|
|
}],
|
|
max_results=100
|
|
)
|
|
|
|
# Add feedback to a trace
|
|
client.rest_client.traces.add_trace_feedback_score(
|
|
id="trace-id",
|
|
name="accuracy",
|
|
value=0.95,
|
|
source="manual"
|
|
)
|
|
```
|
|
|
|
### Managing Datasets
|
|
|
|
```python
|
|
# List all datasets with pagination
|
|
datasets = client.rest_client.datasets.find_datasets(
|
|
page=0,
|
|
size=20
|
|
)
|
|
|
|
# Create a new dataset
|
|
dataset = client.rest_client.datasets.create_dataset(
|
|
name="evaluation-dataset",
|
|
description="Dataset for model evaluation",
|
|
project_name="my-project"
|
|
)
|
|
|
|
# Add items to the dataset
|
|
items = [
|
|
{
|
|
"input": {"question": "What is machine learning?"},
|
|
"expected_output": {"answer": "A subset of AI..."}
|
|
}
|
|
]
|
|
client.rest_client.datasets.create_or_update_dataset_items(
|
|
dataset_id=dataset.id,
|
|
items=items
|
|
)
|
|
```
|
|
|
|
### Running Experiments
|
|
|
|
```python
|
|
# Create an experiment linked to a dataset
|
|
experiment = client.rest_client.experiments.create_experiment(
|
|
name="model-comparison",
|
|
dataset_name="evaluation-dataset"
|
|
)
|
|
|
|
# Add experiment results
|
|
client.rest_client.experiments.create_experiment_items(
|
|
experiment_id=experiment.id,
|
|
items=[{
|
|
"dataset_item_id": "item-id",
|
|
"trace_id": "trace-id",
|
|
"output": {"prediction": "model output"},
|
|
"feedback_scores": [
|
|
{"name": "accuracy", "value": 0.8}
|
|
]
|
|
}]
|
|
)
|
|
```
|
|
|
|
## Response Types and Pagination
|
|
|
|
Most list operations return paginated responses with a consistent structure:
|
|
|
|
```python
|
|
# Example paginated response
|
|
response = client.rest_client.datasets.find_datasets(page=0, size=10)
|
|
|
|
# Access the response data
|
|
datasets = response.content # List of dataset objects
|
|
total_count = response.total # Total number of items
|
|
current_page = response.page # Current page number
|
|
page_size = response.size # Items per page
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
The REST API raises specific exceptions for different error conditions:
|
|
|
|
```python
|
|
from opik.rest_api.core.api_error import ApiError
|
|
|
|
try:
|
|
trace = client.rest_client.traces.get_trace_by_id("invalid-id")
|
|
except ApiError as e:
|
|
if e.status_code == 404:
|
|
print("Trace not found")
|
|
elif e.status_code == 403:
|
|
print("Access denied")
|
|
else:
|
|
print(f"API error: {e.status_code} - {e.body}")
|
|
```
|
|
|
|
## When to Use the REST API
|
|
|
|
Consider using the REST API client when you need to:
|
|
|
|
- **Advanced Filtering**: Complex search operations with multiple filters
|
|
- **Batch Operations**: Process large amounts of data efficiently
|
|
- **Custom Integrations**: Build tools that integrate with external systems
|
|
- **Raw Data Access**: Work directly with API responses for specific use cases
|
|
- **Unsupported Operations**: Access functionality not available in the high-level SDK
|
|
|
|
## Complete API Reference
|
|
|
|
For comprehensive documentation of all REST API methods, parameters, and response types, see the complete [REST API Reference](https://www.comet.com/docs/opik/python-sdk-reference/rest_api/overview.html).
|
|
|
|
The reference documentation includes:
|
|
|
|
- **[Overview & Getting Started](https://www.comet.com/docs/opik/python-sdk-reference/rest_api/overview.html)** - Detailed usage patterns and examples
|
|
- **[API Clients](https://www.comet.com/docs/opik/python-sdk-reference/rest_api/clients/index.html)** - Complete method reference for all clients
|
|
- **[Data Types](https://www.comet.com/docs/opik/python-sdk-reference/rest_api/objects.html)** - Response models and data structures
|
|
|
|
## Best Practices
|
|
|
|
1. **Use High-Level SDK First**: Try the main SDK APIs before resorting to REST client
|
|
2. **Handle Pagination**: Always implement proper pagination for list operations
|
|
3. **Error Handling**: Implement robust error handling for network and API errors
|
|
4. **Rate Limiting**: Be mindful of API rate limits for batch operations
|
|
5. **Version Compatibility**: Test thoroughly when upgrading SDK versions |