Skip to content

v2.11.0 — Agentic chat · Claude/ChatGPT for your lights

Choose a tag to compare

@gfargo gfargo released this 17 May 03:13
· 29 commits to main since this release
2ae92a0

Highlights

The Chat tab is now the default landing on the web UI. Replaces the v2.2-era one-shot interpreter with a proper Claude/ChatGPT-style conversation where the LLM has access to 39 lighting tools and plans multi-step operations autonomously.

Every web-UI user now gets the same agentic power MCP clients have had since v2.2.

What the user sees

You:   Set up three-point lighting with tungsten key, daylight fill,
       magenta back, and save it as photoshoot.

Agent: [list_groups]      → 3 groups: key-lights, fill-lights, back-lights ✓
       [palette]          → key:3200 fill:5600 back:magenta · 8 fixtures ✓
       [snapshot_scene]   → Scene 14 saved · workspace updated ✓

       Done. Three-point setup applied and saved as 'photoshoot' —
       tungsten key, daylight fill, magenta back. Recall it any time
       with activate_scene.

Tool calls render inline as collapsible cards (mono code, tungsten amber for tool name, error styling for failures). Conversation persists across page reloads in localStorage.

Backend — POST /api/chat

  • 39-tool curated registry mirroring the MCP catalog. Schemas declared once, consumed by both Anthropic and OpenAI loops.
  • Tools dispatch internally via Flask's test_client into our own endpoints — so behavior matches MCP exactly with no code duplication.
  • Anthropic loop: native tool_use blocks, bounded max_iters=10. System prompt teaches the agent which abstractions to prefer (palette / color_temperature / apply_template over set_channel).
  • OpenAI loop: translates between Anthropic-shaped messages and OpenAI's function-calling shape, keeps history in Anthropic-style for the client.
  • Ollama not supported — tool-calling varies too much by model.
  • Stateless: client owns the conversation history.

Frontend — new Chat tab

  • Default tab is now Chat. Old AI Control tab renamed to Quick Commands and preserved for users who like the one-shot pattern.
  • Message bubbles (user right, assistant left), tool calls as collapsible inline cards
  • Composer: textarea with Enter-to-send / Shift-Enter-for-newline, Clear button
  • Welcome screen with 4 suggestion chips: Show me my rig / Three-point lighting / Sunset cue list / Diagnose the rig
  • "Thinking…" pending indicator
  • Auto-refreshes the relevant list tabs when the agent's tools mutate them (creates a group → drawer updates, saves a scene → grid updates)

Tool surface (39 curated, vs MCP's 48)

Category Tools
Discovery (9) list_fixtures, list_groups, list_scenes, list_templates, list_chases, list_cue_lists, get_active_cue_lists, get_channel_values, get_status
Quick actions (10) activate_scene, apply_template, adjust_brightness, adjust_color, color_temperature, palette, strobe, fade, blackout, generate_scene, snapshot_scene
Scene mgmt (4) describe_scene, delete_scene, rename_scene, duplicate_scene
Group mgmt (5) create_group, delete_group, update_group, add_fixtures_to_group, remove_fixtures_from_group
Chases (5) describe_chase, create_chase, delete_chase, start_chase, stop_chase
Cue lists (5) describe_cue_list, create_cue_list, delete_cue_list, go_cue_list, stop_cue_list
Diagnostics (3) get_system_info, test_dmx, get_logs
Setup (1) identify_fixture

Omitted intentionally:

  • set_channel — power-user escape hatch, agent shouldn't need it
  • batch_action — the agent's tool-use loop is the batching mechanism
  • update_cue_list — agent can delete + create; smaller surface
  • save_scene with raw scene_xml — snapshot_scene is friendlier

Configuration

Add to .env:

AI_PROVIDER=anthropic        # or openai
AI_API_KEY=sk-...
AI_MODEL=claude-3-5-sonnet-20241022   # or gpt-4.1, etc.

No new package dependencies. Reuses the existing requests library.

Upgrade

git pull
./lightsctl.sh control-restart   # picks up /api/chat + new UI template

Compatibility

  • No breaking changes. Every existing endpoint, MCP tool, and UI feature behaves identically.
  • New route /api/chat is additive — previously unused path.
  • The old AI Control tab (one-shot /api/command) is renamed to Quick Commands but functionally unchanged. Power users who prefer the simple shape can keep using it.
  • Chat history is in localStorage (lp_chat_history_v1), client-side. Survives page reloads; doesn't sync across devices.

Documentation

  • README.md — new "Agentic Chat (v2.11+)" section
  • docs/CONTROL_SERVER_ARCHITECTURE.md/api/chat endpoint documented with shape + provider matrix + tool dispatch model
  • Wiki Control-Server updated with the new Chat tab + endpoint
  • Marketing FAQ — new "Is there a chat interface like Claude or ChatGPT but for my lights?" entry

What's intentionally NOT in this release

  • Streaming responses — server returns the full final state after the loop completes. Streaming would require SSE / chunked transfer, which composes naturally with #10 (SSE event stream) when that ships.
  • Mid-conversation tool approval — agent acts immediately on tool calls. A "this is a destructive action, confirm?" gate would be the obvious next step for production deployments.
  • Server-side session storage — purely client-side via localStorage. Server-side sessions would enable cross-device continuity but add state management. Easy follow-up.

Roadmap status

Tier 3 remaining:

  • #10 — SSE event stream (would also unlock streaming chat responses)
  • #11 — Multi-workspace switching
  • #12 — Audio-reactive mode