@mate-academy/llm-gateway 8.0.0-canary.4 → 8.0.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.
Files changed (44) hide show
  1. package/README.md +32 -5
  2. package/dist/LLMService.typedefs.d.ts +9 -2
  3. package/dist/LLMService.typedefs.js.map +1 -1
  4. package/dist/client/codegen/fetchPromptRecords.js +21 -1
  5. package/dist/client/codegen/fetchPromptRecords.js.map +1 -1
  6. package/dist/client/codegen/renderSnapshot.d.ts +2 -1
  7. package/dist/client/codegen/renderSnapshot.js +30 -8
  8. package/dist/client/codegen/renderSnapshot.js.map +1 -1
  9. package/dist/client/createLLMClient.d.ts +19 -1
  10. package/dist/client/createLLMClient.js +96 -37
  11. package/dist/client/createLLMClient.js.map +1 -1
  12. package/dist/client/createLLMClient.typedefs.d.ts +9 -1
  13. package/dist/client/index.d.ts +0 -1
  14. package/dist/client/index.js +0 -1
  15. package/dist/client/index.js.map +1 -1
  16. package/dist/client/promptRegistry.runtime.d.ts +50 -10
  17. package/dist/client/promptRegistry.runtime.js +124 -36
  18. package/dist/client/promptRegistry.runtime.js.map +1 -1
  19. package/dist/client/promptSnapshot.typedefs.d.ts +22 -2
  20. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js +38 -8
  21. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js.map +1 -1
  22. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAICompletion.service.js +39 -9
  23. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAICompletion.service.js.map +1 -1
  24. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAISpeechToText.service.js +19 -4
  25. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAISpeechToText.service.js.map +1 -1
  26. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.js +38 -8
  27. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.js.map +1 -1
  28. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js +38 -8
  29. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js.map +1 -1
  30. package/dist/providers/OpenAICompatible/OpenAICompatibleSpeechToText.service.js +19 -4
  31. package/dist/providers/OpenAICompatible/OpenAICompatibleSpeechToText.service.js.map +1 -1
  32. package/dist/services/LLMBaseService.abstract.js +14 -7
  33. package/dist/services/LLMBaseService.abstract.js.map +1 -1
  34. package/dist/utilities/index.d.ts +1 -0
  35. package/dist/utilities/index.js +1 -0
  36. package/dist/utilities/index.js.map +1 -1
  37. package/dist/utilities/llmTracing/llmTracing.typedefs.d.ts +37 -0
  38. package/dist/utilities/llmTracing/noopLLMTracing.js +6 -0
  39. package/dist/utilities/llmTracing/noopLLMTracing.js.map +1 -1
  40. package/dist/{client → utilities}/traceIO.d.ts +4 -0
  41. package/dist/{client → utilities}/traceIO.js +4 -0
  42. package/dist/utilities/traceIO.js.map +1 -0
  43. package/package.json +1 -1
  44. package/dist/client/traceIO.js.map +0 -1
package/README.md CHANGED
@@ -118,11 +118,22 @@ wired to the no-op tracer, so nothing breaks before rollout.
118
118
  `createLangfuseTracer` likewise falls back to a no-op when credentials are
119
119
  missing.
120
120
 
121
- Every completion / assistance call made through a gateway-built service emits a
122
- `generation` observation (full prompt/completion content, model, params, usage,
123
- cost) at the same success/error points the metrics reporter already wraps;
124
- assistance tool loops emit a child `tool` observation per tool call. All of this
125
- is fire-and-forget — a tracing failure never blocks or fails an LLM call.
121
+ Every completion, assistance and speech-to-text call made through a
122
+ gateway-built service emits exactly one `generation` observation (prompt/completion
123
+ content, model, params, usage, cost) at the same success/error points the metrics
124
+ reporter already wraps — one on success, one (level `ERROR`) on failure;
125
+ assistance tool loops emit a child `tool` observation per tool call. Calls that
126
+ carry no per-call trace context (text-to-speech, file and chat management) emit
127
+ none, on either branch. Observation input/output are capped by `truncateTraceIO`
128
+ before they are stamped, so a large prompt or completion cannot inflate the trace
129
+ payload. All of this is fire-and-forget — a tracing failure never blocks or fails
130
+ an LLM call.
131
+
132
+ Pass `traceContext.prompt` (`{ name, version, isFallback }`) to name the
133
+ observation after the managed prompt and link it to that prompt version in
134
+ Langfuse; a fallback prompt intentionally produces no link. The v2 client builds
135
+ this context for every call it makes, so `generate` and `runAgent` need nothing
136
+ at the call site.
126
137
 
