Ondine
Batch-process your DataFrames with LLMs, without the boilerplate.
Agents reason row-by-row. Ondine computes columns — 100,000 rows for $0.48 (projected), crash-safe, on any of 100+ providers.
ondine.dev · Docs · PyPI
The pain
Running an LLM over 10,000 rows should be one call. In practice it becomes a script: loop over rows, parse JSON by hand, retry on 429, recompute what already ran after a crash, and add up the bill in a spreadsheet. Every team writes that script, and rewrites it again for the next dataset.
Ondine replaces that script with one function. You describe the column you want in natural language; Ondine computes it across the whole table — with schema validation, budget caps, crash-safe checkpoints, and cost tracking turned on by default.
from ondine import enrich
df = enrich(
"reviews.csv",
"Classify the tone of: {review}",
output_columns=["sentiment"],
model="gpt-4o-mini",
budget=5.0,
)
That's the whole interface. The LLM stops being a service you call in a loop. It becomes a column function inside your DataFrame.
Install
pip install ondine
Python 3.10+. Works with any LLM through LiteLLM: OpenAI, Anthropic, Groq, Mistral, Cerebras, Ollama, MLX, vLLM, SGLang, 100+ others.
Quickstart
Two ways in. enrich() for the common case (one prompt, one table, get a table back). PipelineBuilder when you need to chain options.
· run the notebook below in a free Colab instance with a free Groq key — first output in under 30 seconds.
from ondine import enrich, PipelineBuilder
# 1. enrich() — the one-liner front door
df = enrich(
"reviews.csv",
"Classify sentiment and extract the topic from: {review}",
output_columns=["sentiment", "topic"],
model="gpt-4o-mini",
budget=5.00,
)
# 2. PipelineBuilder — same engine, explicit control
result = (
PipelineBuilder.create()
.from_csv("reviews.csv",
input_columns=["review"],
output_columns=["sentiment", "topic"])
.with_prompt("Classify sentiment and extract the key topic from: {review}")
.with_llm(provider="openai", model="gpt-4o-mini")
.with_batch_size(50)
.with_max_budget(5.00)
.build()
.execute()
)
print(f"Processed {result.metrics.processed_rows} rows · ${result.costs.total_cost:.2f}")
One builder chain: input columns, prompt, model, budget cap. Multi-column outputs get a JSON parser; schema enforcement, checkpointing, and cost tracking are on by default.
When to use Ondine vs an agent
Ondine is not an agent framework. Agents and Ondine sit at different layers and compose rather than compete.
| If your task is... | Use |
|---|---|
| Turn one table into a richer table (classify, extract, score, translate N rows) | Ondine |
| Run the same prompt over a whole column with a budget cap and crash recovery | Ondine |
| Produce eval labels / synthetic data / bulk structured fields at scale | Ondine |
| Reason, branch, call tools, and decide the next action per request | An agent framework |
| Hand off the deterministic batch layer your agent's outputs feed into | Ondine (the batch layer of an agentic stack) |
Rule of thumb: if you know the prompt ahead of time and the data is a table, that's Ondine. If the prompt depends on what the model just decided, that's an agent — and Ondine is the substrate it pushes bulk work onto.
Use cases
Same engine every time. The use case lives in the prompt.
1. Bulk enrichment
Add a column the LLM computes from existing ones. Sentiment, category, PII redaction, language detection — any per-row transform.
from ondine import enrich
df = enrich(
"support_tickets.csv",
"Detect the language of: {message}",
output_columns=["language"],
model="gpt-4o-mini",
)
2. Structured extraction
Pull typed fields out of free text and validate them against a Pydantic schema. Malformed JSON auto-retries.
from ondine import enrich
from pydantic import BaseModel
class Invoice(BaseModel):
vendor: str
total: float
currency: str
due_date: str
df = enrich(
"invoices.csv",
"Extract the vendor, total, currency, and due date from: {raw_text}",
output_columns=["vendor", "total", "currency", "due_date"],
model="gpt-4o-mini",
schema=Invoice,
budget=25.00,
)
3. Agent evaluation
Generate labels, rubric scores, or pass/fail verdicts for eval harnesses — the batch workload that agent frameworks don't ship.
from ondine import PipelineBuilder
result = (
PipelineBuilder.create()
.from_csv("agent_traces.csv",
input_columns=["trace", "criteria"],
output_columns=["score", "reasoning"])
.with_prompt("Score this agent trace against the rubric (1-10). "
"Return the score and a one-line justification.\n\n"
"Trace:\n{trace}\n\nRubric:\n{criteria}")
.with_llm(provider="openai", model="gpt-4o-mini")
.with_max_budget(10.00)
.with_checkpoint_interval(100)
.build()
.execute()
)
4. Synthetic data
Generate test fixtures, paraphrases, or contrastive examples at scale, then checkpoint so a crash mid-run doesn't lose the work.
from ondine import enrich
df = enrich(
"seed_prompts.csv",
"Write a paraphrase of this prompt in a different tone: {prompt}",
output_columns=["paraphrase"],
model="gpt-4o-mini",
batch_size=50,
budget=5.00,
)
One abstraction. Any transform.
What you get for free
The plumbing that df.apply() and a hand-rolled loop don't give you — on by default, no config required.
- Hard budget caps — pre-run cost estimate, live tracking, halts at your USD limit.
- Checkpointing to Parquet + a durable SQLite response cache, so a crash resumes from the last batch instead of restarting.
- Adaptive concurrency (Netflix Gradient2): shrinks on 429, grows on saturation, with
Retry-Afterparsing across provider header shapes. - Multi-row batching: pack N rows per call. 200 calls instead of 10,000 at
batch_size=50, with prefix caching for the shared system prompt. - Structured output: Pydantic schema enforcement with auto-retry on malformed JSON.
- Cost tracking in
Decimalprecision — no floating-point surprises on the invoice. - Any backend — 100+ providers via LiteLLM, plus local inference (Ollama, MLX, vLLM, SGLang). Swap with a string.
Advanced surfaces — Knowledge Base / RAG, OCR, grounding verification (Rust + SQLite + FTS5), the latency Router, distributed Redis rate limiting, Azure Managed Identity, and observability sinks (Langfuse, OpenTelemetry, Prometheus) — are documented at docs.ondine.dev.
Benchmark: Ondine vs naive loop vs agent-per-row
Three ways to classify the sentiment of 100K product reviews with an LLM.
Measured on a real API (DeepSeek deepseek-chat) over a 30-row sample per arm,
then extrapolated to 100K from the measured per-row rate. Full methodology,
raw numbers, and reproducibility commands in benchmarks/RESULTS.md.
| Approach | API calls (100K) | Wall-time (projected) | Cost (projected) | Rows lost on crash at 60% |
|---|---|---|---|---|
| Ondine (batched) | 6,666 | 3.8h | $0.48 | 0 |
| Naive loop (1 call/row) | 100,000 | 21.0h | $0.74 | 60,000 |
| Agent-per-row (plan→classify→reflect) | 300,000 | 3.0d | $2.46 | 60,000 |
- 15× fewer API calls than the naive loop; 45× fewer than agent-per-row.
- Crash-safety is binary: a
kill -9at 60% progress loses 100% of the naive/agent arms' completed work (60,000 rows of API spend gone, restart from row 0). Ondine's per-batch SQLite response cache recovered all 100,000 rows on resume with zero re-invocations. - On the measured sample, the agent arm was also less accurate (93.3% vs 100%) — three reasoning calls per review added cost without helping a single-label task.
The projection multiplies the measured per-row rate by 100,000. Ondine's real 100K wall-time is likely lower than shown (concurrency scales with batch count); the naive/agent projections are sequential and therefore tight. These are real measurements, not invented claims — rerun them yourself with
python benchmarks/repositioning.py.
Local inference
No API keys. No telemetry. Fully offline.
from ondine import QuickPipeline
# Ollama
pipeline = QuickPipeline.create(
data="reviews.csv",
prompt="Classify sentiment: {review}",
output_columns=["sentiment"],
model="ollama/qwen3.5",
)
# MLX (Apple Silicon, native; no server process)
pipeline = QuickPipeline.create(
data="reviews.csv",
prompt="Classify sentiment: {review}",
output_columns=["sentiment"],
model="mlx/mlx-community/Llama-4-Scout-Instruct-4bit",
)
Compared to alternatives
| Tool | What it does | Why pick Ondine |
|---|---|---|
| Instructor | f(prompt) → Pydantic (one call) |
Ondine applies that pattern to N rows, with budget caps, checkpoints, and adaptive concurrency |
| Pandas-AI | df.chat("question") |
Different job (query vs. compute) |
| LangChain batch | chain.batch([...]) |
No budget cap, no grounding, no crash-safe resume, no observability defaults |
| OpenAI/Anthropic Batch API | Provider-specific batch | No multi-provider, no grounding, 24-hour turnaround |
| Airflow/Prefect/Dagster | Workflow orchestrators | Heavy setup, no LLM-specific features. Ondine ships integrations for them. |
| Agent frameworks | Decide-the-next-action loop | Different layer. Ondine is the batch substrate agents push bulk work onto. |
Documentation
- ondine.dev — landing page + examples
- docs.ondine.dev — full reference:
enrich()/ Builder API, Context Store internals, grounding, Airflow/Prefect integrations, observability - examples/ — runnable scripts covering every major use case
- CHANGELOG.md — release notes
Contributing
PRs welcome. See CONTRIBUTING.md. Code style: Black + Ruff. Tests required for new features.
License
MIT. See LICENSE.
Acknowledgments
- LiteLLM — provider routing layer
- Instructor — the single-call pattern Ondine applies at DataFrame scale
- The Pydantic team — validation backbone
Who's behind this
Ondine is built and maintained by ptimizeroracle. It's the batch layer of an agentic stack — designed so the LLM work that doesn't need to branch can run as a column function instead of a script.
- Issues: https://github.com/ptimizeroracle/ondine/issues
- Discussions: https://github.com/ptimizeroracle/ondine/discussions
- Website: https://ondine.dev
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 ondine-1.11.0.tar.gz.
File metadata
- Download URL: ondine-1.11.0.tar.gz
- Upload date:
- Size: 296.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a97d11ad9461b7ddcb3dc4e62b12a5f580a7613f54a0a47fc21299b9b6c1d808
|
|
| MD5 |
85f4d79c362f1de12620ddc7a14b9f4c
|
|
| BLAKE2b-256 |
85fa824c96ea6075fbb68732822a22202eca9a72ba076a73764ca1d1ba0ca731
|
File details
Details for the file ondine-1.11.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: ondine-1.11.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb851016774a20281d6a2a5c6a285be38fee715604733546333064fb608b06c6
|
|
| MD5 |
8c4159c445557fc2b4d47ec450843745
|
|
| BLAKE2b-256 |
650c856cb15f6a5f053175d641d55a8e7f73c92cadca89e164a83a5a85889a38
|
File details
Details for the file ondine-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ondine-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b29b4cdb09b10021d23d42933edf4fbd2130ffddd596ae0c2b2467c0e89959e
|
|
| MD5 |
f1b166bf9726dbd4f35ca0b1f66247b1
|
|
| BLAKE2b-256 |
60272e8f40c3bebc5d95a2c3c0aef98d8c44f83af84ab639a6b50d1acceb4bdc
|
File details
Details for the file ondine-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ondine-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01407b5a12ccf67025c2279e23d2febcc91c587cee02497b8a3979fe78c4e44f
|
|
| MD5 |
670a001973813d031ca985d3a5bb66a2
|
|
| BLAKE2b-256 |
33a4a21c762f91b5221f87ced8291a2b611bf26d58b501bc2a2f2461629b350a
|
File details
Details for the file ondine-1.11.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: ondine-1.11.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.13, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a9dd5920e52d0e1bf9575742c6bf6288b8d25d427f4a7f68ee7256cbe8f7bf7
|
|
| MD5 |
b5430061492b9d59324a75d4a8310dee
|
|
| BLAKE2b-256 |
9449ff1371868ac546d3554fac1df4c0f30136f866b626484dba5d46f08856cf
|
File details
Details for the file ondine-1.11.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: ondine-1.11.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb53721ad9f65f6471fe412b0b15552e1ad70514f78bc1f5bbcd290e414b3f95
|
|
| MD5 |
ca52ca7013881014a627cab671384d93
|
|
| BLAKE2b-256 |
62d24110aaf37a305729d794905228ab5f149719b696744a661d7480439a12dd
|
File details
Details for the file ondine-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ondine-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ab2f45fa1fd4b899a4b996cc3646201c164dc46c9386e5963521ee06f49a06c
|
|
| MD5 |
fd5664fafa24b21136a664c77ef865e1
|
|
| BLAKE2b-256 |
fb443b702b38ec5e5090a506cbcf6ce7345808cc4c89612ab73e81beea6f80be
|
File details
Details for the file ondine-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ondine-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5398827ef3771e3e37710dde3220a34b7ed11c60734fb941ef82ee01b7617e5
|
|
| MD5 |
85afcd54c20155f51f3ddebc5ada2fc2
|
|
| BLAKE2b-256 |
f41611dc3b697126baf14d64b621dc1691be419d8ac7fa6399819996eb77c618
|
File details
Details for the file ondine-1.11.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: ondine-1.11.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.12, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c783ed213fc53a1d7b956caf440b60e3efb63386059d3afbcb09ae9c23249a7
|
|
| MD5 |
83890193e66c785fdc9ab22b57850743
|
|
| BLAKE2b-256 |
56c76804afa60eb23fb397076ae415e4c8af6a99e7ef5805a33feb7ad4bd5256
|
File details
Details for the file ondine-1.11.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: ondine-1.11.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8132e57bdcbea94542da2981b7a1aeaf755a5fc2ddb36c2088d8a7f8cdc8845
|
|
| MD5 |
d534abf34e06a7fd7867eba3e62f7c40
|
|
| BLAKE2b-256 |
77e94889ac0c290c5b526f42430f10ddbee9f7847d5722617c46ff9f7c951379
|
File details
Details for the file ondine-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ondine-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
958e60e28e5ae52507fb97a162d4ce3da9cc6cc5d75c0ea746975fa92f2b0dbe
|
|
| MD5 |
8f31bfd6fa4e53b42b6270a1f592bdc5
|
|
| BLAKE2b-256 |
41482fc3ad97ecabcd7116490167c993ecfddd084f967c0740e92105ed1758e8
|
File details
Details for the file ondine-1.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ondine-1.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c69bb9b44533a0e52478471fa75d54bc621fc8df459664b614903421a20e51bc
|
|
| MD5 |
79d91c9173062268cd254065fc21b42c
|
|
| BLAKE2b-256 |
6f77f01d753b3383a5524a2a7ef9664f16d8dd804dce3d5e462b331862bddce8
|
File details
Details for the file ondine-1.11.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: ondine-1.11.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.11, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9355d78e4b5de5bc4ed41198b2d4efa394c33dc068f4afdc32b1c3e0b8d56e56
|
|
| MD5 |
808b307b44aef0b1963a4bdaa295b6bf
|
|
| BLAKE2b-256 |
d1e4f23542eb9a756d322bea1bfbe0463c964c7bed58ce61e1c94784d0f04b3d
|
File details
Details for the file ondine-1.11.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: ondine-1.11.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe38b24d2cadfbd9f34a83495d06ef0664cbc1a01f5ea9f29a775429a006970d
|
|
| MD5 |
12cae3ba01330c28704b8f018a629e8f
|
|
| BLAKE2b-256 |
9da5fccfb5f6770d6b5147908957af0a90c16e47c3667802d6bc0e3eba86a3e8
|
File details
Details for the file ondine-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ondine-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
142d1d215d7171541fdc91bfabeae384f5ec98b7134ffc881c4adc01d8dca6c0
|
|
| MD5 |
ec1842d88bad596c87196ff989191738
|
|
| BLAKE2b-256 |
10a0c96a7c8f18d02bb7effa8dd67415a6acd1f61e4c38c70d80f90095720d0f
|
File details
Details for the file ondine-1.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ondine-1.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
841c42ba47c6d4b224efd8d2b130cdb173bc65d542fe9f207cac5f99e254f82d
|
|
| MD5 |
97ca22a16135b2a08392ca8947899c2c
|
|
| BLAKE2b-256 |
006fcb6e903219edf2c806edf5c2b2f9134da96832927cb557b2e90491b75188
|
File details
Details for the file ondine-1.11.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: ondine-1.11.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.10, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0340d3fce6729d1ccc3a67868588dedb171c0956a78f06346a89e0eb2e43b77a
|
|
| MD5 |
e17746040a440048cfe9253565f9abc8
|
|
| BLAKE2b-256 |
7cabd2963802cb546bfcd722a45eeb5ea2cf2832c49eb866e6104f012f7c2345
|