@launchdarkly/server-sdk-ai 0.12.3 → 0.14.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 (242) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +2 -2
  3. package/__tests__/Judge.test.ts +496 -0
  4. package/__tests__/LDAIClientImpl.test.ts +530 -323
  5. package/__tests__/LDAIConfigTrackerImpl.test.ts +50 -290
  6. package/__tests__/TrackedChat.test.ts +4 -5
  7. package/dist/package.json +53 -0
  8. package/dist/src/LDAIClientImpl.d.ts +39 -0
  9. package/dist/src/LDAIClientImpl.d.ts.map +1 -0
  10. package/dist/src/LDAIClientImpl.js +164 -0
  11. package/dist/src/LDAIClientImpl.js.map +1 -0
  12. package/dist/{LDAIConfigTrackerImpl.d.ts → src/LDAIConfigTrackerImpl.d.ts} +13 -11
  13. package/dist/src/LDAIConfigTrackerImpl.d.ts.map +1 -0
  14. package/dist/{LDAIConfigTrackerImpl.js → src/LDAIConfigTrackerImpl.js} +59 -44
  15. package/dist/src/LDAIConfigTrackerImpl.js.map +1 -0
  16. package/dist/src/LDClientMin.d.ts.map +1 -0
  17. package/dist/{LDClientMin.js.map → src/LDClientMin.js.map} +1 -1
  18. package/dist/src/api/LDAIClient.d.ts +258 -0
  19. package/dist/src/api/LDAIClient.d.ts.map +1 -0
  20. package/dist/{api → src/api}/LDAIClient.js.map +1 -1
  21. package/dist/{api → src/api}/chat/TrackedChat.d.ts +22 -4
  22. package/dist/src/api/chat/TrackedChat.d.ts.map +1 -0
  23. package/dist/{api → src/api}/chat/TrackedChat.js +43 -2
  24. package/dist/src/api/chat/TrackedChat.js.map +1 -0
  25. package/dist/src/api/chat/index.d.ts.map +1 -0
  26. package/dist/src/api/chat/index.js.map +1 -0
  27. package/dist/src/api/chat/types.d.ts +22 -0
  28. package/dist/src/api/chat/types.d.ts.map +1 -0
  29. package/dist/{api → src/api}/chat/types.js.map +1 -1
  30. package/dist/{api → src/api}/config/LDAIConfigTracker.d.ts +41 -22
  31. package/dist/src/api/config/LDAIConfigTracker.d.ts.map +1 -0
  32. package/dist/src/api/config/LDAIConfigTracker.js.map +1 -0
  33. package/dist/src/api/config/LDAIConfigUtils.d.ts +2 -0
  34. package/dist/src/api/config/LDAIConfigUtils.d.ts.map +1 -0
  35. package/dist/src/api/config/LDAIConfigUtils.js +141 -0
  36. package/dist/src/api/config/LDAIConfigUtils.js.map +1 -0
  37. package/dist/src/api/config/index.d.ts +3 -0
  38. package/dist/src/api/config/index.d.ts.map +1 -0
  39. package/dist/{api/agents → src/api/config}/index.js +1 -1
  40. package/dist/src/api/config/index.js.map +1 -0
  41. package/dist/src/api/config/types.d.ts +202 -0
  42. package/dist/src/api/config/types.d.ts.map +1 -0
  43. package/dist/{api/agents/LDAIAgent.js → src/api/config/types.js} +1 -1
  44. package/dist/src/api/config/types.js.map +1 -0
  45. package/dist/{api → src/api}/index.d.ts +1 -1
  46. package/dist/src/api/index.d.ts.map +1 -0
  47. package/dist/{api → src/api}/index.js +1 -1
  48. package/dist/src/api/index.js.map +1 -0
  49. package/dist/src/api/judge/EvaluationSchemaBuilder.d.ts +11 -0
  50. package/dist/src/api/judge/EvaluationSchemaBuilder.d.ts.map +1 -0
  51. package/dist/src/api/judge/EvaluationSchemaBuilder.js +52 -0
  52. package/dist/src/api/judge/EvaluationSchemaBuilder.js.map +1 -0
  53. package/dist/src/api/judge/Judge.d.ts +63 -0
  54. package/dist/src/api/judge/Judge.d.ts.map +1 -0
  55. package/dist/src/api/judge/Judge.js +149 -0
  56. package/dist/src/api/judge/Judge.js.map +1 -0
  57. package/dist/src/api/judge/index.d.ts +3 -0
  58. package/dist/src/api/judge/index.d.ts.map +1 -0
  59. package/dist/src/api/judge/index.js +6 -0
  60. package/dist/src/api/judge/index.js.map +1 -0
  61. package/dist/src/api/judge/types.d.ts +35 -0
  62. package/dist/src/api/judge/types.d.ts.map +1 -0
  63. package/dist/{api/config/LDAIConfig.js → src/api/judge/types.js} +1 -1
  64. package/dist/src/api/judge/types.js.map +1 -0
  65. package/dist/src/api/metrics/BedrockTokenUsage.d.ts.map +1 -0
  66. package/dist/src/api/metrics/BedrockTokenUsage.js.map +1 -0
  67. package/dist/src/api/metrics/LDAIMetrics.d.ts.map +1 -0
  68. package/dist/src/api/metrics/LDAIMetrics.js.map +1 -0
  69. package/dist/src/api/metrics/LDFeedbackKind.d.ts.map +1 -0
  70. package/dist/src/api/metrics/LDFeedbackKind.js.map +1 -0
  71. package/dist/src/api/metrics/LDTokenUsage.d.ts.map +1 -0
  72. package/dist/src/api/metrics/LDTokenUsage.js.map +1 -0
  73. package/dist/src/api/metrics/OpenAiUsage.d.ts.map +1 -0
  74. package/dist/src/api/metrics/OpenAiUsage.js.map +1 -0
  75. package/dist/src/api/metrics/VercelAISDKTokenUsage.d.ts.map +1 -0
  76. package/dist/src/api/metrics/VercelAISDKTokenUsage.js.map +1 -0
  77. package/dist/src/api/metrics/index.d.ts.map +1 -0
  78. package/dist/src/api/metrics/index.js.map +1 -0
  79. package/dist/{api → src/api}/providers/AIProvider.d.ts +20 -3
  80. package/dist/src/api/providers/AIProvider.d.ts.map +1 -0
  81. package/dist/src/api/providers/AIProvider.js +88 -0
  82. package/dist/src/api/providers/AIProvider.js.map +1 -0
  83. package/dist/{api → src/api}/providers/AIProviderFactory.d.ts +2 -2
  84. package/dist/src/api/providers/AIProviderFactory.d.ts.map +1 -0
  85. package/dist/src/api/providers/AIProviderFactory.js.map +1 -0
  86. package/dist/src/api/providers/index.d.ts.map +1 -0
  87. package/dist/src/api/providers/index.js.map +1 -0
  88. package/dist/src/index.d.ts.map +1 -0
  89. package/dist/src/index.js.map +1 -0
  90. package/docs/assets/search.js +1 -1
  91. package/docs/classes/AIProvider.html +55 -20
  92. package/docs/classes/AIProviderFactory.html +27 -17
  93. package/docs/classes/Judge.html +322 -0
  94. package/docs/classes/TrackedChat.html +97 -29
  95. package/docs/enums/LDFeedbackKind.html +22 -12
  96. package/docs/functions/createBedrockTokenUsage.html +20 -10
  97. package/docs/functions/createOpenAiUsage.html +20 -10
  98. package/docs/functions/createVercelAISDKTokenUsage.html +20 -10
  99. package/docs/functions/initAi.html +20 -10
  100. package/docs/index.html +36 -16
  101. package/docs/interfaces/ChatResponse.html +35 -14
  102. package/docs/interfaces/EvalScore.html +119 -0
  103. package/docs/interfaces/JudgeResponse.html +129 -0
  104. package/docs/interfaces/LDAIAgentConfig.html +81 -33
  105. package/docs/interfaces/{LDAIAgent.html → LDAIAgentConfigDefault.html} +51 -41
  106. package/docs/interfaces/LDAIAgentRequestConfig.html +129 -0
  107. package/docs/interfaces/LDAIClient.html +234 -40
  108. package/docs/interfaces/{VercelAISDKConfig.html → LDAICompletionConfig.html} +86 -86
  109. package/docs/interfaces/LDAICompletionConfigDefault.html +155 -0
  110. package/docs/interfaces/LDAIConfig.html +45 -75
  111. package/docs/interfaces/LDAIConfigDefault.html +133 -0
  112. package/docs/interfaces/LDAIConfigTracker.html +140 -59
  113. package/docs/interfaces/LDAIJudgeConfig.html +167 -0
  114. package/docs/interfaces/LDAIJudgeConfigDefault.html +155 -0
  115. package/docs/interfaces/LDAIMetrics.html +22 -12
  116. package/docs/interfaces/LDJudge.html +119 -0
  117. package/docs/interfaces/{VercelAISDKMapOptions.html → LDJudgeConfiguration.html} +36 -19
  118. package/docs/interfaces/LDLogger.html +19 -9
  119. package/docs/interfaces/LDMessage.html +22 -12
  120. package/docs/interfaces/LDModelConfig.html +23 -13
  121. package/docs/interfaces/LDProviderConfig.html +21 -11
  122. package/docs/interfaces/LDTokenUsage.html +23 -13
  123. package/docs/interfaces/StructuredResponse.html +129 -0
  124. package/docs/types/{VercelAISDKProvider.html → LDAIConfigDefaultKind.html} +26 -31
  125. package/docs/types/{LDAIAgentDefaults.html → LDAIConfigKind.html} +24 -14
  126. package/docs/types/{LDAIDefaults.html → LDAIConfigMode.html} +24 -24
  127. package/docs/types/SupportedAIProvider.html +20 -10
  128. package/docs/variables/SUPPORTED_AI_PROVIDERS.html +20 -10
  129. package/package.json +3 -3
  130. package/src/LDAIClientImpl.ts +222 -176
  131. package/src/LDAIConfigTrackerImpl.ts +73 -54
  132. package/src/api/LDAIClient.ts +166 -33
  133. package/src/api/chat/TrackedChat.ts +64 -5
  134. package/src/api/chat/types.ts +8 -1
  135. package/src/api/config/LDAIConfigTracker.ts +46 -27
  136. package/src/api/config/LDAIConfigUtils.ts +201 -0
  137. package/src/api/config/index.ts +2 -2
  138. package/src/api/config/types.ts +256 -0
  139. package/src/api/index.ts +1 -1
  140. package/src/api/judge/EvaluationSchemaBuilder.ts +54 -0
  141. package/src/api/judge/Judge.ts +216 -0
  142. package/src/api/judge/index.ts +2 -0
  143. package/src/api/judge/types.ts +39 -0
  144. package/src/api/providers/AIProvider.ts +54 -3
  145. package/src/api/providers/AIProviderFactory.ts +4 -4
  146. package/tsconfig.json +3 -3
  147. package/tsconfig.ref.json +1 -1
  148. package/__tests__/LDAIConfigMapper.test.ts +0 -159
  149. package/dist/LDAIClientImpl.d.ts +0 -23
  150. package/dist/LDAIClientImpl.d.ts.map +0 -1
  151. package/dist/LDAIClientImpl.js +0 -128
  152. package/dist/LDAIClientImpl.js.map +0 -1
  153. package/dist/LDAIConfigMapper.d.ts +0 -10
  154. package/dist/LDAIConfigMapper.d.ts.map +0 -1
  155. package/dist/LDAIConfigMapper.js +0 -55
  156. package/dist/LDAIConfigMapper.js.map +0 -1
  157. package/dist/LDAIConfigTrackerImpl.d.ts.map +0 -1
  158. package/dist/LDAIConfigTrackerImpl.js.map +0 -1
  159. package/dist/LDClientMin.d.ts.map +0 -1
  160. package/dist/api/LDAIClient.d.ts +0 -169
  161. package/dist/api/LDAIClient.d.ts.map +0 -1
  162. package/dist/api/agents/LDAIAgent.d.ts +0 -32
  163. package/dist/api/agents/LDAIAgent.d.ts.map +0 -1
  164. package/dist/api/agents/LDAIAgent.js.map +0 -1
  165. package/dist/api/agents/index.d.ts +0 -2
  166. package/dist/api/agents/index.d.ts.map +0 -1
  167. package/dist/api/agents/index.js.map +0 -1
  168. package/dist/api/chat/TrackedChat.d.ts.map +0 -1
  169. package/dist/api/chat/TrackedChat.js.map +0 -1
  170. package/dist/api/chat/index.d.ts.map +0 -1
  171. package/dist/api/chat/index.js.map +0 -1
  172. package/dist/api/chat/types.d.ts +0 -16
  173. package/dist/api/chat/types.d.ts.map +0 -1
  174. package/dist/api/config/LDAIConfig.d.ts +0 -92
  175. package/dist/api/config/LDAIConfig.d.ts.map +0 -1
  176. package/dist/api/config/LDAIConfig.js.map +0 -1
  177. package/dist/api/config/LDAIConfigTracker.d.ts.map +0 -1
  178. package/dist/api/config/LDAIConfigTracker.js.map +0 -1
  179. package/dist/api/config/VercelAISDK.d.ts +0 -19
  180. package/dist/api/config/VercelAISDK.d.ts.map +0 -1
  181. package/dist/api/config/VercelAISDK.js +0 -3
  182. package/dist/api/config/VercelAISDK.js.map +0 -1
  183. package/dist/api/config/index.d.ts +0 -4
  184. package/dist/api/config/index.d.ts.map +0 -1
  185. package/dist/api/config/index.js +0 -19
  186. package/dist/api/config/index.js.map +0 -1
  187. package/dist/api/index.d.ts.map +0 -1
  188. package/dist/api/index.js.map +0 -1
  189. package/dist/api/metrics/BedrockTokenUsage.d.ts.map +0 -1
  190. package/dist/api/metrics/BedrockTokenUsage.js.map +0 -1
  191. package/dist/api/metrics/LDAIMetrics.d.ts.map +0 -1
  192. package/dist/api/metrics/LDAIMetrics.js.map +0 -1
  193. package/dist/api/metrics/LDFeedbackKind.d.ts.map +0 -1
  194. package/dist/api/metrics/LDFeedbackKind.js.map +0 -1
  195. package/dist/api/metrics/LDTokenUsage.d.ts.map +0 -1
  196. package/dist/api/metrics/LDTokenUsage.js.map +0 -1
  197. package/dist/api/metrics/OpenAiUsage.d.ts.map +0 -1
  198. package/dist/api/metrics/OpenAiUsage.js.map +0 -1
  199. package/dist/api/metrics/VercelAISDKTokenUsage.d.ts.map +0 -1
  200. package/dist/api/metrics/VercelAISDKTokenUsage.js.map +0 -1
  201. package/dist/api/metrics/index.d.ts.map +0 -1
  202. package/dist/api/metrics/index.js.map +0 -1
  203. package/dist/api/providers/AIProvider.d.ts.map +0 -1
  204. package/dist/api/providers/AIProvider.js +0 -31
  205. package/dist/api/providers/AIProvider.js.map +0 -1
  206. package/dist/api/providers/AIProviderFactory.d.ts.map +0 -1
  207. package/dist/api/providers/AIProviderFactory.js.map +0 -1
  208. package/dist/api/providers/index.d.ts.map +0 -1
  209. package/dist/api/providers/index.js.map +0 -1
  210. package/dist/index.d.ts.map +0 -1
  211. package/dist/index.js.map +0 -1
  212. package/src/LDAIConfigMapper.ts +0 -65
  213. package/src/api/agents/LDAIAgent.ts +0 -36
  214. package/src/api/agents/index.ts +0 -1
  215. package/src/api/config/LDAIConfig.ts +0 -101
  216. package/src/api/config/VercelAISDK.ts +0 -21
  217. /package/dist/{LDClientMin.d.ts → src/LDClientMin.d.ts} +0 -0
  218. /package/dist/{LDClientMin.js → src/LDClientMin.js} +0 -0
  219. /package/dist/{api → src/api}/LDAIClient.js +0 -0
  220. /package/dist/{api → src/api}/chat/index.d.ts +0 -0
  221. /package/dist/{api → src/api}/chat/index.js +0 -0
  222. /package/dist/{api → src/api}/chat/types.js +0 -0
  223. /package/dist/{api → src/api}/config/LDAIConfigTracker.js +0 -0
  224. /package/dist/{api → src/api}/metrics/BedrockTokenUsage.d.ts +0 -0
  225. /package/dist/{api → src/api}/metrics/BedrockTokenUsage.js +0 -0
  226. /package/dist/{api → src/api}/metrics/LDAIMetrics.d.ts +0 -0
  227. /package/dist/{api → src/api}/metrics/LDAIMetrics.js +0 -0
  228. /package/dist/{api → src/api}/metrics/LDFeedbackKind.d.ts +0 -0
  229. /package/dist/{api → src/api}/metrics/LDFeedbackKind.js +0 -0
  230. /package/dist/{api → src/api}/metrics/LDTokenUsage.d.ts +0 -0
  231. /package/dist/{api → src/api}/metrics/LDTokenUsage.js +0 -0
  232. /package/dist/{api → src/api}/metrics/OpenAiUsage.d.ts +0 -0
  233. /package/dist/{api → src/api}/metrics/OpenAiUsage.js +0 -0
  234. /package/dist/{api → src/api}/metrics/VercelAISDKTokenUsage.d.ts +0 -0
  235. /package/dist/{api → src/api}/metrics/VercelAISDKTokenUsage.js +0 -0
  236. /package/dist/{api → src/api}/metrics/index.d.ts +0 -0
  237. /package/dist/{api → src/api}/metrics/index.js +0 -0
  238. /package/dist/{api → src/api}/providers/AIProviderFactory.js +0 -0
  239. /package/dist/{api → src/api}/providers/index.d.ts +0 -0
  240. /package/dist/{api → src/api}/providers/index.js +0 -0
  241. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  242. /package/dist/{index.js → src/index.js} +0 -0
