Argosvix Python SDK = AI agent observability (cost / latency / tokens / errors) for OpenAI / Anthropic / Gemini / Mistral
Project description
Argosvix Python SDK
AI agent observability (cost / latency / tokens / errors) for OpenAI / Anthropic / Gemini / Mistral. Phase 4 alpha — sync + async wrap for all 4 providers. Streaming + Responses API are Phase 5 backlog.
Install
pip install argosvix
# OR include a specific provider SDK as extra
pip install "argosvix[openai]"
pip install "argosvix[anthropic]"
pip install "argosvix[gemini]"
pip install "argosvix[mistral]"
# all 4 at once
pip install "argosvix[all]"
Quickstart
from openai import OpenAI
from argosvix import wrap, ArgosvixConfig
client = wrap(
OpenAI(),
ArgosvixConfig(
api_key="argosvix_live_...", # get from https://dashboard.argosvix.com/api-keys
tags={"service": "my-app", "env": "prod"},
),
)
resp = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello"}],
)
# The call is automatically recorded (cost / tokens / latency / model) and
# batched to https://ingest.argosvix.com/v1/ingest within 5 seconds.
Visit https://dashboard.argosvix.com after a few seconds to see the call appear.
Configuration
ArgosvixConfig accepts:
| Field | Default | Description |
|---|---|---|
api_key |
None |
Argosvix API key. Required for record submission. |
endpoint |
https://ingest.argosvix.com/v1/ingest |
Ingest endpoint. |
tags |
{} |
Tags attached to every record (e.g. {"service": "bot"}). |
disabled |
False |
Disable record submission entirely (e.g. local dev). |
flush_interval_ms |
5000 |
Buffer flush interval. |
buffer_max_size |
100 |
Max records before auto-flush. |
flush_retry_attempts |
2 |
Total retry attempts including the initial try. |
provider |
None |
Explicit provider override ("openai" / etc). Auto-detected from client class name. |
trace_id |
None |
OTel-subset trace ID. Attached to all records from this client. |
span_id |
None |
OTel-subset span ID. |
parent_span_id |
None |
OTel-subset parent span ID. |
Short-lived processes (Lambda / Cron / CLI)
The SDK auto-registers atexit to flush remaining records when the process exits. But for Lambda / Edge Functions / Workers-style short-lived runtimes where atexit may not fire, explicitly flush:
from argosvix import get_recorder
rec = get_recorder(client)
if rec is not None:
rec.flush_blocking() # blocks until all buffered records are POSTed
Supported providers (Phase 4)
| Provider | Sync | Async | Streaming | Notes |
|---|---|---|---|---|
| OpenAI | ✅ | ✅ | 🔄 P5 | client.chat.completions.create (sync + AsyncOpenAI) |
| Anthropic | ✅ | ✅ | 🔄 P5 | client.messages.create (sync + AsyncAnthropic) |
| Google Gemini | ✅ | ✅ | 🔄 P5 | client.models.generate_content + client.aio.models.generate_content (google-genai) |
| Mistral | ✅ | ✅ | 🔄 P5 | client.chat.complete + client.chat.complete_async (mistralai 1.x) |
OpenAI Responses API support is also Phase 3 backlog. Need a provider sooner? File an issue at https://github.com/argosvix/Argosvix/issues.
Multi-provider example
from openai import OpenAI
from anthropic import Anthropic
from google import genai
from mistralai import Mistral
from argosvix import wrap, ArgosvixConfig
cfg = ArgosvixConfig(api_key="argosvix_live_...", tags={"app": "comparison-bot"})
oa = wrap(OpenAI(), cfg)
an = wrap(Anthropic(), cfg)
gm = wrap(genai.Client(), cfg)
ms = wrap(Mistral(api_key="..."), cfg)
# All calls are recorded to the same Argosvix account, distinguishable by provider.
oa.chat.completions.create(model="gpt-5.5", messages=[{"role": "user", "content": "Hi"}])
an.messages.create(model="claude-opus-4", messages=[{"role": "user", "content": "Hi"}], max_tokens=512)
gm.models.generate_content(model="gemini-2.5-flash", contents="Hi")
ms.chat.complete(model="mistral-large-latest", messages=[{"role": "user", "content": "Hi"}])
Trace correlation
Group related LLM calls into a single trace by passing trace_id to wrap():
import uuid
trace_id = uuid.uuid4().hex
client = wrap(
OpenAI(),
ArgosvixConfig(api_key="...", trace_id=trace_id),
)
# All calls from this client share trace_id and appear together in the
# dashboard's traces waterfall view.
Privacy
The SDK records metadata only (= tokens, cost, latency, model name, error info, your tags). Prompts and completions are NOT recorded by default. Opt-in plain-text storage (with PII redaction + AES-256 encryption + 7-30 day retention + 1-click delete) is planned for v1.5 — see https://argosvix.com/privacy for details.
Pricing table
PRICING is a snapshot updated quarterly from each provider's official pricing page. Unknown models return 0.0 cost + a warning. To verify a model is known:
from argosvix import calculate_cost
cost = calculate_cost("openai", "gpt-5.5", prompt_tokens=1000, completion_tokens=500)
print(cost) # 0.0125 USD
Development
# install with dev deps
pip install -e ".[dev]"
# run tests
pytest
# lint
ruff check argosvix tests
License
MIT © Yuto Makihara (Argosvix). See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file argosvix-0.4.0a1.tar.gz.
File metadata
- Download URL: argosvix-0.4.0a1.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2039fe7da44f34334134696c1d3fb191f17115ec9008f3830481656076032da6
|
|
| MD5 |
acd8cb20e796fe5bf9edbc6f31783784
|
|
| BLAKE2b-256 |
2bf07a721527feb1548358fd6cfd7c540eeac3ce4abc448f8f5f3b66a3fe53ee
|
Provenance
The following attestation bundles were made for argosvix-0.4.0a1.tar.gz:
Publisher:
publish-python.yml on argosvix/Argosvix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
argosvix-0.4.0a1.tar.gz -
Subject digest:
2039fe7da44f34334134696c1d3fb191f17115ec9008f3830481656076032da6 - Sigstore transparency entry: 1675654593
- Sigstore integration time:
-
Permalink:
argosvix/Argosvix@a703765b31742bc9c67fe023e0f6550d64ba698e -
Branch / Tag:
refs/tags/sdk-python-v0.4.0a1 - Owner: https://github.com/argosvix
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@a703765b31742bc9c67fe023e0f6550d64ba698e -
Trigger Event:
push
-
Statement type:
File details
Details for the file argosvix-0.4.0a1-py3-none-any.whl.
File metadata
- Download URL: argosvix-0.4.0a1-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f28e19c0218fc9da8e7910120a5ed09135aad7b1d2e701456f886bceec37425
|
|
| MD5 |
73af249a7d8eb0225cd621895af217e7
|
|
| BLAKE2b-256 |
806939670da298ddc48cf6e8acf8bbaf13e4a219a829f0f4575913d62007fc1a
|
Provenance
The following attestation bundles were made for argosvix-0.4.0a1-py3-none-any.whl:
Publisher:
publish-python.yml on argosvix/Argosvix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
argosvix-0.4.0a1-py3-none-any.whl -
Subject digest:
0f28e19c0218fc9da8e7910120a5ed09135aad7b1d2e701456f886bceec37425 - Sigstore transparency entry: 1675654623
- Sigstore integration time:
-
Permalink:
argosvix/Argosvix@a703765b31742bc9c67fe023e0f6550d64ba698e -
Branch / Tag:
refs/tags/sdk-python-v0.4.0a1 - Owner: https://github.com/argosvix
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@a703765b31742bc9c67fe023e0f6550d64ba698e -
Trigger Event:
push
-
Statement type: