inngest 4.8.0 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # inngest
2
2
 
3
+ ## 4.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1594](https://github.com/inngest/inngest-js/pull/1594) [`124e55f8`](https://github.com/inngest/inngest-js/commit/124e55f8d159af9145a073c9756a6281da60185b) Thanks [@scottnuma](https://github.com/scottnuma)! - Expand AI step metadata extraction to more OTel GenAI span attributes. The SDK now records additional model, provider, response id, token, and request parameter fields from OTel GenAI spans while continuing to ignore prompt and response content.
8
+
9
+ This removes the previous metadata extraction for Open Inference, Vercel AI SDK-specific, and Langfuse-specific span attributes.
10
+
3
11
  ## 4.8.0
4
12
 
5
13
  ### Minor Changes
@@ -1,155 +1,120 @@
1
1
 
2
2
  //#region src/components/execution/otel/aiExtractor.ts
3
+ function textField(field, source) {
4
+ return {
5
+ field,
6
+ source,
7
+ valueType: "text",
8
+ merge: "replace"
9
+ };
10
+ }
11
+ function numberField(field, source, merge) {
12
+ return {
13
+ field,
14
+ source,
15
+ valueType: "number",
16
+ merge
17
+ };
18
+ }
3
19
  /**
4
- * A `convention` identifies a namespace of AI span attributes and orders which
5
- * should win when multiple namespaces are present on the same span. Lower
6
- * numbers override higher numbers.
7
- */
8
- var Convention = /* @__PURE__ */ function(Convention$1) {
9
- Convention$1[Convention$1["Langfuse"] = 1] = "Langfuse";
10
- Convention$1[Convention$1["Semconv"] = 2] = "Semconv";
11
- Convention$1[Convention$1["OpenInference"] = 3] = "OpenInference";
12
- Convention$1[Convention$1["Vercel"] = 4] = "Vercel";
13
- return Convention$1;
14
- }(Convention || {});
15
- /**
16
- * Prefix for the synthetic attributes produced by
17
- * {@link expandLangfuseUsageDetails}, kept distinct from any real attribute
18
- * namespace.
19
- */
20
- const langfuseUsagePrefix = "__langfuse.usage_details.";
21
- /**
22
- * Parses the `langfuse.observation.usage_details` JSON blob (e.g.
23
- * `{"input":17,"output":36,"total":53}`) and emits a synthetic scalar
24
- * attribute for each count we track. Only `input` is emitted; the other counts
25
- * (output, total, cached, reasoning, …) are intentionally dropped since this
26
- * extractor tracks input tokens alone.
27
- */
28
- const expandLangfuseUsageDetails = (value) => {
29
- if (typeof value !== "string" || value === "") return {};
30
- let counts;
31
- try {
32
- counts = JSON.parse(value);
33
- } catch {
34
- return {};
35
- }
36
- if (typeof counts !== "object" || counts === null) return {};
37
- const input = counts.input;
38
- if (typeof input !== "number") return {};
39
- return { [`${langfuseUsagePrefix}input`]: input };
40
- };
41
- /**
42
- * Maps a source attribute key to the canonical {@link AIMetadata} field it
43
- * populates and the convention it belongs to.
20
+ * Every `gen_ai.*` attribute we capture, mapped to its canonical field.
21
+ *
22
+ * Anything not listed here (prompt/response content, messages, tool calls,
23
+ * unknown keys) is ignored.
44
24
  */
45
- const keyFieldMap = {
46
- "langfuse.observation.usage_details": {
47
- convention: Convention.Langfuse,
48
- expand: expandLangfuseUsageDetails
49
- },
50
- [`${langfuseUsagePrefix}input`]: {
51
- field: "inputTokens",
52
- convention: Convention.Langfuse
53
- },
54
- "gen_ai.request.model": {
55
- field: "model",
56
- convention: Convention.Semconv
57
- },
58
- "gen_ai.usage.input_tokens": {
59
- field: "inputTokens",
60
- convention: Convention.Semconv
61
- },
62
- "llm.model_name": {
63
- field: "model",
64
- convention: Convention.OpenInference
65
- },
66
- "llm.token_count.prompt": {
67
- field: "inputTokens",
68
- convention: Convention.OpenInference
69
- },
70
- "ai.model.id": {
71
- field: "model",
72
- convention: Convention.Vercel
73
- },
74
- "ai.usage.inputTokens": {
75
- field: "inputTokens",
76
- convention: Convention.Vercel
77
- },
78
- "ai.usage.tokens": {
79
- field: "inputTokens",
80
- convention: Convention.Vercel
81
- }
82
- };
25
+ const FIELD_SPECS = [
26
+ textField("requestModel", "gen_ai.request.model"),
27
+ textField("responseModel", "gen_ai.response.model"),
28
+ textField("provider", "gen_ai.provider.name"),
29
+ textField("responseId", "gen_ai.response.id"),
30
+ numberField("inputTokens", "gen_ai.usage.input_tokens", "sum"),
31
+ numberField("outputTokens", "gen_ai.usage.output_tokens", "sum"),
32
+ numberField("totalTokens", "gen_ai.usage.total_tokens", "sum"),
33
+ numberField("cacheReadTokens", "gen_ai.usage.cache_read.input_tokens", "sum"),
34
+ numberField("cacheCreationTokens", "gen_ai.usage.cache_creation.input_tokens", "sum"),
35
+ numberField("reasoningTokens", "gen_ai.usage.reasoning.output_tokens", "sum"),
36
+ numberField("temperature", "gen_ai.request.temperature", "replace"),
37
+ numberField("topP", "gen_ai.request.top_p", "replace"),
38
+ numberField("maxTokens", "gen_ai.request.max_tokens", "replace"),
39
+ numberField("frequencyPenalty", "gen_ai.request.frequency_penalty", "replace"),
40
+ numberField("presencePenalty", "gen_ai.request.presence_penalty", "replace"),
41
+ numberField("seed", "gen_ai.request.seed", "replace")
42
+ ];
43
+ function parseNumericAttribute(value) {
44
+ if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
45
+ if (typeof value !== "string" || value === "") return;
46
+ const num = Number(value);
47
+ return Number.isFinite(num) ? num : void 0;
48
+ }
83
49
  /**
84
- * Extracts AI model metadata from a span's attributes.
50
+ * Extracts {@link AIMetadata} from a span's attributes.
51
+ *
52
+ * Only the allowlisted {@link FIELD_SPECS} are read. Every other attribute is
53
+ * ignored. Numeric fields accept numbers and quoted numeric strings and are
54
+ * otherwise dropped, as OTLP/JSON may encode int64 as a quoted string. Text
55
+ * fields are dropped when empty.
85
56
  *
86
- * Attributes are matched across multiple instrumentation conventions
87
- * (OpenTelemetry semconv, OpenInference, Vercel AI SDK). When more than one
88
- * convention supplies the same field, the highest-precedence value wins.
57
+ * Returns an empty object for spans carrying no recognised `gen_ai.*`
58
+ * attributes.
89
59
  *
90
60
  * @param attributes - The span attributes, as exposed by
91
61
  * `ReadableSpan.attributes`.
92
62
  */
