[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-replicate-publish-models":3,"mdc--6i0ieb-key":33,"related-org-replicate-publish-models":3618,"related-repo-replicate-publish-models":3699},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":28,"sourceUrl":31,"mdContent":32},"publish-models","publish and deploy AI models to Replicate","Push and publish custom AI models to Replicate, and set up CI\u002FCD for releasing new model versions safely. Use when running cog push, deploying a model to Replicate, releasing a new version, validating a model with cog-safe-push before publishing, configuring a Replicate deployment, setting up GitHub Actions for model releases, or porting a community model to an official one. Trigger on phrases like \"push a model to Replicate\", \"publish a model\", \"deploy a model\", \"release a new version\", \"cog push\", \"cog-safe-push\", \"model CI\", \"r8.im\", or \"schema compatibility\", and when referencing github.com\u002Freplicate\u002Fcog-safe-push or github.com\u002Freplicate\u002Fmodel-ci-template. Covers cog push, the full cog-safe-push config (test cases, fuzz, deployment, official_model), GitHub Actions patterns, multi-model matrix pushes, and post-publish monitoring. Assumes you already have a working Cog project; see build-models if you need to package one first.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"replicate","Replicate","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Freplicate.jpg",[12,16,19],{"name":13,"slug":14,"type":15},"Deployment","deployment","tag",{"name":17,"slug":18,"type":15},"AI Infrastructure","ai-infrastructure",{"name":20,"slug":21,"type":15},"CI\u002FCD","ci-cd",51,"https:\u002F\u002Fgithub.com\u002Freplicate\u002Fskills","2026-07-16T06:02:28.648245",null,6,[],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":30},[],"A collection of Agent Skills for building AI-powered apps with Replicate","https:\u002F\u002Fgithub.com\u002Freplicate\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fpublish-models","---\nname: publish-models\ndescription: >\n  Push and publish custom AI models to Replicate, and set up CI\u002FCD for\n  releasing new model versions safely. Use when running cog push,\n  deploying a model to Replicate, releasing a new version, validating\n  a model with cog-safe-push before publishing, configuring a Replicate\n  deployment, setting up GitHub Actions for model releases, or porting a\n  community model to an official one. Trigger on phrases like \"push a\n  model to Replicate\", \"publish a model\", \"deploy a model\", \"release a\n  new version\", \"cog push\", \"cog-safe-push\", \"model CI\", \"r8.im\", or\n  \"schema compatibility\", and when referencing\n  github.com\u002Freplicate\u002Fcog-safe-push or\n  github.com\u002Freplicate\u002Fmodel-ci-template. Covers cog push, the full\n  cog-safe-push config (test cases, fuzz, deployment, official_model),\n  GitHub Actions patterns, multi-model matrix pushes, and post-publish\n  monitoring. Assumes you already have a working Cog project; see\n  build-models if you need to package one first.\n---\n\n## Docs\n\n- Cog reference: \u003Chttps:\u002F\u002Fcog.run\u002Fllms.txt>\n- `cog push` reference: \u003Chttps:\u002F\u002Fcog.run\u002Fcli#cog-push>\n- cog-safe-push: \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push>\n- Model CI template: \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fmodel-ci-template>\n- Continuous deployment guide: \u003Chttps:\u002F\u002Freplicate.com\u002Fdocs\u002Fguides\u002Fcontinuous-model-deployment>\n\n## When to use this skill\n\n- You have a working Cog project (see `build-models` if you don't yet).\n- You want to publish a private or public model on Replicate.\n- You're releasing a new version of an existing model and want to avoid breaking changes.\n- You're setting up CI\u002FCD for model releases.\n\n## Prerequisites\n\n- Cog installed and `cog login` against `r8.im` (or `echo $TOKEN | cog login --token-stdin`).\n- A model created at `replicate.com\u002F{owner}\u002F{name}` via the API, web UI, or `r8-model` CLI.\n- `REPLICATE_API_TOKEN` set in your environment.\n\n## Plain `cog push`\n\nThe simplest path. Build and upload a new version:\n\n```\ncog push r8.im\u002Fowner\u002Fmy-model\n```\n\nOr set `image: r8.im\u002Fowner\u002Fmy-model` in `cog.yaml` and run a bare:\n\n```\ncog push\n```\n\nUseful flags:\n\n- `--separate-weights` — store weights in a separate layer; faster cold boots and pushes for models with > 1GB of weights.\n- `--x-fast` — faster pushes during iteration (skips some validation).\n- `--secret id=hf,src=$HOME\u002F.hf_token` — pass build-time secrets without baking them into image history.\n\n## cog-safe-push (recommended for any model with users)\n\n`cog-safe-push` pushes to a private `-test` model first, checks schema compatibility against the live version, runs prediction comparisons, and fuzzes inputs. Catches breaking changes before they reach users.\n\nInstall:\n\n```\npip install git+https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push.git\n```\n\nRequired env vars:\n\n- `REPLICATE_API_TOKEN`\n- `ANTHROPIC_API_KEY` (Claude judges output similarity for stochastic models)\n\nBasic usage:\n\n```\ncog-safe-push --test-hardware=gpu-l40s owner\u002Fmy-model\n```\n\nThis will:\n\n1. Lint `predict.py` with ruff.\n2. Create a private test model `owner\u002Fmy-model-test` if missing.\n3. Push the local Cog model to the test model.\n4. Lint the schema (descriptions, defaults, etc.).\n5. Check schema compatibility against the live `owner\u002Fmy-model` version.\n6. Run prediction comparisons between live and test versions.\n7. Fuzz the test model with AI-generated inputs.\n8. If everything passes, push to `owner\u002Fmy-model`.\n\n## cog-safe-push.yaml schema\n\nDrop a `cog-safe-push.yaml` in your project root (or `cog-safe-push-configs\u002F\u003Cvariant>.yaml` for multi-model repos). All five test-case checker types in one example:\n\n```yaml\nmodel: owner\u002Fmy-model\ntest_model: owner\u002Fmy-model-test\ntest_hardware: gpu-l40s\n\npredict:\n  compare_outputs: false              # set false for stochastic models\n  predict_timeout: 600\n  test_cases:\n    - inputs:\n        prompt: \"a serene mountain landscape\"\n      match_prompt: \"a landscape photo of mountains\"   # AI-judged via Claude\n    - inputs:\n        prompt: \"a cat\"\n      match_url: \"https:\u002F\u002Fexample.com\u002Freference-cat.png\"   # binary\u002Fimage match\n    - inputs:\n        prompt: \"\"\n      error_contains: \"prompt cannot be empty\"           # negative test\n    - inputs:\n        mode: \"json\"\n      jq_query: '.confidence > 0.8 and .status == \"success\"'   # JSON output\n    - inputs:\n        prompt: \"echo this\"\n      exact_string: \"echo this\"                          # exact string match\n  fuzz:\n    fixed_inputs:\n      seed: 42\n    disabled_inputs:\n      - debug\n    iterations: 10\n    prompt: \"Generate creative and diverse prompts\"\n\ntrain:                                  # if your model has a trainer\n  destination: owner\u002Fmy-model-trained\n  destination_hardware: gpu-l40s\n  train_timeout: 1800\n  test_cases:\n    - inputs:\n        input_images: \"https:\u002F\u002F...\u002Ftraining.zip\"\n        steps: 10\n\ndeployment:                             # auto-create or update on push\n  name: my-model\n  owner: owner\n  hardware: gpu-l40s\n\nparallel: 4\nfast_push: false\nignore_schema_compatibility: false\nofficial_model: owner\u002Fmy-model         # for proxy\u002Fwrapper models, see below\n```\n\nTest case checkers are mutually exclusive: pick exactly one of `match_prompt`, `match_url`, `error_contains`, `jq_query`, or `exact_string` per case. Use `compare_outputs: false` for any stochastic model (diffusion, LLMs); the default `true` is brittle.\n\n## CI\u002FCD: GitHub Actions\n\nTwo paths, depending on how much glue you want.\n\n### Path A: roll your own\n\n```yaml\n# .github\u002Fworkflows\u002Fpush.yaml\nname: Push to Replicate\non:\n  workflow_dispatch:\n    inputs:\n      no_push:\n        type: boolean\n        default: false\n\njobs:\n  push:\n    runs-on: ubuntu-latest-4-cores       # builds need disk + cores\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: jlumbroso\u002Ffree-disk-space@v1.3.1\n        with:\n          tool-cache: false\n          docker-images: false\n      - uses: replicate\u002Fsetup-cog@v2\n        with:\n          token: ${{ secrets.REPLICATE_API_TOKEN }}\n      - run: pip install git+https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push.git\n      - env:\n          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n          REPLICATE_API_TOKEN: ${{ secrets.REPLICATE_API_TOKEN }}\n        run: |\n          cog-safe-push -vv ${{ inputs.no_push && '--no-push' || '' }}\n```\n\nAdd a `concurrency:` block so PR builds cancel each other while main-branch pushes queue:\n\n```yaml\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: ${{ github.ref != 'refs\u002Fheads\u002Fmain' }}\n```\n\n### Path B: reusable workflow from model-ci-template\n\nFor Replicate-style multi-model repos, drop in:\n\n```yaml\n# .github\u002Fworkflows\u002Fci.yaml\nname: CI\non:\n  pull_request: { branches: [main] }\n  push: { branches: [main] }\n  workflow_dispatch:\n    inputs:\n      models: { type: string, default: \"all\" }\n      ignore_schema_checks: { type: boolean, default: false }\n      cog_version: { type: string, default: \"latest\" }\n      test_only: { type: boolean, default: false }\n\njobs:\n  ci:\n    uses: replicate\u002Fmodel-ci-template\u002F.github\u002Fworkflows\u002Ftemplate.yaml@main\n    with:\n      trigger_type: ${{ github.event_name }}\n      models: ${{ inputs.models || 'all' }}\n      ignore_schema_checks: ${{ inputs.ignore_schema_checks || false }}\n      cog_version: ${{ inputs.cog_version || 'latest' }}\n      test_only: ${{ inputs.test_only || false }}\n    secrets: inherit\n```\n\nThe reusable workflow expects:\n\n- `cog-safe-push-configs\u002F\u003Cmodel>.yaml` — one per model variant.\n- `script\u002Fselect-model` — bash file with `if\u002Felif [[ \"$MODEL\" == \"...\" ]]` blocks listing valid model names.\n- Secrets: `COG_TOKEN`, `REPLICATE_API_TOKEN`, `ANTHROPIC_API_KEY`.\n\n## Multi-model matrix pushes\n\nPattern from `replicate\u002Fcog-flux`: one repo, N variants, push them in parallel.\n\n```yaml\njobs:\n  prepare:\n    runs-on: ubuntu-latest\n    outputs:\n      matrix: ${{ steps.set.outputs.matrix }}\n    steps:\n      - id: set\n        run: |\n          if [ \"${{ inputs.models }}\" = \"all\" ]; then\n            echo 'matrix={\"model\":[\"schnell\",\"dev\",\"krea-dev\"]}' >> \"$GITHUB_OUTPUT\"\n          else\n            list=$(echo \"${{ inputs.models }}\" | jq -Rc 'split(\",\")')\n            echo \"matrix={\\\"model\\\":$list}\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n  push:\n    needs: prepare\n    runs-on: ubuntu-latest-4-cores\n    strategy:\n      fail-fast: false\n      matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - run: .\u002Fscript\u002Fselect.sh ${{ matrix.model }}     # produces cog.yaml from a template\n      - run: cog-safe-push --config cog-safe-push-configs\u002F${{ matrix.model }}.yaml -vv\n```\n\n## Two-pass push for proxy \u002F official models\n\nWhen you maintain a proxy that wraps a third-party API, you push to a private wrapper first, then update the public-facing official model card. Pattern from `replicate\u002Fcog-official-template`:\n\n```bash\n.\u002Fscript\u002Fwrite-api-key                                              # bake API key into config\ncog-safe-push --config cog-safe-push-configs\u002F${MODEL}.yaml -vv\n\n.\u002Fscript\u002Fdelete-api-key                                             # strip the key\ncog-safe-push --push-official-model --config cog-safe-push-configs\u002F${MODEL}.yaml -vv\n```\n\nSet `official_model: owner\u002Fname` in the config so `--push-official-model` knows where to publish.\n\n## Deployments\n\nAdd a `deployment` block to `cog-safe-push.yaml` to create or update a Replicate deployment automatically on each push:\n\n```yaml\ndeployment:\n  name: my-model\n  owner: owner\n  hardware: gpu-l40s\n```\n\nScaling defaults: CPU deployments scale 1-20 instances, GPU deployments scale 0-2. Adjust manually via the API or web UI when needed.\n\n## Monitoring published models\n\nRun an hourly canary that exercises the registry path. Pattern from `replicate\u002Fcog-pagerduty-check`:\n\n```yaml\nname: Hourly cog push check\non:\n  schedule:\n    - cron: \"0 * * * *\"\n  workflow_dispatch:\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - run: |\n          # generate a tiny model with a unique uuid, push it, run a prediction\n          # by digest, fail loudly if anything breaks.\n          .\u002Fscript\u002Fcanary.sh\n```\n\nWorth doing for any production-critical model, especially when revenue depends on the registry being up.\n\n## Guidelines\n\n- Don't break schema compatibility unless you mean to. cog-safe-push catches it; `--ignore-schema-compatibility` is the opt-out.\n- Pin `test_hardware` so test pushes are reproducible.\n- Use `--no-push` for dry runs in PR CI; full push on merge to main or on version tags.\n- Push from CI rather than laptops once you have users.\n- Use `compare_outputs: false` for stochastic models. Use `match_prompt:` for image\u002Fvideo outputs (VLM judgment), `match_url:` for binary outputs you control, `jq_query:` for JSON, `error_contains:` for negative tests.\n- Never commit `REPLICATE_API_TOKEN` or `ANTHROPIC_API_KEY`. Use repo secrets.\n- For models with weights > 1GB, push with `--separate-weights`.\n\n## Production references\n\n- \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push> — the tool itself, plus its config schema.\n- \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fmodel-ci-template> — reusable GitHub Actions workflow.\n- \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-official-template> — proxy\u002Fofficial model template.\n- \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-flux\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Fpush.yaml> — matrix push across FLUX variants.\n- \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-comfyui\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Fci.yaml> — ComfyUI model CI with custom-node install step.\n- \u003Chttps:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-pagerduty-check> — hourly canary pattern.\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,47,116,122,153,159,223,234,240,252,273,282,287,323,329,348,353,362,367,389,394,403,408,483,489,510,1446,1505,1511,1516,1523,1930,1943,1996,2002,2007,2528,2533,2590,2596,2609,2949,2955,2967,3093,3114,3120,3138,3201,3206,3212,3224,3409,3414,3420,3539,3545,3612],{"type":39,"tag":40,"props":41,"children":43},"element","h2",{"id":42},"docs",[44],{"type":45,"value":46},"text","Docs",{"type":39,"tag":48,"props":49,"children":50},"ul",{},[51,65,83,94,105],{"type":39,"tag":52,"props":53,"children":54},"li",{},[55,57],{"type":45,"value":56},"Cog reference: ",{"type":39,"tag":58,"props":59,"children":63},"a",{"href":60,"rel":61},"https:\u002F\u002Fcog.run\u002Fllms.txt",[62],"nofollow",[64],{"type":45,"value":60},{"type":39,"tag":52,"props":66,"children":67},{},[68,75,77],{"type":39,"tag":69,"props":70,"children":72},"code",{"className":71},[],[73],{"type":45,"value":74},"cog push",{"type":45,"value":76}," reference: ",{"type":39,"tag":58,"props":78,"children":81},{"href":79,"rel":80},"https:\u002F\u002Fcog.run\u002Fcli#cog-push",[62],[82],{"type":45,"value":79},{"type":39,"tag":52,"props":84,"children":85},{},[86,88],{"type":45,"value":87},"cog-safe-push: ",{"type":39,"tag":58,"props":89,"children":92},{"href":90,"rel":91},"https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push",[62],[93],{"type":45,"value":90},{"type":39,"tag":52,"props":95,"children":96},{},[97,99],{"type":45,"value":98},"Model CI template: ",{"type":39,"tag":58,"props":100,"children":103},{"href":101,"rel":102},"https:\u002F\u002Fgithub.com\u002Freplicate\u002Fmodel-ci-template",[62],[104],{"type":45,"value":101},{"type":39,"tag":52,"props":106,"children":107},{},[108,110],{"type":45,"value":109},"Continuous deployment guide: ",{"type":39,"tag":58,"props":111,"children":114},{"href":112,"rel":113},"https:\u002F\u002Freplicate.com\u002Fdocs\u002Fguides\u002Fcontinuous-model-deployment",[62],[115],{"type":45,"value":112},{"type":39,"tag":40,"props":117,"children":119},{"id":118},"when-to-use-this-skill",[120],{"type":45,"value":121},"When to use this skill",{"type":39,"tag":48,"props":123,"children":124},{},[125,138,143,148],{"type":39,"tag":52,"props":126,"children":127},{},[128,130,136],{"type":45,"value":129},"You have a working Cog project (see ",{"type":39,"tag":69,"props":131,"children":133},{"className":132},[],[134],{"type":45,"value":135},"build-models",{"type":45,"value":137}," if you don't yet).",{"type":39,"tag":52,"props":139,"children":140},{},[141],{"type":45,"value":142},"You want to publish a private or public model on Replicate.",{"type":39,"tag":52,"props":144,"children":145},{},[146],{"type":45,"value":147},"You're releasing a new version of an existing model and want to avoid breaking changes.",{"type":39,"tag":52,"props":149,"children":150},{},[151],{"type":45,"value":152},"You're setting up CI\u002FCD for model releases.",{"type":39,"tag":40,"props":154,"children":156},{"id":155},"prerequisites",[157],{"type":45,"value":158},"Prerequisites",{"type":39,"tag":48,"props":160,"children":161},{},[162,191,212],{"type":39,"tag":52,"props":163,"children":164},{},[165,167,173,175,181,183,189],{"type":45,"value":166},"Cog installed and ",{"type":39,"tag":69,"props":168,"children":170},{"className":169},[],[171],{"type":45,"value":172},"cog login",{"type":45,"value":174}," against ",{"type":39,"tag":69,"props":176,"children":178},{"className":177},[],[179],{"type":45,"value":180},"r8.im",{"type":45,"value":182}," (or ",{"type":39,"tag":69,"props":184,"children":186},{"className":185},[],[187],{"type":45,"value":188},"echo $TOKEN | cog login --token-stdin",{"type":45,"value":190},").",{"type":39,"tag":52,"props":192,"children":193},{},[194,196,202,204,210],{"type":45,"value":195},"A model created at ",{"type":39,"tag":69,"props":197,"children":199},{"className":198},[],[200],{"type":45,"value":201},"replicate.com\u002F{owner}\u002F{name}",{"type":45,"value":203}," via the API, web UI, or ",{"type":39,"tag":69,"props":205,"children":207},{"className":206},[],[208],{"type":45,"value":209},"r8-model",{"type":45,"value":211}," CLI.",{"type":39,"tag":52,"props":213,"children":214},{},[215,221],{"type":39,"tag":69,"props":216,"children":218},{"className":217},[],[219],{"type":45,"value":220},"REPLICATE_API_TOKEN",{"type":45,"value":222}," set in your environment.",{"type":39,"tag":40,"props":224,"children":226},{"id":225},"plain-cog-push",[227,229],{"type":45,"value":228},"Plain ",{"type":39,"tag":69,"props":230,"children":232},{"className":231},[],[233],{"type":45,"value":74},{"type":39,"tag":235,"props":236,"children":237},"p",{},[238],{"type":45,"value":239},"The simplest path. Build and upload a new version:",{"type":39,"tag":241,"props":242,"children":246},"pre",{"className":243,"code":245,"language":45},[244],"language-text","cog push r8.im\u002Fowner\u002Fmy-model\n",[247],{"type":39,"tag":69,"props":248,"children":250},{"__ignoreMap":249},"",[251],{"type":45,"value":245},{"type":39,"tag":235,"props":253,"children":254},{},[255,257,263,265,271],{"type":45,"value":256},"Or set ",{"type":39,"tag":69,"props":258,"children":260},{"className":259},[],[261],{"type":45,"value":262},"image: r8.im\u002Fowner\u002Fmy-model",{"type":45,"value":264}," in ",{"type":39,"tag":69,"props":266,"children":268},{"className":267},[],[269],{"type":45,"value":270},"cog.yaml",{"type":45,"value":272}," and run a bare:",{"type":39,"tag":241,"props":274,"children":277},{"className":275,"code":276,"language":45},[244],"cog push\n",[278],{"type":39,"tag":69,"props":279,"children":280},{"__ignoreMap":249},[281],{"type":45,"value":276},{"type":39,"tag":235,"props":283,"children":284},{},[285],{"type":45,"value":286},"Useful flags:",{"type":39,"tag":48,"props":288,"children":289},{},[290,301,312],{"type":39,"tag":52,"props":291,"children":292},{},[293,299],{"type":39,"tag":69,"props":294,"children":296},{"className":295},[],[297],{"type":45,"value":298},"--separate-weights",{"type":45,"value":300}," — store weights in a separate layer; faster cold boots and pushes for models with > 1GB of weights.",{"type":39,"tag":52,"props":302,"children":303},{},[304,310],{"type":39,"tag":69,"props":305,"children":307},{"className":306},[],[308],{"type":45,"value":309},"--x-fast",{"type":45,"value":311}," — faster pushes during iteration (skips some validation).",{"type":39,"tag":52,"props":313,"children":314},{},[315,321],{"type":39,"tag":69,"props":316,"children":318},{"className":317},[],[319],{"type":45,"value":320},"--secret id=hf,src=$HOME\u002F.hf_token",{"type":45,"value":322}," — pass build-time secrets without baking them into image history.",{"type":39,"tag":40,"props":324,"children":326},{"id":325},"cog-safe-push-recommended-for-any-model-with-users",[327],{"type":45,"value":328},"cog-safe-push (recommended for any model with users)",{"type":39,"tag":235,"props":330,"children":331},{},[332,338,340,346],{"type":39,"tag":69,"props":333,"children":335},{"className":334},[],[336],{"type":45,"value":337},"cog-safe-push",{"type":45,"value":339}," pushes to a private ",{"type":39,"tag":69,"props":341,"children":343},{"className":342},[],[344],{"type":45,"value":345},"-test",{"type":45,"value":347}," model first, checks schema compatibility against the live version, runs prediction comparisons, and fuzzes inputs. Catches breaking changes before they reach users.",{"type":39,"tag":235,"props":349,"children":350},{},[351],{"type":45,"value":352},"Install:",{"type":39,"tag":241,"props":354,"children":357},{"className":355,"code":356,"language":45},[244],"pip install git+https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push.git\n",[358],{"type":39,"tag":69,"props":359,"children":360},{"__ignoreMap":249},[361],{"type":45,"value":356},{"type":39,"tag":235,"props":363,"children":364},{},[365],{"type":45,"value":366},"Required env vars:",{"type":39,"tag":48,"props":368,"children":369},{},[370,378],{"type":39,"tag":52,"props":371,"children":372},{},[373],{"type":39,"tag":69,"props":374,"children":376},{"className":375},[],[377],{"type":45,"value":220},{"type":39,"tag":52,"props":379,"children":380},{},[381,387],{"type":39,"tag":69,"props":382,"children":384},{"className":383},[],[385],{"type":45,"value":386},"ANTHROPIC_API_KEY",{"type":45,"value":388}," (Claude judges output similarity for stochastic models)",{"type":39,"tag":235,"props":390,"children":391},{},[392],{"type":45,"value":393},"Basic usage:",{"type":39,"tag":241,"props":395,"children":398},{"className":396,"code":397,"language":45},[244],"cog-safe-push --test-hardware=gpu-l40s owner\u002Fmy-model\n",[399],{"type":39,"tag":69,"props":400,"children":401},{"__ignoreMap":249},[402],{"type":45,"value":397},{"type":39,"tag":235,"props":404,"children":405},{},[406],{"type":45,"value":407},"This will:",{"type":39,"tag":409,"props":410,"children":411},"ol",{},[412,425,438,443,448,461,466,471],{"type":39,"tag":52,"props":413,"children":414},{},[415,417,423],{"type":45,"value":416},"Lint ",{"type":39,"tag":69,"props":418,"children":420},{"className":419},[],[421],{"type":45,"value":422},"predict.py",{"type":45,"value":424}," with ruff.",{"type":39,"tag":52,"props":426,"children":427},{},[428,430,436],{"type":45,"value":429},"Create a private test model ",{"type":39,"tag":69,"props":431,"children":433},{"className":432},[],[434],{"type":45,"value":435},"owner\u002Fmy-model-test",{"type":45,"value":437}," if missing.",{"type":39,"tag":52,"props":439,"children":440},{},[441],{"type":45,"value":442},"Push the local Cog model to the test model.",{"type":39,"tag":52,"props":444,"children":445},{},[446],{"type":45,"value":447},"Lint the schema (descriptions, defaults, etc.).",{"type":39,"tag":52,"props":449,"children":450},{},[451,453,459],{"type":45,"value":452},"Check schema compatibility against the live ",{"type":39,"tag":69,"props":454,"children":456},{"className":455},[],[457],{"type":45,"value":458},"owner\u002Fmy-model",{"type":45,"value":460}," version.",{"type":39,"tag":52,"props":462,"children":463},{},[464],{"type":45,"value":465},"Run prediction comparisons between live and test versions.",{"type":39,"tag":52,"props":467,"children":468},{},[469],{"type":45,"value":470},"Fuzz the test model with AI-generated inputs.",{"type":39,"tag":52,"props":472,"children":473},{},[474,476,481],{"type":45,"value":475},"If everything passes, push to ",{"type":39,"tag":69,"props":477,"children":479},{"className":478},[],[480],{"type":45,"value":458},{"type":45,"value":482},".",{"type":39,"tag":40,"props":484,"children":486},{"id":485},"cog-safe-pushyaml-schema",[487],{"type":45,"value":488},"cog-safe-push.yaml schema",{"type":39,"tag":235,"props":490,"children":491},{},[492,494,500,502,508],{"type":45,"value":493},"Drop a ",{"type":39,"tag":69,"props":495,"children":497},{"className":496},[],[498],{"type":45,"value":499},"cog-safe-push.yaml",{"type":45,"value":501}," in your project root (or ",{"type":39,"tag":69,"props":503,"children":505},{"className":504},[],[506],{"type":45,"value":507},"cog-safe-push-configs\u002F\u003Cvariant>.yaml",{"type":45,"value":509}," for multi-model repos). All five test-case checker types in one example:",{"type":39,"tag":241,"props":511,"children":515},{"className":512,"code":513,"language":514,"meta":249,"style":249},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","model: owner\u002Fmy-model\ntest_model: owner\u002Fmy-model-test\ntest_hardware: gpu-l40s\n\npredict:\n  compare_outputs: false              # set false for stochastic models\n  predict_timeout: 600\n  test_cases:\n    - inputs:\n        prompt: \"a serene mountain landscape\"\n      match_prompt: \"a landscape photo of mountains\"   # AI-judged via Claude\n    - inputs:\n        prompt: \"a cat\"\n      match_url: \"https:\u002F\u002Fexample.com\u002Freference-cat.png\"   # binary\u002Fimage match\n    - inputs:\n        prompt: \"\"\n      error_contains: \"prompt cannot be empty\"           # negative test\n    - inputs:\n        mode: \"json\"\n      jq_query: '.confidence > 0.8 and .status == \"success\"'   # JSON output\n    - inputs:\n        prompt: \"echo this\"\n      exact_string: \"echo this\"                          # exact string match\n  fuzz:\n    fixed_inputs:\n      seed: 42\n    disabled_inputs:\n      - debug\n    iterations: 10\n    prompt: \"Generate creative and diverse prompts\"\n\ntrain:                                  # if your model has a trainer\n  destination: owner\u002Fmy-model-trained\n  destination_hardware: gpu-l40s\n  train_timeout: 1800\n  test_cases:\n    - inputs:\n        input_images: \"https:\u002F\u002F...\u002Ftraining.zip\"\n        steps: 10\n\ndeployment:                             # auto-create or update on push\n  name: my-model\n  owner: owner\n  hardware: gpu-l40s\n\nparallel: 4\nfast_push: false\nignore_schema_compatibility: false\nofficial_model: owner\u002Fmy-model         # for proxy\u002Fwrapper models, see below\n","yaml",[516],{"type":39,"tag":69,"props":517,"children":518},{"__ignoreMap":249},[519,543,561,579,589,603,627,646,659,677,705,737,753,778,809,825,842,873,889,915,948,964,989,1019,1032,1045,1063,1076,1090,1108,1134,1142,1160,1178,1195,1213,1225,1241,1267,1284,1292,1309,1327,1345,1362,1370,1388,1406,1423],{"type":39,"tag":520,"props":521,"children":524},"span",{"class":522,"line":523},"line",1,[525,531,537],{"type":39,"tag":520,"props":526,"children":528},{"style":527},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[529],{"type":45,"value":530},"model",{"type":39,"tag":520,"props":532,"children":534},{"style":533},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[535],{"type":45,"value":536},":",{"type":39,"tag":520,"props":538,"children":540},{"style":539},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[541],{"type":45,"value":542}," owner\u002Fmy-model\n",{"type":39,"tag":520,"props":544,"children":546},{"class":522,"line":545},2,[547,552,556],{"type":39,"tag":520,"props":548,"children":549},{"style":527},[550],{"type":45,"value":551},"test_model",{"type":39,"tag":520,"props":553,"children":554},{"style":533},[555],{"type":45,"value":536},{"type":39,"tag":520,"props":557,"children":558},{"style":539},[559],{"type":45,"value":560}," owner\u002Fmy-model-test\n",{"type":39,"tag":520,"props":562,"children":564},{"class":522,"line":563},3,[565,570,574],{"type":39,"tag":520,"props":566,"children":567},{"style":527},[568],{"type":45,"value":569},"test_hardware",{"type":39,"tag":520,"props":571,"children":572},{"style":533},[573],{"type":45,"value":536},{"type":39,"tag":520,"props":575,"children":576},{"style":539},[577],{"type":45,"value":578}," gpu-l40s\n",{"type":39,"tag":520,"props":580,"children":582},{"class":522,"line":581},4,[583],{"type":39,"tag":520,"props":584,"children":586},{"emptyLinePlaceholder":585},true,[587],{"type":45,"value":588},"\n",{"type":39,"tag":520,"props":590,"children":592},{"class":522,"line":591},5,[593,598],{"type":39,"tag":520,"props":594,"children":595},{"style":527},[596],{"type":45,"value":597},"predict",{"type":39,"tag":520,"props":599,"children":600},{"style":533},[601],{"type":45,"value":602},":\n",{"type":39,"tag":520,"props":604,"children":605},{"class":522,"line":26},[606,611,615,621],{"type":39,"tag":520,"props":607,"children":608},{"style":527},[609],{"type":45,"value":610},"  compare_outputs",{"type":39,"tag":520,"props":612,"children":613},{"style":533},[614],{"type":45,"value":536},{"type":39,"tag":520,"props":616,"children":618},{"style":617},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[619],{"type":45,"value":620}," false",{"type":39,"tag":520,"props":622,"children":624},{"style":623},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[625],{"type":45,"value":626},"              # set false for stochastic models\n",{"type":39,"tag":520,"props":628,"children":630},{"class":522,"line":629},7,[631,636,640],{"type":39,"tag":520,"props":632,"children":633},{"style":527},[634],{"type":45,"value":635},"  predict_timeout",{"type":39,"tag":520,"props":637,"children":638},{"style":533},[639],{"type":45,"value":536},{"type":39,"tag":520,"props":641,"children":643},{"style":642},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[644],{"type":45,"value":645}," 600\n",{"type":39,"tag":520,"props":647,"children":649},{"class":522,"line":648},8,[650,655],{"type":39,"tag":520,"props":651,"children":652},{"style":527},[653],{"type":45,"value":654},"  test_cases",{"type":39,"tag":520,"props":656,"children":657},{"style":533},[658],{"type":45,"value":602},{"type":39,"tag":520,"props":660,"children":662},{"class":522,"line":661},9,[663,668,673],{"type":39,"tag":520,"props":664,"children":665},{"style":533},[666],{"type":45,"value":667},"    -",{"type":39,"tag":520,"props":669,"children":670},{"style":527},[671],{"type":45,"value":672}," inputs",{"type":39,"tag":520,"props":674,"children":675},{"style":533},[676],{"type":45,"value":602},{"type":39,"tag":520,"props":678,"children":680},{"class":522,"line":679},10,[681,686,690,695,700],{"type":39,"tag":520,"props":682,"children":683},{"style":527},[684],{"type":45,"value":685},"        prompt",{"type":39,"tag":520,"props":687,"children":688},{"style":533},[689],{"type":45,"value":536},{"type":39,"tag":520,"props":691,"children":692},{"style":533},[693],{"type":45,"value":694}," \"",{"type":39,"tag":520,"props":696,"children":697},{"style":539},[698],{"type":45,"value":699},"a serene mountain landscape",{"type":39,"tag":520,"props":701,"children":702},{"style":533},[703],{"type":45,"value":704},"\"\n",{"type":39,"tag":520,"props":706,"children":708},{"class":522,"line":707},11,[709,714,718,722,727,732],{"type":39,"tag":520,"props":710,"children":711},{"style":527},[712],{"type":45,"value":713},"      match_prompt",{"type":39,"tag":520,"props":715,"children":716},{"style":533},[717],{"type":45,"value":536},{"type":39,"tag":520,"props":719,"children":720},{"style":533},[721],{"type":45,"value":694},{"type":39,"tag":520,"props":723,"children":724},{"style":539},[725],{"type":45,"value":726},"a landscape photo of mountains",{"type":39,"tag":520,"props":728,"children":729},{"style":533},[730],{"type":45,"value":731},"\"",{"type":39,"tag":520,"props":733,"children":734},{"style":623},[735],{"type":45,"value":736},"   # AI-judged via Claude\n",{"type":39,"tag":520,"props":738,"children":740},{"class":522,"line":739},12,[741,745,749],{"type":39,"tag":520,"props":742,"children":743},{"style":533},[744],{"type":45,"value":667},{"type":39,"tag":520,"props":746,"children":747},{"style":527},[748],{"type":45,"value":672},{"type":39,"tag":520,"props":750,"children":751},{"style":533},[752],{"type":45,"value":602},{"type":39,"tag":520,"props":754,"children":756},{"class":522,"line":755},13,[757,761,765,769,774],{"type":39,"tag":520,"props":758,"children":759},{"style":527},[760],{"type":45,"value":685},{"type":39,"tag":520,"props":762,"children":763},{"style":533},[764],{"type":45,"value":536},{"type":39,"tag":520,"props":766,"children":767},{"style":533},[768],{"type":45,"value":694},{"type":39,"tag":520,"props":770,"children":771},{"style":539},[772],{"type":45,"value":773},"a cat",{"type":39,"tag":520,"props":775,"children":776},{"style":533},[777],{"type":45,"value":704},{"type":39,"tag":520,"props":779,"children":781},{"class":522,"line":780},14,[782,787,791,795,800,804],{"type":39,"tag":520,"props":783,"children":784},{"style":527},[785],{"type":45,"value":786},"      match_url",{"type":39,"tag":520,"props":788,"children":789},{"style":533},[790],{"type":45,"value":536},{"type":39,"tag":520,"props":792,"children":793},{"style":533},[794],{"type":45,"value":694},{"type":39,"tag":520,"props":796,"children":797},{"style":539},[798],{"type":45,"value":799},"https:\u002F\u002Fexample.com\u002Freference-cat.png",{"type":39,"tag":520,"props":801,"children":802},{"style":533},[803],{"type":45,"value":731},{"type":39,"tag":520,"props":805,"children":806},{"style":623},[807],{"type":45,"value":808},"   # binary\u002Fimage match\n",{"type":39,"tag":520,"props":810,"children":812},{"class":522,"line":811},15,[813,817,821],{"type":39,"tag":520,"props":814,"children":815},{"style":533},[816],{"type":45,"value":667},{"type":39,"tag":520,"props":818,"children":819},{"style":527},[820],{"type":45,"value":672},{"type":39,"tag":520,"props":822,"children":823},{"style":533},[824],{"type":45,"value":602},{"type":39,"tag":520,"props":826,"children":828},{"class":522,"line":827},16,[829,833,837],{"type":39,"tag":520,"props":830,"children":831},{"style":527},[832],{"type":45,"value":685},{"type":39,"tag":520,"props":834,"children":835},{"style":533},[836],{"type":45,"value":536},{"type":39,"tag":520,"props":838,"children":839},{"style":533},[840],{"type":45,"value":841}," \"\"\n",{"type":39,"tag":520,"props":843,"children":845},{"class":522,"line":844},17,[846,851,855,859,864,868],{"type":39,"tag":520,"props":847,"children":848},{"style":527},[849],{"type":45,"value":850},"      error_contains",{"type":39,"tag":520,"props":852,"children":853},{"style":533},[854],{"type":45,"value":536},{"type":39,"tag":520,"props":856,"children":857},{"style":533},[858],{"type":45,"value":694},{"type":39,"tag":520,"props":860,"children":861},{"style":539},[862],{"type":45,"value":863},"prompt cannot be empty",{"type":39,"tag":520,"props":865,"children":866},{"style":533},[867],{"type":45,"value":731},{"type":39,"tag":520,"props":869,"children":870},{"style":623},[871],{"type":45,"value":872},"           # negative test\n",{"type":39,"tag":520,"props":874,"children":876},{"class":522,"line":875},18,[877,881,885],{"type":39,"tag":520,"props":878,"children":879},{"style":533},[880],{"type":45,"value":667},{"type":39,"tag":520,"props":882,"children":883},{"style":527},[884],{"type":45,"value":672},{"type":39,"tag":520,"props":886,"children":887},{"style":533},[888],{"type":45,"value":602},{"type":39,"tag":520,"props":890,"children":892},{"class":522,"line":891},19,[893,898,902,906,911],{"type":39,"tag":520,"props":894,"children":895},{"style":527},[896],{"type":45,"value":897},"        mode",{"type":39,"tag":520,"props":899,"children":900},{"style":533},[901],{"type":45,"value":536},{"type":39,"tag":520,"props":903,"children":904},{"style":533},[905],{"type":45,"value":694},{"type":39,"tag":520,"props":907,"children":908},{"style":539},[909],{"type":45,"value":910},"json",{"type":39,"tag":520,"props":912,"children":913},{"style":533},[914],{"type":45,"value":704},{"type":39,"tag":520,"props":916,"children":918},{"class":522,"line":917},20,[919,924,928,933,938,943],{"type":39,"tag":520,"props":920,"children":921},{"style":527},[922],{"type":45,"value":923},"      jq_query",{"type":39,"tag":520,"props":925,"children":926},{"style":533},[927],{"type":45,"value":536},{"type":39,"tag":520,"props":929,"children":930},{"style":533},[931],{"type":45,"value":932}," '",{"type":39,"tag":520,"props":934,"children":935},{"style":539},[936],{"type":45,"value":937},".confidence > 0.8 and .status == \"success\"",{"type":39,"tag":520,"props":939,"children":940},{"style":533},[941],{"type":45,"value":942},"'",{"type":39,"tag":520,"props":944,"children":945},{"style":623},[946],{"type":45,"value":947},"   # JSON output\n",{"type":39,"tag":520,"props":949,"children":951},{"class":522,"line":950},21,[952,956,960],{"type":39,"tag":520,"props":953,"children":954},{"style":533},[955],{"type":45,"value":667},{"type":39,"tag":520,"props":957,"children":958},{"style":527},[959],{"type":45,"value":672},{"type":39,"tag":520,"props":961,"children":962},{"style":533},[963],{"type":45,"value":602},{"type":39,"tag":520,"props":965,"children":967},{"class":522,"line":966},22,[968,972,976,980,985],{"type":39,"tag":520,"props":969,"children":970},{"style":527},[971],{"type":45,"value":685},{"type":39,"tag":520,"props":973,"children":974},{"style":533},[975],{"type":45,"value":536},{"type":39,"tag":520,"props":977,"children":978},{"style":533},[979],{"type":45,"value":694},{"type":39,"tag":520,"props":981,"children":982},{"style":539},[983],{"type":45,"value":984},"echo this",{"type":39,"tag":520,"props":986,"children":987},{"style":533},[988],{"type":45,"value":704},{"type":39,"tag":520,"props":990,"children":992},{"class":522,"line":991},23,[993,998,1002,1006,1010,1014],{"type":39,"tag":520,"props":994,"children":995},{"style":527},[996],{"type":45,"value":997},"      exact_string",{"type":39,"tag":520,"props":999,"children":1000},{"style":533},[1001],{"type":45,"value":536},{"type":39,"tag":520,"props":1003,"children":1004},{"style":533},[1005],{"type":45,"value":694},{"type":39,"tag":520,"props":1007,"children":1008},{"style":539},[1009],{"type":45,"value":984},{"type":39,"tag":520,"props":1011,"children":1012},{"style":533},[1013],{"type":45,"value":731},{"type":39,"tag":520,"props":1015,"children":1016},{"style":623},[1017],{"type":45,"value":1018},"                          # exact string match\n",{"type":39,"tag":520,"props":1020,"children":1022},{"class":522,"line":1021},24,[1023,1028],{"type":39,"tag":520,"props":1024,"children":1025},{"style":527},[1026],{"type":45,"value":1027},"  fuzz",{"type":39,"tag":520,"props":1029,"children":1030},{"style":533},[1031],{"type":45,"value":602},{"type":39,"tag":520,"props":1033,"children":1035},{"class":522,"line":1034},25,[1036,1041],{"type":39,"tag":520,"props":1037,"children":1038},{"style":527},[1039],{"type":45,"value":1040},"    fixed_inputs",{"type":39,"tag":520,"props":1042,"children":1043},{"style":533},[1044],{"type":45,"value":602},{"type":39,"tag":520,"props":1046,"children":1048},{"class":522,"line":1047},26,[1049,1054,1058],{"type":39,"tag":520,"props":1050,"children":1051},{"style":527},[1052],{"type":45,"value":1053},"      seed",{"type":39,"tag":520,"props":1055,"children":1056},{"style":533},[1057],{"type":45,"value":536},{"type":39,"tag":520,"props":1059,"children":1060},{"style":642},[1061],{"type":45,"value":1062}," 42\n",{"type":39,"tag":520,"props":1064,"children":1066},{"class":522,"line":1065},27,[1067,1072],{"type":39,"tag":520,"props":1068,"children":1069},{"style":527},[1070],{"type":45,"value":1071},"    disabled_inputs",{"type":39,"tag":520,"props":1073,"children":1074},{"style":533},[1075],{"type":45,"value":602},{"type":39,"tag":520,"props":1077,"children":1079},{"class":522,"line":1078},28,[1080,1085],{"type":39,"tag":520,"props":1081,"children":1082},{"style":533},[1083],{"type":45,"value":1084},"      -",{"type":39,"tag":520,"props":1086,"children":1087},{"style":539},[1088],{"type":45,"value":1089}," debug\n",{"type":39,"tag":520,"props":1091,"children":1093},{"class":522,"line":1092},29,[1094,1099,1103],{"type":39,"tag":520,"props":1095,"children":1096},{"style":527},[1097],{"type":45,"value":1098},"    iterations",{"type":39,"tag":520,"props":1100,"children":1101},{"style":533},[1102],{"type":45,"value":536},{"type":39,"tag":520,"props":1104,"children":1105},{"style":642},[1106],{"type":45,"value":1107}," 10\n",{"type":39,"tag":520,"props":1109,"children":1111},{"class":522,"line":1110},30,[1112,1117,1121,1125,1130],{"type":39,"tag":520,"props":1113,"children":1114},{"style":527},[1115],{"type":45,"value":1116},"    prompt",{"type":39,"tag":520,"props":1118,"children":1119},{"style":533},[1120],{"type":45,"value":536},{"type":39,"tag":520,"props":1122,"children":1123},{"style":533},[1124],{"type":45,"value":694},{"type":39,"tag":520,"props":1126,"children":1127},{"style":539},[1128],{"type":45,"value":1129},"Generate creative and diverse prompts",{"type":39,"tag":520,"props":1131,"children":1132},{"style":533},[1133],{"type":45,"value":704},{"type":39,"tag":520,"props":1135,"children":1137},{"class":522,"line":1136},31,[1138],{"type":39,"tag":520,"props":1139,"children":1140},{"emptyLinePlaceholder":585},[1141],{"type":45,"value":588},{"type":39,"tag":520,"props":1143,"children":1145},{"class":522,"line":1144},32,[1146,1151,1155],{"type":39,"tag":520,"props":1147,"children":1148},{"style":527},[1149],{"type":45,"value":1150},"train",{"type":39,"tag":520,"props":1152,"children":1153},{"style":533},[1154],{"type":45,"value":536},{"type":39,"tag":520,"props":1156,"children":1157},{"style":623},[1158],{"type":45,"value":1159},"                                  # if your model has a trainer\n",{"type":39,"tag":520,"props":1161,"children":1163},{"class":522,"line":1162},33,[1164,1169,1173],{"type":39,"tag":520,"props":1165,"children":1166},{"style":527},[1167],{"type":45,"value":1168},"  destination",{"type":39,"tag":520,"props":1170,"children":1171},{"style":533},[1172],{"type":45,"value":536},{"type":39,"tag":520,"props":1174,"children":1175},{"style":539},[1176],{"type":45,"value":1177}," owner\u002Fmy-model-trained\n",{"type":39,"tag":520,"props":1179,"children":1181},{"class":522,"line":1180},34,[1182,1187,1191],{"type":39,"tag":520,"props":1183,"children":1184},{"style":527},[1185],{"type":45,"value":1186},"  destination_hardware",{"type":39,"tag":520,"props":1188,"children":1189},{"style":533},[1190],{"type":45,"value":536},{"type":39,"tag":520,"props":1192,"children":1193},{"style":539},[1194],{"type":45,"value":578},{"type":39,"tag":520,"props":1196,"children":1198},{"class":522,"line":1197},35,[1199,1204,1208],{"type":39,"tag":520,"props":1200,"children":1201},{"style":527},[1202],{"type":45,"value":1203},"  train_timeout",{"type":39,"tag":520,"props":1205,"children":1206},{"style":533},[1207],{"type":45,"value":536},{"type":39,"tag":520,"props":1209,"children":1210},{"style":642},[1211],{"type":45,"value":1212}," 1800\n",{"type":39,"tag":520,"props":1214,"children":1216},{"class":522,"line":1215},36,[1217,1221],{"type":39,"tag":520,"props":1218,"children":1219},{"style":527},[1220],{"type":45,"value":654},{"type":39,"tag":520,"props":1222,"children":1223},{"style":533},[1224],{"type":45,"value":602},{"type":39,"tag":520,"props":1226,"children":1228},{"class":522,"line":1227},37,[1229,1233,1237],{"type":39,"tag":520,"props":1230,"children":1231},{"style":533},[1232],{"type":45,"value":667},{"type":39,"tag":520,"props":1234,"children":1235},{"style":527},[1236],{"type":45,"value":672},{"type":39,"tag":520,"props":1238,"children":1239},{"style":533},[1240],{"type":45,"value":602},{"type":39,"tag":520,"props":1242,"children":1244},{"class":522,"line":1243},38,[1245,1250,1254,1258,1263],{"type":39,"tag":520,"props":1246,"children":1247},{"style":527},[1248],{"type":45,"value":1249},"        input_images",{"type":39,"tag":520,"props":1251,"children":1252},{"style":533},[1253],{"type":45,"value":536},{"type":39,"tag":520,"props":1255,"children":1256},{"style":533},[1257],{"type":45,"value":694},{"type":39,"tag":520,"props":1259,"children":1260},{"style":539},[1261],{"type":45,"value":1262},"https:\u002F\u002F...\u002Ftraining.zip",{"type":39,"tag":520,"props":1264,"children":1265},{"style":533},[1266],{"type":45,"value":704},{"type":39,"tag":520,"props":1268,"children":1270},{"class":522,"line":1269},39,[1271,1276,1280],{"type":39,"tag":520,"props":1272,"children":1273},{"style":527},[1274],{"type":45,"value":1275},"        steps",{"type":39,"tag":520,"props":1277,"children":1278},{"style":533},[1279],{"type":45,"value":536},{"type":39,"tag":520,"props":1281,"children":1282},{"style":642},[1283],{"type":45,"value":1107},{"type":39,"tag":520,"props":1285,"children":1287},{"class":522,"line":1286},40,[1288],{"type":39,"tag":520,"props":1289,"children":1290},{"emptyLinePlaceholder":585},[1291],{"type":45,"value":588},{"type":39,"tag":520,"props":1293,"children":1295},{"class":522,"line":1294},41,[1296,1300,1304],{"type":39,"tag":520,"props":1297,"children":1298},{"style":527},[1299],{"type":45,"value":14},{"type":39,"tag":520,"props":1301,"children":1302},{"style":533},[1303],{"type":45,"value":536},{"type":39,"tag":520,"props":1305,"children":1306},{"style":623},[1307],{"type":45,"value":1308},"                             # auto-create or update on push\n",{"type":39,"tag":520,"props":1310,"children":1312},{"class":522,"line":1311},42,[1313,1318,1322],{"type":39,"tag":520,"props":1314,"children":1315},{"style":527},[1316],{"type":45,"value":1317},"  name",{"type":39,"tag":520,"props":1319,"children":1320},{"style":533},[1321],{"type":45,"value":536},{"type":39,"tag":520,"props":1323,"children":1324},{"style":539},[1325],{"type":45,"value":1326}," my-model\n",{"type":39,"tag":520,"props":1328,"children":1330},{"class":522,"line":1329},43,[1331,1336,1340],{"type":39,"tag":520,"props":1332,"children":1333},{"style":527},[1334],{"type":45,"value":1335},"  owner",{"type":39,"tag":520,"props":1337,"children":1338},{"style":533},[1339],{"type":45,"value":536},{"type":39,"tag":520,"props":1341,"children":1342},{"style":539},[1343],{"type":45,"value":1344}," owner\n",{"type":39,"tag":520,"props":1346,"children":1348},{"class":522,"line":1347},44,[1349,1354,1358],{"type":39,"tag":520,"props":1350,"children":1351},{"style":527},[1352],{"type":45,"value":1353},"  hardware",{"type":39,"tag":520,"props":1355,"children":1356},{"style":533},[1357],{"type":45,"value":536},{"type":39,"tag":520,"props":1359,"children":1360},{"style":539},[1361],{"type":45,"value":578},{"type":39,"tag":520,"props":1363,"children":1365},{"class":522,"line":1364},45,[1366],{"type":39,"tag":520,"props":1367,"children":1368},{"emptyLinePlaceholder":585},[1369],{"type":45,"value":588},{"type":39,"tag":520,"props":1371,"children":1373},{"class":522,"line":1372},46,[1374,1379,1383],{"type":39,"tag":520,"props":1375,"children":1376},{"style":527},[1377],{"type":45,"value":1378},"parallel",{"type":39,"tag":520,"props":1380,"children":1381},{"style":533},[1382],{"type":45,"value":536},{"type":39,"tag":520,"props":1384,"children":1385},{"style":642},[1386],{"type":45,"value":1387}," 4\n",{"type":39,"tag":520,"props":1389,"children":1391},{"class":522,"line":1390},47,[1392,1397,1401],{"type":39,"tag":520,"props":1393,"children":1394},{"style":527},[1395],{"type":45,"value":1396},"fast_push",{"type":39,"tag":520,"props":1398,"children":1399},{"style":533},[1400],{"type":45,"value":536},{"type":39,"tag":520,"props":1402,"children":1403},{"style":617},[1404],{"type":45,"value":1405}," false\n",{"type":39,"tag":520,"props":1407,"children":1409},{"class":522,"line":1408},48,[1410,1415,1419],{"type":39,"tag":520,"props":1411,"children":1412},{"style":527},[1413],{"type":45,"value":1414},"ignore_schema_compatibility",{"type":39,"tag":520,"props":1416,"children":1417},{"style":533},[1418],{"type":45,"value":536},{"type":39,"tag":520,"props":1420,"children":1421},{"style":617},[1422],{"type":45,"value":1405},{"type":39,"tag":520,"props":1424,"children":1426},{"class":522,"line":1425},49,[1427,1432,1436,1441],{"type":39,"tag":520,"props":1428,"children":1429},{"style":527},[1430],{"type":45,"value":1431},"official_model",{"type":39,"tag":520,"props":1433,"children":1434},{"style":533},[1435],{"type":45,"value":536},{"type":39,"tag":520,"props":1437,"children":1438},{"style":539},[1439],{"type":45,"value":1440}," owner\u002Fmy-model",{"type":39,"tag":520,"props":1442,"children":1443},{"style":623},[1444],{"type":45,"value":1445},"         # for proxy\u002Fwrapper models, see below\n",{"type":39,"tag":235,"props":1447,"children":1448},{},[1449,1451,1457,1459,1465,1466,1472,1473,1479,1481,1487,1489,1495,1497,1503],{"type":45,"value":1450},"Test case checkers are mutually exclusive: pick exactly one of ",{"type":39,"tag":69,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":45,"value":1456},"match_prompt",{"type":45,"value":1458},", ",{"type":39,"tag":69,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":45,"value":1464},"match_url",{"type":45,"value":1458},{"type":39,"tag":69,"props":1467,"children":1469},{"className":1468},[],[1470],{"type":45,"value":1471},"error_contains",{"type":45,"value":1458},{"type":39,"tag":69,"props":1474,"children":1476},{"className":1475},[],[1477],{"type":45,"value":1478},"jq_query",{"type":45,"value":1480},", or ",{"type":39,"tag":69,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":45,"value":1486},"exact_string",{"type":45,"value":1488}," per case. Use ",{"type":39,"tag":69,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":45,"value":1494},"compare_outputs: false",{"type":45,"value":1496}," for any stochastic model (diffusion, LLMs); the default ",{"type":39,"tag":69,"props":1498,"children":1500},{"className":1499},[],[1501],{"type":45,"value":1502},"true",{"type":45,"value":1504}," is brittle.",{"type":39,"tag":40,"props":1506,"children":1508},{"id":1507},"cicd-github-actions",[1509],{"type":45,"value":1510},"CI\u002FCD: GitHub Actions",{"type":39,"tag":235,"props":1512,"children":1513},{},[1514],{"type":45,"value":1515},"Two paths, depending on how much glue you want.",{"type":39,"tag":1517,"props":1518,"children":1520},"h3",{"id":1519},"path-a-roll-your-own",[1521],{"type":45,"value":1522},"Path A: roll your own",{"type":39,"tag":241,"props":1524,"children":1526},{"className":512,"code":1525,"language":514,"meta":249,"style":249},"# .github\u002Fworkflows\u002Fpush.yaml\nname: Push to Replicate\non:\n  workflow_dispatch:\n    inputs:\n      no_push:\n        type: boolean\n        default: false\n\njobs:\n  push:\n    runs-on: ubuntu-latest-4-cores       # builds need disk + cores\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: jlumbroso\u002Ffree-disk-space@v1.3.1\n        with:\n          tool-cache: false\n          docker-images: false\n      - uses: replicate\u002Fsetup-cog@v2\n        with:\n          token: ${{ secrets.REPLICATE_API_TOKEN }}\n      - run: pip install git+https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push.git\n      - env:\n          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n          REPLICATE_API_TOKEN: ${{ secrets.REPLICATE_API_TOKEN }}\n        run: |\n          cog-safe-push -vv ${{ inputs.no_push && '--no-push' || '' }}\n",[1527],{"type":39,"tag":69,"props":1528,"children":1529},{"__ignoreMap":249},[1530,1538,1555,1567,1579,1591,1603,1620,1636,1643,1655,1667,1689,1701,1722,1742,1754,1770,1786,1806,1817,1834,1855,1871,1888,1904,1922],{"type":39,"tag":520,"props":1531,"children":1532},{"class":522,"line":523},[1533],{"type":39,"tag":520,"props":1534,"children":1535},{"style":623},[1536],{"type":45,"value":1537},"# .github\u002Fworkflows\u002Fpush.yaml\n",{"type":39,"tag":520,"props":1539,"children":1540},{"class":522,"line":545},[1541,1546,1550],{"type":39,"tag":520,"props":1542,"children":1543},{"style":527},[1544],{"type":45,"value":1545},"name",{"type":39,"tag":520,"props":1547,"children":1548},{"style":533},[1549],{"type":45,"value":536},{"type":39,"tag":520,"props":1551,"children":1552},{"style":539},[1553],{"type":45,"value":1554}," Push to Replicate\n",{"type":39,"tag":520,"props":1556,"children":1557},{"class":522,"line":563},[1558,1563],{"type":39,"tag":520,"props":1559,"children":1560},{"style":617},[1561],{"type":45,"value":1562},"on",{"type":39,"tag":520,"props":1564,"children":1565},{"style":533},[1566],{"type":45,"value":602},{"type":39,"tag":520,"props":1568,"children":1569},{"class":522,"line":581},[1570,1575],{"type":39,"tag":520,"props":1571,"children":1572},{"style":527},[1573],{"type":45,"value":1574},"  workflow_dispatch",{"type":39,"tag":520,"props":1576,"children":1577},{"style":533},[1578],{"type":45,"value":602},{"type":39,"tag":520,"props":1580,"children":1581},{"class":522,"line":591},[1582,1587],{"type":39,"tag":520,"props":1583,"children":1584},{"style":527},[1585],{"type":45,"value":1586},"    inputs",{"type":39,"tag":520,"props":1588,"children":1589},{"style":533},[1590],{"type":45,"value":602},{"type":39,"tag":520,"props":1592,"children":1593},{"class":522,"line":26},[1594,1599],{"type":39,"tag":520,"props":1595,"children":1596},{"style":527},[1597],{"type":45,"value":1598},"      no_push",{"type":39,"tag":520,"props":1600,"children":1601},{"style":533},[1602],{"type":45,"value":602},{"type":39,"tag":520,"props":1604,"children":1605},{"class":522,"line":629},[1606,1611,1615],{"type":39,"tag":520,"props":1607,"children":1608},{"style":527},[1609],{"type":45,"value":1610},"        type",{"type":39,"tag":520,"props":1612,"children":1613},{"style":533},[1614],{"type":45,"value":536},{"type":39,"tag":520,"props":1616,"children":1617},{"style":539},[1618],{"type":45,"value":1619}," boolean\n",{"type":39,"tag":520,"props":1621,"children":1622},{"class":522,"line":648},[1623,1628,1632],{"type":39,"tag":520,"props":1624,"children":1625},{"style":527},[1626],{"type":45,"value":1627},"        default",{"type":39,"tag":520,"props":1629,"children":1630},{"style":533},[1631],{"type":45,"value":536},{"type":39,"tag":520,"props":1633,"children":1634},{"style":617},[1635],{"type":45,"value":1405},{"type":39,"tag":520,"props":1637,"children":1638},{"class":522,"line":661},[1639],{"type":39,"tag":520,"props":1640,"children":1641},{"emptyLinePlaceholder":585},[1642],{"type":45,"value":588},{"type":39,"tag":520,"props":1644,"children":1645},{"class":522,"line":679},[1646,1651],{"type":39,"tag":520,"props":1647,"children":1648},{"style":527},[1649],{"type":45,"value":1650},"jobs",{"type":39,"tag":520,"props":1652,"children":1653},{"style":533},[1654],{"type":45,"value":602},{"type":39,"tag":520,"props":1656,"children":1657},{"class":522,"line":707},[1658,1663],{"type":39,"tag":520,"props":1659,"children":1660},{"style":527},[1661],{"type":45,"value":1662},"  push",{"type":39,"tag":520,"props":1664,"children":1665},{"style":533},[1666],{"type":45,"value":602},{"type":39,"tag":520,"props":1668,"children":1669},{"class":522,"line":739},[1670,1675,1679,1684],{"type":39,"tag":520,"props":1671,"children":1672},{"style":527},[1673],{"type":45,"value":1674},"    runs-on",{"type":39,"tag":520,"props":1676,"children":1677},{"style":533},[1678],{"type":45,"value":536},{"type":39,"tag":520,"props":1680,"children":1681},{"style":539},[1682],{"type":45,"value":1683}," ubuntu-latest-4-cores",{"type":39,"tag":520,"props":1685,"children":1686},{"style":623},[1687],{"type":45,"value":1688},"       # builds need disk + cores\n",{"type":39,"tag":520,"props":1690,"children":1691},{"class":522,"line":755},[1692,1697],{"type":39,"tag":520,"props":1693,"children":1694},{"style":527},[1695],{"type":45,"value":1696},"    steps",{"type":39,"tag":520,"props":1698,"children":1699},{"style":533},[1700],{"type":45,"value":602},{"type":39,"tag":520,"props":1702,"children":1703},{"class":522,"line":780},[1704,1708,1713,1717],{"type":39,"tag":520,"props":1705,"children":1706},{"style":533},[1707],{"type":45,"value":1084},{"type":39,"tag":520,"props":1709,"children":1710},{"style":527},[1711],{"type":45,"value":1712}," uses",{"type":39,"tag":520,"props":1714,"children":1715},{"style":533},[1716],{"type":45,"value":536},{"type":39,"tag":520,"props":1718,"children":1719},{"style":539},[1720],{"type":45,"value":1721}," actions\u002Fcheckout@v4\n",{"type":39,"tag":520,"props":1723,"children":1724},{"class":522,"line":811},[1725,1729,1733,1737],{"type":39,"tag":520,"props":1726,"children":1727},{"style":533},[1728],{"type":45,"value":1084},{"type":39,"tag":520,"props":1730,"children":1731},{"style":527},[1732],{"type":45,"value":1712},{"type":39,"tag":520,"props":1734,"children":1735},{"style":533},[1736],{"type":45,"value":536},{"type":39,"tag":520,"props":1738,"children":1739},{"style":539},[1740],{"type":45,"value":1741}," jlumbroso\u002Ffree-disk-space@v1.3.1\n",{"type":39,"tag":520,"props":1743,"children":1744},{"class":522,"line":827},[1745,1750],{"type":39,"tag":520,"props":1746,"children":1747},{"style":527},[1748],{"type":45,"value":1749},"        with",{"type":39,"tag":520,"props":1751,"children":1752},{"style":533},[1753],{"type":45,"value":602},{"type":39,"tag":520,"props":1755,"children":1756},{"class":522,"line":844},[1757,1762,1766],{"type":39,"tag":520,"props":1758,"children":1759},{"style":527},[1760],{"type":45,"value":1761},"          tool-cache",{"type":39,"tag":520,"props":1763,"children":1764},{"style":533},[1765],{"type":45,"value":536},{"type":39,"tag":520,"props":1767,"children":1768},{"style":617},[1769],{"type":45,"value":1405},{"type":39,"tag":520,"props":1771,"children":1772},{"class":522,"line":875},[1773,1778,1782],{"type":39,"tag":520,"props":1774,"children":1775},{"style":527},[1776],{"type":45,"value":1777},"          docker-images",{"type":39,"tag":520,"props":1779,"children":1780},{"style":533},[1781],{"type":45,"value":536},{"type":39,"tag":520,"props":1783,"children":1784},{"style":617},[1785],{"type":45,"value":1405},{"type":39,"tag":520,"props":1787,"children":1788},{"class":522,"line":891},[1789,1793,1797,1801],{"type":39,"tag":520,"props":1790,"children":1791},{"style":533},[1792],{"type":45,"value":1084},{"type":39,"tag":520,"props":1794,"children":1795},{"style":527},[1796],{"type":45,"value":1712},{"type":39,"tag":520,"props":1798,"children":1799},{"style":533},[1800],{"type":45,"value":536},{"type":39,"tag":520,"props":1802,"children":1803},{"style":539},[1804],{"type":45,"value":1805}," replicate\u002Fsetup-cog@v2\n",{"type":39,"tag":520,"props":1807,"children":1808},{"class":522,"line":917},[1809,1813],{"type":39,"tag":520,"props":1810,"children":1811},{"style":527},[1812],{"type":45,"value":1749},{"type":39,"tag":520,"props":1814,"children":1815},{"style":533},[1816],{"type":45,"value":602},{"type":39,"tag":520,"props":1818,"children":1819},{"class":522,"line":950},[1820,1825,1829],{"type":39,"tag":520,"props":1821,"children":1822},{"style":527},[1823],{"type":45,"value":1824},"          token",{"type":39,"tag":520,"props":1826,"children":1827},{"style":533},[1828],{"type":45,"value":536},{"type":39,"tag":520,"props":1830,"children":1831},{"style":539},[1832],{"type":45,"value":1833}," ${{ secrets.REPLICATE_API_TOKEN }}\n",{"type":39,"tag":520,"props":1835,"children":1836},{"class":522,"line":966},[1837,1841,1846,1850],{"type":39,"tag":520,"props":1838,"children":1839},{"style":533},[1840],{"type":45,"value":1084},{"type":39,"tag":520,"props":1842,"children":1843},{"style":527},[1844],{"type":45,"value":1845}," run",{"type":39,"tag":520,"props":1847,"children":1848},{"style":533},[1849],{"type":45,"value":536},{"type":39,"tag":520,"props":1851,"children":1852},{"style":539},[1853],{"type":45,"value":1854}," pip install git+https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-safe-push.git\n",{"type":39,"tag":520,"props":1856,"children":1857},{"class":522,"line":991},[1858,1862,1867],{"type":39,"tag":520,"props":1859,"children":1860},{"style":533},[1861],{"type":45,"value":1084},{"type":39,"tag":520,"props":1863,"children":1864},{"style":527},[1865],{"type":45,"value":1866}," env",{"type":39,"tag":520,"props":1868,"children":1869},{"style":533},[1870],{"type":45,"value":602},{"type":39,"tag":520,"props":1872,"children":1873},{"class":522,"line":1021},[1874,1879,1883],{"type":39,"tag":520,"props":1875,"children":1876},{"style":527},[1877],{"type":45,"value":1878},"          ANTHROPIC_API_KEY",{"type":39,"tag":520,"props":1880,"children":1881},{"style":533},[1882],{"type":45,"value":536},{"type":39,"tag":520,"props":1884,"children":1885},{"style":539},[1886],{"type":45,"value":1887}," ${{ secrets.ANTHROPIC_API_KEY }}\n",{"type":39,"tag":520,"props":1889,"children":1890},{"class":522,"line":1034},[1891,1896,1900],{"type":39,"tag":520,"props":1892,"children":1893},{"style":527},[1894],{"type":45,"value":1895},"          REPLICATE_API_TOKEN",{"type":39,"tag":520,"props":1897,"children":1898},{"style":533},[1899],{"type":45,"value":536},{"type":39,"tag":520,"props":1901,"children":1902},{"style":539},[1903],{"type":45,"value":1833},{"type":39,"tag":520,"props":1905,"children":1906},{"class":522,"line":1047},[1907,1912,1916],{"type":39,"tag":520,"props":1908,"children":1909},{"style":527},[1910],{"type":45,"value":1911},"        run",{"type":39,"tag":520,"props":1913,"children":1914},{"style":533},[1915],{"type":45,"value":536},{"type":39,"tag":520,"props":1917,"children":1919},{"style":1918},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1920],{"type":45,"value":1921}," |\n",{"type":39,"tag":520,"props":1923,"children":1924},{"class":522,"line":1065},[1925],{"type":39,"tag":520,"props":1926,"children":1927},{"style":539},[1928],{"type":45,"value":1929},"          cog-safe-push -vv ${{ inputs.no_push && '--no-push' || '' }}\n",{"type":39,"tag":235,"props":1931,"children":1932},{},[1933,1935,1941],{"type":45,"value":1934},"Add a ",{"type":39,"tag":69,"props":1936,"children":1938},{"className":1937},[],[1939],{"type":45,"value":1940},"concurrency:",{"type":45,"value":1942}," block so PR builds cancel each other while main-branch pushes queue:",{"type":39,"tag":241,"props":1944,"children":1946},{"className":512,"code":1945,"language":514,"meta":249,"style":249},"concurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: ${{ github.ref != 'refs\u002Fheads\u002Fmain' }}\n",[1947],{"type":39,"tag":69,"props":1948,"children":1949},{"__ignoreMap":249},[1950,1962,1979],{"type":39,"tag":520,"props":1951,"children":1952},{"class":522,"line":523},[1953,1958],{"type":39,"tag":520,"props":1954,"children":1955},{"style":527},[1956],{"type":45,"value":1957},"concurrency",{"type":39,"tag":520,"props":1959,"children":1960},{"style":533},[1961],{"type":45,"value":602},{"type":39,"tag":520,"props":1963,"children":1964},{"class":522,"line":545},[1965,1970,1974],{"type":39,"tag":520,"props":1966,"children":1967},{"style":527},[1968],{"type":45,"value":1969},"  group",{"type":39,"tag":520,"props":1971,"children":1972},{"style":533},[1973],{"type":45,"value":536},{"type":39,"tag":520,"props":1975,"children":1976},{"style":539},[1977],{"type":45,"value":1978}," ${{ github.workflow }}-${{ github.ref }}\n",{"type":39,"tag":520,"props":1980,"children":1981},{"class":522,"line":563},[1982,1987,1991],{"type":39,"tag":520,"props":1983,"children":1984},{"style":527},[1985],{"type":45,"value":1986},"  cancel-in-progress",{"type":39,"tag":520,"props":1988,"children":1989},{"style":533},[1990],{"type":45,"value":536},{"type":39,"tag":520,"props":1992,"children":1993},{"style":539},[1994],{"type":45,"value":1995}," ${{ github.ref != 'refs\u002Fheads\u002Fmain' }}\n",{"type":39,"tag":1517,"props":1997,"children":1999},{"id":1998},"path-b-reusable-workflow-from-model-ci-template",[2000],{"type":45,"value":2001},"Path B: reusable workflow from model-ci-template",{"type":39,"tag":235,"props":2003,"children":2004},{},[2005],{"type":45,"value":2006},"For Replicate-style multi-model repos, drop in:",{"type":39,"tag":241,"props":2008,"children":2010},{"className":512,"code":2009,"language":514,"meta":249,"style":249},"# .github\u002Fworkflows\u002Fci.yaml\nname: CI\non:\n  pull_request: { branches: [main] }\n  push: { branches: [main] }\n  workflow_dispatch:\n    inputs:\n      models: { type: string, default: \"all\" }\n      ignore_schema_checks: { type: boolean, default: false }\n      cog_version: { type: string, default: \"latest\" }\n      test_only: { type: boolean, default: false }\n\njobs:\n  ci:\n    uses: replicate\u002Fmodel-ci-template\u002F.github\u002Fworkflows\u002Ftemplate.yaml@main\n    with:\n      trigger_type: ${{ github.event_name }}\n      models: ${{ inputs.models || 'all' }}\n      ignore_schema_checks: ${{ inputs.ignore_schema_checks || false }}\n      cog_version: ${{ inputs.cog_version || 'latest' }}\n      test_only: ${{ inputs.test_only || false }}\n    secrets: inherit\n",[2011],{"type":39,"tag":69,"props":2012,"children":2013},{"__ignoreMap":249},[2014,2022,2038,2049,2095,2134,2145,2156,2217,2266,2323,2371,2378,2389,2401,2418,2430,2447,2463,2479,2495,2511],{"type":39,"tag":520,"props":2015,"children":2016},{"class":522,"line":523},[2017],{"type":39,"tag":520,"props":2018,"children":2019},{"style":623},[2020],{"type":45,"value":2021},"# .github\u002Fworkflows\u002Fci.yaml\n",{"type":39,"tag":520,"props":2023,"children":2024},{"class":522,"line":545},[2025,2029,2033],{"type":39,"tag":520,"props":2026,"children":2027},{"style":527},[2028],{"type":45,"value":1545},{"type":39,"tag":520,"props":2030,"children":2031},{"style":533},[2032],{"type":45,"value":536},{"type":39,"tag":520,"props":2034,"children":2035},{"style":539},[2036],{"type":45,"value":2037}," CI\n",{"type":39,"tag":520,"props":2039,"children":2040},{"class":522,"line":563},[2041,2045],{"type":39,"tag":520,"props":2042,"children":2043},{"style":617},[2044],{"type":45,"value":1562},{"type":39,"tag":520,"props":2046,"children":2047},{"style":533},[2048],{"type":45,"value":602},{"type":39,"tag":520,"props":2050,"children":2051},{"class":522,"line":581},[2052,2057,2061,2066,2071,2075,2080,2085,2090],{"type":39,"tag":520,"props":2053,"children":2054},{"style":527},[2055],{"type":45,"value":2056},"  pull_request",{"type":39,"tag":520,"props":2058,"children":2059},{"style":533},[2060],{"type":45,"value":536},{"type":39,"tag":520,"props":2062,"children":2063},{"style":533},[2064],{"type":45,"value":2065}," {",{"type":39,"tag":520,"props":2067,"children":2068},{"style":527},[2069],{"type":45,"value":2070}," branches",{"type":39,"tag":520,"props":2072,"children":2073},{"style":533},[2074],{"type":45,"value":536},{"type":39,"tag":520,"props":2076,"children":2077},{"style":533},[2078],{"type":45,"value":2079}," [",{"type":39,"tag":520,"props":2081,"children":2082},{"style":539},[2083],{"type":45,"value":2084},"main",{"type":39,"tag":520,"props":2086,"children":2087},{"style":533},[2088],{"type":45,"value":2089},"]",{"type":39,"tag":520,"props":2091,"children":2092},{"style":533},[2093],{"type":45,"value":2094}," }\n",{"type":39,"tag":520,"props":2096,"children":2097},{"class":522,"line":591},[2098,2102,2106,2110,2114,2118,2122,2126,2130],{"type":39,"tag":520,"props":2099,"children":2100},{"style":527},[2101],{"type":45,"value":1662},{"type":39,"tag":520,"props":2103,"children":2104},{"style":533},[2105],{"type":45,"value":536},{"type":39,"tag":520,"props":2107,"children":2108},{"style":533},[2109],{"type":45,"value":2065},{"type":39,"tag":520,"props":2111,"children":2112},{"style":527},[2113],{"type":45,"value":2070},{"type":39,"tag":520,"props":2115,"children":2116},{"style":533},[2117],{"type":45,"value":536},{"type":39,"tag":520,"props":2119,"children":2120},{"style":533},[2121],{"type":45,"value":2079},{"type":39,"tag":520,"props":2123,"children":2124},{"style":539},[2125],{"type":45,"value":2084},{"type":39,"tag":520,"props":2127,"children":2128},{"style":533},[2129],{"type":45,"value":2089},{"type":39,"tag":520,"props":2131,"children":2132},{"style":533},[2133],{"type":45,"value":2094},{"type":39,"tag":520,"props":2135,"children":2136},{"class":522,"line":26},[2137,2141],{"type":39,"tag":520,"props":2138,"children":2139},{"style":527},[2140],{"type":45,"value":1574},{"type":39,"tag":520,"props":2142,"children":2143},{"style":533},[2144],{"type":45,"value":602},{"type":39,"tag":520,"props":2146,"children":2147},{"class":522,"line":629},[2148,2152],{"type":39,"tag":520,"props":2149,"children":2150},{"style":527},[2151],{"type":45,"value":1586},{"type":39,"tag":520,"props":2153,"children":2154},{"style":533},[2155],{"type":45,"value":602},{"type":39,"tag":520,"props":2157,"children":2158},{"class":522,"line":648},[2159,2164,2168,2172,2177,2181,2186,2191,2196,2200,2204,2209,2213],{"type":39,"tag":520,"props":2160,"children":2161},{"style":527},[2162],{"type":45,"value":2163},"      models",{"type":39,"tag":520,"props":2165,"children":2166},{"style":533},[2167],{"type":45,"value":536},{"type":39,"tag":520,"props":2169,"children":2170},{"style":533},[2171],{"type":45,"value":2065},{"type":39,"tag":520,"props":2173,"children":2174},{"style":527},[2175],{"type":45,"value":2176}," type",{"type":39,"tag":520,"props":2178,"children":2179},{"style":533},[2180],{"type":45,"value":536},{"type":39,"tag":520,"props":2182,"children":2183},{"style":539},[2184],{"type":45,"value":2185}," string",{"type":39,"tag":520,"props":2187,"children":2188},{"style":533},[2189],{"type":45,"value":2190},",",{"type":39,"tag":520,"props":2192,"children":2193},{"style":527},[2194],{"type":45,"value":2195}," default",{"type":39,"tag":520,"props":2197,"children":2198},{"style":533},[2199],{"type":45,"value":536},{"type":39,"tag":520,"props":2201,"children":2202},{"style":533},[2203],{"type":45,"value":694},{"type":39,"tag":520,"props":2205,"children":2206},{"style":539},[2207],{"type":45,"value":2208},"all",{"type":39,"tag":520,"props":2210,"children":2211},{"style":533},[2212],{"type":45,"value":731},{"type":39,"tag":520,"props":2214,"children":2215},{"style":533},[2216],{"type":45,"value":2094},{"type":39,"tag":520,"props":2218,"children":2219},{"class":522,"line":661},[2220,2225,2229,2233,2237,2241,2246,2250,2254,2258,2262],{"type":39,"tag":520,"props":2221,"children":2222},{"style":527},[2223],{"type":45,"value":2224},"      ignore_schema_checks",{"type":39,"tag":520,"props":2226,"children":2227},{"style":533},[2228],{"type":45,"value":536},{"type":39,"tag":520,"props":2230,"children":2231},{"style":533},[2232],{"type":45,"value":2065},{"type":39,"tag":520,"props":2234,"children":2235},{"style":527},[2236],{"type":45,"value":2176},{"type":39,"tag":520,"props":2238,"children":2239},{"style":533},[2240],{"type":45,"value":536},{"type":39,"tag":520,"props":2242,"children":2243},{"style":539},[2244],{"type":45,"value":2245}," boolean",{"type":39,"tag":520,"props":2247,"children":2248},{"style":533},[2249],{"type":45,"value":2190},{"type":39,"tag":520,"props":2251,"children":2252},{"style":527},[2253],{"type":45,"value":2195},{"type":39,"tag":520,"props":2255,"children":2256},{"style":533},[2257],{"type":45,"value":536},{"type":39,"tag":520,"props":2259,"children":2260},{"style":617},[2261],{"type":45,"value":620},{"type":39,"tag":520,"props":2263,"children":2264},{"style":533},[2265],{"type":45,"value":2094},{"type":39,"tag":520,"props":2267,"children":2268},{"class":522,"line":679},[2269,2274,2278,2282,2286,2290,2294,2298,2302,2306,2310,2315,2319],{"type":39,"tag":520,"props":2270,"children":2271},{"style":527},[2272],{"type":45,"value":2273},"      cog_version",{"type":39,"tag":520,"props":2275,"children":2276},{"style":533},[2277],{"type":45,"value":536},{"type":39,"tag":520,"props":2279,"children":2280},{"style":533},[2281],{"type":45,"value":2065},{"type":39,"tag":520,"props":2283,"children":2284},{"style":527},[2285],{"type":45,"value":2176},{"type":39,"tag":520,"props":2287,"children":2288},{"style":533},[2289],{"type":45,"value":536},{"type":39,"tag":520,"props":2291,"children":2292},{"style":539},[2293],{"type":45,"value":2185},{"type":39,"tag":520,"props":2295,"children":2296},{"style":533},[2297],{"type":45,"value":2190},{"type":39,"tag":520,"props":2299,"children":2300},{"style":527},[2301],{"type":45,"value":2195},{"type":39,"tag":520,"props":2303,"children":2304},{"style":533},[2305],{"type":45,"value":536},{"type":39,"tag":520,"props":2307,"children":2308},{"style":533},[2309],{"type":45,"value":694},{"type":39,"tag":520,"props":2311,"children":2312},{"style":539},[2313],{"type":45,"value":2314},"latest",{"type":39,"tag":520,"props":2316,"children":2317},{"style":533},[2318],{"type":45,"value":731},{"type":39,"tag":520,"props":2320,"children":2321},{"style":533},[2322],{"type":45,"value":2094},{"type":39,"tag":520,"props":2324,"children":2325},{"class":522,"line":707},[2326,2331,2335,2339,2343,2347,2351,2355,2359,2363,2367],{"type":39,"tag":520,"props":2327,"children":2328},{"style":527},[2329],{"type":45,"value":2330},"      test_only",{"type":39,"tag":520,"props":2332,"children":2333},{"style":533},[2334],{"type":45,"value":536},{"type":39,"tag":520,"props":2336,"children":2337},{"style":533},[2338],{"type":45,"value":2065},{"type":39,"tag":520,"props":2340,"children":2341},{"style":527},[2342],{"type":45,"value":2176},{"type":39,"tag":520,"props":2344,"children":2345},{"style":533},[2346],{"type":45,"value":536},{"type":39,"tag":520,"props":2348,"children":2349},{"style":539},[2350],{"type":45,"value":2245},{"type":39,"tag":520,"props":2352,"children":2353},{"style":533},[2354],{"type":45,"value":2190},{"type":39,"tag":520,"props":2356,"children":2357},{"style":527},[2358],{"type":45,"value":2195},{"type":39,"tag":520,"props":2360,"children":2361},{"style":533},[2362],{"type":45,"value":536},{"type":39,"tag":520,"props":2364,"children":2365},{"style":617},[2366],{"type":45,"value":620},{"type":39,"tag":520,"props":2368,"children":2369},{"style":533},[2370],{"type":45,"value":2094},{"type":39,"tag":520,"props":2372,"children":2373},{"class":522,"line":739},[2374],{"type":39,"tag":520,"props":2375,"children":2376},{"emptyLinePlaceholder":585},[2377],{"type":45,"value":588},{"type":39,"tag":520,"props":2379,"children":2380},{"class":522,"line":755},[2381,2385],{"type":39,"tag":520,"props":2382,"children":2383},{"style":527},[2384],{"type":45,"value":1650},{"type":39,"tag":520,"props":2386,"children":2387},{"style":533},[2388],{"type":45,"value":602},{"type":39,"tag":520,"props":2390,"children":2391},{"class":522,"line":780},[2392,2397],{"type":39,"tag":520,"props":2393,"children":2394},{"style":527},[2395],{"type":45,"value":2396},"  ci",{"type":39,"tag":520,"props":2398,"children":2399},{"style":533},[2400],{"type":45,"value":602},{"type":39,"tag":520,"props":2402,"children":2403},{"class":522,"line":811},[2404,2409,2413],{"type":39,"tag":520,"props":2405,"children":2406},{"style":527},[2407],{"type":45,"value":2408},"    uses",{"type":39,"tag":520,"props":2410,"children":2411},{"style":533},[2412],{"type":45,"value":536},{"type":39,"tag":520,"props":2414,"children":2415},{"style":539},[2416],{"type":45,"value":2417}," replicate\u002Fmodel-ci-template\u002F.github\u002Fworkflows\u002Ftemplate.yaml@main\n",{"type":39,"tag":520,"props":2419,"children":2420},{"class":522,"line":827},[2421,2426],{"type":39,"tag":520,"props":2422,"children":2423},{"style":527},[2424],{"type":45,"value":2425},"    with",{"type":39,"tag":520,"props":2427,"children":2428},{"style":533},[2429],{"type":45,"value":602},{"type":39,"tag":520,"props":2431,"children":2432},{"class":522,"line":844},[2433,2438,2442],{"type":39,"tag":520,"props":2434,"children":2435},{"style":527},[2436],{"type":45,"value":2437},"      trigger_type",{"type":39,"tag":520,"props":2439,"children":2440},{"style":533},[2441],{"type":45,"value":536},{"type":39,"tag":520,"props":2443,"children":2444},{"style":539},[2445],{"type":45,"value":2446}," ${{ github.event_name }}\n",{"type":39,"tag":520,"props":2448,"children":2449},{"class":522,"line":875},[2450,2454,2458],{"type":39,"tag":520,"props":2451,"children":2452},{"style":527},[2453],{"type":45,"value":2163},{"type":39,"tag":520,"props":2455,"children":2456},{"style":533},[2457],{"type":45,"value":536},{"type":39,"tag":520,"props":2459,"children":2460},{"style":539},[2461],{"type":45,"value":2462}," ${{ inputs.models || 'all' }}\n",{"type":39,"tag":520,"props":2464,"children":2465},{"class":522,"line":891},[2466,2470,2474],{"type":39,"tag":520,"props":2467,"children":2468},{"style":527},[2469],{"type":45,"value":2224},{"type":39,"tag":520,"props":2471,"children":2472},{"style":533},[2473],{"type":45,"value":536},{"type":39,"tag":520,"props":2475,"children":2476},{"style":539},[2477],{"type":45,"value":2478}," ${{ inputs.ignore_schema_checks || false }}\n",{"type":39,"tag":520,"props":2480,"children":2481},{"class":522,"line":917},[2482,2486,2490],{"type":39,"tag":520,"props":2483,"children":2484},{"style":527},[2485],{"type":45,"value":2273},{"type":39,"tag":520,"props":2487,"children":2488},{"style":533},[2489],{"type":45,"value":536},{"type":39,"tag":520,"props":2491,"children":2492},{"style":539},[2493],{"type":45,"value":2494}," ${{ inputs.cog_version || 'latest' }}\n",{"type":39,"tag":520,"props":2496,"children":2497},{"class":522,"line":950},[2498,2502,2506],{"type":39,"tag":520,"props":2499,"children":2500},{"style":527},[2501],{"type":45,"value":2330},{"type":39,"tag":520,"props":2503,"children":2504},{"style":533},[2505],{"type":45,"value":536},{"type":39,"tag":520,"props":2507,"children":2508},{"style":539},[2509],{"type":45,"value":2510}," ${{ inputs.test_only || false }}\n",{"type":39,"tag":520,"props":2512,"children":2513},{"class":522,"line":966},[2514,2519,2523],{"type":39,"tag":520,"props":2515,"children":2516},{"style":527},[2517],{"type":45,"value":2518},"    secrets",{"type":39,"tag":520,"props":2520,"children":2521},{"style":533},[2522],{"type":45,"value":536},{"type":39,"tag":520,"props":2524,"children":2525},{"style":539},[2526],{"type":45,"value":2527}," inherit\n",{"type":39,"tag":235,"props":2529,"children":2530},{},[2531],{"type":45,"value":2532},"The reusable workflow expects:",{"type":39,"tag":48,"props":2534,"children":2535},{},[2536,2547,2566],{"type":39,"tag":52,"props":2537,"children":2538},{},[2539,2545],{"type":39,"tag":69,"props":2540,"children":2542},{"className":2541},[],[2543],{"type":45,"value":2544},"cog-safe-push-configs\u002F\u003Cmodel>.yaml",{"type":45,"value":2546}," — one per model variant.",{"type":39,"tag":52,"props":2548,"children":2549},{},[2550,2556,2558,2564],{"type":39,"tag":69,"props":2551,"children":2553},{"className":2552},[],[2554],{"type":45,"value":2555},"script\u002Fselect-model",{"type":45,"value":2557}," — bash file with ",{"type":39,"tag":69,"props":2559,"children":2561},{"className":2560},[],[2562],{"type":45,"value":2563},"if\u002Felif [[ \"$MODEL\" == \"...\" ]]",{"type":45,"value":2565}," blocks listing valid model names.",{"type":39,"tag":52,"props":2567,"children":2568},{},[2569,2571,2577,2578,2583,2584,2589],{"type":45,"value":2570},"Secrets: ",{"type":39,"tag":69,"props":2572,"children":2574},{"className":2573},[],[2575],{"type":45,"value":2576},"COG_TOKEN",{"type":45,"value":1458},{"type":39,"tag":69,"props":2579,"children":2581},{"className":2580},[],[2582],{"type":45,"value":220},{"type":45,"value":1458},{"type":39,"tag":69,"props":2585,"children":2587},{"className":2586},[],[2588],{"type":45,"value":386},{"type":45,"value":482},{"type":39,"tag":40,"props":2591,"children":2593},{"id":2592},"multi-model-matrix-pushes",[2594],{"type":45,"value":2595},"Multi-model matrix pushes",{"type":39,"tag":235,"props":2597,"children":2598},{},[2599,2601,2607],{"type":45,"value":2600},"Pattern from ",{"type":39,"tag":69,"props":2602,"children":2604},{"className":2603},[],[2605],{"type":45,"value":2606},"replicate\u002Fcog-flux",{"type":45,"value":2608},": one repo, N variants, push them in parallel.",{"type":39,"tag":241,"props":2610,"children":2612},{"className":512,"code":2611,"language":514,"meta":249,"style":249},"jobs:\n  prepare:\n    runs-on: ubuntu-latest\n    outputs:\n      matrix: ${{ steps.set.outputs.matrix }}\n    steps:\n      - id: set\n        run: |\n          if [ \"${{ inputs.models }}\" = \"all\" ]; then\n            echo 'matrix={\"model\":[\"schnell\",\"dev\",\"krea-dev\"]}' >> \"$GITHUB_OUTPUT\"\n          else\n            list=$(echo \"${{ inputs.models }}\" | jq -Rc 'split(\",\")')\n            echo \"matrix={\\\"model\\\":$list}\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n  push:\n    needs: prepare\n    runs-on: ubuntu-latest-4-cores\n    strategy:\n      fail-fast: false\n      matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - run: .\u002Fscript\u002Fselect.sh ${{ matrix.model }}     # produces cog.yaml from a template\n      - run: cog-safe-push --config cog-safe-push-configs\u002F${{ matrix.model }}.yaml -vv\n",[2613],{"type":39,"tag":69,"props":2614,"children":2615},{"__ignoreMap":249},[2616,2627,2639,2655,2667,2684,2695,2716,2731,2739,2747,2755,2763,2771,2779,2786,2797,2814,2830,2842,2858,2874,2885,2904,2929],{"type":39,"tag":520,"props":2617,"children":2618},{"class":522,"line":523},[2619,2623],{"type":39,"tag":520,"props":2620,"children":2621},{"style":527},[2622],{"type":45,"value":1650},{"type":39,"tag":520,"props":2624,"children":2625},{"style":533},[2626],{"type":45,"value":602},{"type":39,"tag":520,"props":2628,"children":2629},{"class":522,"line":545},[2630,2635],{"type":39,"tag":520,"props":2631,"children":2632},{"style":527},[2633],{"type":45,"value":2634},"  prepare",{"type":39,"tag":520,"props":2636,"children":2637},{"style":533},[2638],{"type":45,"value":602},{"type":39,"tag":520,"props":2640,"children":2641},{"class":522,"line":563},[2642,2646,2650],{"type":39,"tag":520,"props":2643,"children":2644},{"style":527},[2645],{"type":45,"value":1674},{"type":39,"tag":520,"props":2647,"children":2648},{"style":533},[2649],{"type":45,"value":536},{"type":39,"tag":520,"props":2651,"children":2652},{"style":539},[2653],{"type":45,"value":2654}," ubuntu-latest\n",{"type":39,"tag":520,"props":2656,"children":2657},{"class":522,"line":581},[2658,2663],{"type":39,"tag":520,"props":2659,"children":2660},{"style":527},[2661],{"type":45,"value":2662},"    outputs",{"type":39,"tag":520,"props":2664,"children":2665},{"style":533},[2666],{"type":45,"value":602},{"type":39,"tag":520,"props":2668,"children":2669},{"class":522,"line":591},[2670,2675,2679],{"type":39,"tag":520,"props":2671,"children":2672},{"style":527},[2673],{"type":45,"value":2674},"      matrix",{"type":39,"tag":520,"props":2676,"children":2677},{"style":533},[2678],{"type":45,"value":536},{"type":39,"tag":520,"props":2680,"children":2681},{"style":539},[2682],{"type":45,"value":2683}," ${{ steps.set.outputs.matrix }}\n",{"type":39,"tag":520,"props":2685,"children":2686},{"class":522,"line":26},[2687,2691],{"type":39,"tag":520,"props":2688,"children":2689},{"style":527},[2690],{"type":45,"value":1696},{"type":39,"tag":520,"props":2692,"children":2693},{"style":533},[2694],{"type":45,"value":602},{"type":39,"tag":520,"props":2696,"children":2697},{"class":522,"line":629},[2698,2702,2707,2711],{"type":39,"tag":520,"props":2699,"children":2700},{"style":533},[2701],{"type":45,"value":1084},{"type":39,"tag":520,"props":2703,"children":2704},{"style":527},[2705],{"type":45,"value":2706}," id",{"type":39,"tag":520,"props":2708,"children":2709},{"style":533},[2710],{"type":45,"value":536},{"type":39,"tag":520,"props":2712,"children":2713},{"style":539},[2714],{"type":45,"value":2715}," set\n",{"type":39,"tag":520,"props":2717,"children":2718},{"class":522,"line":648},[2719,2723,2727],{"type":39,"tag":520,"props":2720,"children":2721},{"style":527},[2722],{"type":45,"value":1911},{"type":39,"tag":520,"props":2724,"children":2725},{"style":533},[2726],{"type":45,"value":536},{"type":39,"tag":520,"props":2728,"children":2729},{"style":1918},[2730],{"type":45,"value":1921},{"type":39,"tag":520,"props":2732,"children":2733},{"class":522,"line":661},[2734],{"type":39,"tag":520,"props":2735,"children":2736},{"style":539},[2737],{"type":45,"value":2738},"          if [ \"${{ inputs.models }}\" = \"all\" ]; then\n",{"type":39,"tag":520,"props":2740,"children":2741},{"class":522,"line":679},[2742],{"type":39,"tag":520,"props":2743,"children":2744},{"style":539},[2745],{"type":45,"value":2746},"            echo 'matrix={\"model\":[\"schnell\",\"dev\",\"krea-dev\"]}' >> \"$GITHUB_OUTPUT\"\n",{"type":39,"tag":520,"props":2748,"children":2749},{"class":522,"line":707},[2750],{"type":39,"tag":520,"props":2751,"children":2752},{"style":539},[2753],{"type":45,"value":2754},"          else\n",{"type":39,"tag":520,"props":2756,"children":2757},{"class":522,"line":739},[2758],{"type":39,"tag":520,"props":2759,"children":2760},{"style":539},[2761],{"type":45,"value":2762},"            list=$(echo \"${{ inputs.models }}\" | jq -Rc 'split(\",\")')\n",{"type":39,"tag":520,"props":2764,"children":2765},{"class":522,"line":755},[2766],{"type":39,"tag":520,"props":2767,"children":2768},{"style":539},[2769],{"type":45,"value":2770},"            echo \"matrix={\\\"model\\\":$list}\" >> \"$GITHUB_OUTPUT\"\n",{"type":39,"tag":520,"props":2772,"children":2773},{"class":522,"line":780},[2774],{"type":39,"tag":520,"props":2775,"children":2776},{"style":539},[2777],{"type":45,"value":2778},"          fi\n",{"type":39,"tag":520,"props":2780,"children":2781},{"class":522,"line":811},[2782],{"type":39,"tag":520,"props":2783,"children":2784},{"emptyLinePlaceholder":585},[2785],{"type":45,"value":588},{"type":39,"tag":520,"props":2787,"children":2788},{"class":522,"line":827},[2789,2793],{"type":39,"tag":520,"props":2790,"children":2791},{"style":527},[2792],{"type":45,"value":1662},{"type":39,"tag":520,"props":2794,"children":2795},{"style":533},[2796],{"type":45,"value":602},{"type":39,"tag":520,"props":2798,"children":2799},{"class":522,"line":844},[2800,2805,2809],{"type":39,"tag":520,"props":2801,"children":2802},{"style":527},[2803],{"type":45,"value":2804},"    needs",{"type":39,"tag":520,"props":2806,"children":2807},{"style":533},[2808],{"type":45,"value":536},{"type":39,"tag":520,"props":2810,"children":2811},{"style":539},[2812],{"type":45,"value":2813}," prepare\n",{"type":39,"tag":520,"props":2815,"children":2816},{"class":522,"line":875},[2817,2821,2825],{"type":39,"tag":520,"props":2818,"children":2819},{"style":527},[2820],{"type":45,"value":1674},{"type":39,"tag":520,"props":2822,"children":2823},{"style":533},[2824],{"type":45,"value":536},{"type":39,"tag":520,"props":2826,"children":2827},{"style":539},[2828],{"type":45,"value":2829}," ubuntu-latest-4-cores\n",{"type":39,"tag":520,"props":2831,"children":2832},{"class":522,"line":891},[2833,2838],{"type":39,"tag":520,"props":2834,"children":2835},{"style":527},[2836],{"type":45,"value":2837},"    strategy",{"type":39,"tag":520,"props":2839,"children":2840},{"style":533},[2841],{"type":45,"value":602},{"type":39,"tag":520,"props":2843,"children":2844},{"class":522,"line":917},[2845,2850,2854],{"type":39,"tag":520,"props":2846,"children":2847},{"style":527},[2848],{"type":45,"value":2849},"      fail-fast",{"type":39,"tag":520,"props":2851,"children":2852},{"style":533},[2853],{"type":45,"value":536},{"type":39,"tag":520,"props":2855,"children":2856},{"style":617},[2857],{"type":45,"value":1405},{"type":39,"tag":520,"props":2859,"children":2860},{"class":522,"line":950},[2861,2865,2869],{"type":39,"tag":520,"props":2862,"children":2863},{"style":527},[2864],{"type":45,"value":2674},{"type":39,"tag":520,"props":2866,"children":2867},{"style":533},[2868],{"type":45,"value":536},{"type":39,"tag":520,"props":2870,"children":2871},{"style":539},[2872],{"type":45,"value":2873}," ${{ fromJson(needs.prepare.outputs.matrix) }}\n",{"type":39,"tag":520,"props":2875,"children":2876},{"class":522,"line":966},[2877,2881],{"type":39,"tag":520,"props":2878,"children":2879},{"style":527},[2880],{"type":45,"value":1696},{"type":39,"tag":520,"props":2882,"children":2883},{"style":533},[2884],{"type":45,"value":602},{"type":39,"tag":520,"props":2886,"children":2887},{"class":522,"line":991},[2888,2892,2896,2900],{"type":39,"tag":520,"props":2889,"children":2890},{"style":533},[2891],{"type":45,"value":1084},{"type":39,"tag":520,"props":2893,"children":2894},{"style":527},[2895],{"type":45,"value":1712},{"type":39,"tag":520,"props":2897,"children":2898},{"style":533},[2899],{"type":45,"value":536},{"type":39,"tag":520,"props":2901,"children":2902},{"style":539},[2903],{"type":45,"value":1721},{"type":39,"tag":520,"props":2905,"children":2906},{"class":522,"line":1021},[2907,2911,2915,2919,2924],{"type":39,"tag":520,"props":2908,"children":2909},{"style":533},[2910],{"type":45,"value":1084},{"type":39,"tag":520,"props":2912,"children":2913},{"style":527},[2914],{"type":45,"value":1845},{"type":39,"tag":520,"props":2916,"children":2917},{"style":533},[2918],{"type":45,"value":536},{"type":39,"tag":520,"props":2920,"children":2921},{"style":539},[2922],{"type":45,"value":2923}," .\u002Fscript\u002Fselect.sh ${{ matrix.model }}",{"type":39,"tag":520,"props":2925,"children":2926},{"style":623},[2927],{"type":45,"value":2928},"     # produces cog.yaml from a template\n",{"type":39,"tag":520,"props":2930,"children":2931},{"class":522,"line":1034},[2932,2936,2940,2944],{"type":39,"tag":520,"props":2933,"children":2934},{"style":533},[2935],{"type":45,"value":1084},{"type":39,"tag":520,"props":2937,"children":2938},{"style":527},[2939],{"type":45,"value":1845},{"type":39,"tag":520,"props":2941,"children":2942},{"style":533},[2943],{"type":45,"value":536},{"type":39,"tag":520,"props":2945,"children":2946},{"style":539},[2947],{"type":45,"value":2948}," cog-safe-push --config cog-safe-push-configs\u002F${{ matrix.model }}.yaml -vv\n",{"type":39,"tag":40,"props":2950,"children":2952},{"id":2951},"two-pass-push-for-proxy-official-models",[2953],{"type":45,"value":2954},"Two-pass push for proxy \u002F official models",{"type":39,"tag":235,"props":2956,"children":2957},{},[2958,2960,2966],{"type":45,"value":2959},"When you maintain a proxy that wraps a third-party API, you push to a private wrapper first, then update the public-facing official model card. Pattern from ",{"type":39,"tag":69,"props":2961,"children":2963},{"className":2962},[],[2964],{"type":45,"value":2965},"replicate\u002Fcog-official-template",{"type":45,"value":536},{"type":39,"tag":241,"props":2968,"children":2972},{"className":2969,"code":2970,"language":2971,"meta":249,"style":249},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",".\u002Fscript\u002Fwrite-api-key                                              # bake API key into config\ncog-safe-push --config cog-safe-push-configs\u002F${MODEL}.yaml -vv\n\n.\u002Fscript\u002Fdelete-api-key                                             # strip the key\ncog-safe-push --push-official-model --config cog-safe-push-configs\u002F${MODEL}.yaml -vv\n","bash",[2973],{"type":39,"tag":69,"props":2974,"children":2975},{"__ignoreMap":249},[2976,2990,3033,3040,3053],{"type":39,"tag":520,"props":2977,"children":2978},{"class":522,"line":523},[2979,2985],{"type":39,"tag":520,"props":2980,"children":2982},{"style":2981},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2983],{"type":45,"value":2984},".\u002Fscript\u002Fwrite-api-key",{"type":39,"tag":520,"props":2986,"children":2987},{"style":623},[2988],{"type":45,"value":2989},"                                              # bake API key into config\n",{"type":39,"tag":520,"props":2991,"children":2992},{"class":522,"line":545},[2993,2997,3002,3007,3012,3018,3023,3028],{"type":39,"tag":520,"props":2994,"children":2995},{"style":2981},[2996],{"type":45,"value":337},{"type":39,"tag":520,"props":2998,"children":2999},{"style":539},[3000],{"type":45,"value":3001}," --config",{"type":39,"tag":520,"props":3003,"children":3004},{"style":539},[3005],{"type":45,"value":3006}," cog-safe-push-configs\u002F",{"type":39,"tag":520,"props":3008,"children":3009},{"style":533},[3010],{"type":45,"value":3011},"${",{"type":39,"tag":520,"props":3013,"children":3015},{"style":3014},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[3016],{"type":45,"value":3017},"MODEL",{"type":39,"tag":520,"props":3019,"children":3020},{"style":533},[3021],{"type":45,"value":3022},"}",{"type":39,"tag":520,"props":3024,"children":3025},{"style":539},[3026],{"type":45,"value":3027},".yaml",{"type":39,"tag":520,"props":3029,"children":3030},{"style":539},[3031],{"type":45,"value":3032}," -vv\n",{"type":39,"tag":520,"props":3034,"children":3035},{"class":522,"line":563},[3036],{"type":39,"tag":520,"props":3037,"children":3038},{"emptyLinePlaceholder":585},[3039],{"type":45,"value":588},{"type":39,"tag":520,"props":3041,"children":3042},{"class":522,"line":581},[3043,3048],{"type":39,"tag":520,"props":3044,"children":3045},{"style":2981},[3046],{"type":45,"value":3047},".\u002Fscript\u002Fdelete-api-key",{"type":39,"tag":520,"props":3049,"children":3050},{"style":623},[3051],{"type":45,"value":3052},"                                             # strip the key\n",{"type":39,"tag":520,"props":3054,"children":3055},{"class":522,"line":591},[3056,3060,3065,3069,3073,3077,3081,3085,3089],{"type":39,"tag":520,"props":3057,"children":3058},{"style":2981},[3059],{"type":45,"value":337},{"type":39,"tag":520,"props":3061,"children":3062},{"style":539},[3063],{"type":45,"value":3064}," --push-official-model",{"type":39,"tag":520,"props":3066,"children":3067},{"style":539},[3068],{"type":45,"value":3001},{"type":39,"tag":520,"props":3070,"children":3071},{"style":539},[3072],{"type":45,"value":3006},{"type":39,"tag":520,"props":3074,"children":3075},{"style":533},[3076],{"type":45,"value":3011},{"type":39,"tag":520,"props":3078,"children":3079},{"style":3014},[3080],{"type":45,"value":3017},{"type":39,"tag":520,"props":3082,"children":3083},{"style":533},[3084],{"type":45,"value":3022},{"type":39,"tag":520,"props":3086,"children":3087},{"style":539},[3088],{"type":45,"value":3027},{"type":39,"tag":520,"props":3090,"children":3091},{"style":539},[3092],{"type":45,"value":3032},{"type":39,"tag":235,"props":3094,"children":3095},{},[3096,3098,3104,3106,3112],{"type":45,"value":3097},"Set ",{"type":39,"tag":69,"props":3099,"children":3101},{"className":3100},[],[3102],{"type":45,"value":3103},"official_model: owner\u002Fname",{"type":45,"value":3105}," in the config so ",{"type":39,"tag":69,"props":3107,"children":3109},{"className":3108},[],[3110],{"type":45,"value":3111},"--push-official-model",{"type":45,"value":3113}," knows where to publish.",{"type":39,"tag":40,"props":3115,"children":3117},{"id":3116},"deployments",[3118],{"type":45,"value":3119},"Deployments",{"type":39,"tag":235,"props":3121,"children":3122},{},[3123,3124,3129,3131,3136],{"type":45,"value":1934},{"type":39,"tag":69,"props":3125,"children":3127},{"className":3126},[],[3128],{"type":45,"value":14},{"type":45,"value":3130}," block to ",{"type":39,"tag":69,"props":3132,"children":3134},{"className":3133},[],[3135],{"type":45,"value":499},{"type":45,"value":3137}," to create or update a Replicate deployment automatically on each push:",{"type":39,"tag":241,"props":3139,"children":3141},{"className":512,"code":3140,"language":514,"meta":249,"style":249},"deployment:\n  name: my-model\n  owner: owner\n  hardware: gpu-l40s\n",[3142],{"type":39,"tag":69,"props":3143,"children":3144},{"__ignoreMap":249},[3145,3156,3171,3186],{"type":39,"tag":520,"props":3146,"children":3147},{"class":522,"line":523},[3148,3152],{"type":39,"tag":520,"props":3149,"children":3150},{"style":527},[3151],{"type":45,"value":14},{"type":39,"tag":520,"props":3153,"children":3154},{"style":533},[3155],{"type":45,"value":602},{"type":39,"tag":520,"props":3157,"children":3158},{"class":522,"line":545},[3159,3163,3167],{"type":39,"tag":520,"props":3160,"children":3161},{"style":527},[3162],{"type":45,"value":1317},{"type":39,"tag":520,"props":3164,"children":3165},{"style":533},[3166],{"type":45,"value":536},{"type":39,"tag":520,"props":3168,"children":3169},{"style":539},[3170],{"type":45,"value":1326},{"type":39,"tag":520,"props":3172,"children":3173},{"class":522,"line":563},[3174,3178,3182],{"type":39,"tag":520,"props":3175,"children":3176},{"style":527},[3177],{"type":45,"value":1335},{"type":39,"tag":520,"props":3179,"children":3180},{"style":533},[3181],{"type":45,"value":536},{"type":39,"tag":520,"props":3183,"children":3184},{"style":539},[3185],{"type":45,"value":1344},{"type":39,"tag":520,"props":3187,"children":3188},{"class":522,"line":581},[3189,3193,3197],{"type":39,"tag":520,"props":3190,"children":3191},{"style":527},[3192],{"type":45,"value":1353},{"type":39,"tag":520,"props":3194,"children":3195},{"style":533},[3196],{"type":45,"value":536},{"type":39,"tag":520,"props":3198,"children":3199},{"style":539},[3200],{"type":45,"value":578},{"type":39,"tag":235,"props":3202,"children":3203},{},[3204],{"type":45,"value":3205},"Scaling defaults: CPU deployments scale 1-20 instances, GPU deployments scale 0-2. Adjust manually via the API or web UI when needed.",{"type":39,"tag":40,"props":3207,"children":3209},{"id":3208},"monitoring-published-models",[3210],{"type":45,"value":3211},"Monitoring published models",{"type":39,"tag":235,"props":3213,"children":3214},{},[3215,3217,3223],{"type":45,"value":3216},"Run an hourly canary that exercises the registry path. Pattern from ",{"type":39,"tag":69,"props":3218,"children":3220},{"className":3219},[],[3221],{"type":45,"value":3222},"replicate\u002Fcog-pagerduty-check",{"type":45,"value":536},{"type":39,"tag":241,"props":3225,"children":3227},{"className":512,"code":3226,"language":514,"meta":249,"style":249},"name: Hourly cog push check\non:\n  schedule:\n    - cron: \"0 * * * *\"\n  workflow_dispatch:\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - run: |\n          # generate a tiny model with a unique uuid, push it, run a prediction\n          # by digest, fail loudly if anything breaks.\n          .\u002Fscript\u002Fcanary.sh\n",[3228],{"type":39,"tag":69,"props":3229,"children":3230},{"__ignoreMap":249},[3231,3247,3258,3270,3299,3310,3317,3328,3340,3355,3366,3385,3393,3401],{"type":39,"tag":520,"props":3232,"children":3233},{"class":522,"line":523},[3234,3238,3242],{"type":39,"tag":520,"props":3235,"children":3236},{"style":527},[3237],{"type":45,"value":1545},{"type":39,"tag":520,"props":3239,"children":3240},{"style":533},[3241],{"type":45,"value":536},{"type":39,"tag":520,"props":3243,"children":3244},{"style":539},[3245],{"type":45,"value":3246}," Hourly cog push check\n",{"type":39,"tag":520,"props":3248,"children":3249},{"class":522,"line":545},[3250,3254],{"type":39,"tag":520,"props":3251,"children":3252},{"style":617},[3253],{"type":45,"value":1562},{"type":39,"tag":520,"props":3255,"children":3256},{"style":533},[3257],{"type":45,"value":602},{"type":39,"tag":520,"props":3259,"children":3260},{"class":522,"line":563},[3261,3266],{"type":39,"tag":520,"props":3262,"children":3263},{"style":527},[3264],{"type":45,"value":3265},"  schedule",{"type":39,"tag":520,"props":3267,"children":3268},{"style":533},[3269],{"type":45,"value":602},{"type":39,"tag":520,"props":3271,"children":3272},{"class":522,"line":581},[3273,3277,3282,3286,3290,3295],{"type":39,"tag":520,"props":3274,"children":3275},{"style":533},[3276],{"type":45,"value":667},{"type":39,"tag":520,"props":3278,"children":3279},{"style":527},[3280],{"type":45,"value":3281}," cron",{"type":39,"tag":520,"props":3283,"children":3284},{"style":533},[3285],{"type":45,"value":536},{"type":39,"tag":520,"props":3287,"children":3288},{"style":533},[3289],{"type":45,"value":694},{"type":39,"tag":520,"props":3291,"children":3292},{"style":539},[3293],{"type":45,"value":3294},"0 * * * *",{"type":39,"tag":520,"props":3296,"children":3297},{"style":533},[3298],{"type":45,"value":704},{"type":39,"tag":520,"props":3300,"children":3301},{"class":522,"line":591},[3302,3306],{"type":39,"tag":520,"props":3303,"children":3304},{"style":527},[3305],{"type":45,"value":1574},{"type":39,"tag":520,"props":3307,"children":3308},{"style":533},[3309],{"type":45,"value":602},{"type":39,"tag":520,"props":3311,"children":3312},{"class":522,"line":26},[3313],{"type":39,"tag":520,"props":3314,"children":3315},{"emptyLinePlaceholder":585},[3316],{"type":45,"value":588},{"type":39,"tag":520,"props":3318,"children":3319},{"class":522,"line":629},[3320,3324],{"type":39,"tag":520,"props":3321,"children":3322},{"style":527},[3323],{"type":45,"value":1650},{"type":39,"tag":520,"props":3325,"children":3326},{"style":533},[3327],{"type":45,"value":602},{"type":39,"tag":520,"props":3329,"children":3330},{"class":522,"line":648},[3331,3336],{"type":39,"tag":520,"props":3332,"children":3333},{"style":527},[3334],{"type":45,"value":3335},"  check",{"type":39,"tag":520,"props":3337,"children":3338},{"style":533},[3339],{"type":45,"value":602},{"type":39,"tag":520,"props":3341,"children":3342},{"class":522,"line":661},[3343,3347,3351],{"type":39,"tag":520,"props":3344,"children":3345},{"style":527},[3346],{"type":45,"value":1674},{"type":39,"tag":520,"props":3348,"children":3349},{"style":533},[3350],{"type":45,"value":536},{"type":39,"tag":520,"props":3352,"children":3353},{"style":539},[3354],{"type":45,"value":2654},{"type":39,"tag":520,"props":3356,"children":3357},{"class":522,"line":679},[3358,3362],{"type":39,"tag":520,"props":3359,"children":3360},{"style":527},[3361],{"type":45,"value":1696},{"type":39,"tag":520,"props":3363,"children":3364},{"style":533},[3365],{"type":45,"value":602},{"type":39,"tag":520,"props":3367,"children":3368},{"class":522,"line":707},[3369,3373,3377,3381],{"type":39,"tag":520,"props":3370,"children":3371},{"style":533},[3372],{"type":45,"value":1084},{"type":39,"tag":520,"props":3374,"children":3375},{"style":527},[3376],{"type":45,"value":1845},{"type":39,"tag":520,"props":3378,"children":3379},{"style":533},[3380],{"type":45,"value":536},{"type":39,"tag":520,"props":3382,"children":3383},{"style":1918},[3384],{"type":45,"value":1921},{"type":39,"tag":520,"props":3386,"children":3387},{"class":522,"line":739},[3388],{"type":39,"tag":520,"props":3389,"children":3390},{"style":539},[3391],{"type":45,"value":3392},"          # generate a tiny model with a unique uuid, push it, run a prediction\n",{"type":39,"tag":520,"props":3394,"children":3395},{"class":522,"line":755},[3396],{"type":39,"tag":520,"props":3397,"children":3398},{"style":539},[3399],{"type":45,"value":3400},"          # by digest, fail loudly if anything breaks.\n",{"type":39,"tag":520,"props":3402,"children":3403},{"class":522,"line":780},[3404],{"type":39,"tag":520,"props":3405,"children":3406},{"style":539},[3407],{"type":45,"value":3408},"          .\u002Fscript\u002Fcanary.sh\n",{"type":39,"tag":235,"props":3410,"children":3411},{},[3412],{"type":45,"value":3413},"Worth doing for any production-critical model, especially when revenue depends on the registry being up.",{"type":39,"tag":40,"props":3415,"children":3417},{"id":3416},"guidelines",[3418],{"type":45,"value":3419},"Guidelines",{"type":39,"tag":48,"props":3421,"children":3422},{},[3423,3436,3448,3461,3466,3509,3528],{"type":39,"tag":52,"props":3424,"children":3425},{},[3426,3428,3434],{"type":45,"value":3427},"Don't break schema compatibility unless you mean to. cog-safe-push catches it; ",{"type":39,"tag":69,"props":3429,"children":3431},{"className":3430},[],[3432],{"type":45,"value":3433},"--ignore-schema-compatibility",{"type":45,"value":3435}," is the opt-out.",{"type":39,"tag":52,"props":3437,"children":3438},{},[3439,3441,3446],{"type":45,"value":3440},"Pin ",{"type":39,"tag":69,"props":3442,"children":3444},{"className":3443},[],[3445],{"type":45,"value":569},{"type":45,"value":3447}," so test pushes are reproducible.",{"type":39,"tag":52,"props":3449,"children":3450},{},[3451,3453,3459],{"type":45,"value":3452},"Use ",{"type":39,"tag":69,"props":3454,"children":3456},{"className":3455},[],[3457],{"type":45,"value":3458},"--no-push",{"type":45,"value":3460}," for dry runs in PR CI; full push on merge to main or on version tags.",{"type":39,"tag":52,"props":3462,"children":3463},{},[3464],{"type":45,"value":3465},"Push from CI rather than laptops once you have users.",{"type":39,"tag":52,"props":3467,"children":3468},{},[3469,3470,3475,3477,3483,3485,3491,3493,3499,3501,3507],{"type":45,"value":3452},{"type":39,"tag":69,"props":3471,"children":3473},{"className":3472},[],[3474],{"type":45,"value":1494},{"type":45,"value":3476}," for stochastic models. Use ",{"type":39,"tag":69,"props":3478,"children":3480},{"className":3479},[],[3481],{"type":45,"value":3482},"match_prompt:",{"type":45,"value":3484}," for image\u002Fvideo outputs (VLM judgment), ",{"type":39,"tag":69,"props":3486,"children":3488},{"className":3487},[],[3489],{"type":45,"value":3490},"match_url:",{"type":45,"value":3492}," for binary outputs you control, ",{"type":39,"tag":69,"props":3494,"children":3496},{"className":3495},[],[3497],{"type":45,"value":3498},"jq_query:",{"type":45,"value":3500}," for JSON, ",{"type":39,"tag":69,"props":3502,"children":3504},{"className":3503},[],[3505],{"type":45,"value":3506},"error_contains:",{"type":45,"value":3508}," for negative tests.",{"type":39,"tag":52,"props":3510,"children":3511},{},[3512,3514,3519,3521,3526],{"type":45,"value":3513},"Never commit ",{"type":39,"tag":69,"props":3515,"children":3517},{"className":3516},[],[3518],{"type":45,"value":220},{"type":45,"value":3520}," or ",{"type":39,"tag":69,"props":3522,"children":3524},{"className":3523},[],[3525],{"type":45,"value":386},{"type":45,"value":3527},". Use repo secrets.",{"type":39,"tag":52,"props":3529,"children":3530},{},[3531,3533,3538],{"type":45,"value":3532},"For models with weights > 1GB, push with ",{"type":39,"tag":69,"props":3534,"children":3536},{"className":3535},[],[3537],{"type":45,"value":298},{"type":45,"value":482},{"type":39,"tag":40,"props":3540,"children":3542},{"id":3541},"production-references",[3543],{"type":45,"value":3544},"Production references",{"type":39,"tag":48,"props":3546,"children":3547},{},[3548,3558,3568,3579,3590,3601],{"type":39,"tag":52,"props":3549,"children":3550},{},[3551,3556],{"type":39,"tag":58,"props":3552,"children":3554},{"href":90,"rel":3553},[62],[3555],{"type":45,"value":90},{"type":45,"value":3557}," — the tool itself, plus its config schema.",{"type":39,"tag":52,"props":3559,"children":3560},{},[3561,3566],{"type":39,"tag":58,"props":3562,"children":3564},{"href":101,"rel":3563},[62],[3565],{"type":45,"value":101},{"type":45,"value":3567}," — reusable GitHub Actions workflow.",{"type":39,"tag":52,"props":3569,"children":3570},{},[3571,3577],{"type":39,"tag":58,"props":3572,"children":3575},{"href":3573,"rel":3574},"https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-official-template",[62],[3576],{"type":45,"value":3573},{"type":45,"value":3578}," — proxy\u002Fofficial model template.",{"type":39,"tag":52,"props":3580,"children":3581},{},[3582,3588],{"type":39,"tag":58,"props":3583,"children":3586},{"href":3584,"rel":3585},"https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-flux\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Fpush.yaml",[62],[3587],{"type":45,"value":3584},{"type":45,"value":3589}," — matrix push across FLUX variants.",{"type":39,"tag":52,"props":3591,"children":3592},{},[3593,3599],{"type":39,"tag":58,"props":3594,"children":3597},{"href":3595,"rel":3596},"https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-comfyui\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Fci.yaml",[62],[3598],{"type":45,"value":3595},{"type":45,"value":3600}," — ComfyUI model CI with custom-node install step.",{"type":39,"tag":52,"props":3602,"children":3603},{},[3604,3610],{"type":39,"tag":58,"props":3605,"children":3608},{"href":3606,"rel":3607},"https:\u002F\u002Fgithub.com\u002Freplicate\u002Fcog-pagerduty-check",[62],[3609],{"type":45,"value":3606},{"type":45,"value":3611}," — hourly canary pattern.",{"type":39,"tag":3613,"props":3614,"children":3615},"style",{},[3616],{"type":45,"value":3617},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3619,"total":629},[3620,3631,3647,3657,3671,3683,3689],{"slug":135,"name":135,"fn":3621,"description":3622,"org":3623,"tags":3624,"stars":22,"repoUrl":23,"updatedAt":3630},"build and package custom AI models","Package and build custom AI models with Cog for deployment on Replicate. Use when creating a cog.yaml or predict.py, defining model inputs and outputs, loading model weights at setup time, building Docker images for ML models, serving locally with cog serve or cog predict, or porting a HuggingFace, GitHub, or ComfyUI model to run on Replicate. Trigger on phrases like \"build a model\", \"package a model\", \"create a Cog model\", \"wrap a model\", \"containerize an AI model\", \"predict.py\", \"cog.yaml\", \"BasePredictor\", or \"Cog container\", and when referencing cog.run, github.com\u002Freplicate\u002Fcog, or github.com\u002Freplicate\u002Fcog-examples. Covers GPU and CUDA setup, pget for fast weight downloads, async predictors with continuous batching, streaming outputs, and cold-boot optimization for image, video, audio, and LLM models. For pushing built models to Replicate, see publish-models. For running existing models, see run-models.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3625,3626,3627],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":3628,"slug":3629,"type":15},"Machine Learning","machine-learning","2026-07-16T06:02:28.318441",{"slug":3632,"name":3632,"fn":3633,"description":3634,"org":3635,"tags":3636,"stars":22,"repoUrl":23,"updatedAt":3646},"compare-models","compare Replicate AI models","Compare Replicate models by cost, speed, quality, and capabilities.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3637,3640,3643],{"name":3638,"slug":3639,"type":15},"Analysis","analysis",{"name":3641,"slug":3642,"type":15},"Benchmarking","benchmarking",{"name":3644,"slug":3645,"type":15},"LLM","llm","2026-07-16T06:03:10.401096",{"slug":3648,"name":3648,"fn":3649,"description":3650,"org":3651,"tags":3652,"stars":22,"repoUrl":23,"updatedAt":3656},"find-models","find AI models on Replicate","Find AI models on Replicate using search and curated collections.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3653,3654,3655],{"name":17,"slug":18,"type":15},{"name":3644,"slug":3645,"type":15},{"name":3628,"slug":3629,"type":15},"2026-07-16T06:01:52.508562",{"slug":3658,"name":3658,"fn":3659,"description":3660,"org":3661,"tags":3662,"stars":22,"repoUrl":23,"updatedAt":3670},"prompt-images","generate prompts for image models","Prompting techniques for AI image generation and editing models on Replicate. Use when writing prompts for image models or building image generation features.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3663,3666,3669],{"name":3664,"slug":3665,"type":15},"Creative","creative",{"name":3667,"slug":3668,"type":15},"Image Generation","image-generation",{"name":3644,"slug":3645,"type":15},"2026-07-16T06:01:52.867443",{"slug":3672,"name":3672,"fn":3673,"description":3674,"org":3675,"tags":3676,"stars":22,"repoUrl":23,"updatedAt":3682},"prompt-videos","generate prompts for AI video models","Prompting techniques for AI video generation models on Replicate. Use when writing prompts for video models or building video generation features.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3677,3678,3679],{"name":3664,"slug":3665,"type":15},{"name":3644,"slug":3645,"type":15},{"name":3680,"slug":3681,"type":15},"Video","video","2026-07-16T06:03:10.065511",{"slug":4,"name":4,"fn":5,"description":6,"org":3684,"tags":3685,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3686,3687,3688],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"slug":3690,"name":3690,"fn":3691,"description":3692,"org":3693,"tags":3694,"stars":22,"repoUrl":23,"updatedAt":3698},"run-models","run AI models on Replicate","Run AI models on Replicate via predictions, webhooks, and streaming.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3695,3696,3697],{"name":17,"slug":18,"type":15},{"name":3644,"slug":3645,"type":15},{"name":3628,"slug":3629,"type":15},"2026-07-16T06:03:09.738392",{"items":3700,"total":629},[3701,3707,3713,3719,3725,3731,3737],{"slug":135,"name":135,"fn":3621,"description":3622,"org":3702,"tags":3703,"stars":22,"repoUrl":23,"updatedAt":3630},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3704,3705,3706],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":3628,"slug":3629,"type":15},{"slug":3632,"name":3632,"fn":3633,"description":3634,"org":3708,"tags":3709,"stars":22,"repoUrl":23,"updatedAt":3646},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3710,3711,3712],{"name":3638,"slug":3639,"type":15},{"name":3641,"slug":3642,"type":15},{"name":3644,"slug":3645,"type":15},{"slug":3648,"name":3648,"fn":3649,"description":3650,"org":3714,"tags":3715,"stars":22,"repoUrl":23,"updatedAt":3656},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3716,3717,3718],{"name":17,"slug":18,"type":15},{"name":3644,"slug":3645,"type":15},{"name":3628,"slug":3629,"type":15},{"slug":3658,"name":3658,"fn":3659,"description":3660,"org":3720,"tags":3721,"stars":22,"repoUrl":23,"updatedAt":3670},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3722,3723,3724],{"name":3664,"slug":3665,"type":15},{"name":3667,"slug":3668,"type":15},{"name":3644,"slug":3645,"type":15},{"slug":3672,"name":3672,"fn":3673,"description":3674,"org":3726,"tags":3727,"stars":22,"repoUrl":23,"updatedAt":3682},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3728,3729,3730],{"name":3664,"slug":3665,"type":15},{"name":3644,"slug":3645,"type":15},{"name":3680,"slug":3681,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":3732,"tags":3733,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3734,3735,3736],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"slug":3690,"name":3690,"fn":3691,"description":3692,"org":3738,"tags":3739,"stars":22,"repoUrl":23,"updatedAt":3698},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3740,3741,3742],{"name":17,"slug":18,"type":15},{"name":3644,"slug":3645,"type":15},{"name":3628,"slug":3629,"type":15}]