127
138
  To group several calls under one trace, wrap the work so nested gateway calls
128
139
  attach to it automatically:
@@ -214,6 +225,22 @@ const { cityName } = await llm.generate(
214
225
  - **Override gating.** `mode: 'production'` rejects per-call `overrides` with
215
226
  `LLMConfigError`; only `mode: 'experiment'` (harness/playground/tests) honors
216
227
  them.
228
+ - **Chat-type prompts.** A prompt seeded as a Langfuse `chat` prompt binds with
229
+ `kind: 'chat'`. `compile()` produces a role-tagged message array with variables
230
+ substituted across every message; at call time a leading `system` message maps
231
+ to the provider's instructions slot and the final `user` message is the request,
232
+ preserving the message structure the prompt declares (plan §1.2). The validation
233
+ gate checks the variable subset across all message contents.
234
+ - **Per-call schema override.** Pass `schema` in the `generate` options to override
235
+ the registry binding's schema for one call; the return type follows the call-site
236
+ schema. Use it when the output contract is dynamic (e.g. a schema whose shape
237
+ depends on runtime input). A binding may omit `schema` when callers always pass
238
+ one. The schema is the code-owned output contract, honored in every mode.
239
+ - **`describePrompt(name)`.** Read-only accessor returning the
240
+ `{ provider, model, promptVersion, isFallback }` the runtime would serve right
241
+ now (same resolve/cache/fallback path as `generate`, no provider call). Use it
242
+ where analytics events need the resolved model name — keeping it off `generate`'s
243
+ data-only return.
217
244
 
218
245
  #### Agent runs (`runAgent`)
219
246
 
@@ -5,6 +5,7 @@ import type { LLMCompletionService, LLMAssistanceService, LLMSpeechToTextService
5
5
  import type { LLMLoggerInterface } from './utilities/logger';
6
6
  import type { LLMReporterInterface } from './utilities/reporter';
7
7
  import type { LLMSchemaInterface, InferSchema } from './utilities/schema';
8
+ import type { LLMTracedPrompt } from './utilities/llmTracing/llmTracing.typedefs';
8
9
  /**
9
10
  * Enum of supported LLM providers.
10
11
  */
@@ -280,10 +281,16 @@ export type LLMMethodBaseOptions<Reporter extends LLMReporterInterface<any> | un
280
281
  reporterContext?: never;
281
282
  });
282
283
  /**
283
- * Per-call trace context threaded into a single gateway call. When a prompt
284
- * name is present it names the observation instead of `<service>/<method>`.
284
+ * Per-call trace context threaded into a single gateway call. When a prompt is
285
+ * present it names the observation instead of `<service>/<method>` and links
286
+ * the observation to its managed prompt version.
285
287
  */
286
288
  export type LLMCallTraceContext = {
289
+ prompt?: LLMTracedPrompt;
290
+ /**
291
+ * @deprecated Use `prompt`. Kept on 7.8 for compatibility; still names the
292
+ * observation when `prompt` is absent.
293
+ */
287
294
  promptName?: string;
288
295
  metadata?: Record<string, string | number | boolean>;
289
296
  };
