MMSP
GitHub119

Tracer and playground

Save every turn to disk with one config field, and read it in a local viewer.

Trace a conversation

Set trace_id in the config. MMSP saves the full history and the config after every response, before it yields the stop event.

for await (const event of client.streamingResponseStateful({
  message: { role: "user", content_items: [{ type: "text.done", text: "Hello" }] },
  config: { trace_id: "agent1/conversation_001" },
})) {
  // ...
}
async for event in client.streaming_response_stateful(
    message={"role": "user", "content_items": [{"type": "text.done", "text": "Hello"}]},
    config={"trace_id": "agent1/conversation_001"},
):
    pass

Traces are written under cache, or under the directory named by the environment variable MMSP_CACHE_DIR. The id above writes two files:

File Holds
cache/agent1/conversation_001.json The full history and the config, as data
cache/agent1/conversation_001.txt The conversation as a readable transcript

.json and .txt are appended to the id as it is, so v1.2 writes v1.2.json. An id that is empty, absolute, or leads outside the cache directory, through .. or a symlink, raises UnsupportedParameterError before the request is sent.

There is no database and nothing to set up.

Read the traces

Start the viewer and open http://127.0.0.1:25750.

import { Tracer } from "@prismshadow/mmsp/integration/tracer";

new Tracer().startWebServer("127.0.0.1", 25750);
from mmsp.integration.tracer import Tracer

Tracer().start_web_server(host="127.0.0.1", port=25750)

Or start it from a shell (the TypeScript scripts run in src_ts of a clone of the repository):

npm run tracer
python -m mmsp.integration.tracer --cache_dir ./cache --host 127.0.0.1 --port 25750

Playground

The playground is a local chat page for trying a model by hand: pick a model, set the config, send messages, watch the events. Picking a model fills in its client type and the endpoint that client reaches, the environment's or the vendor's own; change either to try the model through another protocol or a gateway. List models adds what the endpoint serves as entries that keep the client type and endpoint they were listed with, plus the latest key; listing again with only another key adds nothing. Sending to another model, client type or endpoint starts a new conversation under a divider; the messages above it are not sent; a key or extra-headers edit continues the conversation. Open http://127.0.0.1:25751; the tracer is served at /tracer/ next to it. The server page at /server/ starts an MMSP server from a table saved to a config file.

import { startPlaygroundServer } from "@prismshadow/mmsp/integration/playground";

startPlaygroundServer("127.0.0.1", 25751);
from mmsp.integration.playground import start_playground_server

start_playground_server(host="127.0.0.1", port=25751)

From a shell:

npm run playground
python -m mmsp.integration.playground --host 127.0.0.1 --port 25751

Edit this page on GitHubOpen as Markdown