{
    "allowCustomDataForDataTypeAny": true,
    "functions": [
        {
            "description": "Ask any model on OpenRouter a question, optionally with a range as context.",
            "id": "ASK",
            "name": "ASK",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The question or instruction.",
                    "name": "prompt",
                    "type": "string"
                },
                {
                    "description": "A cell or range to supply as context.",
                    "dimensionality": "matrix",
                    "name": "context",
                    "optional": true,
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default, e.g. \"openai/gpt-5-mini\".",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Write a one-sentence analytical comment on a range of data — the kind of line that sits under a chart in a management pack. Names the main driver, the biggest move or the outlier, with the figure behind it.",
            "id": "COMMENT",
            "name": "COMMENT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The range to comment on.",
                    "dimensionality": "matrix",
                    "name": "data",
                    "type": "any"
                },
                {
                    "description": "What to focus on, e.g. \"explain the month-on-month change\" or \"call out the biggest risk\". Omit for the single most important point.",
                    "name": "question",
                    "optional": true,
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Write an Excel formula from a plain-language description, optionally modelled on a range.",
            "id": "FORMULA",
            "name": "FORMULA",
            "options": {
                "requiresAddress": true,
                "requiresParameterAddresses": true
            },
            "parameters": [
                {
                    "description": "What the formula should do, e.g. \"sum column B where column A is East\".",
                    "name": "description",
                    "type": "string"
                },
                {
                    "description": "A cell or range the formula should refer to or be modelled on.",
                    "dimensionality": "matrix",
                    "name": "context",
                    "optional": true,
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Generate a list, spilled one item per row.",
            "id": "LIST",
            "name": "LIST",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "What to list, e.g. \"five European capital cities\".",
                    "name": "prompt",
                    "type": "string"
                },
                {
                    "description": "How many items to return.",
                    "name": "count",
                    "optional": true,
                    "type": "number"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Generate a table, spilled across rows and columns with a header row.",
            "id": "TABLE",
            "name": "TABLE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "What the table should contain.",
                    "name": "prompt",
                    "type": "string"
                },
                {
                    "description": "Column headers, as a comma-separated list or a range.",
                    "dimensionality": "matrix",
                    "name": "columns",
                    "optional": true,
                    "type": "any"
                },
                {
                    "description": "How many data rows to generate.",
                    "name": "rows",
                    "optional": true,
                    "type": "number"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Continue a pattern from worked examples — give it input/output pairs and a new input.",
            "id": "FILL",
            "name": "FILL",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "A two-column range of example inputs and their outputs.",
                    "dimensionality": "matrix",
                    "name": "examples",
                    "type": "any"
                },
                {
                    "description": "The new input to transform the same way.",
                    "name": "input",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Pull a specific piece of information out of some text. For anything a pattern can describe, Excel's built-in REGEXEXTRACT is free, instant and repeatable — e.g. =REGEXEXTRACT(A2, \"\\(([^)]*)\\)\", 2) for the text inside parentheses. Use this when the format varies too much to pin down.",
            "id": "EXTRACT",
            "name": "EXTRACT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to read.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "What to extract, e.g. \"the email address\" or \"the invoice total\".",
                    "name": "what",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Read the numeric values out of text as real numbers — stripping labels, currency, units and thousands separators. One number goes in a single cell; several spill across columns in the order they appear, so \"473 ml (16 oz.)\" gives 473 and 16. Compact notation is expanded (1.75m is 1750000) and a percentage becomes its decimal ratio (15% is 0.15). Pass `what` to pick just one. For a fixed format, Excel's own VALUE or NUMBERVALUE does this for free; use this when the wording and layout vary.",
            "id": "VALUE",
            "name": "VALUE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text containing one or more numbers.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Which number to read when the text has several, e.g. \"the volume in ml\" or \"the grand total\". Omit to return them all.",
                    "name": "what",
                    "optional": true,
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "number"
            }
        },
        {
            "description": "Convert a relative-date or duration phrase into a whole number of days from today — \"4 days ago\" is 4, \"2 months ago\" is 60, \"in 3 days\" is -3. Past is positive, future negative, today 0. Open-ended phrases resolve to their boundary (\"over 6 months ago\" is 181, \"at least 1 year ago\" is 365); a range gives its midpoint. Approximate: 30 days a month, 365 a year.",
            "id": "RELATIVEDATE",
            "name": "RELATIVEDATE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The phrase, e.g. \"last week\", \"3 weeks ago\", \"over 6 months ago\".",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "number"
            }
        },
        {
            "description": "Extract several named fields from one piece of text in a single call.",
            "id": "FIELDS",
            "name": "FIELDS",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to read.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "The fields to pull out, as a comma-separated list or a range, e.g. \"name, email, amount\".",
                    "dimensionality": "matrix",
                    "name": "fieldList",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Split a person's name into first, middle and last, spilled across three columns — an empty cell for any part the name lacks. Handles \"Last, First\" order, compound surnames and particles (\"de la Cruz\"), initials and family-name-first forms. With keep_titles TRUE it adds two more columns, suffix then title. For a plain \"First Last\", Excel's TEXTSPLIT does it for free.",
            "id": "NAMEPART",
            "name": "NAMEPART",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The name to split.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "TRUE keeps the generational suffix (Jr., III) and the honorific title (Mr., Ms., Miss, Dr., Assoc. Prof.), each in its own column after the last name; FALSE (the default) drops both.",
                    "name": "keep_titles",
                    "optional": true,
                    "type": "boolean"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Pull out the most important keywords or short phrases from text, spilled one per row.",
            "id": "KEYWORDS",
            "name": "KEYWORDS",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to read.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "How many keywords to return. Defaults to 5.",
                    "name": "count",
                    "optional": true,
                    "type": "number"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Pull the action items out of text — meeting notes, an email thread, a call summary — spilled one per row. Each line is a concrete task, with the owner named when the text names one.",
            "id": "TASKS",
            "name": "TASKS",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to read.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Pull the named entities out of text — people, organisations, places, dates, amounts.",
            "id": "ENTITIES",
            "name": "ENTITIES",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to read.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Narrow it to one kind, e.g. \"person\", \"organization\", \"place\". Omit for all kinds.",
                    "name": "type",
                    "optional": true,
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Sort text into one of the categories you supply.",
            "id": "CLASSIFY",
            "name": "CLASSIFY",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to categorise.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "The allowed categories, as a range or a comma-separated list.",
                    "dimensionality": "matrix",
                    "name": "categories",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Classify the sentiment of text — a convenience form of AI.CLASSIFY with a default label set.",
            "id": "SENTIMENT",
            "name": "SENTIMENT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to judge.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Override the labels, as a range or comma-separated list. Defaults to positive, neutral, negative, mixed.",
                    "dimensionality": "matrix",
                    "name": "categories",
                    "optional": true,
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Classify text on an aspect you name, without supplying the categories — AI.CLASSIFY when you don't have the list. \"the industry\", \"the department\", \"the root cause\".",
            "id": "LABEL",
            "name": "LABEL",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to classify.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "What to label it on, e.g. \"the industry\" or \"the seniority level\".",
                    "name": "aspect",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Break feedback into aspect + sentiment pairs, spilled one per row — \"delivery / negative\", \"price / positive\". Goes past AI.SENTIMENT's single verdict.",
            "id": "ASPECT",
            "name": "ASPECT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The review, comment or feedback to analyse.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Apply every label from your list that fits — multi-label classification, spilled one per row.",
            "id": "TAG",
            "name": "TAG",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to label.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "The allowed labels, as a range or a comma-separated list.",
                    "dimensionality": "matrix",
                    "name": "labels",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Detect the dominant natural language of text.",
            "id": "DETECT",
            "name": "DETECT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to inspect.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Translate text into another language.",
            "id": "TRANSLATE",
            "name": "TRANSLATE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to translate.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "The target language, e.g. \"Thai\", \"Japanese\", \"Brazilian Portuguese\".",
                    "name": "language",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Summarise text.",
            "id": "SUMMARIZE",
            "name": "SUMMARIZE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to summarise.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Word budget for the summary. Defaults to 40.",
                    "name": "maxWords",
                    "optional": true,
                    "type": "number"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Rewrite text according to an instruction — proofread, shorten, change tone.",
            "id": "EDIT",
            "name": "EDIT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to rewrite.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "How to change it, e.g. \"fix the grammar\" or \"make it more formal\".",
                    "name": "instruction",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Normalise messy text into a consistent format — dates, phone numbers, names, addresses. For a fixed rule, Excel's built-in REGEXREPLACE costs nothing and never varies — e.g. =REGEXREPLACE(A2, \"\\D\", \"\") to strip everything but digits. Use this when the input is inconsistent enough to need judgement.",
            "id": "FORMAT",
            "name": "FORMAT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The value to normalise.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "The target format, e.g. \"YYYY-MM-DD\" or \"Firstname Lastname\".",
                    "name": "format_spec",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Replace personal and identifying details in text with bracketed placeholders. Best effort, not a guarantee — read the result before you rely on it.",
            "id": "REDACT",
            "name": "REDACT",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to scrub.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Narrow it to specific things, e.g. \"names and emails\". Omit to redact personal and identifying details generally.",
                    "name": "what",
                    "optional": true,
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Partially mask the personal information in text — keep the edges, hide the middle — so a value stays verifiable but not usable. peter@gmail.com becomes p***r@gmail.com. To remove it outright instead, use AI.REDACT.",
            "id": "ANONYMIZE",
            "name": "ANONYMIZE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to mask.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Narrow it to specific things, e.g. \"emails and phone numbers\". Omit to mask personal and identifying details generally.",
                    "name": "what",
                    "optional": true,
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Write a short title for a passage — a column label, a note heading, an email subject line.",
            "id": "TITLE",
            "name": "TITLE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to title.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "Word budget for the title. Defaults to 8.",
                    "name": "maxWords",
                    "optional": true,
                    "type": "number"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Score text against a criterion, from 0 to 100.",
            "id": "SCORE",
            "name": "SCORE",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The text to judge.",
                    "dimensionality": "matrix",
                    "name": "text",
                    "type": "any"
                },
                {
                    "description": "What to score it on, e.g. \"how positive the sentiment is\".",
                    "name": "criteria",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "number"
            }
        },
        {
            "description": "Score how semantically similar two pieces of text are, from 0 to 100.",
            "id": "SIMILARITY",
            "name": "SIMILARITY",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The first text.",
                    "dimensionality": "matrix",
                    "name": "textA",
                    "type": "any"
                },
                {
                    "description": "The second text.",
                    "dimensionality": "matrix",
                    "name": "textB",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "number"
            }
        },
        {
            "description": "Match a value against a list of candidates, tolerating spelling and formatting differences.",
            "id": "FUZZY",
            "name": "FUZZY",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The value to match.",
                    "dimensionality": "matrix",
                    "name": "value",
                    "type": "any"
                },
                {
                    "description": "The list to match against, as a range or comma-separated list.",
                    "dimensionality": "matrix",
                    "name": "candidates",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Answer a question using a live web search. Needs OpenRouter; works with any model there.",
            "id": "WEB",
            "name": "WEB",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "The question to research.",
                    "name": "prompt",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default. Any OpenRouter model will do — the search runs on OpenRouter's side and the results are fed to the model, so no special web-search capability is required. The Models tab badges the few models that can search on their own instead.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Ask a question about an image.",
            "id": "VISION",
            "name": "VISION",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "A public URL, or a data: URL, for the image.",
                    "name": "image_url",
                    "type": "string"
                },
                {
                    "description": "What you want to know about it.",
                    "name": "prompt",
                    "type": "string"
                },
                {
                    "description": "Model id to use instead of the default vision model.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "type": "string"
            }
        },
        {
            "description": "Get structured data back as a spilled table, described by a schema you write in plain language.",
            "id": "JSON",
            "name": "JSON",
            "options": {
                "requiresAddress": true
            },
            "parameters": [
                {
                    "description": "What data you want.",
                    "name": "prompt",
                    "type": "string"
                },
                {
                    "description": "The fields to return, e.g. \"name, country, population\".",
                    "dimensionality": "matrix",
                    "name": "schema",
                    "type": "any"
                },
                {
                    "description": "Model id to use instead of the default.",
                    "name": "model",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {
                "dimensionality": "matrix",
                "type": "string"
            }
        },
        {
            "description": "Look up a live market price — stocks, ETFs, indices, FX, crypto and commodities.",
            "id": "QUOTE",
            "name": "QUOTE",
            "parameters": [
                {
                    "description": "Ticker or pair. Stocks use the plain ticker (\"AAPL\", \"PTT.BK\"); gold is \"XAU/USD\", silver \"XAG/USD\", crude oil \"WTI/USD\" or \"BRENT/USD\", currencies \"USD/THB\", crypto \"BTC/USD\".",
                    "dimensionality": "matrix",
                    "name": "symbol",
                    "type": "any"
                },
                {
                    "description": "Which figure to return. Defaults to the latest price. Also accepts open, high, low, close, volume, previous_close, change, percent_change, high_52week, low_52week, name, currency, exchange, datetime, is_market_open.",
                    "name": "field",
                    "optional": true,
                    "type": "string"
                }
            ],
            "result": {}
        },
        {
            "description": "How much this Excel session has spent on OpenRouter so far, in US dollars.",
            "id": "COST",
            "name": "COST",
            "options": {
                "volatile": true
            },
            "parameters": [],
            "result": {
                "type": "number"
            }
        },
        {
            "description": "Current state of the AI functions: live or paused, which model, and how many cached results.",
            "id": "STATUS",
            "name": "STATUS",
            "options": {
                "volatile": true
            },
            "parameters": [],
            "result": {
                "type": "string"
            }
        }
    ]
}