@@ -0,0 +1,258 @@
1
+ import { LDContext } from '@launchdarkly/js-server-sdk-common';
2
+ import { TrackedChat } from './chat';
3
+ import { LDAIAgentConfig, LDAIAgentConfigDefault, LDAIAgentRequestConfig, LDAICompletionConfig, LDAICompletionConfigDefault, LDAIJudgeConfig, LDAIJudgeConfigDefault } from './config';
4
+ import { Judge } from './judge/Judge';
5
+ import { SupportedAIProvider } from './providers';
6
+ /**
7
+ * Interface for performing AI operations using LaunchDarkly.
8
+ */
9
+ export interface LDAIClient {
10
+ /**
11
+ * Retrieves and processes a completion AI Config based on the provided key, LaunchDarkly context,
12
+ * and variables. This includes the model configuration and the customized messages.
13
+ *
14
+ * @param key The key of the AI Config.
15
+ * @param context The LaunchDarkly context object that contains relevant information about the
16
+ * current environment, user, or session. This context may influence how the configuration is
17
+ * processed or personalized.
18
+ * @param defaultValue A fallback value containing model configuration and messages. This will
19
+ * be used if the configuration is not available from LaunchDarkly.
20
+ * @param variables A map of key-value pairs representing dynamic variables to be injected into
21
+ * the message content. The keys correspond to placeholders within the template, and the values
22
+ * are the corresponding replacements.
23
+ *
24
+ * @returns The AI `config`, customized `messages`, and a `tracker`. If the configuration cannot be accessed from
25
+ * LaunchDarkly, then the return value will include information from the `defaultValue`. The returned `tracker` can
26
+ * be used to track AI operation metrics (latency, token usage, etc.).
27
+ *
28
+ * @example
29
+ * ```
30
+ * const key = "welcome_prompt";
31
+ * const context = {...};
32
+ * const variables = {username: 'john'};
33
+ * const defaultValue = {
34
+ * enabled: false,
35
+ * model: { name: 'gpt-4' },
36
+ * provider: { name: 'openai' },
37
+ * };
38
+ *
39
+ * const result = completionConfig(key, context, defaultValue, variables);
40
+ * // Output:
41
+ * {
42
+ * enabled: true,
43
+ * config: {
44
+ * modelId: "gpt-4o",
45
+ * temperature: 0.2,
46
+ * maxTokens: 4096,
47
+ * userDefinedKey: "myValue",
48
+ * },
49
+ * messages: [
50
+ * {
51
+ * role: "system",
52
+ * content: "You are an amazing GPT."
53
+ * },
54
+ * {
55
+ * role: "user",
56
+ * content: "Explain how you're an amazing GPT."
57
+ * }
58
+ * ],
59
+ * tracker: ...
60
+ * }
61
+ * ```
62
+ */
63
+ completionConfig(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>): Promise<LDAICompletionConfig>;
64
+ /**
65
+ * @deprecated Use `completionConfig` instead. This method will be removed in a future version.
66
+ */
67
+ config(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>): Promise<LDAICompletionConfig>;
68
+ /**
69
+ * Retrieves and processes a single AI Config agent based on the provided key, LaunchDarkly context,
70
+ * and variables. This includes the model configuration and the customized instructions.
71
+ *
72
+ * @param key The key of the AI Config agent.
73
+ * @param context The LaunchDarkly context object that contains relevant information about the
74
+ * current environment, user, or session. This context may influence how the configuration is
75
+ * processed or personalized.
76
+ * @param defaultValue A fallback value containing model configuration and instructions.
77
+ * @param variables A map of key-value pairs representing dynamic variables to be injected into
78
+ * the instructions. The keys correspond to placeholders within the template, and the values
79
+ * are the corresponding replacements.
80
+ *
81
+ * @returns An AI agent with customized `instructions` and a `tracker`. If the configuration
82
+ * cannot be accessed from LaunchDarkly, then the return value will include information from the
83
+ * `defaultValue`. The returned `tracker` can be used to track AI operation metrics (latency, token usage, etc.).
84
+ *
85
+ * @example
86
+ * ```
87
+ * const key = "research_agent";
88
+ * const context = {...};
89
+ * const variables = { topic: 'climate change' };
90
+ * const agentConfig = await client.agentConfig(key, context, {
91
+ * enabled: true,
92
+ * model: { name: 'gpt-4' },
93
+ * provider: { name: 'openai' },
94
+ * instructions: 'You are a research assistant.',
95
+ * }, variables);
96
+ *
97
+ * const researchResult = agentConfig.instructions; // Interpolated instructions
98
+ * agentConfig.tracker.trackSuccess();
99
+ * ```
100
+ */
101
+ agentConfig(key: string, context: LDContext, defaultValue: LDAIAgentConfigDefault, variables?: Record<string, unknown>): Promise<LDAIAgentConfig>;
102
+ /**
103
+ * @deprecated Use `agentConfig` instead. This method will be removed in a future version.
104
+ */
105
+ agent(key: string, context: LDContext, defaultValue: LDAIAgentConfigDefault, variables?: Record<string, unknown>): Promise<LDAIAgentConfig>;
106
+ /**
107
+ * Retrieves and processes a Judge AI Config based on the provided key, LaunchDarkly context,
108
+ * and variables. This includes the model configuration and the customized messages for evaluation.
109
+ *
110
+ * @param key The key of the Judge AI Config.
111
+ * @param context The LaunchDarkly context object that contains relevant information about the
112
+ * current environment, user, or session. This context may influence how the configuration is
113
+ * processed or personalized.
114
+ * @param defaultValue A fallback value containing model configuration and messages. This will
115
+ * be used if the configuration is not available from LaunchDarkly.
116
+ * @param variables Optional variables for template interpolation in messages and instructions.
117
+ * @returns A promise that resolves to a tracked judge configuration.
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const judgeConf = await client.judgeConfig(key, context, {
122
+ * enabled: true,
123
+ * model: { name: 'gpt-4' },
124
+ * provider: { name: 'openai' },
125
+ * evaluationMetricKeys: ['$ld:ai:judge:relevance'],
126
+ * messages: [{ role: 'system', content: 'You are a relevance judge.' }]
127
+ * }, variables);
128
+ *
129
+ * const config = judgeConf.config; // Interpolated configuration
130
+ * judgeConf.tracker.trackSuccess();
131
+ * ```
132
+ */
133
+ judgeConfig(key: string, context: LDContext, defaultValue: LDAIJudgeConfigDefault, variables?: Record<string, unknown>): Promise<LDAIJudgeConfig>;
134
+ /**
135
+ * Retrieves and processes multiple AI Config agents based on the provided agent configurations
136
+ * and LaunchDarkly context. This includes the model configuration and the customized instructions.
137
+ *
138
+ * @param agentConfigs An array of agent configurations, each containing the agent key, default configuration,
139
+ * and variables for instructions interpolation.
140
+ * @param context The LaunchDarkly context object that contains relevant information about the
141
+ * current environment, user, or session. This context may influence how the configuration is
142
+ * processed or personalized.
143
+ *
144
+ * @returns A map of agent keys to their respective AI agents with customized `instructions` and `tracker`.
145
+ * If a configuration cannot be accessed from LaunchDarkly, then the return value will include information
146
+ * from the respective `defaultValue`. The returned `tracker` can be used to track AI operation metrics
147
+ * (latency, token usage, etc.).
148
+ *
149
+ * @example
150
+ * ```
151
+ * const agentConfigsList = [
152
+ * {
153
+ * key: 'research_agent',
154
+ * defaultValue: {
155
+ * enabled: true,
156
+ * model: { name: 'gpt-4' },
157
+ * provider: { name: 'openai' },
158
+ * instructions: 'You are a research assistant.'
159
+ * },
160
+ * variables: { topic: 'climate change' }
161
+ * },
162
+ * {
163
+ * key: 'writing_agent',
164
+ * defaultValue: {
165
+ * enabled: true,
166
+ * model: { name: 'gpt-4' },
167
+ * provider: { name: 'openai' },
168
+ * instructions: 'You are a writing assistant.'
169
+ * },
170
+ * variables: { style: 'academic' }
171
+ * }
172
+ * ] as const;
173
+ * const context = {...};
174
+ *
175
+ * const configs = await client.agentConfigs(agentConfigsList, context);
176
+ * const researchResult = configs["research_agent"].instructions; // Interpolated instructions
177
+ * configs["research_agent"].tracker.trackSuccess();
178
+ * ```
179
+ */
180
+ agentConfigs<const T extends readonly LDAIAgentRequestConfig[]>(agentConfigs: T, context: LDContext): Promise<Record<T[number]['key'], LDAIAgentConfig>>;
181
+ /**
182
+ * @deprecated Use `agentConfigs` instead. This method will be removed in a future version.
183
+ */
184
+ agents<const T extends readonly LDAIAgentRequestConfig[]>(agentConfigs: T, context: LDContext): Promise<Record<T[number]['key'], LDAIAgentConfig>>;
185
+ /**
186
+ * Returns a TrackedChat instance for chat interactions.
187
+ * This method serves as the primary entry point for creating TrackedChat instances from configuration.
188
+ *
189
+ * @param key The key identifying the AI chat configuration to use.
190
+ * @param context The standard LDContext used when evaluating flags.
191
+ * @param defaultValue A default value representing a standard AI chat config result.
192
+ * @param variables Dictionary of values for instruction interpolation.
193
+ * The variables will also be used for judge evaluation. For the judge only, the variables
194
+ * `message_history` and `response_to_evaluate` are reserved and will be ignored.
195
+ * @param defaultAiProvider Optional default AI provider to use.
196
+ * @returns A promise that resolves to the TrackedChat instance, or null if the configuration is disabled.
197
+ *
198
+ * @example
199
+ * ```
200
+ * const key = "customer_support_chat";
201
+ * const context = {...};
202
+ * const defaultValue = {
203
+ * enabled: false,
204
+ * model: { name: "gpt-4" },
205
+ * provider: { name: "openai" },
206
+ * messages: [
207
+ * { role: "system", content: "You are a helpful customer support agent." }
208
+ * ]
209
+ * };
210
+ * const variables = { customerName: 'John' };
211
+ *
212
+ * const chat = await client.createChat(key, context, defaultValue, variables);
213
+ * if (chat) {
214
+ * const response = await chat.invoke("I need help with my order");
215
+ * console.log(response.message.content);
216
+ * }
217
+ * ```
218
+ */
219
+ createChat(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<TrackedChat | undefined>;
220
+ /**
221
+ * @deprecated Use `createChat` instead. This method will be removed in a future version.
222
+ */
223
+ initChat(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<TrackedChat | undefined>;
224
+ /**
225
+ * Creates and returns a new Judge instance for AI evaluation.
226
+ *
227
+ * @param key The key identifying the AI judge configuration to use
228
+ * @param context Standard LDContext used when evaluating flags
229
+ * @param defaultValue A default value representing a standard AI config result
230
+ * @param variables Dictionary of values for instruction interpolation.
231
+ * The variables `message_history` and `response_to_evaluate` are reserved for the judge and will be ignored.
232
+ * @param defaultAiProvider Optional default AI provider to use.
233
+ * @returns Promise that resolves to a Judge instance or undefined if disabled/unsupported
234
+ *
235
+ * @example
236
+ * ```
237
+ * const judge = await client.createJudge(
238
+ * "relevance-judge",
239
+ * context,
240
+ * {
241
+ * enabled: true,
242
+ * model: { name: "gpt-4" },
243
+ * provider: { name: "openai" },
244
+ * evaluationMetricKeys: ['$ld:ai:judge:relevance'],
245
+ * messages: [{ role: 'system', content: 'You are a relevance judge.' }]
246
+ * },
247
+ * { metric: "relevance" }
248
+ * );
249
+ *
250
+ * if (judge) {
251
+ * const result = await judge.evaluate("User question", "AI response");
252
+ * console.log('Relevance score:', result.evals.relevance?.score);
253
+ * }
254
+ * ```
255
+ */
256
+ createJudge(key: string, context: LDContext, defaultValue: LDAIJudgeConfigDefault, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<Judge | undefined>;
257
+ }
258
+ //# sourceMappingURL=LDAIClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDAIClient.d.ts","sourceRoot":"","sources":["../../../src/api/LDAIClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LDAIClient.js","sourceRoot":"","sources":["../../src/api/LDAIClient.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"LDAIClient.js","sourceRoot":"","sources":["../../../src/api/LDAIClient.ts"],"names":[],"mappings":""}
@@ -1,5 +1,7 @@
1
- import { LDAIConfig, LDMessage } from '../config/LDAIConfig';
1
+ import { LDLogger } from '@launchdarkly/js-server-sdk-common';
2
2
  import { LDAIConfigTracker } from '../config/LDAIConfigTracker';
3
+ import { LDAICompletionConfig, LDMessage } from '../config/types';
4
+ import { Judge } from '../judge/Judge';
3
5
  import { AIProvider } from '../providers/AIProvider';
4
6
  import { ChatResponse } from './types';
5
7
  /**
@@ -9,20 +11,31 @@ import { ChatResponse } from './types';
9
11
  * the actual model invocation to the provider.
10
12
  */
11
13
  export declare class TrackedChat {
12
- protected readonly aiConfig: LDAIConfig;
14
+ protected readonly aiConfig: LDAICompletionConfig;
13
15
  protected readonly tracker: LDAIConfigTracker;
14
16
  protected readonly provider: AIProvider;
17
+ protected readonly judges: Record<string, Judge>;
18
+ private readonly _logger?;
15
19
  protected messages: LDMessage[];
16
- constructor(aiConfig: LDAIConfig, tracker: LDAIConfigTracker, provider: AIProvider);
20
+ constructor(aiConfig: LDAICompletionConfig, tracker: LDAIConfigTracker, provider: AIProvider, judges?: Record<string, Judge>, _logger?: LDLogger | undefined);
17
21
  /**
18
22
  * Invoke the chat model with a prompt string.
19
23
  * This method handles conversation management and tracking, delegating to the provider's invokeModel method.
20
24
  */
21
25
  invoke(prompt: string): Promise<ChatResponse>;
26
+ /**
27
+ * Evaluates the response with all configured judges.
28
+ * Returns a promise that resolves to an array of evaluation results.
29
+ *
30
+ * @param messages Array of messages representing the conversation history
31
+ * @param response The AI response to be evaluated
32
+ * @returns Promise resolving to array of judge evaluation results
33
+ */
34
+ private _evaluateWithJudges;
22
35
  /**
23
36
  * Get the underlying AI configuration used to initialize this TrackedChat.
24
37
  */
25
- getConfig(): LDAIConfig;
38
+ getConfig(): LDAICompletionConfig;
26
39
  /**
27
40
  * Get the underlying AI configuration tracker used to initialize this TrackedChat.
28
41
  */
@@ -32,6 +45,11 @@ export declare class TrackedChat {
32
45
  * This provides direct access to the provider for advanced use cases.
33
46
  */
34
47
  getProvider(): AIProvider;
48
+ /**
49
+ * Get the judges associated with this TrackedChat.
50
+ * Returns a record of judge instances keyed by their configuration keys.
51
+ */
52
+ getJudges(): Record<string, Judge>;
35
53
  /**
36
54
  * Append messages to the conversation history.
37
55
  * Adds messages to the conversation history without invoking the model,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackedChat.d.ts","sourceRoot":"","sources":["../../../../src/api/chat/TrackedChat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;GAKG;AACH,qBAAa,WAAW;IAIpB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB;IACjD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB;IAC7C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU;IACvC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAP3B,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;gBAGX,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,UAAU,EACpB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,EACpC,OAAO,CAAC,sBAAU;IAKrC;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA6BnD;;;;;;;OAOG;YACW,mBAAmB;IAgCjC;;OAEG;IACH,SAAS,IAAI,oBAAoB;IAIjC;;OAEG;IACH,UAAU,IAAI,iBAAiB;IAI/B;;;OAGG;IACH,WAAW,IAAI,UAAU;IAIzB;;;OAGG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAIlC;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI;IAI3C;;;;;;;;OAQG;IACH,WAAW,CAAC,qBAAqB,GAAE,OAAe,GAAG,SAAS,EAAE;CAOjE"}
@@ -8,10 +8,12 @@ exports.TrackedChat = void 0;
8
8
  * the actual model invocation to the provider.
9
9
  */
10
10
  class TrackedChat {
11
- constructor(aiConfig, tracker, provider) {
11
+ constructor(aiConfig, tracker, provider, judges = {}, _logger) {
12
12
  this.aiConfig = aiConfig;
13
13
  this.tracker = tracker;
14
14
  this.provider = provider;
15
+ this.judges = judges;
16
+ this._logger = _logger;
15
17
  this.messages = [];
16
18
  }
17
19
  /**
@@ -19,6 +21,7 @@ class TrackedChat {
19
21
  * This method handles conversation management and tracking, delegating to the provider's invokeModel method.
20
22
  */
21
23
  async invoke(prompt) {
24
+ var _a;
22
25
  // Convert prompt string to LDMessage with role 'user' and add to conversation history
23
26
  const userMessage = {
24
27
  role: 'user',
@@ -30,10 +33,41 @@ class TrackedChat {
30
33
  const allMessages = [...configMessages, ...this.messages];
31
34
  // Delegate to provider-specific implementation with tracking
32
35
  const response = await this.tracker.trackMetricsOf((result) => result.metrics, () => this.provider.invokeModel(allMessages));
33
- // Add the assistant response to the conversation history
36
+ if (((_a = this.aiConfig.judgeConfiguration) === null || _a === void 0 ? void 0 : _a.judges) &&
37
+ this.aiConfig.judgeConfiguration.judges.length > 0) {
38
+ response.evaluations = this._evaluateWithJudges(this.messages, response);
39
+ }
34
40
  this.messages.push(response.message);
35
41
  return response;
36
42
  }
43
+ /**
44
+ * Evaluates the response with all configured judges.
45
+ * Returns a promise that resolves to an array of evaluation results.
46
+ *
47
+ * @param messages Array of messages representing the conversation history
48
+ * @param response The AI response to be evaluated
49
+ * @returns Promise resolving to array of judge evaluation results
50
+ */
51
+ async _evaluateWithJudges(messages, response) {
52
+ const judgeConfigs = this.aiConfig.judgeConfiguration.judges;
53
+ // Start all judge evaluations in parallel
54
+ const evaluationPromises = judgeConfigs.map(async (judgeConfig) => {
55
+ var _a;
56
+ const judge = this.judges[judgeConfig.key];
57
+ if (!judge) {
58
+ (_a = this._logger) === null || _a === void 0 ? void 0 : _a.warn(`Judge configuration is not enabled: ${judgeConfig.key}`, this.tracker.getTrackData());
59
+ return undefined;
60
+ }
61
+ const evalResult = await judge.evaluateMessages(messages, response, judgeConfig.samplingRate);
62
+ if (evalResult && evalResult.success) {
63
+ this.tracker.trackEvalScores(evalResult.evals);
64
+ }
65
+ return evalResult;
66
+ });
67
+ // ensure all evaluations complete even if some fail
68
+ const results = await Promise.allSettled(evaluationPromises);
69
+ return results.map((result) => (result.status === 'fulfilled' ? result.value : undefined));
70
+ }
37
71
  /**
38
72
  * Get the underlying AI configuration used to initialize this TrackedChat.
39
73
  */
@@ -53,6 +87,13 @@ class TrackedChat {
53
87
  getProvider() {
54
88
  return this.provider;
55
89
  }
90
+ /**
91
+ * Get the judges associated with this TrackedChat.
92
+ * Returns a record of judge instances keyed by their configuration keys.
93
+ */
94
+ getJudges() {
95
+ return this.judges;
96
+ }
56
97
  /**
57
98
  * Append messages to the conversation history.
58
99
  * Adds messages to the conversation history without invoking the model,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackedChat.js","sourceRoot":"","sources":["../../../../src/api/chat/TrackedChat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/chat/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/chat/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,gDAA8B"}
@@ -0,0 +1,22 @@
1
+ import { LDMessage } from '../config/types';
2
+ import { JudgeResponse } from '../judge/types';
3
+ import { LDAIMetrics } from '../metrics/LDAIMetrics';
4
+ /**
5
+ * Chat response structure.
6
+ */
7
+ export interface ChatResponse {
8
+ /**
9
+ * The response message from the AI.
10
+ */
11
+ message: LDMessage;
12
+ /**
13
+ * Metrics information including success status and token usage.
14
+ */
15
+ metrics: LDAIMetrics;
16
+ /**
17
+ * Promise that resolves to judge evaluation results.
18
+ * Only present when judges are configured for evaluation.
19
+ */
20
+ evaluations?: Promise<Array<JudgeResponse | undefined>>;
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/chat/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC;CACzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/chat/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/api/chat/types.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import { EvalScore } from '../judge/types';
1
2
  import { LDAIMetrics, LDFeedbackKind, LDTokenUsage } from '../metrics';
2
3
  /**
3
4
  * Metrics which have been tracked.
@@ -30,6 +31,18 @@ export interface LDAIMetricSummary {
30
31
  * The LDAIConfigTracker is used to track various details about AI operations.
31
32
  */
32
33
  export interface LDAIConfigTracker {
34
+ /**
35
+ * Get the data for tracking.
36
+ */
37
+ getTrackData(): {
38
+ variationKey: string;
39
+ configKey: string;
40
+ version: number;
41
+ modelName: string;
42
+ providerName: string;
43
+ aiSdkName: string;
44
+ aiSdkVersion: string;
45
+ };
33
46
  /**
34
47
  * Track the duration of generation.
35
48
  *
@@ -66,6 +79,12 @@ export interface LDAIConfigTracker {
66
79
  * @param timeToFirstTokenMs The duration in milliseconds.
67
80
  */
68
81
  trackTimeToFirstToken(timeToFirstTokenMs: number): void;
82
+ /**
83
+ * Track evaluation scores for multiple metrics.
84
+ *
85
+ * @param scores Record mapping metric keys to their evaluation scores
86
+ */
87
+ trackEvalScores(scores: Record<string, EvalScore>): void;
69
88
  /**
70
89
  * Track the duration of execution of the provided function.
71
90
  *
@@ -93,6 +112,28 @@ export interface LDAIConfigTracker {
93
112
  * @returns The result of the operation
94
113
  */
95
114
  trackMetricsOf<TRes>(metricsExtractor: (result: TRes) => LDAIMetrics, func: () => Promise<TRes>): Promise<TRes>;
115
+ /**
116
+ * Track metrics for a streaming AI operation.
117
+ *
118
+ * This function will track the duration of the operation, extract metrics using the provided
119
+ * metrics extractor function, and track success or error status accordingly.
120
+ *
121
+ * Unlike trackMetricsOf, this method is designed for streaming operations where:
122
+ * - The stream is created and returned immediately (synchronously)
123
+ * - Metrics are extracted asynchronously in the background once the stream completes
124
+ * - Duration is tracked from stream creation to metrics extraction completion
125
+ *
126
+ * The stream is returned immediately so the caller can begin consuming it without waiting.
127
+ * Metrics extraction happens in the background and does not block stream consumption.
128
+ *
129
+ * If the stream creator throws, then this method will also throw and record an error.
130
+ * If metrics extraction fails, the error is logged but does not affect stream consumption.
131
+ *
132
+ * @param streamCreator Function that creates and returns the stream (synchronous)
133
+ * @param metricsExtractor Function that asynchronously extracts metrics from the stream
134
+ * @returns The stream result (returned immediately, not a Promise)
135
+ */
136
+ trackStreamMetricsOf<TStream>(streamCreator: () => TStream, metricsExtractor: (stream: TStream) => Promise<LDAIMetrics>): TStream;
96
137
  /**
97
138
  * Track an OpenAI operation.
98
139
  *
@@ -154,28 +195,6 @@ export interface LDAIConfigTracker {
154
195
  completionTokens?: number;
155
196
  };
156
197
  }>(func: () => Promise<TRes>): Promise<TRes>;
157
- /**
158
- * Track a Vercel AI SDK streamText operation.
159
- *
160
- * This function will track the duration of the operation, the token usage, and the success or error status.
161
- *
162
- * If the provided function throws, then this method will also throw.
163
- * In the case the provided function throws, this function will record the duration and an error.
164
- * A failed operation will not have any token usage data.
165
- *
166
- * @param func Function which executes the operation.
167
- * @returns The result of the operation.
168
- */
169
- trackVercelAISDKStreamTextMetrics<TRes extends {
170
- finishReason?: Promise<string>;
171
- usage?: Promise<{
172
- totalTokens?: number;
173
- inputTokens?: number;
174
- promptTokens?: number;
175
- outputTokens?: number;
176
- completionTokens?: number;
177
- }>;
178
- }>(func: () => TRes): TRes;
179
198
  /**
180
199
  * Get a summary of the tracked metrics.
181
200
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDAIConfigTracker.d.ts","sourceRoot":"","sources":["../../../../src/api/config/LDAIConfigTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDAIConfigTracker.js","sourceRoot":"","sources":["../../../../src/api/config/LDAIConfigTracker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LDAIConfigUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDAIConfigUtils.d.ts","sourceRoot":"","sources":["../../../../src/api/config/LDAIConfigUtils.ts"],"names":[],"mappings":""}