Initial public ModelForge release
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# Capabilities
|
||||
|
||||
A capability is the stable interface a project binds to. `rag.embedding@1` is a promise about input
|
||||
and output shape and about semantics — not about which model, node or file satisfies it.
|
||||
|
||||
## Why this exists
|
||||
|
||||
Bind an application to a model and you have coupled it to a decision you will want to change: a
|
||||
better model, a different quantisation, a different node. Every one of those becomes a
|
||||
coordinated change across every consumer.
|
||||
|
||||
Bind it to a capability and the substitution is ModelForge's problem. That is why
|
||||
[SYSTEM_ARCHITECTURE.md](architecture/SYSTEM_ARCHITECTURE.md) establishes that applications bind to capabilities and never to model
|
||||
paths, and why nothing in the platform couples project code to a Hugging Face repository name.
|
||||
|
||||
## The pieces
|
||||
|
||||
| Concept | What it is |
|
||||
| --- | --- |
|
||||
| **Capability** | A named kind of work: `rag.embedding`, `document.ocr`, `vision.embedding` |
|
||||
| **Capability contract** | A version of that capability with a fixed input and output schema |
|
||||
| **Capability deployment** | A specific artifact set and runtime profile serving a contract |
|
||||
| **Project binding** | A project's declaration that it uses a contract, on a channel |
|
||||
| **Service client** | An application's credential, scoped to specific capabilities |
|
||||
|
||||
A contract has at most one `stable` deployment at a time. That is enforced by a partial unique index
|
||||
in the database *and* asserted by a platform invariant — two layers, because the invariant is there
|
||||
for the case where the guard has been bypassed.
|
||||
|
||||
## Contracts shipped with v1.0.0
|
||||
|
||||
| Capability | Version |
|
||||
| --- | --- |
|
||||
| `rag.embedding` | 1 |
|
||||
| `rag.reranking` | 1 |
|
||||
| `document.ocr` | 1 |
|
||||
| `vision.embedding` | 1 |
|
||||
| `speech.transcription` | 1 |
|
||||
| `assistant.general` | 1 |
|
||||
| `assistant.vision` | 1 |
|
||||
|
||||
A contract being defined in a manifest does **not** mean anything is serving it. A deployment
|
||||
requires a model artifact acquired, verified and promoted through the lifecycle. A newly installed
|
||||
control plane has contracts available to register and no deployments — see
|
||||
[FIRST_RUN.md](FIRST_RUN.md).
|
||||
|
||||
## Channels
|
||||
|
||||
`stable`, `experimental` and the production flag are separate ideas. A project can bind to
|
||||
`experimental` for a capability while another binds to `stable` for the same one, and a deployment
|
||||
being production is an explicit, approved, audited state — `no_hidden_auto_promotion` asserts that
|
||||
no production deployment exists without a recorded production approval.
|
||||
|
||||
## Upgrade classes
|
||||
|
||||
Every contract declares what a change to it means:
|
||||
|
||||
| Class | Meaning |
|
||||
| --- | --- |
|
||||
| compatible | The replacement can serve existing consumers unchanged |
|
||||
| `requires_reindex` | The embedding space changed; existing vectors are not comparable |
|
||||
|
||||
`requires_reindex` is the one that cannot be waved through. A project binding must declare that it
|
||||
supports reindex migration before it can bind such a contract, and the migration engine will not
|
||||
swap an alias underneath data that has not been reindexed.
|
||||
|
||||
## Invoking
|
||||
|
||||
See [PROJECT_INTEGRATION.md](PROJECT_INTEGRATION.md).
|
||||
|
||||
## What a capability guarantees
|
||||
|
||||
- the input and output schema for its version;
|
||||
- that only an approved, verified artifact is behind it;
|
||||
- that a refusal is named — `NO_ELIGIBLE_NODE`, `CAPACITY_CONSTRAINED`, `CAPABILITY_NOT_AUTHORIZED` —
|
||||
rather than an answer built on something stale.
|
||||
|
||||
## What it does not guarantee
|
||||
|
||||
- which model answered, or that the same model answers next time;
|
||||
- that a deployment exists at all, if nothing has been promoted;
|
||||
- latency: that depends on the node, the model and current pressure. The gateway reports queue and
|
||||
inference time per request so you can see which is which.
|
||||
Reference in New Issue
Block a user