Onboard a custom client algorithm¶
Adwize algorithms are client-specific implementations with client-specific objectives. They become reusable workflow inputs by publishing a standard semantic contract; agents and use cases must never branch on a model's Python name.
For the complete source-to-action YAML, see Onboard a client workflow.
1. Confirm the objective¶
Record:
- primary business KPI and unit;
- prediction entity (customer, campaign, account, product);
- target definition and horizon;
- decision the output is expected to support;
- required history, scoring cadence and freshness;
- model owner and operational contact.
Do not start implementation until the target can be calculated without future leakage and the connected sources satisfy the required grain and history.
2. Select an execution mode¶
| Mode | Use when | Workflow behavior |
|---|---|---|
platform |
A supported Adwize runner can train the client objective | Catalog parameters configure the shared runner |
package |
The implementation is custom and must run in Adwize | A reviewed, versioned and allowlisted module:function runs in the worker |
external_table |
The client owns training/scoring | Adwize imports and validates a dated canonical score table |
Package mode is not arbitrary runtime code. The package must pass security/reproducibility review and be included in the worker release. External-table mode is preferred for client-owned models that have an independent deployment lifecycle.
3. Register semantic outputs¶
Every model spec declares what its output means:
name: client_purchase_propensity
version: 2.0.0
objective: purchase_within_horizon
entity: customer
execution:
mode: external_table
semantic_outputs:
- semantic: likelihood.purchase
entity: customer
value_field: score
horizon_days: 30
All modes publish:
- stable entity ID;
- declared score/value fields;
- model reference and version;
- scoring timestamp and validity;
- data/model quality metadata;
- immutable source and run manifests.
4. Pin it in tenant YAML¶
- id: purchase_propensity
type: algo
ref: client_purchase_propensity@2.0.0
runner: external_table
depends_on: [graph]
params:
external_table_path: client-models/tenant_id={tenant_id}/date={as_of}/scores.parquet
The tenant workflow pins a version. It never contains credentials or unreviewed executable code.
5. Validate before activation¶
Validate offline:
- point-in-time feature/label correctness;
- output schema and entity uniqueness;
- coverage, nulls, bounds and freshness;
- temporal holdout performance and safe baselines;
- threshold or capacity policy;
- stability across important cohorts;
- compatibility with the client's KPI and intended use cases.
The use-case resolver enables a recommendation only when required semantics, quality gates, specialist and action capabilities are all available.
Current account example¶
The current workflow exposes:
propensity@1.1.0:
semantic: likelihood.purchase
horizon_days: 30
ltv@2.0.0:
semantic: value.lifetime
horizon_days: 30
Together these enable the high_value_high_propensity Media use case. If a governed Google Ads audience action is connected, the Media specialist may recommend delivering that audience. Neither model enables a budget recommendation: that requires a separate pacing or marginal-return signal.
Operating lifecycle¶
- Publish a new immutable catalog/model version.
- Validate it against production-shaped fixtures.
- Update and validate the tenant YAML pin.
- Run in shadow mode and compare manifests/quality.
- Activate eligible use cases.
- Monitor freshness, coverage, drift, failures and recommendation acceptance.
- Retrain according to declared cadence.
- Deprecate old versions only after tenant pins migrate.
Responsibility checklist¶
- Client: objective, KPI semantics, legal use, action approval policy.
- Data team: source mapping, identity, point-in-time correctness, freshness.
- Model team: implementation, evaluation, thresholds, version and monitoring.
- Platform team: runner isolation, schema validation, manifests, workflow compatibility and rollout.