
Infographic Generation
- 188 installs
- 28 repo stars
- Updated April 21, 2026
- eachlabs/skills
Auto-generate branded infographics from data briefs for blogs, reports, and social posts so teams scale visual storytelling without commissioning a designer for every campaign.
About
Teaches agents to produce infographic visuals from structured copy and metrics using eachlabs generative pipelines—layout prompts, iconography choices, typography constraints, and export specs for blogs, decks, and social channels.
- Data-to-visual layout prompts
- Brand template slot filling
- Blog and report embed assets
- Social-ready export sizing
- Structured brief-to-image pipelines
Infographic Generation by the numbers
- 188 all-time installs (skills.sh)
- Ranked #635 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
npx skills add https://github.com/eachlabs/skills --skill infographic-generationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 188 |
|---|---|
| repo stars | ★ 28 |
| Last updated | April 21, 2026 |
| Repository | eachlabs/skills ↗ |
What it does
Auto-generate branded infographics from data briefs for blogs, reports, and social posts so teams scale visual storytelling without commissioning a designer for every campaign.
Files
Infographic Generation
Generate professional, visually compelling infographics using each::sense. This skill creates data-driven visual content optimized for presentations, reports, social media, and marketing materials.
Features
- Statistical Infographics: Data visualizations with charts, graphs, and key metrics
- Process/How-To Infographics: Step-by-step visual guides and tutorials
- Comparison Infographics: Side-by-side product, service, or concept comparisons
- Timeline Infographics: Historical events, project milestones, company history
- List Infographics: Top 10 lists, tips, features, and curated content
- Geographic/Map Infographics: Location-based data and regional statistics
- Hierarchical Infographics: Organizational charts, taxonomies, flowcharts
- Resume Infographics: Visual CVs and professional profiles
- Report Infographics: Annual reports, quarterly summaries, research findings
- Social Media Infographics: Platform-optimized visual content for engagement
Quick Start
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a statistical infographic showing global renewable energy adoption rates with bar charts and key statistics"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'Infographic Types & Best Practices
| Type | Best For | Key Elements |
|---|---|---|
| Statistical | Data presentation, research findings | Charts, graphs, percentages, icons |
| Process | Tutorials, workflows, instructions | Numbered steps, arrows, icons |
| Comparison | Product comparisons, decision guides | Side-by-side layout, checkmarks, ratings |
| Timeline | History, roadmaps, project plans | Linear flow, dates, milestones |
| List | Tips, features, rankings | Numbers, bullet points, icons |
| Geographic | Regional data, market analysis | Maps, location markers, regional stats |
| Hierarchical | Org charts, taxonomies, structures | Tree diagrams, boxes, connectors |
| Resume | Job applications, portfolios | Skills bars, timeline, icons |
| Report | Business summaries, analytics | Multiple sections, KPIs, graphs |
| Social Media | Engagement, sharing | Platform dimensions, bold text, simple graphics |
Use Case Examples
1. Statistical Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a statistical infographic about global coffee consumption. Include: bar chart showing top 5 consuming countries, pie chart of coffee types (espresso, latte, cappuccino, etc.), key stats like 2.25 billion cups consumed daily, and icons representing coffee culture. Modern minimal design with warm brown and cream color palette. Portrait orientation."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'2. Process/How-To Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a how-to infographic for making sourdough bread. Show 8 steps: 1) Create starter, 2) Feed starter, 3) Mix dough, 4) Autolyse, 5) Stretch and fold, 6) Bulk ferment, 7) Shape and proof, 8) Bake. Use illustrated icons for each step, numbered circles, arrows showing flow. Rustic warm color scheme. Vertical layout."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'3. Comparison Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a comparison infographic: Electric Cars vs Gas Cars. Compare: Initial cost, Fuel/charging costs, Maintenance costs, Environmental impact, Range, Charging/refueling time. Use side-by-side layout with green for electric and gray for gas. Include icons for each category, checkmarks for advantages. Clean modern design."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'4. Timeline Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a timeline infographic showing the history of artificial intelligence. Key milestones: 1950 Turing Test proposed, 1956 Dartmouth Conference (AI term coined), 1966 ELIZA chatbot, 1997 Deep Blue beats Kasparov, 2011 IBM Watson wins Jeopardy, 2012 Deep Learning breakthrough, 2016 AlphaGo beats Lee Sedol, 2022 ChatGPT released. Horizontal timeline with alternating above/below entries, tech-inspired blue color scheme, circuit board design elements."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'5. List Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a list infographic: Top 10 Productivity Tips for Remote Workers. Include: 1) Create dedicated workspace, 2) Set regular hours, 3) Take scheduled breaks, 4) Use time-blocking, 5) Minimize distractions, 6) Dress for work, 7) Stay connected with team, 8) Set boundaries, 9) Exercise daily, 10) End work ritual. Use numbered list format with icons for each tip, modern gradient purple and blue color scheme, clean typography."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'6. Geographic/Map Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a geographic infographic showing internet penetration rates across continents. Include a world map with color-coded regions: North America 93%, Europe 89%, South America 75%, Asia 64%, Africa 43%. Add data callouts for top 5 countries by users. Use a tech-inspired blue gradient for high penetration to gray for low. Include legend and source citation area."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'7. Hierarchical Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a hierarchical infographic showing a typical tech startup organizational structure. CEO at top, branching to: CTO (with Engineering Manager, then Frontend/Backend/DevOps teams), CPO (with Product Managers, UX Designers), CFO (with Finance, HR), CMO (with Marketing, Sales). Use tree diagram format with connecting lines, professional corporate blue and gray colors, rounded rectangles for each role, icons representing each department."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'8. Resume Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a visual resume infographic for a UX Designer. Include sections: Profile summary with placeholder for photo, Skills with horizontal progress bars (Figma 95%, User Research 90%, Prototyping 85%, HTML/CSS 70%), Work experience as vertical timeline (2020-2023 Senior UX at TechCorp, 2017-2020 UX Designer at StartupXYZ), Education icons, Contact info with icons. Modern minimalist design, teal and dark gray color scheme, A4 portrait."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'9. Report Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create an annual report infographic for a SaaS company. Include: Header with company logo placeholder and year 2024, Key metrics section (Revenue $12M up 45%, Customers 5,000+ up 60%, Team size 85 up 30%, NPS score 72), Revenue growth line chart, Customer acquisition funnel, Geographic expansion map showing presence in 25 countries, Product milestones timeline. Professional corporate design, navy blue and gold accent colors."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'10. Social Media Infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a square 1:1 social media infographic about benefits of meditation. Title: 5 Science-Backed Benefits of Daily Meditation. Points: 1) Reduces stress hormones by 23%, 2) Improves focus and concentration, 3) Better sleep quality, 4) Lower blood pressure, 5) Increased emotional well-being. Bold readable text, calming purple and teal gradient background, simple icons for each benefit, Instagram-optimized with high contrast for mobile viewing."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'Multi-Turn Creative Iteration
Use session_id to iterate on infographic designs:
# Initial infographic
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create an infographic about climate change impacts with key statistics and a world map"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "climate-infographic-001"
}'
# Iterate based on feedback
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Add more emphasis on ocean temperature data and include a temperature anomaly chart"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "climate-infographic-001"
}'
# Request color variation
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create an alternate version with a warmer color palette using oranges and reds to emphasize urgency"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "climate-infographic-001"
}'Batch Generation for A/B Testing
Generate multiple infographic variations:
# Variation A - Minimalist style
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a minimalist infographic about healthy eating habits, white background, simple line icons, lots of whitespace"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco"
}'
# Variation B - Bold colorful style
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a bold colorful infographic about healthy eating habits, vibrant gradients, filled icons, energetic design"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco"
}'
# Variation C - Corporate professional style
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a corporate professional infographic about healthy eating habits, navy and gray colors, formal typography, business report style"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco"
}'Best Practices
Design Principles
- Visual Hierarchy: Use size, color, and positioning to guide the viewer's eye
- Consistency: Maintain consistent icons, colors, and typography throughout
- White Space: Don't overcrowd; let elements breathe
- Data Accuracy: Represent data proportionally and accurately
- Readability: Use sufficient contrast and readable font sizes
Content Guidelines
- One Key Message: Focus on a single main takeaway
- Scannable: Design for quick scanning with clear headers
- Source Citations: Include data sources for credibility
- Call to Action: Include next steps when appropriate
Platform Optimization
| Platform | Recommended Size | Notes |
|---|---|---|
| 1000x1500 (2:3) | Tall format performs best | |
| Instagram Feed | 1080x1080 (1:1) | Square for feed |
| Instagram Stories | 1080x1920 (9:16) | Full screen vertical |
| 1200x627 (1.91:1) | Horizontal for feed | |
| Twitter/X | 1200x675 (16:9) | Horizontal format |
| Blog/Web | 800x2000+ | Long-form vertical |
| Presentation | 1920x1080 (16:9) | Slide format |
Prompt Tips for Infographics
When creating infographics, include these details in your prompt:
1. Type: Specify infographic type (statistical, process, timeline, etc.) 2. Topic: Clearly describe the subject matter 3. Data Points: Provide specific numbers, statistics, or content items 4. Layout: Mention orientation (portrait/landscape) and structure 5. Style: Describe desired aesthetic (minimal, bold, corporate, playful) 6. Colors: Specify color palette or brand colors 7. Platform: Mention intended use (social media, presentation, print)
Example Prompt Structure
"Create a [type] infographic about [topic].
Include: [specific data points, sections, or elements].
Layout: [orientation and structure].
Style: [aesthetic description].
Colors: [color palette].
For: [intended platform/use]."Mode Selection
Ask your users before generating:
"Do you want fast & cheap, or high quality?"
| Mode | Best For | Speed | Quality |
|---|---|---|---|
max | Final designs, client presentations, print materials | Slower | Highest |
eco | Quick drafts, concept exploration, A/B testing | Faster | Good |
Error Handling
| Error | Cause | Solution |
|---|---|---|
Failed to create prediction: HTTP 422 | Insufficient balance | Top up at eachlabs.ai |
| Content policy violation | Prohibited content | Adjust prompt content |
| Timeout | Complex generation | Set client timeout to minimum 10 minutes |
Related Skills
each-sense- Core API documentationdata-visualization- Charts and graphspresentation-design- Slide decks and pitch materialssocial-media-graphics- Platform-optimized visuals
SSE Event Reference
Detailed documentation for all Server-Sent Events (SSE) returned by the each::sense /v1/chat/completions endpoint.
Event Format
Events are wrapped in OpenAI chat.completion.chunk format with an eachlabs extension field:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","choices":[{"delta":{"content":""}}],"eachlabs":{"type":"event_type",...}}\n\nStream ends with:
data: [DONE]\n\n---
Event Types (18 Total)
thinking_delta
AI reasoning streamed in real-time. Use this to show users what the AI is thinking.
{
"type": "thinking_delta",
"content": "Let me find the best model for portrait generation..."
}| Field | Type | Description |
|---|---|---|
content | string | Incremental thinking text |
---
text_response
Assistant message content (explanations, answers, plans).
{
"type": "text_response",
"content": "I'll create a stunning portrait for you with cinematic lighting and a warm mood."
}| Field | Type | Description |
|---|---|---|
content | string | Text response content |
---
status
Current operation being executed. Shows tool usage and parameters.
{
"type": "status",
"message": "Searching for image generation models...",
"tool_name": "search_models",
"parameters": {"use_case": "text to image portrait"}
}| Field | Type | Description |
|---|---|---|
message | string | Human-readable status message |
tool_name | string | Internal tool being used |
parameters | object | Tool parameters (optional) |
---
tool_call
Details of a tool being called. Useful for debugging and transparency.
{
"type": "tool_call",
"name": "execute_model",
"input": {
"model_name": "flux-2-max",
"inputs": {
"prompt": "A beautiful woman portrait...",
"aspect_ratio": "1:1"
}
}
}| Field | Type | Description |
|---|---|---|
name | string | Tool name |
input | object | Tool input parameters |
---
message
Informational message from the agent.
{
"type": "message",
"content": "Your video is being processed. This typically takes 2-3 minutes."
}| Field | Type | Description |
|---|---|---|
content | string | Message content |
---
progress
Progress update with percentage completion.
{
"type": "progress",
"message": "Generating image...",
"percent": 65
}| Field | Type | Description |
|---|---|---|
message | string | Progress description |
percent | number | Completion percentage |
---
generation_response
Generated media URL (image, video, audio). This is the primary output event.
{
"type": "generation_response",
"url": "https://storage.eachlabs.ai/outputs/abc123.png",
"generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
"model": "flux-2-max",
"execution_time_ms": 8500
}| Field | Type | Description |
|---|---|---|
url | string | Primary output URL |
generations | array | All generated URLs |
model | string | Model used for generation |
execution_time_ms | number | Processing time in milliseconds |
---
clarification_needed
AI needs more information to proceed. Present options to the user.
{
"type": "clarification_needed",
"question": "What type of edit would you like to make to this image?",
"options": [
"Remove the background",
"Apply a style transfer",
"Upscale to higher resolution",
"Add or modify elements"
],
"context": "I can see you've uploaded an image, but I need to understand what changes you'd like.",
"requires_response": true
}| Field | Type | Description |
|---|---|---|
question | string | The question to ask the user |
options | array | Suggested options (can be displayed as buttons) |
context | string | Additional context about the clarification |
requires_response | boolean | Whether a response is required to proceed |
Handling: Display the question and options to the user. Send their response in a follow-up request with the same session_id.
---
web_search_query
Web search being executed.
{
"type": "web_search_query",
"query": "best AI video generation models 2024",
"recency": "month"
}| Field | Type | Description |
|---|---|---|
query | string | Search query |
recency | string | Time filter (day, week, month, year) |
---
web_search_citations
Citations from web search results.
{
"type": "web_search_citations",
"citations": [
{"title": "AI Video Comparison", "url": "https://example.com/ai-video", "snippet": "..."}
]
}| Field | Type | Description |
|---|---|---|
citations | array | Array of objects with title, url, snippet |
---
workflow_created
New workflow was created for complex multi-step generation.
{
"type": "workflow_created",
"workflow_id": "wf_abc123",
"version_id": "v1",
"steps_count": 5
}| Field | Type | Description |
|---|---|---|
workflow_id | string | Unique workflow identifier |
version_id | string | Workflow version |
steps_count | number | Number of steps in workflow |
---
workflow_fetched
Existing workflow was loaded (when workflow_id is provided in request).
{
"type": "workflow_fetched",
"workflow_name": "Product Video Generator",
"existing_steps": 3,
"existing_definition": {}
}| Field | Type | Description |
|---|---|---|
workflow_name | string | Name of the workflow |
existing_steps | number | Number of existing steps |
existing_definition | object | Current workflow definition |
---
workflow_built
Workflow definition was constructed.
{
"type": "workflow_built",
"steps_count": 4,
"definition": {
"version": "v1",
"input_schema": {},
"steps": []
}
}| Field | Type | Description |
|---|---|---|
steps_count | number | Number of steps |
definition | object | Full workflow definition |
---
workflow_updated
Workflow was pushed to the EachLabs API.
{
"type": "workflow_updated",
"success": true,
"workflow_id": "wf_abc123",
"version_id": "v1",
"definition": {}
}| Field | Type | Description |
|---|---|---|
success | boolean | Whether update succeeded |
workflow_id | string | Workflow identifier |
version_id | string | Version identifier |
definition | object | Updated definition |
---
execution_started
Workflow execution has begun.
{
"type": "execution_started",
"execution_id": "exec_xyz789",
"workflow_id": "wf_abc123"
}| Field | Type | Description |
|---|---|---|
execution_id | string | Unique execution identifier |
workflow_id | string | Workflow being executed |
---
execution_progress
Progress update during workflow execution.
{
"type": "execution_progress",
"step_id": "step2",
"completed_steps": 2,
"total_steps": 5
}| Field | Type | Description |
|---|---|---|
step_id | string | Current step identifier |
completed_steps | number | Steps completed so far |
total_steps | number | Total steps in workflow |
---
execution_completed
Workflow execution finished.
{
"type": "execution_completed",
"execution_id": "exec_xyz789",
"output": "https://storage.eachlabs.ai/outputs/final.mp4",
"all_outputs": {
"step1": "https://storage.eachlabs.ai/outputs/step1.png",
"step2": "https://storage.eachlabs.ai/outputs/step2.png",
"step3": "https://storage.eachlabs.ai/outputs/final.mp4"
},
"total_time_ms": 45000
}| Field | Type | Description |
|---|---|---|
execution_id | string | Execution identifier |
output | string | Final output URL |
all_outputs | object | All step outputs keyed by step_id |
total_time_ms | number | Total execution time in milliseconds |
---
complete
Final event with summary. Always sent when stream completes.
{
"type": "complete",
"task_id": "chat_1708345678901",
"status": "ok",
"generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
"model": "flux-2-max"
}| Field | Type | Description |
|---|---|---|
task_id | string | Unique task identifier |
status | string | Final status (ok, error, clarification_needed) |
generations | array | All generated output URLs |
model | string | Primary model used |
Status values:
ok- Completed successfullyclarification_needed- Waiting for user clarificationerror- An error occurred
---
error
An error occurred during processing.
{
"type": "error",
"message": "Failed to generate image: Invalid aspect ratio",
"error_code": "INVALID_INPUT",
"details": {}
}| Field | Type | Description |
|---|---|---|
message | string | Error message |
error_code | string | Error code identifier |
details | object | Additional error details |
---
Event Flow Examples
Simple Image Generation
thinking_delta → "I'll create a beautiful portrait..."
status → "Searching for models..."
status → "Getting model details..."
text_response → "Here's your generated image..."
generation_response → {url: "https://...", model: "flux-2-max", execution_time_ms: 8500}
complete → {status: "ok", generations: [...]}
[DONE]Clarification Flow
thinking_delta → "I see an image, but need to know what edit..."
clarification_needed → {question: "What edit?", options: [...]}
complete → {status: "clarification_needed"}
[DONE]Workflow Execution
thinking_delta → "Creating a multi-step workflow..."
status → "Searching for models..."
workflow_created → {workflow_id: "wf_123", steps_count: 5}
execution_started → {execution_id: "exec_456"}
execution_progress → {completed_steps: 1, total_steps: 5}
execution_progress → {completed_steps: 2, total_steps: 5}
execution_progress → {completed_steps: 3, total_steps: 5}
execution_progress → {completed_steps: 4, total_steps: 5}
execution_completed → {output: "https://...", all_outputs: {...}, total_time_ms: 45000}
complete → {status: "ok"}
[DONE]Web Search
thinking_delta → "Let me search for current information..."
web_search_query → {query: "best AI models 2024"}
status → "Searching the web..."
web_search_citations → {citations: [{title, url, snippet}, ...]}
text_response → "Based on current information..."
complete → {status: "ok"}
[DONE]