@@ -1 +1 @@
1
- {"version":3,"file":"LLMService.typedefs.js","sourceRoot":"","sources":["../src/LLMService.typedefs.ts"],"names":[],"mappings":";;;AAkCA;;GAEG;AACH,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,yDAAyC,CAAA;IACzC,iCAAiB,CAAA;AACnB,CAAC,EAJW,YAAY,4BAAZ,YAAY,QAIvB;AAoBD;;GAEG;AACH,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB,wCAAyB,CAAA;IACzB,8CAA+B,CAAA;IAC/B,8CAA+B,CAAA;AACjC,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAiLD;;GAEG;AACH,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,mCAAuB,CAAA;AACzB,CAAC,EAHW,QAAQ,wBAAR,QAAQ,QAGnB;AAED;;GAEG;AACH,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,sCAAa,CAAA;IACb,gDAAuB,CAAA;IACvB,kDAAyB,CAAA;AAC3B,CAAC,EAJW,qBAAqB,qCAArB,qBAAqB,QAIhC;AA4KD;;GAEG;AACH,IAAY,sBAeX;AAfD,WAAY,sBAAsB;IAChC,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,iDAAuB,CAAA;IACvB,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,yDAA+B,CAAA;IAC/B,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,oDAA0B,CAAA;IAC1B,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,iDAAuB,CAAA;AACzB,CAAC,EAfW,sBAAsB,sCAAtB,sBAAsB,QAejC;AAwND;;;;;GAKG;AACH,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,iDAAuB,CAAA;IACvB,0DAAgC,CAAA;IAChC,wDAA8B,CAAA;AAChC,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC"}
1
+ {"version":3,"file":"LLMService.typedefs.js","sourceRoot":"","sources":["../src/LLMService.typedefs.ts"],"names":[],"mappings":";;;AAmCA;;GAEG;AACH,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,yDAAyC,CAAA;IACzC,iCAAiB,CAAA;AACnB,CAAC,EAJW,YAAY,4BAAZ,YAAY,QAIvB;AAoBD;;GAEG;AACH,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB,wCAAyB,CAAA;IACzB,8CAA+B,CAAA;IAC/B,8CAA+B,CAAA;AACjC,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAiLD;;GAEG;AACH,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,mCAAuB,CAAA;AACzB,CAAC,EAHW,QAAQ,wBAAR,QAAQ,QAGnB;AAED;;GAEG;AACH,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,sCAAa,CAAA;IACb,gDAAuB,CAAA;IACvB,kDAAyB,CAAA;AAC3B,CAAC,EAJW,qBAAqB,qCAArB,qBAAqB,QAIhC;AAkLD;;GAEG;AACH,IAAY,sBAeX;AAfD,WAAY,sBAAsB;IAChC,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,iDAAuB,CAAA;IACvB,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,yDAA+B,CAAA;IAC/B,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,oDAA0B,CAAA;IAC1B,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,iDAAuB,CAAA;IACvB,mDAAyB,CAAA;IACzB,iDAAuB,CAAA;AACzB,CAAC,EAfW,sBAAsB,sCAAtB,sBAAsB,QAejC;AAwND;;;;;GAKG;AACH,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,iDAAuB,CAAA;IACvB,0DAAgC,CAAA;IAChC,wDAA8B,CAAA;AAChC,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC"}
@@ -3,6 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fetchPromptRecords = fetchPromptRecords;
4
4
  const llmConfig_schema_1 = require("../../client/llmConfig.schema");
5
5
  const extractVariables_1 = require("../../client/codegen/extractVariables");
6
+ const CHAT_MESSAGE_ROLES = [
7
+ 'system',
8
+ 'user',
9
+ 'assistant',
10
+ ];
6
11
  const DEFAULT_PAGE_SIZE = 100;
7
12
  /**
8
13
  * Fetches every prompt that carries the given label from the injected catalog
@@ -48,13 +53,20 @@ async function fetchSingleRecord(catalog, name, options) {
48
53
  return undefined;
49
54
  }
50
55
  const fallbackText = toFallbackText(record);
56
+ const fallbackMessages = isChatRecord(record)
57
+ ? toFallbackMessages(record)
58
+ : [];
59
+ const variableSource = isChatRecord(record)
60
+ ? fallbackMessages.map((message) => message.content).join('\n')
61
+ : fallbackText;
51
62
  return {
52
63
  name,
53
64
  kind: kindOf(record),
54
65
  version: record.version,
55
66
  labels: record.labels,
56
- requiredVariables: (0, extractVariables_1.extractRequiredVariables)(fallbackText),
67
+ requiredVariables: (0, extractVariables_1.extractRequiredVariables)(variableSource),
57
68
  fallbackText,
69
+ fallbackMessages,
58
70
  config: parsedConfig.data,
59
71
  };
60
72
  }
@@ -66,6 +78,14 @@ function toFallbackText(record) {
66
78
  }
67
79
  return record.text;
68
80
  }
81
+ function toFallbackMessages(record) {
82
+ return record.messages.flatMap((message) => (isKnownRole(message.role)
83
+ ? [{ role: message.role, content: message.content }]
84
+ : []));
85
+ }
86
+ function isKnownRole(role) {
87
+ return CHAT_MESSAGE_ROLES.includes(role);
88
+ }
69
89
  function kindOf(record) {
70
90
  return isChatRecord(record) ? 'chat' : 'text';
71
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetchPromptRecords.js","sourceRoot":"","sources":["../../../src/client/codegen/fetchPromptRecords.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetchPromptRecords.js","sourceRoot":"","sources":["../../../src/client/codegen/fetchPromptRecords.ts"],"names":[],"mappings":";;AAkCA,gDAgBC;AAlDD,gEAAkE;AAMlE,wEAA6E;AAQ7E,MAAM,kBAAkB,GAAoC;IAC1D,QAAQ;IACR,MAAM;IACN,WAAW;CACZ,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAO9B;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CACtC,OAAyB,EACzB,OAAkC;IAElC,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE/D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,OAAyB,EACzB,KAAa;IAEb,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;QAC1D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;YACzC,KAAK;YACL,IAAI;YACJ,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEpC,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;IAExC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,UAAU,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAyB,EACzB,IAAY,EACZ,OAAkC;IAElC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,wCAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEpE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,EAAE,CACd,aAAa,IAAI,gDAAgD;cAC/D,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5E,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC;QAC3C,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC;QACzC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/D,CAAC,CAAC,YAAY,CAAC;IAEjB,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,iBAAiB,EAAE,IAAA,2CAAwB,EAAC,cAAc,CAAC;QAC3D,YAAY;QACZ,gBAAgB;QAChB,MAAM,EAAE,YAAY,CAAC,IAAI;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAA8B;IACpD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,QAAQ;aACnB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAkC;IAElC,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAC1C,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QACpD,CAAC,CAAC,EAAE,CACP,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,MAAM,CAAC,MAA8B;IAC5C,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CACnB,MAA8B;IAE9B,OAAO,UAAU,IAAI,MAAM,CAAC;AAC9B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type LLMPromptConfig } from '../../client/llmConfig.schema';
2
- import { type LLMPromptKind } from '../../client/promptSnapshot.typedefs';
2
+ import { type LLMPromptKind, type LLMPromptMessage } from '../../client/promptSnapshot.typedefs';
3
3
  export interface CodegenPromptRecord {
4
4
  name: string;
5
5
  kind: LLMPromptKind;
@@ -7,6 +7,7 @@ export interface CodegenPromptRecord {
7
7
  labels: string[];
8
8
  requiredVariables: string[];
9
9
  fallbackText: string;
10
+ fallbackMessages: LLMPromptMessage[];
10
11
  config: LLMPromptConfig;
11
12
  }
12
13
  export interface RenderSnapshotOptions {
@@ -8,6 +8,7 @@ const FILE_HEADER = `/* eslint-disable */
8
8
  // non-blocking at API pod boot. Gitignored exactly like GraphQL generated files.
