[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-explore-omni-omni-ai-optimizer":3,"mdc--vbau1m-key":37,"related-org-explore-omni-omni-ai-optimizer":5100,"related-repo-explore-omni-omni-ai-optimizer":5247},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"omni-ai-optimizer","optimize Omni models for AI","Optimize your Omni Analytics model for Blobby, the Omni Agent — configure ai_context, ai_fields, synonyms, sample_queries, and AI-specific topic extensions. Use this skill whenever someone wants to improve AI accuracy in Omni, make Blobby smarter, add AI context or example questions, curate which fields the AI sees, personalize AI context by user attribute, scope context to a model tier or agent, diagnose context-window pruning or truncation, control which topics AI can reach, troubleshoot why Blobby gives wrong answers, or any variant of \"make the AI better\", \"Blobby isn't answering correctly\", \"optimize for AI\", or \"teach the AI about our data\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"explore-omni","Explore Omni","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fexplore-omni.png","exploreomni",[13,17,20,23],{"name":14,"slug":15,"type":16},"AI Context","ai-context","tag",{"name":18,"slug":19,"type":16},"Omni","omni",{"name":21,"slug":22,"type":16},"Data Modeling","data-modeling",{"name":24,"slug":25,"type":16},"Analytics","analytics",27,"https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fomni-agent-skills","2026-07-27T06:09:42.358967",null,3,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"A collection of skill for working with Omni. These skills help AI agents understand and execute Omni workflows more effectively.","https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fomni-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fomni-ai-optimizer","---\nname: omni-ai-optimizer\ndescription: Optimize your Omni Analytics model for Blobby, the Omni Agent — configure ai_context, ai_fields, synonyms, sample_queries, and AI-specific topic extensions. Use this skill whenever someone wants to improve AI accuracy in Omni, make Blobby smarter, add AI context or example questions, curate which fields the AI sees, personalize AI context by user attribute, scope context to a model tier or agent, diagnose context-window pruning or truncation, control which topics AI can reach, troubleshoot why Blobby gives wrong answers, or any variant of \"make the AI better\", \"Blobby isn't answering correctly\", \"optimize for AI\", or \"teach the AI about our data\".\n---\n\n# Omni AI Optimizer\n\nOptimize your Omni semantic model so Blobby (the Omni Agent) returns accurate, contextual answers.\n\n> **Tip**: Use `omni-model-explorer` to inspect current AI context before making changes.\n\n## Prerequisites\n\n```bash\n# Verify the Omni CLI is installed — if not, ask the user to install it\n# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\ncommand -v omni >\u002Fdev\u002Fnull || echo \"ERROR: Omni CLI is not installed.\"\n```\n\n```bash\n# Show available profiles and select the appropriate one\nomni config show\n# If multiple profiles exist, ask the user which to use, then switch:\nomni config use \u003Cprofile-name>\n\n# Confirm the active profile is authenticated and inspect your permissions:\nomni whoami whoami\n```\n\n> **Auth**: a profile authenticates with an **API key** or **OAuth**. If `whoami` (or any call) returns **401**, hand off — ask the user to run `! omni config login \u003Cprofile>` (OAuth 2.1 browser flow; it blocks ~2 min on the browser). Don't run `config login` yourself in a headless\u002FCI session (no browser → timeout); on a local interactive machine you *may*. See the **`omni-api-conventions`** rule for profile setup (`omni config init --auth oauth`) and discovering request-body shapes with `--schema`.\n\nRequires **Modeler** or **Connection Admin** permissions.\n\n## Discovering Commands\n\n```bash\nomni models --help                    # List all model operations\nomni models yaml-create --help        # Show flags for writing YAML\n```\n\n> **Tip**: Use `-o json` to force structured output for programmatic parsing, or `-o human` for readable tables. The default is `auto` (human in a TTY, JSON when piped).\n\n## Safe Model Write Defaults\n\n- **Branch first** — never write AI optimization YAML directly to the shared model unless the user explicitly asks for a production change. Create or use a model branch, then pass the branch id to `omni models yaml-create`.\n- **Read before writing** — inspect the current topic\u002Fview YAML before adding `ai_context`, `ai_fields`, `sample_queries`, descriptions, or synonyms. If the requested optimization already exists, report that it is already configured instead of duplicating it.\n- **Topic requests stay on topics** — when the user asks to improve a topic, prefer topic-level `ai_context`, `ai_fields`, or `sample_queries`. Use field-level `synonyms` only when the request is clearly about alternate names for one specific field.\n- **Do not add \"supporting\" synonyms after a complete topic mapping** — for requests like \"Blobby confuses revenue with order count\" or \"map these terms correctly\", if topic-level `ai_context` already maps the business terms to the correct fields and includes the needed negative guardrails, stop and report that no duplicate write is needed. Adding field-level synonyms in that case is redundant and increases prompt\u002Ftoken surface.\n- **Create branches with `--name`** — `omni models create-branch \u003Cmodel-id> --name \u003Cbranch-name>` does not accept a JSON `--body`.\n\n## How Blobby Works\n\n### Context priority order\n\nOmni assembles the context window in this order:\n\n1. **Context and tuning pre-built by Omni Engineering**\n2. **`ai_context`** on the model, topics, and views\n3. **Topic `description`**\n4. **Topic `name` and `base_view`**\n5. **Prioritized field properties** — `name` (fully qualified, `view.field`) and field `ai_context`. Never pruned.\n6. **Pruned field properties** — everything else, dropped in the order below when space runs short.\n\n`hidden: true` fields are excluded entirely. `ai_chat_topics` (model-level) controls which topics Blobby can see at all.\n\n### Pruning order\n\nWhen a topic's metadata exceeds its allotment, Omni removes properties **lowest priority first**, clearing each one from *every* field before moving to the next:\n\n`all_values` → `sql` → `sample_values` → `description` → `group_label` → `label` → `aggregate_type` → `data_type` → `synonyms`\n\nTwo consequences worth internalizing:\n\n- **`all_values` goes first**, because the AI can fetch a field's values on demand. **`synonyms` go last**, because they do the most work matching user phrasing to fields.\n- **`ai_context` is never pruned** when Omni assembles context for a specific topic — at any level (model, topic, view, field). If it still doesn't fit, Omni drops whole views from model search, and past that the **request fails with an error**. Bloated `ai_context` is not a soft cost — it can starve field metadata and break queries outright. The one exception is *topic selection*, where view-level `ai_context` is trimmed first (see the caps table below).\n\n### Context is guidance, not instruction\n\nAll context is passed to the LLM together, and the LLM decides how to weight it:\n\n- **Model-level `ai_context` does not reliably override topic-level `ai_context`.** Don't design around precedence that isn't guaranteed.\n- Instructions may be followed partially or not at all, especially when complex or self-contradictory.\n- **Behavior is non-deterministic** — the same question can pull different context on different runs.\n\nPrefer few, unambiguous, non-conflicting instructions over exhaustive rulebooks. Debug what the AI actually received with the [workbook inspector](https:\u002F\u002Fdocs.omni.co\u002Fanalyze-explore\u002Fworkbook-inspector#ai-messages).\n\n### Where context applies\n\nNot just Omni Agent — also embedded chat (including topic selection and model search), Workbook Agent query\u002FSQL generation, Dashboard Agent summaries, AI visualization and summary generation, AI filter generation, and the Modeling Agent. A context change affects all of them.\n\n## Writing ai_context\n\nAdd via the YAML API:\n\n```bash\nomni models yaml-create \u003CmodelId> --body '{\n  \"fileName\": \"order_transactions.topic\",\n  \"yaml\": \"base_view: order_items\\nlabel: Order Transactions\\nai_context: |\\n  Map \\\"revenue\\\" → total_revenue. Map \\\"orders\\\" → count.\\n  Map \\\"customers\\\" → unique_users.\\n  Status values: complete, pending, cancelled, returned.\\n  Only complete orders for revenue unless specified otherwise.\",\n  \"mode\": \"extension\",\n  \"branchId\": \"{branchId}\",\n  \"commitMessage\": \"Add AI context to order transactions topic\"\n}'\n```\n\n### What Makes Good ai_context\n\n**Terminology mapping** — map business language to field names:\n\n```yaml\nai_context: |\n  \"revenue\" or \"sales\" → order_items.total_revenue\n  \"orders\" → order_items.count\n  \"customers\" → users.count or order_items.unique_users\n  \"AOV\" → order_items.average_order_value\n```\n\n**Data nuances** — explain what isn't obvious from field names:\n\n```yaml\nai_context: |\n  Each row is a line item, not an order. One order has multiple line items.\n  total_revenue already excludes returns and cancellations.\n  Dates are in UTC.\n```\n\nFor \"map these terms correctly\" or \"Blobby confuses X with Y\", the fix is a **positive mapping in topic-level `ai_context`** — synonyms alone can't arbitrate between two competing measures. If synonyms already exist but the topic context only says what *not* to use, add the missing positive mapping rather than more synonyms.\n\nGood:\n\n```yaml\nai_context: |\n  \"revenue\" or \"sales\" -> order_items.total_revenue\n  \"order count\" or \"number of orders\" -> order_items.count\n  Never use order_items.count when the user asks for revenue.\n```\n\nAvoid stopping at:\n\n```yaml\nmeasures:\n  total_revenue:\n    synonyms: [revenue, sales]\n  count:\n    synonyms: [order count, orders]\n```\n\n**Behavioral guidance** — direct common patterns:\n\n```yaml\nai_context: |\n  For trends, default to weekly granularity, sort ascending.\n  For \"top N\", sort descending and limit to 10.\n```\n\n**Persona prompting** — set the analytical perspective:\n\n```yaml\nai_context: |\n  You are the head of finance analyzing customer payment data.\n  Default to monetary values in USD with 2 decimal places.\n```\n\n### Keeping Context Concise\n\n`ai_context` is the one property Omni can't reclaim under pressure, so it is the scarcest budget in the model — not the most generous. Verbose entries evict field metadata first and can ultimately fail the request.\n\n- Target 1-2 sentences per `ai_context` entry. Focus on disambiguation and gotchas, not general explanation.\n- Keep labels short and human-readable — avoid redundant qualification (e.g., \"Order Total Revenue Amount\" → \"Total Revenue\").\n- Rewrite long `description` values to be direct. If a description restates the field name, remove it.\n\n## Model-Level Context\n\nModel-level [`ai_context`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fai-context) carries guidance shared across every topic, and also informs **topic selection** — useful when Blobby picks the wrong topic rather than the wrong field.\n\nUse it for instance-wide conventions (currency, fiscal calendar, tone, privacy rules) and keep topic-specific mappings on the topic.\n\nThere is also a model-level [`sample_queries`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fsample-queries) parameter for example queries that span the model's topics.\n\n## Advanced ai_context Templating\n\nThese apply to `ai_context` at the **model, topic, and view levels only**.\n\n### Personalize with user attributes\n\n`{{omni_attributes.\u003Cattribute_name>}}` is substituted with the current user's [attribute value](https:\u002F\u002Fdocs.omni.co\u002Fadministration\u002Fusers\u002Fattributes) at query time:\n\n```yaml\nai_context: |\n  You are a sales analyst. When someone asks about their team or pipeline,\n  always filter by account.segment = {{omni_attributes.segment}}\n  and account.region = {{omni_attributes.region}}.\n```\n\n> **Caveat**: Not supported in dimension or measure `ai_context` — there the value is used verbatim, un-substituted. Field references and filter conditions are also unsupported and raise a validation warning.\n\n### Target specific model tiers with omni_llm\n\nScope instructions to the AI model tier — `smartest`, `standard`, or `fastest` — so expensive reasoning instructions don't burden fast models. Sections use Mustache syntax: `{{# ... }}` for \"when\", `{{^ ... }}` for \"when not\".\n\n```yaml\nai_context: |\n  This topic focuses on financial transactions.\n\n  {{# omni_llm.smartest }}\n  For complex multi-table queries, consider indirect relationships and provide rationale for join path selection.\n  {{\u002F omni_llm.smartest }}\n\n  {{# omni_llm.fastest }}\n  Prefer single-table queries when possible.\n  {{\u002F omni_llm.fastest }}\n```\n\n### Target specific agents with omni_agent\n\nScope context to the agent that will read it, so bulky agent-specific content doesn't inflate the window for the others:\n\n- `analyze` — model search and query generation\n- `build` — topic metadata generation, learn-from-conversation\n- `simple_summarize` — tile\u002Fvisualization summaries, query metadata\n\n```yaml\nai_context: |\n  {{# omni_agent.build }}\n  Modeling conventions: Always define primary keys. Use snake_case for field names.\n  {{\u002F omni_agent.build }}\n\n  {{^ omni_agent.build }}\n  Keep queries focused and efficient.\n  {{\u002F omni_agent.build }}\n```\n\n`{{ omni_agent.name }}` interpolates the reading agent's name.\n\n### Reuse blocks with constants\n\nDefine [`constants`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fconstants#reusable-ai-context) once and reference them with `@{constant_name}` across model, topic, view, and sample-query `ai_context` — the fix for the same tone\u002Fprivacy\u002Fdomain paragraph duplicated in a dozen places:\n\n```yaml\nconstants:\n  tone:\n    value: \"Keep responses concise and professional.\"\n  privacy_high:\n    value: \"Never show individual customer names or emails.\"\n\nai_context: |\n  @{tone} @{privacy_high}\n```\n\n## Curating Fields with ai_fields\n\n### The real limits\n\nOmni caps how much of the context window model metadata may consume. These caps — not the model's full context window — are what trigger pruning:\n\n| Cap | Value | What happens past it |\n|---|---|---|\n| A topic's field definitions | ~75K characters | Field properties are pruned in the [pruning order](#pruning-order) |\n| Topic-selection summaries (all topics) | ~100K characters | View metadata trimmed first (including view-level `ai_context`), then sample queries, then topic metadata as a last resort. Trimmed detail is recovered once a topic is selected. |\n| Searches outside a topic | 100 fields per search | The AI runs narrower repeat searches rather than pruning properties. Applies when [`query_all_views_and_fields`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fparameters\u002Fai-settings\u002Fquery-all-views-and-fields) is enabled. |\n\n> **Do not optimize against a field count.** A lightly annotated field costs ~100 characters; one with a rich description, sample values, and `ai_context` costs several times that, so the number of fields that fits varies widely. Check the [workbook inspector](https:\u002F\u002Fdocs.omni.co\u002Fanalyze-explore\u002Fworkbook-inspector#ai-messages) to see the context actually delivered instead of estimating.\n\nConversation history is budgeted separately — see [`conversation_prune_length`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fparameters\u002Fai-settings\u002Fconversation-prune-length).\n\n### Curating\n\nCurate for precision, not just for size: a smaller, well-described field set gives the AI fewer chances to pick the wrong field. Reduce noise for large models:\n\n```yaml\nai_fields:\n  - all_views.*\n  - -tag:internal\n  - -distribution_centers.*\n\n# Or explicit list\nai_fields:\n  - order_items.created_at\n  - order_items.total_revenue\n  - order_items.count\n  - users.name\n  - users.state\n  - products.category\n```\n\nSame operators as topic `fields`: wildcard (`*`), negation (`-`), tags (`tag:`).\n\nTagging is the most maintainable pattern — tag the fields users actually ask about, then curate with a single selector:\n\n```yaml\nai_fields: [tag:use_for_ai]\n```\n\n## Controlling Topic Visibility with ai_chat_topics\n\n`ai_chat_topics` is a model-level property that controls which topics Blobby can see:\n\n- **No `ai_chat_topics` property** (default) — Blobby can query across all topics.\n- **`ai_chat_topics: []`** (empty list) — Blobby cannot query any topics. This effectively disables AI chat for the model.\n- **Explicit list** — only the listed topics (or tag matches) are available. Supports `all_topics`, tag selectors (`tag:customer_facing`), and negation (`-tag:internal`, `-staging_events`).\n\nCheck this first — if a topic isn't in `ai_chat_topics`, no amount of `ai_context` or `ai_fields` on it will matter. Use `omni-model-builder` to modify this property.\n\n## Adding sample_queries\n\nTeach Blobby by example. Especially effective for recurring questions and for date-filter patterns Blobby tends to get wrong.\n\nThe supported authoring path is through the workbook: build a query that returns the correct answer, then **Model > Save as sample query to topic**. Check **Include in AI context** (otherwise it only shows on the topic overview and never reaches the AI), and fill in the optional **Prompt** and **AI context** fields.\n\nTo write one directly in YAML instead — build the correct query in a workbook, retrieve its structure, then add it to the topic:\n\n```yaml\nsample_queries:\n  revenue_by_month:\n    prompt: \"What month has the highest revenue?\"\n    ai_context: \"Use total_revenue grouped by month, sorted descending, limit 1\"\n    query:\n      base_view: order_items\n      fields:\n        - order_items.created_at[month]\n        - order_items.total_revenue\n      topic: order_transactions\n      limit: 1\n      sorts:\n        - field: order_items.total_revenue\n          desc: true\n```\n\n> **Note**: When exporting queries from Omni's workbook, you'll get JSON with `table`, `join_paths_from_topic_name`, and `sorts` using `column_name`\u002F`sort_descending`. Map these to YAML as follows:\n> - `table` → `base_view`\n> - `join_paths_from_topic_name` → `topic`\n> - `column_name` → `field`, `sort_descending` → `desc`\n> - Workbook JSON includes `filters`, `pivots`, `limit`, `column_limit` which you can include in YAML (though filter syntax requires consulting the [Model YAML API docs](https:\u002F\u002Fdocs.omni.co\u002Fapi\u002Fmodels.md) directly)\n\nFocus on questions users actually ask — if you don't know which those are, ask the user rather than guessing at plausible-sounding ones.\n\n## AI-Specific Topic Extensions\n\nCreate a curated topic variant for Blobby using `extends`:\n\n```yaml\n# ai_order_transactions.topic\nextends: [order_items]\nlabel: AI - Order Transactions\n\nfields:\n  - order_items.created_at\n  - order_items.status\n  - order_items.total_revenue\n  - order_items.count\n  - users.name\n  - users.state\n  - products.category\n\nai_context: |\n  Curated view of order data for AI analysis.\n  [detailed context here]\n```\n\nThe extended topic inherits the base topic's joins and filters, so add only what differs: a narrower field set, extra `ai_context`, or `sample_queries` (same shape as above).\n\n## Improving Field Descriptions\n\nKeep the value list in `all_values` and the AI-only rule in `ai_context` — a description that restates either is paying twice for one fact:\n\n```yaml\ndimensions:\n  status:\n    label: Order Status\n    description: Current fulfillment status of the order.\n    all_values: [complete, pending, cancelled, returned]\n    ai_context: Use 'complete' for revenue calculations.\n```\n\n### Enumerating Values for Categorical Fields\n\nFor closed-set enums, use `all_values` so Blobby knows every valid filter value:\n\n```yaml\ndimensions:\n  status:\n    all_values: [complete, pending, cancelled, returned]\n  payment_method:\n    all_values: [credit_card, debit_card, bank_transfer, paypal, gift_card]\n```\n\nFor open-ended categoricals where a full list isn't practical, use `sample_values` to give representative examples:\n\n```yaml\ndimensions:\n  product_category:\n    sample_values: [Electronics, Clothing, Home & Garden, Sports, Books]\n  city:\n    sample_values: [New York, Los Angeles, Chicago, Houston, Phoenix]\n```\n\n> **Note**: `all_values` is pruned first, so don't count on it surviving in a context-tight topic — put anything load-bearing in `ai_context` instead.\n\nWhen the [dbt integration](https:\u002F\u002Fdocs.omni.co\u002Fintegrations\u002Fdbt\u002Fsetup) is enabled, dbt `accepted_values` tests are ingested as `all_values` automatically — check before hand-authoring them.\n\n## Adding synonyms\n\nMap alternative names, abbreviations, and domain-specific terminology so Blobby matches user queries to the correct field. Works on both dimensions and measures.\n\n```yaml\ndimensions:\n  customer_name:\n    synonyms: [client, account, buyer, purchaser]\n  order_date:\n    synonyms: [purchase date, transaction date, order timestamp]\n\nmeasures:\n  total_revenue:\n    synonyms: [sales, income, earnings, gross revenue, top line]\n  average_order_value:\n    synonyms: [AOV, avg order, basket size]\n```\n\n**Synonyms vs ai_context**: Use `synonyms` for field-level name mapping. Use `ai_context` for topic-level behavioral guidance, data nuances, and multi-field relationships.\n\n**When to add them** — synonyms earn their place when users genuinely say a word the model doesn't contain (`AOV`, `top line`, `basket size`). They do not earn it by restating the field's label or name, or by reinforcing a mapping topic-level `ai_context` already makes. Adding synonyms to a field whose disambiguation is already handled on the topic is the most common wasted write in this skill — see [Safe Model Write Defaults](#safe-model-write-defaults).\n\n**Pruning**: `synonyms` are pruned **last**, after `description` and `label`. So for a field that genuinely needs alternate vocabulary, synonyms are the most durable place to put it — but that survivability is a reason to choose synonyms *over* a description for that purpose, never a reason to add more of them.\n\n## Avoiding Duplication\n\n`ai_context` and `description` serve different audiences. `description` is human-facing (shown in the field picker and docs). `ai_context` is an AI-only hint. Don't put the same text in both — `ai_context` should add guidance the description doesn't cover (disambiguation, gotchas, when to use one field over another).\n\n**Consolidate shared context at the view level.** If multiple fields in a view share the same `ai_context` (e.g., \"all monetary values are in USD\"), move it to the view-level `ai_context` instead of repeating it on each field. Field-level `ai_context` should be specific to that field.\n\nShared fact hoisted to the view, `description` and `ai_context` each carrying only what the other doesn't:\n\n```yaml\nai_context: \"All monetary values in this view are in USD.\"\n\ndimensions:\n  gross_revenue:\n    ai_context: \"Revenue before refunds.\"\n    description: \"Total revenue before refunds and cancellations are applied.\"\n  net_revenue:\n    ai_context: \"Revenue after refunds. Use this for profitability analysis.\"\n    description: \"Total revenue after refunds and cancellations.\"\n```\n\n## Optimization Checklist\n\nPrioritize high-impact changes. Improve wording without changing semantics.\n\n1. Inspect current state with `omni-model-explorer`\n2. Check model-level `ai_chat_topics` — ensure the right topics are visible to AI\n3. Curate with `ai_fields` down to the fields users actually ask about, rather than to a field count\n4. Write `ai_context` mapping business terms to fields (keep to 1-2 sentences; it is never pruned)\n5. Add `synonyms` to key dimensions and measures (skip if they duplicate the label)\n6. Improve field `description` and `label` values\n7. Add `all_values`\u002F`sample_values` for categorical fields\n8. Add `sample_queries` for top 3-5 questions\n9. Remove duplication between `ai_context` and `description`; consolidate shared context at view level, and shared blocks into `constants`\n10. Consider `extends` for AI-specific topic variants\n11. Scope tier- or agent-specific instructions with `omni_llm` \u002F `omni_agent` rather than paying for them on every request\n12. Test iteratively — ask Blobby and refine\n\n> **Troubleshooting order** when Blobby answers wrong: confirm the topic is reachable (`ai_chat_topics`) → confirm the field is in context (workbook inspector; check it wasn't pruned or excluded by `ai_fields`\u002F`hidden`) → then add or sharpen `ai_context`. Writing more context for a field the AI never received fixes nothing.\n\n## Docs Reference\n\n- [Optimize models for Omni AI](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fdevelop\u002Fai-optimization)\n- `ai_context` reference: [model](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fai-context) · [topic](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fai-context) · [view](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fviews\u002Fparameters\u002Fai-context)\n- Topic parameters: [`ai_fields`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fai-fields) · [`sample_queries`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fsample-queries) · [`extends`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fextends) · [all topic parameters](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters.md)\n- Model parameters: [`ai_chat_topics`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fai-chat-topics) · [`constants`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fconstants#reusable-ai-context) · [`sample_queries`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fsample-queries) · [`query_all_views_and_fields`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fparameters\u002Fai-settings\u002Fquery-all-views-and-fields) · [`conversation_prune_length`](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fparameters\u002Fai-settings\u002Fconversation-prune-length)\n- [Synonyms](https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fdimensions\u002Fparameters\u002Fsynonyms) · [User attributes](https:\u002F\u002Fdocs.omni.co\u002Fadministration\u002Fusers\u002Fattributes) · [Workbook inspector](https:\u002F\u002Fdocs.omni.co\u002Fanalyze-explore\u002Fworkbook-inspector#ai-messages)\n- [Model YAML API](https:\u002F\u002Fdocs.omni.co\u002Fapi\u002Fmodels.md) · [Omni AI Overview](https:\u002F\u002Fdocs.omni.co\u002Fai.md) · [AI data security](https:\u002F\u002Fdocs.omni.co\u002Fai\u002Fsecurity)\n\n## Related Skills\n\n- **omni-model-explorer** — inspect existing AI context\n- **omni-model-builder** — modify views and topics\n- **omni-query** — test queries to verify Blobby's output\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,50,56,80,87,175,291,384,402,408,462,497,503,644,650,657,662,763,782,788,807,871,876,949,955,960,1001,1016,1022,1027,1033,1038,1147,1153,1163,1223,1233,1279,1303,1308,1354,1359,1473,1483,1521,1531,1569,1575,1585,1617,1623,1645,1650,1667,1673,1691,1697,1717,1763,1783,1789,1832,1927,1933,1938,1974,2050,2061,2067,2100,2221,2227,2233,2238,2351,2378,2395,2401,2406,2562,2599,2604,2635,2641,2651,2725,2758,2764,2769,2801,2806,3037,3191,3196,3202,3214,3405,3423,3429,3448,3581,3587,3599,3747,3759,3922,3948,3977,3983,3988,4266,4289,4333,4376,4382,4419,4450,4468,4637,4643,4648,4816,4857,4863,5057,5063,5094],{"type":43,"tag":44,"props":45,"children":46},"element","h1",{"id":4},[47],{"type":48,"value":49},"text","Omni AI Optimizer",{"type":43,"tag":51,"props":52,"children":53},"p",{},[54],{"type":48,"value":55},"Optimize your Omni semantic model so Blobby (the Omni Agent) returns accurate, contextual answers.",{"type":43,"tag":57,"props":58,"children":59},"blockquote",{},[60],{"type":43,"tag":51,"props":61,"children":62},{},[63,69,71,78],{"type":43,"tag":64,"props":65,"children":66},"strong",{},[67],{"type":48,"value":68},"Tip",{"type":48,"value":70},": Use ",{"type":43,"tag":72,"props":73,"children":75},"code",{"className":74},[],[76],{"type":48,"value":77},"omni-model-explorer",{"type":48,"value":79}," to inspect current AI context before making changes.",{"type":43,"tag":81,"props":82,"children":84},"h2",{"id":83},"prerequisites",[85],{"type":48,"value":86},"Prerequisites",{"type":43,"tag":88,"props":89,"children":94},"pre",{"className":90,"code":91,"language":92,"meta":93,"style":93},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Verify the Omni CLI is installed — if not, ask the user to install it\n# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\ncommand -v omni >\u002Fdev\u002Fnull || echo \"ERROR: Omni CLI is not installed.\"\n","bash","",[95],{"type":43,"tag":72,"props":96,"children":97},{"__ignoreMap":93},[98,110,119],{"type":43,"tag":99,"props":100,"children":103},"span",{"class":101,"line":102},"line",1,[104],{"type":43,"tag":99,"props":105,"children":107},{"style":106},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[108],{"type":48,"value":109},"# Verify the Omni CLI is installed — if not, ask the user to install it\n",{"type":43,"tag":99,"props":111,"children":113},{"class":101,"line":112},2,[114],{"type":43,"tag":99,"props":115,"children":116},{"style":106},[117],{"type":48,"value":118},"# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\n",{"type":43,"tag":99,"props":120,"children":121},{"class":101,"line":30},[122,128,134,139,145,150,155,160,165,170],{"type":43,"tag":99,"props":123,"children":125},{"style":124},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[126],{"type":48,"value":127},"command",{"type":43,"tag":99,"props":129,"children":131},{"style":130},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[132],{"type":48,"value":133}," -v",{"type":43,"tag":99,"props":135,"children":136},{"style":130},[137],{"type":48,"value":138}," omni",{"type":43,"tag":99,"props":140,"children":142},{"style":141},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[143],{"type":48,"value":144}," >",{"type":43,"tag":99,"props":146,"children":147},{"style":130},[148],{"type":48,"value":149},"\u002Fdev\u002Fnull",{"type":43,"tag":99,"props":151,"children":152},{"style":141},[153],{"type":48,"value":154}," ||",{"type":43,"tag":99,"props":156,"children":157},{"style":124},[158],{"type":48,"value":159}," echo",{"type":43,"tag":99,"props":161,"children":162},{"style":141},[163],{"type":48,"value":164}," \"",{"type":43,"tag":99,"props":166,"children":167},{"style":130},[168],{"type":48,"value":169},"ERROR: Omni CLI is not installed.",{"type":43,"tag":99,"props":171,"children":172},{"style":141},[173],{"type":48,"value":174},"\"\n",{"type":43,"tag":88,"props":176,"children":178},{"className":90,"code":177,"language":92,"meta":93,"style":93},"# Show available profiles and select the appropriate one\nomni config show\n# If multiple profiles exist, ask the user which to use, then switch:\nomni config use \u003Cprofile-name>\n\n# Confirm the active profile is authenticated and inspect your permissions:\nomni whoami whoami\n",[179],{"type":43,"tag":72,"props":180,"children":181},{"__ignoreMap":93},[182,190,208,216,254,264,273],{"type":43,"tag":99,"props":183,"children":184},{"class":101,"line":102},[185],{"type":43,"tag":99,"props":186,"children":187},{"style":106},[188],{"type":48,"value":189},"# Show available profiles and select the appropriate one\n",{"type":43,"tag":99,"props":191,"children":192},{"class":101,"line":112},[193,198,203],{"type":43,"tag":99,"props":194,"children":196},{"style":195},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[197],{"type":48,"value":19},{"type":43,"tag":99,"props":199,"children":200},{"style":130},[201],{"type":48,"value":202}," config",{"type":43,"tag":99,"props":204,"children":205},{"style":130},[206],{"type":48,"value":207}," show\n",{"type":43,"tag":99,"props":209,"children":210},{"class":101,"line":30},[211],{"type":43,"tag":99,"props":212,"children":213},{"style":106},[214],{"type":48,"value":215},"# If multiple profiles exist, ask the user which to use, then switch:\n",{"type":43,"tag":99,"props":217,"children":219},{"class":101,"line":218},4,[220,224,228,233,238,243,249],{"type":43,"tag":99,"props":221,"children":222},{"style":195},[223],{"type":48,"value":19},{"type":43,"tag":99,"props":225,"children":226},{"style":130},[227],{"type":48,"value":202},{"type":43,"tag":99,"props":229,"children":230},{"style":130},[231],{"type":48,"value":232}," use",{"type":43,"tag":99,"props":234,"children":235},{"style":141},[236],{"type":48,"value":237}," \u003C",{"type":43,"tag":99,"props":239,"children":240},{"style":130},[241],{"type":48,"value":242},"profile-nam",{"type":43,"tag":99,"props":244,"children":246},{"style":245},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[247],{"type":48,"value":248},"e",{"type":43,"tag":99,"props":250,"children":251},{"style":141},[252],{"type":48,"value":253},">\n",{"type":43,"tag":99,"props":255,"children":257},{"class":101,"line":256},5,[258],{"type":43,"tag":99,"props":259,"children":261},{"emptyLinePlaceholder":260},true,[262],{"type":48,"value":263},"\n",{"type":43,"tag":99,"props":265,"children":267},{"class":101,"line":266},6,[268],{"type":43,"tag":99,"props":269,"children":270},{"style":106},[271],{"type":48,"value":272},"# Confirm the active profile is authenticated and inspect your permissions:\n",{"type":43,"tag":99,"props":274,"children":276},{"class":101,"line":275},7,[277,281,286],{"type":43,"tag":99,"props":278,"children":279},{"style":195},[280],{"type":48,"value":19},{"type":43,"tag":99,"props":282,"children":283},{"style":130},[284],{"type":48,"value":285}," whoami",{"type":43,"tag":99,"props":287,"children":288},{"style":130},[289],{"type":48,"value":290}," whoami\n",{"type":43,"tag":57,"props":292,"children":293},{},[294],{"type":43,"tag":51,"props":295,"children":296},{},[297,302,304,309,311,316,318,324,326,331,333,339,341,347,349,355,357,366,368,374,376,382],{"type":43,"tag":64,"props":298,"children":299},{},[300],{"type":48,"value":301},"Auth",{"type":48,"value":303},": a profile authenticates with an ",{"type":43,"tag":64,"props":305,"children":306},{},[307],{"type":48,"value":308},"API key",{"type":48,"value":310}," or ",{"type":43,"tag":64,"props":312,"children":313},{},[314],{"type":48,"value":315},"OAuth",{"type":48,"value":317},". If ",{"type":43,"tag":72,"props":319,"children":321},{"className":320},[],[322],{"type":48,"value":323},"whoami",{"type":48,"value":325}," (or any call) returns ",{"type":43,"tag":64,"props":327,"children":328},{},[329],{"type":48,"value":330},"401",{"type":48,"value":332},", hand off — ask the user to run ",{"type":43,"tag":72,"props":334,"children":336},{"className":335},[],[337],{"type":48,"value":338},"! omni config login \u003Cprofile>",{"type":48,"value":340}," (OAuth 2.1 browser flow; it blocks ~2 min on the browser). Don't run ",{"type":43,"tag":72,"props":342,"children":344},{"className":343},[],[345],{"type":48,"value":346},"config login",{"type":48,"value":348}," yourself in a headless\u002FCI session (no browser → timeout); on a local interactive machine you ",{"type":43,"tag":350,"props":351,"children":352},"em",{},[353],{"type":48,"value":354},"may",{"type":48,"value":356},". See the ",{"type":43,"tag":64,"props":358,"children":359},{},[360],{"type":43,"tag":72,"props":361,"children":363},{"className":362},[],[364],{"type":48,"value":365},"omni-api-conventions",{"type":48,"value":367}," rule for profile setup (",{"type":43,"tag":72,"props":369,"children":371},{"className":370},[],[372],{"type":48,"value":373},"omni config init --auth oauth",{"type":48,"value":375},") and discovering request-body shapes with ",{"type":43,"tag":72,"props":377,"children":379},{"className":378},[],[380],{"type":48,"value":381},"--schema",{"type":48,"value":383},".",{"type":43,"tag":51,"props":385,"children":386},{},[387,389,394,395,400],{"type":48,"value":388},"Requires ",{"type":43,"tag":64,"props":390,"children":391},{},[392],{"type":48,"value":393},"Modeler",{"type":48,"value":310},{"type":43,"tag":64,"props":396,"children":397},{},[398],{"type":48,"value":399},"Connection Admin",{"type":48,"value":401}," permissions.",{"type":43,"tag":81,"props":403,"children":405},{"id":404},"discovering-commands",[406],{"type":48,"value":407},"Discovering Commands",{"type":43,"tag":88,"props":409,"children":411},{"className":90,"code":410,"language":92,"meta":93,"style":93},"omni models --help                    # List all model operations\nomni models yaml-create --help        # Show flags for writing YAML\n",[412],{"type":43,"tag":72,"props":413,"children":414},{"__ignoreMap":93},[415,437],{"type":43,"tag":99,"props":416,"children":417},{"class":101,"line":102},[418,422,427,432],{"type":43,"tag":99,"props":419,"children":420},{"style":195},[421],{"type":48,"value":19},{"type":43,"tag":99,"props":423,"children":424},{"style":130},[425],{"type":48,"value":426}," models",{"type":43,"tag":99,"props":428,"children":429},{"style":130},[430],{"type":48,"value":431}," --help",{"type":43,"tag":99,"props":433,"children":434},{"style":106},[435],{"type":48,"value":436},"                    # List all model operations\n",{"type":43,"tag":99,"props":438,"children":439},{"class":101,"line":112},[440,444,448,453,457],{"type":43,"tag":99,"props":441,"children":442},{"style":195},[443],{"type":48,"value":19},{"type":43,"tag":99,"props":445,"children":446},{"style":130},[447],{"type":48,"value":426},{"type":43,"tag":99,"props":449,"children":450},{"style":130},[451],{"type":48,"value":452}," yaml-create",{"type":43,"tag":99,"props":454,"children":455},{"style":130},[456],{"type":48,"value":431},{"type":43,"tag":99,"props":458,"children":459},{"style":106},[460],{"type":48,"value":461},"        # Show flags for writing YAML\n",{"type":43,"tag":57,"props":463,"children":464},{},[465],{"type":43,"tag":51,"props":466,"children":467},{},[468,472,473,479,481,487,489,495],{"type":43,"tag":64,"props":469,"children":470},{},[471],{"type":48,"value":68},{"type":48,"value":70},{"type":43,"tag":72,"props":474,"children":476},{"className":475},[],[477],{"type":48,"value":478},"-o json",{"type":48,"value":480}," to force structured output for programmatic parsing, or ",{"type":43,"tag":72,"props":482,"children":484},{"className":483},[],[485],{"type":48,"value":486},"-o human",{"type":48,"value":488}," for readable tables. The default is ",{"type":43,"tag":72,"props":490,"children":492},{"className":491},[],[493],{"type":48,"value":494},"auto",{"type":48,"value":496}," (human in a TTY, JSON when piped).",{"type":43,"tag":81,"props":498,"children":500},{"id":499},"safe-model-write-defaults",[501],{"type":48,"value":502},"Safe Model Write Defaults",{"type":43,"tag":504,"props":505,"children":506},"ul",{},[507,525,558,596,613],{"type":43,"tag":508,"props":509,"children":510},"li",{},[511,516,518,524],{"type":43,"tag":64,"props":512,"children":513},{},[514],{"type":48,"value":515},"Branch first",{"type":48,"value":517}," — never write AI optimization YAML directly to the shared model unless the user explicitly asks for a production change. Create or use a model branch, then pass the branch id to ",{"type":43,"tag":72,"props":519,"children":521},{"className":520},[],[522],{"type":48,"value":523},"omni models yaml-create",{"type":48,"value":383},{"type":43,"tag":508,"props":526,"children":527},{},[528,533,535,541,543,549,550,556],{"type":43,"tag":64,"props":529,"children":530},{},[531],{"type":48,"value":532},"Read before writing",{"type":48,"value":534}," — inspect the current topic\u002Fview YAML before adding ",{"type":43,"tag":72,"props":536,"children":538},{"className":537},[],[539],{"type":48,"value":540},"ai_context",{"type":48,"value":542},", ",{"type":43,"tag":72,"props":544,"children":546},{"className":545},[],[547],{"type":48,"value":548},"ai_fields",{"type":48,"value":542},{"type":43,"tag":72,"props":551,"children":553},{"className":552},[],[554],{"type":48,"value":555},"sample_queries",{"type":48,"value":557},", descriptions, or synonyms. If the requested optimization already exists, report that it is already configured instead of duplicating it.",{"type":43,"tag":508,"props":559,"children":560},{},[561,566,568,573,574,579,581,586,588,594],{"type":43,"tag":64,"props":562,"children":563},{},[564],{"type":48,"value":565},"Topic requests stay on topics",{"type":48,"value":567}," — when the user asks to improve a topic, prefer topic-level ",{"type":43,"tag":72,"props":569,"children":571},{"className":570},[],[572],{"type":48,"value":540},{"type":48,"value":542},{"type":43,"tag":72,"props":575,"children":577},{"className":576},[],[578],{"type":48,"value":548},{"type":48,"value":580},", or ",{"type":43,"tag":72,"props":582,"children":584},{"className":583},[],[585],{"type":48,"value":555},{"type":48,"value":587},". Use field-level ",{"type":43,"tag":72,"props":589,"children":591},{"className":590},[],[592],{"type":48,"value":593},"synonyms",{"type":48,"value":595}," only when the request is clearly about alternate names for one specific field.",{"type":43,"tag":508,"props":597,"children":598},{},[599,604,606,611],{"type":43,"tag":64,"props":600,"children":601},{},[602],{"type":48,"value":603},"Do not add \"supporting\" synonyms after a complete topic mapping",{"type":48,"value":605}," — for requests like \"Blobby confuses revenue with order count\" or \"map these terms correctly\", if topic-level ",{"type":43,"tag":72,"props":607,"children":609},{"className":608},[],[610],{"type":48,"value":540},{"type":48,"value":612}," already maps the business terms to the correct fields and includes the needed negative guardrails, stop and report that no duplicate write is needed. Adding field-level synonyms in that case is redundant and increases prompt\u002Ftoken surface.",{"type":43,"tag":508,"props":614,"children":615},{},[616,627,629,635,637,643],{"type":43,"tag":64,"props":617,"children":618},{},[619,621],{"type":48,"value":620},"Create branches with ",{"type":43,"tag":72,"props":622,"children":624},{"className":623},[],[625],{"type":48,"value":626},"--name",{"type":48,"value":628}," — ",{"type":43,"tag":72,"props":630,"children":632},{"className":631},[],[633],{"type":48,"value":634},"omni models create-branch \u003Cmodel-id> --name \u003Cbranch-name>",{"type":48,"value":636}," does not accept a JSON ",{"type":43,"tag":72,"props":638,"children":640},{"className":639},[],[641],{"type":48,"value":642},"--body",{"type":48,"value":383},{"type":43,"tag":81,"props":645,"children":647},{"id":646},"how-blobby-works",[648],{"type":48,"value":649},"How Blobby Works",{"type":43,"tag":651,"props":652,"children":654},"h3",{"id":653},"context-priority-order",[655],{"type":48,"value":656},"Context priority order",{"type":43,"tag":51,"props":658,"children":659},{},[660],{"type":48,"value":661},"Omni assembles the context window in this order:",{"type":43,"tag":663,"props":664,"children":665},"ol",{},[666,674,687,701,722,753],{"type":43,"tag":508,"props":667,"children":668},{},[669],{"type":43,"tag":64,"props":670,"children":671},{},[672],{"type":48,"value":673},"Context and tuning pre-built by Omni Engineering",{"type":43,"tag":508,"props":675,"children":676},{},[677,685],{"type":43,"tag":64,"props":678,"children":679},{},[680],{"type":43,"tag":72,"props":681,"children":683},{"className":682},[],[684],{"type":48,"value":540},{"type":48,"value":686}," on the model, topics, and views",{"type":43,"tag":508,"props":688,"children":689},{},[690],{"type":43,"tag":64,"props":691,"children":692},{},[693,695],{"type":48,"value":694},"Topic ",{"type":43,"tag":72,"props":696,"children":698},{"className":697},[],[699],{"type":48,"value":700},"description",{"type":43,"tag":508,"props":702,"children":703},{},[704],{"type":43,"tag":64,"props":705,"children":706},{},[707,708,714,716],{"type":48,"value":694},{"type":43,"tag":72,"props":709,"children":711},{"className":710},[],[712],{"type":48,"value":713},"name",{"type":48,"value":715}," and ",{"type":43,"tag":72,"props":717,"children":719},{"className":718},[],[720],{"type":48,"value":721},"base_view",{"type":43,"tag":508,"props":723,"children":724},{},[725,730,731,736,738,744,746,751],{"type":43,"tag":64,"props":726,"children":727},{},[728],{"type":48,"value":729},"Prioritized field properties",{"type":48,"value":628},{"type":43,"tag":72,"props":732,"children":734},{"className":733},[],[735],{"type":48,"value":713},{"type":48,"value":737}," (fully qualified, ",{"type":43,"tag":72,"props":739,"children":741},{"className":740},[],[742],{"type":48,"value":743},"view.field",{"type":48,"value":745},") and field ",{"type":43,"tag":72,"props":747,"children":749},{"className":748},[],[750],{"type":48,"value":540},{"type":48,"value":752},". Never pruned.",{"type":43,"tag":508,"props":754,"children":755},{},[756,761],{"type":43,"tag":64,"props":757,"children":758},{},[759],{"type":48,"value":760},"Pruned field properties",{"type":48,"value":762}," — everything else, dropped in the order below when space runs short.",{"type":43,"tag":51,"props":764,"children":765},{},[766,772,774,780],{"type":43,"tag":72,"props":767,"children":769},{"className":768},[],[770],{"type":48,"value":771},"hidden: true",{"type":48,"value":773}," fields are excluded entirely. ",{"type":43,"tag":72,"props":775,"children":777},{"className":776},[],[778],{"type":48,"value":779},"ai_chat_topics",{"type":48,"value":781}," (model-level) controls which topics Blobby can see at all.",{"type":43,"tag":651,"props":783,"children":785},{"id":784},"pruning-order",[786],{"type":48,"value":787},"Pruning order",{"type":43,"tag":51,"props":789,"children":790},{},[791,793,798,800,805],{"type":48,"value":792},"When a topic's metadata exceeds its allotment, Omni removes properties ",{"type":43,"tag":64,"props":794,"children":795},{},[796],{"type":48,"value":797},"lowest priority first",{"type":48,"value":799},", clearing each one from ",{"type":43,"tag":350,"props":801,"children":802},{},[803],{"type":48,"value":804},"every",{"type":48,"value":806}," field before moving to the next:",{"type":43,"tag":51,"props":808,"children":809},{},[810,816,818,824,825,831,832,837,838,844,845,851,852,858,859,865,866],{"type":43,"tag":72,"props":811,"children":813},{"className":812},[],[814],{"type":48,"value":815},"all_values",{"type":48,"value":817}," → ",{"type":43,"tag":72,"props":819,"children":821},{"className":820},[],[822],{"type":48,"value":823},"sql",{"type":48,"value":817},{"type":43,"tag":72,"props":826,"children":828},{"className":827},[],[829],{"type":48,"value":830},"sample_values",{"type":48,"value":817},{"type":43,"tag":72,"props":833,"children":835},{"className":834},[],[836],{"type":48,"value":700},{"type":48,"value":817},{"type":43,"tag":72,"props":839,"children":841},{"className":840},[],[842],{"type":48,"value":843},"group_label",{"type":48,"value":817},{"type":43,"tag":72,"props":846,"children":848},{"className":847},[],[849],{"type":48,"value":850},"label",{"type":48,"value":817},{"type":43,"tag":72,"props":853,"children":855},{"className":854},[],[856],{"type":48,"value":857},"aggregate_type",{"type":48,"value":817},{"type":43,"tag":72,"props":860,"children":862},{"className":861},[],[863],{"type":48,"value":864},"data_type",{"type":48,"value":817},{"type":43,"tag":72,"props":867,"children":869},{"className":868},[],[870],{"type":48,"value":593},{"type":43,"tag":51,"props":872,"children":873},{},[874],{"type":48,"value":875},"Two consequences worth internalizing:",{"type":43,"tag":504,"props":877,"children":878},{},[879,906],{"type":43,"tag":508,"props":880,"children":881},{},[882,892,894,904],{"type":43,"tag":64,"props":883,"children":884},{},[885,890],{"type":43,"tag":72,"props":886,"children":888},{"className":887},[],[889],{"type":48,"value":815},{"type":48,"value":891}," goes first",{"type":48,"value":893},", because the AI can fetch a field's values on demand. ",{"type":43,"tag":64,"props":895,"children":896},{},[897,902],{"type":43,"tag":72,"props":898,"children":900},{"className":899},[],[901],{"type":48,"value":593},{"type":48,"value":903}," go last",{"type":48,"value":905},", because they do the most work matching user phrasing to fields.",{"type":43,"tag":508,"props":907,"children":908},{},[909,919,921,926,928,933,935,940,942,947],{"type":43,"tag":64,"props":910,"children":911},{},[912,917],{"type":43,"tag":72,"props":913,"children":915},{"className":914},[],[916],{"type":48,"value":540},{"type":48,"value":918}," is never pruned",{"type":48,"value":920}," when Omni assembles context for a specific topic — at any level (model, topic, view, field). If it still doesn't fit, Omni drops whole views from model search, and past that the ",{"type":43,"tag":64,"props":922,"children":923},{},[924],{"type":48,"value":925},"request fails with an error",{"type":48,"value":927},". Bloated ",{"type":43,"tag":72,"props":929,"children":931},{"className":930},[],[932],{"type":48,"value":540},{"type":48,"value":934}," is not a soft cost — it can starve field metadata and break queries outright. The one exception is ",{"type":43,"tag":350,"props":936,"children":937},{},[938],{"type":48,"value":939},"topic selection",{"type":48,"value":941},", where view-level ",{"type":43,"tag":72,"props":943,"children":945},{"className":944},[],[946],{"type":48,"value":540},{"type":48,"value":948}," is trimmed first (see the caps table below).",{"type":43,"tag":651,"props":950,"children":952},{"id":951},"context-is-guidance-not-instruction",[953],{"type":48,"value":954},"Context is guidance, not instruction",{"type":43,"tag":51,"props":956,"children":957},{},[958],{"type":48,"value":959},"All context is passed to the LLM together, and the LLM decides how to weight it:",{"type":43,"tag":504,"props":961,"children":962},{},[963,986,991],{"type":43,"tag":508,"props":964,"children":965},{},[966,984],{"type":43,"tag":64,"props":967,"children":968},{},[969,971,976,978,983],{"type":48,"value":970},"Model-level ",{"type":43,"tag":72,"props":972,"children":974},{"className":973},[],[975],{"type":48,"value":540},{"type":48,"value":977}," does not reliably override topic-level ",{"type":43,"tag":72,"props":979,"children":981},{"className":980},[],[982],{"type":48,"value":540},{"type":48,"value":383},{"type":48,"value":985}," Don't design around precedence that isn't guaranteed.",{"type":43,"tag":508,"props":987,"children":988},{},[989],{"type":48,"value":990},"Instructions may be followed partially or not at all, especially when complex or self-contradictory.",{"type":43,"tag":508,"props":992,"children":993},{},[994,999],{"type":43,"tag":64,"props":995,"children":996},{},[997],{"type":48,"value":998},"Behavior is non-deterministic",{"type":48,"value":1000}," — the same question can pull different context on different runs.",{"type":43,"tag":51,"props":1002,"children":1003},{},[1004,1006,1015],{"type":48,"value":1005},"Prefer few, unambiguous, non-conflicting instructions over exhaustive rulebooks. Debug what the AI actually received with the ",{"type":43,"tag":1007,"props":1008,"children":1012},"a",{"href":1009,"rel":1010},"https:\u002F\u002Fdocs.omni.co\u002Fanalyze-explore\u002Fworkbook-inspector#ai-messages",[1011],"nofollow",[1013],{"type":48,"value":1014},"workbook inspector",{"type":48,"value":383},{"type":43,"tag":651,"props":1017,"children":1019},{"id":1018},"where-context-applies",[1020],{"type":48,"value":1021},"Where context applies",{"type":43,"tag":51,"props":1023,"children":1024},{},[1025],{"type":48,"value":1026},"Not just Omni Agent — also embedded chat (including topic selection and model search), Workbook Agent query\u002FSQL generation, Dashboard Agent summaries, AI visualization and summary generation, AI filter generation, and the Modeling Agent. A context change affects all of them.",{"type":43,"tag":81,"props":1028,"children":1030},{"id":1029},"writing-ai_context",[1031],{"type":48,"value":1032},"Writing ai_context",{"type":43,"tag":51,"props":1034,"children":1035},{},[1036],{"type":48,"value":1037},"Add via the YAML API:",{"type":43,"tag":88,"props":1039,"children":1041},{"className":90,"code":1040,"language":92,"meta":93,"style":93},"omni models yaml-create \u003CmodelId> --body '{\n  \"fileName\": \"order_transactions.topic\",\n  \"yaml\": \"base_view: order_items\\nlabel: Order Transactions\\nai_context: |\\n  Map \\\"revenue\\\" → total_revenue. Map \\\"orders\\\" → count.\\n  Map \\\"customers\\\" → unique_users.\\n  Status values: complete, pending, cancelled, returned.\\n  Only complete orders for revenue unless specified otherwise.\",\n  \"mode\": \"extension\",\n  \"branchId\": \"{branchId}\",\n  \"commitMessage\": \"Add AI context to order transactions topic\"\n}'\n",[1042],{"type":43,"tag":72,"props":1043,"children":1044},{"__ignoreMap":93},[1045,1094,1102,1110,1118,1126,1134],{"type":43,"tag":99,"props":1046,"children":1047},{"class":101,"line":102},[1048,1052,1056,1060,1064,1069,1074,1079,1084,1089],{"type":43,"tag":99,"props":1049,"children":1050},{"style":195},[1051],{"type":48,"value":19},{"type":43,"tag":99,"props":1053,"children":1054},{"style":130},[1055],{"type":48,"value":426},{"type":43,"tag":99,"props":1057,"children":1058},{"style":130},[1059],{"type":48,"value":452},{"type":43,"tag":99,"props":1061,"children":1062},{"style":141},[1063],{"type":48,"value":237},{"type":43,"tag":99,"props":1065,"children":1066},{"style":130},[1067],{"type":48,"value":1068},"modelI",{"type":43,"tag":99,"props":1070,"children":1071},{"style":245},[1072],{"type":48,"value":1073},"d",{"type":43,"tag":99,"props":1075,"children":1076},{"style":141},[1077],{"type":48,"value":1078},">",{"type":43,"tag":99,"props":1080,"children":1081},{"style":130},[1082],{"type":48,"value":1083}," --body",{"type":43,"tag":99,"props":1085,"children":1086},{"style":141},[1087],{"type":48,"value":1088}," '",{"type":43,"tag":99,"props":1090,"children":1091},{"style":130},[1092],{"type":48,"value":1093},"{\n",{"type":43,"tag":99,"props":1095,"children":1096},{"class":101,"line":112},[1097],{"type":43,"tag":99,"props":1098,"children":1099},{"style":130},[1100],{"type":48,"value":1101},"  \"fileName\": \"order_transactions.topic\",\n",{"type":43,"tag":99,"props":1103,"children":1104},{"class":101,"line":30},[1105],{"type":43,"tag":99,"props":1106,"children":1107},{"style":130},[1108],{"type":48,"value":1109},"  \"yaml\": \"base_view: order_items\\nlabel: Order Transactions\\nai_context: |\\n  Map \\\"revenue\\\" → total_revenue. Map \\\"orders\\\" → count.\\n  Map \\\"customers\\\" → unique_users.\\n  Status values: complete, pending, cancelled, returned.\\n  Only complete orders for revenue unless specified otherwise.\",\n",{"type":43,"tag":99,"props":1111,"children":1112},{"class":101,"line":218},[1113],{"type":43,"tag":99,"props":1114,"children":1115},{"style":130},[1116],{"type":48,"value":1117},"  \"mode\": \"extension\",\n",{"type":43,"tag":99,"props":1119,"children":1120},{"class":101,"line":256},[1121],{"type":43,"tag":99,"props":1122,"children":1123},{"style":130},[1124],{"type":48,"value":1125},"  \"branchId\": \"{branchId}\",\n",{"type":43,"tag":99,"props":1127,"children":1128},{"class":101,"line":266},[1129],{"type":43,"tag":99,"props":1130,"children":1131},{"style":130},[1132],{"type":48,"value":1133},"  \"commitMessage\": \"Add AI context to order transactions topic\"\n",{"type":43,"tag":99,"props":1135,"children":1136},{"class":101,"line":275},[1137,1142],{"type":43,"tag":99,"props":1138,"children":1139},{"style":130},[1140],{"type":48,"value":1141},"}",{"type":43,"tag":99,"props":1143,"children":1144},{"style":141},[1145],{"type":48,"value":1146},"'\n",{"type":43,"tag":651,"props":1148,"children":1150},{"id":1149},"what-makes-good-ai_context",[1151],{"type":48,"value":1152},"What Makes Good ai_context",{"type":43,"tag":51,"props":1154,"children":1155},{},[1156,1161],{"type":43,"tag":64,"props":1157,"children":1158},{},[1159],{"type":48,"value":1160},"Terminology mapping",{"type":48,"value":1162}," — map business language to field names:",{"type":43,"tag":88,"props":1164,"children":1168},{"className":1165,"code":1166,"language":1167,"meta":93,"style":93},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ai_context: |\n  \"revenue\" or \"sales\" → order_items.total_revenue\n  \"orders\" → order_items.count\n  \"customers\" → users.count or order_items.unique_users\n  \"AOV\" → order_items.average_order_value\n","yaml",[1169],{"type":43,"tag":72,"props":1170,"children":1171},{"__ignoreMap":93},[1172,1191,1199,1207,1215],{"type":43,"tag":99,"props":1173,"children":1174},{"class":101,"line":102},[1175,1180,1185],{"type":43,"tag":99,"props":1176,"children":1178},{"style":1177},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1179],{"type":48,"value":540},{"type":43,"tag":99,"props":1181,"children":1182},{"style":141},[1183],{"type":48,"value":1184},":",{"type":43,"tag":99,"props":1186,"children":1188},{"style":1187},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1189],{"type":48,"value":1190}," |\n",{"type":43,"tag":99,"props":1192,"children":1193},{"class":101,"line":112},[1194],{"type":43,"tag":99,"props":1195,"children":1196},{"style":130},[1197],{"type":48,"value":1198},"  \"revenue\" or \"sales\" → order_items.total_revenue\n",{"type":43,"tag":99,"props":1200,"children":1201},{"class":101,"line":30},[1202],{"type":43,"tag":99,"props":1203,"children":1204},{"style":130},[1205],{"type":48,"value":1206},"  \"orders\" → order_items.count\n",{"type":43,"tag":99,"props":1208,"children":1209},{"class":101,"line":218},[1210],{"type":43,"tag":99,"props":1211,"children":1212},{"style":130},[1213],{"type":48,"value":1214},"  \"customers\" → users.count or order_items.unique_users\n",{"type":43,"tag":99,"props":1216,"children":1217},{"class":101,"line":256},[1218],{"type":43,"tag":99,"props":1219,"children":1220},{"style":130},[1221],{"type":48,"value":1222},"  \"AOV\" → order_items.average_order_value\n",{"type":43,"tag":51,"props":1224,"children":1225},{},[1226,1231],{"type":43,"tag":64,"props":1227,"children":1228},{},[1229],{"type":48,"value":1230},"Data nuances",{"type":48,"value":1232}," — explain what isn't obvious from field names:",{"type":43,"tag":88,"props":1234,"children":1236},{"className":1165,"code":1235,"language":1167,"meta":93,"style":93},"ai_context: |\n  Each row is a line item, not an order. One order has multiple line items.\n  total_revenue already excludes returns and cancellations.\n  Dates are in UTC.\n",[1237],{"type":43,"tag":72,"props":1238,"children":1239},{"__ignoreMap":93},[1240,1255,1263,1271],{"type":43,"tag":99,"props":1241,"children":1242},{"class":101,"line":102},[1243,1247,1251],{"type":43,"tag":99,"props":1244,"children":1245},{"style":1177},[1246],{"type":48,"value":540},{"type":43,"tag":99,"props":1248,"children":1249},{"style":141},[1250],{"type":48,"value":1184},{"type":43,"tag":99,"props":1252,"children":1253},{"style":1187},[1254],{"type":48,"value":1190},{"type":43,"tag":99,"props":1256,"children":1257},{"class":101,"line":112},[1258],{"type":43,"tag":99,"props":1259,"children":1260},{"style":130},[1261],{"type":48,"value":1262},"  Each row is a line item, not an order. One order has multiple line items.\n",{"type":43,"tag":99,"props":1264,"children":1265},{"class":101,"line":30},[1266],{"type":43,"tag":99,"props":1267,"children":1268},{"style":130},[1269],{"type":48,"value":1270},"  total_revenue already excludes returns and cancellations.\n",{"type":43,"tag":99,"props":1272,"children":1273},{"class":101,"line":218},[1274],{"type":43,"tag":99,"props":1275,"children":1276},{"style":130},[1277],{"type":48,"value":1278},"  Dates are in UTC.\n",{"type":43,"tag":51,"props":1280,"children":1281},{},[1282,1284,1294,1296,1301],{"type":48,"value":1283},"For \"map these terms correctly\" or \"Blobby confuses X with Y\", the fix is a ",{"type":43,"tag":64,"props":1285,"children":1286},{},[1287,1289],{"type":48,"value":1288},"positive mapping in topic-level ",{"type":43,"tag":72,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":48,"value":540},{"type":48,"value":1295}," — synonyms alone can't arbitrate between two competing measures. If synonyms already exist but the topic context only says what ",{"type":43,"tag":350,"props":1297,"children":1298},{},[1299],{"type":48,"value":1300},"not",{"type":48,"value":1302}," to use, add the missing positive mapping rather than more synonyms.",{"type":43,"tag":51,"props":1304,"children":1305},{},[1306],{"type":48,"value":1307},"Good:",{"type":43,"tag":88,"props":1309,"children":1311},{"className":1165,"code":1310,"language":1167,"meta":93,"style":93},"ai_context: |\n  \"revenue\" or \"sales\" -> order_items.total_revenue\n  \"order count\" or \"number of orders\" -> order_items.count\n  Never use order_items.count when the user asks for revenue.\n",[1312],{"type":43,"tag":72,"props":1313,"children":1314},{"__ignoreMap":93},[1315,1330,1338,1346],{"type":43,"tag":99,"props":1316,"children":1317},{"class":101,"line":102},[1318,1322,1326],{"type":43,"tag":99,"props":1319,"children":1320},{"style":1177},[1321],{"type":48,"value":540},{"type":43,"tag":99,"props":1323,"children":1324},{"style":141},[1325],{"type":48,"value":1184},{"type":43,"tag":99,"props":1327,"children":1328},{"style":1187},[1329],{"type":48,"value":1190},{"type":43,"tag":99,"props":1331,"children":1332},{"class":101,"line":112},[1333],{"type":43,"tag":99,"props":1334,"children":1335},{"style":130},[1336],{"type":48,"value":1337},"  \"revenue\" or \"sales\" -> order_items.total_revenue\n",{"type":43,"tag":99,"props":1339,"children":1340},{"class":101,"line":30},[1341],{"type":43,"tag":99,"props":1342,"children":1343},{"style":130},[1344],{"type":48,"value":1345},"  \"order count\" or \"number of orders\" -> order_items.count\n",{"type":43,"tag":99,"props":1347,"children":1348},{"class":101,"line":218},[1349],{"type":43,"tag":99,"props":1350,"children":1351},{"style":130},[1352],{"type":48,"value":1353},"  Never use order_items.count when the user asks for revenue.\n",{"type":43,"tag":51,"props":1355,"children":1356},{},[1357],{"type":48,"value":1358},"Avoid stopping at:",{"type":43,"tag":88,"props":1360,"children":1362},{"className":1165,"code":1361,"language":1167,"meta":93,"style":93},"measures:\n  total_revenue:\n    synonyms: [revenue, sales]\n  count:\n    synonyms: [order count, orders]\n",[1363],{"type":43,"tag":72,"props":1364,"children":1365},{"__ignoreMap":93},[1366,1379,1391,1428,1440],{"type":43,"tag":99,"props":1367,"children":1368},{"class":101,"line":102},[1369,1374],{"type":43,"tag":99,"props":1370,"children":1371},{"style":1177},[1372],{"type":48,"value":1373},"measures",{"type":43,"tag":99,"props":1375,"children":1376},{"style":141},[1377],{"type":48,"value":1378},":\n",{"type":43,"tag":99,"props":1380,"children":1381},{"class":101,"line":112},[1382,1387],{"type":43,"tag":99,"props":1383,"children":1384},{"style":1177},[1385],{"type":48,"value":1386},"  total_revenue",{"type":43,"tag":99,"props":1388,"children":1389},{"style":141},[1390],{"type":48,"value":1378},{"type":43,"tag":99,"props":1392,"children":1393},{"class":101,"line":30},[1394,1399,1403,1408,1413,1418,1423],{"type":43,"tag":99,"props":1395,"children":1396},{"style":1177},[1397],{"type":48,"value":1398},"    synonyms",{"type":43,"tag":99,"props":1400,"children":1401},{"style":141},[1402],{"type":48,"value":1184},{"type":43,"tag":99,"props":1404,"children":1405},{"style":141},[1406],{"type":48,"value":1407}," [",{"type":43,"tag":99,"props":1409,"children":1410},{"style":130},[1411],{"type":48,"value":1412},"revenue",{"type":43,"tag":99,"props":1414,"children":1415},{"style":141},[1416],{"type":48,"value":1417},",",{"type":43,"tag":99,"props":1419,"children":1420},{"style":130},[1421],{"type":48,"value":1422}," sales",{"type":43,"tag":99,"props":1424,"children":1425},{"style":141},[1426],{"type":48,"value":1427},"]\n",{"type":43,"tag":99,"props":1429,"children":1430},{"class":101,"line":218},[1431,1436],{"type":43,"tag":99,"props":1432,"children":1433},{"style":1177},[1434],{"type":48,"value":1435},"  count",{"type":43,"tag":99,"props":1437,"children":1438},{"style":141},[1439],{"type":48,"value":1378},{"type":43,"tag":99,"props":1441,"children":1442},{"class":101,"line":256},[1443,1447,1451,1455,1460,1464,1469],{"type":43,"tag":99,"props":1444,"children":1445},{"style":1177},[1446],{"type":48,"value":1398},{"type":43,"tag":99,"props":1448,"children":1449},{"style":141},[1450],{"type":48,"value":1184},{"type":43,"tag":99,"props":1452,"children":1453},{"style":141},[1454],{"type":48,"value":1407},{"type":43,"tag":99,"props":1456,"children":1457},{"style":130},[1458],{"type":48,"value":1459},"order count",{"type":43,"tag":99,"props":1461,"children":1462},{"style":141},[1463],{"type":48,"value":1417},{"type":43,"tag":99,"props":1465,"children":1466},{"style":130},[1467],{"type":48,"value":1468}," orders",{"type":43,"tag":99,"props":1470,"children":1471},{"style":141},[1472],{"type":48,"value":1427},{"type":43,"tag":51,"props":1474,"children":1475},{},[1476,1481],{"type":43,"tag":64,"props":1477,"children":1478},{},[1479],{"type":48,"value":1480},"Behavioral guidance",{"type":48,"value":1482}," — direct common patterns:",{"type":43,"tag":88,"props":1484,"children":1486},{"className":1165,"code":1485,"language":1167,"meta":93,"style":93},"ai_context: |\n  For trends, default to weekly granularity, sort ascending.\n  For \"top N\", sort descending and limit to 10.\n",[1487],{"type":43,"tag":72,"props":1488,"children":1489},{"__ignoreMap":93},[1490,1505,1513],{"type":43,"tag":99,"props":1491,"children":1492},{"class":101,"line":102},[1493,1497,1501],{"type":43,"tag":99,"props":1494,"children":1495},{"style":1177},[1496],{"type":48,"value":540},{"type":43,"tag":99,"props":1498,"children":1499},{"style":141},[1500],{"type":48,"value":1184},{"type":43,"tag":99,"props":1502,"children":1503},{"style":1187},[1504],{"type":48,"value":1190},{"type":43,"tag":99,"props":1506,"children":1507},{"class":101,"line":112},[1508],{"type":43,"tag":99,"props":1509,"children":1510},{"style":130},[1511],{"type":48,"value":1512},"  For trends, default to weekly granularity, sort ascending.\n",{"type":43,"tag":99,"props":1514,"children":1515},{"class":101,"line":30},[1516],{"type":43,"tag":99,"props":1517,"children":1518},{"style":130},[1519],{"type":48,"value":1520},"  For \"top N\", sort descending and limit to 10.\n",{"type":43,"tag":51,"props":1522,"children":1523},{},[1524,1529],{"type":43,"tag":64,"props":1525,"children":1526},{},[1527],{"type":48,"value":1528},"Persona prompting",{"type":48,"value":1530}," — set the analytical perspective:",{"type":43,"tag":88,"props":1532,"children":1534},{"className":1165,"code":1533,"language":1167,"meta":93,"style":93},"ai_context: |\n  You are the head of finance analyzing customer payment data.\n  Default to monetary values in USD with 2 decimal places.\n",[1535],{"type":43,"tag":72,"props":1536,"children":1537},{"__ignoreMap":93},[1538,1553,1561],{"type":43,"tag":99,"props":1539,"children":1540},{"class":101,"line":102},[1541,1545,1549],{"type":43,"tag":99,"props":1542,"children":1543},{"style":1177},[1544],{"type":48,"value":540},{"type":43,"tag":99,"props":1546,"children":1547},{"style":141},[1548],{"type":48,"value":1184},{"type":43,"tag":99,"props":1550,"children":1551},{"style":1187},[1552],{"type":48,"value":1190},{"type":43,"tag":99,"props":1554,"children":1555},{"class":101,"line":112},[1556],{"type":43,"tag":99,"props":1557,"children":1558},{"style":130},[1559],{"type":48,"value":1560},"  You are the head of finance analyzing customer payment data.\n",{"type":43,"tag":99,"props":1562,"children":1563},{"class":101,"line":30},[1564],{"type":43,"tag":99,"props":1565,"children":1566},{"style":130},[1567],{"type":48,"value":1568},"  Default to monetary values in USD with 2 decimal places.\n",{"type":43,"tag":651,"props":1570,"children":1572},{"id":1571},"keeping-context-concise",[1573],{"type":48,"value":1574},"Keeping Context Concise",{"type":43,"tag":51,"props":1576,"children":1577},{},[1578,1583],{"type":43,"tag":72,"props":1579,"children":1581},{"className":1580},[],[1582],{"type":48,"value":540},{"type":48,"value":1584}," is the one property Omni can't reclaim under pressure, so it is the scarcest budget in the model — not the most generous. Verbose entries evict field metadata first and can ultimately fail the request.",{"type":43,"tag":504,"props":1586,"children":1587},{},[1588,1600,1605],{"type":43,"tag":508,"props":1589,"children":1590},{},[1591,1593,1598],{"type":48,"value":1592},"Target 1-2 sentences per ",{"type":43,"tag":72,"props":1594,"children":1596},{"className":1595},[],[1597],{"type":48,"value":540},{"type":48,"value":1599}," entry. Focus on disambiguation and gotchas, not general explanation.",{"type":43,"tag":508,"props":1601,"children":1602},{},[1603],{"type":48,"value":1604},"Keep labels short and human-readable — avoid redundant qualification (e.g., \"Order Total Revenue Amount\" → \"Total Revenue\").",{"type":43,"tag":508,"props":1606,"children":1607},{},[1608,1610,1615],{"type":48,"value":1609},"Rewrite long ",{"type":43,"tag":72,"props":1611,"children":1613},{"className":1612},[],[1614],{"type":48,"value":700},{"type":48,"value":1616}," values to be direct. If a description restates the field name, remove it.",{"type":43,"tag":81,"props":1618,"children":1620},{"id":1619},"model-level-context",[1621],{"type":48,"value":1622},"Model-Level Context",{"type":43,"tag":51,"props":1624,"children":1625},{},[1626,1627,1637,1639,1643],{"type":48,"value":970},{"type":43,"tag":1007,"props":1628,"children":1631},{"href":1629,"rel":1630},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fai-context",[1011],[1632],{"type":43,"tag":72,"props":1633,"children":1635},{"className":1634},[],[1636],{"type":48,"value":540},{"type":48,"value":1638}," carries guidance shared across every topic, and also informs ",{"type":43,"tag":64,"props":1640,"children":1641},{},[1642],{"type":48,"value":939},{"type":48,"value":1644}," — useful when Blobby picks the wrong topic rather than the wrong field.",{"type":43,"tag":51,"props":1646,"children":1647},{},[1648],{"type":48,"value":1649},"Use it for instance-wide conventions (currency, fiscal calendar, tone, privacy rules) and keep topic-specific mappings on the topic.",{"type":43,"tag":51,"props":1651,"children":1652},{},[1653,1655,1665],{"type":48,"value":1654},"There is also a model-level ",{"type":43,"tag":1007,"props":1656,"children":1659},{"href":1657,"rel":1658},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fsample-queries",[1011],[1660],{"type":43,"tag":72,"props":1661,"children":1663},{"className":1662},[],[1664],{"type":48,"value":555},{"type":48,"value":1666}," parameter for example queries that span the model's topics.",{"type":43,"tag":81,"props":1668,"children":1670},{"id":1669},"advanced-ai_context-templating",[1671],{"type":48,"value":1672},"Advanced ai_context Templating",{"type":43,"tag":51,"props":1674,"children":1675},{},[1676,1678,1683,1685,1690],{"type":48,"value":1677},"These apply to ",{"type":43,"tag":72,"props":1679,"children":1681},{"className":1680},[],[1682],{"type":48,"value":540},{"type":48,"value":1684}," at the ",{"type":43,"tag":64,"props":1686,"children":1687},{},[1688],{"type":48,"value":1689},"model, topic, and view levels only",{"type":48,"value":383},{"type":43,"tag":651,"props":1692,"children":1694},{"id":1693},"personalize-with-user-attributes",[1695],{"type":48,"value":1696},"Personalize with user attributes",{"type":43,"tag":51,"props":1698,"children":1699},{},[1700,1706,1708,1715],{"type":43,"tag":72,"props":1701,"children":1703},{"className":1702},[],[1704],{"type":48,"value":1705},"{{omni_attributes.\u003Cattribute_name>}}",{"type":48,"value":1707}," is substituted with the current user's ",{"type":43,"tag":1007,"props":1709,"children":1712},{"href":1710,"rel":1711},"https:\u002F\u002Fdocs.omni.co\u002Fadministration\u002Fusers\u002Fattributes",[1011],[1713],{"type":48,"value":1714},"attribute value",{"type":48,"value":1716}," at query time:",{"type":43,"tag":88,"props":1718,"children":1720},{"className":1165,"code":1719,"language":1167,"meta":93,"style":93},"ai_context: |\n  You are a sales analyst. When someone asks about their team or pipeline,\n  always filter by account.segment = {{omni_attributes.segment}}\n  and account.region = {{omni_attributes.region}}.\n",[1721],{"type":43,"tag":72,"props":1722,"children":1723},{"__ignoreMap":93},[1724,1739,1747,1755],{"type":43,"tag":99,"props":1725,"children":1726},{"class":101,"line":102},[1727,1731,1735],{"type":43,"tag":99,"props":1728,"children":1729},{"style":1177},[1730],{"type":48,"value":540},{"type":43,"tag":99,"props":1732,"children":1733},{"style":141},[1734],{"type":48,"value":1184},{"type":43,"tag":99,"props":1736,"children":1737},{"style":1187},[1738],{"type":48,"value":1190},{"type":43,"tag":99,"props":1740,"children":1741},{"class":101,"line":112},[1742],{"type":43,"tag":99,"props":1743,"children":1744},{"style":130},[1745],{"type":48,"value":1746},"  You are a sales analyst. When someone asks about their team or pipeline,\n",{"type":43,"tag":99,"props":1748,"children":1749},{"class":101,"line":30},[1750],{"type":43,"tag":99,"props":1751,"children":1752},{"style":130},[1753],{"type":48,"value":1754},"  always filter by account.segment = {{omni_attributes.segment}}\n",{"type":43,"tag":99,"props":1756,"children":1757},{"class":101,"line":218},[1758],{"type":43,"tag":99,"props":1759,"children":1760},{"style":130},[1761],{"type":48,"value":1762},"  and account.region = {{omni_attributes.region}}.\n",{"type":43,"tag":57,"props":1764,"children":1765},{},[1766],{"type":43,"tag":51,"props":1767,"children":1768},{},[1769,1774,1776,1781],{"type":43,"tag":64,"props":1770,"children":1771},{},[1772],{"type":48,"value":1773},"Caveat",{"type":48,"value":1775},": Not supported in dimension or measure ",{"type":43,"tag":72,"props":1777,"children":1779},{"className":1778},[],[1780],{"type":48,"value":540},{"type":48,"value":1782}," — there the value is used verbatim, un-substituted. Field references and filter conditions are also unsupported and raise a validation warning.",{"type":43,"tag":651,"props":1784,"children":1786},{"id":1785},"target-specific-model-tiers-with-omni_llm",[1787],{"type":48,"value":1788},"Target specific model tiers with omni_llm",{"type":43,"tag":51,"props":1790,"children":1791},{},[1792,1794,1800,1801,1807,1808,1814,1816,1822,1824,1830],{"type":48,"value":1793},"Scope instructions to the AI model tier — ",{"type":43,"tag":72,"props":1795,"children":1797},{"className":1796},[],[1798],{"type":48,"value":1799},"smartest",{"type":48,"value":542},{"type":43,"tag":72,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":48,"value":1806},"standard",{"type":48,"value":580},{"type":43,"tag":72,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":48,"value":1813},"fastest",{"type":48,"value":1815}," — so expensive reasoning instructions don't burden fast models. Sections use Mustache syntax: ",{"type":43,"tag":72,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":48,"value":1821},"{{# ... }}",{"type":48,"value":1823}," for \"when\", ",{"type":43,"tag":72,"props":1825,"children":1827},{"className":1826},[],[1828],{"type":48,"value":1829},"{{^ ... }}",{"type":48,"value":1831}," for \"when not\".",{"type":43,"tag":88,"props":1833,"children":1835},{"className":1165,"code":1834,"language":1167,"meta":93,"style":93},"ai_context: |\n  This topic focuses on financial transactions.\n\n  {{# omni_llm.smartest }}\n  For complex multi-table queries, consider indirect relationships and provide rationale for join path selection.\n  {{\u002F omni_llm.smartest }}\n\n  {{# omni_llm.fastest }}\n  Prefer single-table queries when possible.\n  {{\u002F omni_llm.fastest }}\n",[1836],{"type":43,"tag":72,"props":1837,"children":1838},{"__ignoreMap":93},[1839,1854,1862,1869,1877,1885,1893,1900,1909,1918],{"type":43,"tag":99,"props":1840,"children":1841},{"class":101,"line":102},[1842,1846,1850],{"type":43,"tag":99,"props":1843,"children":1844},{"style":1177},[1845],{"type":48,"value":540},{"type":43,"tag":99,"props":1847,"children":1848},{"style":141},[1849],{"type":48,"value":1184},{"type":43,"tag":99,"props":1851,"children":1852},{"style":1187},[1853],{"type":48,"value":1190},{"type":43,"tag":99,"props":1855,"children":1856},{"class":101,"line":112},[1857],{"type":43,"tag":99,"props":1858,"children":1859},{"style":130},[1860],{"type":48,"value":1861},"  This topic focuses on financial transactions.\n",{"type":43,"tag":99,"props":1863,"children":1864},{"class":101,"line":30},[1865],{"type":43,"tag":99,"props":1866,"children":1867},{"emptyLinePlaceholder":260},[1868],{"type":48,"value":263},{"type":43,"tag":99,"props":1870,"children":1871},{"class":101,"line":218},[1872],{"type":43,"tag":99,"props":1873,"children":1874},{"style":130},[1875],{"type":48,"value":1876},"  {{# omni_llm.smartest }}\n",{"type":43,"tag":99,"props":1878,"children":1879},{"class":101,"line":256},[1880],{"type":43,"tag":99,"props":1881,"children":1882},{"style":130},[1883],{"type":48,"value":1884},"  For complex multi-table queries, consider indirect relationships and provide rationale for join path selection.\n",{"type":43,"tag":99,"props":1886,"children":1887},{"class":101,"line":266},[1888],{"type":43,"tag":99,"props":1889,"children":1890},{"style":130},[1891],{"type":48,"value":1892},"  {{\u002F omni_llm.smartest }}\n",{"type":43,"tag":99,"props":1894,"children":1895},{"class":101,"line":275},[1896],{"type":43,"tag":99,"props":1897,"children":1898},{"emptyLinePlaceholder":260},[1899],{"type":48,"value":263},{"type":43,"tag":99,"props":1901,"children":1903},{"class":101,"line":1902},8,[1904],{"type":43,"tag":99,"props":1905,"children":1906},{"style":130},[1907],{"type":48,"value":1908},"  {{# omni_llm.fastest }}\n",{"type":43,"tag":99,"props":1910,"children":1912},{"class":101,"line":1911},9,[1913],{"type":43,"tag":99,"props":1914,"children":1915},{"style":130},[1916],{"type":48,"value":1917},"  Prefer single-table queries when possible.\n",{"type":43,"tag":99,"props":1919,"children":1921},{"class":101,"line":1920},10,[1922],{"type":43,"tag":99,"props":1923,"children":1924},{"style":130},[1925],{"type":48,"value":1926},"  {{\u002F omni_llm.fastest }}\n",{"type":43,"tag":651,"props":1928,"children":1930},{"id":1929},"target-specific-agents-with-omni_agent",[1931],{"type":48,"value":1932},"Target specific agents with omni_agent",{"type":43,"tag":51,"props":1934,"children":1935},{},[1936],{"type":48,"value":1937},"Scope context to the agent that will read it, so bulky agent-specific content doesn't inflate the window for the others:",{"type":43,"tag":504,"props":1939,"children":1940},{},[1941,1952,1963],{"type":43,"tag":508,"props":1942,"children":1943},{},[1944,1950],{"type":43,"tag":72,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":48,"value":1949},"analyze",{"type":48,"value":1951}," — model search and query generation",{"type":43,"tag":508,"props":1953,"children":1954},{},[1955,1961],{"type":43,"tag":72,"props":1956,"children":1958},{"className":1957},[],[1959],{"type":48,"value":1960},"build",{"type":48,"value":1962}," — topic metadata generation, learn-from-conversation",{"type":43,"tag":508,"props":1964,"children":1965},{},[1966,1972],{"type":43,"tag":72,"props":1967,"children":1969},{"className":1968},[],[1970],{"type":48,"value":1971},"simple_summarize",{"type":48,"value":1973}," — tile\u002Fvisualization summaries, query metadata",{"type":43,"tag":88,"props":1975,"children":1977},{"className":1165,"code":1976,"language":1167,"meta":93,"style":93},"ai_context: |\n  {{# omni_agent.build }}\n  Modeling conventions: Always define primary keys. Use snake_case for field names.\n  {{\u002F omni_agent.build }}\n\n  {{^ omni_agent.build }}\n  Keep queries focused and efficient.\n  {{\u002F omni_agent.build }}\n",[1978],{"type":43,"tag":72,"props":1979,"children":1980},{"__ignoreMap":93},[1981,1996,2004,2012,2020,2027,2035,2043],{"type":43,"tag":99,"props":1982,"children":1983},{"class":101,"line":102},[1984,1988,1992],{"type":43,"tag":99,"props":1985,"children":1986},{"style":1177},[1987],{"type":48,"value":540},{"type":43,"tag":99,"props":1989,"children":1990},{"style":141},[1991],{"type":48,"value":1184},{"type":43,"tag":99,"props":1993,"children":1994},{"style":1187},[1995],{"type":48,"value":1190},{"type":43,"tag":99,"props":1997,"children":1998},{"class":101,"line":112},[1999],{"type":43,"tag":99,"props":2000,"children":2001},{"style":130},[2002],{"type":48,"value":2003},"  {{# omni_agent.build }}\n",{"type":43,"tag":99,"props":2005,"children":2006},{"class":101,"line":30},[2007],{"type":43,"tag":99,"props":2008,"children":2009},{"style":130},[2010],{"type":48,"value":2011},"  Modeling conventions: Always define primary keys. Use snake_case for field names.\n",{"type":43,"tag":99,"props":2013,"children":2014},{"class":101,"line":218},[2015],{"type":43,"tag":99,"props":2016,"children":2017},{"style":130},[2018],{"type":48,"value":2019},"  {{\u002F omni_agent.build }}\n",{"type":43,"tag":99,"props":2021,"children":2022},{"class":101,"line":256},[2023],{"type":43,"tag":99,"props":2024,"children":2025},{"emptyLinePlaceholder":260},[2026],{"type":48,"value":263},{"type":43,"tag":99,"props":2028,"children":2029},{"class":101,"line":266},[2030],{"type":43,"tag":99,"props":2031,"children":2032},{"style":130},[2033],{"type":48,"value":2034},"  {{^ omni_agent.build }}\n",{"type":43,"tag":99,"props":2036,"children":2037},{"class":101,"line":275},[2038],{"type":43,"tag":99,"props":2039,"children":2040},{"style":130},[2041],{"type":48,"value":2042},"  Keep queries focused and efficient.\n",{"type":43,"tag":99,"props":2044,"children":2045},{"class":101,"line":1902},[2046],{"type":43,"tag":99,"props":2047,"children":2048},{"style":130},[2049],{"type":48,"value":2019},{"type":43,"tag":51,"props":2051,"children":2052},{},[2053,2059],{"type":43,"tag":72,"props":2054,"children":2056},{"className":2055},[],[2057],{"type":48,"value":2058},"{{ omni_agent.name }}",{"type":48,"value":2060}," interpolates the reading agent's name.",{"type":43,"tag":651,"props":2062,"children":2064},{"id":2063},"reuse-blocks-with-constants",[2065],{"type":48,"value":2066},"Reuse blocks with constants",{"type":43,"tag":51,"props":2068,"children":2069},{},[2070,2072,2083,2085,2091,2093,2098],{"type":48,"value":2071},"Define ",{"type":43,"tag":1007,"props":2073,"children":2076},{"href":2074,"rel":2075},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fconstants#reusable-ai-context",[1011],[2077],{"type":43,"tag":72,"props":2078,"children":2080},{"className":2079},[],[2081],{"type":48,"value":2082},"constants",{"type":48,"value":2084}," once and reference them with ",{"type":43,"tag":72,"props":2086,"children":2088},{"className":2087},[],[2089],{"type":48,"value":2090},"@{constant_name}",{"type":48,"value":2092}," across model, topic, view, and sample-query ",{"type":43,"tag":72,"props":2094,"children":2096},{"className":2095},[],[2097],{"type":48,"value":540},{"type":48,"value":2099}," — the fix for the same tone\u002Fprivacy\u002Fdomain paragraph duplicated in a dozen places:",{"type":43,"tag":88,"props":2101,"children":2103},{"className":1165,"code":2102,"language":1167,"meta":93,"style":93},"constants:\n  tone:\n    value: \"Keep responses concise and professional.\"\n  privacy_high:\n    value: \"Never show individual customer names or emails.\"\n\nai_context: |\n  @{tone} @{privacy_high}\n",[2104],{"type":43,"tag":72,"props":2105,"children":2106},{"__ignoreMap":93},[2107,2118,2130,2155,2167,2191,2198,2213],{"type":43,"tag":99,"props":2108,"children":2109},{"class":101,"line":102},[2110,2114],{"type":43,"tag":99,"props":2111,"children":2112},{"style":1177},[2113],{"type":48,"value":2082},{"type":43,"tag":99,"props":2115,"children":2116},{"style":141},[2117],{"type":48,"value":1378},{"type":43,"tag":99,"props":2119,"children":2120},{"class":101,"line":112},[2121,2126],{"type":43,"tag":99,"props":2122,"children":2123},{"style":1177},[2124],{"type":48,"value":2125},"  tone",{"type":43,"tag":99,"props":2127,"children":2128},{"style":141},[2129],{"type":48,"value":1378},{"type":43,"tag":99,"props":2131,"children":2132},{"class":101,"line":30},[2133,2138,2142,2146,2151],{"type":43,"tag":99,"props":2134,"children":2135},{"style":1177},[2136],{"type":48,"value":2137},"    value",{"type":43,"tag":99,"props":2139,"children":2140},{"style":141},[2141],{"type":48,"value":1184},{"type":43,"tag":99,"props":2143,"children":2144},{"style":141},[2145],{"type":48,"value":164},{"type":43,"tag":99,"props":2147,"children":2148},{"style":130},[2149],{"type":48,"value":2150},"Keep responses concise and professional.",{"type":43,"tag":99,"props":2152,"children":2153},{"style":141},[2154],{"type":48,"value":174},{"type":43,"tag":99,"props":2156,"children":2157},{"class":101,"line":218},[2158,2163],{"type":43,"tag":99,"props":2159,"children":2160},{"style":1177},[2161],{"type":48,"value":2162},"  privacy_high",{"type":43,"tag":99,"props":2164,"children":2165},{"style":141},[2166],{"type":48,"value":1378},{"type":43,"tag":99,"props":2168,"children":2169},{"class":101,"line":256},[2170,2174,2178,2182,2187],{"type":43,"tag":99,"props":2171,"children":2172},{"style":1177},[2173],{"type":48,"value":2137},{"type":43,"tag":99,"props":2175,"children":2176},{"style":141},[2177],{"type":48,"value":1184},{"type":43,"tag":99,"props":2179,"children":2180},{"style":141},[2181],{"type":48,"value":164},{"type":43,"tag":99,"props":2183,"children":2184},{"style":130},[2185],{"type":48,"value":2186},"Never show individual customer names or emails.",{"type":43,"tag":99,"props":2188,"children":2189},{"style":141},[2190],{"type":48,"value":174},{"type":43,"tag":99,"props":2192,"children":2193},{"class":101,"line":266},[2194],{"type":43,"tag":99,"props":2195,"children":2196},{"emptyLinePlaceholder":260},[2197],{"type":48,"value":263},{"type":43,"tag":99,"props":2199,"children":2200},{"class":101,"line":275},[2201,2205,2209],{"type":43,"tag":99,"props":2202,"children":2203},{"style":1177},[2204],{"type":48,"value":540},{"type":43,"tag":99,"props":2206,"children":2207},{"style":141},[2208],{"type":48,"value":1184},{"type":43,"tag":99,"props":2210,"children":2211},{"style":1187},[2212],{"type":48,"value":1190},{"type":43,"tag":99,"props":2214,"children":2215},{"class":101,"line":1902},[2216],{"type":43,"tag":99,"props":2217,"children":2218},{"style":130},[2219],{"type":48,"value":2220},"  @{tone} @{privacy_high}\n",{"type":43,"tag":81,"props":2222,"children":2224},{"id":2223},"curating-fields-with-ai_fields",[2225],{"type":48,"value":2226},"Curating Fields with ai_fields",{"type":43,"tag":651,"props":2228,"children":2230},{"id":2229},"the-real-limits",[2231],{"type":48,"value":2232},"The real limits",{"type":43,"tag":51,"props":2234,"children":2235},{},[2236],{"type":48,"value":2237},"Omni caps how much of the context window model metadata may consume. These caps — not the model's full context window — are what trigger pruning:",{"type":43,"tag":2239,"props":2240,"children":2241},"table",{},[2242,2266],{"type":43,"tag":2243,"props":2244,"children":2245},"thead",{},[2246],{"type":43,"tag":2247,"props":2248,"children":2249},"tr",{},[2250,2256,2261],{"type":43,"tag":2251,"props":2252,"children":2253},"th",{},[2254],{"type":48,"value":2255},"Cap",{"type":43,"tag":2251,"props":2257,"children":2258},{},[2259],{"type":48,"value":2260},"Value",{"type":43,"tag":2251,"props":2262,"children":2263},{},[2264],{"type":48,"value":2265},"What happens past it",{"type":43,"tag":2267,"props":2268,"children":2269},"tbody",{},[2270,2295,2320],{"type":43,"tag":2247,"props":2271,"children":2272},{},[2273,2279,2284],{"type":43,"tag":2274,"props":2275,"children":2276},"td",{},[2277],{"type":48,"value":2278},"A topic's field definitions",{"type":43,"tag":2274,"props":2280,"children":2281},{},[2282],{"type":48,"value":2283},"~75K characters",{"type":43,"tag":2274,"props":2285,"children":2286},{},[2287,2289],{"type":48,"value":2288},"Field properties are pruned in the ",{"type":43,"tag":1007,"props":2290,"children":2292},{"href":2291},"#pruning-order",[2293],{"type":48,"value":2294},"pruning order",{"type":43,"tag":2247,"props":2296,"children":2297},{},[2298,2303,2308],{"type":43,"tag":2274,"props":2299,"children":2300},{},[2301],{"type":48,"value":2302},"Topic-selection summaries (all topics)",{"type":43,"tag":2274,"props":2304,"children":2305},{},[2306],{"type":48,"value":2307},"~100K characters",{"type":43,"tag":2274,"props":2309,"children":2310},{},[2311,2313,2318],{"type":48,"value":2312},"View metadata trimmed first (including view-level ",{"type":43,"tag":72,"props":2314,"children":2316},{"className":2315},[],[2317],{"type":48,"value":540},{"type":48,"value":2319},"), then sample queries, then topic metadata as a last resort. Trimmed detail is recovered once a topic is selected.",{"type":43,"tag":2247,"props":2321,"children":2322},{},[2323,2328,2333],{"type":43,"tag":2274,"props":2324,"children":2325},{},[2326],{"type":48,"value":2327},"Searches outside a topic",{"type":43,"tag":2274,"props":2329,"children":2330},{},[2331],{"type":48,"value":2332},"100 fields per search",{"type":43,"tag":2274,"props":2334,"children":2335},{},[2336,2338,2349],{"type":48,"value":2337},"The AI runs narrower repeat searches rather than pruning properties. Applies when ",{"type":43,"tag":1007,"props":2339,"children":2342},{"href":2340,"rel":2341},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fparameters\u002Fai-settings\u002Fquery-all-views-and-fields",[1011],[2343],{"type":43,"tag":72,"props":2344,"children":2346},{"className":2345},[],[2347],{"type":48,"value":2348},"query_all_views_and_fields",{"type":48,"value":2350}," is enabled.",{"type":43,"tag":57,"props":2352,"children":2353},{},[2354],{"type":43,"tag":51,"props":2355,"children":2356},{},[2357,2362,2364,2369,2371,2376],{"type":43,"tag":64,"props":2358,"children":2359},{},[2360],{"type":48,"value":2361},"Do not optimize against a field count.",{"type":48,"value":2363}," A lightly annotated field costs ~100 characters; one with a rich description, sample values, and ",{"type":43,"tag":72,"props":2365,"children":2367},{"className":2366},[],[2368],{"type":48,"value":540},{"type":48,"value":2370}," costs several times that, so the number of fields that fits varies widely. Check the ",{"type":43,"tag":1007,"props":2372,"children":2374},{"href":1009,"rel":2373},[1011],[2375],{"type":48,"value":1014},{"type":48,"value":2377}," to see the context actually delivered instead of estimating.",{"type":43,"tag":51,"props":2379,"children":2380},{},[2381,2383,2394],{"type":48,"value":2382},"Conversation history is budgeted separately — see ",{"type":43,"tag":1007,"props":2384,"children":2387},{"href":2385,"rel":2386},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fparameters\u002Fai-settings\u002Fconversation-prune-length",[1011],[2388],{"type":43,"tag":72,"props":2389,"children":2391},{"className":2390},[],[2392],{"type":48,"value":2393},"conversation_prune_length",{"type":48,"value":383},{"type":43,"tag":651,"props":2396,"children":2398},{"id":2397},"curating",[2399],{"type":48,"value":2400},"Curating",{"type":43,"tag":51,"props":2402,"children":2403},{},[2404],{"type":48,"value":2405},"Curate for precision, not just for size: a smaller, well-described field set gives the AI fewer chances to pick the wrong field. Reduce noise for large models:",{"type":43,"tag":88,"props":2407,"children":2409},{"className":1165,"code":2408,"language":1167,"meta":93,"style":93},"ai_fields:\n  - all_views.*\n  - -tag:internal\n  - -distribution_centers.*\n\n# Or explicit list\nai_fields:\n  - order_items.created_at\n  - order_items.total_revenue\n  - order_items.count\n  - users.name\n  - users.state\n  - products.category\n",[2410],{"type":43,"tag":72,"props":2411,"children":2412},{"__ignoreMap":93},[2413,2424,2437,2449,2461,2468,2476,2487,2499,2511,2523,2536,2549],{"type":43,"tag":99,"props":2414,"children":2415},{"class":101,"line":102},[2416,2420],{"type":43,"tag":99,"props":2417,"children":2418},{"style":1177},[2419],{"type":48,"value":548},{"type":43,"tag":99,"props":2421,"children":2422},{"style":141},[2423],{"type":48,"value":1378},{"type":43,"tag":99,"props":2425,"children":2426},{"class":101,"line":112},[2427,2432],{"type":43,"tag":99,"props":2428,"children":2429},{"style":141},[2430],{"type":48,"value":2431},"  -",{"type":43,"tag":99,"props":2433,"children":2434},{"style":130},[2435],{"type":48,"value":2436}," all_views.*\n",{"type":43,"tag":99,"props":2438,"children":2439},{"class":101,"line":30},[2440,2444],{"type":43,"tag":99,"props":2441,"children":2442},{"style":141},[2443],{"type":48,"value":2431},{"type":43,"tag":99,"props":2445,"children":2446},{"style":130},[2447],{"type":48,"value":2448}," -tag:internal\n",{"type":43,"tag":99,"props":2450,"children":2451},{"class":101,"line":218},[2452,2456],{"type":43,"tag":99,"props":2453,"children":2454},{"style":141},[2455],{"type":48,"value":2431},{"type":43,"tag":99,"props":2457,"children":2458},{"style":130},[2459],{"type":48,"value":2460}," -distribution_centers.*\n",{"type":43,"tag":99,"props":2462,"children":2463},{"class":101,"line":256},[2464],{"type":43,"tag":99,"props":2465,"children":2466},{"emptyLinePlaceholder":260},[2467],{"type":48,"value":263},{"type":43,"tag":99,"props":2469,"children":2470},{"class":101,"line":266},[2471],{"type":43,"tag":99,"props":2472,"children":2473},{"style":106},[2474],{"type":48,"value":2475},"# Or explicit list\n",{"type":43,"tag":99,"props":2477,"children":2478},{"class":101,"line":275},[2479,2483],{"type":43,"tag":99,"props":2480,"children":2481},{"style":1177},[2482],{"type":48,"value":548},{"type":43,"tag":99,"props":2484,"children":2485},{"style":141},[2486],{"type":48,"value":1378},{"type":43,"tag":99,"props":2488,"children":2489},{"class":101,"line":1902},[2490,2494],{"type":43,"tag":99,"props":2491,"children":2492},{"style":141},[2493],{"type":48,"value":2431},{"type":43,"tag":99,"props":2495,"children":2496},{"style":130},[2497],{"type":48,"value":2498}," order_items.created_at\n",{"type":43,"tag":99,"props":2500,"children":2501},{"class":101,"line":1911},[2502,2506],{"type":43,"tag":99,"props":2503,"children":2504},{"style":141},[2505],{"type":48,"value":2431},{"type":43,"tag":99,"props":2507,"children":2508},{"style":130},[2509],{"type":48,"value":2510}," order_items.total_revenue\n",{"type":43,"tag":99,"props":2512,"children":2513},{"class":101,"line":1920},[2514,2518],{"type":43,"tag":99,"props":2515,"children":2516},{"style":141},[2517],{"type":48,"value":2431},{"type":43,"tag":99,"props":2519,"children":2520},{"style":130},[2521],{"type":48,"value":2522}," order_items.count\n",{"type":43,"tag":99,"props":2524,"children":2526},{"class":101,"line":2525},11,[2527,2531],{"type":43,"tag":99,"props":2528,"children":2529},{"style":141},[2530],{"type":48,"value":2431},{"type":43,"tag":99,"props":2532,"children":2533},{"style":130},[2534],{"type":48,"value":2535}," users.name\n",{"type":43,"tag":99,"props":2537,"children":2539},{"class":101,"line":2538},12,[2540,2544],{"type":43,"tag":99,"props":2541,"children":2542},{"style":141},[2543],{"type":48,"value":2431},{"type":43,"tag":99,"props":2545,"children":2546},{"style":130},[2547],{"type":48,"value":2548}," users.state\n",{"type":43,"tag":99,"props":2550,"children":2552},{"class":101,"line":2551},13,[2553,2557],{"type":43,"tag":99,"props":2554,"children":2555},{"style":141},[2556],{"type":48,"value":2431},{"type":43,"tag":99,"props":2558,"children":2559},{"style":130},[2560],{"type":48,"value":2561}," products.category\n",{"type":43,"tag":51,"props":2563,"children":2564},{},[2565,2567,2573,2575,2581,2583,2589,2591,2597],{"type":48,"value":2566},"Same operators as topic ",{"type":43,"tag":72,"props":2568,"children":2570},{"className":2569},[],[2571],{"type":48,"value":2572},"fields",{"type":48,"value":2574},": wildcard (",{"type":43,"tag":72,"props":2576,"children":2578},{"className":2577},[],[2579],{"type":48,"value":2580},"*",{"type":48,"value":2582},"), negation (",{"type":43,"tag":72,"props":2584,"children":2586},{"className":2585},[],[2587],{"type":48,"value":2588},"-",{"type":48,"value":2590},"), tags (",{"type":43,"tag":72,"props":2592,"children":2594},{"className":2593},[],[2595],{"type":48,"value":2596},"tag:",{"type":48,"value":2598},").",{"type":43,"tag":51,"props":2600,"children":2601},{},[2602],{"type":48,"value":2603},"Tagging is the most maintainable pattern — tag the fields users actually ask about, then curate with a single selector:",{"type":43,"tag":88,"props":2605,"children":2607},{"className":1165,"code":2606,"language":1167,"meta":93,"style":93},"ai_fields: [tag:use_for_ai]\n",[2608],{"type":43,"tag":72,"props":2609,"children":2610},{"__ignoreMap":93},[2611],{"type":43,"tag":99,"props":2612,"children":2613},{"class":101,"line":102},[2614,2618,2622,2626,2631],{"type":43,"tag":99,"props":2615,"children":2616},{"style":1177},[2617],{"type":48,"value":548},{"type":43,"tag":99,"props":2619,"children":2620},{"style":141},[2621],{"type":48,"value":1184},{"type":43,"tag":99,"props":2623,"children":2624},{"style":141},[2625],{"type":48,"value":1407},{"type":43,"tag":99,"props":2627,"children":2628},{"style":130},[2629],{"type":48,"value":2630},"tag:use_for_ai",{"type":43,"tag":99,"props":2632,"children":2633},{"style":141},[2634],{"type":48,"value":1427},{"type":43,"tag":81,"props":2636,"children":2638},{"id":2637},"controlling-topic-visibility-with-ai_chat_topics",[2639],{"type":48,"value":2640},"Controlling Topic Visibility with ai_chat_topics",{"type":43,"tag":51,"props":2642,"children":2643},{},[2644,2649],{"type":43,"tag":72,"props":2645,"children":2647},{"className":2646},[],[2648],{"type":48,"value":779},{"type":48,"value":2650}," is a model-level property that controls which topics Blobby can see:",{"type":43,"tag":504,"props":2652,"children":2653},{},[2654,2671,2685],{"type":43,"tag":508,"props":2655,"children":2656},{},[2657,2669],{"type":43,"tag":64,"props":2658,"children":2659},{},[2660,2662,2667],{"type":48,"value":2661},"No ",{"type":43,"tag":72,"props":2663,"children":2665},{"className":2664},[],[2666],{"type":48,"value":779},{"type":48,"value":2668}," property",{"type":48,"value":2670}," (default) — Blobby can query across all topics.",{"type":43,"tag":508,"props":2672,"children":2673},{},[2674,2683],{"type":43,"tag":64,"props":2675,"children":2676},{},[2677],{"type":43,"tag":72,"props":2678,"children":2680},{"className":2679},[],[2681],{"type":48,"value":2682},"ai_chat_topics: []",{"type":48,"value":2684}," (empty list) — Blobby cannot query any topics. This effectively disables AI chat for the model.",{"type":43,"tag":508,"props":2686,"children":2687},{},[2688,2693,2695,2701,2703,2709,2711,2717,2718,2724],{"type":43,"tag":64,"props":2689,"children":2690},{},[2691],{"type":48,"value":2692},"Explicit list",{"type":48,"value":2694}," — only the listed topics (or tag matches) are available. Supports ",{"type":43,"tag":72,"props":2696,"children":2698},{"className":2697},[],[2699],{"type":48,"value":2700},"all_topics",{"type":48,"value":2702},", tag selectors (",{"type":43,"tag":72,"props":2704,"children":2706},{"className":2705},[],[2707],{"type":48,"value":2708},"tag:customer_facing",{"type":48,"value":2710},"), and negation (",{"type":43,"tag":72,"props":2712,"children":2714},{"className":2713},[],[2715],{"type":48,"value":2716},"-tag:internal",{"type":48,"value":542},{"type":43,"tag":72,"props":2719,"children":2721},{"className":2720},[],[2722],{"type":48,"value":2723},"-staging_events",{"type":48,"value":2598},{"type":43,"tag":51,"props":2726,"children":2727},{},[2728,2730,2735,2737,2742,2743,2748,2750,2756],{"type":48,"value":2729},"Check this first — if a topic isn't in ",{"type":43,"tag":72,"props":2731,"children":2733},{"className":2732},[],[2734],{"type":48,"value":779},{"type":48,"value":2736},", no amount of ",{"type":43,"tag":72,"props":2738,"children":2740},{"className":2739},[],[2741],{"type":48,"value":540},{"type":48,"value":310},{"type":43,"tag":72,"props":2744,"children":2746},{"className":2745},[],[2747],{"type":48,"value":548},{"type":48,"value":2749}," on it will matter. Use ",{"type":43,"tag":72,"props":2751,"children":2753},{"className":2752},[],[2754],{"type":48,"value":2755},"omni-model-builder",{"type":48,"value":2757}," to modify this property.",{"type":43,"tag":81,"props":2759,"children":2761},{"id":2760},"adding-sample_queries",[2762],{"type":48,"value":2763},"Adding sample_queries",{"type":43,"tag":51,"props":2765,"children":2766},{},[2767],{"type":48,"value":2768},"Teach Blobby by example. Especially effective for recurring questions and for date-filter patterns Blobby tends to get wrong.",{"type":43,"tag":51,"props":2770,"children":2771},{},[2772,2774,2779,2781,2786,2788,2793,2794,2799],{"type":48,"value":2773},"The supported authoring path is through the workbook: build a query that returns the correct answer, then ",{"type":43,"tag":64,"props":2775,"children":2776},{},[2777],{"type":48,"value":2778},"Model > Save as sample query to topic",{"type":48,"value":2780},". Check ",{"type":43,"tag":64,"props":2782,"children":2783},{},[2784],{"type":48,"value":2785},"Include in AI context",{"type":48,"value":2787}," (otherwise it only shows on the topic overview and never reaches the AI), and fill in the optional ",{"type":43,"tag":64,"props":2789,"children":2790},{},[2791],{"type":48,"value":2792},"Prompt",{"type":48,"value":715},{"type":43,"tag":64,"props":2795,"children":2796},{},[2797],{"type":48,"value":2798},"AI context",{"type":48,"value":2800}," fields.",{"type":43,"tag":51,"props":2802,"children":2803},{},[2804],{"type":48,"value":2805},"To write one directly in YAML instead — build the correct query in a workbook, retrieve its structure, then add it to the topic:",{"type":43,"tag":88,"props":2807,"children":2809},{"className":1165,"code":2808,"language":1167,"meta":93,"style":93},"sample_queries:\n  revenue_by_month:\n    prompt: \"What month has the highest revenue?\"\n    ai_context: \"Use total_revenue grouped by month, sorted descending, limit 1\"\n    query:\n      base_view: order_items\n      fields:\n        - order_items.created_at[month]\n        - order_items.total_revenue\n      topic: order_transactions\n      limit: 1\n      sorts:\n        - field: order_items.total_revenue\n          desc: true\n",[2810],{"type":43,"tag":72,"props":2811,"children":2812},{"__ignoreMap":93},[2813,2824,2836,2861,2886,2898,2915,2927,2940,2951,2968,2986,2998,3018],{"type":43,"tag":99,"props":2814,"children":2815},{"class":101,"line":102},[2816,2820],{"type":43,"tag":99,"props":2817,"children":2818},{"style":1177},[2819],{"type":48,"value":555},{"type":43,"tag":99,"props":2821,"children":2822},{"style":141},[2823],{"type":48,"value":1378},{"type":43,"tag":99,"props":2825,"children":2826},{"class":101,"line":112},[2827,2832],{"type":43,"tag":99,"props":2828,"children":2829},{"style":1177},[2830],{"type":48,"value":2831},"  revenue_by_month",{"type":43,"tag":99,"props":2833,"children":2834},{"style":141},[2835],{"type":48,"value":1378},{"type":43,"tag":99,"props":2837,"children":2838},{"class":101,"line":30},[2839,2844,2848,2852,2857],{"type":43,"tag":99,"props":2840,"children":2841},{"style":1177},[2842],{"type":48,"value":2843},"    prompt",{"type":43,"tag":99,"props":2845,"children":2846},{"style":141},[2847],{"type":48,"value":1184},{"type":43,"tag":99,"props":2849,"children":2850},{"style":141},[2851],{"type":48,"value":164},{"type":43,"tag":99,"props":2853,"children":2854},{"style":130},[2855],{"type":48,"value":2856},"What month has the highest revenue?",{"type":43,"tag":99,"props":2858,"children":2859},{"style":141},[2860],{"type":48,"value":174},{"type":43,"tag":99,"props":2862,"children":2863},{"class":101,"line":218},[2864,2869,2873,2877,2882],{"type":43,"tag":99,"props":2865,"children":2866},{"style":1177},[2867],{"type":48,"value":2868},"    ai_context",{"type":43,"tag":99,"props":2870,"children":2871},{"style":141},[2872],{"type":48,"value":1184},{"type":43,"tag":99,"props":2874,"children":2875},{"style":141},[2876],{"type":48,"value":164},{"type":43,"tag":99,"props":2878,"children":2879},{"style":130},[2880],{"type":48,"value":2881},"Use total_revenue grouped by month, sorted descending, limit 1",{"type":43,"tag":99,"props":2883,"children":2884},{"style":141},[2885],{"type":48,"value":174},{"type":43,"tag":99,"props":2887,"children":2888},{"class":101,"line":256},[2889,2894],{"type":43,"tag":99,"props":2890,"children":2891},{"style":1177},[2892],{"type":48,"value":2893},"    query",{"type":43,"tag":99,"props":2895,"children":2896},{"style":141},[2897],{"type":48,"value":1378},{"type":43,"tag":99,"props":2899,"children":2900},{"class":101,"line":266},[2901,2906,2910],{"type":43,"tag":99,"props":2902,"children":2903},{"style":1177},[2904],{"type":48,"value":2905},"      base_view",{"type":43,"tag":99,"props":2907,"children":2908},{"style":141},[2909],{"type":48,"value":1184},{"type":43,"tag":99,"props":2911,"children":2912},{"style":130},[2913],{"type":48,"value":2914}," order_items\n",{"type":43,"tag":99,"props":2916,"children":2917},{"class":101,"line":275},[2918,2923],{"type":43,"tag":99,"props":2919,"children":2920},{"style":1177},[2921],{"type":48,"value":2922},"      fields",{"type":43,"tag":99,"props":2924,"children":2925},{"style":141},[2926],{"type":48,"value":1378},{"type":43,"tag":99,"props":2928,"children":2929},{"class":101,"line":1902},[2930,2935],{"type":43,"tag":99,"props":2931,"children":2932},{"style":141},[2933],{"type":48,"value":2934},"        -",{"type":43,"tag":99,"props":2936,"children":2937},{"style":130},[2938],{"type":48,"value":2939}," order_items.created_at[month]\n",{"type":43,"tag":99,"props":2941,"children":2942},{"class":101,"line":1911},[2943,2947],{"type":43,"tag":99,"props":2944,"children":2945},{"style":141},[2946],{"type":48,"value":2934},{"type":43,"tag":99,"props":2948,"children":2949},{"style":130},[2950],{"type":48,"value":2510},{"type":43,"tag":99,"props":2952,"children":2953},{"class":101,"line":1920},[2954,2959,2963],{"type":43,"tag":99,"props":2955,"children":2956},{"style":1177},[2957],{"type":48,"value":2958},"      topic",{"type":43,"tag":99,"props":2960,"children":2961},{"style":141},[2962],{"type":48,"value":1184},{"type":43,"tag":99,"props":2964,"children":2965},{"style":130},[2966],{"type":48,"value":2967}," order_transactions\n",{"type":43,"tag":99,"props":2969,"children":2970},{"class":101,"line":2525},[2971,2976,2980],{"type":43,"tag":99,"props":2972,"children":2973},{"style":1177},[2974],{"type":48,"value":2975},"      limit",{"type":43,"tag":99,"props":2977,"children":2978},{"style":141},[2979],{"type":48,"value":1184},{"type":43,"tag":99,"props":2981,"children":2983},{"style":2982},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2984],{"type":48,"value":2985}," 1\n",{"type":43,"tag":99,"props":2987,"children":2988},{"class":101,"line":2538},[2989,2994],{"type":43,"tag":99,"props":2990,"children":2991},{"style":1177},[2992],{"type":48,"value":2993},"      sorts",{"type":43,"tag":99,"props":2995,"children":2996},{"style":141},[2997],{"type":48,"value":1378},{"type":43,"tag":99,"props":2999,"children":3000},{"class":101,"line":2551},[3001,3005,3010,3014],{"type":43,"tag":99,"props":3002,"children":3003},{"style":141},[3004],{"type":48,"value":2934},{"type":43,"tag":99,"props":3006,"children":3007},{"style":1177},[3008],{"type":48,"value":3009}," field",{"type":43,"tag":99,"props":3011,"children":3012},{"style":141},[3013],{"type":48,"value":1184},{"type":43,"tag":99,"props":3015,"children":3016},{"style":130},[3017],{"type":48,"value":2510},{"type":43,"tag":99,"props":3019,"children":3021},{"class":101,"line":3020},14,[3022,3027,3031],{"type":43,"tag":99,"props":3023,"children":3024},{"style":1177},[3025],{"type":48,"value":3026},"          desc",{"type":43,"tag":99,"props":3028,"children":3029},{"style":141},[3030],{"type":48,"value":1184},{"type":43,"tag":99,"props":3032,"children":3034},{"style":3033},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[3035],{"type":48,"value":3036}," true\n",{"type":43,"tag":57,"props":3038,"children":3039},{},[3040,3088],{"type":43,"tag":51,"props":3041,"children":3042},{},[3043,3048,3050,3055,3056,3062,3064,3070,3072,3078,3080,3086],{"type":43,"tag":64,"props":3044,"children":3045},{},[3046],{"type":48,"value":3047},"Note",{"type":48,"value":3049},": When exporting queries from Omni's workbook, you'll get JSON with ",{"type":43,"tag":72,"props":3051,"children":3053},{"className":3052},[],[3054],{"type":48,"value":2239},{"type":48,"value":542},{"type":43,"tag":72,"props":3057,"children":3059},{"className":3058},[],[3060],{"type":48,"value":3061},"join_paths_from_topic_name",{"type":48,"value":3063},", and ",{"type":43,"tag":72,"props":3065,"children":3067},{"className":3066},[],[3068],{"type":48,"value":3069},"sorts",{"type":48,"value":3071}," using ",{"type":43,"tag":72,"props":3073,"children":3075},{"className":3074},[],[3076],{"type":48,"value":3077},"column_name",{"type":48,"value":3079},"\u002F",{"type":43,"tag":72,"props":3081,"children":3083},{"className":3082},[],[3084],{"type":48,"value":3085},"sort_descending",{"type":48,"value":3087},". Map these to YAML as follows:",{"type":43,"tag":504,"props":3089,"children":3090},{},[3091,3105,3120,3148],{"type":43,"tag":508,"props":3092,"children":3093},{},[3094,3099,3100],{"type":43,"tag":72,"props":3095,"children":3097},{"className":3096},[],[3098],{"type":48,"value":2239},{"type":48,"value":817},{"type":43,"tag":72,"props":3101,"children":3103},{"className":3102},[],[3104],{"type":48,"value":721},{"type":43,"tag":508,"props":3106,"children":3107},{},[3108,3113,3114],{"type":43,"tag":72,"props":3109,"children":3111},{"className":3110},[],[3112],{"type":48,"value":3061},{"type":48,"value":817},{"type":43,"tag":72,"props":3115,"children":3117},{"className":3116},[],[3118],{"type":48,"value":3119},"topic",{"type":43,"tag":508,"props":3121,"children":3122},{},[3123,3128,3129,3135,3136,3141,3142],{"type":43,"tag":72,"props":3124,"children":3126},{"className":3125},[],[3127],{"type":48,"value":3077},{"type":48,"value":817},{"type":43,"tag":72,"props":3130,"children":3132},{"className":3131},[],[3133],{"type":48,"value":3134},"field",{"type":48,"value":542},{"type":43,"tag":72,"props":3137,"children":3139},{"className":3138},[],[3140],{"type":48,"value":3085},{"type":48,"value":817},{"type":43,"tag":72,"props":3143,"children":3145},{"className":3144},[],[3146],{"type":48,"value":3147},"desc",{"type":43,"tag":508,"props":3149,"children":3150},{},[3151,3153,3159,3160,3166,3167,3173,3174,3180,3182,3189],{"type":48,"value":3152},"Workbook JSON includes ",{"type":43,"tag":72,"props":3154,"children":3156},{"className":3155},[],[3157],{"type":48,"value":3158},"filters",{"type":48,"value":542},{"type":43,"tag":72,"props":3161,"children":3163},{"className":3162},[],[3164],{"type":48,"value":3165},"pivots",{"type":48,"value":542},{"type":43,"tag":72,"props":3168,"children":3170},{"className":3169},[],[3171],{"type":48,"value":3172},"limit",{"type":48,"value":542},{"type":43,"tag":72,"props":3175,"children":3177},{"className":3176},[],[3178],{"type":48,"value":3179},"column_limit",{"type":48,"value":3181}," which you can include in YAML (though filter syntax requires consulting the ",{"type":43,"tag":1007,"props":3183,"children":3186},{"href":3184,"rel":3185},"https:\u002F\u002Fdocs.omni.co\u002Fapi\u002Fmodels.md",[1011],[3187],{"type":48,"value":3188},"Model YAML API docs",{"type":48,"value":3190}," directly)",{"type":43,"tag":51,"props":3192,"children":3193},{},[3194],{"type":48,"value":3195},"Focus on questions users actually ask — if you don't know which those are, ask the user rather than guessing at plausible-sounding ones.",{"type":43,"tag":81,"props":3197,"children":3199},{"id":3198},"ai-specific-topic-extensions",[3200],{"type":48,"value":3201},"AI-Specific Topic Extensions",{"type":43,"tag":51,"props":3203,"children":3204},{},[3205,3207,3213],{"type":48,"value":3206},"Create a curated topic variant for Blobby using ",{"type":43,"tag":72,"props":3208,"children":3210},{"className":3209},[],[3211],{"type":48,"value":3212},"extends",{"type":48,"value":1184},{"type":43,"tag":88,"props":3215,"children":3217},{"className":1165,"code":3216,"language":1167,"meta":93,"style":93},"# ai_order_transactions.topic\nextends: [order_items]\nlabel: AI - Order Transactions\n\nfields:\n  - order_items.created_at\n  - order_items.status\n  - order_items.total_revenue\n  - order_items.count\n  - users.name\n  - users.state\n  - products.category\n\nai_context: |\n  Curated view of order data for AI analysis.\n  [detailed context here]\n",[3218],{"type":43,"tag":72,"props":3219,"children":3220},{"__ignoreMap":93},[3221,3229,3253,3269,3276,3287,3298,3310,3321,3332,3343,3354,3365,3372,3387,3396],{"type":43,"tag":99,"props":3222,"children":3223},{"class":101,"line":102},[3224],{"type":43,"tag":99,"props":3225,"children":3226},{"style":106},[3227],{"type":48,"value":3228},"# ai_order_transactions.topic\n",{"type":43,"tag":99,"props":3230,"children":3231},{"class":101,"line":112},[3232,3236,3240,3244,3249],{"type":43,"tag":99,"props":3233,"children":3234},{"style":1177},[3235],{"type":48,"value":3212},{"type":43,"tag":99,"props":3237,"children":3238},{"style":141},[3239],{"type":48,"value":1184},{"type":43,"tag":99,"props":3241,"children":3242},{"style":141},[3243],{"type":48,"value":1407},{"type":43,"tag":99,"props":3245,"children":3246},{"style":130},[3247],{"type":48,"value":3248},"order_items",{"type":43,"tag":99,"props":3250,"children":3251},{"style":141},[3252],{"type":48,"value":1427},{"type":43,"tag":99,"props":3254,"children":3255},{"class":101,"line":30},[3256,3260,3264],{"type":43,"tag":99,"props":3257,"children":3258},{"style":1177},[3259],{"type":48,"value":850},{"type":43,"tag":99,"props":3261,"children":3262},{"style":141},[3263],{"type":48,"value":1184},{"type":43,"tag":99,"props":3265,"children":3266},{"style":130},[3267],{"type":48,"value":3268}," AI - Order Transactions\n",{"type":43,"tag":99,"props":3270,"children":3271},{"class":101,"line":218},[3272],{"type":43,"tag":99,"props":3273,"children":3274},{"emptyLinePlaceholder":260},[3275],{"type":48,"value":263},{"type":43,"tag":99,"props":3277,"children":3278},{"class":101,"line":256},[3279,3283],{"type":43,"tag":99,"props":3280,"children":3281},{"style":1177},[3282],{"type":48,"value":2572},{"type":43,"tag":99,"props":3284,"children":3285},{"style":141},[3286],{"type":48,"value":1378},{"type":43,"tag":99,"props":3288,"children":3289},{"class":101,"line":266},[3290,3294],{"type":43,"tag":99,"props":3291,"children":3292},{"style":141},[3293],{"type":48,"value":2431},{"type":43,"tag":99,"props":3295,"children":3296},{"style":130},[3297],{"type":48,"value":2498},{"type":43,"tag":99,"props":3299,"children":3300},{"class":101,"line":275},[3301,3305],{"type":43,"tag":99,"props":3302,"children":3303},{"style":141},[3304],{"type":48,"value":2431},{"type":43,"tag":99,"props":3306,"children":3307},{"style":130},[3308],{"type":48,"value":3309}," order_items.status\n",{"type":43,"tag":99,"props":3311,"children":3312},{"class":101,"line":1902},[3313,3317],{"type":43,"tag":99,"props":3314,"children":3315},{"style":141},[3316],{"type":48,"value":2431},{"type":43,"tag":99,"props":3318,"children":3319},{"style":130},[3320],{"type":48,"value":2510},{"type":43,"tag":99,"props":3322,"children":3323},{"class":101,"line":1911},[3324,3328],{"type":43,"tag":99,"props":3325,"children":3326},{"style":141},[3327],{"type":48,"value":2431},{"type":43,"tag":99,"props":3329,"children":3330},{"style":130},[3331],{"type":48,"value":2522},{"type":43,"tag":99,"props":3333,"children":3334},{"class":101,"line":1920},[3335,3339],{"type":43,"tag":99,"props":3336,"children":3337},{"style":141},[3338],{"type":48,"value":2431},{"type":43,"tag":99,"props":3340,"children":3341},{"style":130},[3342],{"type":48,"value":2535},{"type":43,"tag":99,"props":3344,"children":3345},{"class":101,"line":2525},[3346,3350],{"type":43,"tag":99,"props":3347,"children":3348},{"style":141},[3349],{"type":48,"value":2431},{"type":43,"tag":99,"props":3351,"children":3352},{"style":130},[3353],{"type":48,"value":2548},{"type":43,"tag":99,"props":3355,"children":3356},{"class":101,"line":2538},[3357,3361],{"type":43,"tag":99,"props":3358,"children":3359},{"style":141},[3360],{"type":48,"value":2431},{"type":43,"tag":99,"props":3362,"children":3363},{"style":130},[3364],{"type":48,"value":2561},{"type":43,"tag":99,"props":3366,"children":3367},{"class":101,"line":2551},[3368],{"type":43,"tag":99,"props":3369,"children":3370},{"emptyLinePlaceholder":260},[3371],{"type":48,"value":263},{"type":43,"tag":99,"props":3373,"children":3374},{"class":101,"line":3020},[3375,3379,3383],{"type":43,"tag":99,"props":3376,"children":3377},{"style":1177},[3378],{"type":48,"value":540},{"type":43,"tag":99,"props":3380,"children":3381},{"style":141},[3382],{"type":48,"value":1184},{"type":43,"tag":99,"props":3384,"children":3385},{"style":1187},[3386],{"type":48,"value":1190},{"type":43,"tag":99,"props":3388,"children":3390},{"class":101,"line":3389},15,[3391],{"type":43,"tag":99,"props":3392,"children":3393},{"style":130},[3394],{"type":48,"value":3395},"  Curated view of order data for AI analysis.\n",{"type":43,"tag":99,"props":3397,"children":3399},{"class":101,"line":3398},16,[3400],{"type":43,"tag":99,"props":3401,"children":3402},{"style":130},[3403],{"type":48,"value":3404},"  [detailed context here]\n",{"type":43,"tag":51,"props":3406,"children":3407},{},[3408,3410,3415,3416,3421],{"type":48,"value":3409},"The extended topic inherits the base topic's joins and filters, so add only what differs: a narrower field set, extra ",{"type":43,"tag":72,"props":3411,"children":3413},{"className":3412},[],[3414],{"type":48,"value":540},{"type":48,"value":580},{"type":43,"tag":72,"props":3417,"children":3419},{"className":3418},[],[3420],{"type":48,"value":555},{"type":48,"value":3422}," (same shape as above).",{"type":43,"tag":81,"props":3424,"children":3426},{"id":3425},"improving-field-descriptions",[3427],{"type":48,"value":3428},"Improving Field Descriptions",{"type":43,"tag":51,"props":3430,"children":3431},{},[3432,3434,3439,3441,3446],{"type":48,"value":3433},"Keep the value list in ",{"type":43,"tag":72,"props":3435,"children":3437},{"className":3436},[],[3438],{"type":48,"value":815},{"type":48,"value":3440}," and the AI-only rule in ",{"type":43,"tag":72,"props":3442,"children":3444},{"className":3443},[],[3445],{"type":48,"value":540},{"type":48,"value":3447}," — a description that restates either is paying twice for one fact:",{"type":43,"tag":88,"props":3449,"children":3451},{"className":1165,"code":3450,"language":1167,"meta":93,"style":93},"dimensions:\n  status:\n    label: Order Status\n    description: Current fulfillment status of the order.\n    all_values: [complete, pending, cancelled, returned]\n    ai_context: Use 'complete' for revenue calculations.\n",[3452],{"type":43,"tag":72,"props":3453,"children":3454},{"__ignoreMap":93},[3455,3467,3479,3496,3513,3565],{"type":43,"tag":99,"props":3456,"children":3457},{"class":101,"line":102},[3458,3463],{"type":43,"tag":99,"props":3459,"children":3460},{"style":1177},[3461],{"type":48,"value":3462},"dimensions",{"type":43,"tag":99,"props":3464,"children":3465},{"style":141},[3466],{"type":48,"value":1378},{"type":43,"tag":99,"props":3468,"children":3469},{"class":101,"line":112},[3470,3475],{"type":43,"tag":99,"props":3471,"children":3472},{"style":1177},[3473],{"type":48,"value":3474},"  status",{"type":43,"tag":99,"props":3476,"children":3477},{"style":141},[3478],{"type":48,"value":1378},{"type":43,"tag":99,"props":3480,"children":3481},{"class":101,"line":30},[3482,3487,3491],{"type":43,"tag":99,"props":3483,"children":3484},{"style":1177},[3485],{"type":48,"value":3486},"    label",{"type":43,"tag":99,"props":3488,"children":3489},{"style":141},[3490],{"type":48,"value":1184},{"type":43,"tag":99,"props":3492,"children":3493},{"style":130},[3494],{"type":48,"value":3495}," Order Status\n",{"type":43,"tag":99,"props":3497,"children":3498},{"class":101,"line":218},[3499,3504,3508],{"type":43,"tag":99,"props":3500,"children":3501},{"style":1177},[3502],{"type":48,"value":3503},"    description",{"type":43,"tag":99,"props":3505,"children":3506},{"style":141},[3507],{"type":48,"value":1184},{"type":43,"tag":99,"props":3509,"children":3510},{"style":130},[3511],{"type":48,"value":3512}," Current fulfillment status of the order.\n",{"type":43,"tag":99,"props":3514,"children":3515},{"class":101,"line":256},[3516,3521,3525,3529,3534,3538,3543,3547,3552,3556,3561],{"type":43,"tag":99,"props":3517,"children":3518},{"style":1177},[3519],{"type":48,"value":3520},"    all_values",{"type":43,"tag":99,"props":3522,"children":3523},{"style":141},[3524],{"type":48,"value":1184},{"type":43,"tag":99,"props":3526,"children":3527},{"style":141},[3528],{"type":48,"value":1407},{"type":43,"tag":99,"props":3530,"children":3531},{"style":130},[3532],{"type":48,"value":3533},"complete",{"type":43,"tag":99,"props":3535,"children":3536},{"style":141},[3537],{"type":48,"value":1417},{"type":43,"tag":99,"props":3539,"children":3540},{"style":130},[3541],{"type":48,"value":3542}," pending",{"type":43,"tag":99,"props":3544,"children":3545},{"style":141},[3546],{"type":48,"value":1417},{"type":43,"tag":99,"props":3548,"children":3549},{"style":130},[3550],{"type":48,"value":3551}," cancelled",{"type":43,"tag":99,"props":3553,"children":3554},{"style":141},[3555],{"type":48,"value":1417},{"type":43,"tag":99,"props":3557,"children":3558},{"style":130},[3559],{"type":48,"value":3560}," returned",{"type":43,"tag":99,"props":3562,"children":3563},{"style":141},[3564],{"type":48,"value":1427},{"type":43,"tag":99,"props":3566,"children":3567},{"class":101,"line":266},[3568,3572,3576],{"type":43,"tag":99,"props":3569,"children":3570},{"style":1177},[3571],{"type":48,"value":2868},{"type":43,"tag":99,"props":3573,"children":3574},{"style":141},[3575],{"type":48,"value":1184},{"type":43,"tag":99,"props":3577,"children":3578},{"style":130},[3579],{"type":48,"value":3580}," Use 'complete' for revenue calculations.\n",{"type":43,"tag":651,"props":3582,"children":3584},{"id":3583},"enumerating-values-for-categorical-fields",[3585],{"type":48,"value":3586},"Enumerating Values for Categorical Fields",{"type":43,"tag":51,"props":3588,"children":3589},{},[3590,3592,3597],{"type":48,"value":3591},"For closed-set enums, use ",{"type":43,"tag":72,"props":3593,"children":3595},{"className":3594},[],[3596],{"type":48,"value":815},{"type":48,"value":3598}," so Blobby knows every valid filter value:",{"type":43,"tag":88,"props":3600,"children":3602},{"className":1165,"code":3601,"language":1167,"meta":93,"style":93},"dimensions:\n  status:\n    all_values: [complete, pending, cancelled, returned]\n  payment_method:\n    all_values: [credit_card, debit_card, bank_transfer, paypal, gift_card]\n",[3603],{"type":43,"tag":72,"props":3604,"children":3605},{"__ignoreMap":93},[3606,3617,3628,3675,3687],{"type":43,"tag":99,"props":3607,"children":3608},{"class":101,"line":102},[3609,3613],{"type":43,"tag":99,"props":3610,"children":3611},{"style":1177},[3612],{"type":48,"value":3462},{"type":43,"tag":99,"props":3614,"children":3615},{"style":141},[3616],{"type":48,"value":1378},{"type":43,"tag":99,"props":3618,"children":3619},{"class":101,"line":112},[3620,3624],{"type":43,"tag":99,"props":3621,"children":3622},{"style":1177},[3623],{"type":48,"value":3474},{"type":43,"tag":99,"props":3625,"children":3626},{"style":141},[3627],{"type":48,"value":1378},{"type":43,"tag":99,"props":3629,"children":3630},{"class":101,"line":30},[3631,3635,3639,3643,3647,3651,3655,3659,3663,3667,3671],{"type":43,"tag":99,"props":3632,"children":3633},{"style":1177},[3634],{"type":48,"value":3520},{"type":43,"tag":99,"props":3636,"children":3637},{"style":141},[3638],{"type":48,"value":1184},{"type":43,"tag":99,"props":3640,"children":3641},{"style":141},[3642],{"type":48,"value":1407},{"type":43,"tag":99,"props":3644,"children":3645},{"style":130},[3646],{"type":48,"value":3533},{"type":43,"tag":99,"props":3648,"children":3649},{"style":141},[3650],{"type":48,"value":1417},{"type":43,"tag":99,"props":3652,"children":3653},{"style":130},[3654],{"type":48,"value":3542},{"type":43,"tag":99,"props":3656,"children":3657},{"style":141},[3658],{"type":48,"value":1417},{"type":43,"tag":99,"props":3660,"children":3661},{"style":130},[3662],{"type":48,"value":3551},{"type":43,"tag":99,"props":3664,"children":3665},{"style":141},[3666],{"type":48,"value":1417},{"type":43,"tag":99,"props":3668,"children":3669},{"style":130},[3670],{"type":48,"value":3560},{"type":43,"tag":99,"props":3672,"children":3673},{"style":141},[3674],{"type":48,"value":1427},{"type":43,"tag":99,"props":3676,"children":3677},{"class":101,"line":218},[3678,3683],{"type":43,"tag":99,"props":3679,"children":3680},{"style":1177},[3681],{"type":48,"value":3682},"  payment_method",{"type":43,"tag":99,"props":3684,"children":3685},{"style":141},[3686],{"type":48,"value":1378},{"type":43,"tag":99,"props":3688,"children":3689},{"class":101,"line":256},[3690,3694,3698,3702,3707,3711,3716,3720,3725,3729,3734,3738,3743],{"type":43,"tag":99,"props":3691,"children":3692},{"style":1177},[3693],{"type":48,"value":3520},{"type":43,"tag":99,"props":3695,"children":3696},{"style":141},[3697],{"type":48,"value":1184},{"type":43,"tag":99,"props":3699,"children":3700},{"style":141},[3701],{"type":48,"value":1407},{"type":43,"tag":99,"props":3703,"children":3704},{"style":130},[3705],{"type":48,"value":3706},"credit_card",{"type":43,"tag":99,"props":3708,"children":3709},{"style":141},[3710],{"type":48,"value":1417},{"type":43,"tag":99,"props":3712,"children":3713},{"style":130},[3714],{"type":48,"value":3715}," debit_card",{"type":43,"tag":99,"props":3717,"children":3718},{"style":141},[3719],{"type":48,"value":1417},{"type":43,"tag":99,"props":3721,"children":3722},{"style":130},[3723],{"type":48,"value":3724}," bank_transfer",{"type":43,"tag":99,"props":3726,"children":3727},{"style":141},[3728],{"type":48,"value":1417},{"type":43,"tag":99,"props":3730,"children":3731},{"style":130},[3732],{"type":48,"value":3733}," paypal",{"type":43,"tag":99,"props":3735,"children":3736},{"style":141},[3737],{"type":48,"value":1417},{"type":43,"tag":99,"props":3739,"children":3740},{"style":130},[3741],{"type":48,"value":3742}," gift_card",{"type":43,"tag":99,"props":3744,"children":3745},{"style":141},[3746],{"type":48,"value":1427},{"type":43,"tag":51,"props":3748,"children":3749},{},[3750,3752,3757],{"type":48,"value":3751},"For open-ended categoricals where a full list isn't practical, use ",{"type":43,"tag":72,"props":3753,"children":3755},{"className":3754},[],[3756],{"type":48,"value":830},{"type":48,"value":3758}," to give representative examples:",{"type":43,"tag":88,"props":3760,"children":3762},{"className":1165,"code":3761,"language":1167,"meta":93,"style":93},"dimensions:\n  product_category:\n    sample_values: [Electronics, Clothing, Home & Garden, Sports, Books]\n  city:\n    sample_values: [New York, Los Angeles, Chicago, Houston, Phoenix]\n",[3763],{"type":43,"tag":72,"props":3764,"children":3765},{"__ignoreMap":93},[3766,3777,3789,3850,3862],{"type":43,"tag":99,"props":3767,"children":3768},{"class":101,"line":102},[3769,3773],{"type":43,"tag":99,"props":3770,"children":3771},{"style":1177},[3772],{"type":48,"value":3462},{"type":43,"tag":99,"props":3774,"children":3775},{"style":141},[3776],{"type":48,"value":1378},{"type":43,"tag":99,"props":3778,"children":3779},{"class":101,"line":112},[3780,3785],{"type":43,"tag":99,"props":3781,"children":3782},{"style":1177},[3783],{"type":48,"value":3784},"  product_category",{"type":43,"tag":99,"props":3786,"children":3787},{"style":141},[3788],{"type":48,"value":1378},{"type":43,"tag":99,"props":3790,"children":3791},{"class":101,"line":30},[3792,3797,3801,3805,3810,3814,3819,3823,3828,3832,3837,3841,3846],{"type":43,"tag":99,"props":3793,"children":3794},{"style":1177},[3795],{"type":48,"value":3796},"    sample_values",{"type":43,"tag":99,"props":3798,"children":3799},{"style":141},[3800],{"type":48,"value":1184},{"type":43,"tag":99,"props":3802,"children":3803},{"style":141},[3804],{"type":48,"value":1407},{"type":43,"tag":99,"props":3806,"children":3807},{"style":130},[3808],{"type":48,"value":3809},"Electronics",{"type":43,"tag":99,"props":3811,"children":3812},{"style":141},[3813],{"type":48,"value":1417},{"type":43,"tag":99,"props":3815,"children":3816},{"style":130},[3817],{"type":48,"value":3818}," Clothing",{"type":43,"tag":99,"props":3820,"children":3821},{"style":141},[3822],{"type":48,"value":1417},{"type":43,"tag":99,"props":3824,"children":3825},{"style":130},[3826],{"type":48,"value":3827}," Home & Garden",{"type":43,"tag":99,"props":3829,"children":3830},{"style":141},[3831],{"type":48,"value":1417},{"type":43,"tag":99,"props":3833,"children":3834},{"style":130},[3835],{"type":48,"value":3836}," Sports",{"type":43,"tag":99,"props":3838,"children":3839},{"style":141},[3840],{"type":48,"value":1417},{"type":43,"tag":99,"props":3842,"children":3843},{"style":130},[3844],{"type":48,"value":3845}," Books",{"type":43,"tag":99,"props":3847,"children":3848},{"style":141},[3849],{"type":48,"value":1427},{"type":43,"tag":99,"props":3851,"children":3852},{"class":101,"line":218},[3853,3858],{"type":43,"tag":99,"props":3854,"children":3855},{"style":1177},[3856],{"type":48,"value":3857},"  city",{"type":43,"tag":99,"props":3859,"children":3860},{"style":141},[3861],{"type":48,"value":1378},{"type":43,"tag":99,"props":3863,"children":3864},{"class":101,"line":256},[3865,3869,3873,3877,3882,3886,3891,3895,3900,3904,3909,3913,3918],{"type":43,"tag":99,"props":3866,"children":3867},{"style":1177},[3868],{"type":48,"value":3796},{"type":43,"tag":99,"props":3870,"children":3871},{"style":141},[3872],{"type":48,"value":1184},{"type":43,"tag":99,"props":3874,"children":3875},{"style":141},[3876],{"type":48,"value":1407},{"type":43,"tag":99,"props":3878,"children":3879},{"style":130},[3880],{"type":48,"value":3881},"New York",{"type":43,"tag":99,"props":3883,"children":3884},{"style":141},[3885],{"type":48,"value":1417},{"type":43,"tag":99,"props":3887,"children":3888},{"style":130},[3889],{"type":48,"value":3890}," Los Angeles",{"type":43,"tag":99,"props":3892,"children":3893},{"style":141},[3894],{"type":48,"value":1417},{"type":43,"tag":99,"props":3896,"children":3897},{"style":130},[3898],{"type":48,"value":3899}," Chicago",{"type":43,"tag":99,"props":3901,"children":3902},{"style":141},[3903],{"type":48,"value":1417},{"type":43,"tag":99,"props":3905,"children":3906},{"style":130},[3907],{"type":48,"value":3908}," Houston",{"type":43,"tag":99,"props":3910,"children":3911},{"style":141},[3912],{"type":48,"value":1417},{"type":43,"tag":99,"props":3914,"children":3915},{"style":130},[3916],{"type":48,"value":3917}," Phoenix",{"type":43,"tag":99,"props":3919,"children":3920},{"style":141},[3921],{"type":48,"value":1427},{"type":43,"tag":57,"props":3923,"children":3924},{},[3925],{"type":43,"tag":51,"props":3926,"children":3927},{},[3928,3932,3934,3939,3941,3946],{"type":43,"tag":64,"props":3929,"children":3930},{},[3931],{"type":48,"value":3047},{"type":48,"value":3933},": ",{"type":43,"tag":72,"props":3935,"children":3937},{"className":3936},[],[3938],{"type":48,"value":815},{"type":48,"value":3940}," is pruned first, so don't count on it surviving in a context-tight topic — put anything load-bearing in ",{"type":43,"tag":72,"props":3942,"children":3944},{"className":3943},[],[3945],{"type":48,"value":540},{"type":48,"value":3947}," instead.",{"type":43,"tag":51,"props":3949,"children":3950},{},[3951,3953,3960,3962,3968,3970,3975],{"type":48,"value":3952},"When the ",{"type":43,"tag":1007,"props":3954,"children":3957},{"href":3955,"rel":3956},"https:\u002F\u002Fdocs.omni.co\u002Fintegrations\u002Fdbt\u002Fsetup",[1011],[3958],{"type":48,"value":3959},"dbt integration",{"type":48,"value":3961}," is enabled, dbt ",{"type":43,"tag":72,"props":3963,"children":3965},{"className":3964},[],[3966],{"type":48,"value":3967},"accepted_values",{"type":48,"value":3969}," tests are ingested as ",{"type":43,"tag":72,"props":3971,"children":3973},{"className":3972},[],[3974],{"type":48,"value":815},{"type":48,"value":3976}," automatically — check before hand-authoring them.",{"type":43,"tag":81,"props":3978,"children":3980},{"id":3979},"adding-synonyms",[3981],{"type":48,"value":3982},"Adding synonyms",{"type":43,"tag":51,"props":3984,"children":3985},{},[3986],{"type":48,"value":3987},"Map alternative names, abbreviations, and domain-specific terminology so Blobby matches user queries to the correct field. Works on both dimensions and measures.",{"type":43,"tag":88,"props":3989,"children":3991},{"className":1165,"code":3990,"language":1167,"meta":93,"style":93},"dimensions:\n  customer_name:\n    synonyms: [client, account, buyer, purchaser]\n  order_date:\n    synonyms: [purchase date, transaction date, order timestamp]\n\nmeasures:\n  total_revenue:\n    synonyms: [sales, income, earnings, gross revenue, top line]\n  average_order_value:\n    synonyms: [AOV, avg order, basket size]\n",[3992],{"type":43,"tag":72,"props":3993,"children":3994},{"__ignoreMap":93},[3995,4006,4018,4069,4081,4123,4130,4141,4152,4212,4224],{"type":43,"tag":99,"props":3996,"children":3997},{"class":101,"line":102},[3998,4002],{"type":43,"tag":99,"props":3999,"children":4000},{"style":1177},[4001],{"type":48,"value":3462},{"type":43,"tag":99,"props":4003,"children":4004},{"style":141},[4005],{"type":48,"value":1378},{"type":43,"tag":99,"props":4007,"children":4008},{"class":101,"line":112},[4009,4014],{"type":43,"tag":99,"props":4010,"children":4011},{"style":1177},[4012],{"type":48,"value":4013},"  customer_name",{"type":43,"tag":99,"props":4015,"children":4016},{"style":141},[4017],{"type":48,"value":1378},{"type":43,"tag":99,"props":4019,"children":4020},{"class":101,"line":30},[4021,4025,4029,4033,4038,4042,4047,4051,4056,4060,4065],{"type":43,"tag":99,"props":4022,"children":4023},{"style":1177},[4024],{"type":48,"value":1398},{"type":43,"tag":99,"props":4026,"children":4027},{"style":141},[4028],{"type":48,"value":1184},{"type":43,"tag":99,"props":4030,"children":4031},{"style":141},[4032],{"type":48,"value":1407},{"type":43,"tag":99,"props":4034,"children":4035},{"style":130},[4036],{"type":48,"value":4037},"client",{"type":43,"tag":99,"props":4039,"children":4040},{"style":141},[4041],{"type":48,"value":1417},{"type":43,"tag":99,"props":4043,"children":4044},{"style":130},[4045],{"type":48,"value":4046}," account",{"type":43,"tag":99,"props":4048,"children":4049},{"style":141},[4050],{"type":48,"value":1417},{"type":43,"tag":99,"props":4052,"children":4053},{"style":130},[4054],{"type":48,"value":4055}," buyer",{"type":43,"tag":99,"props":4057,"children":4058},{"style":141},[4059],{"type":48,"value":1417},{"type":43,"tag":99,"props":4061,"children":4062},{"style":130},[4063],{"type":48,"value":4064}," purchaser",{"type":43,"tag":99,"props":4066,"children":4067},{"style":141},[4068],{"type":48,"value":1427},{"type":43,"tag":99,"props":4070,"children":4071},{"class":101,"line":218},[4072,4077],{"type":43,"tag":99,"props":4073,"children":4074},{"style":1177},[4075],{"type":48,"value":4076},"  order_date",{"type":43,"tag":99,"props":4078,"children":4079},{"style":141},[4080],{"type":48,"value":1378},{"type":43,"tag":99,"props":4082,"children":4083},{"class":101,"line":256},[4084,4088,4092,4096,4101,4105,4110,4114,4119],{"type":43,"tag":99,"props":4085,"children":4086},{"style":1177},[4087],{"type":48,"value":1398},{"type":43,"tag":99,"props":4089,"children":4090},{"style":141},[4091],{"type":48,"value":1184},{"type":43,"tag":99,"props":4093,"children":4094},{"style":141},[4095],{"type":48,"value":1407},{"type":43,"tag":99,"props":4097,"children":4098},{"style":130},[4099],{"type":48,"value":4100},"purchase date",{"type":43,"tag":99,"props":4102,"children":4103},{"style":141},[4104],{"type":48,"value":1417},{"type":43,"tag":99,"props":4106,"children":4107},{"style":130},[4108],{"type":48,"value":4109}," transaction date",{"type":43,"tag":99,"props":4111,"children":4112},{"style":141},[4113],{"type":48,"value":1417},{"type":43,"tag":99,"props":4115,"children":4116},{"style":130},[4117],{"type":48,"value":4118}," order timestamp",{"type":43,"tag":99,"props":4120,"children":4121},{"style":141},[4122],{"type":48,"value":1427},{"type":43,"tag":99,"props":4124,"children":4125},{"class":101,"line":266},[4126],{"type":43,"tag":99,"props":4127,"children":4128},{"emptyLinePlaceholder":260},[4129],{"type":48,"value":263},{"type":43,"tag":99,"props":4131,"children":4132},{"class":101,"line":275},[4133,4137],{"type":43,"tag":99,"props":4134,"children":4135},{"style":1177},[4136],{"type":48,"value":1373},{"type":43,"tag":99,"props":4138,"children":4139},{"style":141},[4140],{"type":48,"value":1378},{"type":43,"tag":99,"props":4142,"children":4143},{"class":101,"line":1902},[4144,4148],{"type":43,"tag":99,"props":4145,"children":4146},{"style":1177},[4147],{"type":48,"value":1386},{"type":43,"tag":99,"props":4149,"children":4150},{"style":141},[4151],{"type":48,"value":1378},{"type":43,"tag":99,"props":4153,"children":4154},{"class":101,"line":1911},[4155,4159,4163,4167,4172,4176,4181,4185,4190,4194,4199,4203,4208],{"type":43,"tag":99,"props":4156,"children":4157},{"style":1177},[4158],{"type":48,"value":1398},{"type":43,"tag":99,"props":4160,"children":4161},{"style":141},[4162],{"type":48,"value":1184},{"type":43,"tag":99,"props":4164,"children":4165},{"style":141},[4166],{"type":48,"value":1407},{"type":43,"tag":99,"props":4168,"children":4169},{"style":130},[4170],{"type":48,"value":4171},"sales",{"type":43,"tag":99,"props":4173,"children":4174},{"style":141},[4175],{"type":48,"value":1417},{"type":43,"tag":99,"props":4177,"children":4178},{"style":130},[4179],{"type":48,"value":4180}," income",{"type":43,"tag":99,"props":4182,"children":4183},{"style":141},[4184],{"type":48,"value":1417},{"type":43,"tag":99,"props":4186,"children":4187},{"style":130},[4188],{"type":48,"value":4189}," earnings",{"type":43,"tag":99,"props":4191,"children":4192},{"style":141},[4193],{"type":48,"value":1417},{"type":43,"tag":99,"props":4195,"children":4196},{"style":130},[4197],{"type":48,"value":4198}," gross revenue",{"type":43,"tag":99,"props":4200,"children":4201},{"style":141},[4202],{"type":48,"value":1417},{"type":43,"tag":99,"props":4204,"children":4205},{"style":130},[4206],{"type":48,"value":4207}," top line",{"type":43,"tag":99,"props":4209,"children":4210},{"style":141},[4211],{"type":48,"value":1427},{"type":43,"tag":99,"props":4213,"children":4214},{"class":101,"line":1920},[4215,4220],{"type":43,"tag":99,"props":4216,"children":4217},{"style":1177},[4218],{"type":48,"value":4219},"  average_order_value",{"type":43,"tag":99,"props":4221,"children":4222},{"style":141},[4223],{"type":48,"value":1378},{"type":43,"tag":99,"props":4225,"children":4226},{"class":101,"line":2525},[4227,4231,4235,4239,4244,4248,4253,4257,4262],{"type":43,"tag":99,"props":4228,"children":4229},{"style":1177},[4230],{"type":48,"value":1398},{"type":43,"tag":99,"props":4232,"children":4233},{"style":141},[4234],{"type":48,"value":1184},{"type":43,"tag":99,"props":4236,"children":4237},{"style":141},[4238],{"type":48,"value":1407},{"type":43,"tag":99,"props":4240,"children":4241},{"style":130},[4242],{"type":48,"value":4243},"AOV",{"type":43,"tag":99,"props":4245,"children":4246},{"style":141},[4247],{"type":48,"value":1417},{"type":43,"tag":99,"props":4249,"children":4250},{"style":130},[4251],{"type":48,"value":4252}," avg order",{"type":43,"tag":99,"props":4254,"children":4255},{"style":141},[4256],{"type":48,"value":1417},{"type":43,"tag":99,"props":4258,"children":4259},{"style":130},[4260],{"type":48,"value":4261}," basket size",{"type":43,"tag":99,"props":4263,"children":4264},{"style":141},[4265],{"type":48,"value":1427},{"type":43,"tag":51,"props":4267,"children":4268},{},[4269,4274,4275,4280,4282,4287],{"type":43,"tag":64,"props":4270,"children":4271},{},[4272],{"type":48,"value":4273},"Synonyms vs ai_context",{"type":48,"value":70},{"type":43,"tag":72,"props":4276,"children":4278},{"className":4277},[],[4279],{"type":48,"value":593},{"type":48,"value":4281}," for field-level name mapping. Use ",{"type":43,"tag":72,"props":4283,"children":4285},{"className":4284},[],[4286],{"type":48,"value":540},{"type":48,"value":4288}," for topic-level behavioral guidance, data nuances, and multi-field relationships.",{"type":43,"tag":51,"props":4290,"children":4291},{},[4292,4297,4299,4304,4305,4311,4312,4318,4320,4325,4327,4332],{"type":43,"tag":64,"props":4293,"children":4294},{},[4295],{"type":48,"value":4296},"When to add them",{"type":48,"value":4298}," — synonyms earn their place when users genuinely say a word the model doesn't contain (",{"type":43,"tag":72,"props":4300,"children":4302},{"className":4301},[],[4303],{"type":48,"value":4243},{"type":48,"value":542},{"type":43,"tag":72,"props":4306,"children":4308},{"className":4307},[],[4309],{"type":48,"value":4310},"top line",{"type":48,"value":542},{"type":43,"tag":72,"props":4313,"children":4315},{"className":4314},[],[4316],{"type":48,"value":4317},"basket size",{"type":48,"value":4319},"). They do not earn it by restating the field's label or name, or by reinforcing a mapping topic-level ",{"type":43,"tag":72,"props":4321,"children":4323},{"className":4322},[],[4324],{"type":48,"value":540},{"type":48,"value":4326}," already makes. Adding synonyms to a field whose disambiguation is already handled on the topic is the most common wasted write in this skill — see ",{"type":43,"tag":1007,"props":4328,"children":4330},{"href":4329},"#safe-model-write-defaults",[4331],{"type":48,"value":502},{"type":48,"value":383},{"type":43,"tag":51,"props":4334,"children":4335},{},[4336,4341,4342,4347,4349,4354,4356,4361,4362,4367,4369,4374],{"type":43,"tag":64,"props":4337,"children":4338},{},[4339],{"type":48,"value":4340},"Pruning",{"type":48,"value":3933},{"type":43,"tag":72,"props":4343,"children":4345},{"className":4344},[],[4346],{"type":48,"value":593},{"type":48,"value":4348}," are pruned ",{"type":43,"tag":64,"props":4350,"children":4351},{},[4352],{"type":48,"value":4353},"last",{"type":48,"value":4355},", after ",{"type":43,"tag":72,"props":4357,"children":4359},{"className":4358},[],[4360],{"type":48,"value":700},{"type":48,"value":715},{"type":43,"tag":72,"props":4363,"children":4365},{"className":4364},[],[4366],{"type":48,"value":850},{"type":48,"value":4368},". So for a field that genuinely needs alternate vocabulary, synonyms are the most durable place to put it — but that survivability is a reason to choose synonyms ",{"type":43,"tag":350,"props":4370,"children":4371},{},[4372],{"type":48,"value":4373},"over",{"type":48,"value":4375}," a description for that purpose, never a reason to add more of them.",{"type":43,"tag":81,"props":4377,"children":4379},{"id":4378},"avoiding-duplication",[4380],{"type":48,"value":4381},"Avoiding Duplication",{"type":43,"tag":51,"props":4383,"children":4384},{},[4385,4390,4391,4396,4398,4403,4405,4410,4412,4417],{"type":43,"tag":72,"props":4386,"children":4388},{"className":4387},[],[4389],{"type":48,"value":540},{"type":48,"value":715},{"type":43,"tag":72,"props":4392,"children":4394},{"className":4393},[],[4395],{"type":48,"value":700},{"type":48,"value":4397}," serve different audiences. ",{"type":43,"tag":72,"props":4399,"children":4401},{"className":4400},[],[4402],{"type":48,"value":700},{"type":48,"value":4404}," is human-facing (shown in the field picker and docs). ",{"type":43,"tag":72,"props":4406,"children":4408},{"className":4407},[],[4409],{"type":48,"value":540},{"type":48,"value":4411}," is an AI-only hint. Don't put the same text in both — ",{"type":43,"tag":72,"props":4413,"children":4415},{"className":4414},[],[4416],{"type":48,"value":540},{"type":48,"value":4418}," should add guidance the description doesn't cover (disambiguation, gotchas, when to use one field over another).",{"type":43,"tag":51,"props":4420,"children":4421},{},[4422,4427,4429,4434,4436,4441,4443,4448],{"type":43,"tag":64,"props":4423,"children":4424},{},[4425],{"type":48,"value":4426},"Consolidate shared context at the view level.",{"type":48,"value":4428}," If multiple fields in a view share the same ",{"type":43,"tag":72,"props":4430,"children":4432},{"className":4431},[],[4433],{"type":48,"value":540},{"type":48,"value":4435}," (e.g., \"all monetary values are in USD\"), move it to the view-level ",{"type":43,"tag":72,"props":4437,"children":4439},{"className":4438},[],[4440],{"type":48,"value":540},{"type":48,"value":4442}," instead of repeating it on each field. Field-level ",{"type":43,"tag":72,"props":4444,"children":4446},{"className":4445},[],[4447],{"type":48,"value":540},{"type":48,"value":4449}," should be specific to that field.",{"type":43,"tag":51,"props":4451,"children":4452},{},[4453,4455,4460,4461,4466],{"type":48,"value":4454},"Shared fact hoisted to the view, ",{"type":43,"tag":72,"props":4456,"children":4458},{"className":4457},[],[4459],{"type":48,"value":700},{"type":48,"value":715},{"type":43,"tag":72,"props":4462,"children":4464},{"className":4463},[],[4465],{"type":48,"value":540},{"type":48,"value":4467}," each carrying only what the other doesn't:",{"type":43,"tag":88,"props":4469,"children":4471},{"className":1165,"code":4470,"language":1167,"meta":93,"style":93},"ai_context: \"All monetary values in this view are in USD.\"\n\ndimensions:\n  gross_revenue:\n    ai_context: \"Revenue before refunds.\"\n    description: \"Total revenue before refunds and cancellations are applied.\"\n  net_revenue:\n    ai_context: \"Revenue after refunds. Use this for profitability analysis.\"\n    description: \"Total revenue after refunds and cancellations.\"\n",[4472],{"type":43,"tag":72,"props":4473,"children":4474},{"__ignoreMap":93},[4475,4499,4506,4517,4529,4553,4577,4589,4613],{"type":43,"tag":99,"props":4476,"children":4477},{"class":101,"line":102},[4478,4482,4486,4490,4495],{"type":43,"tag":99,"props":4479,"children":4480},{"style":1177},[4481],{"type":48,"value":540},{"type":43,"tag":99,"props":4483,"children":4484},{"style":141},[4485],{"type":48,"value":1184},{"type":43,"tag":99,"props":4487,"children":4488},{"style":141},[4489],{"type":48,"value":164},{"type":43,"tag":99,"props":4491,"children":4492},{"style":130},[4493],{"type":48,"value":4494},"All monetary values in this view are in USD.",{"type":43,"tag":99,"props":4496,"children":4497},{"style":141},[4498],{"type":48,"value":174},{"type":43,"tag":99,"props":4500,"children":4501},{"class":101,"line":112},[4502],{"type":43,"tag":99,"props":4503,"children":4504},{"emptyLinePlaceholder":260},[4505],{"type":48,"value":263},{"type":43,"tag":99,"props":4507,"children":4508},{"class":101,"line":30},[4509,4513],{"type":43,"tag":99,"props":4510,"children":4511},{"style":1177},[4512],{"type":48,"value":3462},{"type":43,"tag":99,"props":4514,"children":4515},{"style":141},[4516],{"type":48,"value":1378},{"type":43,"tag":99,"props":4518,"children":4519},{"class":101,"line":218},[4520,4525],{"type":43,"tag":99,"props":4521,"children":4522},{"style":1177},[4523],{"type":48,"value":4524},"  gross_revenue",{"type":43,"tag":99,"props":4526,"children":4527},{"style":141},[4528],{"type":48,"value":1378},{"type":43,"tag":99,"props":4530,"children":4531},{"class":101,"line":256},[4532,4536,4540,4544,4549],{"type":43,"tag":99,"props":4533,"children":4534},{"style":1177},[4535],{"type":48,"value":2868},{"type":43,"tag":99,"props":4537,"children":4538},{"style":141},[4539],{"type":48,"value":1184},{"type":43,"tag":99,"props":4541,"children":4542},{"style":141},[4543],{"type":48,"value":164},{"type":43,"tag":99,"props":4545,"children":4546},{"style":130},[4547],{"type":48,"value":4548},"Revenue before refunds.",{"type":43,"tag":99,"props":4550,"children":4551},{"style":141},[4552],{"type":48,"value":174},{"type":43,"tag":99,"props":4554,"children":4555},{"class":101,"line":266},[4556,4560,4564,4568,4573],{"type":43,"tag":99,"props":4557,"children":4558},{"style":1177},[4559],{"type":48,"value":3503},{"type":43,"tag":99,"props":4561,"children":4562},{"style":141},[4563],{"type":48,"value":1184},{"type":43,"tag":99,"props":4565,"children":4566},{"style":141},[4567],{"type":48,"value":164},{"type":43,"tag":99,"props":4569,"children":4570},{"style":130},[4571],{"type":48,"value":4572},"Total revenue before refunds and cancellations are applied.",{"type":43,"tag":99,"props":4574,"children":4575},{"style":141},[4576],{"type":48,"value":174},{"type":43,"tag":99,"props":4578,"children":4579},{"class":101,"line":275},[4580,4585],{"type":43,"tag":99,"props":4581,"children":4582},{"style":1177},[4583],{"type":48,"value":4584},"  net_revenue",{"type":43,"tag":99,"props":4586,"children":4587},{"style":141},[4588],{"type":48,"value":1378},{"type":43,"tag":99,"props":4590,"children":4591},{"class":101,"line":1902},[4592,4596,4600,4604,4609],{"type":43,"tag":99,"props":4593,"children":4594},{"style":1177},[4595],{"type":48,"value":2868},{"type":43,"tag":99,"props":4597,"children":4598},{"style":141},[4599],{"type":48,"value":1184},{"type":43,"tag":99,"props":4601,"children":4602},{"style":141},[4603],{"type":48,"value":164},{"type":43,"tag":99,"props":4605,"children":4606},{"style":130},[4607],{"type":48,"value":4608},"Revenue after refunds. Use this for profitability analysis.",{"type":43,"tag":99,"props":4610,"children":4611},{"style":141},[4612],{"type":48,"value":174},{"type":43,"tag":99,"props":4614,"children":4615},{"class":101,"line":1911},[4616,4620,4624,4628,4633],{"type":43,"tag":99,"props":4617,"children":4618},{"style":1177},[4619],{"type":48,"value":3503},{"type":43,"tag":99,"props":4621,"children":4622},{"style":141},[4623],{"type":48,"value":1184},{"type":43,"tag":99,"props":4625,"children":4626},{"style":141},[4627],{"type":48,"value":164},{"type":43,"tag":99,"props":4629,"children":4630},{"style":130},[4631],{"type":48,"value":4632},"Total revenue after refunds and cancellations.",{"type":43,"tag":99,"props":4634,"children":4635},{"style":141},[4636],{"type":48,"value":174},{"type":43,"tag":81,"props":4638,"children":4640},{"id":4639},"optimization-checklist",[4641],{"type":48,"value":4642},"Optimization Checklist",{"type":43,"tag":51,"props":4644,"children":4645},{},[4646],{"type":48,"value":4647},"Prioritize high-impact changes. Improve wording without changing semantics.",{"type":43,"tag":663,"props":4649,"children":4650},{},[4651,4661,4673,4685,4697,4709,4727,4744,4755,4778,4790,4811],{"type":43,"tag":508,"props":4652,"children":4653},{},[4654,4656],{"type":48,"value":4655},"Inspect current state with ",{"type":43,"tag":72,"props":4657,"children":4659},{"className":4658},[],[4660],{"type":48,"value":77},{"type":43,"tag":508,"props":4662,"children":4663},{},[4664,4666,4671],{"type":48,"value":4665},"Check model-level ",{"type":43,"tag":72,"props":4667,"children":4669},{"className":4668},[],[4670],{"type":48,"value":779},{"type":48,"value":4672}," — ensure the right topics are visible to AI",{"type":43,"tag":508,"props":4674,"children":4675},{},[4676,4678,4683],{"type":48,"value":4677},"Curate with ",{"type":43,"tag":72,"props":4679,"children":4681},{"className":4680},[],[4682],{"type":48,"value":548},{"type":48,"value":4684}," down to the fields users actually ask about, rather than to a field count",{"type":43,"tag":508,"props":4686,"children":4687},{},[4688,4690,4695],{"type":48,"value":4689},"Write ",{"type":43,"tag":72,"props":4691,"children":4693},{"className":4692},[],[4694],{"type":48,"value":540},{"type":48,"value":4696}," mapping business terms to fields (keep to 1-2 sentences; it is never pruned)",{"type":43,"tag":508,"props":4698,"children":4699},{},[4700,4702,4707],{"type":48,"value":4701},"Add ",{"type":43,"tag":72,"props":4703,"children":4705},{"className":4704},[],[4706],{"type":48,"value":593},{"type":48,"value":4708}," to key dimensions and measures (skip if they duplicate the label)",{"type":43,"tag":508,"props":4710,"children":4711},{},[4712,4714,4719,4720,4725],{"type":48,"value":4713},"Improve field ",{"type":43,"tag":72,"props":4715,"children":4717},{"className":4716},[],[4718],{"type":48,"value":700},{"type":48,"value":715},{"type":43,"tag":72,"props":4721,"children":4723},{"className":4722},[],[4724],{"type":48,"value":850},{"type":48,"value":4726}," values",{"type":43,"tag":508,"props":4728,"children":4729},{},[4730,4731,4736,4737,4742],{"type":48,"value":4701},{"type":43,"tag":72,"props":4732,"children":4734},{"className":4733},[],[4735],{"type":48,"value":815},{"type":48,"value":3079},{"type":43,"tag":72,"props":4738,"children":4740},{"className":4739},[],[4741],{"type":48,"value":830},{"type":48,"value":4743}," for categorical fields",{"type":43,"tag":508,"props":4745,"children":4746},{},[4747,4748,4753],{"type":48,"value":4701},{"type":43,"tag":72,"props":4749,"children":4751},{"className":4750},[],[4752],{"type":48,"value":555},{"type":48,"value":4754}," for top 3-5 questions",{"type":43,"tag":508,"props":4756,"children":4757},{},[4758,4760,4765,4766,4771,4773],{"type":48,"value":4759},"Remove duplication between ",{"type":43,"tag":72,"props":4761,"children":4763},{"className":4762},[],[4764],{"type":48,"value":540},{"type":48,"value":715},{"type":43,"tag":72,"props":4767,"children":4769},{"className":4768},[],[4770],{"type":48,"value":700},{"type":48,"value":4772},"; consolidate shared context at view level, and shared blocks into ",{"type":43,"tag":72,"props":4774,"children":4776},{"className":4775},[],[4777],{"type":48,"value":2082},{"type":43,"tag":508,"props":4779,"children":4780},{},[4781,4783,4788],{"type":48,"value":4782},"Consider ",{"type":43,"tag":72,"props":4784,"children":4786},{"className":4785},[],[4787],{"type":48,"value":3212},{"type":48,"value":4789}," for AI-specific topic variants",{"type":43,"tag":508,"props":4791,"children":4792},{},[4793,4795,4801,4803,4809],{"type":48,"value":4794},"Scope tier- or agent-specific instructions with ",{"type":43,"tag":72,"props":4796,"children":4798},{"className":4797},[],[4799],{"type":48,"value":4800},"omni_llm",{"type":48,"value":4802}," \u002F ",{"type":43,"tag":72,"props":4804,"children":4806},{"className":4805},[],[4807],{"type":48,"value":4808},"omni_agent",{"type":48,"value":4810}," rather than paying for them on every request",{"type":43,"tag":508,"props":4812,"children":4813},{},[4814],{"type":48,"value":4815},"Test iteratively — ask Blobby and refine",{"type":43,"tag":57,"props":4817,"children":4818},{},[4819],{"type":43,"tag":51,"props":4820,"children":4821},{},[4822,4827,4829,4834,4836,4841,4842,4848,4850,4855],{"type":43,"tag":64,"props":4823,"children":4824},{},[4825],{"type":48,"value":4826},"Troubleshooting order",{"type":48,"value":4828}," when Blobby answers wrong: confirm the topic is reachable (",{"type":43,"tag":72,"props":4830,"children":4832},{"className":4831},[],[4833],{"type":48,"value":779},{"type":48,"value":4835},") → confirm the field is in context (workbook inspector; check it wasn't pruned or excluded by ",{"type":43,"tag":72,"props":4837,"children":4839},{"className":4838},[],[4840],{"type":48,"value":548},{"type":48,"value":3079},{"type":43,"tag":72,"props":4843,"children":4845},{"className":4844},[],[4846],{"type":48,"value":4847},"hidden",{"type":48,"value":4849},") → then add or sharpen ",{"type":43,"tag":72,"props":4851,"children":4853},{"className":4852},[],[4854],{"type":48,"value":540},{"type":48,"value":4856},". Writing more context for a field the AI never received fixes nothing.",{"type":43,"tag":81,"props":4858,"children":4860},{"id":4859},"docs-reference",[4861],{"type":48,"value":4862},"Docs Reference",{"type":43,"tag":504,"props":4864,"children":4865},{},[4866,4876,4908,4953,5008,5032],{"type":43,"tag":508,"props":4867,"children":4868},{},[4869],{"type":43,"tag":1007,"props":4870,"children":4873},{"href":4871,"rel":4872},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fdevelop\u002Fai-optimization",[1011],[4874],{"type":48,"value":4875},"Optimize models for Omni AI",{"type":43,"tag":508,"props":4877,"children":4878},{},[4879,4884,4886,4892,4894,4900,4901],{"type":43,"tag":72,"props":4880,"children":4882},{"className":4881},[],[4883],{"type":48,"value":540},{"type":48,"value":4885}," reference: ",{"type":43,"tag":1007,"props":4887,"children":4889},{"href":1629,"rel":4888},[1011],[4890],{"type":48,"value":4891},"model",{"type":48,"value":4893}," · ",{"type":43,"tag":1007,"props":4895,"children":4898},{"href":4896,"rel":4897},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fai-context",[1011],[4899],{"type":48,"value":3119},{"type":48,"value":4893},{"type":43,"tag":1007,"props":4902,"children":4905},{"href":4903,"rel":4904},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fviews\u002Fparameters\u002Fai-context",[1011],[4906],{"type":48,"value":4907},"view",{"type":43,"tag":508,"props":4909,"children":4910},{},[4911,4913,4923,4924,4934,4935,4945,4946],{"type":48,"value":4912},"Topic parameters: ",{"type":43,"tag":1007,"props":4914,"children":4917},{"href":4915,"rel":4916},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fai-fields",[1011],[4918],{"type":43,"tag":72,"props":4919,"children":4921},{"className":4920},[],[4922],{"type":48,"value":548},{"type":48,"value":4893},{"type":43,"tag":1007,"props":4925,"children":4928},{"href":4926,"rel":4927},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fsample-queries",[1011],[4929],{"type":43,"tag":72,"props":4930,"children":4932},{"className":4931},[],[4933],{"type":48,"value":555},{"type":48,"value":4893},{"type":43,"tag":1007,"props":4936,"children":4939},{"href":4937,"rel":4938},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters\u002Fextends",[1011],[4940],{"type":43,"tag":72,"props":4941,"children":4943},{"className":4942},[],[4944],{"type":48,"value":3212},{"type":48,"value":4893},{"type":43,"tag":1007,"props":4947,"children":4950},{"href":4948,"rel":4949},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Ftopics\u002Fparameters.md",[1011],[4951],{"type":48,"value":4952},"all topic parameters",{"type":43,"tag":508,"props":4954,"children":4955},{},[4956,4958,4968,4969,4978,4979,4988,4989,4998,4999],{"type":48,"value":4957},"Model parameters: ",{"type":43,"tag":1007,"props":4959,"children":4962},{"href":4960,"rel":4961},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fmodels\u002Fai-chat-topics",[1011],[4963],{"type":43,"tag":72,"props":4964,"children":4966},{"className":4965},[],[4967],{"type":48,"value":779},{"type":48,"value":4893},{"type":43,"tag":1007,"props":4970,"children":4972},{"href":2074,"rel":4971},[1011],[4973],{"type":43,"tag":72,"props":4974,"children":4976},{"className":4975},[],[4977],{"type":48,"value":2082},{"type":48,"value":4893},{"type":43,"tag":1007,"props":4980,"children":4982},{"href":1657,"rel":4981},[1011],[4983],{"type":43,"tag":72,"props":4984,"children":4986},{"className":4985},[],[4987],{"type":48,"value":555},{"type":48,"value":4893},{"type":43,"tag":1007,"props":4990,"children":4992},{"href":2340,"rel":4991},[1011],[4993],{"type":43,"tag":72,"props":4994,"children":4996},{"className":4995},[],[4997],{"type":48,"value":2348},{"type":48,"value":4893},{"type":43,"tag":1007,"props":5000,"children":5002},{"href":2385,"rel":5001},[1011],[5003],{"type":43,"tag":72,"props":5004,"children":5006},{"className":5005},[],[5007],{"type":48,"value":2393},{"type":43,"tag":508,"props":5009,"children":5010},{},[5011,5018,5019,5025,5026],{"type":43,"tag":1007,"props":5012,"children":5015},{"href":5013,"rel":5014},"https:\u002F\u002Fdocs.omni.co\u002Fmodeling\u002Fdimensions\u002Fparameters\u002Fsynonyms",[1011],[5016],{"type":48,"value":5017},"Synonyms",{"type":48,"value":4893},{"type":43,"tag":1007,"props":5020,"children":5022},{"href":1710,"rel":5021},[1011],[5023],{"type":48,"value":5024},"User attributes",{"type":48,"value":4893},{"type":43,"tag":1007,"props":5027,"children":5029},{"href":1009,"rel":5028},[1011],[5030],{"type":48,"value":5031},"Workbook inspector",{"type":43,"tag":508,"props":5033,"children":5034},{},[5035,5041,5042,5049,5050],{"type":43,"tag":1007,"props":5036,"children":5038},{"href":3184,"rel":5037},[1011],[5039],{"type":48,"value":5040},"Model YAML API",{"type":48,"value":4893},{"type":43,"tag":1007,"props":5043,"children":5046},{"href":5044,"rel":5045},"https:\u002F\u002Fdocs.omni.co\u002Fai.md",[1011],[5047],{"type":48,"value":5048},"Omni AI Overview",{"type":48,"value":4893},{"type":43,"tag":1007,"props":5051,"children":5054},{"href":5052,"rel":5053},"https:\u002F\u002Fdocs.omni.co\u002Fai\u002Fsecurity",[1011],[5055],{"type":48,"value":5056},"AI data security",{"type":43,"tag":81,"props":5058,"children":5060},{"id":5059},"related-skills",[5061],{"type":48,"value":5062},"Related Skills",{"type":43,"tag":504,"props":5064,"children":5065},{},[5066,5075,5084],{"type":43,"tag":508,"props":5067,"children":5068},{},[5069,5073],{"type":43,"tag":64,"props":5070,"children":5071},{},[5072],{"type":48,"value":77},{"type":48,"value":5074}," — inspect existing AI context",{"type":43,"tag":508,"props":5076,"children":5077},{},[5078,5082],{"type":43,"tag":64,"props":5079,"children":5080},{},[5081],{"type":48,"value":2755},{"type":48,"value":5083}," — modify views and topics",{"type":43,"tag":508,"props":5085,"children":5086},{},[5087,5092],{"type":43,"tag":64,"props":5088,"children":5089},{},[5090],{"type":48,"value":5091},"omni-query",{"type":48,"value":5093}," — test queries to verify Blobby's output",{"type":43,"tag":5095,"props":5096,"children":5097},"style",{},[5098],{"type":48,"value":5099},"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":5101,"total":2525},[5102,5114,5126,5133,5149,5163,5179,5191,5206,5218,5233],{"slug":5103,"name":5103,"fn":5104,"description":5105,"org":5106,"tags":5107,"stars":26,"repoUrl":27,"updatedAt":5113},"omni-admin","administer Omni Analytics","Administer an Omni Analytics instance — manage connections, users, groups, user attributes, permissions, schedules, and schema refreshes via the Omni CLI. Use this skill whenever someone wants to manage users or groups, set up permissions on a dashboard or folder, configure user attributes, create or modify schedules, manage database connections, refresh a schema, set up access controls, provision users, or any variant of \"add a user\", \"give access to\", \"set up permissions\", \"who has access\", \"configure connection\", \"refresh the schema\", or \"schedule a delivery\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5108,5109,5112],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},"CLI","cli",{"name":18,"slug":19,"type":16},"2026-04-06T18:10:58.235995",{"slug":5115,"name":5115,"fn":5116,"description":5117,"org":5118,"tags":5119,"stars":26,"repoUrl":27,"updatedAt":5125},"omni-ai-eval","evaluate Omni AI query accuracy","Evaluate Omni AI accuracy using Omni's built-in eval system — define a prompt set, run a judged eval against a model (or branch), and read the accuracy-judge verdicts. Use this skill whenever someone wants to evaluate Omni AI, benchmark Blobby, run regression tests, compare AI output across branches or model-context changes, measure AI quality, run A\u002FB tests on model changes, assess the impact of an ai_context or modeling change, or any variant of \"run evals\", \"test Blobby\", \"benchmark query generation\", \"compare AI results\", \"regression test\", \"how accurate is the AI\", or \"measure the impact of my changes\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5120,5121,5124],{"name":24,"slug":25,"type":16},{"name":5122,"slug":5123,"type":16},"Evals","evals",{"name":18,"slug":19,"type":16},"2026-04-06T18:10:59.485921",{"slug":4,"name":4,"fn":5,"description":6,"org":5127,"tags":5128,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5129,5130,5131,5132],{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"slug":5134,"name":5134,"fn":5135,"description":5136,"org":5137,"tags":5138,"stars":26,"repoUrl":27,"updatedAt":5148},"omni-content-builder","manage Omni Analytics documents and dashboards","Create, update, and manage Omni Analytics documents and dashboards programmatically — document lifecycle, drafts, tiles, visualizations, filters, controls, and layouts — using the Omni CLI. Use this skill whenever someone wants to build a dashboard, create a workbook, add tiles or charts, configure dashboard filters or controls, update an existing dashboard's model, set up a KPI view, create visualizations, lay out a dashboard, arrange tiles or pages, create a document, edit a dashboard as a draft, publish a draft, change dashboard settings, rename a workbook, delete a dashboard, move a document to a folder, duplicate a dashboard, or any variant of \"build a dashboard for\", \"create a report showing\", \"add a chart to\", \"make a dashboard\", \"update the dashboard layout\", \"rename this document\", \"publish this draft\", \"move to folder\", or \"delete this dashboard\". Also use when modifying dashboard-level model customizations like workbook-specific joins or fields.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5139,5140,5141,5144,5147],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":5142,"slug":5143,"type":16},"Dashboards","dashboards",{"name":5145,"slug":5146,"type":16},"Data Visualization","data-visualization",{"name":18,"slug":19,"type":16},"2026-04-06T18:11:02.007785",{"slug":5150,"name":5150,"fn":5151,"description":5152,"org":5153,"tags":5154,"stars":26,"repoUrl":27,"updatedAt":5162},"omni-content-explorer","find and organize Omni Analytics content","Find, browse, and organize content in Omni Analytics — dashboards, workbooks, folders, and labels — using the Omni CLI. Use this skill whenever someone wants to find an existing dashboard, search for content, list workbooks, browse folders, see what dashboards exist, find popular reports, download a dashboard as PDF or PNG, favorite content, manage labels on documents, or any variant of \"find the dashboard about\", \"what reports do we have\", \"show me our dashboards\", \"where is the sales report\", or \"download this dashboard\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5155,5156,5157,5158,5159],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":5142,"slug":5143,"type":16},{"name":18,"slug":19,"type":16},{"name":5160,"slug":5161,"type":16},"Search","search","2026-04-06T18:11:04.516766",{"slug":5164,"name":5164,"fn":5165,"description":5166,"org":5167,"tags":5168,"stars":26,"repoUrl":27,"updatedAt":5178},"omni-embed","embed Omni Analytics dashboards","Embed Omni Analytics dashboards in external applications — URL signing, custom themes, iframe events, entity workspaces, and permission-aware content — using the @omni-co\u002Fembed SDK and Omni CLI. Use this skill whenever someone wants to embed a dashboard, sign an embed URL, customize the embedded theme, handle embed events, listen for clicks or drills in the iframe, send filters to an embedded dashboard, set up entity workspaces, look up embed users, build a permission-aware content list, white-label an embedded dashboard, or any variant of \"embed this dashboard\", \"customize the iframe theme\", \"handle click events from the embed\", \"filter the embedded dashboard\", \"set up embedding\", or \"what dashboards can this user see\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5169,5170,5171,5174,5175],{"name":24,"slug":25,"type":16},{"name":5142,"slug":5143,"type":16},{"name":5172,"slug":5173,"type":16},"Frontend","frontend",{"name":18,"slug":19,"type":16},{"name":5176,"slug":5177,"type":16},"SDK","sdk","2026-04-06T18:10:55.739544",{"slug":2755,"name":2755,"fn":5180,"description":5181,"org":5182,"tags":5183,"stars":26,"repoUrl":27,"updatedAt":5190},"build Omni Analytics semantic models","Create and edit Omni Analytics semantic model definitions — views, topics, dimensions, measures, relationships, and query views — using YAML through the Omni CLI. Use this skill whenever someone wants to add a field, create a new dimension or measure, define a topic, set up joins between tables, modify the data model, build a new view, add a calculated field, create a relationship, edit YAML, work on a branch, promote model changes, or any variant of \"model this data\", \"add this metric\", \"create a view for\", or \"set up a join between\". Also use for migrating modeling patterns since Omni's YAML is conceptually similar to other semantic layer definitions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5184,5185,5186,5187,5188],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":5189,"slug":1167,"type":16},"YAML","2026-04-06T18:11:05.775943",{"slug":77,"name":77,"fn":5192,"description":5193,"org":5194,"tags":5195,"stars":26,"repoUrl":27,"updatedAt":5205},"discover and inspect Omni Analytics models","Discover and inspect Omni Analytics models, topics, views, fields, dimensions, measures, and relationships using the Omni CLI. Use this skill whenever someone wants to understand what data is available in Omni, explore their semantic model, find specific fields or views, check how tables join together, see what topics exist, or asks any variant of \"what can I query\", \"what fields are available\", \"show me the model\", \"what data do we have\", or \"how is this data modeled\". Also use when you need to understand the Omni model structure before building or modifying anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5196,5197,5198,5201,5204],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":5199,"slug":5200,"type":16},"Data Analysis","data-analysis",{"name":5202,"slug":5203,"type":16},"Knowledge Management","knowledge-management",{"name":18,"slug":19,"type":16},"2026-04-06T18:11:00.739003",{"slug":5091,"name":5091,"fn":5207,"description":5208,"org":5209,"tags":5210,"stars":26,"repoUrl":27,"updatedAt":5217},"query Omni Analytics semantic layer","Run queries against Omni Analytics' semantic layer using the Omni CLI, interpret results, and chain queries for multi-step analysis. Use this skill whenever someone wants to query data through Omni, run a report, get metrics, pull numbers, analyze data, ask \"how many\" \u002F \"what's the trend\" \u002F \"show me the data\", retrieve dashboard query results, or extract data from an existing dashboard or workbook. Also use for table calculations and computed columns (running totals, percent-of-total, month-over-month \u002F period-over-period change, moving averages, rankings), open-ended multi-step analysis via agentic AI jobs, and running raw SQL through the semantic layer — even when the user doesn't say \"query\" (e.g. \"add a running total column\", \"what's our MoM growth\", \"analyze revenue trends\"). For building or editing a dashboard or chart use omni-content-builder; for adding a field or measure to the model use omni-model-builder — this skill retrieves and computes over data.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5211,5212,5213,5214,5215],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":5199,"slug":5200,"type":16},{"name":18,"slug":19,"type":16},{"name":5216,"slug":823,"type":16},"SQL","2026-04-06T18:10:56.974412",{"slug":5219,"name":5219,"fn":5220,"description":5221,"org":5222,"tags":5223,"stars":26,"repoUrl":27,"updatedAt":5232},"omni-to-databricks-metric-view","convert Omni topics to Databricks Metric Views","Convert an Omni Analytics topic into a Databricks Metric View definition in Unity Catalog. Use this skill whenever someone wants to export Omni metrics to Databricks, create a Metric View from an Omni topic, harden BI metrics into Unity Catalog, or bridge Omni's semantic layer with Databricks AI\u002FBI dashboards and Genie spaces.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5224,5225,5228,5231],{"name":24,"slug":25,"type":16},{"name":5226,"slug":5227,"type":16},"Data Engineering","data-engineering",{"name":5229,"slug":5230,"type":16},"Databricks","databricks",{"name":18,"slug":19,"type":16},"2026-04-09T04:47:50.695014",{"slug":5234,"name":5234,"fn":5235,"description":5236,"org":5237,"tags":5238,"stars":26,"repoUrl":27,"updatedAt":5246},"omni-to-snowflake-semantic-view","convert Omni topics to Snowflake views","Convert an Omni Analytics topic into a Snowflake Semantic View YAML definition. Use this skill whenever someone wants to export Omni metrics to Snowflake, create a Semantic View from an Omni topic, harden BI metrics into the warehouse, or bridge Omni's semantic layer with Snowflake Cortex Analyst.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5239,5240,5241,5242,5245],{"name":24,"slug":25,"type":16},{"name":5226,"slug":5227,"type":16},{"name":18,"slug":19,"type":16},{"name":5243,"slug":5244,"type":16},"Snowflake","snowflake",{"name":5189,"slug":1167,"type":16},"2026-04-06T18:11:25.009706",{"items":5248,"total":2525},[5249,5255,5261,5268,5276,5284,5292],{"slug":5103,"name":5103,"fn":5104,"description":5105,"org":5250,"tags":5251,"stars":26,"repoUrl":27,"updatedAt":5113},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5252,5253,5254],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":18,"slug":19,"type":16},{"slug":5115,"name":5115,"fn":5116,"description":5117,"org":5256,"tags":5257,"stars":26,"repoUrl":27,"updatedAt":5125},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5258,5259,5260],{"name":24,"slug":25,"type":16},{"name":5122,"slug":5123,"type":16},{"name":18,"slug":19,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":5262,"tags":5263,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5264,5265,5266,5267],{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"slug":5134,"name":5134,"fn":5135,"description":5136,"org":5269,"tags":5270,"stars":26,"repoUrl":27,"updatedAt":5148},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5271,5272,5273,5274,5275],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":5142,"slug":5143,"type":16},{"name":5145,"slug":5146,"type":16},{"name":18,"slug":19,"type":16},{"slug":5150,"name":5150,"fn":5151,"description":5152,"org":5277,"tags":5278,"stars":26,"repoUrl":27,"updatedAt":5162},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5279,5280,5281,5282,5283],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":5142,"slug":5143,"type":16},{"name":18,"slug":19,"type":16},{"name":5160,"slug":5161,"type":16},{"slug":5164,"name":5164,"fn":5165,"description":5166,"org":5285,"tags":5286,"stars":26,"repoUrl":27,"updatedAt":5178},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5287,5288,5289,5290,5291],{"name":24,"slug":25,"type":16},{"name":5142,"slug":5143,"type":16},{"name":5172,"slug":5173,"type":16},{"name":18,"slug":19,"type":16},{"name":5176,"slug":5177,"type":16},{"slug":2755,"name":2755,"fn":5180,"description":5181,"org":5293,"tags":5294,"stars":26,"repoUrl":27,"updatedAt":5190},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5295,5296,5297,5298,5299],{"name":24,"slug":25,"type":16},{"name":5110,"slug":5111,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":5189,"slug":1167,"type":16}]