@launchdarkly/server-sdk-ai 0.13.0 → 0.14.1

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 +39 -0
  2. package/README.md +1 -1
  3. package/__tests__/Judge.test.ts +521 -0
  4. package/__tests__/LDAIClientImpl.test.ts +535 -323
  5. package/__tests__/LDAIConfigTrackerImpl.test.ts +50 -290
  6. package/__tests__/TrackedChat.test.ts +5 -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} +12 -11
  13. package/dist/src/LDAIConfigTrackerImpl.d.ts.map +1 -0
  14. package/dist/{LDAIConfigTrackerImpl.js → src/LDAIConfigTrackerImpl.js} +21 -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 +25 -25
  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 +145 -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 +206 -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 +151 -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 +37 -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 +139 -0
  104. package/docs/interfaces/LDAIAgentConfig.html +90 -31
  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} +96 -90
  109. package/docs/interfaces/LDAICompletionConfigDefault.html +155 -0
  110. package/docs/interfaces/LDAIConfig.html +52 -75
  111. package/docs/interfaces/LDAIConfigDefault.html +133 -0
  112. package/docs/interfaces/LDAIConfigTracker.html +102 -63
  113. package/docs/interfaces/LDAIJudgeConfig.html +178 -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} +35 -23
  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 -35
  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 +31 -54
  132. package/src/api/LDAIClient.ts +166 -33
  133. package/src/api/chat/TrackedChat.ts +68 -5
  134. package/src/api/chat/types.ts +8 -1
  135. package/src/api/config/LDAIConfigTracker.ts +27 -30
  136. package/src/api/config/LDAIConfigUtils.ts +212 -0
  137. package/src/api/config/index.ts +2 -2
  138. package/src/api/config/types.ts +260 -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 +218 -0
  142. package/src/api/judge/index.ts +2 -0
  143. package/src/api/judge/types.ts +41 -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 -14
  154. package/dist/LDAIConfigMapper.d.ts.map +0 -1
  155. package/dist/LDAIConfigMapper.js +0 -59
  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 -95
  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 -31
  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 -69
  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 -104
  216. package/src/api/config/VercelAISDK.ts +0 -33
  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,212 @@