9
9
 
10
10
  import {
11
+ type LLMPromptMessage,
11
12
  type LLMPromptSnapshot,
12
13
  type LLMVariableValue,
13
14
  } from '@mate-academy/llm-gateway';
@@ -82,10 +83,14 @@ function renderCompilers(records) {
82
83
  const strictVars = record.requiredVariables.length > 0
83
84
  ? `Record<${member}Variables, LLMVariableValue>`
84
85
  : 'Record<string, never>';
86
+ const returnType = record.kind === 'chat' ? 'LLMPromptMessage[]' : 'string';
87
+ const compileCall = record.kind === 'chat'
88
+ ? 'compileMessagesFromSnapshot'
89
+ : 'compileTextFromSnapshot';
85
90
  return `export function compile${member}(\n`
86
91
  + ` variables: ${strictVars} & Record<string, LLMVariableValue>,\n`
87
- + `): string {\n`
88
- + ` return compileFromSnapshot(LLMPrompt.${member}, variables);\n`
92
+ + `): ${returnType} {\n`
93
+ + ` return ${compileCall}(LLMPrompt.${member}, variables);\n`
89
94
  + '}';
90
95
  })
91
96
  .join('\n\n')
@@ -106,19 +111,35 @@ function renderSnapshot(records) {
106
111
  + 'function escapeRegExp(value: string): string {\n'
107
112
  + ' return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \'\\\\$&\');\n'
108
113
  + '}\n\n'
109
- + 'function compileFromSnapshot(\n'
110
- + ' name: LLMPrompt,\n'
114
+ + 'function substituteVariables(\n'
115
+ + ' text: string,\n'
111
116
  + ' variables: Record<string, LLMVariableValue>,\n'
112
117
  + '): string {\n'
113
- + ' const entry = langfusePromptSnapshot[name];\n'
114
- + ' const fallbackText = entry ? entry.fallbackText : \'\';\n'
115
118
  + ' return Object.entries(variables).reduce(\n'
116
- + ' (text, [key, value]) => text.replace(\n'
119
+ + ' (result, [key, value]) => result.replace(\n'
117
120
  + ' new RegExp(`{{\\\\s*${escapeRegExp(key)}\\\\s*}}`, \'g\'),\n'
118
121
  + ' String(value),\n'
119
122
  + ' ),\n'
120
- + ' fallbackText,\n'
123
+ + ' text,\n'
121
124
  + ' );\n'
125
+ + '}\n\n'
126
+ + 'function compileTextFromSnapshot(\n'
127
+ + ' name: LLMPrompt,\n'
128
+ + ' variables: Record<string, LLMVariableValue>,\n'
129
+ + '): string {\n'
130
+ + ' const entry = langfusePromptSnapshot[name];\n'
131
+ + ' return substituteVariables(entry ? entry.fallbackText : \'\', variables);\n'
132
+ + '}\n\n'
133
+ + 'function compileMessagesFromSnapshot(\n'
134
+ + ' name: LLMPrompt,\n'
135
+ + ' variables: Record<string, LLMVariableValue>,\n'
136
+ + '): LLMPromptMessage[] {\n'
137
+ + ' const entry = langfusePromptSnapshot[name];\n'
138
+ + ' const messages = entry ? entry.fallbackMessages : [];\n'
139
+ + ' return messages.map((message) => ({\n'
140
+ + ' role: message.role,\n'
141
+ + ' content: substituteVariables(message.content, variables),\n'
142
+ + ' }));\n'
122
143
  + '}\n';
123
144
  }