93
63
  const extractAIMetadataFromAttributes = (attributes) => {
94
- const candidates = {};
95
- const record = (mapping, value) => {
96
- if (!mapping.field) return;
97
- const existing = candidates[mapping.field];
98
- if (!existing || mapping.convention < existing.convention) candidates[mapping.field] = {
99
- value,
100
- convention: mapping.convention
101
- };
102
- };
103
- for (const [key, value] of Object.entries(attributes)) {
64
+ const metadata = {};
65
+ for (const spec of FIELD_SPECS) {
66
+ const value = attributes[spec.source];
104
67
  if (value === void 0) continue;
105
- const mapping = keyFieldMap[key];
106
- if (!mapping) continue;
107
- if (mapping.expand) {
108
- for (const [childKey, childValue] of Object.entries(mapping.expand(value))) {
109
- const childMapping = keyFieldMap[childKey];
110
- if (childMapping) record(childMapping, childValue);
111
- }
112
- continue;
68
+ if (spec.valueType === "text") {
69
+ const text = typeof value === "string" ? value : String(value);
70
+ if (text !== "") metadata[spec.field] = text;
71
+ } else {
72
+ const num = parseNumericAttribute(value);
73
+ if (num !== void 0) metadata[spec.field] = num;
113
74
  }
114
- record(mapping, value);
115
- }
116
- const metadata = {};
117
- const model = candidates.model?.value;
118
- if (typeof model === "string" && model !== "") metadata.model = model;
119
- const inputTokens = candidates.inputTokens?.value;
120
- if (inputTokens !== void 0) {
121
- const n = Number(inputTokens);
122
- if (!Number.isNaN(n)) metadata.inputTokens = n;
123
75
  }
124
76
  return metadata;
125
77
  };
126
78
  /**
127
- * Aggregates two {@link AIMetadata} values into one.
79
+ * Aggregates two {@link AIMetadata} values, folding a later call's metadata into
80
+ * an earlier accumulator for a single step.
81
+ *
82
+ * - Token-count fields (`merge: "sum"`) are **summed**, so a step that makes
83
+ * several LLM calls reports their combined usage.
84
+ * - Every other field uses `merge: "replace"` (`b` overwrites `a`)
128
85
  *
129
- * Input token counts are summed, while `a`'s model takes precedence over `b`'s.
130
- * Each field is only present in the result when at least one input supplies it.
86
+ * A field is present in the result only when at least one input supplies it.
131
87
  *
132
- * @param a - The primary metadata; its `model` wins when both are present.
133
- * @param b - The secondary metadata.
88
+ * @param a - The accumulator (earlier calls).
89
+ * @param b - The later metadata, whose values win on conflict (and add for sums).
134
90
  */
135
91
  const aggregate = (a, b) => {
136
- const metadata = {};
137
- const model = a.model ?? b.model;
138
- if (model !== void 0) metadata.model = model;
139
- if (a.inputTokens !== void 0 || b.inputTokens !== void 0) metadata.inputTokens = (a.inputTokens ?? 0) + (b.inputTokens ?? 0);
140
- return metadata;
92
+ const out = { ...a };
93
+ for (const spec of FIELD_SPECS) if (spec.valueType === "number") {
94
+ const bValue = b[spec.field];
95
+ if (bValue === void 0) continue;
96
+ if (spec.merge === "sum") out[spec.field] = (out[spec.field] ?? 0) + bValue;
97
+ else out[spec.field] = bValue;
98
+ } else if (spec.valueType === "text") {
99
+ const bValue = b[spec.field];
100
+ if (bValue === void 0) continue;
101
+ out[spec.field] = bValue;
102
+ }
103
+ return out;
141
104
  };
105
+ /** Converts a canonical camelCase field name to the server's snake_case key. */
106
+ const toSnakeCase = (field) => field.replace(/[A-Z]/g, (char) => `_${char.toLowerCase()}`);
142
107
  /**
143
108
  * Maps an {@link AIMetadata} value onto the server's `inngest.ai` metadata
144
- * schema (snake_case keys). Only the fields we extract are emitted; absent
145
- * fields are omitted rather than zero-valued. Returns `undefined` when there
146
- * is nothing to emit, so callers can skip stamping metadata entirely.
109
+ * values, converting each canonical camelCase field to snake_case (e.g.
110
+ * `inputTokens` `input_tokens`). Returns `undefined` when there is nothing to
111
+ * emit so callers can skip stamping metadata entirely.
147
112
  */
148
113
  const toInngestAIMetadataValues = (metadata) => {
114
+ const entries = Object.entries(metadata);
115
+ if (entries.length === 0) return;
149
116
  const values = {};
150
- if (metadata.model !== void 0) values.model = metadata.model;
151
- if (metadata.inputTokens !== void 0) values.input_tokens = metadata.inputTokens;
152
- if (Object.keys(values).length === 0) return;
117
+ for (const [field, value] of entries) values[toSnakeCase(field)] = value;
153
118
  return values;
154
119
  };
155
120
 
@@ -1 +1 @@
1
- {"version":3,"file":"aiExtractor.cjs","names":["counts: unknown","keyFieldMap: Record<string, Mapping>","candidates: Partial<Record<Field, Candidate>>","metadata: AIMetadata","values: Record<string, unknown>"],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":["import type { Attributes, AttributeValue } from \"@opentelemetry/api\";\n\n/**\n * AI metadata extracted from a span's attributes.\n *\n * A field is only present when a matching attribute was found on the span;\n * absent fields are omitted rather than zero-valued.\n */\nexport interface AIMetadata {\n /** The requested model, e.g. `gpt-4.1-nano`. */\n model?: string;\n /** The number of input (prompt) tokens consumed by the request. */\n inputTokens?: number;\n}\n\n/**\n * A `convention` identifies a namespace of AI span attributes and orders which\n * should win when multiple namespaces are present on the same span. Lower\n * numbers override higher numbers.\n */\nenum Convention {\n Langfuse = 1,\n Semconv = 2,\n OpenInference = 3,\n Vercel = 4,\n}\n\ntype Field = keyof AIMetadata;\n\ninterface Mapping {\n /**\n * The canonical {@link AIMetadata} field this attribute populates. Omitted\n * for composite attributes that only carry an {@link Mapping.expand}.\n */\n field?: Field;\n convention: Convention;\n /**\n * Composite attributes (e.g. a JSON blob of token counts) provide an\n * `expand` that explodes the raw value into synthetic scalar attributes,\n * each re-matched against {@link keyFieldMap}.\n */\n expand?: (value: AttributeValue) => Record<string, AttributeValue>;\n}\n\n/**\n * Prefix for the synthetic attributes produced by\n * {@link expandLangfuseUsageDetails}, kept distinct from any real attribute\n * namespace.\n */\nconst langfuseUsagePrefix = \"__langfuse.usage_details.\";\n\n/**\n * Parses the `langfuse.observation.usage_details` JSON blob (e.g.\n * `{\"input\":17,\"output\":36,\"total\":53}`) and emits a synthetic scalar\n * attribute for each count we track. Only `input` is emitted; the other counts\n * (output, total, cached, reasoning, …) are intentionally dropped since this\n * extractor tracks input tokens alone.\n */\nconst expandLangfuseUsageDetails = (\n value: AttributeValue,\n): Record<string, AttributeValue> => {\n if (typeof value !== \"string\" || value === \"\") {\n return {};\n }\n\n let counts: unknown;\n try {\n counts = JSON.parse(value);\n } catch {\n return {};\n }\n\n if (typeof counts !== \"object\" || counts === null) {\n return {};\n }\n\n const input = (counts as Record<string, unknown>).input;\n if (typeof input !== \"number\") {\n return {};\n }\n\n return { [`${langfuseUsagePrefix}input`]: input };\n};\n\n/**\n * Maps a source attribute key to the canonical {@link AIMetadata} field it\n * populates and the convention it belongs to.\n */\nconst keyFieldMap: Record<string, Mapping> = {\n // Langfuse (`langfuse.*` telemetry). Langfuse reports token usage as a single\n // JSON blob under `usage_details`; it is expanded into synthetic per-count\n // attributes that are matched back through this map. Langfuse only emits a\n // response model (not the requested model), which this extractor doesn't\n // track, so no `model` mapping is registered here. Langfuse outranks the\n // other conventions when several are present on one span.\n \"langfuse.observation.usage_details\": {\n convention: Convention.Langfuse,\n expand: expandLangfuseUsageDetails,\n },\n [`${langfuseUsagePrefix}input`]: {\n field: \"inputTokens\",\n convention: Convention.Langfuse,\n },\n\n // OpenTelemetry Semantic Conventions\n \"gen_ai.request.model\": { field: \"model\", convention: Convention.Semconv },\n \"gen_ai.usage.input_tokens\": {\n field: \"inputTokens\",\n convention: Convention.Semconv,\n },\n\n // OpenInference\n \"llm.model_name\": { field: \"model\", convention: Convention.OpenInference },\n \"llm.token_count.prompt\": {\n field: \"inputTokens\",\n convention: Convention.OpenInference,\n },\n\n // Vercel AI SDK (native `ai.*` telemetry)\n \"ai.model.id\": { field: \"model\", convention: Convention.Vercel },\n \"ai.usage.inputTokens\": {\n field: \"inputTokens\",\n convention: Convention.Vercel,\n },\n // Embeddings spans emit only a single `ai.usage.tokens` count (no\n // input/output split); map it to inputTokens to match the semconv embeddings\n // case.\n \"ai.usage.tokens\": { field: \"inputTokens\", convention: Convention.Vercel },\n};\n\ninterface Candidate {\n value: AttributeValue;\n convention: Convention;\n}\n\n/**\n * Extracts AI model metadata from a span's attributes.\n *\n * Attributes are matched across multiple instrumentation conventions\n * (OpenTelemetry semconv, OpenInference, Vercel AI SDK). When more than one\n * convention supplies the same field, the highest-precedence value wins.\n *\n * @param attributes - The span attributes, as exposed by\n * `ReadableSpan.attributes`.\n */\nexport const extractAIMetadataFromAttributes = (\n attributes: Attributes,\n): AIMetadata => {\n // Track the highest-precedence (lowest convention) candidate seen per field.\n const candidates: Partial<Record<Field, Candidate>> = {};\n\n const record = (mapping: Mapping, value: AttributeValue) => {\n if (!mapping.field) {\n return;\n }\n const existing = candidates[mapping.field];\n if (!existing || mapping.convention < existing.convention) {\n candidates[mapping.field] = { value, convention: mapping.convention };\n }\n };\n\n for (const [key, value] of Object.entries(attributes)) {\n if (value === undefined) {\n continue;\n }\n\n const mapping = keyFieldMap[key];\n if (!mapping) {\n continue;\n }\n\n // Composite attribute: explode into synthetic children and match each back\n // through the map.\n if (mapping.expand) {\n for (const [childKey, childValue] of Object.entries(\n mapping.expand(value),\n )) {\n const childMapping = keyFieldMap[childKey];\n if (childMapping) {\n record(childMapping, childValue);\n }\n }\n continue;\n }\n\n record(mapping, value);\n }\n\n const metadata: AIMetadata = {};\n\n const model = candidates.model?.value;\n if (typeof model === \"string\" && model !== \"\") {\n metadata.model = model;\n }\n\n const inputTokens = candidates.inputTokens?.value;\n if (inputTokens !== undefined) {\n // Token counts arrive as numbers from the SDK, but OTLP/JSON encodes int64\n // as either a number or a quoted string, so coerce defensively.\n const n = Number(inputTokens);\n if (!Number.isNaN(n)) {\n metadata.inputTokens = n;\n }\n }\n\n return metadata;\n};\n\n/**\n * Aggregates two {@link AIMetadata} values into one.\n *\n * Input token counts are summed, while `a`'s model takes precedence over `b`'s.\n * Each field is only present in the result when at least one input supplies it.\n *\n * @param a - The primary metadata; its `model` wins when both are present.\n * @param b - The secondary metadata.\n */\nexport const aggregate = (a: AIMetadata, b: AIMetadata): AIMetadata => {\n const metadata: AIMetadata = {};\n\n const model = a.model ?? b.model;\n if (model !== undefined) {\n metadata.model = model;\n }\n\n if (a.inputTokens !== undefined || b.inputTokens !== undefined) {\n metadata.inputTokens = (a.inputTokens ?? 0) + (b.inputTokens ?? 0);\n }\n\n return metadata;\n};\n\n/**\n * Maps an {@link AIMetadata} value onto the server's `inngest.ai` metadata\n * schema (snake_case keys). Only the fields we extract are emitted; absent\n * fields are omitted rather than zero-valued. Returns `undefined` when there\n * is nothing to emit, so callers can skip stamping metadata entirely.\n */\nexport const toInngestAIMetadataValues = (\n metadata: AIMetadata,\n): Record<string, unknown> | undefined => {\n const values: Record<string, unknown> = {};\n\n if (metadata.model !== undefined) {\n values.model = metadata.model;\n }\n\n if (metadata.inputTokens !== undefined) {\n values.input_tokens = metadata.inputTokens;\n }\n\n if (Object.keys(values).length === 0) {\n return undefined;\n }\n\n return values;\n};\n"],"mappings":";;;;;;;AAoBA,IAAK,oDAAL;AACE;AACA;AACA;AACA;;EAJG;;;;;;AA6BL,MAAM,sBAAsB;;;;;;;;AAS5B,MAAM,8BACJ,UACmC;AACnC,KAAI,OAAO,UAAU,YAAY,UAAU,GACzC,QAAO,EAAE;CAGX,IAAIA;AACJ,KAAI;AACF,WAAS,KAAK,MAAM,MAAM;SACpB;AACN,SAAO,EAAE;;AAGX,KAAI,OAAO,WAAW,YAAY,WAAW,KAC3C,QAAO,EAAE;CAGX,MAAM,QAAS,OAAmC;AAClD,KAAI,OAAO,UAAU,SACnB,QAAO,EAAE;AAGX,QAAO,GAAG,GAAG,oBAAoB,SAAS,OAAO;;;;;;AAOnD,MAAMC,cAAuC;CAO3C,sCAAsC;EACpC,YAAY,WAAW;EACvB,QAAQ;EACT;EACA,GAAG,oBAAoB,SAAS;EAC/B,OAAO;EACP,YAAY,WAAW;EACxB;CAGD,wBAAwB;EAAE,OAAO;EAAS,YAAY,WAAW;EAAS;CAC1E,6BAA6B;EAC3B,OAAO;EACP,YAAY,WAAW;EACxB;CAGD,kBAAkB;EAAE,OAAO;EAAS,YAAY,WAAW;EAAe;CAC1E,0BAA0B;EACxB,OAAO;EACP,YAAY,WAAW;EACxB;CAGD,eAAe;EAAE,OAAO;EAAS,YAAY,WAAW;EAAQ;CAChE,wBAAwB;EACtB,OAAO;EACP,YAAY,WAAW;EACxB;CAID,mBAAmB;EAAE,OAAO;EAAe,YAAY,WAAW;EAAQ;CAC3E;;;;;;;;;;;AAiBD,MAAa,mCACX,eACe;CAEf,MAAMC,aAAgD,EAAE;CAExD,MAAM,UAAU,SAAkB,UAA0B;AAC1D,MAAI,CAAC,QAAQ,MACX;EAEF,MAAM,WAAW,WAAW,QAAQ;AACpC,MAAI,CAAC,YAAY,QAAQ,aAAa,SAAS,WAC7C,YAAW,QAAQ,SAAS;GAAE;GAAO,YAAY,QAAQ;GAAY;;AAIzE,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,WAAW,EAAE;AACrD,MAAI,UAAU,OACZ;EAGF,MAAM,UAAU,YAAY;AAC5B,MAAI,CAAC,QACH;AAKF,MAAI,QAAQ,QAAQ;AAClB,QAAK,MAAM,CAAC,UAAU,eAAe,OAAO,QAC1C,QAAQ,OAAO,MAAM,CACtB,EAAE;IACD,MAAM,eAAe,YAAY;AACjC,QAAI,aACF,QAAO,cAAc,WAAW;;AAGpC;;AAGF,SAAO,SAAS,MAAM;;CAGxB,MAAMC,WAAuB,EAAE;CAE/B,MAAM,QAAQ,WAAW,OAAO;AAChC,KAAI,OAAO,UAAU,YAAY,UAAU,GACzC,UAAS,QAAQ;CAGnB,MAAM,cAAc,WAAW,aAAa;AAC5C,KAAI,gBAAgB,QAAW;EAG7B,MAAM,IAAI,OAAO,YAAY;AAC7B,MAAI,CAAC,OAAO,MAAM,EAAE,CAClB,UAAS,cAAc;;AAI3B,QAAO;;;;;;;;;;;AAYT,MAAa,aAAa,GAAe,MAA8B;CACrE,MAAMA,WAAuB,EAAE;CAE/B,MAAM,QAAQ,EAAE,SAAS,EAAE;AAC3B,KAAI,UAAU,OACZ,UAAS,QAAQ;AAGnB,KAAI,EAAE,gBAAgB,UAAa,EAAE,gBAAgB,OACnD,UAAS,eAAe,EAAE,eAAe,MAAM,EAAE,eAAe;AAGlE,QAAO;;;;;;;;AAST,MAAa,6BACX,aACwC;CACxC,MAAMC,SAAkC,EAAE;AAE1C,KAAI,SAAS,UAAU,OACrB,QAAO,QAAQ,SAAS;AAG1B,KAAI,SAAS,gBAAgB,OAC3B,QAAO,eAAe,SAAS;AAGjC,KAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EACjC;AAGF,QAAO"}
1
+ {"version":3,"file":"aiExtractor.cjs","names":["metadata: AIMetadata","out: AIMetadata","values: Record<string, unknown>"],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":["import type { Attributes } from \"@opentelemetry/api\";\n\n/**\n * Canonical AI metadata extracted from a span's OpenTelemetry GenAI semantic\n * convention (`gen_ai.*`) attributes.\n *\n * The fields below are an explicit **allowlist**: only these are ever read from\n * a span (see {@link FIELD_SPECS}). Anything not mapped — prompt/response\n * content, messages, tool calls, embeddings payloads, and other\n * potentially-sensitive or bulky attributes — is not captured.\n *\n * For each category we describe how multiple AIMetadata values are aggregated\n * (see {@link aggregate}).\n */\nexport interface AIMetadata {\n // Identity & classification (last-write-wins).\n\n /** The requested model, e.g. `gpt-4.1-nano`. */\n requestModel?: string;\n /**\n * The model that actually served the request. This is often a dated snapshot\n * of the requested {@link AIMetadata.requestModel} (e.g.\n * `gpt-4.1-nano-2025-04-14`).\n */\n responseModel?: string;\n /** The AI provider that served the request (e.g. `openai`) */\n provider?: string;\n /** The provider's identifier for the response, e.g. `chatcmpl-...`. */\n responseId?: string;\n\n // Token usage (summed).\n\n /** The number of input tokens consumed by the request. */\n inputTokens?: number;\n /** The number of output tokens produced by the response. */\n outputTokens?: number;\n /** The total tokens consumed, as reported by the provider. */\n totalTokens?: number;\n /**\n * Cached input tokens read from the prompt cache. Providers differ on\n * accounting. OpenAI's cached tokens are a subset of\n * {@link AIMetadata.inputTokens}, Anthropic's are additive. Callers must\n * not assume a single relationship.\n */\n cacheReadTokens?: number;\n /** Tokens written to the prompt cache. */\n cacheCreationTokens?: number;\n /** Reasoning/thinking tokens, when the emitter reports them separately. */\n reasoningTokens?: number;\n\n // Request / inference parameters (last-write-wins). These describe the\n // request the caller made, not the response, and are stored raw as the\n // emitter reports them.\n\n /** Sampling temperature requested, e.g. `0.7`. */\n temperature?: number;\n /** Nucleus sampling probability mass requested (`top_p`), e.g. `0.9`. */\n topP?: number;\n /** Upper bound on tokens to generate (`max_tokens`). */\n maxTokens?: number;\n /** Frequency penalty requested. */\n frequencyPenalty?: number;\n /** Presence penalty requested. */\n presencePenalty?: number;\n /** Sampling seed requested, when the emitter reports it. */\n seed?: number;\n}\n\ntype ValueType = \"text\" | \"number\";\ntype MergeStrategy = \"replace\" | \"sum\";\n\n/**\n * Derives the subset of AIMetadata keys whose assigned value matches TValue.\n *\n * AIMetadata fields are optional (`model?: string`), so each field's type is\n * effectively `string | undefined` or `number | undefined`. `Exclude` removes\n * `undefined` before checking the value type, and `-?` prevents optional fields\n * from adding `undefined` back into the final key union.\n */\ntype FieldsWithValue<TValue> = {\n [TField in keyof AIMetadata]-?: Exclude<\n AIMetadata[TField],\n undefined\n > extends TValue\n ? TField\n : never;\n}[keyof AIMetadata];\n\ntype TextField = FieldsWithValue<string>;\ntype NumberField = FieldsWithValue<number>;\n\ninterface BaseFieldSpec {\n /** The source `gen_ai.*` attribute key. */\n source: string;\n valueType: ValueType;\n merge: MergeStrategy;\n}\n\ninterface TextFieldSpec extends BaseFieldSpec {\n /** The canonical {@link AIMetadata} field this populates. */\n field: TextField;\n valueType: \"text\";\n merge: \"replace\";\n}\n\ninterface NumberFieldSpec extends BaseFieldSpec {\n /** The canonical {@link AIMetadata} field this populates. */\n field: NumberField;\n valueType: \"number\";\n}\n\ntype FieldSpec = TextFieldSpec | NumberFieldSpec;\n\nfunction textField(field: TextField, source: string): TextFieldSpec {\n return {\n field,\n source,\n valueType: \"text\",\n merge: \"replace\",\n };\n}\n\nfunction numberField(\n field: NumberField,\n source: string,\n merge: MergeStrategy,\n): NumberFieldSpec {\n return {\n field,\n source,\n valueType: \"number\",\n merge,\n };\n}\n\n/**\n * Every `gen_ai.*` attribute we capture, mapped to its canonical field.\n *\n * Anything not listed here (prompt/response content, messages, tool calls,\n * unknown keys) is ignored.\n */\nexport const FIELD_SPECS = [\n // Identity & classification.\n textField(\"requestModel\", \"gen_ai.request.model\"),\n textField(\"responseModel\", \"gen_ai.response.model\"),\n textField(\"provider\", \"gen_ai.provider.name\"),\n textField(\"responseId\", \"gen_ai.response.id\"),\n\n // Token usage.\n numberField(\"inputTokens\", \"gen_ai.usage.input_tokens\", \"sum\"),\n numberField(\"outputTokens\", \"gen_ai.usage.output_tokens\", \"sum\"),\n numberField(\"totalTokens\", \"gen_ai.usage.total_tokens\", \"sum\"),\n numberField(\"cacheReadTokens\", \"gen_ai.usage.cache_read.input_tokens\", \"sum\"),\n numberField(\n \"cacheCreationTokens\",\n \"gen_ai.usage.cache_creation.input_tokens\",\n \"sum\",\n ),\n numberField(\"reasoningTokens\", \"gen_ai.usage.reasoning.output_tokens\", \"sum\"),\n\n // Request / inference parameters. These describe the request, not a quantity,\n // so they replace rather than sum when a step makes several calls.\n numberField(\"temperature\", \"gen_ai.request.temperature\", \"replace\"),\n numberField(\"topP\", \"gen_ai.request.top_p\", \"replace\"),\n numberField(\"maxTokens\", \"gen_ai.request.max_tokens\", \"replace\"),\n numberField(\n \"frequencyPenalty\",\n \"gen_ai.request.frequency_penalty\",\n \"replace\",\n ),\n numberField(\"presencePenalty\", \"gen_ai.request.presence_penalty\", \"replace\"),\n numberField(\"seed\", \"gen_ai.request.seed\", \"replace\"),\n] as const satisfies readonly FieldSpec[];\n\nfunction parseNumericAttribute(value: unknown): number | undefined {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value !== \"string\" || value === \"\") {\n return undefined;\n }\n\n const num = Number(value);\n return Number.isFinite(num) ? num : undefined;\n}\n\n/**\n * Extracts {@link AIMetadata} from a span's attributes.\n *\n * Only the allowlisted {@link FIELD_SPECS} are read. Every other attribute is\n * ignored. Numeric fields accept numbers and quoted numeric strings and are\n * otherwise dropped, as OTLP/JSON may encode int64 as a quoted string. Text\n * fields are dropped when empty.\n *\n * Returns an empty object for spans carrying no recognised `gen_ai.*`\n * attributes.\n *\n * @param attributes - The span attributes, as exposed by\n * `ReadableSpan.attributes`.\n */\nexport const extractAIMetadataFromAttributes = (\n attributes: Attributes,\n): AIMetadata => {\n const metadata: AIMetadata = {};\n\n for (const spec of FIELD_SPECS) {\n const value = attributes[spec.source];\n if (value === undefined) {\n continue;\n }\n\n if (spec.valueType === \"text\") {\n const text = typeof value === \"string\" ? value : String(value);\n if (text !== \"\") {\n metadata[spec.field] = text;\n }\n } else {\n const num = parseNumericAttribute(value);\n if (num !== undefined) {\n metadata[spec.field] = num;\n }\n }\n }\n\n return metadata;\n};\n\n/**\n * Aggregates two {@link AIMetadata} values, folding a later call's metadata into\n * an earlier accumulator for a single step.\n *\n * - Token-count fields (`merge: \"sum\"`) are **summed**, so a step that makes\n * several LLM calls reports their combined usage.\n * - Every other field uses `merge: \"replace\"` (`b` overwrites `a`)\n *\n * A field is present in the result only when at least one input supplies it.\n *\n * @param a - The accumulator (earlier calls).\n * @param b - The later metadata, whose values win on conflict (and add for sums).\n */\nexport const aggregate = (a: AIMetadata, b: AIMetadata): AIMetadata => {\n const out: AIMetadata = { ...a };\n\n for (const spec of FIELD_SPECS) {\n if (spec.valueType === \"number\") {\n const bValue = b[spec.field];\n if (bValue === undefined) {\n continue;\n }\n\n if (spec.merge === \"sum\") {\n out[spec.field] = (out[spec.field] ?? 0) + bValue;\n } else {\n out[spec.field] = bValue;\n }\n } else if (spec.valueType === \"text\") {\n // Text fields are always replace.\n const bValue = b[spec.field];\n if (bValue === undefined) {\n continue;\n }\n out[spec.field] = bValue;\n }\n }\n\n return out;\n};\n\n/** Converts a canonical camelCase field name to the server's snake_case key. */\nconst toSnakeCase = (field: string): string =>\n field.replace(/[A-Z]/g, (char) => `_${char.toLowerCase()}`);\n\n/**\n * Maps an {@link AIMetadata} value onto the server's `inngest.ai` metadata\n * values, converting each canonical camelCase field to snake_case (e.g.\n * `inputTokens` → `input_tokens`). Returns `undefined` when there is nothing to\n * emit so callers can skip stamping metadata entirely.\n */\nexport const toInngestAIMetadataValues = (\n metadata: AIMetadata,\n): Record<string, unknown> | undefined => {\n const entries = Object.entries(metadata);\n if (entries.length === 0) {\n return undefined;\n }\n\n const values: Record<string, unknown> = {};\n for (const [field, value] of entries) {\n values[toSnakeCase(field)] = value;\n }\n\n return values;\n};\n"],"mappings":";;AAiHA,SAAS,UAAU,OAAkB,QAA+B;AAClE,QAAO;EACL;EACA;EACA,WAAW;EACX,OAAO;EACR;;AAGH,SAAS,YACP,OACA,QACA,OACiB;AACjB,QAAO;EACL;EACA;EACA,WAAW;EACX;EACD;;;;;;;;AASH,MAAa,cAAc;CAEzB,UAAU,gBAAgB,uBAAuB;CACjD,UAAU,iBAAiB,wBAAwB;CACnD,UAAU,YAAY,uBAAuB;CAC7C,UAAU,cAAc,qBAAqB;CAG7C,YAAY,eAAe,6BAA6B,MAAM;CAC9D,YAAY,gBAAgB,8BAA8B,MAAM;CAChE,YAAY,eAAe,6BAA6B,MAAM;CAC9D,YAAY,mBAAmB,wCAAwC,MAAM;CAC7E,YACE,uBACA,4CACA,MACD;CACD,YAAY,mBAAmB,wCAAwC,MAAM;CAI7E,YAAY,eAAe,8BAA8B,UAAU;CACnE,YAAY,QAAQ,wBAAwB,UAAU;CACtD,YAAY,aAAa,6BAA6B,UAAU;CAChE,YACE,oBACA,oCACA,UACD;CACD,YAAY,mBAAmB,mCAAmC,UAAU;CAC5E,YAAY,QAAQ,uBAAuB,UAAU;CACtD;AAED,SAAS,sBAAsB,OAAoC;AACjE,KAAI,OAAO,UAAU,SACnB,QAAO,OAAO,SAAS,MAAM,GAAG,QAAQ;AAG1C,KAAI,OAAO,UAAU,YAAY,UAAU,GACzC;CAGF,MAAM,MAAM,OAAO,MAAM;AACzB,QAAO,OAAO,SAAS,IAAI,GAAG,MAAM;;;;;;;;;;;;;;;;AAiBtC,MAAa,mCACX,eACe;CACf,MAAMA,WAAuB,EAAE;AAE/B,MAAK,MAAM,QAAQ,aAAa;EAC9B,MAAM,QAAQ,WAAW,KAAK;AAC9B,MAAI,UAAU,OACZ;AAGF,MAAI,KAAK,cAAc,QAAQ;GAC7B,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ,OAAO,MAAM;AAC9D,OAAI,SAAS,GACX,UAAS,KAAK,SAAS;SAEpB;GACL,MAAM,MAAM,sBAAsB,MAAM;AACxC,OAAI,QAAQ,OACV,UAAS,KAAK,SAAS;;;AAK7B,QAAO;;;;;;;;;;;;;;;AAgBT,MAAa,aAAa,GAAe,MAA8B;CACrE,MAAMC,MAAkB,EAAE,GAAG,GAAG;AAEhC,MAAK,MAAM,QAAQ,YACjB,KAAI,KAAK,cAAc,UAAU;EAC/B,MAAM,SAAS,EAAE,KAAK;AACtB,MAAI,WAAW,OACb;AAGF,MAAI,KAAK,UAAU,MACjB,KAAI,KAAK,UAAU,IAAI,KAAK,UAAU,KAAK;MAE3C,KAAI,KAAK,SAAS;YAEX,KAAK,cAAc,QAAQ;EAEpC,MAAM,SAAS,EAAE,KAAK;AACtB,MAAI,WAAW,OACb;AAEF,MAAI,KAAK,SAAS;;AAItB,QAAO;;;AAIT,MAAM,eAAe,UACnB,MAAM,QAAQ,WAAW,SAAS,IAAI,KAAK,aAAa,GAAG;;;;;;;AAQ7D,MAAa,6BACX,aACwC;CACxC,MAAM,UAAU,OAAO,QAAQ,SAAS;AACxC,KAAI,QAAQ,WAAW,EACrB;CAGF,MAAMC,SAAkC,EAAE;AAC1C,MAAK,MAAM,CAAC,OAAO,UAAU,QAC3B,QAAO,YAAY,MAAM,IAAI;AAG/B,QAAO"}
@@ -1,15 +1,58 @@
1
1
  //#region src/components/execution/otel/aiExtractor.d.ts
