Metadata

Metadata is arbitrary structured data (string keys, JSON-serializable values) attached to traces. It helps you filter and understand production traffic in the Noryen UI.

Per-event metadata

Pass metadata on each track() call:

track.ts
noryen.track({
model: "gpt-4o-mini",
prompt: "Hello",
response: "Hi!",
metadata: {
userId: "usr_123",
feature: "chat",
deployment: "eu-west",
},
});

Good candidates: internal user or tenant ids (non-PII where possible), feature flags, request route names, environment names, and correlation ids.

Global context with setContext

noryen.setContext(metadata) merges into a client-wide map. Every subsequent track() (including wrapper emissions) merges: global context first, then per-event metadata, so per-event keys override globals on conflict.

context.ts
noryen.setContext({
service: "billing-worker",
version: process.env.APP_VERSION,
});
// Later events merge global context with per-event metadata
noryen.track({
model: "gpt-4o-mini",
prompt: "…",
response: "…",
metadata: { step: "invoice_summary" },
});
// Effective metadata includes service, version, and step

Wrapper-level metadata

When using wrappers, you can pass metadata in WrapOptions so every wrapped call includes the same fields:

wrap-options.ts
const client = noryen.wrapOpenAI(openai, {
metadata: { route: "api/chat" },
});
Avoid storing secrets, full prompts with sensitive data, or regulated health/financial payloads in metadata if your compliance policy restricts logging—metadata is sent to Noryen with the trace batch.