Progress reporting allows you to track and display the progress of your recipe’s execution in Adaptive Engine. This is useful for long-running recipes where you want to monitor how much work has been completed and how much remains.Progress reporting consists of two main components:
Define stages: Define logical phases of your recipe execution up-front
Update progress: Report completion status for each stage
If you don’t want to constantly pass a “stage” parameter, you can create a StageNotifier, which is a copy of ctx.job that holds a default stage. AllTraining classes take in an optional stage_notifier parameter, which - as the name indicates - must be a stage-bounded notifier. This means you can follow the progress of training in # training samples processed from the Adaptive UI without having to edit the Trainer classes.
Finally, it’s frequent that you just want to report that something happened in your recipe, not necessarily that ”# X out of a total # Y” samples/steps have been processed. A good example is reporting that a model has been spawned, which is a milestone in the recipe, but is a single action. For these cases, to decrease code verbosity you can use the SimpleProgressNotifier progress manager:
from adaptive_harmony.runtime import SimpleProgressNotifierasync with SimpleProgressNotifier(ctx.job.stage_notifier("Spawning judge model")): judge = await ctx.client.model("model_registry://llama-3.3-70b").spawn_inference("judge")
SimpleProgressNotifier works in both synchronous and asynchronous contexts.
Once you have define your progress reporting strategy, uploaded and launched your recipe, the stages and progress will be displayed as below in the adaptive Engine:
The example above illustrate the reporting defined with the code below:
@recipe_mainasync def recipe(config: EvalConfig, ctx: RecipeContext): # load dataset... # spawn models... # Register recipe stages inference_stage, eval_stage = "Generating completions", "Evaluating completions" stages = [inference_stage, eval_stage] ctx.job.register_stages(stages) batch_size=20 # batch method not implemented here inference_batches = batch(dataset, batch_size=batch_size) completions = [] for i, batch in inference_batches: completions.extend([model.generate(thread) for thread in batch]) ctx.job.report_inference_progress(inference_stage, len(dataset), i * batch_size + len(batch)) eval_batches = batch(completions, batch_size=batch_size): grades = [] for i, batch in eval_batches: grades.extend(grades.extend([grader.grade(thread) for thread in batch])) ctx.job.report_progress( eval_stage, len(completions), i * batch_size + len(batch) ) print("Recipe finished")
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Adaptive ML Documentation","colors":{"primary":"#275AF1","light":"#80a0fe","dark":"#275AF1"},"logo":{"light":"https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/logo/new_adaptive_logo.png?fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=533f3281b841f120ead3f47eeea805b3","dark":"https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/logo/new_adaptive_logo_white.png?fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=e22d3354dfdbdfd4e092e3ada58c6c75"},"favicon":"https://mintcdn.com/adaptiveml/vkPwKLK0frhpPFY8/logo/purple_fav.svg?fit=max\u0026auto=format\u0026n=vkPwKLK0frhpPFY8\u0026q=85\u0026s=102965f15a992970771bf3b16a08ccf2","navbar":{"primary":{"type":"button","label":"Contact Us","href":"https://www.adaptive-ml.com/"}},"footer":{"socials":{"x":"https://twitter.com/AdaptiveML","linkedin":"https://www.linkedin.com/company/adaptive-ml"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"adaptiveml","hasAudioNarration":false,"actualSubdomain":"adaptiveml","customDomains":["docs.adaptive-ml.com"],"gitSource":{"type":"github","owner":"adaptive-ml","repo":"adaptonomicon","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e65633a4518725aab6dc","collectionId":"b7dacaa6-345e-4648-a28b-558d6a3a3648","schemaVersion":"v2"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae922285bfa35cf904498af:success","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"Harmony","count":52},{"language":"default","tag":"Adaptive Engine","count":38},{"language":"default","tag":"Core","count":17},{"language":"default","tag":"Building Blocks","count":16},{"language":"default","tag":"Advanced","count":12},{"language":"default","tag":"Training \u0026 Evaluation","count":12},{"language":"default","tag":"Cookbook","count":12},{"language":"default","tag":"Getting Started","count":10},{"language":"default","tag":"Custom graders","count":8},{"language":"default","tag":"Deploy","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".walkthrough-iframe{width:100%!important;border:none!important;background:transparent!important;aspect-ratio:5/4!important}@media (max-width: 600px){.walkthrough-iframe{aspect-ratio:1/1!important}}"}],"page":{"pagePath":"v0.10/recipes/guides/progress","slug":"/v0.10/recipes/guides/progress","pageMetadata":{"title":"Progress reporting","description":"Report the progress of your recipe to Adaptive","noindex":true,"href":"/v0.10/recipes/guides/progress"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Report the progress of your recipe to Adaptive\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Info,OptimizedImage}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`Progress reporting allows you to track and display the progress of your recipe’s execution in Adaptive Engine. This is useful for long-running recipes where you want to monitor how much work has been completed and how much remains.`}),`\n`,_jsx(_components.p,{children:`Progress reporting consists of two main components:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Define stages`}),`: Define logical phases of your recipe execution up-front`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Update progress`}),`: Report completion status for each stage`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`defining-stages`,children:`Defining Stages`}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`ctx.job.register_stages()`}),` to define the stages of your recipe:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Register recipe stages`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` adaptive_harmony `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` recipe_main, RecipeContext`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@recipe_main`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: RecipeContext):`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch_inference_stage, eval_stage `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Generating completions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Evaluating completions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ctx.job.register_stages(stages)`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Stages are displayed in the order they are registered and represent logical phases of your recipe execution.`}),`\n`,_jsx(Heading,{level:`2`,id:`reporting-progress`,children:`Reporting Progress`}),`\n`,_jsx(Heading,{level:`3`,id:`generic-notifier`,children:`Generic notifier`}),`\n`,_jsxs(_components.p,{children:[`Adaptive Engine provides a simple interface to report progress, which you can access via `,_jsx(_components.code,{children:`RecipeContext`}),` (generally shown as the `,_jsx(_components.code,{children:`ctx`}),` input parameter):`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# for training progress report`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`stage `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Generating grades\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`total `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1000`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`current `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 50`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ctx.job.report_progress(stage, total, current)`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`This will update the Adaptive run details UI to show you are now at 5% completion on the “Generating grades” stage (50/1000 are done).`}),`\n`,_jsx(Heading,{level:`3`,id:`stage-specific-notifier`,children:`Stage-specific notifier`}),`\n`,_jsxs(_components.p,{children:[`If you don’t want to constantly pass a “stage” parameter, you can create a `,_jsx(_components.code,{children:`StageNotifier`}),`, which is a copy of `,_jsx(_components.code,{children:`ctx.job`}),` that holds a default stage. All`,_jsx(_components.a,{href:`/v0.10/recipes/guides/training#trainers`,children:`Training classes`}),` take in an optional `,_jsx(_components.code,{children:`stage_notifier`}),` parameter, which - as the name indicates - must be a stage-bounded notifier. This means you can follow the progress of training in # training samples processed from the Adaptive UI without having to edit the Trainer classes.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` adaptive_harmony.common `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` GRPO`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`stage_notifier `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ctx.job.stage_notifier(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`stage`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"GRPO Training\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`trainer `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` GRPO(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` ...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` stage_notifier`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`stage_notifier,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`single-even-notifications`,children:`Single even notifications`}),`\n`,_jsxs(_components.p,{children:[`Finally, it’s frequent that you just want to report that something happened in your recipe, not necessarily that ”# X out of a total # Y” samples/steps have been processed. A good example is reporting that a model has been spawned, which is a milestone in the recipe, but is a single action. For these cases, to decrease code verbosity you can use the `,_jsx(_components.code,{children:`SimpleProgressNotifier`}),` progress manager:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` adaptive_harmony.runtime `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SimpleProgressNotifier`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` with`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SimpleProgressNotifier(ctx.job.stage_notifier(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Spawning judge model\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` judge `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ctx.client.model(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"model_registry://llama-3.3-70b\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).spawn_inference(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"judge\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`]})})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SimpleProgressNotifier`}),` works in both synchronous and asynchronous contexts.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`visualizing-progress-on-the-adaptive-ui`,children:`Visualizing progress on the Adaptive UI`}),`\n`,_jsx(_components.p,{children:`Once you have define your progress reporting strategy, uploaded and launched your recipe, the stages and progress will be displayed as below in the adaptive Engine:`}),`\n`,_jsx(Frame,{caption:_jsx(_components.span,{children:`Progress visualization of a run on the Adaptive Engine`}),children:_jsx(OptimizedImage,{src:`https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/static/run_progress.png?fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=a256cdda2048d0a8803d94ad609127c5`,\"data-og-width\":`1274`,width:`1274`,\"data-og-height\":`324`,height:`324`,\"data-path\":`static/run_progress.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/static/run_progress.png?w=280\u0026fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=adf46d50f72e430a4b3545777e7b6aa2 280w, https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/static/run_progress.png?w=560\u0026fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=7b315efb08baf497279413b78d1aad64 560w, https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/static/run_progress.png?w=840\u0026fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=c2ecc67e4d3c5ac626bca6eee09595a4 840w, https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/static/run_progress.png?w=1100\u0026fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=079d14c6720af50a3757356c5a612495 1100w, https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/static/run_progress.png?w=1650\u0026fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=51febf494fcec2f7ba86953254f585a0 1650w, https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/static/run_progress.png?w=2500\u0026fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=ce859a627e3ff5f37f161ebc4c538156 2500w`})}),`\n`,_jsx(_components.p,{children:`The example above illustrate the reporting defined with the code below:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`31`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`31`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@recipe_main`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` recipe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: EvalConfig, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: RecipeContext):`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # load dataset...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # spawn models...`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Register recipe stages`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` inference_stage, eval_stage `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Generating completions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Evaluating completions\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` stages `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [inference_stage, eval_stage]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ctx.job.register_stages(stages)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch_size`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`20`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # batch method not implemented here`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` inference_batches `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch(dataset, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`batch_size`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`batch_size)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` completions `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` []`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` i, batch `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` inference_batches:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` completions.extend([model.generate(thread) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` thread `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch])`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ctx.job.report_inference_progress(inference_stage, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`len`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(dataset), i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch_size `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`+`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` len`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(batch))`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` eval_batches `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch(completions, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`batch_size`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`batch_size):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` grades `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` []`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` i, batch `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` eval_batches:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` grades.extend(grades.extend([grader.grade(thread) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` thread `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch]))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ctx.job.report_progress(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` eval_stage,`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` len`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(completions),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` i `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch_size `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`+`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` len`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(batch)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Recipe finished\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Progress reporting","description":"Report the progress of your recipe to Adaptive","noindex":true,"href":"/v0.10/recipes/guides/progress"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Defining Stages","slug":"defining-stages","depth":2,"children":[]},{"title":"Reporting Progress","slug":"reporting-progress","depth":2,"children":[{"title":"Generic notifier","slug":"generic-notifier","depth":3,"children":[]},{"title":"Stage-specific notifier","slug":"stage-specific-notifier","depth":3,"children":[]},{"title":"Single even notifications","slug":"single-even-notifications","depth":3,"children":[]}]},{"title":"Visualizing progress on the Adaptive UI","slug":"visualizing-progress-on-the-adaptive-ui","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"adaptiveml","siteName":"Adaptive ML Documentation","title":"Progress reporting - Adaptive ML Documentation","navMaps":{"firstHrefInVersion":{"v0.14":{"href":"/v0.14/introduction","matchLevel":4},"v0.13":{"href":"/v0.13/introduction","matchLevel":4},"v0.12":{"href":"/v0.12/introduction","matchLevel":4},"v0.11":{"href":"/v0.11/introduction","matchLevel":4},"v0.10":{"href":"/v0.10/recipes/guides/progress","matchLevel":0},"v0.8":{"href":"/v0.8/recipes/guides/progress","matchLevel":1,"noindex":true},"v0.7":{"href":"/v0.7/recipes/guides/progress","matchLevel":1,"noindex":true},"v0.6":{"href":"/release-notes","matchLevel":4},"v0.5":{"href":"/release-notes","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-01-26T01:47:33.621Z","originalFileLocation":"v0.10/recipes/guides/progress.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Report the progress of your recipe to Adaptive\">\u003cmeta data-mint-head name=\"application-name\" content=\"Adaptive ML Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Progress reporting - Adaptive ML Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Report the progress of your recipe to Adaptive\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Adaptive ML Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.adaptive-ml.com/v0.10/recipes/guides/progress\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://adaptiveml.mintlify.app/_mintlify/api/og/v2?division=Writing+custom+recipes\u0026amp;title=Progress+reporting\u0026amp;description=Report+the+progress+of+your+recipe+to+Adaptive\u0026amp;theme=e2be52ca69cd8e6c4f326c14\u0026amp;signature=8c3cb684da08f1fd0efe79c8333ce4c011c0346abf65b015ef892fc8d33a08d8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Progress reporting - Adaptive ML Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Report the progress of your recipe to Adaptive\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://adaptiveml.mintlify.app/_mintlify/api/og/v2?division=Writing+custom+recipes\u0026amp;title=Progress+reporting\u0026amp;description=Report+the+progress+of+your+recipe+to+Adaptive\u0026amp;theme=e2be52ca69cd8e6c4f326c14\u0026amp;signature=8c3cb684da08f1fd0efe79c8333ce4c011c0346abf65b015ef892fc8d33a08d8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Adaptive ML Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#275AF1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.adaptive-ml.com/v0.10/recipes/guides/progress\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v0.10/recipes/guides/progress.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Adaptive ML Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Adaptive ML Documentation","nav":{"global":null,"versions":[{"version":"v0.14","default":true,"pages":[{"title":"v0.14","href":"/v0.14/introduction"}]},{"version":"v0.13","default":true,"pages":[{"title":"v0.13","href":"/v0.13/introduction"}]},{"version":"v0.12","pages":[{"title":"v0.12","href":"/v0.12/introduction"}]},{"version":"v0.11","pages":[{"title":"v0.11","href":"/v0.11/introduction"}]},{"version":"v0.10","tabs":[{"tab":"Documentation","groups":[{"group":" ","pages":[{"title":"Release notes","href":"/release-notes"},{"title":"Getting Started","href":"/v0.10/introduction/introduction"},{"title":"Quickstart example","href":"/v0.10/introduction/quickstart"}]},{"group":"Platform","pages":[{"title":"Concepts","href":"/v0.10/platform/concepts"},{"title":"System architecture","href":"/v0.10/platform/system-architecture"},{"title":"Permissions, roles and teams","href":"/v0.10/platform/permissions"},{"title":"API Authentication","href":"/v0.10/platform/authentication"},{"title":"Use cases","href":"/v0.10/platform/use-cases"},{"title":"Models","href":"/v0.10/platform/models"}]},{"group":"Inference","pages":[{"title":"Make inference requests","href":"/v0.10/inference/make_requests"},{"title":"Inference optimization tips","href":"/v0.10/inference/optimization"}]},{"group":"Evaluation","pages":[{"title":"Evaluate Models","href":"/v0.10/evaluation/evaluate"},{"title":"A/B Tests","href":"/v0.10/evaluation/ab_testing"}]},{"group":"Graders","pages":[{"title":"Overview","href":"/v0.10/graders/overview"},{"title":"AI Judges","href":"/v0.10/graders/ai_judge"},{"title":"Pre-built AI Judges","href":"/v0.10/graders/prebuilt"},{"title":"Reward servers","href":"/v0.10/graders/reward-servers"},{"title":"Recipe Grader","href":"/v0.10/graders/recipe_grader"}]},{"group":"Recipes \u0026 Runs","pages":[{"title":"Recipes","href":"/v0.10/recipes/recipes"},{"title":"Runs","href":"/v0.10/recipes/runs"},{"group":"Writing custom recipes","pages":[{"title":"Prerequisites and setup","href":"/v0.10/recipes/guides/install"},{"title":"Harmony client and local testing","href":"/v0.10/recipes/guides/harmony_client"},{"title":"Recipe syntax","href":"/v0.10/recipes/guides/intro_synthax"},{"title":"Input configuration","href":"/v0.10/recipes/guides/config"},{"title":"Load models","href":"/v0.10/recipes/guides/models"},{"title":"Load datasets and StringThread","href":"/v0.10/recipes/guides/datasets"},{"title":"Load Graders","href":"/v0.10/recipes/guides/product_graders"},{"title":"Structured generation","href":"/v0.10/recipes/guides/structured_output"},{"title":"Create a Recipe Grader","href":"/v0.10/recipes/guides/graders"},{"title":"Create a training recipe","href":"/v0.10/recipes/guides/training"},{"title":"Create an evaluation recipe","description":"Write your own recipe for model evaluation, and log eval artifacts to the product","href":"/v0.10/recipes/guides/eval"},{"title":"Progress reporting","href":"/v0.10/recipes/guides/progress"}]}]},{"group":"Datasets","pages":[{"title":"Upload datasets","description":"Upload datasets to Adaptive Engine for training and evaluation","href":"/v0.10/datasets/upload"}]},{"group":"Interactions","pages":[{"title":"Overview","href":"/v0.10/interactions/overview"},{"title":"Feedback","href":"/v0.10/interactions/feedback"}]},{"group":"Integrations","pages":[{"title":"LangChain","href":"/v0.10/integrations/langchain"},{"title":"Connect proprietary models","href":"/v0.10/integrations/proprietary-models"}]},{"group":"Deployment","pages":[{"group":"Self-hosting on Kubernetes","pages":[{"title":"Prerequisites \u0026 checklist","href":"/v0.10/deployment/helm"},{"title":"Advanced considerations","href":"/v0.10/deployment/advanced-considerations"}]}]}]},{"tab":"SDK Reference","pages":[{"title":"SDK Reference","href":"/v0.10/sdk-reference/reference"}]}]},{"version":"v0.8","pages":[{"title":"v0.8","href":"/v0.8/recipes/guides/progress"}]},{"version":"v0.7","pages":[{"title":"v0.7","href":"/v0.7/recipes/guides/progress"}]},{"version":"v0.6","pages":[{"title":"v0.6","href":"/release-notes"}]},{"version":"v0.5","pages":[{"title":"v0.5","href":"/release-notes"}]}]},"basePath":"","title":"Progress reporting - Adaptive ML Documentation","buildId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","deploymentId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","dynamics":["07c022d89b","a74be98ba7","a9bb46feb3"],"chunks":["Frame-BJc2v2A3.js","DynamicMarkdown-CWvhfcZc.js","zoom-image-lightbox-CAita2ok.js","lightbox-handle-r17bVUz3.js","Markdown-C4Ez6OeV.js","clsx-DptzKFCt.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Dt1IougW.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CZ6Wt2Vb.js"]}