Prepare data for your own AI
Reading data is not permission to use it for AI. Ophiolite keeps a separate choice, made by the owner of each original or result, for three uses: Find similar data (embedding), Train models and Test models (evaluation). Everything below happens inside your deployment; Ophiolite runs no hosted model and trains nothing.
Decide who may use an item for AI
Section titled “Decide who may use an item for AI”In the item’s sharing panel, Use for AI lists the people who can read it. Tick what each may do and choose Save AI use. The choice is saved against the version you saw (a conflict asks you to reload), recorded in the activity history, and only counts while the person can read the item: removing their read access, or narrowing who can ever see the original, removes it. People who can read an item see only their own permission. The owner may always use their own data.
Export a training corpus
Section titled “Export a training corpus”from ophiolite import Clientfrom ophiolite.corpus import verify
corpus = client.export_corpus([(asset, revision, ['GR']), ...], 'corpus-2026-09', purpose='training', seed=7, fractions=(0.8, 0.1, 0.1))verify('corpus-2026-09')The server first authorizes the whole selection for that purpose — one item without permission refuses everything and names only its position — and records the authorization (valid for 15 minutes; revoking later stops future exports, not one already authorized). The folder then holds:
bundle/— an ordinary portable bundle: exact originals, descriptors and curves with their checksums, units, depth references and missing values.corpus.json—ophiolite.ai-corpus/1: the exact selection, why each item was allowed (owner or granted), the purpose, the split algorithm, seed and fractions, the group and split of every item, declared transformations (none: values as published), file checksums, the SDK version and an MLflow-style dataset reference (name,digest,source).samples.jsonl(andsamples.parquetwhenpyarrowis installed) — one row per sample: item, group, split, curve, unit, depth, depth unit and reference, value (nullfor missing; zero stays zero).
Splits keep a well’s data together: every item is grouped by its LAS WELL (as
las-well:<WELL>) or by a group you name (groups={asset: 'north block'}); the split is
sha256(seed ‖ NUL ‖ group) placed on the fractions (split/1). Items without a well need a
named group. verify() recomputes checksums, membership, splits and every sample from the
bundle.
Search inside the deployment
Section titled “Search inside the deployment”client.search('gamma ray near the reservoir') ranks what you may read by its description
(name, type, curves, units, well, how it was made). By default the ranking uses words. An
operator can set OPHIOLITE_EMBEDDING_COMMAND to a local program that reads one JSON text
per line and prints one vector per line; the gateway always starts it in a network namespace
with no interfaces (unshare -rn), so it cannot reach any host, and refuses to run it
otherwise. The gateway host must allow unprivileged user namespaces (on Ubuntu 24.04:
kernel.apparmor_restrict_unprivileged_userns=0, or an AppArmor profile for the gateway);
where it does not, search by meaning answers “unavailable” and nothing is sent to the model. Only items you may use to find similar data are sent to the model; the answer
says how many readable items were not searched by meaning, and method='words' searches
them all by words. Vectors are cached per model and exact version.
Not yet available
Section titled “Not yet available”An MCP search tool for AI assistants (it waits for the remote MCP endpoint), model training or hosting, and vector databases.
