mostlyright-data 0.30.6__tar.gz → 0.31.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/PKG-INFO +1 -1
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/SKILL.md +24 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/commands.md +2 -1
- mostlyright_data-0.31.0/skills/mr-data-build/references/enriching-with-small-models.md +148 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/preparing-table-search.md +45 -2
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/source-credentials.md +3 -2
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/sources.md +9 -5
- mostlyright_data-0.31.0/src/mostlyright/data_harness/thin/enrichment.py +690 -0
- mostlyright_data-0.31.0/src/mostlyright/data_harness/thin/matching_benchmark.py +701 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/router.py +22 -2
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/run_prefix.py +1 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/runs.py +27 -1
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/stream.py +8 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/table_search_contract.json +1 -1
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4.py +9 -2
- mostlyright_data-0.31.0/src/mostlyright/data_harness/thin/v4_matching.py +586 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_public.py +18 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_query.py +9 -3
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_search.py +707 -18
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/vocabulary.py +15 -1
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/render.py +1 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/.gitignore +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/README.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/pyproject.toml +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/1-open-the-page-and-the-link-to-it-in-the-first-message.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/2-brief-two-to-four-questions-each-with-a-recommended-answer.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/3-probe-read-a-source-before-committing-to-it.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/4-decide-say-what-you-chose-what-you-refused-and-ask-one-question.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/5-draft-one-recipe-document-one-call.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/6-build-one-run-sized-to-acquire-every-measured-source-whole.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/7-interrogate-ask-the-run-what-it-actually-delivered.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/8-fix-revise-the-document-and-register-it-again.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/9-present-only-what-survived-inspection-with-caveats.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/agent-protocol.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/autonomous-delivery.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/before-the-first-tool-call.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/boundaries.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/cloud-authentication-preflight.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/cross-repository-protocol-reference.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/installation-parity.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/live-run.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/making-a-table-incremental.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/narrating-the-run.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/not-hosted-yet.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/one-install.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/patterns.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/prediction-labels.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/promote.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/readers.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/receipts.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/recipe-test.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/recording-a-stream-venue.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/recovering-an-import-failure.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/reference-pages.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/required-protocol.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/the-one-thing-to-say-about-the-skill-itself.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/transforms.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/user-communication-contract.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/writing-a-decision-record.md +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/agent_protocol.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/page_coverage.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/table_manifest.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/activity.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/backoff.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/categories.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/dataset-categories-v1.json +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/fast_features.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/progress_rate.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/progress_vocabulary.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/recipe_brief.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/recipe_explain.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/recipe_forecast.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/recipe_lint.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/recipe_test.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/refresh_rehearsal.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/release_check.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/run_diagnose.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/studio_capabilities.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/support.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/user_agent.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_catalog.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_connected.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_reader.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_search_contract.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/src/mostlyright/data_harness/ux/remediation.py +0 -0
|
@@ -9,6 +9,11 @@ Build the dataset the user requested, verify its contents, and report its actual
|
|
|
9
9
|
Use hosted commands with `--json` and returned identifiers. This core workflow governs the
|
|
10
10
|
references. Load the reference for the current stage only, not the entire library before starting.
|
|
11
11
|
|
|
12
|
+
Every build also improves the table beyond what was asked: derive what a rule can settle, and
|
|
13
|
+
offer the small models (classify, extract, match) for the judgement no rule can make. Do not
|
|
14
|
+
wait for the person to name a model. Steps 3, 4, 5, 8 and 10 say where, and
|
|
15
|
+
[enriching with small models](references/enriching-with-small-models.md) says how.
|
|
16
|
+
|
|
12
17
|
## Four gates
|
|
13
18
|
|
|
14
19
|
Every build passes these four gates in order. Do not skip one. The numbered steps below carry
|
|
@@ -102,6 +107,10 @@ step 6. The stage 3 reference holds its rule. Gate 4 is step 6.
|
|
|
102
107
|
[brief reference](references/2-brief-two-to-four-questions-each-with-a-recommended-answer.md).
|
|
103
108
|
In an unattended session use the established brief, record assumptions within its scope,
|
|
104
109
|
and do not wait for an absent person.
|
|
110
|
+
Run `mr-data models --json` once and add one line of enhancements to the brief message: at
|
|
111
|
+
most three, each saying what it would add, with your recommendation, as
|
|
112
|
+
[enriching](references/enriching-with-small-models.md#where-the-loop-runs) describes. A
|
|
113
|
+
judgement the request already names, such as a label per row, is part of the build.
|
|
105
114
|
|
|
106
115
|
## Research, register, build
|
|
107
116
|
|
|
@@ -109,6 +118,11 @@ step 6. The stage 3 reference holds its rule. Gate 4 is step 6.
|
|
|
109
118
|
from publisher claims. Read [source inspection](references/3-probe-read-a-source-before-committing-to-it.md)
|
|
110
119
|
for supported bounded paths and limitations. A missing capability is not evidence that the
|
|
111
120
|
source is invalid. Never claim inspected rows when only documentation was read.
|
|
121
|
+
Read the sampled rows column by column for what would improve them: text stored as numbers or
|
|
122
|
+
dates, coded text with a published format, code lists, names to join on, free text a label
|
|
123
|
+
would summarise, pages or documents holding facts no column holds. Sort each by
|
|
124
|
+
[the ladder](references/enriching-with-small-models.md#the-ladder-a-rule-first-a-model-for-the-rest):
|
|
125
|
+
a rule first, a model for the rest.
|
|
112
126
|
5. State the selected sources, joins, coverage and material limitations. Ask for a decision only
|
|
113
127
|
if existing authorization does not cover it. Read the
|
|
114
128
|
[recipe reference](references/5-draft-one-recipe-document-one-call.md) before authoring fields.
|
|
@@ -120,6 +134,10 @@ step 6. The stage 3 reference holds its rule. Gate 4 is step 6.
|
|
|
120
134
|
rules. If semantic search or JEV interpretation into filters/sorts is explicitly required,
|
|
121
135
|
do not register or queue a recipe that omits it; report the capability limit and wait.
|
|
122
136
|
Do not add search to existing recipes or rebuild existing datasets without an explicit request.
|
|
137
|
+
Put the deterministic derivations found in step 4 into the first revision. Add a classify
|
|
138
|
+
or extract source when the brief asked for that judgement or the person accepted the offer,
|
|
139
|
+
from the binding `mr-data models` lists, and let a rule settle every row it can before the
|
|
140
|
+
model reads the rest ([writing a classify source](references/enriching-with-small-models.md#writing-a-classify-source)).
|
|
123
141
|
Bind `dataset.id`, describe columns, declare checks and units, and register with
|
|
124
142
|
`mr-data recipe RECIPE.json --json`. Repair all lint findings before queuing work.
|
|
125
143
|
The server returns the recipe digest; do not compute or invent it.
|
|
@@ -210,6 +228,9 @@ merely to obtain a green run. Read [recovery details](references/agent-protocol.
|
|
|
210
228
|
coverage instead, as [receipts](references/receipts.md) describes. Carry the
|
|
211
229
|
correction into step 10. Read
|
|
212
230
|
[verification](references/7-interrogate-ask-the-run-what-it-actually-delivered.md).
|
|
231
|
+
Then run `mr-data models suggest RUN_ID --json`. It reads the run's preview and names where
|
|
232
|
+
the table could use a deterministic derivation or a model call, and whether this deployment
|
|
233
|
+
serves that model. Confirm each lead against the rows before you offer it.
|
|
213
234
|
9. Any truncated source means a preview, not the requested complete dataset. Inspect coverage
|
|
214
235
|
even when the run succeeded. Untruncated acquisition does not prove publisher pagination, nested
|
|
215
236
|
records or population coverage is complete. A null coverage window does not mean all history was acquired.
|
|
@@ -230,6 +251,8 @@ merely to obtain a green run. Read [recovery details](references/agent-protocol.
|
|
|
230
251
|
Search preparation runs independently: pending or failed indexing never means the data build
|
|
231
252
|
failed, and declared metadata alone never proves observed search quality.
|
|
232
253
|
Report rows and coverage actually verified, checks, limitations and the stable dataset link.
|
|
254
|
+
End with what would make the table better: the remaining enhancements, deterministic ones
|
|
255
|
+
first, each naming the column it reads and what it would add, and the model that would do it.
|
|
233
256
|
Read [delivery](references/9-present-only-what-survived-inspection-with-caveats.md) for details.
|
|
234
257
|
|
|
235
258
|
## Source-specific references
|
|
@@ -240,6 +263,7 @@ merely to obtain a green run. Read [recovery details](references/agent-protocol.
|
|
|
240
263
|
| Reader coordinate and options | [Readers](references/readers.md) |
|
|
241
264
|
| Connector or collection | [Sources](references/sources.md) |
|
|
242
265
|
| One request per row of another source, such as a decision model scoring each row | [Per-row requests](references/sources.md#authoring-a-per-row-request) |
|
|
266
|
+
| Which small models this deployment serves, the rule-first ladder, and classify and extract sources | [Enriching with small models](references/enriching-with-small-models.md) |
|
|
243
267
|
| SQL and joins | [Transforms](references/transforms.md) |
|
|
244
268
|
| Source credentials | [Credentials](references/source-credentials.md) |
|
|
245
269
|
| Live stream recording | [Streams](references/recording-a-stream-venue.md) |
|
{mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/commands.md
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Commands
|
|
2
2
|
|
|
3
|
-
These thirty-
|
|
3
|
+
These thirty-nine are the whole surface, alongside `acquire-slices`, which names a capability
|
|
4
4
|
gap rather than doing anything, and `export-hosted-candidate`, which is a backend operator step.
|
|
5
5
|
|
|
6
6
|
Every command that takes a run identifier also takes its first eight or more characters,
|
|
@@ -41,6 +41,7 @@ run in full.
|
|
|
41
41
|
| `mr-data parts` | List one table version's parts — the identifier, the row count, the byte size and the recorded bounds of each — so a training loader can shard them across workers and read a table no single file should hold. `--version` names a version rather than the live one, and `--from`/`--to` keep only the parts a value range cannot rule out. Nothing is downloaded by listing them; the pattern is under [Reading a table that is made of parts](7-interrogate-ask-the-run-what-it-actually-delivered.md#reading-a-table-that-is-made-of-parts). |
|
|
42
42
|
| `mr-data diff` | Compare two runs and say what changed. |
|
|
43
43
|
| `mr-data connections` | List saved workspace connections and their current recipe coordinates; `--dataset ID` filters to connections granted to that dataset. No credential values are returned. |
|
|
44
|
+
| `mr-data models` | List the small models a recipe can call on this deployment: each task (classify, extract, match), whether it is served, and each binding's route, pinned model, rate, today's usage and a request body to start from. `models suggest RUN_ID` reads the preview one run sealed and names, column by column, a deterministic derivation or a model call that would improve the table, with whether its model is served. Both read only and spend no model call. [Enriching with small models](enriching-with-small-models.md) says what to do with the answer. |
|
|
44
45
|
| `mr-data keys` | Enrol a source credential by name, list the names with their created and rotated times, and delete one. `keys set` reads the value from a file or from standard input and never from the command line; no command prints a value back. |
|
|
45
46
|
| `mr-data stream` | Record a public `wss://` venue so a build can read it. `stream document register --file F` admits the connector document, `stream registry create --digest D` admits a set of them, `stream probe` listens briefly and seals nothing, `stream capture --seconds N` records a bounded window, and `stream subscribe` keeps recording. `stream subscription {show|pause|resume|stop} ID` retains the legacy full-record interface. `stream subscription quiescence ID` reads the bounded server-computed proof; `pause-cas` and `resume-cas` read its ETag and make one conditional bounded write. An ambiguous CAS failure is not retried until a fresh invocation observes the resource again. `stream status ID` reads a capture or probe, and `stream recordings --document-digest D` names what a build could read and until when. `--seconds` is at most 600. `mr-data run` takes no duration: a build reads sealed batches and is bounded by them. |
|
|
46
47
|
| `mr-data open` | Mint a single-use, short-lived address that continues this session in a browser at one dashboard path, and print it. `--open` hands it to the platform opener. The credential decides who mints: a device credential — what `mr-data login` stores — mints at Cloud, and a personal access token mints at Studio. |
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
## Enriching with small models
|
|
2
|
+
|
|
3
|
+
Mostly Right builds the pipeline with an agent and then improves the table with small models
|
|
4
|
+
where code is not enough. Offering those improvements is part of every build. Do not wait for
|
|
5
|
+
the person to name a model: most people do not know which ones exist. Look for where the table
|
|
6
|
+
could be better while you probe, say what you found, and recommend what to add.
|
|
7
|
+
|
|
8
|
+
### What this deployment serves
|
|
9
|
+
|
|
10
|
+
Run `mr-data models --json` once per session, before the brief message. It lists three tasks and
|
|
11
|
+
whether each is served here, read from Studio's platform credential listing.
|
|
12
|
+
|
|
13
|
+
| Task | What it does | Binding |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| classify | Labels each row from a text column with yes/no or choice questions: a topic, a category, a sentiment, a flag no keyword rule decides. Each answer carries a probability per label. | `classify` (Clef, self-hosted) first; `openrouter-decisions` (TypeSafe's Jev) answers the same questions |
|
|
16
|
+
| extract | Pulls named fields (names, amounts, dates, places) out of page or document text into columns. Every value appears verbatim in the input or is dropped. | `extract` (the extraction model, NuExtract-based) |
|
|
17
|
+
| match | Links the same entity across tables or within one. | none yet: `planned` |
|
|
18
|
+
|
|
19
|
+
Each served binding comes with its route, its pinned `model`, its rate, today's usage and quota,
|
|
20
|
+
and a `request_template`. Copy `origin`, `method`, `path_template` and `model` from the listing
|
|
21
|
+
exactly, and write the same origin as the source's `connector.origin` and as the only entry of
|
|
22
|
+
`pages.allowed_origins`. Clef's and the extraction model's origins are this deployment's own
|
|
23
|
+
service addresses, which no one can guess: the platform credential is chosen by that route and pin, so a guessed origin or a model
|
|
24
|
+
alias is refused at registration with `PLATFORM_CREDENTIAL_UNBOUND`. The person enrols no key.
|
|
25
|
+
The person pays nothing for these calls. They count against the workspace's daily quota, which
|
|
26
|
+
`mr-data recipe forecast` reports. Prefer `classify` over `openrouter-decisions` for new work:
|
|
27
|
+
Mostly Right pays OpenRouter per Jev call, and Clef answers the same request body.
|
|
28
|
+
|
|
29
|
+
A task listed `not_served` or `planned` is offered as coming, never written into a recipe. For
|
|
30
|
+
`match`, join on a normalized deterministic key now and say that model matching for the rows the
|
|
31
|
+
key cannot settle is coming.
|
|
32
|
+
|
|
33
|
+
### The ladder: a rule first, a model for the rest
|
|
34
|
+
|
|
35
|
+
Improve the table with code wherever a rule can decide, and spend a model call only on the
|
|
36
|
+
judgement no rule can make. Both are improvements to offer.
|
|
37
|
+
|
|
38
|
+
**Deterministic, in the transform, no model:**
|
|
39
|
+
|
|
40
|
+
- Cast text to its real type: numbers, booleans, dates and timestamps in UTC.
|
|
41
|
+
- Decode a published format into columns with `regexp_extract`: a METAR weather report, a
|
|
42
|
+
vehicle identification number, an ICD or NAICS code, a postcode.
|
|
43
|
+
- Map a documented code list to readable labels with a `CASE`, from the publisher's own list.
|
|
44
|
+
- Derive categories a published standard defines from columns the table already has. The FAA
|
|
45
|
+
flight category (VFR, MVFR, IFR, LIFR) follows from ceiling and visibility; fog or thunderstorm
|
|
46
|
+
flags follow from the present-weather codes.
|
|
47
|
+
- Build a normalized key (lowercase, trimmed, punctuation and legal suffixes such as Inc, LLC and
|
|
48
|
+
Ltd removed) for an exact join or a dedupe.
|
|
49
|
+
|
|
50
|
+
**A model, through a per-row source:**
|
|
51
|
+
|
|
52
|
+
- classify: what a row's text is about, whether it states something, its sentiment or intent,
|
|
53
|
+
which of the person's categories it belongs to.
|
|
54
|
+
- extract: facts stated in prose, a page or a document that no column holds.
|
|
55
|
+
- match, once served: two records that are the same entity under different spellings.
|
|
56
|
+
|
|
57
|
+
**Both together.** When a rule settles most rows, settle those in the transform and let the
|
|
58
|
+
model label the rest, then `coalesce` the rule's label with the model's in the transform. Say
|
|
59
|
+
which rows each label came from in the column description. Where Studio serves it, the rule can
|
|
60
|
+
also keep the rows it settled from being sent at all: see [Needs Studio 4.14](#needs-studio-414).
|
|
61
|
+
|
|
62
|
+
### Where the loop runs
|
|
63
|
+
|
|
64
|
+
1. **Brief (step 3).** Read what the table is for and which judgements the person named. Run
|
|
65
|
+
`mr-data models --json`. In the brief message add one line of enhancements: at most three,
|
|
66
|
+
each saying what it adds in the person's words, with your recommendation. A judgement the
|
|
67
|
+
brief already asks for ("which reports mention fog", "tag each filing by sector") is part of
|
|
68
|
+
the build, not an offer.
|
|
69
|
+
2. **Probe (step 4).** Read the sampled rows column by column with the ladder: each free-text,
|
|
70
|
+
coded, name and document column. Note which rule or model would improve it.
|
|
71
|
+
3. **Draft (step 5).** Write the deterministic derivations into the first revision: they cost
|
|
72
|
+
nothing and are checked like any other column. Write a model source when the brief asked for
|
|
73
|
+
that judgement or the person accepted the offer. In an unattended build, add a model source
|
|
74
|
+
only for a judgement the brief names, and record the others as offers.
|
|
75
|
+
4. **Test (gate 3).** A model source is tested on the scratch table like any per-row source, with
|
|
76
|
+
`pages.stop_at_budget: true` and a small `pages.max_fetches_per_run`. Read a few answers
|
|
77
|
+
against the rows they label before the full.
|
|
78
|
+
5. **After the run (step 8).** Run `mr-data models suggest RUN_ID --json`. It reads the run's
|
|
79
|
+
preview and names, column by column, a deterministic derivation or a model call that would
|
|
80
|
+
improve the table, each with `model_status` for the model it needs. It spends no call. Read
|
|
81
|
+
it as leads: confirm each against the rows before offering it.
|
|
82
|
+
6. **Deliver (step 10).** End the report with what would make the table better: the remaining
|
|
83
|
+
offers, deterministic ones first, each with the column it reads and what it would add. One
|
|
84
|
+
concrete sentence each, not a menu of everything possible.
|
|
85
|
+
|
|
86
|
+
### Writing a classify source
|
|
87
|
+
|
|
88
|
+
A classify source is a [per-row request](sources.md#authoring-a-per-row-request) over the source
|
|
89
|
+
that holds the text. Start from the listing's `request_template` and fill in:
|
|
90
|
+
|
|
91
|
+
- `parameters` and the `{text_column}` placeholder in `state`: rename both to the upstream
|
|
92
|
+
source's column that holds the text. The template's `text_column` and `id` are placeholders,
|
|
93
|
+
and registration refuses a parameter or carried column the upstream does not have.
|
|
94
|
+
- `questions`: one entry per column you want. A `choice` question names its labels as keys of
|
|
95
|
+
`criteria` (1 to 64); include a "none fits" label so a row is never forced into a wrong one. A
|
|
96
|
+
`noul` question answers one statement true or false, and its `criteria` may describe only
|
|
97
|
+
`true` and `false`. A `score` question rates the text on a list of 1 to 64 levels. Keep the
|
|
98
|
+
instructions to one sentence about the text alone. `state` takes at most 65,536 characters.
|
|
99
|
+
- `carry_columns`: the upstream key and the columns the transform needs, so the transform reads
|
|
100
|
+
this source alone.
|
|
101
|
+
- Answers are reused: a request already answered under the same pin and question is not sent
|
|
102
|
+
again, so a refresh pays only for new rows.
|
|
103
|
+
|
|
104
|
+
The Reader reads each label's probability by JSON pointer, as the Jev example in
|
|
105
|
+
[per-row requests](sources.md#authoring-a-per-row-request) shows. Declare each probability column
|
|
106
|
+
`required: false`, rank them in the transform, and keep the top label and its probability. A
|
|
107
|
+
table that publishes a model's label names the model pin in the column description and keeps the
|
|
108
|
+
probability beside the label.
|
|
109
|
+
|
|
110
|
+
### Writing an extract source
|
|
111
|
+
|
|
112
|
+
An extract source has the same per-row shape with the extraction body
|
|
113
|
+
([the extract binding](https://mostlyright.md/docs/reference/sources/)):
|
|
114
|
+
|
|
115
|
+
- `input` is `{"view": "input", "text": "{text_column}"}`. `text` is the only placeholder, and it
|
|
116
|
+
names a column of the upstream source, never of the transform. Give it visible text, not raw
|
|
117
|
+
HTML: read the page in the upstream source with a Reader such as `html.web_extract`
|
|
118
|
+
([Readers](readers.md)).
|
|
119
|
+
- `fields` is a literal list of 1 to 64 `{name, description}` entries. Changing it changes the
|
|
120
|
+
source's capture identity, so settle the list in the brief.
|
|
121
|
+
- `one: true` asks for a single object per row, for a detail page; leave it out for a list of
|
|
122
|
+
records per row.
|
|
123
|
+
|
|
124
|
+
Each answer is grounded: every value appears verbatim in the input, and `spans` say where. A row
|
|
125
|
+
whose text states none of the fields returns no record, which is an answer, not a failure.
|
|
126
|
+
|
|
127
|
+
### Saying it
|
|
128
|
+
|
|
129
|
+
Name the model by what it does, not by its binding: "a small classification model reads each
|
|
130
|
+
report and labels the weather regime", "a small extraction model pulls the issuer and the amount
|
|
131
|
+
out of each filing". Say how many rows it would read, that it costs the person nothing, and what
|
|
132
|
+
the new columns would be called. Never say a model was used when the table has no source that
|
|
133
|
+
called it, and never present a model's label as fact: it is a label with a probability.
|
|
134
|
+
|
|
135
|
+
### Needs Studio 4.14
|
|
136
|
+
|
|
137
|
+
Check first: run `mr-data recipe explain RECIPE.json --json` and read `studio_capabilities`. Use
|
|
138
|
+
this only when `row_filter` (and, for the second item, `per_row_revisit_interval`) is true there.
|
|
139
|
+
When it is false, the answer is "not available on this Studio yet": every upstream row is sent,
|
|
140
|
+
and the transform settles which label wins.
|
|
141
|
+
|
|
142
|
+
- State the deterministic rule as the per-row source's `row_filter`, the negation of the rows the
|
|
143
|
+
rule settles, so those rows cost no call
|
|
144
|
+
([filter before paying](making-a-table-incremental.md#filter-before-paying-row_filter)). It
|
|
145
|
+
must never drop a row the transform keeps.
|
|
146
|
+
- Where the per-row interval is served too, state `pages.revisit` as a long interval, up to a
|
|
147
|
+
year: the model is pinned and the question fixed, so an answer does not change and should be
|
|
148
|
+
carried forward ([a freshness bound](making-a-table-incremental.md#a-freshness-bound-on-per-row-answers)).
|
|
@@ -16,10 +16,16 @@ meaning-based retrieval over descriptions, and a planner that turns a sentence i
|
|
|
16
16
|
| `search propose --recipe FILE` | Returns a starter spec. It never edits the file. |
|
|
17
17
|
| `search validate` | Checks a spec and its evaluation cases against the pinned Studio contract, then asks Studio. |
|
|
18
18
|
| `search locate` | Turns a title, a year or an id into the `[part, row]` locator an evaluation case needs. |
|
|
19
|
+
| `search sample` | Reads up to 100 rows of a sealed version, with `--columns` to project. |
|
|
20
|
+
| `search values` | Lists the most frequent values of one `--column`, with `--prefix` to narrow them. |
|
|
21
|
+
| `search preview` | Runs `--query` or a `--plan` file as an unranked scan under a revision's spec, activated or not. |
|
|
19
22
|
| `search configure` | Stores a draft revision of the spec, with its evaluation cases. |
|
|
23
|
+
| `search add-cases` | Declares a new revision that adds `--cases` to the draft or to `--revision`. |
|
|
24
|
+
| `search evaluate` | Reports where a revision's evaluation measurement stands. It starts nothing. |
|
|
20
25
|
| `search build` | Queues a search build for a sealed version, or for one revision with `--revision`. |
|
|
21
26
|
| `search status` | Reports package readiness, job progress and the failure reason. |
|
|
22
27
|
| `search try` | Runs one query against the table's live search and prints rows, plan and timings. |
|
|
28
|
+
| `search query` | Searches a public table through Cloud's search route, as its page and MCP do. |
|
|
23
29
|
| `search activate` | Switches the version's live search to a built generation. |
|
|
24
30
|
| `search rollback` | Switches back to an earlier generation. |
|
|
25
31
|
| `search explain` | Shows how Studio parses one query into filters and sorts. |
|
|
@@ -28,6 +34,15 @@ meaning-based retrieval over descriptions, and a planner that turns a sentence i
|
|
|
28
34
|
Exit codes are stable. 0 means complete. 1 means failed or invalid. 3 means still running or
|
|
29
35
|
served by the fallback scan. 4 means ambiguous.
|
|
30
36
|
|
|
37
|
+
`sample`, `values` and `preview` need Studio 4.41 and a warm worker. They queue one bounded query
|
|
38
|
+
and wait for its rows the way `mr-data query` does. A read still running exits 3; run the same
|
|
39
|
+
command again to read the same query back. `QUERY_NO_WARM_EXECUTOR` means no worker holds the
|
|
40
|
+
workspace: open one with `mr-data probe`, wait the `retry_after_seconds` it names, and retry.
|
|
41
|
+
`evaluate` exits 0 on `passed` and `not_required`, 1 on `failed`, `build_failed` and
|
|
42
|
+
`measurement_failed`, and 3 on `no_cases` and while the revision is unbuilt, building or
|
|
43
|
+
unmeasured. An older
|
|
44
|
+
Studio answers these verbs with `THIN_SEARCH_CAPABILITY_UNAVAILABLE`.
|
|
45
|
+
|
|
31
46
|
## 1. Check the capability
|
|
32
47
|
|
|
33
48
|
Probe the deployment before you add `table.search` to a recipe:
|
|
@@ -129,8 +144,8 @@ An alias maps a phrase to an exact filter. Use one for each category value a use
|
|
|
129
144
|
{"phrase": "tv show", "column": "media_type", "operator": "eq", "value": "tv"}
|
|
130
145
|
```
|
|
131
146
|
|
|
132
|
-
Phrases are unique and casefolded. Take the values from the built table with
|
|
133
|
-
from documentation. Ordered comparisons need a numeric or date column. `contains` needs a text
|
|
147
|
+
Phrases are unique and casefolded. Take the values from the built table with
|
|
148
|
+
`mr-data search values TABLE_ID --column genres` or `mr-data query`, not from documentation. Ordered comparisons need a numeric or date column. `contains` needs a text
|
|
134
149
|
column. Decimal values travel as strings. Never invent a meaning such as "best" when the brief
|
|
135
150
|
does not name a metric. Leave that word unresolved, or add an explicit alias such as
|
|
136
151
|
"highest rated".
|
|
@@ -311,6 +326,8 @@ mr-data search build TABLE_ID --version VERSION_ID --revision REVISION_ID --json
|
|
|
311
326
|
mr-data search status --job JOB_ID --json
|
|
312
327
|
```
|
|
313
328
|
|
|
329
|
+
To add cases to the draft without restating its spec, run `mr-data search add-cases TABLE_ID
|
|
330
|
+
--version VERSION_ID --cases more-cases.json --json`. It answers the new revision; build that one.
|
|
314
331
|
Leave out `--spec` to declare the `table.search` spec of the recipe that sealed the version.
|
|
315
332
|
Use that to add evaluation cases without retyping the spec. Without `--spec` the client cannot
|
|
316
333
|
check locally that semantic cases include a paraphrase and a hard negative. Studio checks them
|
|
@@ -354,6 +371,32 @@ Add `"engine": "resident"` and `"settled": true` to `search` to use the live pac
|
|
|
354
371
|
does. Public query prints Cloud stage durations under `result.timings`, the HTTP status and the
|
|
355
372
|
request ID. Keep a refusal's `detail` with its request ID.
|
|
356
373
|
|
|
374
|
+
## 15. Search a table the way its page does
|
|
375
|
+
|
|
376
|
+
A public table with a ready search package answers through Cloud's search route. The dataset
|
|
377
|
+
page, the Public API's `POST /api/v2/public/tables/{id}/search`, MCP `search_table` and this verb
|
|
378
|
+
all reach the same search service with the same plans. There is no scan fallback.
|
|
379
|
+
|
|
380
|
+
```sh
|
|
381
|
+
mr-data search query PUBLIC_TABLE_ID --query "incepton" --json
|
|
382
|
+
mr-data search query PUBLIC_TABLE_ID --query "dun" --unsettled --page-size 5 --json
|
|
383
|
+
mr-data search query PUBLIC_TABLE_ID --query "dune" --count --json
|
|
384
|
+
mr-data search query PUBLIC_TABLE_ID --query "dune" --plan plan.json --cursor NEXT_CURSOR --json
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
A query is settled by default, so the planner runs. `--unsettled` answers as the search box does
|
|
388
|
+
while someone types, without the planner. `--page-size` is 1 to 100 (default 20). `--count` asks
|
|
389
|
+
for the number of matching rows. To read the next page, save the answer's `plan` to a file and
|
|
390
|
+
pass it with `--plan` beside `--cursor NEXT_CURSOR`; a cursor continues one plan.
|
|
391
|
+
|
|
392
|
+
The answer carries the rows as `{row_id, fields}`, the applied `plan`, the `planner` report, the
|
|
393
|
+
`retrieval` mode, `next_cursor`, the `package` it read, which `service` answered, the stage
|
|
394
|
+
timings under `service_timings_ms` and Cloud's `Server-Timing` under `cloud_timings_ms`.
|
|
395
|
+
|
|
396
|
+
A table without a ready package is refused with Cloud's `search_unavailable` and a reason:
|
|
397
|
+
`preparing` (retry after the time it gives), `not_public`, `no_package`, or Studio's own reason.
|
|
398
|
+
A plan or cursor the service refuses answers `invalid_plan` with diagnostics.
|
|
399
|
+
|
|
357
400
|
## Rules
|
|
358
401
|
|
|
359
402
|
- Never emulate search locally, and never claim readiness from a declaration.
|
|
@@ -38,8 +38,9 @@ A [per-row request](sources.md#authoring-a-per-row-request) presents a key by it
|
|
|
38
38
|
`request.auth` says. A saved connection cannot stand in for it.
|
|
39
39
|
- `platform` presents a key Mostly Right holds, so the user enrols nothing.
|
|
40
40
|
|
|
41
|
-
The platform key serves
|
|
42
|
-
|
|
41
|
+
The platform key serves every binding `mr-data models --json` lists: Clef for classification,
|
|
42
|
+
the extraction model where it is served, and OpenRouter's decisions endpoint for TypeSafe's Jev
|
|
43
|
+
decision model, pinned to `typesafe/jev-1.13`. Do not ask the user for a key to use any of them. A user who
|
|
43
44
|
prefers their own key enrols it with `mr-data keys set`. The source then states
|
|
44
45
|
`opaque_reference`, `credential.secret_name` and `"auth": {"kind": "bearer"}`.
|
|
45
46
|
|
{mostlyright_data-0.30.6 → mostlyright_data-0.31.0}/skills/mr-data-build/references/sources.md
RENAMED
|
@@ -251,11 +251,15 @@ breaks a rule above.
|
|
|
251
251
|
| `opaque_reference` | `credential.secret_name` and `request.auth` | a key the user enrolled with `mr-data keys set` |
|
|
252
252
|
| `platform` | no `credential` and no `auth` | an endpoint Mostly Right holds a key for |
|
|
253
253
|
|
|
254
|
-
The platform credential needs no key from anyone, and any subscribed workspace may use it.
|
|
255
|
-
one
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
254
|
+
The platform credential needs no key from anyone, and any subscribed workspace may use it. Each
|
|
255
|
+
binding is one route and one pinned model, and `mr-data models --json` lists the ones this
|
|
256
|
+
deployment serves: Clef for classification (`classify`), TypeSafe's Jev through OpenRouter
|
|
257
|
+
(`openrouter-decisions`, `POST https://openrouter.ai/api/alpha/decisions` with `/model` set to
|
|
258
|
+
`typesafe/jev-1.13`) and, where it is served, the extraction model (`extract`). Pin the exact
|
|
259
|
+
model the listing names. A floating alias such as `~typesafe/jev-latest` is refused at
|
|
260
|
+
registration with `PLATFORM_CREDENTIAL_UNBOUND`. Keep the origin, method and path exactly as
|
|
261
|
+
listed, state no query and no literal header, and write `/model` as a literal.
|
|
262
|
+
[Enriching with small models](enriching-with-small-models.md) says when to offer each. Write no other body
|
|
259
263
|
member whose name differs from `model` only in case. A user who holds their own OpenRouter key can
|
|
260
264
|
present it with `opaque_reference` instead.
|
|
261
265
|
|