Summit Many models, one room
Menu

Enter to send · Shift+Enter for a new line · Esc to stop · type @ to pick who answers

Participants

Each participant is one model or agent with its own role. API keys are stored only in this browser and sent only to the endpoint you enter — Happy Light has no server in between and never sees them.

Search endpoint

Happy Light Search only answers signed-in users, and your browser sends that sign-in automatically because Summit is on the same domain. If a search fails, sign in at portal.happylight.io and try again. Your own SearXNG must allow this site as an origin.

Share room with AI

An AI reads this room's setup — its name, mode, members, their models and system prompts — from a private link on api.happylight.io, and sends back an edited version. You review it before anything changes. API keys and messages are never shared. This is the one Summit feature that uploads anything to Happy Light; the copy is deleted when the link expires or you stop sharing.

Proposed room change


  

How Summit works

One room, several models

Add participants, then talk. Write @name to address one participant, or @all for everyone. Without a mention the room's setting decides: the first participant answers, everyone answers in turn, or they debate for a number of rounds. Each model sees the whole conversation, with every other speaker's messages labelled by name.

Your keys, your browser

Summit has no server. Rooms, messages and API keys are stored in this browser only, and each request goes directly from this page to the endpoint you entered. Exports never contain keys. Anything you type is sent to the providers of the participants that answer — their terms apply.

One opt-in exception: Share room with AI (a Happy Light plan feature) uploads a room's setup — name, mode, members, models, system prompts — to api.happylight.io under a private link, so an AI can propose changes you review. Never keys, never messages. The copy is deleted when the link expires or you stop sharing.

When a provider cannot be reached

Browsers only allow a web page to call servers that opt in (CORS). If a provider refuses, use the same model through OpenRouter, or run a small proxy on your own machine. For Ollama, start it with OLLAMA_ORIGINS set to this site's address; in LM Studio, enable CORS in the server settings.

A remote Ollama needs both halves: OLLAMA_ORIGINS must list https://summit.happylight.io, and its reverse proxy must let the unauthenticated OPTIONS preflight through — a proxy that answers the preflight with 401 blocks the request before any credentials are ever sent. Put a username and password in front of it and set this participant's Authentication to Username and password (HTTP Basic).

Tools

Switch on May use tools for a participant and it can search the web while it answers. The model asks for a search, your browser performs it, and the results go back to the model; each search shows in the transcript, so you can see what was searched and open the sources yourself. Tools are off for every participant until you turn them on.

Search results are untrusted text. They are quoted from web pages, and a page can contain writing that tries to instruct a model reading it. Summit labels every result as data rather than instructions, but treat a tool-assisted answer as a lead to verify, not a fact. Never wire a tool-using participant to anything you would not let a stranger's web page influence.

Each reply allows a few tool steps (four by default) and then stops, so a confused model cannot loop forever. A local model on a small GPU can take minutes per step; Stop ends the whole loop.

Custom agent webhook

Any agent behind a URL can join. Summit sends:

POST <your URL>
Content-Type: application/json
Authorization: Bearer <key>                 (only if you set a key)
X-Summit-Signature: t=<unix>,v1=<hex>      (only if you set a secret)

{
  "schema": "happylight.summit.agent/1",
  "room": { "id": "…", "name": "…" },
  "participant": { "id": "…", "name": "…" },
  "system": "…",
  "messages": [
    { "role": "user", "content": "[René]: hello" },
    { "role": "assistant", "name": "…", "content": "…" }
  ]
}

A webhook agent needs no tool protocol. If a tool-using participant in the room searched, the exchange arrives as ordinary turns: the request as an assistant turn ending in [requested tools: web_search(…)], and the result as a user turn named tool:web_search.

Reply with application/json {"content": "…"}, or stream plain text, or stream text/event-stream with data: {"delta": "…"} lines. Your server must answer the CORS preflight: allow this site's origin, the POST method and the headers content-type, authorization, x-summit-signature.

The signature is HMAC-SHA256, keyed by your secret, over <t>.<raw body>. Recompute it over the exact bytes you received and reject old timestamps.