124
145
  function toSnapshotEntry(record) {
@@ -129,6 +150,7 @@ function toSnapshotEntry(record) {
129
150
  labels: record.labels,
130
151
  requiredVariables: record.requiredVariables,
131
152
  fallbackText: record.fallbackText,
153
+ fallbackMessages: record.fallbackMessages,
132
154
  config: record.config,
133
155
  };
134
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderSnapshot.js","sourceRoot":"","sources":["../../../src/client/codegen/renderSnapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderSnapshot.js","sourceRoot":"","sources":["../../../src/client/codegen/renderSnapshot.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { type LLMProviders } from '../LLMService.typedefs';
2
+ import { type InferSchema, type LLMSchemaInterface } from '../utilities/schema';
1
3
  import { type LLMPromptRegistry } from '../client/defineLLMPrompts';
2
4
  import { type LLMAgentInlineRunOptions, type LLMAgentRunOptions, type LLMAgentRunResult } from '../client/agentRun.typedefs';
3
5
  import { LLMAgent, type LLMAgentDefinition } from '../client/LLMAgent';
@@ -12,7 +14,9 @@ export type LLMPromptVariableMap<Registry extends LLMPromptRegistry> = {
12
14
  [Key in keyof Registry]: string;
13
15
  };
14
16
  export interface LLMClient<Registry extends LLMPromptRegistry, VariableMap extends Record<keyof Registry, string>> {
15
- generate<Key extends keyof Registry>(prompt: Key, options: LLMGenerateOptions<Record<VariableMap[Key], LLMVariableValue> & Record<string, LLMVariableValue>>): Promise<LLMGenerateResult<Registry[Key]>>;
17
+ generate<Key extends keyof Registry, Schema extends LLMSchemaInterface = never>(prompt: Key, options: LLMGenerateOptions<Record<VariableMap[Key], LLMVariableValue> & Record<string, LLMVariableValue>, Schema>): Promise<[
18
+ Schema
19
+ ] extends [never] ? LLMGenerateResult<Registry[Key]> : InferSchema<Schema>>;
16
20
  countTokens<Key extends keyof Registry>(prompt: Key, options: {
17
21
  variables: Record<string, LLMVariableValue>;
18
22
  history?: LLMPlainMessage[];
@@ -20,6 +24,20 @@ export interface LLMClient<Registry extends LLMPromptRegistry, VariableMap exten
20
24
  defineAgent<Key extends keyof Registry>(definition: LLMAgentDefinition<Registry, VariableMap, Key>): LLMAgent<Registry, VariableMap, Key>;
21
25
  runAgent<Key extends keyof Registry>(prompt: Key, options: LLMAgentInlineRunOptions<Record<VariableMap[Key], LLMVariableValue> & Record<string, LLMVariableValue>, Registry, VariableMap>): Promise<LLMAgentRunResult<LLMGenerateResult<Registry[Key]>>>;
22
26
  runAgent<Key extends keyof Registry>(agent: LLMAgent<Registry, VariableMap, Key>, options: LLMAgentRunOptions<Record<VariableMap[Key], LLMVariableValue> & Record<string, LLMVariableValue>>): Promise<LLMAgentRunResult<LLMGenerateResult<Registry[Key]>>>;
27
+ describePrompt<Key extends keyof Registry>(prompt: Key): Promise<LLMPromptDescription>;
28
+ }
29
+ /**
30
+ * Read-only routing metadata for a prompt — the `{ provider, model,
31
+ * promptVersion }` the runtime would serve right now (same resolve/cache/fallback
32
+ * path `generate` uses). Lets analytics events record the resolved model without
33
+ * coupling to `generate`'s data-only return. `isFallback` flags the snapshot
34
+ * config was used because the live fetch was unreachable or failed the gate.
35
+ */
36
+ export interface LLMPromptDescription {
37
+ provider: LLMProviders;
38
+ model: string;
39
+ promptVersion: number;
40
+ isFallback: boolean;
23
41
  }
24
42
  /**
25
43
  * Builds the v2 gateway client once at the composition root. The client is
@@ -8,7 +8,6 @@ const plainMessages_1 = require("../client/plainMessages");
8
8
  const createLLMClient_typedefs_1 = require("../client/createLLMClient.typedefs");
9
9
  const promptRegistry_runtime_1 = require("../client/promptRegistry.runtime");
10
10
  const errors_1 = require("../client/errors");
11
- const traceIO_1 = require("../client/traceIO");
12
11
  /**
13
12
  * Builds the v2 gateway client once at the composition root. The client is
14
13
  * generic over `typeof registry` (and the generated variable map), so call sites
@@ -44,6 +43,7 @@ function createLLMClient(config) {
44
43
  countTokens: (prompt, options) => engine.countTokens(prompt, options),
45
44
  defineAgent: (definition) => engine.defineAgent(definition),
46
45
  runAgent: (promptOrAgent, options) => engine.runAgent(promptOrAgent, options),
46
+ describePrompt: (prompt) => engine.describePrompt(prompt),
47
47
  };
48
48
  }
49
49
  class LLMClientEngine {
@@ -70,13 +70,13 @@ class LLMClientEngine {
70
70
  async generate(prompt, options) {
71
71
  const promptName = String(prompt);
72
72
  const binding = this.registry[prompt];
73
+ const schema = options.schema ?? binding.schema;
73
74
  this.assertOverridesAllowed(promptName, options.overrides);
74
75
  const resolved = await this.resolvePrompt(promptName, binding, options.variables, {
75
76
  purpose: LLMService_typedefs_1.LLMPurposes.Completion,
76
77
  overrides: options.overrides,
77
78
  });
78
- const completion = await this.runCompletion(resolved, binding, options);
79
- return completion;
79
+ return this.runCompletion(resolved, schema, options);
80
80
  }
81
81
  defineAgent(definition) {
82
82
  return new LLMAgent_1.LLMAgent(definition);
@@ -111,13 +111,33 @@ class LLMClientEngine {
111
111
  const binding = this.registry[prompt];
112
112
  const resolved = await this.resolvePrompt(promptName, binding, options.variables, { purpose: LLMService_typedefs_1.LLMPurposes.Completion });
113
113
  const service = await this.buildCompletionService(resolved, promptName);
114
- const message = this.buildUserMessage(resolved.text, resolved.model);
115
- const history = this.buildHistory(options.history, resolved.model);
116
- return service.countTokens([...history, message], resolved.model);
114
+ const envelope = this.buildMessageEnvelope(resolved, options.history);
115
+ return service.countTokens([...envelope.history, envelope.message], resolved.model);
116
+ }
117
+ async describePrompt(prompt) {
118
+ const promptName = String(prompt);
119
+ const binding = this.registry[prompt];
120
+ const metadata = await this.runtime.describe({
121
+ name: promptName,
122
+ kind: binding.kind === 'chat' ? 'chat' : 'text',
123
+ requires: binding.requires ?? [],
124
+ purpose: LLMService_typedefs_1.LLMPurposes.Completion,
125
+ });
126
+ if (!metadata) {
127
+ throw new errors_1.LLMConfigError(`unable to resolve routing metadata for "${promptName}" (live and `
128
+ + 'fallback both unusable)', { promptName });
129
+ }
130
+ return {
131
+ provider: metadata.provider,
132
+ model: metadata.model,
133
+ promptVersion: metadata.promptVersion,
134
+ isFallback: metadata.isFallback,
135
+ };
117
136
  }
118
137
  async resolvePrompt(promptName, binding, variables, call) {
119
138
  const resolved = await this.runtime.resolve({
120
139
  name: promptName,
140
+ kind: binding.kind === 'chat' ? 'chat' : 'text',
121
141
  variables: this.stringifyVariables(variables),
122
142
  requires: [
123
143
  ...(binding.requires ?? []),
@@ -132,32 +152,70 @@ class LLMClientEngine {
132
152
  }
133
153
  return resolved;
134
154
  }
135
- async runCompletion(resolved, binding, options) {
155
+ async runCompletion(resolved, schema, options) {
136
156
  const service = await this.buildCompletionService(resolved, resolved.name);
137
- const message = this.buildUserMessage(resolved.text, resolved.model);
138
- const history = this.buildHistory(options.history, resolved.model);
157
+ const envelope = this.buildMessageEnvelope(resolved, options.history);
139
158
  const reporterContext = this.buildReporterContext(resolved, options.context);
140
159
  const traceContext = this.buildTraceContext(resolved, options.context);
141
- const sendResult = await this.callProvider(() => (binding.schema
160
+ const sendResult = await this.callProvider(() => (schema
142
161
  ? service.sendMessage({
143
- message,
162
+ message: envelope.message,
144
163
  model: resolved.model,
145
- history,
146
- schema: binding.schema,
164
+ history: envelope.history,
165
+ instructions: envelope.instructions,
166
+ schema,
147
167
  abortSignal: options.abortSignal,
148
168
  reporterContext,
149
169
  traceContext,
150
170
  })
151
171
  : service.sendMessage({
152
- message,
172
+ message: envelope.message,
153
173
  model: resolved.model,
154
- history,
174
+ history: envelope.history,
175
+ instructions: envelope.instructions,
155
176
  abortSignal: options.abortSignal,
156
177
  reporterContext,
157
178
  traceContext,
158
179
  })), resolved, options.abortSignal);
159
- this.recordPromptLink(resolved, message, sendResult);
160
- return this.unwrapResult(resolved, binding.schema, sendResult);
180
+ return this.unwrapResult(resolved, schema, sendResult);
181
+ }
182
+ /**
183
+ * Builds the provider message envelope from the resolved prompt. A `text`
184
+ * prompt is one user message. A `chat` prompt preserves the structure the
185
+ * prompt declares: a leading `system` message maps to `instructions`, the final
186
+ * `user` message is the request, and any messages between them join the
187
+ * call-supplied history in order.
188
+ */
189
+ buildMessageEnvelope(resolved, callHistory) {
190
+ if (resolved.kind !== 'chat') {
191
+ return {
192
+ message: this.buildUserMessage(resolved.text),
193
+ history: this.buildHistory(callHistory),
194
+ instructions: undefined,
195
+ };
196
+ }
197
+ const systemMessage = resolved.messages.find((message) => message.role === 'system');
198
+ const conversation = resolved.messages.filter((message) => message.role !== 'system');
199
+ const lastUserIndex = this.findLastUserIndex(conversation);
200
+ const promptHistory = conversation
201
+ .filter((_, index) => index !== lastUserIndex)
202
+ .map((message) => this.toCompletionMessage(message.role, message.content));
203
+ const requestText = lastUserIndex >= 0
204
+ ? conversation[lastUserIndex].content
205
+ : resolved.text;
206
+ return {
207
+ message: this.buildUserMessage(requestText),
208
+ history: [...promptHistory, ...this.buildHistory(callHistory)],
209
+ instructions: systemMessage?.content,
210
+ };
211
+ }
212
+ findLastUserIndex(messages) {
213
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
214
+ if (messages[index].role === 'user') {
215
+ return index;
216
+ }
217
+ }
218
+ return -1;
161
219
  }
162
220
  async callProvider(send, resolved, abortSignal) {
163
221
  try {
@@ -227,15 +285,18 @@ class LLMClientEngine {
227
285
  product: this.staticContext.product,
228
286
  });
229
287
  }
230
- buildUserMessage(text, _model) {
288
+ buildUserMessage(text) {
289
+ return this.toCompletionMessage('user', text);
290
+ }
291
+ buildHistory(history) {
292
+ return (0, plainMessages_1.plainMessagesToContentMessages)(history);
293
+ }
294
+ toCompletionMessage(role, text) {
231
295
  return {
232
- role: LLMService_typedefs_1.LLMRoles.User,
296
+ role: role === 'assistant' ? LLMService_typedefs_1.LLMRoles.Assistant : LLMService_typedefs_1.LLMRoles.User,
233
297
  content: [{ type: LLMService_typedefs_1.LLMMessageContentType.TEXT, text }],
234
298
  };
235
299
  }
236
- buildHistory(history, _model) {
237
- return (0, plainMessages_1.plainMessagesToContentMessages)(history);
238
- }
239
300
  buildReporterContext(resolved, callContext) {
240
301
  if (!this.reporter) {
241
302
  return undefined;
@@ -247,6 +308,13 @@ class LLMClientEngine {
247
308
  promptVersion: resolved.version,
248
309
  };
249
310
  }
311
+ /**
312
+ * Builds the per-call trace context every client path threads into the gateway
313
+ * service. The structural `prompt` names the observation and carries the
314
+ * managed prompt version, so the generation the service records on success and
315
+ * on error is the single one Langfuse links to that prompt — the client never
316
+ * records a second observation of its own.
317
+ */
250
318
  buildTraceContext(resolved, callContext) {
251
319
  const metadata = {
252
320
  promptVersion: resolved.version,
@@ -256,23 +324,14 @@ class LLMClientEngine {
256
324
  if (userId !== undefined && userId !== null) {
257
325
  metadata.userId = userId;
258
326
  }
259
- return { promptName: resolved.name, metadata };
260
- }
261
- recordPromptLink(resolved, message, sendResult) {
262
- const tracer = this.gateway.getTracer();
263
- if (!tracer.isEnabled) {
264
- return;
265
- }
266
- tracer.recordGeneration({
267
- name: resolved.name,
268
- model: resolved.config.model,
269
- input: (0, traceIO_1.truncateTraceIO)(resolved.text),
270
- output: (0, traceIO_1.truncateTraceIO)(sendResult.data ?? sendResult.text),
271
- metadata: {
272
- promptVersion: resolved.version,
327
+ return {
328
+ prompt: {
329
+ name: resolved.name,
330
+ version: resolved.version,
273
331
  isFallback: resolved.isFallback,
274
332
  },
275
- });
333
+ metadata,
334
+ };
276
335
  }
277
336
  assertOverridesAllowed(promptName, overrides) {
278
337
  if (this.mode === 'experiment' || !overrides) {
@@ -1 +1 @@
1
- {"version":3,"file":"createLLMClient.js","sourceRoot":"","sources":["../../src/client/createLLMClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createLLMClient.js","sourceRoot":"","sources":["../../src/client/createLLMClient.ts"],"names":[],"mappings":"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"}
@@ -63,12 +63,20 @@ export type LLMPromptVariables<RequiredKeys extends string> = Record<RequiredKey
63
63
  export type LLMGenerateResult<Binding extends LLMPromptBinding> = Binding extends {
64
64
  schema: infer Schema;
65
65
  } ? Schema extends LLMSchemaInterface ? InferSchema<Schema> : string : string;
66
- export interface LLMGenerateOptions<Variables extends Record<string, LLMVariableValue>> {
66
+ export interface LLMGenerateOptions<Variables extends Record<string, LLMVariableValue>, Schema extends LLMSchemaInterface = never> {
67
67
  variables: Variables;
68
68
  context?: LLMClientCallContext;
69
69
  history?: LLMPlainMessage[];
70
70
  abortSignal?: AbortSignal;
71
71
  overrides?: LLMCallOverrides;
72
+ /**
73
+ * Per-call structured-output schema. Overrides the registry binding's `schema`
74
+ * for this call and drives the return type (`InferSchema<Schema>`). Use it when
75
+ * the output contract is dynamic per call (e.g. a schema whose shape depends on
76
+ * runtime input). The schema is the code-owned output contract, not a routing
77
+ * control, so it is honored in every mode.
78
+ */
79
+ schema?: Schema;
72
80
  }
73
81
  export interface LLMCallOverrides {
74
82
  model?: string;
@@ -5,7 +5,6 @@ export * from './promptClientPort.typedefs';
5
5
  export * from './defineLLMPrompts';
6
6
  export * from './validationGate';
7
7
  export * from './promptRegistry.runtime';
8
- export * from './traceIO';
9
8
  export * from './createLLMClient.typedefs';
10
9
  export * from './createLLMClient';
11
10
  export * from './agentRun.typedefs';
@@ -21,7 +21,6 @@ __exportStar(require("./promptClientPort.typedefs"), exports);
21
21
  __exportStar(require("./defineLLMPrompts"), exports);
22
22
  __exportStar(require("./validationGate"), exports);
23
23
  __exportStar(require("./promptRegistry.runtime"), exports);
24
- __exportStar(require("./traceIO"), exports);
25
24
  __exportStar(require("./createLLMClient.typedefs"), exports);
26
25
  __exportStar(require("./createLLMClient"), exports);
27
26
  __exportStar(require("./agentRun.typedefs"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,qDAAmC;AACnC,4DAA0C;AAC1C,8DAA4C;AAC5C,qDAAmC;AACnC,mDAAiC;AACjC,2DAAyC;AACzC,4CAA0B;AAC1B,6DAA2C;AAC3C,oDAAkC;AAClC,sDAAoC;AACpC,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,qDAAmC;AACnC,4DAA0C;AAC1C,8DAA4C;AAC5C,qDAAmC;AACnC,mDAAiC;AACjC,2DAAyC;AACzC,6DAA2C;AAC3C,oDAAkC;AAClC,sDAAoC;AACpC,6CAA2B"}