2
2
  /**
3
- * AI metadata extracted from a span's attributes.
3
+ * Canonical AI metadata extracted from a span's OpenTelemetry GenAI semantic
4
+ * convention (`gen_ai.*`) attributes.
4
5
  *
5
- * A field is only present when a matching attribute was found on the span;
6
- * absent fields are omitted rather than zero-valued.
6
+ * The fields below are an explicit **allowlist**: only these are ever read from
7
+ * a span (see {@link FIELD_SPECS}). Anything not mapped — prompt/response
8
+ * content, messages, tool calls, embeddings payloads, and other
9
+ * potentially-sensitive or bulky attributes — is not captured.
10
+ *
11
+ * For each category we describe how multiple AIMetadata values are aggregated
12
+ * (see {@link aggregate}).
7
13
  */
8
14
  interface AIMetadata {
9
15
  /** The requested model, e.g. `gpt-4.1-nano`. */
10
- model?: string;
11
- /** The number of input (prompt) tokens consumed by the request. */
16
+ requestModel?: string;
17
+ /**
18
+ * The model that actually served the request. This is often a dated snapshot
19
+ * of the requested {@link AIMetadata.requestModel} (e.g.
20
+ * `gpt-4.1-nano-2025-04-14`).
21
+ */
22
+ responseModel?: string;
23
+ /** The AI provider that served the request (e.g. `openai`) */
24
+ provider?: string;
25
+ /** The provider's identifier for the response, e.g. `chatcmpl-...`. */
26
+ responseId?: string;
27
+ /** The number of input tokens consumed by the request. */
12
28
  inputTokens?: number;
29
+ /** The number of output tokens produced by the response. */
30
+ outputTokens?: number;
31
+ /** The total tokens consumed, as reported by the provider. */
32
+ totalTokens?: number;
33
+ /**
34
+ * Cached input tokens read from the prompt cache. Providers differ on
35
+ * accounting. OpenAI's cached tokens are a subset of
36
+ * {@link AIMetadata.inputTokens}, Anthropic's are additive. Callers must
37
+ * not assume a single relationship.
38
+ */
39
+ cacheReadTokens?: number;
40
+ /** Tokens written to the prompt cache. */
41
+ cacheCreationTokens?: number;
42
+ /** Reasoning/thinking tokens, when the emitter reports them separately. */
43
+ reasoningTokens?: number;
44
+ /** Sampling temperature requested, e.g. `0.7`. */
45
+ temperature?: number;
46
+ /** Nucleus sampling probability mass requested (`top_p`), e.g. `0.9`. */
47
+ topP?: number;
48
+ /** Upper bound on tokens to generate (`max_tokens`). */
49
+ maxTokens?: number;
50
+ /** Frequency penalty requested. */
51
+ frequencyPenalty?: number;
52
+ /** Presence penalty requested. */
53
+ presencePenalty?: number;
54
+ /** Sampling seed requested, when the emitter reports it. */
55
+ seed?: number;
13
56
  }
