@launchdarkly/server-sdk-ai 0.14.1 → 0.15.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.
- package/CHANGELOG.md +22 -0
- package/dist/index.cjs +1117 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1022 -0
- package/dist/index.d.ts +1022 -0
- package/dist/index.js +1071 -0
- package/dist/index.js.map +1 -0
- package/package.json +23 -6
- package/__tests__/Judge.test.ts +0 -521
- package/__tests__/LDAIClientImpl.test.ts +0 -594
- package/__tests__/LDAIConfigTrackerImpl.test.ts +0 -815
- package/__tests__/TokenUsage.test.ts +0 -119
- package/__tests__/TrackedChat.test.ts +0 -231
- package/dist/package.json +0 -53
- package/dist/src/LDAIClientImpl.d.ts +0 -39
- package/dist/src/LDAIClientImpl.d.ts.map +0 -1
- package/dist/src/LDAIClientImpl.js +0 -164
- package/dist/src/LDAIClientImpl.js.map +0 -1
- package/dist/src/LDAIConfigTrackerImpl.d.ts +0 -74
- package/dist/src/LDAIConfigTrackerImpl.d.ts.map +0 -1
- package/dist/src/LDAIConfigTrackerImpl.js +0 -207
- package/dist/src/LDAIConfigTrackerImpl.js.map +0 -1
- package/dist/src/LDClientMin.d.ts +0 -11
- package/dist/src/LDClientMin.d.ts.map +0 -1
- package/dist/src/LDClientMin.js +0 -3
- package/dist/src/LDClientMin.js.map +0 -1
- package/dist/src/api/LDAIClient.d.ts +0 -258
- package/dist/src/api/LDAIClient.d.ts.map +0 -1
- package/dist/src/api/LDAIClient.js +0 -3
- package/dist/src/api/LDAIClient.js.map +0 -1
- package/dist/src/api/chat/TrackedChat.d.ts +0 -72
- package/dist/src/api/chat/TrackedChat.d.ts.map +0 -1
- package/dist/src/api/chat/TrackedChat.js +0 -125
- package/dist/src/api/chat/TrackedChat.js.map +0 -1
- package/dist/src/api/chat/index.d.ts +0 -3
- package/dist/src/api/chat/index.d.ts.map +0 -1
- package/dist/src/api/chat/index.js +0 -19
- package/dist/src/api/chat/index.js.map +0 -1
- package/dist/src/api/chat/types.d.ts +0 -22
- package/dist/src/api/chat/types.d.ts.map +0 -1
- package/dist/src/api/chat/types.js +0 -3
- package/dist/src/api/chat/types.js.map +0 -1
- package/dist/src/api/config/LDAIConfigTracker.d.ts +0 -209
- package/dist/src/api/config/LDAIConfigTracker.d.ts.map +0 -1
- package/dist/src/api/config/LDAIConfigTracker.js +0 -3
- package/dist/src/api/config/LDAIConfigTracker.js.map +0 -1
- package/dist/src/api/config/LDAIConfigUtils.d.ts +0 -2
- package/dist/src/api/config/LDAIConfigUtils.d.ts.map +0 -1
- package/dist/src/api/config/LDAIConfigUtils.js +0 -145
- package/dist/src/api/config/LDAIConfigUtils.js.map +0 -1
- package/dist/src/api/config/index.d.ts +0 -3
- package/dist/src/api/config/index.d.ts.map +0 -1
- package/dist/src/api/config/index.js +0 -18
- package/dist/src/api/config/index.js.map +0 -1
- package/dist/src/api/config/types.d.ts +0 -206
- package/dist/src/api/config/types.d.ts.map +0 -1
- package/dist/src/api/config/types.js +0 -3
- package/dist/src/api/config/types.js.map +0 -1
- package/dist/src/api/index.d.ts +0 -7
- package/dist/src/api/index.d.ts.map +0 -1
- package/dist/src/api/index.js +0 -23
- package/dist/src/api/index.js.map +0 -1
- package/dist/src/api/judge/EvaluationSchemaBuilder.d.ts +0 -11
- package/dist/src/api/judge/EvaluationSchemaBuilder.d.ts.map +0 -1
- package/dist/src/api/judge/EvaluationSchemaBuilder.js +0 -52
- package/dist/src/api/judge/EvaluationSchemaBuilder.js.map +0 -1
- package/dist/src/api/judge/Judge.d.ts +0 -63
- package/dist/src/api/judge/Judge.d.ts.map +0 -1
- package/dist/src/api/judge/Judge.js +0 -151
- package/dist/src/api/judge/Judge.js.map +0 -1
- package/dist/src/api/judge/index.d.ts +0 -3
- package/dist/src/api/judge/index.d.ts.map +0 -1
- package/dist/src/api/judge/index.js +0 -6
- package/dist/src/api/judge/index.js.map +0 -1
- package/dist/src/api/judge/types.d.ts +0 -37
- package/dist/src/api/judge/types.d.ts.map +0 -1
- package/dist/src/api/judge/types.js +0 -3
- package/dist/src/api/judge/types.js.map +0 -1
- package/dist/src/api/metrics/BedrockTokenUsage.d.ts +0 -7
- package/dist/src/api/metrics/BedrockTokenUsage.d.ts.map +0 -1
- package/dist/src/api/metrics/BedrockTokenUsage.js +0 -12
- package/dist/src/api/metrics/BedrockTokenUsage.js.map +0 -1
- package/dist/src/api/metrics/LDAIMetrics.d.ts +0 -17
- package/dist/src/api/metrics/LDAIMetrics.d.ts.map +0 -1
- package/dist/src/api/metrics/LDAIMetrics.js +0 -3
- package/dist/src/api/metrics/LDAIMetrics.js.map +0 -1
- package/dist/src/api/metrics/LDFeedbackKind.d.ts +0 -14
- package/dist/src/api/metrics/LDFeedbackKind.d.ts.map +0 -1
- package/dist/src/api/metrics/LDFeedbackKind.js +0 -18
- package/dist/src/api/metrics/LDFeedbackKind.js.map +0 -1
- package/dist/src/api/metrics/LDTokenUsage.d.ts +0 -18
- package/dist/src/api/metrics/LDTokenUsage.d.ts.map +0 -1
- package/dist/src/api/metrics/LDTokenUsage.js +0 -3
- package/dist/src/api/metrics/LDTokenUsage.js.map +0 -1
- package/dist/src/api/metrics/OpenAiUsage.d.ts +0 -7
- package/dist/src/api/metrics/OpenAiUsage.d.ts.map +0 -1
- package/dist/src/api/metrics/OpenAiUsage.js +0 -13
- package/dist/src/api/metrics/OpenAiUsage.js.map +0 -1
- package/dist/src/api/metrics/VercelAISDKTokenUsage.d.ts +0 -9
- package/dist/src/api/metrics/VercelAISDKTokenUsage.d.ts.map +0 -1
- package/dist/src/api/metrics/VercelAISDKTokenUsage.js +0 -13
- package/dist/src/api/metrics/VercelAISDKTokenUsage.js.map +0 -1
- package/dist/src/api/metrics/index.d.ts +0 -7
- package/dist/src/api/metrics/index.d.ts.map +0 -1
- package/dist/src/api/metrics/index.js +0 -23
- package/dist/src/api/metrics/index.js.map +0 -1
- package/dist/src/api/providers/AIProvider.d.ts +0 -52
- package/dist/src/api/providers/AIProvider.d.ts.map +0 -1
- package/dist/src/api/providers/AIProvider.js +0 -88
- package/dist/src/api/providers/AIProvider.js.map +0 -1
- package/dist/src/api/providers/AIProviderFactory.d.ts +0 -39
- package/dist/src/api/providers/AIProviderFactory.d.ts.map +0 -1
- package/dist/src/api/providers/AIProviderFactory.js +0 -102
- package/dist/src/api/providers/AIProviderFactory.js.map +0 -1
- package/dist/src/api/providers/index.d.ts +0 -3
- package/dist/src/api/providers/index.d.ts.map +0 -1
- package/dist/src/api/providers/index.js +0 -19
- package/dist/src/api/providers/index.js.map +0 -1
- package/dist/src/index.d.ts +0 -19
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -29
- package/dist/src/index.js.map +0 -1
- package/docs/.nojekyll +0 -1
- package/docs/assets/highlight.css +0 -92
- package/docs/assets/main.js +0 -58
- package/docs/assets/search.js +0 -1
- package/docs/assets/style.css +0 -1379
- package/docs/classes/AIProvider.html +0 -210
- package/docs/classes/AIProviderFactory.html +0 -208
- package/docs/classes/Judge.html +0 -322
- package/docs/classes/TrackedChat.html +0 -322
- package/docs/enums/LDFeedbackKind.html +0 -115
- package/docs/functions/createBedrockTokenUsage.html +0 -94
- package/docs/functions/createOpenAiUsage.html +0 -94
- package/docs/functions/createVercelAISDKTokenUsage.html +0 -98
- package/docs/functions/initAi.html +0 -93
- package/docs/index.html +0 -136
- package/docs/interfaces/ChatResponse.html +0 -130
- package/docs/interfaces/EvalScore.html +0 -119
- package/docs/interfaces/JudgeResponse.html +0 -139
- package/docs/interfaces/LDAIAgentConfig.html +0 -178
- package/docs/interfaces/LDAIAgentConfigDefault.html +0 -155
- package/docs/interfaces/LDAIAgentRequestConfig.html +0 -129
- package/docs/interfaces/LDAIClient.html +0 -449
- package/docs/interfaces/LDAICompletionConfig.html +0 -178
- package/docs/interfaces/LDAICompletionConfigDefault.html +0 -155
- package/docs/interfaces/LDAIConfig.html +0 -158
- package/docs/interfaces/LDAIConfigDefault.html +0 -133
- package/docs/interfaces/LDAIConfigTracker.html +0 -530
- package/docs/interfaces/LDAIJudgeConfig.html +0 -178
- package/docs/interfaces/LDAIJudgeConfigDefault.html +0 -155
- package/docs/interfaces/LDAIMetrics.html +0 -121
- package/docs/interfaces/LDJudge.html +0 -119
- package/docs/interfaces/LDJudgeConfiguration.html +0 -109
- package/docs/interfaces/LDLogger.html +0 -189
- package/docs/interfaces/LDMessage.html +0 -119
- package/docs/interfaces/LDModelConfig.html +0 -139
- package/docs/interfaces/LDProviderConfig.html +0 -105
- package/docs/interfaces/LDTokenUsage.html +0 -129
- package/docs/interfaces/StructuredResponse.html +0 -129
- package/docs/types/LDAIConfigDefaultKind.html +0 -81
- package/docs/types/LDAIConfigKind.html +0 -81
- package/docs/types/LDAIConfigMode.html +0 -81
- package/docs/types/SupportedAIProvider.html +0 -81
- package/docs/variables/SUPPORTED_AI_PROVIDERS.html +0 -81
- package/jest.config.js +0 -7
- package/src/LDAIClientImpl.ts +0 -327
- package/src/LDAIConfigTrackerImpl.ts +0 -288
- package/src/LDClientMin.ts +0 -18
- package/src/api/LDAIClient.ts +0 -325
- package/src/api/chat/TrackedChat.ts +0 -163
- package/src/api/chat/index.ts +0 -2
- package/src/api/chat/types.ts +0 -24
- package/src/api/config/LDAIConfigTracker.ts +0 -238
- package/src/api/config/LDAIConfigUtils.ts +0 -212
- package/src/api/config/index.ts +0 -3
- package/src/api/config/types.ts +0 -260
- package/src/api/index.ts +0 -6
- package/src/api/judge/EvaluationSchemaBuilder.ts +0 -54
- package/src/api/judge/Judge.ts +0 -218
- package/src/api/judge/index.ts +0 -2
- package/src/api/judge/types.ts +0 -41
- package/src/api/metrics/BedrockTokenUsage.ts +0 -13
- package/src/api/metrics/LDAIMetrics.ts +0 -18
- package/src/api/metrics/LDFeedbackKind.ts +0 -13
- package/src/api/metrics/LDTokenUsage.ts +0 -19
- package/src/api/metrics/OpenAiUsage.ts +0 -13
- package/src/api/metrics/VercelAISDKTokenUsage.ts +0 -15
- package/src/api/metrics/index.ts +0 -6
- package/src/api/providers/AIProvider.ts +0 -94
- package/src/api/providers/AIProviderFactory.ts +0 -152
- package/src/api/providers/index.ts +0 -2
- package/src/index.ts +0 -24
- package/tsconfig.eslint.json +0 -5
- package/tsconfig.json +0 -21
- package/tsconfig.ref.json +0 -7
- package/typedoc.json +0 -5
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createBedrockTokenUsage,
|
|
3
|
-
createOpenAiUsage,
|
|
4
|
-
createVercelAISDKTokenUsage,
|
|
5
|
-
} from '../src/api/metrics';
|
|
6
|
-
|
|
7
|
-
it('createBedrockTokenUsage should create token usage with all values provided', () => {
|
|
8
|
-
const usage = createBedrockTokenUsage({
|
|
9
|
-
totalTokens: 100,
|
|
10
|
-
inputTokens: 40,
|
|
11
|
-
outputTokens: 60,
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
expect(usage).toEqual({
|
|
15
|
-
total: 100,
|
|
16
|
-
input: 40,
|
|
17
|
-
output: 60,
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('createBedrockTokenUsage should default to 0 for missing values', () => {
|
|
22
|
-
const usage = createBedrockTokenUsage({});
|
|
23
|
-
|
|
24
|
-
expect(usage).toEqual({
|
|
25
|
-
total: 0,
|
|
26
|
-
input: 0,
|
|
27
|
-
output: 0,
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('createBedrockTokenUsage should handle explicitly undefined values', () => {
|
|
32
|
-
const usage = createBedrockTokenUsage({
|
|
33
|
-
totalTokens: undefined,
|
|
34
|
-
inputTokens: 40,
|
|
35
|
-
outputTokens: undefined,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
expect(usage).toEqual({
|
|
39
|
-
total: 0,
|
|
40
|
-
input: 40,
|
|
41
|
-
output: 0,
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('createOpenAiUsage should create token usage with all values provided', () => {
|
|
46
|
-
const usage = createOpenAiUsage({
|
|
47
|
-
total_tokens: 100,
|
|
48
|
-
prompt_tokens: 40,
|
|
49
|
-
completion_tokens: 60,
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
expect(usage).toEqual({
|
|
53
|
-
total: 100,
|
|
54
|
-
input: 40,
|
|
55
|
-
output: 60,
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('createOpenAiUsage should default to 0 for missing values', () => {
|
|
60
|
-
const usage = createOpenAiUsage({});
|
|
61
|
-
|
|
62
|
-
expect(usage).toEqual({
|
|
63
|
-
total: 0,
|
|
64
|
-
input: 0,
|
|
65
|
-
output: 0,
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('createOpenAiUsage should handle explicitly undefined values', () => {
|
|
70
|
-
const usage = createOpenAiUsage({
|
|
71
|
-
total_tokens: undefined,
|
|
72
|
-
prompt_tokens: 40,
|
|
73
|
-
completion_tokens: undefined,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
expect(usage).toEqual({
|
|
77
|
-
total: 0,
|
|
78
|
-
input: 40,
|
|
79
|
-
output: 0,
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('createVercelAISDKTokenUsage should create token usage with all values provided', () => {
|
|
84
|
-
const usage = createVercelAISDKTokenUsage({
|
|
85
|
-
totalTokens: 100,
|
|
86
|
-
promptTokens: 40,
|
|
87
|
-
completionTokens: 60,
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
expect(usage).toEqual({
|
|
91
|
-
total: 100,
|
|
92
|
-
input: 40,
|
|
93
|
-
output: 60,
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('createVercelAISDKTokenUsage should default to 0 for missing values', () => {
|
|
98
|
-
const usage = createVercelAISDKTokenUsage({});
|
|
99
|
-
|
|
100
|
-
expect(usage).toEqual({
|
|
101
|
-
total: 0,
|
|
102
|
-
input: 0,
|
|
103
|
-
output: 0,
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it('createVercelAISDKTokenUsage should handle explicitly undefined values', () => {
|
|
108
|
-
const usage = createVercelAISDKTokenUsage({
|
|
109
|
-
totalTokens: undefined,
|
|
110
|
-
promptTokens: 40,
|
|
111
|
-
completionTokens: undefined,
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
expect(usage).toEqual({
|
|
115
|
-
total: 0,
|
|
116
|
-
input: 40,
|
|
117
|
-
output: 0,
|
|
118
|
-
});
|
|
119
|
-
});
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import { TrackedChat } from '../src/api/chat/TrackedChat';
|
|
2
|
-
import { ChatResponse } from '../src/api/chat/types';
|
|
3
|
-
import { LDAIConfigTracker } from '../src/api/config/LDAIConfigTracker';
|
|
4
|
-
import { LDAICompletionConfig, LDMessage } from '../src/api/config/types';
|
|
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: LDAICompletionConfig;
|
|
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
|
-
key: 'test-config',
|
|
37
|
-
enabled: true,
|
|
38
|
-
messages: [{ role: 'system', content: 'You are a helpful assistant.' }],
|
|
39
|
-
model: { name: 'gpt-4' },
|
|
40
|
-
provider: { name: 'openai' },
|
|
41
|
-
tracker: mockTracker,
|
|
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: LDAICompletionConfig = {
|
|
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: LDAICompletionConfig = {
|
|
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
|
-
});
|
package/dist/package.json
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@launchdarkly/server-sdk-ai",
|
|
3
|
-
"version": "0.14.1",
|
|
4
|
-
"description": "LaunchDarkly AI SDK for Server-Side JavaScript",
|
|
5
|
-
"homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/sdk/server-ai",
|
|
6
|
-
"repository": {
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "https://github.com/launchdarkly/js-core.git"
|
|
9
|
-
},
|
|
10
|
-
"main": "dist/src/index.js",
|
|
11
|
-
"types": "dist/src/index.d.ts",
|
|
12
|
-
"type": "commonjs",
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "npx tsc",
|
|
15
|
-
"lint": "npx eslint . --ext .ts",
|
|
16
|
-
"prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore",
|
|
17
|
-
"lint:fix": "yarn run lint --fix",
|
|
18
|
-
"check": "yarn prettier && yarn lint && yarn build && yarn test",
|
|
19
|
-
"test": "jest"
|
|
20
|
-
},
|
|
21
|
-
"keywords": [
|
|
22
|
-
"launchdarkly",
|
|
23
|
-
"ai",
|
|
24
|
-
"llm"
|
|
25
|
-
],
|
|
26
|
-
"author": "LaunchDarkly",
|
|
27
|
-
"license": "Apache-2.0",
|
|
28
|
-
"dependencies": {
|
|
29
|
-
"mustache": "^4.2.0"
|
|
30
|
-
},
|
|
31
|
-
"devDependencies": {
|
|
32
|
-
"@launchdarkly/js-server-sdk-common": "2.16.2",
|
|
33
|
-
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
|
|
34
|
-
"@types/jest": "^29.5.3",
|
|
35
|
-
"@types/mustache": "^4.2.5",
|
|
36
|
-
"@typescript-eslint/eslint-plugin": "^6.20.0",
|
|
37
|
-
"@typescript-eslint/parser": "^6.20.0",
|
|
38
|
-
"eslint": "^8.45.0",
|
|
39
|
-
"eslint-config-airbnb-base": "^15.0.0",
|
|
40
|
-
"eslint-config-airbnb-typescript": "^17.1.0",
|
|
41
|
-
"eslint-config-prettier": "^8.8.0",
|
|
42
|
-
"eslint-plugin-import": "^2.27.5",
|
|
43
|
-
"eslint-plugin-jest": "^27.6.3",
|
|
44
|
-
"eslint-plugin-prettier": "^5.0.0",
|
|
45
|
-
"jest": "^29.6.1",
|
|
46
|
-
"prettier": "^3.0.0",
|
|
47
|
-
"ts-jest": "^29.1.1",
|
|
48
|
-
"typescript": "5.1.6"
|
|
49
|
-
},
|
|
50
|
-
"peerDependencies": {
|
|
51
|
-
"@launchdarkly/js-server-sdk-common": "2.x"
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { LDContext } from '@launchdarkly/js-server-sdk-common';
|
|
2
|
-
import { TrackedChat } from './api/chat';
|
|
3
|
-
import { LDAIAgentConfig, LDAIAgentConfigDefault, LDAIAgentRequestConfig, LDAICompletionConfig, LDAICompletionConfigDefault, LDAIJudgeConfig, LDAIJudgeConfigDefault } from './api/config';
|
|
4
|
-
import { Judge } from './api/judge/Judge';
|
|
5
|
-
import { LDAIClient } from './api/LDAIClient';
|
|
6
|
-
import { SupportedAIProvider } from './api/providers';
|
|
7
|
-
import { LDClientMin } from './LDClientMin';
|
|
8
|
-
export declare class LDAIClientImpl implements LDAIClient {
|
|
9
|
-
private _ldClient;
|
|
10
|
-
private _logger?;
|
|
11
|
-
constructor(_ldClient: LDClientMin);
|
|
12
|
-
private _interpolateTemplate;
|
|
13
|
-
private _evaluate;
|
|
14
|
-
private _applyInterpolation;
|
|
15
|
-
private _initializeJudges;
|
|
16
|
-
completionConfig(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>): Promise<LDAICompletionConfig>;
|
|
17
|
-
/**
|
|
18
|
-
* @deprecated Use `completionConfig` instead. This method will be removed in a future version.
|
|
19
|
-
*/
|
|
20
|
-
config(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>): Promise<LDAICompletionConfig>;
|
|
21
|
-
judgeConfig(key: string, context: LDContext, defaultValue: LDAIJudgeConfigDefault, variables?: Record<string, unknown>): Promise<LDAIJudgeConfig>;
|
|
22
|
-
agentConfig(key: string, context: LDContext, defaultValue: LDAIAgentConfigDefault, variables?: Record<string, unknown>): Promise<LDAIAgentConfig>;
|
|
23
|
-
/**
|
|
24
|
-
* @deprecated Use `agentConfig` instead. This method will be removed in a future version.
|
|
25
|
-
*/
|
|
26
|
-
agent(key: string, context: LDContext, defaultValue: LDAIAgentConfigDefault, variables?: Record<string, unknown>): Promise<LDAIAgentConfig>;
|
|
27
|
-
agentConfigs<const T extends readonly LDAIAgentRequestConfig[]>(agentConfigs: T, context: LDContext): Promise<Record<T[number]['key'], LDAIAgentConfig>>;
|
|
28
|
-
/**
|
|
29
|
-
* @deprecated Use `agentConfigs` instead. This method will be removed in a future version.
|
|
30
|
-
*/
|
|
31
|
-
agents<const T extends readonly LDAIAgentRequestConfig[]>(agentConfigs: T, context: LDContext): Promise<Record<T[number]['key'], LDAIAgentConfig>>;
|
|
32
|
-
createChat(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<TrackedChat | undefined>;
|
|
33
|
-
createJudge(key: string, context: LDContext, defaultValue: LDAIJudgeConfigDefault, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<Judge | undefined>;
|
|
34
|
-
/**
|
|
35
|
-
* @deprecated Use `createChat` instead. This method will be removed in a future version.
|
|
36
|
-
*/
|
|
37
|
-
initChat(key: string, context: LDContext, defaultValue: LDAICompletionConfigDefault, variables?: Record<string, unknown>, defaultAiProvider?: SupportedAIProvider): Promise<TrackedChat | undefined>;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=LDAIClientImpl.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LDAIClientImpl.d.ts","sourceRoot":"","sources":["../../src/LDAIClientImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LDAIClientImpl = void 0;
|
|
4
|
-
const Mustache = require("mustache");
|
|
5
|
-
const chat_1 = require("./api/chat");
|
|
6
|
-
const LDAIConfigUtils_1 = require("./api/config/LDAIConfigUtils");
|
|
7
|
-
const Judge_1 = require("./api/judge/Judge");
|
|
8
|
-
const providers_1 = require("./api/providers");
|
|
9
|
-
const LDAIConfigTrackerImpl_1 = require("./LDAIConfigTrackerImpl");
|
|
10
|
-
/**
|
|
11
|
-
* Tracking event keys for AI SDK usage metrics.
|
|
12
|
-
*/
|
|
13
|
-
const TRACK_CONFIG_SINGLE = '$ld:ai:config:function:single';
|
|
14
|
-
const TRACK_CONFIG_CREATE_CHAT = '$ld:ai:config:function:createChat';
|
|
15
|
-
const TRACK_JUDGE_SINGLE = '$ld:ai:judge:function:single';
|
|
16
|
-
const TRACK_JUDGE_CREATE = '$ld:ai:judge:function:createJudge';
|
|
17
|
-
const TRACK_AGENT_SINGLE = '$ld:ai:agent:function:single';
|
|
18
|
-
const TRACK_AGENT_MULTIPLE = '$ld:ai:agent:function:multiple';
|
|
19
|
-
class LDAIClientImpl {
|
|
20
|
-
constructor(_ldClient) {
|
|
21
|
-
this._ldClient = _ldClient;
|
|
22
|
-
this._logger = _ldClient.logger;
|
|
23
|
-
}
|
|
24
|
-
_interpolateTemplate(template, variables) {
|
|
25
|
-
return Mustache.render(template, variables, undefined, { escape: (item) => item });
|
|
26
|
-
}
|
|
27
|
-
async _evaluate(key, context, defaultValue, mode, variables) {
|
|
28
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
29
|
-
const ldFlagValue = LDAIConfigUtils_1.LDAIConfigUtils.toFlagValue(defaultValue, mode);
|
|
30
|
-
const value = await this._ldClient.variation(key, context, ldFlagValue);
|
|
31
|
-
// Validate mode match
|
|
32
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
33
|
-
const flagMode = (_b = (_a = value._ldMeta) === null || _a === void 0 ? void 0 : _a.mode) !== null && _b !== void 0 ? _b : 'completion';
|
|
34
|
-
if (flagMode !== mode) {
|
|
35
|
-
(_c = this._logger) === null || _c === void 0 ? void 0 : _c.warn(`AI Config mode mismatch for ${key}: expected ${mode}, got ${flagMode}. Returning disabled config.`);
|
|
36
|
-
return LDAIConfigUtils_1.LDAIConfigUtils.createDisabledConfig(key, mode);
|
|
37
|
-
}
|
|
38
|
-
const tracker = new LDAIConfigTrackerImpl_1.LDAIConfigTrackerImpl(this._ldClient, key,
|
|
39
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
40
|
-
(_e = (_d = value._ldMeta) === null || _d === void 0 ? void 0 : _d.variationKey) !== null && _e !== void 0 ? _e : '',
|
|
41
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
42
|
-
(_g = (_f = value._ldMeta) === null || _f === void 0 ? void 0 : _f.version) !== null && _g !== void 0 ? _g : 1, (_j = (_h = value.model) === null || _h === void 0 ? void 0 : _h.name) !== null && _j !== void 0 ? _j : '', (_l = (_k = value.provider) === null || _k === void 0 ? void 0 : _k.name) !== null && _l !== void 0 ? _l : '', context);
|
|
43
|
-
const config = LDAIConfigUtils_1.LDAIConfigUtils.fromFlagValue(key, value, tracker);
|
|
44
|
-
// Apply variable interpolation (always needed for ldctx)
|
|
45
|
-
return this._applyInterpolation(config, context, variables);
|
|
46
|
-
}
|
|
47
|
-
_applyInterpolation(config, context, variables) {
|
|
48
|
-
const allVariables = Object.assign(Object.assign({}, variables), { ldctx: context });
|
|
49
|
-
if ('messages' in config && config.messages) {
|
|
50
|
-
return Object.assign(Object.assign({}, config), { messages: config.messages.map((entry) => (Object.assign(Object.assign({}, entry), { content: this._interpolateTemplate(entry.content, allVariables) }))) });
|
|
51
|
-
}
|
|
52
|
-
if ('instructions' in config && config.instructions) {
|
|
53
|
-
return Object.assign(Object.assign({}, config), { instructions: this._interpolateTemplate(config.instructions, allVariables) });
|
|
54
|
-
}
|
|
55
|
-
return config;
|
|
56
|
-
}
|
|
57
|
-
async _initializeJudges(judgeConfigs, context, variables, defaultAiProvider) {
|
|
58
|
-
const judges = {};
|
|
59
|
-
const judgePromises = judgeConfigs.map(async (judgeConfig) => {
|
|
60
|
-
const judge = await this.createJudge(judgeConfig.key, context, { enabled: false }, variables, defaultAiProvider);
|
|
61
|
-
return judge ? { key: judgeConfig.key, judge } : null;
|
|
62
|
-
});
|
|
63
|
-
const results = await Promise.all(judgePromises);
|
|
64
|
-
results.forEach((result) => {
|
|
65
|
-
if (result) {
|
|
66
|
-
judges[result.key] = result.judge;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return judges;
|
|
70
|
-
}
|
|
71
|
-
async completionConfig(key, context, defaultValue, variables) {
|
|
72
|
-
this._ldClient.track(TRACK_CONFIG_SINGLE, context, key, 1);
|
|
73
|
-
const config = await this._evaluate(key, context, defaultValue, 'completion', variables);
|
|
74
|
-
return config;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* @deprecated Use `completionConfig` instead. This method will be removed in a future version.
|
|
78
|
-
*/
|
|
79
|
-
async config(key, context, defaultValue, variables) {
|
|
80
|
-
return this.completionConfig(key, context, defaultValue, variables);
|
|
81
|
-
}
|
|
82
|
-
async judgeConfig(key, context, defaultValue, variables) {
|
|
83
|
-
this._ldClient.track(TRACK_JUDGE_SINGLE, context, key, 1);
|
|
84
|
-
const config = await this._evaluate(key, context, defaultValue, 'judge', variables);
|
|
85
|
-
return config;
|
|
86
|
-
}
|
|
87
|
-
async agentConfig(key, context, defaultValue, variables) {
|
|
88
|
-
this._ldClient.track(TRACK_AGENT_SINGLE, context, key, 1);
|
|
89
|
-
const config = await this._evaluate(key, context, defaultValue, 'agent', variables);
|
|
90
|
-
return config;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* @deprecated Use `agentConfig` instead. This method will be removed in a future version.
|
|
94
|
-
*/
|
|
95
|
-
async agent(key, context, defaultValue, variables) {
|
|
96
|
-
return this.agentConfig(key, context, defaultValue, variables);
|
|
97
|
-
}
|
|
98
|
-
async agentConfigs(agentConfigs, context) {
|
|
99
|
-
this._ldClient.track(TRACK_AGENT_MULTIPLE, context, agentConfigs.length, agentConfigs.length);
|
|
100
|
-
const agents = {};
|
|
101
|
-
await Promise.all(agentConfigs.map(async (config) => {
|
|
102
|
-
const agent = await this._evaluate(config.key, context, config.defaultValue, 'agent', config.variables);
|
|
103
|
-
agents[config.key] = agent;
|
|
104
|
-
}));
|
|
105
|
-
return agents;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* @deprecated Use `agentConfigs` instead. This method will be removed in a future version.
|
|
109
|
-
*/
|
|
110
|
-
async agents(agentConfigs, context) {
|
|
111
|
-
return this.agentConfigs(agentConfigs, context);
|
|
112
|
-
}
|
|
113
|
-
async createChat(key, context, defaultValue, variables, defaultAiProvider) {
|
|
114
|
-
var _a, _b, _c;
|
|
115
|
-
this._ldClient.track(TRACK_CONFIG_CREATE_CHAT, context, key, 1);
|
|
116
|
-
const config = await this.completionConfig(key, context, defaultValue, variables);
|
|
117
|
-
if (!config.enabled || !config.tracker) {
|
|
118
|
-
(_a = this._logger) === null || _a === void 0 ? void 0 : _a.info(`Chat configuration is disabled: ${key}`);
|
|
119
|
-
return undefined;
|
|
120
|
-
}
|
|
121
|
-
const provider = await providers_1.AIProviderFactory.create(config, this._logger, defaultAiProvider);
|
|
122
|
-
if (!provider) {
|
|
123
|
-
return undefined;
|
|
124
|
-
}
|
|
125
|
-
const judges = await this._initializeJudges((_c = (_b = config.judgeConfiguration) === null || _b === void 0 ? void 0 : _b.judges) !== null && _c !== void 0 ? _c : [], context, variables, defaultAiProvider);
|
|
126
|
-
return new chat_1.TrackedChat(config, config.tracker, provider, judges, this._logger);
|
|
127
|
-
}
|
|
128
|
-
async createJudge(key, context, defaultValue, variables, defaultAiProvider) {
|
|
129
|
-
var _a, _b, _c, _d;
|
|
130
|
-
this._ldClient.track(TRACK_JUDGE_CREATE, context, key, 1);
|
|
131
|
-
try {
|
|
132
|
-
if ((variables === null || variables === void 0 ? void 0 : variables.message_history) !== undefined) {
|
|
133
|
-
(_a = this._logger) === null || _a === void 0 ? void 0 : _a.warn("The variable 'message_history' is reserved by the judge and will be ignored.");
|
|
134
|
-
}
|
|
135
|
-
if ((variables === null || variables === void 0 ? void 0 : variables.response_to_evaluate) !== undefined) {
|
|
136
|
-
(_b = this._logger) === null || _b === void 0 ? void 0 : _b.warn("The variable 'response_to_evaluate' is reserved by the judge and will be ignored.");
|
|
137
|
-
}
|
|
138
|
-
// Overwrite reserved variables to ensure they remain as placeholders for judge evaluation
|
|
139
|
-
const extendedVariables = Object.assign(Object.assign({}, variables), { message_history: '{{message_history}}', response_to_evaluate: '{{response_to_evaluate}}' });
|
|
140
|
-
const judgeConfig = await this.judgeConfig(key, context, defaultValue, extendedVariables);
|
|
141
|
-
if (!judgeConfig.enabled || !judgeConfig.tracker) {
|
|
142
|
-
(_c = this._logger) === null || _c === void 0 ? void 0 : _c.info(`Judge configuration is disabled: ${key}`);
|
|
143
|
-
return undefined;
|
|
144
|
-
}
|
|
145
|
-
const provider = await providers_1.AIProviderFactory.create(judgeConfig, this._logger, defaultAiProvider);
|
|
146
|
-
if (!provider) {
|
|
147
|
-
return undefined;
|
|
148
|
-
}
|
|
149
|
-
return new Judge_1.Judge(judgeConfig, judgeConfig.tracker, provider, this._logger);
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
(_d = this._logger) === null || _d === void 0 ? void 0 : _d.error(`Failed to initialize judge ${key}:`, error);
|
|
153
|
-
return undefined;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* @deprecated Use `createChat` instead. This method will be removed in a future version.
|
|
158
|
-
*/
|
|
159
|
-
async initChat(key, context, defaultValue, variables, defaultAiProvider) {
|
|
160
|
-
return this.createChat(key, context, defaultValue, variables, defaultAiProvider);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
exports.LDAIClientImpl = LDAIClientImpl;
|
|
164
|
-
//# sourceMappingURL=LDAIClientImpl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LDAIClientImpl.js","sourceRoot":"","sources":["../../src/LDAIClientImpl.ts"],"names":[],"mappings":"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"}
|