@launchdarkly/server-sdk-ai 0.11.4 → 0.12.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 (97) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/__tests__/LDAIConfigTrackerImpl.test.ts +155 -0
  3. package/__tests__/TrackedChat.test.ts +231 -0
  4. package/dist/LDAIClientImpl.d.ts +4 -0
  5. package/dist/LDAIClientImpl.d.ts.map +1 -1
  6. package/dist/LDAIClientImpl.js +21 -0
  7. package/dist/LDAIClientImpl.js.map +1 -1
  8. package/dist/LDAIConfigTrackerImpl.d.ts +2 -1
  9. package/dist/LDAIConfigTrackerImpl.d.ts.map +1 -1
  10. package/dist/LDAIConfigTrackerImpl.js +24 -0
  11. package/dist/LDAIConfigTrackerImpl.js.map +1 -1
  12. package/dist/LDClientMin.d.ts +2 -1
  13. package/dist/LDClientMin.d.ts.map +1 -1
  14. package/dist/api/LDAIClient.d.ts +39 -0
  15. package/dist/api/LDAIClient.d.ts.map +1 -1
  16. package/dist/api/chat/TrackedChat.d.ts +54 -0
  17. package/dist/api/chat/TrackedChat.d.ts.map +1 -0
  18. package/dist/api/chat/TrackedChat.js +84 -0
  19. package/dist/api/chat/TrackedChat.js.map +1 -0
  20. package/dist/api/chat/index.d.ts +3 -0
  21. package/dist/api/chat/index.d.ts.map +1 -0
  22. package/dist/api/chat/index.js +19 -0
  23. package/dist/api/chat/index.js.map +1 -0
  24. package/dist/api/chat/types.d.ts +16 -0
  25. package/dist/api/chat/types.d.ts.map +1 -0
  26. package/dist/api/chat/types.js +3 -0
  27. package/dist/api/chat/types.js.map +1 -0
  28. package/dist/api/config/LDAIConfigTracker.d.ts +16 -1
  29. package/dist/api/config/LDAIConfigTracker.d.ts.map +1 -1
  30. package/dist/api/index.d.ts +2 -0
  31. package/dist/api/index.d.ts.map +1 -1
  32. package/dist/api/index.js +2 -0
  33. package/dist/api/index.js.map +1 -1
  34. package/dist/api/metrics/LDAIMetrics.d.ts +17 -0
  35. package/dist/api/metrics/LDAIMetrics.d.ts.map +1 -0
  36. package/dist/api/metrics/LDAIMetrics.js +3 -0
  37. package/dist/api/metrics/LDAIMetrics.js.map +1 -0
  38. package/dist/api/metrics/index.d.ts +1 -0
  39. package/dist/api/metrics/index.d.ts.map +1 -1
  40. package/dist/api/metrics/index.js +1 -0
  41. package/dist/api/metrics/index.js.map +1 -1
  42. package/dist/api/providers/AIProvider.d.ts +35 -0
  43. package/dist/api/providers/AIProvider.d.ts.map +1 -0
  44. package/dist/api/providers/AIProvider.js +31 -0
  45. package/dist/api/providers/AIProvider.js.map +1 -0
  46. package/dist/api/providers/AIProviderFactory.d.ts +39 -0
  47. package/dist/api/providers/AIProviderFactory.d.ts.map +1 -0
  48. package/dist/api/providers/AIProviderFactory.js +102 -0
  49. package/dist/api/providers/AIProviderFactory.js.map +1 -0
  50. package/dist/api/providers/index.d.ts +3 -0
  51. package/dist/api/providers/index.d.ts.map +1 -0
  52. package/dist/api/providers/index.js +19 -0
  53. package/dist/api/providers/index.js.map +1 -0
  54. package/docs/assets/search.js +1 -1
  55. package/docs/classes/AIProvider.html +174 -0
  56. package/docs/classes/AIProviderFactory.html +197 -0
  57. package/docs/classes/TrackedChat.html +253 -0
  58. package/docs/enums/LDFeedbackKind.html +14 -7
  59. package/docs/functions/createBedrockTokenUsage.html +12 -5
  60. package/docs/functions/createOpenAiUsage.html +12 -5
  61. package/docs/functions/createVercelAISDKTokenUsage.html +12 -5
  62. package/docs/functions/initAi.html +12 -5
  63. package/docs/index.html +25 -5
  64. package/docs/interfaces/ChatResponse.html +108 -0
  65. package/docs/interfaces/LDAIAgent.html +17 -10
  66. package/docs/interfaces/LDAIAgentConfig.html +15 -8
  67. package/docs/interfaces/LDAIClient.html +55 -9
  68. package/docs/interfaces/LDAIConfig.html +18 -11
  69. package/docs/interfaces/LDAIConfigTracker.html +76 -17
  70. package/docs/interfaces/LDAIMetrics.html +110 -0
  71. package/docs/interfaces/LDMessage.html +14 -7
  72. package/docs/interfaces/LDModelConfig.html +15 -8
  73. package/docs/interfaces/LDProviderConfig.html +13 -6
  74. package/docs/interfaces/LDTokenUsage.html +15 -8
  75. package/docs/interfaces/VercelAISDKConfig.html +23 -16
  76. package/docs/interfaces/VercelAISDKMapOptions.html +13 -6
  77. package/docs/types/LDAIAgentDefaults.html +12 -5
  78. package/docs/types/LDAIDefaults.html +12 -5
  79. package/docs/types/SupportedAIProvider.html +70 -0
  80. package/docs/types/VercelAISDKProvider.html +12 -5
  81. package/docs/variables/SUPPORTED_AI_PROVIDERS.html +70 -0
  82. package/package.json +1 -1
  83. package/src/LDAIClientImpl.ts +36 -2
  84. package/src/LDAIConfigTrackerImpl.ts +32 -0
  85. package/src/LDClientMin.ts +3 -1
  86. package/src/api/LDAIClient.ts +46 -0
  87. package/src/api/chat/TrackedChat.ts +100 -0
  88. package/src/api/chat/index.ts +2 -0
  89. package/src/api/chat/types.ts +17 -0
  90. package/src/api/config/LDAIConfigTracker.ts +20 -1
  91. package/src/api/index.ts +2 -0
  92. package/src/api/metrics/LDAIMetrics.ts +18 -0
  93. package/src/api/metrics/index.ts +1 -0
  94. package/src/api/providers/AIProvider.ts +43 -0
  95. package/src/api/providers/AIProviderFactory.ts +152 -0
  96. package/src/api/providers/index.ts +2 -0
  97. package/tsconfig.eslint.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.12.0](https://github.com/launchdarkly/js-core/compare/server-sdk-ai-v0.11.4...server-sdk-ai-v0.12.0) (2025-10-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * Add support for TrackedChats in the AI SDK ([#939](https://github.com/launchdarkly/js-core/issues/939)) ([a7ad0ea](https://github.com/launchdarkly/js-core/commit/a7ad0ead1408fdd80b333baa085c462f47ea5ac1))
9
+ * Add support for OpenAI AIProvider to the AI SDK ([#939](https://github.com/launchdarkly/js-core/issues/939)) ([a7ad0ea](https://github.com/launchdarkly/js-core/commit/a7ad0ead1408fdd80b333baa085c462f47ea5ac1))
10
+ * Add support for LangChain AIProvider to the AI SDK ([#939](https://github.com/launchdarkly/js-core/issues/939)) ([a7ad0ea](https://github.com/launchdarkly/js-core/commit/a7ad0ead1408fdd80b333baa085c462f47ea5ac1))
11
+ * Add support for Vercel AIProvider to the AI SDK ([#946](https://github.com/launchdarkly/js-core/issues/946)) ([8553f24](https://github.com/launchdarkly/js-core/commit/8553f2482a3437975b63992f622b4396cc4ac7e7))
12
+
3
13
  ## [0.11.4](https://github.com/launchdarkly/js-core/compare/server-sdk-ai-v0.11.3...server-sdk-ai-v0.11.4) (2025-09-15)
4
14
 
5
15
 
@@ -898,3 +898,158 @@ it('tracks error', () => {
898
898
  1,
899
899
  );
900
900
  });
901
+
902
+ describe('trackMetricsOf', () => {
903
+ it('tracks success and token usage from metrics', async () => {
904
+ const tracker = new LDAIConfigTrackerImpl(
905
+ mockLdClient,
906
+ configKey,
907
+ variationKey,
908
+ version,
909
+ modelName,
910
+ providerName,
911
+ testContext,
912
+ );
913
+
914
+ const mockResult = { response: 'test' };
915
+ const mockMetrics = {
916
+ success: true,
917
+ usage: { total: 100, input: 50, output: 50 },
918
+ };
919
+
920
+ const metricsExtractor = jest.fn().mockReturnValue(mockMetrics);
921
+ const operation = jest.fn().mockResolvedValue(mockResult);
922
+
923
+ const result = await tracker.trackMetricsOf(metricsExtractor, operation);
924
+
925
+ expect(result).toBe(mockResult);
926
+ expect(metricsExtractor).toHaveBeenCalledWith(mockResult);
927
+ expect(operation).toHaveBeenCalled();
928
+
929
+ // Should track success
930
+ expect(mockTrack).toHaveBeenCalledWith(
931
+ '$ld:ai:generation:success',
932
+ testContext,
933
+ { configKey, variationKey, version, modelName, providerName },
934
+ 1,
935
+ );
936
+
937
+ // Should track token usage
938
+ expect(mockTrack).toHaveBeenCalledWith(
939
+ '$ld:ai:tokens:total',
940
+ testContext,
941
+ { configKey, variationKey, version, modelName, providerName },
942
+ 100,
943
+ );
944
+ expect(mockTrack).toHaveBeenCalledWith(
945
+ '$ld:ai:tokens:input',
946
+ testContext,
947
+ { configKey, variationKey, version, modelName, providerName },
948
+ 50,
949
+ );
950
+ expect(mockTrack).toHaveBeenCalledWith(
951
+ '$ld:ai:tokens:output',
952
+ testContext,
953
+ { configKey, variationKey, version, modelName, providerName },
954
+ 50,
955
+ );
956
+ });
957
+
958
+ it('tracks failure when metrics indicate failure', async () => {
959
+ const tracker = new LDAIConfigTrackerImpl(
960
+ mockLdClient,
961
+ configKey,
962
+ variationKey,
963
+ version,
964
+ modelName,
965
+ providerName,
966
+ testContext,
967
+ );
968
+
969
+ const mockResult = { response: 'test' };
970
+ const mockMetrics = {
971
+ success: false,
972
+ };
973
+
974
+ const metricsExtractor = jest.fn().mockReturnValue(mockMetrics);
975
+ const operation = jest.fn().mockResolvedValue(mockResult);
976
+
977
+ await tracker.trackMetricsOf(metricsExtractor, operation);
978
+
979
+ // Should track error
980
+ expect(mockTrack).toHaveBeenCalledWith(
981
+ '$ld:ai:generation:error',
982
+ testContext,
983
+ { configKey, variationKey, version, modelName, providerName },
984
+ 1,
985
+ );
986
+ });
987
+
988
+ it('tracks failure when operation throws', async () => {
989
+ const tracker = new LDAIConfigTrackerImpl(
990
+ mockLdClient,
991
+ configKey,
992
+ variationKey,
993
+ version,
994
+ modelName,
995
+ providerName,
996
+ testContext,
997
+ );
998
+
999
+ const error = new Error('Operation failed');
1000
+ const metricsExtractor = jest.fn();
1001
+ const operation = jest.fn().mockRejectedValue(error);
1002
+
1003
+ await expect(tracker.trackMetricsOf(metricsExtractor, operation)).rejects.toThrow(error);
1004
+
1005
+ // Should track error
1006
+ expect(mockTrack).toHaveBeenCalledWith(
1007
+ '$ld:ai:generation:error',
1008
+ testContext,
1009
+ { configKey, variationKey, version, modelName, providerName },
1010
+ 1,
1011
+ );
1012
+
1013
+ // Should not call metrics extractor when operation fails
1014
+ expect(metricsExtractor).not.toHaveBeenCalled();
1015
+ });
1016
+
1017
+ it('tracks metrics without token usage', async () => {
1018
+ const tracker = new LDAIConfigTrackerImpl(
1019
+ mockLdClient,
1020
+ configKey,
1021
+ variationKey,
1022
+ version,
1023
+ modelName,
1024
+ providerName,
1025
+ testContext,
1026
+ );
1027
+
1028
+ const mockResult = { response: 'test' };
1029
+ const mockMetrics = {
1030
+ success: true,
1031
+ // No usage provided
1032
+ };
1033
+
1034
+ const metricsExtractor = jest.fn().mockReturnValue(mockMetrics);
1035
+ const operation = jest.fn().mockResolvedValue(mockResult);
1036
+
1037
+ await tracker.trackMetricsOf(metricsExtractor, operation);
1038
+
1039
+ // Should track success but not token usage
1040
+ expect(mockTrack).toHaveBeenCalledWith(
1041
+ '$ld:ai:generation:success',
1042
+ testContext,
1043
+ { configKey, variationKey, version, modelName, providerName },
1044
+ 1,
1045
+ );
1046
+
1047
+ // Should not track token usage
1048
+ expect(mockTrack).not.toHaveBeenCalledWith(
1049
+ '$ld:ai:tokens:total',
1050
+ expect.any(Object),
1051
+ expect.any(Object),
1052
+ expect.any(Number),
1053
+ );
1054
+ });
1055
+ });
@@ -0,0 +1,231 @@
1
+ import { TrackedChat } from '../src/api/chat/TrackedChat';
2
+ import { ChatResponse } from '../src/api/chat/types';
3
+ import { LDAIConfig, LDMessage } from '../src/api/config/LDAIConfig';
4
+ import { LDAIConfigTracker } from '../src/api/config/LDAIConfigTracker';
5
+ import { AIProvider } from '../src/api/providers/AIProvider';
6
+
7
+ describe('TrackedChat', () => {
8
+ let mockProvider: jest.Mocked<AIProvider>;
9
+ let mockTracker: jest.Mocked<LDAIConfigTracker>;
10
+ let aiConfig: LDAIConfig;
11
+
12
+ beforeEach(() => {
13
+ // Mock the AIProvider
14
+ mockProvider = {
15
+ invokeModel: jest.fn(),
16
+ } as any;
17
+
18
+ // Mock the LDAIConfigTracker
19
+ mockTracker = {
20
+ trackMetricsOf: jest.fn(),
21
+ trackDuration: jest.fn(),
22
+ trackTokens: jest.fn(),
23
+ trackSuccess: jest.fn(),
24
+ trackError: jest.fn(),
25
+ trackFeedback: jest.fn(),
26
+ trackTimeToFirstToken: jest.fn(),
27
+ trackDurationOf: jest.fn(),
28
+ trackOpenAIMetrics: jest.fn(),
29
+ trackBedrockConverseMetrics: jest.fn(),
30
+ trackVercelAIMetrics: jest.fn(),
31
+ getSummary: jest.fn(),
32
+ } as any;
33
+
34
+ // Create a basic AI config
35
+ aiConfig = {
36
+ enabled: true,
37
+ messages: [{ role: 'system', content: 'You are a helpful assistant.' }],
38
+ model: { name: 'gpt-4' },
39
+ provider: { name: 'openai' },
40
+ tracker: mockTracker,
41
+ toVercelAISDK: jest.fn(),
42
+ };
43
+ });
44
+
45
+ describe('appendMessages', () => {
46
+ it('appends messages to the conversation history', () => {
47
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
48
+
49
+ const messagesToAppend: LDMessage[] = [
50
+ { role: 'user', content: 'Hello' },
51
+ { role: 'assistant', content: 'Hi there!' },
52
+ ];
53
+
54
+ chat.appendMessages(messagesToAppend);
55
+
56
+ const messages = chat.getMessages(false);
57
+ expect(messages).toHaveLength(2);
58
+ expect(messages[0]).toEqual({ role: 'user', content: 'Hello' });
59
+ expect(messages[1]).toEqual({ role: 'assistant', content: 'Hi there!' });
60
+ });
61
+
62
+ it('appends multiple message batches sequentially', () => {
63
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
64
+
65
+ chat.appendMessages([{ role: 'user', content: 'First message' }]);
66
+ chat.appendMessages([{ role: 'assistant', content: 'Second message' }]);
67
+ chat.appendMessages([{ role: 'user', content: 'Third message' }]);
68
+
69
+ const messages = chat.getMessages(false);
70
+ expect(messages).toHaveLength(3);
71
+ expect(messages[0].content).toBe('First message');
72
+ expect(messages[1].content).toBe('Second message');
73
+ expect(messages[2].content).toBe('Third message');
74
+ });
75
+
76
+ it('handles empty message array', () => {
77
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
78
+
79
+ chat.appendMessages([]);
80
+
81
+ const messages = chat.getMessages(false);
82
+ expect(messages).toHaveLength(0);
83
+ });
84
+ });
85
+
86
+ describe('getMessages', () => {
87
+ it('returns only conversation history when includeConfigMessages is false', () => {
88
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
89
+
90
+ chat.appendMessages([
91
+ { role: 'user', content: 'User message' },
92
+ { role: 'assistant', content: 'Assistant message' },
93
+ ]);
94
+
95
+ const messages = chat.getMessages(false);
96
+
97
+ expect(messages).toHaveLength(2);
98
+ expect(messages[0]).toEqual({ role: 'user', content: 'User message' });
99
+ expect(messages[1]).toEqual({ role: 'assistant', content: 'Assistant message' });
100
+ });
101
+
102
+ it('returns only conversation history when includeConfigMessages is omitted (defaults to false)', () => {
103
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
104
+
105
+ chat.appendMessages([{ role: 'user', content: 'User message' }]);
106
+
107
+ const messages = chat.getMessages();
108
+
109
+ expect(messages).toHaveLength(1);
110
+ expect(messages[0]).toEqual({ role: 'user', content: 'User message' });
111
+ });
112
+
113
+ it('returns config messages prepended when includeConfigMessages is true', () => {
114
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
115
+
116
+ chat.appendMessages([
117
+ { role: 'user', content: 'User message' },
118
+ { role: 'assistant', content: 'Assistant message' },
119
+ ]);
120
+
121
+ const messages = chat.getMessages(true);
122
+
123
+ expect(messages).toHaveLength(3);
124
+ expect(messages[0]).toEqual({ role: 'system', content: 'You are a helpful assistant.' });
125
+ expect(messages[1]).toEqual({ role: 'user', content: 'User message' });
126
+ expect(messages[2]).toEqual({ role: 'assistant', content: 'Assistant message' });
127
+ });
128
+
129
+ it('returns only config messages when no conversation history exists and includeConfigMessages is true', () => {
130
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
131
+
132
+ const messages = chat.getMessages(true);
133
+
134
+ expect(messages).toHaveLength(1);
135
+ expect(messages[0]).toEqual({ role: 'system', content: 'You are a helpful assistant.' });
136
+ });
137
+
138
+ it('returns empty array when no messages exist and includeConfigMessages is false', () => {
139
+ const configWithoutMessages: LDAIConfig = {
140
+ ...aiConfig,
141
+ messages: [],
142
+ };
143
+ const chat = new TrackedChat(configWithoutMessages, mockTracker, mockProvider);
144
+
145
+ const messages = chat.getMessages(false);
146
+
147
+ expect(messages).toHaveLength(0);
148
+ });
149
+
150
+ it('returns a copy of the messages array (not a reference)', () => {
151
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
152
+
153
+ chat.appendMessages([{ role: 'user', content: 'Original message' }]);
154
+
155
+ const messages1 = chat.getMessages();
156
+ const messages2 = chat.getMessages();
157
+
158
+ expect(messages1).not.toBe(messages2);
159
+ expect(messages1).toEqual(messages2);
160
+
161
+ // Modifying returned array should not affect internal state
162
+ messages1.push({ role: 'assistant', content: 'Modified' });
163
+
164
+ const messages3 = chat.getMessages();
165
+ expect(messages3).toHaveLength(1);
166
+ expect(messages3[0].content).toBe('Original message');
167
+ });
168
+
169
+ it('handles undefined config messages gracefully', () => {
170
+ const configWithoutMessages: LDAIConfig = {
171
+ ...aiConfig,
172
+ messages: undefined,
173
+ };
174
+ const chat = new TrackedChat(configWithoutMessages, mockTracker, mockProvider);
175
+
176
+ chat.appendMessages([{ role: 'user', content: 'User message' }]);
177
+
178
+ const messagesWithConfig = chat.getMessages(true);
179
+ expect(messagesWithConfig).toHaveLength(1);
180
+ expect(messagesWithConfig[0].content).toBe('User message');
181
+
182
+ const messagesWithoutConfig = chat.getMessages(false);
183
+ expect(messagesWithoutConfig).toHaveLength(1);
184
+ expect(messagesWithoutConfig[0].content).toBe('User message');
185
+ });
186
+ });
187
+
188
+ describe('integration with invoke', () => {
189
+ it('adds messages from invoke to history accessible via getMessages', async () => {
190
+ const mockResponse: ChatResponse = {
191
+ message: { role: 'assistant', content: 'Response from model' },
192
+ metrics: { success: true },
193
+ };
194
+
195
+ mockTracker.trackMetricsOf.mockImplementation(async (extractor, func) => func());
196
+
197
+ mockProvider.invokeModel.mockResolvedValue(mockResponse);
198
+
199
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
200
+
201
+ await chat.invoke('Hello');
202
+
203
+ const messages = chat.getMessages(false);
204
+ expect(messages).toHaveLength(2);
205
+ expect(messages[0]).toEqual({ role: 'user', content: 'Hello' });
206
+ expect(messages[1]).toEqual({ role: 'assistant', content: 'Response from model' });
207
+ });
208
+
209
+ it('preserves appended messages when invoking', async () => {
210
+ const mockResponse: ChatResponse = {
211
+ message: { role: 'assistant', content: 'Response' },
212
+ metrics: { success: true },
213
+ };
214
+
215
+ mockTracker.trackMetricsOf.mockImplementation(async (extractor, func) => func());
216
+
217
+ mockProvider.invokeModel.mockResolvedValue(mockResponse);
218
+
219
+ const chat = new TrackedChat(aiConfig, mockTracker, mockProvider);
220
+
221
+ chat.appendMessages([{ role: 'user', content: 'Pre-appended message' }]);
222
+ await chat.invoke('New user input');
223
+
224
+ const messages = chat.getMessages(false);
225
+ expect(messages).toHaveLength(3);
226
+ expect(messages[0].content).toBe('Pre-appended message');
227
+ expect(messages[1].content).toBe('New user input');
228
+ expect(messages[2].content).toBe('Response');
229
+ });
230
+ });
231
+ });
@@ -1,10 +1,13 @@
1
1
  import { LDContext } from '@launchdarkly/js-server-sdk-common';
2
2
  import { LDAIAgent, LDAIAgentConfig, LDAIAgentDefaults } from './api/agents';
3
+ import { TrackedChat } from './api/chat';
3
4
  import { LDAIConfig, LDAIDefaults } from './api/config';
4
5
  import { LDAIClient } from './api/LDAIClient';
6
+ import { SupportedAIProvider } from './api/providers';
5
7
  import { LDClientMin } from './LDClientMin';
6
8
  export declare class LDAIClientImpl implements LDAIClient {
7
9
  private _ldClient;
10
+ private _logger?;
8
11
  constructor(_ldClient: LDClientMin);
9
12
  private _interpolateTemplate;
10
13
  private _evaluate;
@@ -14,5 +17,6 @@ export declare class LDAIClientImpl implements LDAIClient {
14
17
  agents<const T extends readonly (LDAIAgentConfig & {
15
18
  defaultValue: LDAIAgentDefaults;
16
19
  })[]>(agentConfigs: T, context: LDContext): Promise<Record<T[number]['key'], LDAIAgent>>;
20
+ initChat(key: string, context: LDContext, defaultValue: LDAIDefaults, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<TrackedChat | undefined>;
17
21
  }
18
22
  //# sourceMappingURL=LDAIClientImpl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LDAIClientImpl.d.ts","sourceRoot":"","sources":["../src/LDAIClientImpl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EACL,UAAU,EAEV,YAAY,EAOb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuC5C,qBAAa,cAAe,YAAW,UAAU;IACnC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,WAAW;IAE1C,OAAO,CAAC,oBAAoB;YAId,SAAS;YAkCT,cAAc;IAoCtB,MAAM,CACV,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,UAAU,CAAC;IA4ChB,KAAK,CACT,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,SAAS,CAAC;IAOf,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,eAAe,GAAG;QAAE,YAAY,EAAE,iBAAiB,CAAA;KAAE,CAAC,EAAE,EAC7F,YAAY,EAAE,CAAC,EACf,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;CAyBhD"}
1
+ {"version":3,"file":"LDAIClientImpl.d.ts","sourceRoot":"","sources":["../src/LDAIClientImpl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAY,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,UAAU,EAEV,YAAY,EAOb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAqB,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuC5C,qBAAa,cAAe,YAAW,UAAU;IAGnC,OAAO,CAAC,SAAS;IAF7B,OAAO,CAAC,OAAO,CAAC,CAAW;gBAEP,SAAS,EAAE,WAAW;IAI1C,OAAO,CAAC,oBAAoB;YAId,SAAS;YAkCT,cAAc;IAoCtB,MAAM,CACV,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,UAAU,CAAC;IA4ChB,KAAK,CACT,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,SAAS,CAAC;IAOf,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,eAAe,GAAG;QAAE,YAAY,EAAE,iBAAiB,CAAA;KAAE,CAAC,EAAE,EAC7F,YAAY,EAAE,CAAC,EACf,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IA0BzC,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,iBAAiB,CAAC,EAAE,mBAAmB,GACtC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;CAqBpC"}
@@ -2,11 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LDAIClientImpl = void 0;
4
4
  const Mustache = require("mustache");
5
+ const chat_1 = require("./api/chat");
6
+ const providers_1 = require("./api/providers");
5
7
  const LDAIConfigMapper_1 = require("./LDAIConfigMapper");
6
8
  const LDAIConfigTrackerImpl_1 = require("./LDAIConfigTrackerImpl");
7
9
  class LDAIClientImpl {
8
10
  constructor(_ldClient) {
9
11
  this._ldClient = _ldClient;
12
+ this._logger = _ldClient.logger;
10
13
  }
11
14
  _interpolateTemplate(template, variables) {
12
15
  return Mustache.render(template, variables, undefined, { escape: (item) => item });
@@ -89,6 +92,24 @@ class LDAIClientImpl {
89
92
  }));
90
93
  return agents;
91
94
  }
95
+ async initChat(key, context, defaultValue, variables, defaultAiProvider) {
96
+ var _a;
97
+ // Track chat initialization
98
+ this._ldClient.track('$ld:ai:config:function:initChat', context, key, 1);
99
+ const aiConfig = await this.config(key, context, defaultValue, variables);
100
+ // Return undefined if the configuration is disabled
101
+ if (!aiConfig.enabled) {
102
+ (_a = this._logger) === null || _a === void 0 ? void 0 : _a.info(`Chat configuration is disabled: ${key}`);
103
+ return undefined;
104
+ }
105
+ // Create the AIProvider instance
106
+ const provider = await providers_1.AIProviderFactory.create(aiConfig, this._logger, defaultAiProvider);
107
+ if (!provider) {
108
+ return undefined;
109
+ }
110
+ // Create the TrackedChat instance with the provider
111
+ return new chat_1.TrackedChat(aiConfig, aiConfig.tracker, provider);
112
+ }
92
113
  }
93
114
  exports.LDAIClientImpl = LDAIClientImpl;
94
115
  //# sourceMappingURL=LDAIClientImpl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LDAIClientImpl.js","sourceRoot":"","sources":["../src/LDAIClientImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LDAIClientImpl.js","sourceRoot":"","sources":["../src/LDAIClientImpl.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { LDContext } from '@launchdarkly/js-server-sdk-common';
2
2
  import { LDAIConfigTracker } from './api/config';
3
3
  import { LDAIMetricSummary } from './api/config/LDAIConfigTracker';
4
- import { LDFeedbackKind, LDTokenUsage } from './api/metrics';
4
+ import { LDAIMetrics, LDFeedbackKind, LDTokenUsage } from './api/metrics';
5
5
  import { LDClientMin } from './LDClientMin';
6
6
  export declare class LDAIConfigTrackerImpl implements LDAIConfigTracker {
7
7
  private _ldClient;
@@ -22,6 +22,7 @@ export declare class LDAIConfigTrackerImpl implements LDAIConfigTracker {
22
22
  }): void;
23
23
  trackSuccess(): void;
24
24
  trackError(): void;
25
+ trackMetricsOf<TRes>(metricsExtractor: (result: TRes) => LDAIMetrics, func: () => Promise<TRes>): Promise<TRes>;
25
26
  trackOpenAIMetrics<TRes extends {
26
27
  usage?: {
27
28
  total_tokens?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"LDAIConfigTrackerImpl.d.ts","sourceRoot":"","sources":["../src/LDAIConfigTrackerImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LDAIConfigTrackerImpl.d.ts","sourceRoot":"","sources":["../src/LDAIConfigTrackerImpl.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,30 @@ class LDAIConfigTrackerImpl {
60
60
  this._trackedMetrics.success = false;
61
61
  this._ldClient.track('$ld:ai:generation:error', this._context, this._getTrackData(), 1);
62
62
  }
63
+ async trackMetricsOf(metricsExtractor, func) {
64
+ let result;
65
+ try {
66
+ result = await this.trackDurationOf(func);
67
+ }
68
+ catch (err) {
69
+ this.trackError();
70
+ throw err;
71
+ }
72
+ // Extract metrics after successful AI call
73
+ const metrics = metricsExtractor(result);
74
+ // Track success/error based on metrics
75
+ if (metrics.success) {
76
+ this.trackSuccess();
77
+ }
78
+ else {
79
+ this.trackError();
80
+ }
81
+ // Track token usage if available
82
+ if (metrics.usage) {
83
+ this.trackTokens(metrics.usage);
84
+ }
85
+ return result;
86
+ }
63
87
  async trackOpenAIMetrics(func) {
64
88
  try {
65
89
  const result = await this.trackDurationOf(func);
@@ -1 +1 @@
1
- {"version":3,"file":"LDAIConfigTrackerImpl.js","sourceRoot":"","sources":["../src/LDAIConfigTrackerImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LDAIConfigTrackerImpl.js","sourceRoot":"","sources":["../src/LDAIConfigTrackerImpl.ts"],"names":[],"mappings":";;;AAIA,2CAOuB;AAGvB,MAAa,qBAAqB;IAGhC,YACU,SAAsB,EACtB,UAAkB,EAClB,aAAqB,EACrB,QAAgB,EAChB,UAAkB,EAClB,aAAqB,EACrB,QAAmB;QANnB,cAAS,GAAT,SAAS,CAAa;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,kBAAa,GAAb,aAAa,CAAQ;QACrB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAQ;QAClB,kBAAa,GAAb,aAAa,CAAQ;QACrB,aAAQ,GAAR,QAAQ,CAAW;QATrB,oBAAe,GAAsB,EAAE,CAAC;IAU7C,CAAC;IAEI,aAAa;QAOnB,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,YAAY,EAAE,IAAI,CAAC,aAAa;SACjC,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,QAAQ,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,eAAe,CAAO,IAAyB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI;YACF,kGAAkG;YAClG,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC;SACf;gBAAS;YACR,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,2BAA2B;YACjE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAC9B;IACH,CAAC;IAED,qBAAqB,CAAC,kBAA0B;QAC9C,IAAI,CAAC,eAAe,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,CAClB,mBAAmB,EACnB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,aAAa,EAAE,EACpB,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,QAAkC;QAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,IAAI,QAAQ,CAAC,IAAI,KAAK,wBAAc,CAAC,QAAQ,EAAE;YAC7C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;SAC/F;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,wBAAc,CAAC,QAAQ,EAAE;YACpD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;SAC/F;IACH,CAAC;IAED,YAAY;QACV,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,2BAA2B,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,UAAU;QACR,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,yBAAyB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,gBAA+C,EAC/C,IAAyB;QAEzB,IAAI,MAAY,CAAC;QAEjB,IAAI;YACF,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SAC3C;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,GAAG,CAAC;SACX;QAED,2CAA2C;QAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEzC,uCAAuC;QACvC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;aAAM;YACL,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QAED,iCAAiC;QACjC,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAQtB,IAAyB;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,IAAI,CAAC,WAAW,CAAC,IAAA,2BAAiB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACnD;YACD,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAED,2BAA2B,CAUzB,GAAS;;QACT,IAAI,CAAA,MAAA,GAAG,CAAC,SAAS,0CAAE,cAAc,MAAK,GAAG,EAAE;YACzC,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;aAAM,IAAI,CAAA,MAAA,GAAG,CAAC,SAAS,0CAAE,cAAc,KAAI,GAAG,CAAC,SAAS,CAAC,cAAc,IAAI,GAAG,EAAE;YAC/E,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QACD,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;YACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC3C;QACD,IAAI,GAAG,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,WAAW,CAAC,IAAA,iCAAuB,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;SACtD;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,mCAAmC,CAUvC,IAAyB;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,IAAI,CAAC,WAAW,CAAC,IAAA,qCAA2B,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aAC7D;YACD,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAED,iCAAiC,CAW/B,IAAgB;;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;YACtB,MAAA,MAAM,CAAC,YAAY,0CACf,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;gBAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;gBACxC,IAAI,YAAY,KAAK,OAAO,EAAE;oBAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;iBACnB;qBAAM;oBACL,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,IAAI,MAAM,CAAC,KAAK,EAAE;wBAChB,IAAI;4BACF,IAAI,CAAC,WAAW,CAAC,IAAA,qCAA2B,EAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;yBACnE;wBAAC,WAAM;4BACN,qCAAqC;yBACtC;qBACF;iBACF;YACH,CAAC,EACA,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,CAAC,CAAC;YACL,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAED,WAAW,CAAC,MAAoB;QAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;YACpB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SACrF;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;YACpB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SACrF;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SACvF;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,yBAAY,IAAI,CAAC,eAAe,EAAG;IACrC,CAAC;CACF;AApPD,sDAoPC"}
@@ -1,4 +1,4 @@
1
- import { LDContext, LDFlagValue } from '@launchdarkly/js-server-sdk-common';
1
+ import { LDContext, LDFlagValue, LDLogger } from '@launchdarkly/js-server-sdk-common';
2
2
  /**
3
3
  * Interface which represents the required interface components for a sever SDK
4
4
  * to work with the AI SDK.
@@ -6,5 +6,6 @@ import { LDContext, LDFlagValue } from '@launchdarkly/js-server-sdk-common';
6
6
  export interface LDClientMin {
7
7
  variation(key: string, context: LDContext, defaultValue: LDFlagValue, callback?: (err: any, res: LDFlagValue) => void): Promise<LDFlagValue>;
8
8
  track(key: string, context: LDContext, data?: any, metricValue?: number): void;
9
+ readonly logger?: LDLogger;
9
10
  }
10
11
  //# sourceMappingURL=LDClientMin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LDClientMin.d.ts","sourceRoot":"","sources":["../src/LDClientMin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CACP,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,WAAW,EACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,GAC9C,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChF"}
1
+ {"version":3,"file":"LDClientMin.d.ts","sourceRoot":"","sources":["../src/LDClientMin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CACP,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,WAAW,EACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,GAC9C,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/E,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;CAC5B"}
@@ -1,6 +1,8 @@
1
1
  import { LDContext } from '@launchdarkly/js-server-sdk-common';
2
2
  import { LDAIAgent, LDAIAgentConfig, LDAIAgentDefaults } from './agents';
3
+ import { TrackedChat } from './chat';
3
4
  import { LDAIConfig, LDAIDefaults } from './config/LDAIConfig';
5
+ import { SupportedAIProvider } from './providers';
4
6
  /**
5
7
  * Interface for performing AI operations using LaunchDarkly.
6
8
  */
@@ -126,5 +128,42 @@ export interface LDAIClient {
126
128
  * ```
127
129
  */
128
130
  agents<const T extends readonly LDAIAgentConfig[]>(agentConfigs: T, context: LDContext): Promise<Record<T[number]['key'], LDAIAgent>>;
131
+ /**
132
+ * Initializes and returns a new TrackedChat instance for chat interactions.
133
+ * This method serves as the primary entry point for creating TrackedChat instances from configuration.
134
+ *
135
+ * @param key The key identifying the AI chat configuration to use.
136
+ * @param context The standard LDContext used when evaluating flags.
137
+ * @param defaultValue A default value representing a standard AI chat config result.
138
+ * @param variables Dictionary of values for instruction interpolation.
139
+ * @returns A promise that resolves to the TrackedChat instance, or null if the configuration is disabled.
140
+ *
141
+ * @example
142
+ * ```
143
+ * const key = "customer_support_chat";
144
+ * const context = {...};
145
+ * const defaultValue = {
146
+ * config: {
147
+ * enabled: false,
148
+ * model: { name: "gpt-4" },
149
+ * messages: [
150
+ * { role: "system", content: "You are a helpful customer support agent." }
151
+ * ]
152
+ * }
153
+ * };
154
+ * const variables = { customerName: 'John' };
155
+ *
156
+ * const chat = await client.initChat(key, context, defaultValue, variables);
157
+ * if (chat) {
158
+ * const response = await chat.invoke("I need help with my order");
159
+ * console.log(response.message.content);
160
+ *
161
+ * // Access configuration and tracker if needed
162
+ * console.log('Model:', chat.getConfig().model?.name);
163
+ * chat.getTracker().trackSuccess();
164
+ * }
165
+ * ```
166
+ */
167
+ initChat(key: string, context: LDContext, defaultValue: LDAIDefaults, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<TrackedChat | undefined>;
129
168
  }
130
169
  //# sourceMappingURL=LDAIClient.d.ts.map