From 8fc65a0f8338e375cdf51c7e582a40a7b95f4345 Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 22:56:33 -0500 Subject: [PATCH 01/10] Add links to videos --- .../simulate-intervention-policy.md | 2 + docs/datasets/index.md | 2 + docs/get-started/video.md | 47 +++++++++++++++++++ docs/index.md | 3 +- docs/modeling/create-model-from-equations.md | 4 +- docs/modeling/edit-model.md | 2 + docs/modeling/stratify-model.md | 2 + docs/simulation/calibrate-model.md | 2 + docs/stylesheets/extra.css | 7 +++ mkdocs.yml | 1 + 10 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 docs/get-started/video.md diff --git a/docs/config-and-intervention/simulate-intervention-policy.md b/docs/config-and-intervention/simulate-intervention-policy.md index a340601..589567e 100644 --- a/docs/config-and-intervention/simulate-intervention-policy.md +++ b/docs/config-and-intervention/simulate-intervention-policy.md @@ -6,6 +6,8 @@ title: Simulate an intervention policy You can simulate an intervention policy to assess the impact of your intervention on a variable of interest. For example, you can see how increasing vaccination rate affects hospitalizations. + + ## Build an intervention policy simulation workflow You can build a workflow to simulate an intervention policy manually. diff --git a/docs/datasets/index.md b/docs/datasets/index.md index f507c6c..dd5e309 100644 --- a/docs/datasets/index.md +++ b/docs/datasets/index.md @@ -13,6 +13,8 @@ You can use uploaded datasets or simulation results to [configure](../config-and The Transform data operator can also serve as a place to visually plot and compare multiple datasets or simulation results. + + !!! note For information about uploading datasets, see [Gather modeling resources](../gather-resources/index.md). diff --git a/docs/get-started/video.md b/docs/get-started/video.md new file mode 100644 index 0000000..1f95434 --- /dev/null +++ b/docs/get-started/video.md @@ -0,0 +1,47 @@ +--- +title: Instructional videos +--- + +# Instructional videos + +The following videos show how to use Terarium to, for example: + +- Create models. +- Edit models. +- Work with data. +- Run what-if scenarios. +- Calibrate models. +- Create, simulate, and optimize intervention policies. +- Stratify models. + +## Introduction + + + +## Working with data + + + +## Creating a model from equations + + + +## Editing a model + + + +## Calibration + + + +## Simulating intervention policies + + + +## Optimizing intervention policies + + + +## Stratification + + \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 8b1d928..1dbe5b8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,6 +9,7 @@ Terarium is a modeling and simulation workbench designed to help you assess and
[Using Terarium](get-started/using-terarium.md){ .md-button } [Get started](get-started/example-workflow.md){ .md-button } +[Instructional videos](get-started/video.md){ .md-button }
Regardless of your level of programming experience, Terarium allows you to: @@ -20,7 +21,7 @@ Regardless of your level of programming experience, Terarium allows you to: - :fontawesome-solid-chart-line:{ .lg .middle } **Analyze the results** -![The Terarium home screen with a list of projects and related papers](img/terarium-home.jpg) + Need more help? Check out these topics: diff --git a/docs/modeling/create-model-from-equations.md b/docs/modeling/create-model-from-equations.md index 6a3f3ac..8d55a07 100644 --- a/docs/modeling/create-model-from-equations.md +++ b/docs/modeling/create-model-from-equations.md @@ -9,7 +9,7 @@ The Create model from equations operator helps you to recreate a model from lite 1. [Choose or enter the equations](#choose-the-equations) you want to include in the model. 2. [Create the model](#create-the-model) as an output or resource for use in other modeling and configuration processes. -![SIR model created from equations extracted from a COVID-19 research paper](../img/models/model-create-from-equations.png) + !!! note @@ -59,6 +59,8 @@ You can create a model from a set of ordinary differential equations by: - [Uploading and extracting equations from an image](#extract-equations-from-an-image). - [Manually entering equations as LaTeX code](#enter-your-own-equations). +![SIR model created from equations extracted from a COVID-19 research paper](../img/models/model-create-from-equations.png) + To ensure the best results, Terarium uses a set of [LaTeX formatting guidelines](#recommended-latex-format) when converting extracted equations. It is recommended that you follow these guidelines for any LaTeX you add or edit as well. ### Select equations from a document diff --git a/docs/modeling/edit-model.md b/docs/modeling/edit-model.md index 6b3bf3a..73a94c6 100644 --- a/docs/modeling/edit-model.md +++ b/docs/modeling/edit-model.md @@ -14,6 +14,8 @@ Model editing lets you build on existing models. Supported edits include: The Edit model operator is a code notebook with an interactive AI assistant. You describe in plain language the changes you want to make, and the large language model (LLM)-powered assistant automatically generates the code for you. + + !!! note The Edit model operator adapts to your coding experience. You can: diff --git a/docs/modeling/stratify-model.md b/docs/modeling/stratify-model.md index 333ef3d..804e2ad 100644 --- a/docs/modeling/stratify-model.md +++ b/docs/modeling/stratify-model.md @@ -6,6 +6,8 @@ title: "Stratify a model" You can make a simple model more complex by stratifying its state variables and parameters. Stratification builds many different versions of a model and its parameters—by location, demographics, or other contextual data—into one large model. You can then configure, calibrate, or simulate the combined models all at once. + + ## Stratify model operator In a workflow, the Stratify model operator takes a model as an input and outputs a stratified version of the model. diff --git a/docs/simulation/calibrate-model.md b/docs/simulation/calibrate-model.md index 741f5a9..a8cefe1 100644 --- a/docs/simulation/calibrate-model.md +++ b/docs/simulation/calibrate-model.md @@ -6,6 +6,8 @@ title: "Calibrate a model" Calibration lets you improve the performance of a model by updating the value of configuration parameters. You can calibrate a model with a reference dataset of observations and an optional intervention policy. + + ## Calibrate operator In a workflow, the Calibrate operator takes a model configuration, a dataset, and optional interventions as inputs. It outputs a calibrated model configuration. diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 0a0764d..fb81586 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -299,4 +299,11 @@ div.highlight.wrap pre code { a.headerlink{ text-decoration: none; +} + +iframe.video { + display: block; /* Ensures it's treated as a block element */ + margin: 0 auto; /* Center it horizontally */ + padding: 0; + border-width: 0; } \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index d75507b..26a4822 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -96,6 +96,7 @@ nav: - Get started: - Using Terarium: get-started/using-terarium.md - "Tutorial: Recreate, modify, and simulate a model": get-started/example-workflow.md + - Instructional videos: get-started/video.md - Gather modeling resources: gather-resources/index.md - Build a workflow graph: workflows/index.md - Review and transform data: From 8e264dca2278269a734979689e0b0aa3df08912c Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 22:56:59 -0500 Subject: [PATCH 02/10] Add tip for pasting in matrix values --- docs/config-and-intervention/configure-model.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/config-and-intervention/configure-model.md b/docs/config-and-intervention/configure-model.md index 7b485a1..1193417 100644 --- a/docs/config-and-intervention/configure-model.md +++ b/docs/config-and-intervention/configure-model.md @@ -135,6 +135,11 @@ When you edit or create a model configuration, you can set a start date for its You can edit the initial values of model state variables either as numeric values or as expressions involving other states or parameters. Initials written as expressions must follow [SymPy](https://docs.sympy.org/latest/tutorials/intro-tutorial/basic_operations.html) :octicons-link-external-24:{ alt="External link" title="External link" } syntax. 1. If your state variable is stratified, click Expand :fontawesome-solid-greater-than:{ title="Expand" aria-labelledby="expand-icon-label" } to show the stratified states. + + ???+ tip + + To set all the stratified variables at once, copy a range of values from a spreadsheet, click **Open matrix**, and then click **Paste**. + 2. Do one of the following actions: - Enter a numeric value or a [SymPy](https://docs.sympy.org/latest/tutorials/intro-tutorial/basic_operations.html) :octicons-link-external-24:{ alt="External link" title="External link" } expression in the **Expression** field. @@ -145,6 +150,11 @@ When you edit or create a model configuration, you can set a start date for its ??? list "Edit the value of a parameter" 1. If your parameter is stratified, click Expand :fontawesome-solid-greater-than:{ title="Expand" aria-labelledby="expand-icon-label" } to show the stratified parameters. + + ???+ tip + + To set all the stratified parameters at once, copy a range of values from a spreadsheet, click **Open matrix**, and then click **Paste**. + 2. Choose the type of value to enter: - To enter a single unchanging value, select **Constant** and enter the value. From 51109b4066ce73edefc2d65a20a817175ff0fa7e Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 22:57:57 -0500 Subject: [PATCH 03/10] Add dataset as valid Create intervention policy input --- .../create-intervention-policy.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/config-and-intervention/create-intervention-policy.md b/docs/config-and-intervention/create-intervention-policy.md index e91b4d4..5a87122 100644 --- a/docs/config-and-intervention/create-intervention-policy.md +++ b/docs/config-and-intervention/create-intervention-policy.md @@ -24,6 +24,7 @@ Once you've created the intervention policy, the thumbnail preview shows brief d - Model - Document (optional) + - Dataset (optional) - :material-arrow-expand-right:{ .lg .middle aria-hidden="true" } __Outputs__ @@ -44,7 +45,7 @@ Once you've created the intervention policy, the thumbnail preview shows brief d Use the Create intervention policy operator to: -- [Extract an intervention policy from a document](#extract-an-intervention-policy-from-a-document). +- [Extract an intervention policy from a project resource](#extract-an-intervention-policy-from-a-project-resource). - [Select from previously saved interventions](#choose-an-existing-intervention). - [Manually edit or create an intervention](#edit-or-create-an-intervention). @@ -52,13 +53,13 @@ Use the Create intervention policy operator to: - Make sure you've connected a model to the Create intervention policy operator and then click **Open**. -### Extract an intervention policy from a document +### Extract an intervention policy from a project resource -You can automatically attempt to extract intervention policies from any attached documents. +You can automatically attempt to extract intervention policies from any attached documents or datasets. ![](../img/config-and-intervention/intervention/extract.png) -??? list "Extract an intervention policy from a document" +??? list "Extract an intervention policy from a document or dataset" 1. Click **Extract from inputs**. 2. Review and edit any of the extracted intervention policy settings as needed. @@ -95,8 +96,9 @@ You can create: ??? list "Add a new intervention" - 1. Click :octicons-plus-24:{ aria-hidden="true" } **Add intervention**. - 2. Click Edit :octicons-pencil-24:{ title="Edit" aria-labelledby="edit-icon-label"}, enter a unique name, and then click Apply :octicons-check-24:{ title="Apply" aria-hidden="true" aria-labelledby="apply-icon-label"}. + 1. Click :octicons-plus-24:{ aria-hidden="true" } **Create new**. + 2. Click :octicons-plus-24:{ aria-hidden="true" } **Add intervention**. + 3. Click Edit :octicons-pencil-24:{ title="Edit" aria-labelledby="edit-icon-label"}, enter a unique name, and then click Apply :octicons-check-24:{ title="Apply" aria-hidden="true" aria-labelledby="apply-icon-label"}. ??? list "Set up a static intervention" From 1b106f376e6e150069a4e4d106dcadb469192dc3 Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 22:58:23 -0500 Subject: [PATCH 04/10] Add Observables to available chart types --- .../validate-model-configuration.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/config-and-intervention/validate-model-configuration.md b/docs/config-and-intervention/validate-model-configuration.md index e4bd1f3..22197a5 100644 --- a/docs/config-and-intervention/validate-model-configuration.md +++ b/docs/config-and-intervention/validate-model-configuration.md @@ -202,25 +202,29 @@ The validated configuration is displayed as a series of plots showing the satisf - Click **Only show furthest results**. -### States time-series +### States variables and observables -State variable plots provide a time-series view of how model variables evolve over time. They offer a visual representation of how well the model satisfies constraints and checks under different parameter combinations. There is one trajectory per sampled point in the parameter space: +State variable and observables plots provide a time-series view of how model variables evolve over time. They offer a visual representation of how well the model satisfies constraints and checks under different parameter combinations. There is one trajectory per sampled point in the parameter space: - Dark green lines satisfy all model checks. - Yellow lines do not satisfy all model checks. - Light green lines are ambiguous. - Light blue boxes show the constraints you set up. -![](../img/config-and-intervention/validate/state-variables.png) +
+ +- ![](../img/config-and-intervention/validate/state-variables.png) +- ![](../img/config-and-intervention/validate/observables.png) +
-??? list "Show or hide state variable plots" +??? list "Show or hide state variable or observable plots" 1. Click Expand :fontawesome-solid-angles-left:{ title="Expand" aria-labelledby="expand-icon-label" } to expand the Output settings. 2. Do one of the following actions: - - Use the dropdown to search, select, or clear different state variables. - - Click **X** to remove a state variable plot. + - Use the dropdown to search, select, or clear different variables. + - Click **X** to remove a variable plot. ??? list "Focus on model checks" From d09e9edb400773a9f3834a7135d1bd230a9a597c Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 23:00:10 -0500 Subject: [PATCH 05/10] Add chart annotation instructions --- docs/datasets/compare-datasets.md | 61 +++++++++++++++++++++++++++++++ docs/notes/index.md | 38 +++++++++++++++++-- 2 files changed, 96 insertions(+), 3 deletions(-) diff --git a/docs/datasets/compare-datasets.md b/docs/datasets/compare-datasets.md index 5fcca48..4d3e27d 100644 --- a/docs/datasets/compare-datasets.md +++ b/docs/datasets/compare-datasets.md @@ -83,6 +83,67 @@ You can tailor the resulting comparison plots to highlight the most relevant asp - **Default** (mean) - **Quantiles** (specify upper and lower bounds). +### Annotate charts + +Adding annotations to charts helps highlight key insights and guide interpretation of data. You can create annotations manually or using AI assistance. + +??? list "Add annotations that call out key values and timesteps" + + To highlight notable findings, you can manually add annotations that label plotted values at key timesteps. + + 1. Click anywhere on the chart to add a callout. + 2. To add more callouts without clearing the first one, hold down ++shift++ and click a new area of the chart. + +??? list "Prompt an AI assistant to add chart annotations" + + You can prompt an AI assistant to automatically create annotations on the variables over time and comparison charts. Annotations are labelled or unlabelled lines that mark specific timestamps or peak values. Examples of AI-assisted annotations are listed below. + + 1. Click Options :octicons-gear-24:{ title="Options" aria-labelledby="options-icon-label" }. + 2. Describe the annotations you want to add and press ++enter++. + + ```{ .text .wrap } + Draw a vertical line at day 100 + ``` + ```{ .text .wrap } + Draw a line at the peak S after calibration + ``` + ```{ .text .wrap } + Draw a horizontal line at the peak of default configuration Susceptible after calibration. Label it as "important" + ``` + ```{ .text .wrap } + Draw a vertical line at x is 10. Don't add the label + ``` + ```{ .text .wrap } + Draw a line at x = 40 only for ensemble after calibration + +#### Display options + +You can customize the appearance of your charts to enhance readability and organization of the results. + +??? list "Access additional chart settings" + + To access additional options for each chart: + + - Click Options :octicons-gear-24:{ title="Options" aria-labelledby="options-icon-label" }. + +??? list "Change the chart scale" + + By default, charts are shown in linear scale. You can switch to log scale to view large ranges, exponential trends, and improve visibility of small variations. + + - Select or clear **Use log scale**. + +??? list "Hide in node" + + The variables you choose to plot appear in the results panel and as thumbnails on the Compare datasets operator in the workflow. You can hide the thumbnail preview to minimize the space the Compare datasets node takes up. + + - Select **Hide in node**. + +??? list "Change parameter colors" + + You can change the color of any variable to make your charts easier to read. + + - Click the color picker and choose a new color from the palette or use the eye dropper to select a color shown on your screen. + ## Rank interventions More info coming soon. \ No newline at end of file diff --git a/docs/notes/index.md b/docs/notes/index.md index a8ec759..2e81be4 100644 --- a/docs/notes/index.md +++ b/docs/notes/index.md @@ -8,12 +8,13 @@ You can capture and save insights you've gained during your modeling processes: - Directly on the operator where you discovered them. - In the project overview. +- On charts generated through simulations and calibrations. ## Add a note to a workflow operator You can add notes to any operator in the workflow graph. -???+ list "Add a note to a workflow operator" +??? list "Add a note to a workflow operator" 1. Perform one of the following actions: - On the operator in the workflow graph, click Menu :fontawesome-solid-ellipsis-vertical:{ title="Menu" aria-labelledBy="Menu" } > :octicons-pencil-24:{ aria-hidden="true"} **Add a note** @@ -30,7 +31,38 @@ For example, to assist with publishing a paper, you could organize insights into Terarium automatically saves the state of your overview as you make changes. -???+ list "Edit the project overview" +??? list "Edit the project overview" 1. In the Resources panel, click **Overview**. - 2. Enter your insights in the text field. Use the style bar to format your text. \ No newline at end of file + 2. Enter your insights in the text field. Use the style bar to format your text.## Annotate charts + +Adding annotations to charts helps highlight key insights and guide interpretation of data. You can create annotations manually or using AI assistance. + +??? list "Add annotations that call out key values and timesteps" + + To highlight notable findings, you can manually add annotations that label plotted values at key timesteps. + + 1. Click anywhere on the chart to add a callout. + 2. To add more callouts without clearing the first one, hold down ++shift++ and click a new area of the chart. + +??? list "Prompt an AI assistant to add chart annotations" + + You can prompt an AI assistant to automatically create annotations on the variables over time and comparison charts. Annotations are labelled or unlabelled lines that mark specific timestamps or peak values. Examples of AI-assisted annotations are listed below. + + 1. In the Output settings, click Options :octicons-gear-24:{ title="Options" aria-labelledby="options-icon-label" }. + 2. Describe the annotations you want to add and press ++enter++. + + ```{ .text .wrap } + Draw a vertical line at day 100 + ``` + ```{ .text .wrap } + Draw a line at the peak S after calibration + ``` + ```{ .text .wrap } + Draw a horizontal line at the peak of default configuration Susceptible after calibration. Label it as "important" + ``` + ```{ .text .wrap } + Draw a vertical line at x is 10. Don't add the label + ``` + ```{ .text .wrap } + Draw a line at x = 40 only for ensemble after calibration \ No newline at end of file From 5a9df296b8210da6fccb8676092beb3a2d2b53f7 Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 23:00:54 -0500 Subject: [PATCH 06/10] Update parameter distribution screenshot to show fewer satisfactory conditions --- .../validate/parameters.png | Bin 15009 -> 22060 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/config-and-intervention/validate/parameters.png b/docs/img/config-and-intervention/validate/parameters.png index f7d776c9ba80ff29e8348d965b115f895080b537..7687884ddcdbd09027ee5a38100e59a01539836e 100644 GIT binary patch literal 22060 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 literal 15009 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 Date: Wed, 22 Jan 2025 23:01:15 -0500 Subject: [PATCH 07/10] Update LaTeX style guide --- docs/modeling/create-model-from-equations.md | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/modeling/create-model-from-equations.md b/docs/modeling/create-model-from-equations.md index 8d55a07..92f5bd8 100644 --- a/docs/modeling/create-model-from-equations.md +++ b/docs/modeling/create-model-from-equations.md @@ -151,7 +151,7 @@ The Create model from equations operator works with LaTeX equations. Before it c - Rewrite expressions with negative exponents as explicit fractions. - *Recommended*: `"\\frac{{1}}{{N}}` + *Recommended*: `"\frac{{1}}{{N}}` *Not recommended*: `N^{{-1}}` - #### Parentheses @@ -159,15 +159,10 @@ The Create model from equations operator works with LaTeX equations. Before it c --- - When grouping algebraic expressions, don't use square brackets `[ ]`, curly braces `{ }`, or angle brackets `< >`. Use parentheses `( )` if needed. - - Expand time-dependent algebraic expressions grouped by parentheses according to the distributivity property of multiplication. + - Always expand expressions surrounded by parentheses using the order of mathematical operations. - *Recommended*: `a * S(t) * I(t) + b * S(t) * D(t) + c * A(t) * S(t)` - *Not recommended*: `S(t) * (a * I(t) + b * D(t) + c * A(t))` - - - Don't expand constant algebraic expressions grouped by parentheses. - - *Recommended*: `a * b * (1 - c)` - *Not recommended*: `a ∗ b ∗ 1 − a ∗ b ∗c` + *Recommended*: `\alpha * x(t) * y(t) + \beta * x(t) * z(t)` + *Not recommended*: `x(t) (\alpha y(t) + \beta z(t))` - #### Variable and symbol usage From 0b9e4b0ebca7e0c85152203c6753ba7ab9504130 Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 23:01:35 -0500 Subject: [PATCH 08/10] Document workflow annotations --- docs/notes/index.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/notes/index.md b/docs/notes/index.md index 2e81be4..88b3519 100644 --- a/docs/notes/index.md +++ b/docs/notes/index.md @@ -7,6 +7,7 @@ title: "Annotate your work" You can capture and save insights you've gained during your modeling processes: - Directly on the operator where you discovered them. +- On the workflow canvas. - In the project overview. - On charts generated through simulations and calibrations. @@ -34,7 +35,19 @@ For example, to assist with publishing a paper, you could organize insights into ??? list "Edit the project overview" 1. In the Resources panel, click **Overview**. - 2. Enter your insights in the text field. Use the style bar to format your text.## Annotate charts + 2. Enter your insights in the text field. Use the style bar to format your text. + +## Add an annotation to the workflow canvas + +You can add notes directly to the canvas to provide more context for the modeling decisions you've made in your workflow. + +??? list "Add an annotation to the workflow canvas" + + 1. Right-click on the workflow canvas and select **Add annotation**. + 2. Double-click `annotation text`, enter some text, and press **Ok**. + 3. Click and drag the annotation to a new location if needed. + +## Annotate charts Adding annotations to charts helps highlight key insights and guide interpretation of data. You can create annotations manually or using AI assistance. From 72e97ca9e4fe450cc6010375dca6cdb318558d80 Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 23:01:58 -0500 Subject: [PATCH 09/10] Add note about geolocation enrichment --- docs/modeling/review-and-enrich-model.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/modeling/review-and-enrich-model.md b/docs/modeling/review-and-enrich-model.md index e3fb3ce..a522b87 100644 --- a/docs/modeling/review-and-enrich-model.md +++ b/docs/modeling/review-and-enrich-model.md @@ -52,6 +52,10 @@ If your model lacks descriptive details about its variables and parameters, you - **Descriptions**: A short plain language explanation of the variable or parameter's contents. - **Concepts**: Epidemiological concepts related to the variable or parameter. Useful for comparing models and mapping variables and parameters to data columns. +???+ note + + Enrichment can also provide geolocation information if, for example, your model is stratified by geographic areas such as states or territories. + Terarium's enrichment service uses an AI language model to automatically populate model metadata based on either: - Contextual clues in the contents of a document in your project. From e3bd2cdafdd961f60b75470e3d277c4126ef1029 Mon Sep 17 00:00:00 2001 From: mecrouch Date: Wed, 22 Jan 2025 23:02:23 -0500 Subject: [PATCH 10/10] Tweak template notes and descriptions --- docs/workflows/index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/workflows/index.md b/docs/workflows/index.md index 7b2081f..1028408 100644 --- a/docs/workflows/index.md +++ b/docs/workflows/index.md @@ -21,7 +21,7 @@ A workflow is a visual canvas for building and running complex operations (calib ???+ note - Before you can use a template, your project must contain the inputs (models, model configurations, intervention policies, or datasets) you want to use. + Before you can use a template, your project must contain the inputs (models, model configurations, or datasets) you want to use. ## Create new workflows based on templates @@ -29,8 +29,9 @@ The following workflow templates streamline the process of building common model ???+ note - - Before you can fill out a template, your project must contain the inputs (models, model configurations, intervention policies, or datasets) you want to use. + - Before you can fill out a template, your project must contain the inputs (models, model configurations, or datasets) you want to use. - Before you can see the results of a templated workflow, you must configure and run any Calibrate, Simulate, or Compare datasets operators it contains. + - You can create new intervention policies with the template. Once the workflow is created, you must create the Create intervention policy operator and add your intervention criteria. ??? list "Situational awareness" @@ -165,9 +166,9 @@ The following workflow templates streamline the process of building common model --- - Model - - One or more intervention policies (optional) - Model configuration - One or more uncertain parameters of interest and the ranges to explore + - One or more intervention policies (optional) - :material-arrow-expand-right:{ .lg .middle aria-hidden="true" } __Outputs__ @@ -204,9 +205,9 @@ The following workflow templates streamline the process of building common model --- - Model - - One or more intervention policies - Model configuration - One or more uncertain parameters of interest and the ranges to explore + - One or more intervention policies - :material-arrow-expand-right:{ .lg .middle aria-hidden="true" } __Outputs__