generate_research_report
Answer an OPEN-ENDED or THEMATIC research QUESTION (extensible, multi-section).
===> THE RIGHT TOOL when the user's intent is a QUESTION rather than a request for an
existing report — an exploratory or thesis-style ask about a ticker, or a market-wide
theme not tied to one company (e.g. "Are large caps driving earnings season?",
"What's the bull/bear case on NVDA?", "high-growth semis with rising estimates").
For a plain "get me the latest report/research on <ticker>", use `get_latest_report`
instead. This is the slow, professional DEEP-DIVE — reach for it only when the user
EXPLICITLY asks for a full writeup, not for an ordinary exploratory question.
If the user only wants to EXPLORE the data or "use Flexreport to explore...", do NOT
start here — call `explore_data_catalogue` first (interactive charts/tables, usually a
few minutes rather than ~10-12) and
reach for THIS deep-dive only later, once the user has reviewed the exploration and
EXPLICITLY asks for the full report. Never run both for the same question at once.
Rate-limited to 20/hour per user server-side.
Asynchronous: returns {"task_id": "...", "status": "PENDING"}. Poll with
`get_task_status` until SUCCESS, then read its `result`.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The research question in natural language, e.g. "high-growth semis with rising estimates". | |
| delivery | No | Delivery channel for the finished report, e.g. "email" or "dashboard". |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Task state at dispatch, normally "PENDING". | |
| task_id | Yes | Celery task id; poll it with get_task_status until SUCCESS. |