1
+ import { LDAIConfigTracker } from './LDAIConfigTracker';
2
+ import {
3
+ LDAIAgentConfig,
4
+ LDAICompletionConfig,
5
+ LDAIConfigDefaultKind,
6
+ LDAIConfigKind,
7
+ LDAIConfigMode,
8
+ LDAIJudgeConfig,
9
+ LDJudgeConfiguration,
10
+ LDMessage,
11
+ LDModelConfig,
12
+ LDProviderConfig,
13
+ } from './types';
14
+
15
+ /**
16
+ * Internal flag value structure returned by LaunchDarkly.
17
+ * This represents the raw data structure that LaunchDarkly returns for AI configuration flags.
18
+ *
19
+ * @internal - Not meant for external use
20
+ */
21
+ export interface LDAIConfigFlagValue {
22
+ _ldMeta?: {
23
+ variationKey?: string;
24
+ enabled: boolean;
25
+ version?: number;
26
+ mode?: LDAIConfigMode;
27
+ };
28
+ model?: LDModelConfig;
29
+ messages?: LDMessage[];
30
+ provider?: LDProviderConfig;
31
+ instructions?: string;
32
+ evaluationMetricKeys?: string[];
33
+ judgeConfiguration?: LDJudgeConfiguration;
34
+ }
35
+
36
+ /**
37
+ * Utility class for converting between AI configuration types and LaunchDarkly flag values.
38
+ *
39
+ * @internal - This class and its types are internal implementation details and should not be used by SDK consumers.
40
+ */
41
+ export class LDAIConfigUtils {
42
+ /**
43
+ * Converts a default AI configuration to a LaunchDarkly flag value format.
44
+ *
45
+ * @param config The default AI configuration to convert
46
+ * @param mode The mode for the configuration
47
+ * @returns The flag value structure for LaunchDarkly
48
+ */
49
+ static toFlagValue(config: LDAIConfigDefaultKind, mode: LDAIConfigMode): LDAIConfigFlagValue {
50
+ const flagValue: LDAIConfigFlagValue = {
51
+ _ldMeta: {
52
+ variationKey: '', // Not available when converting from config
53
+ enabled: config.enabled ?? false,
54
+ mode,
55
+ },
56
+ model: config.model,
57
+ };
58
+
59
+ if ('messages' in config && config.messages !== undefined) {
60
+ flagValue.messages = config.messages;
61
+ }
62
+ if (config.provider !== undefined) {
63
+ flagValue.provider = config.provider;
64
+ }
65
+ if ('instructions' in config && config.instructions !== undefined) {
66
+ flagValue.instructions = config.instructions;
67
+ }
68
+ if ('evaluationMetricKeys' in config && config.evaluationMetricKeys !== undefined) {
69
+ flagValue.evaluationMetricKeys = config.evaluationMetricKeys;
70
+ }
71
+ if ('judgeConfiguration' in config && config.judgeConfiguration !== undefined) {
72
+ flagValue.judgeConfiguration = config.judgeConfiguration;
73
+ }
74
+
75
+ return flagValue;
76
+ }
77
+
78
+ /**
79
+ * Converts a LaunchDarkly flag value to the appropriate AI configuration type.
80
+ *
81
+ * @param flagValue The flag value from LaunchDarkly
82
+ * @param tracker The tracker to add to the config
83
+ * @returns The appropriate AI configuration type
84
+ */
85
+ static fromFlagValue(
86
+ key: string,
87
+ flagValue: LDAIConfigFlagValue,
88
+ tracker: LDAIConfigTracker,
89
+ ): LDAIConfigKind {
90
+ // Determine the actual mode from flag value
91
+ // eslint-disable-next-line no-underscore-dangle
92
+ const flagValueMode = flagValue._ldMeta?.mode;
93
+
94
+ switch (flagValueMode) {
95
+ case 'agent':
96
+ return this.toAgentConfig(key, flagValue, tracker);
97
+ case 'judge':
98
+ return this.toJudgeConfig(key, flagValue, tracker);
99
+ case 'completion':
100
+ default:
101
+ return this.toCompletionConfig(key, flagValue, tracker);
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Creates a disabled configuration of the specified mode.
107
+ *
108
+ * @param mode The mode for the disabled config
109
+ * @returns A disabled config of the appropriate type
110
+ */
111
+ static createDisabledConfig(key: string, mode: LDAIConfigMode): LDAIConfigKind {
112
+ switch (mode) {
113
+ case 'agent':
114
+ return {
115
+ key,
116
+ enabled: false,
117
+ tracker: undefined,
118
+ } as LDAIAgentConfig;
119
+ case 'judge':
120
+ return {
121
+ key,
122
+ enabled: false,
123
+ tracker: undefined,
124
+ evaluationMetricKeys: [],
125
+ } as LDAIJudgeConfig;
126
+ case 'completion':
127
+ default:
128
+ // Default to completion config for completion mode or any unexpected mode
129
+ return {
130
+ key,
131
+ enabled: false,
132
+ tracker: undefined,
133
+ } as LDAICompletionConfig;
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Creates the base configuration that all config types share.
139
+ *
140
+ * @param flagValue The flag value from LaunchDarkly
141
+ * @returns Base configuration object
142
+ */
143
+ private static _toBaseConfig(key: string, flagValue: LDAIConfigFlagValue) {
144
+ return {
145
+ key,
146
+ // eslint-disable-next-line no-underscore-dangle
147
+ enabled: flagValue._ldMeta?.enabled ?? false,
148
+ model: flagValue.model,
149
+ provider: flagValue.provider,
150
+ };
151
+ }
152
+
153
+ /**
154
+ * Creates a completion config from flag value data.
155
+ *
156
+ * @param flagValue The flag value from LaunchDarkly
157
+ * @param tracker The tracker to add to the config
158
+ * @returns A completion configuration
159
+ */
160
+ static toCompletionConfig(
161
+ key: string,
162
+ flagValue: LDAIConfigFlagValue,
163
+ tracker: LDAIConfigTracker,
164
+ ): LDAICompletionConfig {
165
+ return {
166
+ ...this._toBaseConfig(key, flagValue),
167
+ tracker,
168
+ messages: flagValue.messages,
169
+ judgeConfiguration: flagValue.judgeConfiguration,
170
+ };
171
+ }
172
+
173
+ /**
174
+ * Creates an agent config from flag value data.
175
+ *
176
+ * @param flagValue The flag value from LaunchDarkly
177
+ * @param tracker The tracker to add to the config
178
+ * @returns An agent configuration
179
+ */
180
+ static toAgentConfig(
181
+ key: string,
182
+ flagValue: LDAIConfigFlagValue,
183
+ tracker: LDAIConfigTracker,
184
+ ): LDAIAgentConfig {
185
+ return {
186
+ ...this._toBaseConfig(key, flagValue),
187
+ tracker,
188
+ instructions: flagValue.instructions,
189
+ judgeConfiguration: flagValue.judgeConfiguration,
190
+ };
191
+ }
192
+
193
+ /**
194
+ * Creates a judge config from flag value data.
195
+ *
196
+ * @param flagValue The flag value from LaunchDarkly
197
+ * @param tracker The tracker to add to the config
198
+ * @returns A judge configuration
199
+ */
200
+ static toJudgeConfig(
201
+ key: string,
202
+ flagValue: LDAIConfigFlagValue,
203
+ tracker: LDAIConfigTracker,
204
+ ): LDAIJudgeConfig {
205
+ return {
206
+ ...this._toBaseConfig(key, flagValue),
207
+ tracker,
208
+ messages: flagValue.messages,
209
+ evaluationMetricKeys: flagValue.evaluationMetricKeys || [],
210
+ };
211
+ }
212
+ }
@@ -1,3 +1,3 @@
1
- export * from './LDAIConfig';
2
- export * from './VercelAISDK';
1
+ export * from './types';
2
+ // LDAIConfigUtils is intentionally not exported - it's an internal utility class
3
3
  export { LDAIConfigTracker } from './LDAIConfigTracker';
@@ -0,0 +1,260 @@
1
+ import { LDAIConfigTracker } from './LDAIConfigTracker';
2
+
3
+ // ============================================================================
4
+ // Foundation Types
5
+ // ============================================================================
6
+
7
+ /**
8
+ * Information about prompts.
9
+ */
10
+ export interface LDMessage {
11
+ /**
12
+ * The role of the prompt.
13
+ */
14
+ role: 'user' | 'assistant' | 'system';
15
+ /**
16
+ * Content for the prompt.
17
+ */
18
+ content: string;
19
+ }
20
+
21
+ /**
22
+ * Configuration related to the model.
23
+ */
24
+ export interface LDModelConfig {
25
+ /**
26
+ * The ID of the model.
27
+ */
28
+ name: string;
29
+
30
+ /**
31
+ * Model specific parameters.
32
+ */
33
+ parameters?: { [index: string]: unknown };
34
+
35
+ /**
36
+ * Additional user-specified parameters.
37
+ */
38
+ custom?: { [index: string]: unknown };
39
+ }
40
+
41
+ export interface LDProviderConfig {
42
+ /**
43
+ * The name of the provider.
44
+ */
45
+ name: string;
46
+ }
47
+
48
+ // ============================================================================
49
+ // Judge Types
50
+ // ============================================================================
51
+
52
+ /**
53
+ * Configuration for a single judge attachment.
54
+ */
55
+ export interface LDJudge {
56
+ /** The key of the judge AI Config */
57
+ key: string;
58
+ /** Sampling rate for evaluation (0.0 to 1.0) */
59
+ samplingRate: number;
60
+ }
61
+
62
+ /**
63
+ * Configuration for judge attachment to AI Configs.
64
+ */
65
+ export interface LDJudgeConfiguration {
66
+ /** Array of judge configurations */
67
+ judges: LDJudge[];
68
+ }
69
+
70
+ // ============================================================================
71
+ // Base AI Config Types
72
+ // ============================================================================
73
+
74
+ /**
75
+ * Base AI Config interface for default implementations with optional enabled property.
76
+ */
77
+ export interface LDAIConfigDefault {
78
+ /**
79
+ * Optional model configuration.
80
+ */
81
+ model?: LDModelConfig;
82
+
83
+ /**
84
+ * Optional configuration for the provider.
85
+ */
86
+ provider?: LDProviderConfig;
87
+
88
+ /**
89
+ * Whether the configuration is enabled. Defaults to false when not provided.
90
+ */
91
+ enabled?: boolean;
92
+ }
93
+
94
+ /**
95
+ * Base AI Config interface without mode-specific fields.
96
+ */
97
+ export interface LDAIConfig extends Omit<LDAIConfigDefault, 'enabled'> {
98
+ /**
99
+ * The key of the AI Config.
100
+ */
101
+ key: string;
102
+ /**
103
+ * Whether the configuration is enabled.
104
+ */
105
+ enabled: boolean;
106
+
107
+ /**
108
+ * A tracker which can be used to generate analytics.
109
+ * Undefined for disabled configs.
110
+ */
111
+ tracker?: LDAIConfigTracker;
112
+ }
113
+
114
+ // ============================================================================
115
+ // Default AI Config Implementation Types
116
+ // ============================================================================
117
+
118
+ /**
119
+ * Default Agent-specific AI Config with instructions.
120
+ */
121
+ export interface LDAIAgentConfigDefault extends LDAIConfigDefault {
122
+ /**
123
+ * Instructions for the agent.
124
+ */
125
+ instructions?: string;
126
+ /**
127
+ * Judge configuration for AI Configs being evaluated.
128
+ * References judge AI Configs that should evaluate this AI Config.
129
+ */
130
+ judgeConfiguration?: LDJudgeConfiguration;
131
+ }
132
+
133
+ /**
134
+ * Default Completion AI Config (default mode).
135
+ */
136
+ export interface LDAICompletionConfigDefault extends LDAIConfigDefault {
137
+ /**
138
+ * Optional prompt data for completion configurations.
139
+ */
140
+ messages?: LDMessage[];
141
+ /**
142
+ * Judge configuration for AI Configs being evaluated.
143
+ * References judge AI Configs that should evaluate this AI Config.
144
+ */
145
+ judgeConfiguration?: LDJudgeConfiguration;
146
+ }
147
+
148
+ /**
149
+ * Default Judge-specific AI Config with required evaluation metric key.
150
+ */
151
+ export interface LDAIJudgeConfigDefault extends LDAIConfigDefault {
152
+ /**
153
+ * Optional prompt data for judge configurations.
154
+ */
155
+ messages?: LDMessage[];
156
+ /**
157
+ * Evaluation metric keys for judge configurations.
158
+ * The keys of the metrics that this judge can evaluate.
159
+ */
160
+ evaluationMetricKeys?: string[];
161
+ }
162
+
163
+ /**
164
+ * Union type for all default AI Config variants.
165
+ */
166
+ export type LDAIConfigDefaultKind =
167
+ | LDAIAgentConfigDefault
168
+ | LDAICompletionConfigDefault
169
+ | LDAIJudgeConfigDefault;
170
+
171
+ // ============================================================================
172
+ // AI Config Implementation Types
173
+ // ============================================================================
174
+
175
+ /**
176
+ * Agent-specific AI Config with instructions.
177
+ */
178
+ export interface LDAIAgentConfig extends LDAIConfig {
179
+ /**
180
+ * Instructions for the agent.
181
+ */
182
+ instructions?: string;
183
+ /**
184
+ * Judge configuration for AI Configs being evaluated.
185
+ * References judge AI Configs that should evaluate this AI Config.
186
+ */
187
+ judgeConfiguration?: LDJudgeConfiguration;
188
+ }
189
+
190
+ /**
191
+ * Completion AI Config (default mode).
192
+ */
193
+ export interface LDAICompletionConfig extends LDAIConfig {
194
+ /**
195
+ * Optional prompt data for completion configurations.
196
+ */
197
+ messages?: LDMessage[];
198
+ /**
199
+ * Judge configuration for AI Configs being evaluated.
200
+ * References judge AI Configs that should evaluate this AI Config.
201
+ */
202
+ judgeConfiguration?: LDJudgeConfiguration;
203
+ }
204
+
205
+ /**
206
+ * Judge-specific AI Config with required evaluation metric key.
207
+ */
208
+ export interface LDAIJudgeConfig extends LDAIConfig {
209
+ /**
210
+ * Optional prompt data for judge configurations.
211
+ */
212
+ messages?: LDMessage[];
213
+ /**
214
+ * Evaluation metric keys for judge configurations.
215
+ * The keys of the metrics that this judge can evaluate.
216
+ */
217
+ evaluationMetricKeys: string[];
218
+ }
219
+
220
+ // ============================================================================
221
+ // Union Types
222
+ // ============================================================================
223
+
224
+ /**
225
+ * Union type for all AI Config variants.
226
+ */
227
+ export type LDAIConfigKind = LDAIAgentConfig | LDAICompletionConfig | LDAIJudgeConfig;
228
+
229
+ // ============================================================================
230
+ // Agent-Specific Request Type
231
+ // ============================================================================
232
+
233
+ /**
234
+ * Configuration for a single agent request.
235
+ */
236
+ export interface LDAIAgentRequestConfig {
237
+ /**
238
+ * The agent key to retrieve.
239
+ */
240
+ key: string;
241
+
242
+ /**
243
+ * Default configuration for the agent.
244
+ */
245
+ defaultValue: LDAIAgentConfigDefault;
246
+
247
+ /**
248
+ * Variables for instructions interpolation.
249
+ */
250
+ variables?: Record<string, unknown>;
251
+ }
252
+
253
+ // ============================================================================
254
+ // Mode Type
255
+ // ============================================================================
256
+
257
+ /**
258
+ * Mode type for AI configurations.
259
+ */
260
+ export type LDAIConfigMode = 'completion' | 'agent' | 'judge';
package/src/api/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from './config';
2
- export * from './agents';
3
2
  export * from './chat';
3
+ export * from './judge';
4
4
  export * from './metrics';
5
5
  export * from './LDAIClient';
6
6
  export * from './providers';
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Internal class for building dynamic evaluation response schemas.
3
+ * Not exported - only used internally by TrackedJudge.
4
+ */
5
+ class EvaluationSchemaBuilder {
6
+ static build(evaluationMetricKeys: string[]): Record<string, unknown> {
7
+ return {
8
+ type: 'object',
9
+ properties: {
10
+ evaluations: {
11
+ type: 'object',
12
+ description: `Object containing evaluation results for ${evaluationMetricKeys.join(', ')} metrics`,
13
+ properties: this._buildKeyProperties(evaluationMetricKeys),
14
+ required: evaluationMetricKeys,
15
+ additionalProperties: false,
16
+ },
17
+ },
18
+ required: ['evaluations'],
19
+ additionalProperties: false,
20
+ } as const;
21
+ }
22
+
23
+ private static _buildKeyProperties(evaluationMetricKeys: string[]) {
24
+ return evaluationMetricKeys.reduce(
25
+ (acc, key) => {
26
+ acc[key] = this._buildKeySchema(key);
27
+ return acc;
28
+ },
29
+ {} as Record<string, unknown>,
30
+ );
31
+ }
32
+
33
+ private static _buildKeySchema(key: string) {
34
+ return {
35
+ type: 'object',
36
+ properties: {
37
+ score: {
38
+ type: 'number',
39
+ minimum: 0,
40
+ maximum: 1,
41
+ description: `Score between 0.0 and 1.0 for ${key}`,
42
+ },
43
+ reasoning: {
44
+ type: 'string',
45
+ description: `Reasoning behind the score for ${key}`,
46
+ },
47
+ },
48
+ required: ['score', 'reasoning'],
49
+ additionalProperties: false,
50
+ };
51
+ }
52
+ }
53
+
54
+ export { EvaluationSchemaBuilder };