Syvain Metrics API Client
Typed Python client for the Syvain Metrics REST API.
This package maps directly onto the REST surface for experiments, folders,
metric query endpoints, annotations, and ingestion keys. If you only need to
record metrics from a training or evaluation job, use
syvain-metrics-collector instead.
Install
uv add syvain-metrics-api-client
Authentication
Use an explicit API key:
from syvain_metrics_api_client import SyvainMetricsApiClient
client = SyvainMetricsApiClient("ak_org_...")
Use installed Syvain CLI auth:
client = SyvainMetricsApiClient("local")
local reads ~/.config/syvain-metrics/auth.json.
Usage
from syvain_metrics_api_client import SyvainMetricsApiClient
client = SyvainMetricsApiClient("local")
experiment = client.create_experiment(
"mamba-run-001",
description="Baseline mamba training run",
metadata={"model": "mamba"},
).experiment
client.ingest_metrics(
experiment.id,
[
{
"client_event_id": "mamba-run-001/loss/1",
"name": "loss",
"value": 0.42,
"step": 1,
"metadata": {"split": "train"},
}
],
)
series = client.query_metric_series(
[
{
"experiment_id": experiment.id,
"metric_name": "loss",
"metadata_filter": [
{"key": "split", "value": '"train"'},
],
}
],
order={"axis": "step", "direction": "asc"},
)
catalog = client.query_metrics_catalog([experiment.id])
query_metric_series(...) uses the lossless series query API. It returns a
list of column batches grouped by experiment, metric name, and complete
metadata object. Each batch has parallel data.steps, data.timestamp, and
data.value arrays. Metadata filter values and returned metadata values use
the Series DB canonical JSON-string representation; omit value to require
only that the metadata key exists. Set metric_name on a selection to query
one metric, or omit it to query every metric in the experiment.
Every metric must include a stable client_event_id. Reuse the same value when
retrying the same event so ingestion can remain idempotent.
Metric names must be nonempty printable ASCII and at most 256 bytes. The client
also requires the canonical s-prefixed, percent-encoded Series DB key segment
to be at most 512 bytes. Characters such as /, spaces, +, and parentheses
are supported and encoded internally; the original human-readable name is
returned by queries.
Metric metadata is validated against the series backend contract before a
request is sent: it must be a flat str -> str mapping with at most 32 keys,
128 UTF-8 bytes per key, 512 UTF-8 bytes per value, and 4096 UTF-8 bytes in its
canonical JSON representation.
Ingest and annotation creation calls mint and cache ingestion keys per experiment. General API calls use the configured API key directly.
Client Surface
Folders:
list_folders(...)create_folder(...)get_folder(...)patch_folder(...)rename_folder(...)move_folder(...)
Experiments:
list_experiments(...)create_experiment(...)get_experiment(...)update_experiment_status(...)move_experiment(...)
Metrics:
query_metric_series(...)query_metrics_catalog(...)ingest_metrics(...)
Ingestion keys:
list_ingestion_keys(...)create_ingestion_key(...)revoke_ingestion_key(...)forget_ingestion_credential(...)
Annotations:
list_annotations(...)create_annotation(...)
Authentication:
auth_status()
Host and Timeouts
The client defaults to https://metrics.syvain.com.
client = SyvainMetricsApiClient(
"ak_org_...",
host="https://metrics.syvain.com",
timeout=10.0,
ingest_timeout=60.0,
)
timeout applies to ordinary API calls. ingest_timeout applies to metric and
annotation ingestion calls.
Write Retries and Idempotency
The client retries transient request failures for write operations. Except for
metric ingestion, POST and PATCH requests send a generated Idempotency-Key
header and reuse that key across retry attempts for the same logical request.
Metric ingestion does not send a request-level idempotency key. Its idempotency
is controlled by each metric's client_event_id. Use deterministic IDs derived
from the run, metric name, step, and series metadata when the same event may be
retried by caller code.
Errors
All package-specific failures inherit from MetricsApiError.
MetricsApiRequestError: the API returned an HTTP error or could not be reachedMetricsApiResponseError: the API returned a successful response that did not match the expected schemaMetricsApiAuthError: local CLI auth was requested but unavailable or invalid
Release files for syvain-metrics-api-client 0.0.207
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| syvain_metrics_api_client-0.0.207.tar.gz | 13.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| syvain_metrics_api_client-0.0.207-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.9 kB
Release files / syvain_metrics_api_client-0.0.207.tar.gz
| Download URL | syvain_metrics_api_client-0.0.207.tar.gz |
|---|---|
| Size | 13.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87529e32d67d94315a58348a2f05fd2269512143db9b74eb36e7280315bbb841
|
|
BLAKE2b-256 checksum How to use checksums |
023613c328bcd0fb257eb2c62d2c56c07e18d9b3aa2b70f11a90b6f9566ffe0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / syvain_metrics_api_client-0.0.207-py3-none-any.whl
| Download URL | syvain_metrics_api_client-0.0.207-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5694ef239dadbea7508698ec235c84d1faf751cac50f840b092d42d1fc89834d
|
|
BLAKE2b-256 checksum How to use checksums |
b6d4574d88527ed840d1c9cb6940b39a5198e0fb389fef78009e8c02ab347ff9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|