14
57
  //#endregion
15
58
  export { AIMetadata };
@@ -1 +1 @@
1
- {"version":3,"file":"aiExtractor.d.cts","names":[],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":[],"mappings":";AAQA;;;;;;UAAiB,UAAA"}
1
+ {"version":3,"file":"aiExtractor.d.cts","names":[],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":[],"mappings":";AAcA;;;;;;;;;;;;UAAiB,UAAA"}
@@ -3,16 +3,59 @@ import "@opentelemetry/api";
3
3
  //#region src/components/execution/otel/aiExtractor.d.ts
4
4
 
5
5
  /**
6
- * AI metadata extracted from a span's attributes.
6
+ * Canonical AI metadata extracted from a span's OpenTelemetry GenAI semantic
7
+ * convention (`gen_ai.*`) attributes.
7
8
  *
8
- * A field is only present when a matching attribute was found on the span;
9
- * absent fields are omitted rather than zero-valued.
9
+ * The fields below are an explicit **allowlist**: only these are ever read from
10
+ * a span (see {@link FIELD_SPECS}). Anything not mapped — prompt/response
11
+ * content, messages, tool calls, embeddings payloads, and other
12
+ * potentially-sensitive or bulky attributes — is not captured.
13
+ *
14
+ * For each category we describe how multiple AIMetadata values are aggregated
15
+ * (see {@link aggregate}).
10
16
  */
11
17
  interface AIMetadata {
12
18
  /** The requested model, e.g. `gpt-4.1-nano`. */
13
- model?: string;
14
- /** The number of input (prompt) tokens consumed by the request. */
19
+ requestModel?: string;
20
+ /**
21
+ * The model that actually served the request. This is often a dated snapshot
22
+ * of the requested {@link AIMetadata.requestModel} (e.g.
23
+ * `gpt-4.1-nano-2025-04-14`).
24
+ */
25
+ responseModel?: string;
26
+ /** The AI provider that served the request (e.g. `openai`) */
27
+ provider?: string;
28
+ /** The provider's identifier for the response, e.g. `chatcmpl-...`. */
29
+ responseId?: string;
30
+ /** The number of input tokens consumed by the request. */
15
31
  inputTokens?: number;
32
+ /** The number of output tokens produced by the response. */
33
+ outputTokens?: number;
34
+ /** The total tokens consumed, as reported by the provider. */
35
+ totalTokens?: number;
36
+ /**
37
+ * Cached input tokens read from the prompt cache. Providers differ on
38
+ * accounting. OpenAI's cached tokens are a subset of
39
+ * {@link AIMetadata.inputTokens}, Anthropic's are additive. Callers must
40
+ * not assume a single relationship.
41
+ */
42
+ cacheReadTokens?: number;
43
+ /** Tokens written to the prompt cache. */
44
+ cacheCreationTokens?: number;
45
+ /** Reasoning/thinking tokens, when the emitter reports them separately. */
46
+ reasoningTokens?: number;
47
+ /** Sampling temperature requested, e.g. `0.7`. */
48
+ temperature?: number;
49
+ /** Nucleus sampling probability mass requested (`top_p`), e.g. `0.9`. */
50
+ topP?: number;
51
+ /** Upper bound on tokens to generate (`max_tokens`). */
52
+ maxTokens?: number;
53
+ /** Frequency penalty requested. */
54
+ frequencyPenalty?: number;
55
+ /** Presence penalty requested. */
56
+ presencePenalty?: number;
57
+ /** Sampling seed requested, when the emitter reports it. */
58
+ seed?: number;
16
59
  }
17
60
  //#endregion
18
61
  export { AIMetadata };
@@ -1 +1 @@
1
- {"version":3,"file":"aiExtractor.d.ts","names":[],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":[],"mappings":";;;;;;AAQA;;;;UAAiB,UAAA"}
1
+ {"version":3,"file":"aiExtractor.d.ts","names":[],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":[],"mappings":";;;;;;AAcA;;;;;;;;;;UAAiB,UAAA"}
@@ -1,154 +1,119 @@
1
1
  //#region src/components/execution/otel/aiExtractor.ts
2
+ function textField(field, source) {
3
+ return {
4
+ field,
5
+ source,
6
+ valueType: "text",
7
+ merge: "replace"
8
+ };
9
+ }
10
+ function numberField(field, source, merge) {
11
+ return {
12
+ field,
13
+ source,
14
+ valueType: "number",
15
+ merge
16
+ };
17
+ }
2
18
  /**
3
- * A `convention` identifies a namespace of AI span attributes and orders which
4
- * should win when multiple namespaces are present on the same span. Lower
5
- * numbers override higher numbers.
6
- */
7
- var Convention = /* @__PURE__ */ function(Convention$1) {
8
- Convention$1[Convention$1["Langfuse"] = 1] = "Langfuse";
9
- Convention$1[Convention$1["Semconv"] = 2] = "Semconv";
10
- Convention$1[Convention$1["OpenInference"] = 3] = "OpenInference";
11
- Convention$1[Convention$1["Vercel"] = 4] = "Vercel";
12
- return Convention$1;
13
- }(Convention || {});
14
- /**
15
- * Prefix for the synthetic attributes produced by
16
- * {@link expandLangfuseUsageDetails}, kept distinct from any real attribute
17
- * namespace.
18
- */
19
- const langfuseUsagePrefix = "__langfuse.usage_details.";
20
- /**
21
- * Parses the `langfuse.observation.usage_details` JSON blob (e.g.
22
- * `{"input":17,"output":36,"total":53}`) and emits a synthetic scalar
23
- * attribute for each count we track. Only `input` is emitted; the other counts
24
- * (output, total, cached, reasoning, …) are intentionally dropped since this
25
- * extractor tracks input tokens alone.
26
- */
27
- const expandLangfuseUsageDetails = (value) => {
28
- if (typeof value !== "string" || value === "") return {};
29
- let counts;
30
- try {
31
- counts = JSON.parse(value);
32
- } catch {
33
- return {};
34
- }
35
- if (typeof counts !== "object" || counts === null) return {};
36
- const input = counts.input;
37
- if (typeof input !== "number") return {};
38
- return { [`${langfuseUsagePrefix}input`]: input };
39
- };
40
- /**
41
- * Maps a source attribute key to the canonical {@link AIMetadata} field it
42
- * populates and the convention it belongs to.
19
+ * Every `gen_ai.*` attribute we capture, mapped to its canonical field.
20
+ *
21
+ * Anything not listed here (prompt/response content, messages, tool calls,
22
+ * unknown keys) is ignored.
43
23
  */
44
- const keyFieldMap = {
45
- "langfuse.observation.usage_details": {
46
- convention: Convention.Langfuse,
47
- expand: expandLangfuseUsageDetails
48
- },
49
- [`${langfuseUsagePrefix}input`]: {
50
- field: "inputTokens",
51
- convention: Convention.Langfuse
52
- },
53
- "gen_ai.request.model": {
54
- field: "model",
55
- convention: Convention.Semconv
56
- },
57
- "gen_ai.usage.input_tokens": {
58
- field: "inputTokens",
59
- convention: Convention.Semconv
60
- },
61
- "llm.model_name": {
62
- field: "model",
63
- convention: Convention.OpenInference
64
- },
65
- "llm.token_count.prompt": {
66
- field: "inputTokens",
67
- convention: Convention.OpenInference
68
- },
69
- "ai.model.id": {
70
- field: "model",
71
- convention: Convention.Vercel
72
- },
73
- "ai.usage.inputTokens": {
74
- field: "inputTokens",
75
- convention: Convention.Vercel
76
- },
77
- "ai.usage.tokens": {
78
- field: "inputTokens",
79
- convention: Convention.Vercel
80
- }
81
- };
24
+ const FIELD_SPECS = [
25
+ textField("requestModel", "gen_ai.request.model"),
26
+ textField("responseModel", "gen_ai.response.model"),
27
+ textField("provider", "gen_ai.provider.name"),
28
+ textField("responseId", "gen_ai.response.id"),
29
+ numberField("inputTokens", "gen_ai.usage.input_tokens", "sum"),
30
+ numberField("outputTokens", "gen_ai.usage.output_tokens", "sum"),
31
+ numberField("totalTokens", "gen_ai.usage.total_tokens", "sum"),
32
+ numberField("cacheReadTokens", "gen_ai.usage.cache_read.input_tokens", "sum"),
33
+ numberField("cacheCreationTokens", "gen_ai.usage.cache_creation.input_tokens", "sum"),
34
+ numberField("reasoningTokens", "gen_ai.usage.reasoning.output_tokens", "sum"),
35
+ numberField("temperature", "gen_ai.request.temperature", "replace"),
36
+ numberField("topP", "gen_ai.request.top_p", "replace"),
37
+ numberField("maxTokens", "gen_ai.request.max_tokens", "replace"),
38
+ numberField("frequencyPenalty", "gen_ai.request.frequency_penalty", "replace"),
39
+ numberField("presencePenalty", "gen_ai.request.presence_penalty", "replace"),
40
+ numberField("seed", "gen_ai.request.seed", "replace")
41
+ ];
42
+ function parseNumericAttribute(value) {
43
+ if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
44
+ if (typeof value !== "string" || value === "") return;
45
+ const num = Number(value);
46
+ return Number.isFinite(num) ? num : void 0;
47
+ }
82
48
  /**
83
- * Extracts AI model metadata from a span's attributes.
49
+ * Extracts {@link AIMetadata} from a span's attributes.
50
+ *
51
+ * Only the allowlisted {@link FIELD_SPECS} are read. Every other attribute is
52
+ * ignored. Numeric fields accept numbers and quoted numeric strings and are
53
+ * otherwise dropped, as OTLP/JSON may encode int64 as a quoted string. Text
54
+ * fields are dropped when empty.
84
55
  *
85
- * Attributes are matched across multiple instrumentation conventions
86
- * (OpenTelemetry semconv, OpenInference, Vercel AI SDK). When more than one
87
- * convention supplies the same field, the highest-precedence value wins.
56
+ * Returns an empty object for spans carrying no recognised `gen_ai.*`
57
+ * attributes.
88
58
  *
89
59
  * @param attributes - The span attributes, as exposed by
90
60
  * `ReadableSpan.attributes`.
91
61
  */
92
62
  const extractAIMetadataFromAttributes = (attributes) => {
93
- const candidates = {};
94
- const record = (mapping, value) => {
95
- if (!mapping.field) return;
96
- const existing = candidates[mapping.field];
97
- if (!existing || mapping.convention < existing.convention) candidates[mapping.field] = {
98
- value,
99
- convention: mapping.convention
100
- };
101
- };
102
- for (const [key, value] of Object.entries(attributes)) {
63
+ const metadata = {};
64
+ for (const spec of FIELD_SPECS) {
65
+ const value = attributes[spec.source];
103
66
  if (value === void 0) continue;
104
- const mapping = keyFieldMap[key];
105
- if (!mapping) continue;
106
- if (mapping.expand) {
107
- for (const [childKey, childValue] of Object.entries(mapping.expand(value))) {
108
- const childMapping = keyFieldMap[childKey];
109
- if (childMapping) record(childMapping, childValue);
110
- }
111
- continue;
67
+ if (spec.valueType === "text") {
68
+ const text = typeof value === "string" ? value : String(value);
69
+ if (text !== "") metadata[spec.field] = text;
70
+ } else {
71
+ const num = parseNumericAttribute(value);
72
+ if (num !== void 0) metadata[spec.field] = num;
112
73
  }
113
- record(mapping, value);
114
- }
115
- const metadata = {};
116
- const model = candidates.model?.value;
117
- if (typeof model === "string" && model !== "") metadata.model = model;
118
- const inputTokens = candidates.inputTokens?.value;
119
- if (inputTokens !== void 0) {
120
- const n = Number(inputTokens);
121
- if (!Number.isNaN(n)) metadata.inputTokens = n;
122
74
  }
123
75
  return metadata;
124
76
  };
125
77
  /**
126
- * Aggregates two {@link AIMetadata} values into one.
78
+ * Aggregates two {@link AIMetadata} values, folding a later call's metadata into
79
+ * an earlier accumulator for a single step.
80
+ *
81
+ * - Token-count fields (`merge: "sum"`) are **summed**, so a step that makes
82
+ * several LLM calls reports their combined usage.
83
+ * - Every other field uses `merge: "replace"` (`b` overwrites `a`)
127
84
  *
128
- * Input token counts are summed, while `a`'s model takes precedence over `b`'s.
129
- * Each field is only present in the result when at least one input supplies it.
85
+ * A field is present in the result only when at least one input supplies it.
130
86
  *
131
- * @param a - The primary metadata; its `model` wins when both are present.
132
- * @param b - The secondary metadata.
87
+ * @param a - The accumulator (earlier calls).
88
+ * @param b - The later metadata, whose values win on conflict (and add for sums).
133
89
  */
134
90
  const aggregate = (a, b) => {
135
- const metadata = {};
136
- const model = a.model ?? b.model;
137
- if (model !== void 0) metadata.model = model;
138
- if (a.inputTokens !== void 0 || b.inputTokens !== void 0) metadata.inputTokens = (a.inputTokens ?? 0) + (b.inputTokens ?? 0);
139
- return metadata;
91
+ const out = { ...a };
92
+ for (const spec of FIELD_SPECS) if (spec.valueType === "number") {
93
+ const bValue = b[spec.field];
94
+ if (bValue === void 0) continue;
95
+ if (spec.merge === "sum") out[spec.field] = (out[spec.field] ?? 0) + bValue;
96
+ else out[spec.field] = bValue;
97
+ } else if (spec.valueType === "text") {
98
+ const bValue = b[spec.field];
99
+ if (bValue === void 0) continue;
100
+ out[spec.field] = bValue;
101
+ }
102
+ return out;
140
103
  };
104
+ /** Converts a canonical camelCase field name to the server's snake_case key. */
105
+ const toSnakeCase = (field) => field.replace(/[A-Z]/g, (char) => `_${char.toLowerCase()}`);
141
106
  /**
142
107
  * Maps an {@link AIMetadata} value onto the server's `inngest.ai` metadata
143
- * schema (snake_case keys). Only the fields we extract are emitted; absent
144
- * fields are omitted rather than zero-valued. Returns `undefined` when there
145
- * is nothing to emit, so callers can skip stamping metadata entirely.
108
+ * values, converting each canonical camelCase field to snake_case (e.g.
109
+ * `inputTokens` `input_tokens`). Returns `undefined` when there is nothing to
110
+ * emit so callers can skip stamping metadata entirely.
146
111
  */
147
112
  const toInngestAIMetadataValues = (metadata) => {
113
+ const entries = Object.entries(metadata);
114
+ if (entries.length === 0) return;
148
115
  const values = {};
149
- if (metadata.model !== void 0) values.model = metadata.model;
150
- if (metadata.inputTokens !== void 0) values.input_tokens = metadata.inputTokens;
151
- if (Object.keys(values).length === 0) return;
116
+ for (const [field, value] of entries) values[toSnakeCase(field)] = value;
152
117
  return values;
153
118
  };
154
119
 
@@ -1 +1 @@
1
- {"version":3,"file":"aiExtractor.js","names":["counts: unknown","keyFieldMap: Record<string, Mapping>","candidates: Partial<Record<Field, Candidate>>","metadata: AIMetadata","values: Record<string, unknown>"],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":["import type { Attributes, AttributeValue } from \"@opentelemetry/api\";\n\n/**\n * AI metadata extracted from a span's attributes.\n *\n * A field is only present when a matching attribute was found on the span;\n * absent fields are omitted rather than zero-valued.\n */\nexport interface AIMetadata {\n /** The requested model, e.g. `gpt-4.1-nano`. */\n model?: string;\n /** The number of input (prompt) tokens consumed by the request. */\n inputTokens?: number;\n}\n\n/**\n * A `convention` identifies a namespace of AI span attributes and orders which\n * should win when multiple namespaces are present on the same span. Lower\n * numbers override higher numbers.\n */\nenum Convention {\n Langfuse = 1,\n Semconv = 2,\n OpenInference = 3,\n Vercel = 4,\n}\n\ntype Field = keyof AIMetadata;\n\ninterface Mapping {\n /**\n * The canonical {@link AIMetadata} field this attribute populates. Omitted\n * for composite attributes that only carry an {@link Mapping.expand}.\n */\n field?: Field;\n convention: Convention;\n /**\n * Composite attributes (e.g. a JSON blob of token counts) provide an\n * `expand` that explodes the raw value into synthetic scalar attributes,\n * each re-matched against {@link keyFieldMap}.\n */\n expand?: (value: AttributeValue) => Record<string, AttributeValue>;\n}\n\n/**\n * Prefix for the synthetic attributes produced by\n * {@link expandLangfuseUsageDetails}, kept distinct from any real attribute\n * namespace.\n */\nconst langfuseUsagePrefix = \"__langfuse.usage_details.\";\n\n/**\n * Parses the `langfuse.observation.usage_details` JSON blob (e.g.\n * `{\"input\":17,\"output\":36,\"total\":53}`) and emits a synthetic scalar\n * attribute for each count we track. Only `input` is emitted; the other counts\n * (output, total, cached, reasoning, …) are intentionally dropped since this\n * extractor tracks input tokens alone.\n */\nconst expandLangfuseUsageDetails = (\n value: AttributeValue,\n): Record<string, AttributeValue> => {\n if (typeof value !== \"string\" || value === \"\") {\n return {};\n }\n\n let counts: unknown;\n try {\n counts = JSON.parse(value);\n } catch {\n return {};\n }\n\n if (typeof counts !== \"object\" || counts === null) {\n return {};\n }\n\n const input = (counts as Record<string, unknown>).input;\n if (typeof input !== \"number\") {\n return {};\n }\n\n return { [`${langfuseUsagePrefix}input`]: input };\n};\n\n/**\n * Maps a source attribute key to the canonical {@link AIMetadata} field it\n * populates and the convention it belongs to.\n */\nconst keyFieldMap: Record<string, Mapping> = {\n // Langfuse (`langfuse.*` telemetry). Langfuse reports token usage as a single\n // JSON blob under `usage_details`; it is expanded into synthetic per-count\n // attributes that are matched back through this map. Langfuse only emits a\n // response model (not the requested model), which this extractor doesn't\n // track, so no `model` mapping is registered here. Langfuse outranks the\n // other conventions when several are present on one span.\n \"langfuse.observation.usage_details\": {\n convention: Convention.Langfuse,\n expand: expandLangfuseUsageDetails,\n },\n [`${langfuseUsagePrefix}input`]: {\n field: \"inputTokens\",\n convention: Convention.Langfuse,\n },\n\n // OpenTelemetry Semantic Conventions\n \"gen_ai.request.model\": { field: \"model\", convention: Convention.Semconv },\n \"gen_ai.usage.input_tokens\": {\n field: \"inputTokens\",\n convention: Convention.Semconv,\n },\n\n // OpenInference\n \"llm.model_name\": { field: \"model\", convention: Convention.OpenInference },\n \"llm.token_count.prompt\": {\n field: \"inputTokens\",\n convention: Convention.OpenInference,\n },\n\n // Vercel AI SDK (native `ai.*` telemetry)\n \"ai.model.id\": { field: \"model\", convention: Convention.Vercel },\n \"ai.usage.inputTokens\": {\n field: \"inputTokens\",\n convention: Convention.Vercel,\n },\n // Embeddings spans emit only a single `ai.usage.tokens` count (no\n // input/output split); map it to inputTokens to match the semconv embeddings\n // case.\n \"ai.usage.tokens\": { field: \"inputTokens\", convention: Convention.Vercel },\n};\n\ninterface Candidate {\n value: AttributeValue;\n convention: Convention;\n}\n\n/**\n * Extracts AI model metadata from a span's attributes.\n *\n * Attributes are matched across multiple instrumentation conventions\n * (OpenTelemetry semconv, OpenInference, Vercel AI SDK). When more than one\n * convention supplies the same field, the highest-precedence value wins.\n *\n * @param attributes - The span attributes, as exposed by\n * `ReadableSpan.attributes`.\n */\nexport const extractAIMetadataFromAttributes = (\n attributes: Attributes,\n): AIMetadata => {\n // Track the highest-precedence (lowest convention) candidate seen per field.\n const candidates: Partial<Record<Field, Candidate>> = {};\n\n const record = (mapping: Mapping, value: AttributeValue) => {\n if (!mapping.field) {\n return;\n }\n const existing = candidates[mapping.field];\n if (!existing || mapping.convention < existing.convention) {\n candidates[mapping.field] = { value, convention: mapping.convention };\n }\n };\n\n for (const [key, value] of Object.entries(attributes)) {\n if (value === undefined) {\n continue;\n }\n\n const mapping = keyFieldMap[key];\n if (!mapping) {\n continue;\n }\n\n // Composite attribute: explode into synthetic children and match each back\n // through the map.\n if (mapping.expand) {\n for (const [childKey, childValue] of Object.entries(\n mapping.expand(value),\n )) {\n const childMapping = keyFieldMap[childKey];\n if (childMapping) {\n record(childMapping, childValue);\n }\n }\n continue;\n }\n\n record(mapping, value);\n }\n\n const metadata: AIMetadata = {};\n\n const model = candidates.model?.value;\n if (typeof model === \"string\" && model !== \"\") {\n metadata.model = model;\n }\n\n const inputTokens = candidates.inputTokens?.value;\n if (inputTokens !== undefined) {\n // Token counts arrive as numbers from the SDK, but OTLP/JSON encodes int64\n // as either a number or a quoted string, so coerce defensively.\n const n = Number(inputTokens);\n if (!Number.isNaN(n)) {\n metadata.inputTokens = n;\n }\n }\n\n return metadata;\n};\n\n/**\n * Aggregates two {@link AIMetadata} values into one.\n *\n * Input token counts are summed, while `a`'s model takes precedence over `b`'s.\n * Each field is only present in the result when at least one input supplies it.\n *\n * @param a - The primary metadata; its `model` wins when both are present.\n * @param b - The secondary metadata.\n */\nexport const aggregate = (a: AIMetadata, b: AIMetadata): AIMetadata => {\n const metadata: AIMetadata = {};\n\n const model = a.model ?? b.model;\n if (model !== undefined) {\n metadata.model = model;\n }\n\n if (a.inputTokens !== undefined || b.inputTokens !== undefined) {\n metadata.inputTokens = (a.inputTokens ?? 0) + (b.inputTokens ?? 0);\n }\n\n return metadata;\n};\n\n/**\n * Maps an {@link AIMetadata} value onto the server's `inngest.ai` metadata\n * schema (snake_case keys). Only the fields we extract are emitted; absent\n * fields are omitted rather than zero-valued. Returns `undefined` when there\n * is nothing to emit, so callers can skip stamping metadata entirely.\n */\nexport const toInngestAIMetadataValues = (\n metadata: AIMetadata,\n): Record<string, unknown> | undefined => {\n const values: Record<string, unknown> = {};\n\n if (metadata.model !== undefined) {\n values.model = metadata.model;\n }\n\n if (metadata.inputTokens !== undefined) {\n values.input_tokens = metadata.inputTokens;\n }\n\n if (Object.keys(values).length === 0) {\n return undefined;\n }\n\n return values;\n};\n"],"mappings":";;;;;;AAoBA,IAAK,oDAAL;AACE;AACA;AACA;AACA;;EAJG;;;;;;AA6BL,MAAM,sBAAsB;;;;;;;;AAS5B,MAAM,8BACJ,UACmC;AACnC,KAAI,OAAO,UAAU,YAAY,UAAU,GACzC,QAAO,EAAE;CAGX,IAAIA;AACJ,KAAI;AACF,WAAS,KAAK,MAAM,MAAM;SACpB;AACN,SAAO,EAAE;;AAGX,KAAI,OAAO,WAAW,YAAY,WAAW,KAC3C,QAAO,EAAE;CAGX,MAAM,QAAS,OAAmC;AAClD,KAAI,OAAO,UAAU,SACnB,QAAO,EAAE;AAGX,QAAO,GAAG,GAAG,oBAAoB,SAAS,OAAO;;;;;;AAOnD,MAAMC,cAAuC;CAO3C,sCAAsC;EACpC,YAAY,WAAW;EACvB,QAAQ;EACT;EACA,GAAG,oBAAoB,SAAS;EAC/B,OAAO;EACP,YAAY,WAAW;EACxB;CAGD,wBAAwB;EAAE,OAAO;EAAS,YAAY,WAAW;EAAS;CAC1E,6BAA6B;EAC3B,OAAO;EACP,YAAY,WAAW;EACxB;CAGD,kBAAkB;EAAE,OAAO;EAAS,YAAY,WAAW;EAAe;CAC1E,0BAA0B;EACxB,OAAO;EACP,YAAY,WAAW;EACxB;CAGD,eAAe;EAAE,OAAO;EAAS,YAAY,WAAW;EAAQ;CAChE,wBAAwB;EACtB,OAAO;EACP,YAAY,WAAW;EACxB;CAID,mBAAmB;EAAE,OAAO;EAAe,YAAY,WAAW;EAAQ;CAC3E;;;;;;;;;;;AAiBD,MAAa,mCACX,eACe;CAEf,MAAMC,aAAgD,EAAE;CAExD,MAAM,UAAU,SAAkB,UAA0B;AAC1D,MAAI,CAAC,QAAQ,MACX;EAEF,MAAM,WAAW,WAAW,QAAQ;AACpC,MAAI,CAAC,YAAY,QAAQ,aAAa,SAAS,WAC7C,YAAW,QAAQ,SAAS;GAAE;GAAO,YAAY,QAAQ;GAAY;;AAIzE,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,WAAW,EAAE;AACrD,MAAI,UAAU,OACZ;EAGF,MAAM,UAAU,YAAY;AAC5B,MAAI,CAAC,QACH;AAKF,MAAI,QAAQ,QAAQ;AAClB,QAAK,MAAM,CAAC,UAAU,eAAe,OAAO,QAC1C,QAAQ,OAAO,MAAM,CACtB,EAAE;IACD,MAAM,eAAe,YAAY;AACjC,QAAI,aACF,QAAO,cAAc,WAAW;;AAGpC;;AAGF,SAAO,SAAS,MAAM;;CAGxB,MAAMC,WAAuB,EAAE;CAE/B,MAAM,QAAQ,WAAW,OAAO;AAChC,KAAI,OAAO,UAAU,YAAY,UAAU,GACzC,UAAS,QAAQ;CAGnB,MAAM,cAAc,WAAW,aAAa;AAC5C,KAAI,gBAAgB,QAAW;EAG7B,MAAM,IAAI,OAAO,YAAY;AAC7B,MAAI,CAAC,OAAO,MAAM,EAAE,CAClB,UAAS,cAAc;;AAI3B,QAAO;;;;;;;;;;;AAYT,MAAa,aAAa,GAAe,MAA8B;CACrE,MAAMA,WAAuB,EAAE;CAE/B,MAAM,QAAQ,EAAE,SAAS,EAAE;AAC3B,KAAI,UAAU,OACZ,UAAS,QAAQ;AAGnB,KAAI,EAAE,gBAAgB,UAAa,EAAE,gBAAgB,OACnD,UAAS,eAAe,EAAE,eAAe,MAAM,EAAE,eAAe;AAGlE,QAAO;;;;;;;;AAST,MAAa,6BACX,aACwC;CACxC,MAAMC,SAAkC,EAAE;AAE1C,KAAI,SAAS,UAAU,OACrB,QAAO,QAAQ,SAAS;AAG1B,KAAI,SAAS,gBAAgB,OAC3B,QAAO,eAAe,SAAS;AAGjC,KAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EACjC;AAGF,QAAO"}
1
+ {"version":3,"file":"aiExtractor.js","names":["metadata: AIMetadata","out: AIMetadata","values: Record<string, unknown>"],"sources":["../../../../src/components/execution/otel/aiExtractor.ts"],"sourcesContent":["import type { Attributes } from \"@opentelemetry/api\";\n\n/**\n * Canonical AI metadata extracted from a span's OpenTelemetry GenAI semantic\n * convention (`gen_ai.*`) attributes.\n *\n * The fields below are an explicit **allowlist**: only these are ever read from\n * a span (see {@link FIELD_SPECS}). Anything not mapped — prompt/response\n * content, messages, tool calls, embeddings payloads, and other\n * potentially-sensitive or bulky attributes — is not captured.\n *\n * For each category we describe how multiple AIMetadata values are aggregated\n * (see {@link aggregate}).\n */\nexport interface AIMetadata {\n // Identity & classification (last-write-wins).\n\n /** The requested model, e.g. `gpt-4.1-nano`. */\n requestModel?: string;\n /**\n * The model that actually served the request. This is often a dated snapshot\n * of the requested {@link AIMetadata.requestModel} (e.g.\n * `gpt-4.1-nano-2025-04-14`).\n */\n responseModel?: string;\n /** The AI provider that served the request (e.g. `openai`) */\n provider?: string;\n /** The provider's identifier for the response, e.g. `chatcmpl-...`. */\n responseId?: string;\n\n // Token usage (summed).\n\n /** The number of input tokens consumed by the request. */\n inputTokens?: number;\n /** The number of output tokens produced by the response. */\n outputTokens?: number;\n /** The total tokens consumed, as reported by the provider. */\n totalTokens?: number;\n /**\n * Cached input tokens read from the prompt cache. Providers differ on\n * accounting. OpenAI's cached tokens are a subset of\n * {@link AIMetadata.inputTokens}, Anthropic's are additive. Callers must\n * not assume a single relationship.\n */\n cacheReadTokens?: number;\n /** Tokens written to the prompt cache. */\n cacheCreationTokens?: number;\n /** Reasoning/thinking tokens, when the emitter reports them separately. */\n reasoningTokens?: number;\n\n // Request / inference parameters (last-write-wins). These describe the\n // request the caller made, not the response, and are stored raw as the\n // emitter reports them.\n\n /** Sampling temperature requested, e.g. `0.7`. */\n temperature?: number;\n /** Nucleus sampling probability mass requested (`top_p`), e.g. `0.9`. */\n topP?: number;\n /** Upper bound on tokens to generate (`max_tokens`). */\n maxTokens?: number;\n /** Frequency penalty requested. */\n frequencyPenalty?: number;\n /** Presence penalty requested. */\n presencePenalty?: number;\n /** Sampling seed requested, when the emitter reports it. */\n seed?: number;\n}\n\ntype ValueType = \"text\" | \"number\";\ntype MergeStrategy = \"replace\" | \"sum\";\n\n/**\n * Derives the subset of AIMetadata keys whose assigned value matches TValue.\n *\n * AIMetadata fields are optional (`model?: string`), so each field's type is\n * effectively `string | undefined` or `number | undefined`. `Exclude` removes\n * `undefined` before checking the value type, and `-?` prevents optional fields\n * from adding `undefined` back into the final key union.\n */\ntype FieldsWithValue<TValue> = {\n [TField in keyof AIMetadata]-?: Exclude<\n AIMetadata[TField],\n undefined\n > extends TValue\n ? TField\n : never;\n}[keyof AIMetadata];\n\ntype TextField = FieldsWithValue<string>;\ntype NumberField = FieldsWithValue<number>;\n\ninterface BaseFieldSpec {\n /** The source `gen_ai.*` attribute key. */\n source: string;\n valueType: ValueType;\n merge: MergeStrategy;\n}\n\ninterface TextFieldSpec extends BaseFieldSpec {\n /** The canonical {@link AIMetadata} field this populates. */\n field: TextField;\n valueType: \"text\";\n merge: \"replace\";\n}\n\ninterface NumberFieldSpec extends BaseFieldSpec {\n /** The canonical {@link AIMetadata} field this populates. */\n field: NumberField;\n valueType: \"number\";\n}\n\ntype FieldSpec = TextFieldSpec | NumberFieldSpec;\n\nfunction textField(field: TextField, source: string): TextFieldSpec {\n return {\n field,\n source,\n valueType: \"text\",\n merge: \"replace\",\n };\n}\n\nfunction numberField(\n field: NumberField,\n source: string,\n merge: MergeStrategy,\n): NumberFieldSpec {\n return {\n field,\n source,\n valueType: \"number\",\n merge,\n };\n}\n\n/**\n * Every `gen_ai.*` attribute we capture, mapped to its canonical field.\n *\n * Anything not listed here (prompt/response content, messages, tool calls,\n * unknown keys) is ignored.\n */\nexport const FIELD_SPECS = [\n // Identity & classification.\n textField(\"requestModel\", \"gen_ai.request.model\"),\n textField(\"responseModel\", \"gen_ai.response.model\"),\n textField(\"provider\", \"gen_ai.provider.name\"),\n textField(\"responseId\", \"gen_ai.response.id\"),\n\n // Token usage.\n numberField(\"inputTokens\", \"gen_ai.usage.input_tokens\", \"sum\"),\n numberField(\"outputTokens\", \"gen_ai.usage.output_tokens\", \"sum\"),\n numberField(\"totalTokens\", \"gen_ai.usage.total_tokens\", \"sum\"),\n numberField(\"cacheReadTokens\", \"gen_ai.usage.cache_read.input_tokens\", \"sum\"),\n numberField(\n \"cacheCreationTokens\",\n \"gen_ai.usage.cache_creation.input_tokens\",\n \"sum\",\n ),\n numberField(\"reasoningTokens\", \"gen_ai.usage.reasoning.output_tokens\", \"sum\"),\n\n // Request / inference parameters. These describe the request, not a quantity,\n // so they replace rather than sum when a step makes several calls.\n numberField(\"temperature\", \"gen_ai.request.temperature\", \"replace\"),\n numberField(\"topP\", \"gen_ai.request.top_p\", \"replace\"),\n numberField(\"maxTokens\", \"gen_ai.request.max_tokens\", \"replace\"),\n numberField(\n \"frequencyPenalty\",\n \"gen_ai.request.frequency_penalty\",\n \"replace\",\n ),\n numberField(\"presencePenalty\", \"gen_ai.request.presence_penalty\", \"replace\"),\n numberField(\"seed\", \"gen_ai.request.seed\", \"replace\"),\n] as const satisfies readonly FieldSpec[];\n\nfunction parseNumericAttribute(value: unknown): number | undefined {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value !== \"string\" || value === \"\") {\n return undefined;\n }\n\n const num = Number(value);\n return Number.isFinite(num) ? num : undefined;\n}\n\n/**\n * Extracts {@link AIMetadata} from a span's attributes.\n *\n * Only the allowlisted {@link FIELD_SPECS} are read. Every other attribute is\n * ignored. Numeric fields accept numbers and quoted numeric strings and are\n * otherwise dropped, as OTLP/JSON may encode int64 as a quoted string. Text\n * fields are dropped when empty.\n *\n * Returns an empty object for spans carrying no recognised `gen_ai.*`\n * attributes.\n *\n * @param attributes - The span attributes, as exposed by\n * `ReadableSpan.attributes`.\n */\nexport const extractAIMetadataFromAttributes = (\n attributes: Attributes,\n): AIMetadata => {\n const metadata: AIMetadata = {};\n\n for (const spec of FIELD_SPECS) {\n const value = attributes[spec.source];\n if (value === undefined) {\n continue;\n }\n\n if (spec.valueType === \"text\") {\n const text = typeof value === \"string\" ? value : String(value);\n if (text !== \"\") {\n metadata[spec.field] = text;\n }\n } else {\n const num = parseNumericAttribute(value);\n if (num !== undefined) {\n metadata[spec.field] = num;\n }\n }\n }\n\n return metadata;\n};\n\n/**\n * Aggregates two {@link AIMetadata} values, folding a later call's metadata into\n * an earlier accumulator for a single step.\n *\n * - Token-count fields (`merge: \"sum\"`) are **summed**, so a step that makes\n * several LLM calls reports their combined usage.\n * - Every other field uses `merge: \"replace\"` (`b` overwrites `a`)\n *\n * A field is present in the result only when at least one input supplies it.\n *\n * @param a - The accumulator (earlier calls).\n * @param b - The later metadata, whose values win on conflict (and add for sums).\n */\nexport const aggregate = (a: AIMetadata, b: AIMetadata): AIMetadata => {\n const out: AIMetadata = { ...a };\n\n for (const spec of FIELD_SPECS) {\n if (spec.valueType === \"number\") {\n const bValue = b[spec.field];\n if (bValue === undefined) {\n continue;\n }\n\n if (spec.merge === \"sum\") {\n out[spec.field] = (out[spec.field] ?? 0) + bValue;\n } else {\n out[spec.field] = bValue;\n }\n } else if (spec.valueType === \"text\") {\n // Text fields are always replace.\n const bValue = b[spec.field];\n if (bValue === undefined) {\n continue;\n }\n out[spec.field] = bValue;\n }\n }\n\n return out;\n};\n\n/** Converts a canonical camelCase field name to the server's snake_case key. */\nconst toSnakeCase = (field: string): string =>\n field.replace(/[A-Z]/g, (char) => `_${char.toLowerCase()}`);\n\n/**\n * Maps an {@link AIMetadata} value onto the server's `inngest.ai` metadata\n * values, converting each canonical camelCase field to snake_case (e.g.\n * `inputTokens` → `input_tokens`). Returns `undefined` when there is nothing to\n * emit so callers can skip stamping metadata entirely.\n */\nexport const toInngestAIMetadataValues = (\n metadata: AIMetadata,\n): Record<string, unknown> | undefined => {\n const entries = Object.entries(metadata);\n if (entries.length === 0) {\n return undefined;\n }\n\n const values: Record<string, unknown> = {};\n for (const [field, value] of entries) {\n values[toSnakeCase(field)] = value;\n }\n\n return values;\n};\n"],"mappings":";AAiHA,SAAS,UAAU,OAAkB,QAA+B;AAClE,QAAO;EACL;EACA;EACA,WAAW;EACX,OAAO;EACR;;AAGH,SAAS,YACP,OACA,QACA,OACiB;AACjB,QAAO;EACL;EACA;EACA,WAAW;EACX;EACD;;;;;;;;AASH,MAAa,cAAc;CAEzB,UAAU,gBAAgB,uBAAuB;CACjD,UAAU,iBAAiB,wBAAwB;CACnD,UAAU,YAAY,uBAAuB;CAC7C,UAAU,cAAc,qBAAqB;CAG7C,YAAY,eAAe,6BAA6B,MAAM;CAC9D,YAAY,gBAAgB,8BAA8B,MAAM;CAChE,YAAY,eAAe,6BAA6B,MAAM;CAC9D,YAAY,mBAAmB,wCAAwC,MAAM;CAC7E,YACE,uBACA,4CACA,MACD;CACD,YAAY,mBAAmB,wCAAwC,MAAM;CAI7E,YAAY,eAAe,8BAA8B,UAAU;CACnE,YAAY,QAAQ,wBAAwB,UAAU;CACtD,YAAY,aAAa,6BAA6B,UAAU;CAChE,YACE,oBACA,oCACA,UACD;CACD,YAAY,mBAAmB,mCAAmC,UAAU;CAC5E,YAAY,QAAQ,uBAAuB,UAAU;CACtD;AAED,SAAS,sBAAsB,OAAoC;AACjE,KAAI,OAAO,UAAU,SACnB,QAAO,OAAO,SAAS,MAAM,GAAG,QAAQ;AAG1C,KAAI,OAAO,UAAU,YAAY,UAAU,GACzC;CAGF,MAAM,MAAM,OAAO,MAAM;AACzB,QAAO,OAAO,SAAS,IAAI,GAAG,MAAM;;;;;;;;;;;;;;;;AAiBtC,MAAa,mCACX,eACe;CACf,MAAMA,WAAuB,EAAE;AAE/B,MAAK,MAAM,QAAQ,aAAa;EAC9B,MAAM,QAAQ,WAAW,KAAK;AAC9B,MAAI,UAAU,OACZ;AAGF,MAAI,KAAK,cAAc,QAAQ;GAC7B,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ,OAAO,MAAM;AAC9D,OAAI,SAAS,GACX,UAAS,KAAK,SAAS;SAEpB;GACL,MAAM,MAAM,sBAAsB,MAAM;AACxC,OAAI,QAAQ,OACV,UAAS,KAAK,SAAS;;;AAK7B,QAAO;;;;;;;;;;;;;;;AAgBT,MAAa,aAAa,GAAe,MAA8B;CACrE,MAAMC,MAAkB,EAAE,GAAG,GAAG;AAEhC,MAAK,MAAM,QAAQ,YACjB,KAAI,KAAK,cAAc,UAAU;EAC/B,MAAM,SAAS,EAAE,KAAK;AACtB,MAAI,WAAW,OACb;AAGF,MAAI,KAAK,UAAU,MACjB,KAAI,KAAK,UAAU,IAAI,KAAK,UAAU,KAAK;MAE3C,KAAI,KAAK,SAAS;YAEX,KAAK,cAAc,QAAQ;EAEpC,MAAM,SAAS,EAAE,KAAK;AACtB,MAAI,WAAW,OACb;AAEF,MAAI,KAAK,SAAS;;AAItB,QAAO;;;AAIT,MAAM,eAAe,UACnB,MAAM,QAAQ,WAAW,SAAS,IAAI,KAAK,aAAa,GAAG;;;;;;;AAQ7D,MAAa,6BACX,aACwC;CACxC,MAAM,UAAU,OAAO,QAAQ,SAAS;AACxC,KAAI,QAAQ,WAAW,EACrB;CAGF,MAAMC,SAAkC,EAAE;AAC1C,MAAK,MAAM,CAAC,OAAO,UAAU,QAC3B,QAAO,YAAY,MAAM,IAAI;AAG/B,QAAO"}
@@ -79,6 +79,11 @@ declare const extendedTracesMiddleware: ({
79
79
  ctx: {
80
80
  tracer: _opentelemetry_api0.Tracer;
81
81
  event: Simplify<EventPayload>;
82
+ defer: DeferFn;
83
+ events: AsTuple<Simplify<EventPayload>>;
84
+ runId: string;
85
+ requestId?: string | undefined;
86
+ jobId?: string | undefined;
82
87
  step: {
83
88
  sendEvent: (idOrOptions: StepOptionsOrId, payload: SendEventPayload) => Promise<SendEventOutput<ClientOptions>>;
84
89
  waitForSignal: <TData>(idOrOptions: StepOptionsOrId, opts: {
@@ -165,11 +170,6 @@ declare const extendedTracesMiddleware: ({
165
170
  }) => InvocationResult<Jsonify<GetFunctionOutputRaw<TFunction>>>;
166
171
  fetch: StepFetch;
167
172
  };
168
- defer: DeferFn;
169
- events: AsTuple<Simplify<EventPayload>>;
170
- runId: string;
171
- requestId?: string | undefined;
172
- jobId?: string | undefined;
173
173
  group: ReturnType<typeof createGroupTools>;
174
174
  attempt: number;
175
175
  maxAttempts?: number | undefined;
@@ -79,6 +79,11 @@ declare const extendedTracesMiddleware: ({
79
79
  ctx: {
80
80
  tracer: _opentelemetry_api0.Tracer;
81
81
  event: Simplify<EventPayload>;
82
+ defer: DeferFn;
83
+ events: AsTuple<Simplify<EventPayload>>;
84
+ runId: string;
85
+ requestId?: string | undefined;
86
+ jobId?: string | undefined;
82
87
  step: {
83
88
  sendEvent: (idOrOptions: StepOptionsOrId, payload: SendEventPayload) => Promise<SendEventOutput<ClientOptions>>;
84
89
  waitForSignal: <TData>(idOrOptions: StepOptionsOrId, opts: {
@@ -165,11 +170,6 @@ declare const extendedTracesMiddleware: ({
165
170
  }) => InvocationResult<Jsonify<GetFunctionOutputRaw<TFunction>>>;
166
171
  fetch: StepFetch;
167
172
  };
168
- defer: DeferFn;
169
- events: AsTuple<Simplify<EventPayload>>;
170
- runId: string;
171
- requestId?: string | undefined;
172
- jobId?: string | undefined;
173
173
  group: ReturnType<typeof createGroupTools>;
174
174
  attempt: number;
175
175
  maxAttempts?: number | undefined;
@@ -64,9 +64,9 @@ declare namespace Realtime {
64
64
  stream_id: z.ZodOptional<z.ZodString>;
65
65
  kind: z.ZodEnum<["step", "run", "data", "ping", "pong", "closing", "event", "sub", "unsub", "datastream-start", "datastream-end", "chunk"]>;
66
66
  }, "strip", z.ZodTypeAny, {
67
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
68
- channel?: string | undefined;
67
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
69
68
  data?: any;
69
+ channel?: string | undefined;
70
70
  topic?: string | undefined;
71
71
  run_id?: string | undefined;
72
72
  fn_id?: string | undefined;
@@ -74,9 +74,9 @@ declare namespace Realtime {
74
74
  env_id?: string | undefined;
75
75
  stream_id?: string | undefined;
76
76
  }, {
77
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
78
- channel?: string | undefined;
77
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
79
78
  data?: any;
79
+ channel?: string | undefined;
80
80
  topic?: string | undefined;
81
81
  run_id?: string | undefined;
82
82
  fn_id?: string | undefined;
@@ -85,7 +85,7 @@ declare namespace Realtime {
85
85
  stream_id?: string | undefined;
86
86
  }>, {
87
87
  data: any;
88
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
88
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
89
89
  channel?: string | undefined;
90
90
  topic?: string | undefined;
91
91
  run_id?: string | undefined;
@@ -94,9 +94,9 @@ declare namespace Realtime {
94
94
  env_id?: string | undefined;
95
95
  stream_id?: string | undefined;
96
96
  }, {
97
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
98
- channel?: string | undefined;
97
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
99
98
  data?: any;
99
+ channel?: string | undefined;
100
100
  topic?: string | undefined;
101
101
  run_id?: string | undefined;
102
102
  fn_id?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/components/realtime/types.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/components/realtime/types.ts"],"sourcesContent":[],"mappings":"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"}
@@ -64,9 +64,9 @@ declare namespace Realtime {
64
64
  stream_id: z.ZodOptional<z.ZodString>;
65
65
  kind: z.ZodEnum<["step", "run", "data", "ping", "pong", "closing", "event", "sub", "unsub", "datastream-start", "datastream-end", "chunk"]>;
66
66
  }, "strip", z.ZodTypeAny, {
67
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
68
- channel?: string | undefined;
67
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
69
68
  data?: any;
69
+ channel?: string | undefined;
70
70
  topic?: string | undefined;
71
71
  run_id?: string | undefined;
72
72
  fn_id?: string | undefined;
@@ -74,9 +74,9 @@ declare namespace Realtime {
74
74
  env_id?: string | undefined;
75
75
  stream_id?: string | undefined;
76
76
  }, {
77
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
78
- channel?: string | undefined;
77
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
79
78
  data?: any;
79
+ channel?: string | undefined;
80
80
  topic?: string | undefined;
81
81
  run_id?: string | undefined;
82
82
  fn_id?: string | undefined;
@@ -85,7 +85,7 @@ declare namespace Realtime {
85
85
  stream_id?: string | undefined;
86
86
  }>, {
87
87
  data: any;
88
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
88
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
89
89
  channel?: string | undefined;
90
90
  topic?: string | undefined;
91
91
  run_id?: string | undefined;
@@ -94,9 +94,9 @@ declare namespace Realtime {
94
94
  env_id?: string | undefined;
95
95
  stream_id?: string | undefined;
96
96
  }, {
97
- kind: "data" | "event" | "run" | "step" | "sub" | "ping" | "pong" | "closing" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
98
- channel?: string | undefined;
97
+ kind: "data" | "event" | "run" | "step" | "ping" | "pong" | "closing" | "sub" | "unsub" | "datastream-start" | "datastream-end" | "chunk";
99
98
  data?: any;
99
+ channel?: string | undefined;
100
100
  topic?: string | undefined;
101
101
  run_id?: string | undefined;
102
102
  fn_id?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/components/realtime/types.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/components/realtime/types.ts"],"sourcesContent":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inngest",
3
- "version": "4.8.0",
3
+ "version": "4.9.0",
4
4
  "description": "Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",
package/types.d.cts CHANGED
@@ -1449,12 +1449,12 @@ declare const functionConfigSchema: z.ZodObject<{
1449
1449
  timeout: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
1450
1450
  }, "strict", z.ZodTypeAny, {
1451
1451
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1452
- key?: string | undefined;
1453
1452
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1453
+ key?: string | undefined;
1454
1454
  }, {
1455
1455
  period: string;
1456
- key?: string | undefined;
1457
1456
  timeout?: string | undefined;
1457
+ key?: string | undefined;
1458
1458
  }>>;
1459
1459
  timeouts: z.ZodOptional<z.ZodObject<{
1460
1460
  start: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
@@ -1556,8 +1556,8 @@ declare const functionConfigSchema: z.ZodObject<{
1556
1556
  } | undefined;
1557
1557
  debounce?: {
1558
1558
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1559
- key?: string | undefined;
1560
1559
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1560
+ key?: string | undefined;
1561
1561
  } | undefined;
1562
1562
  timeouts?: {
1563
1563
  finish?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
@@ -1617,8 +1617,8 @@ declare const functionConfigSchema: z.ZodObject<{
1617
1617
  } | undefined;
1618
1618
  debounce?: {
1619
1619
  period: string;
1620
- key?: string | undefined;
1621
1620
  timeout?: string | undefined;
1621
+ key?: string | undefined;
1622
1622
  } | undefined;
1623
1623
  timeouts?: {
1624
1624
  finish?: string | undefined;
package/types.d.ts CHANGED
@@ -1449,12 +1449,12 @@ declare const functionConfigSchema: z.ZodObject<{
1449
1449
  timeout: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
1450
1450
  }, "strict", z.ZodTypeAny, {
1451
1451
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1452
- key?: string | undefined;
1453
1452
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1453
+ key?: string | undefined;
1454
1454
  }, {
1455
1455
  period: string;
1456
- key?: string | undefined;
1457
1456
  timeout?: string | undefined;
1457
+ key?: string | undefined;
1458
1458
  }>>;
1459
1459
  timeouts: z.ZodOptional<z.ZodObject<{
1460
1460
  start: z.ZodOptional<z.ZodEffects<z.ZodString, "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`, string>>;
@@ -1556,8 +1556,8 @@ declare const functionConfigSchema: z.ZodObject<{
1556
1556
  } | undefined;
1557
1557
  debounce?: {
1558
1558
  period: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s`;
1559
- key?: string | undefined;
1560
1559
  timeout?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
1560
+ key?: string | undefined;
1561
1561
  } | undefined;
1562
1562
  timeouts?: {
1563
1563
  finish?: "" | `${number}w` | `${number}d` | `${number}h` | `${number}m` | `${number}s` | `${number}m${number}s` | `${number}h${number}s` | `${number}h${number}m` | `${number}h${number}m${number}s` | `${number}d${number}s` | `${number}d${number}m` | `${number}d${number}m${number}s` | `${number}d${number}h` | `${number}d${number}h${number}s` | `${number}d${number}h${number}m` | `${number}d${number}h${number}m${number}s` | `${number}w${number}s` | `${number}w${number}m` | `${number}w${number}m${number}s` | `${number}w${number}h` | `${number}w${number}h${number}s` | `${number}w${number}h${number}m` | `${number}w${number}h${number}m${number}s` | `${number}w${number}d` | `${number}w${number}d${number}s` | `${number}w${number}d${number}m` | `${number}w${number}d${number}m${number}s` | `${number}w${number}d${number}h` | `${number}w${number}d${number}h${number}s` | `${number}w${number}d${number}h${number}m` | `${number}w${number}d${number}h${number}m${number}s` | undefined;
@@ -1617,8 +1617,8 @@ declare const functionConfigSchema: z.ZodObject<{
1617
1617
  } | undefined;
1618
1618
  debounce?: {
1619
1619
  period: string;
1620
- key?: string | undefined;
1621
1620
  timeout?: string | undefined;
1621
+ key?: string | undefined;
1622
1622
  } | undefined;
1623
1623
  timeouts?: {
1624
1624
  finish?: string | undefined;
package/version.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  //#region src/version.ts
3
- const version = "4.8.0";
3
+ const version = "4.9.0";
4
4
 
5
5
  //#endregion
6
6
  exports.version = version;
package/version.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"version.cjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"4.8.0\";\n"],"mappings":";;AACA,MAAa,UAAU"}
1
+ {"version":3,"file":"version.cjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"4.9.0\";\n"],"mappings":";;AACA,MAAa,UAAU"}
package/version.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/version.d.ts
2
- declare const version = "4.8.0";
2
+ declare const version = "4.9.0";
3
3
  //#endregion
4
4
  export { version };
5
5
  //# sourceMappingURL=version.d.cts.map
package/version.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/version.d.ts
2
- declare const version = "4.8.0";
2
+ declare const version = "4.9.0";
3
3
  //#endregion
4
4
  export { version };
5
5
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/version.ts
2
- const version = "4.8.0";
2
+ const version = "4.9.0";
3
3
 
4
4
  //#endregion
5
5
  export { version };
package/version.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"4.8.0\";\n"],"mappings":";AACA,MAAa,UAAU"}
1
+ {"version":3,"file":"version.js","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = \"4.9.0\";\n"],"mappings":";AACA,MAAa,UAAU"}