The artifact is the central unit of work for a Bitrecs miner. It is a YAML file that encodes everything the evaluation harness needs to run your submission: which model and provider to use, the Jinja2 templates that will be rendered at inference time, and the sampling parameters that control generation. Getting the artifact right is a prerequisite for passing the screener stages and reaching full validator evaluation.Documentation Index
Fetch the complete documentation index at: https://docs.bitrecs.ai/llms.txt
Use this file to discover all available pages before exploring further.
Complete example
The following is the canonical reference artifact from the repository. Every field shown here is described in detail in the sections below.artifact.yaml
Top-level fields
A short human-readable label for your artifact. Must be 1–30 alphanumeric characters (letters, numbers, and spaces only — no special characters or punctuation). Used to identify your submission in the dashboard.
The artifact schema version. Must be the string
"1". Any other value will be rejected by the validator.The initial lifecycle status of the artifact. Must be
"screening_1" on submission. The platform advances the status automatically as the artifact moves through the evaluation pipeline (screening_2, evaluating, finished).Your hotkey’s ss58 address. Must match the hotkey you use to sign the submission. The platform uses this to verify ownership and enforce the one-submission-per-hotkey rule.
The LLM inference provider to use. Only
CHUTES is accepted. Any other value will be rejected by the validator.The model identifier string recognized by your chosen provider. Must be a model priced below $1 per million tokens. Free tier models (identifiers containing
:free) are not accepted.A Jinja2 template rendered as the system message. Must be a valid Jinja2 template and must not exceed 5,000 tokens. Must contain at least one valid template variable. See Template variables below.
A Jinja2 template rendered as the user message. Must be a valid Jinja2 template and must not exceed 10,000 tokens. The variables
product_catalog, cart_json, and order_json may each appear at most once across both templates combined. See Template variables below.Controls how the model generates output. See Sampling parameters below.
Optional list of few-shot message examples prepended to the conversation. Maximum 64 examples. Each example has a
role (user, assistant, or system) and content (max 8,192 characters per example).Sampling parameters
Thesampling_params object controls LLM generation behavior. temperature is the primary parameter the evaluation harness uses.
Controls output randomness. Range:
0 to 2. Lower values produce more deterministic output. The example artifact uses 0.2, which is a good starting point for structured JSON generation.Nucleus sampling threshold. Range:
0 to 1. Optional. When set, only the top tokens whose cumulative probability reaches top_p are considered.Maximum number of tokens to generate. Optional. Must be a positive integer.
List of strings that cause generation to stop when encountered. Optional.
Template variables
Bothsystem_prompt_template and user_prompt_template are rendered as Jinja2 templates. Use {{variable_name}} syntax to inject context values. Only the variables listed below are recognized; any other variable names will cause validation to fail.
| Variable | Description |
|---|---|
{{current_date}} | Today’s date, injected at inference time. |
{{num_recs}} | The number of recommendations the model must return. |
{{persona}} | A persona description representing the customer’s shopping profile. |
{{sku}} | The product SKU the customer is currently viewing. May be NA if no product page context is available. |
{{sku_info}} | Detailed attributes for the viewed SKU (name, price, description, category). |
{{cart_json}} | JSON representation of the customer’s current cart. |
{{order_json}} | JSON representation of the customer’s past orders. |
{{product_catalog}} | The candidate product pool for recommendations. |
Jinja2 syntax
Templates support standard Jinja2 syntax including conditionals and loops:Output requirements
Your model must return a valid JSON array. Each element must include exactly these four string fields:- Exactly
{{num_recs}}items returned — no more, no fewer. - Every item’s
skumust exist in theproduct_catalogprovided. - No item already in the customer’s cart or past orders.
- No duplicate SKUs in the result set.
- No text outside the JSON array (no explanations, markdown fences, or preamble).
- Reasons must be plain text — no punctuation, single-line.
- Gender consistency: if the viewed SKU is gendered, all recommendations should match that gender.