@laikatest/sdk 0.2.0 → 0.2.2
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/README.md +147 -31
- package/dist/index.d.ts +3 -1
- package/dist/index.js +7 -2
- package/dist/laika.js +6 -3
- package/dist/trace/agent.d.ts +29 -0
- package/dist/trace/agent.js +42 -0
- package/dist/trace/core.d.ts +8 -0
- package/dist/trace/core.js +21 -0
- package/dist/trace/evaluation.d.ts +7 -0
- package/dist/trace/evaluation.js +14 -0
- package/dist/trace/generation.d.ts +16 -0
- package/dist/trace/generation.js +23 -0
- package/dist/trace/index.d.ts +39 -0
- package/dist/trace/index.js +46 -0
- package/dist/trace/rag.d.ts +35 -0
- package/dist/trace/rag.js +51 -0
- package/dist/trace/types.d.ts +12 -0
- package/dist/trace/types.js +3 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,24 +4,15 @@ Unified LaikaTest SDK for tracing and A/B testing. Single initialization for bot
|
|
|
4
4
|
|
|
5
5
|
## Why This Package?
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
```typescript
|
|
9
|
-
import { initLaika } from '@laikatest/auto-otel';
|
|
10
|
-
import { LaikaTest } from '@laikatest/js-client';
|
|
11
|
-
|
|
12
|
-
initLaika({ apiKey: 'key', serviceName: 'app' }); // Tracing
|
|
13
|
-
const client = new LaikaTest('key'); // Same key again?
|
|
14
|
-
```
|
|
7
|
+
The SDK provides a single, unified initialization for both tracing and A/B testing. No need to manage separate packages or duplicate configuration - one init call enables everything you need.
|
|
15
8
|
|
|
16
|
-
**After** - single unified init:
|
|
17
9
|
```typescript
|
|
18
10
|
import { LaikaTest } from '@laikatest/sdk';
|
|
19
11
|
|
|
20
12
|
const laika = LaikaTest.init({
|
|
21
|
-
apiKey: 'key',
|
|
22
|
-
serviceName: 'app',
|
|
13
|
+
apiKey: 'your-api-key',
|
|
23
14
|
});
|
|
24
|
-
// Both tracing
|
|
15
|
+
// Both tracing and experiments enabled automatically
|
|
25
16
|
```
|
|
26
17
|
|
|
27
18
|
## Installation
|
|
@@ -35,10 +26,9 @@ npm install @laikatest/sdk
|
|
|
35
26
|
```typescript
|
|
36
27
|
import { LaikaTest, setSessionId } from '@laikatest/sdk';
|
|
37
28
|
|
|
38
|
-
// Initialize
|
|
29
|
+
// Initialize with just your API key - everything else is auto-detected
|
|
39
30
|
const laika = LaikaTest.init({
|
|
40
31
|
apiKey: process.env.LAIKA_API_KEY,
|
|
41
|
-
serviceName: 'my-app',
|
|
42
32
|
});
|
|
43
33
|
|
|
44
34
|
// Set context for multi-turn conversations
|
|
@@ -71,7 +61,9 @@ await laika.shutdown();
|
|
|
71
61
|
interface LaikaConfig {
|
|
72
62
|
// Required
|
|
73
63
|
apiKey: string; // Your LaikaTest API key
|
|
74
|
-
|
|
64
|
+
|
|
65
|
+
// Optional (smart defaults)
|
|
66
|
+
serviceName?: string; // Service name (auto-detected from package.json or directory name)
|
|
75
67
|
|
|
76
68
|
// Feature toggles (both default: true)
|
|
77
69
|
tracing?: boolean; // Enable OpenTelemetry tracing
|
|
@@ -97,6 +89,15 @@ interface LaikaConfig {
|
|
|
97
89
|
}
|
|
98
90
|
```
|
|
99
91
|
|
|
92
|
+
### Auto-Detection
|
|
93
|
+
|
|
94
|
+
The SDK automatically detects:
|
|
95
|
+
- **Service Name**: From `package.json` name field, or directory name as fallback
|
|
96
|
+
- **Environment**: From `NODE_ENV` environment variable (defaults to 'development')
|
|
97
|
+
- **Version**: From `package.json` version field
|
|
98
|
+
|
|
99
|
+
These are set as default properties and propagated to traces through the context system, making them available for filtering and analytics.
|
|
100
|
+
|
|
100
101
|
## Feature Toggles
|
|
101
102
|
|
|
102
103
|
Enable only what you need:
|
|
@@ -105,14 +106,12 @@ Enable only what you need:
|
|
|
105
106
|
// Tracing only (observability without experiments)
|
|
106
107
|
const laika = LaikaTest.init({
|
|
107
108
|
apiKey: 'key',
|
|
108
|
-
serviceName: 'app',
|
|
109
109
|
experiments: false,
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
// Experiments only (A/B testing without tracing)
|
|
113
113
|
const laika = LaikaTest.init({
|
|
114
114
|
apiKey: 'key',
|
|
115
|
-
serviceName: 'app',
|
|
116
115
|
tracing: false,
|
|
117
116
|
});
|
|
118
117
|
|
|
@@ -155,6 +154,136 @@ setProperties({
|
|
|
155
154
|
});
|
|
156
155
|
```
|
|
157
156
|
|
|
157
|
+
## AI-Native Tracing
|
|
158
|
+
|
|
159
|
+
The SDK provides semantic helpers for common AI workflows like RAG pipelines and agent systems. These helpers automatically create properly-named spans with semantic attributes.
|
|
160
|
+
|
|
161
|
+
### RAG Pipeline Example
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
import { trace } from '@laikatest/sdk';
|
|
165
|
+
|
|
166
|
+
const answer = await trace.rag('customer-qa', async () => {
|
|
167
|
+
// Step 1: Retrieve documents
|
|
168
|
+
const docs = await trace.retrieval('search', async () => {
|
|
169
|
+
return await vectorDB.search(query);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Step 2: Rerank for relevance
|
|
173
|
+
const reranked = await trace.rerank('scoring', async () => {
|
|
174
|
+
return await reranker.rerank(docs, query);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// Step 3: Generate answer
|
|
178
|
+
const answer = await trace.generation('answer', async () => {
|
|
179
|
+
return await llm.generate(reranked, query);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
return answer;
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Agent Workflow Example
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
import { trace } from '@laikatest/sdk';
|
|
190
|
+
|
|
191
|
+
await trace.agent('research-agent', async () => {
|
|
192
|
+
// Plan the next action
|
|
193
|
+
const plan = await trace.step('planning', async () => {
|
|
194
|
+
return await planNextAction(query);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
// Execute tool
|
|
198
|
+
const results = await trace.tool('web-search', async () => {
|
|
199
|
+
return await searchTool.run(plan.query);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Analyze results
|
|
203
|
+
return await trace.step('analysis', async () => {
|
|
204
|
+
return await analyzeResults(results);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Available Helpers
|
|
210
|
+
|
|
211
|
+
**RAG Workflow:**
|
|
212
|
+
```typescript
|
|
213
|
+
trace.rag(name, fn) // RAG pipeline wrapper
|
|
214
|
+
trace.retrieval(name, fn) // Document retrieval
|
|
215
|
+
trace.rerank(name, fn) // Document reranking
|
|
216
|
+
trace.embedding(name, fn) // Embedding generation
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Agent Workflow:**
|
|
220
|
+
```typescript
|
|
221
|
+
trace.agent(name, fn) // Agent wrapper
|
|
222
|
+
trace.tool(name, fn) // Tool execution
|
|
223
|
+
trace.step(name, fn) // Generic step
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**LLM Operations:**
|
|
227
|
+
```typescript
|
|
228
|
+
trace.generation(name, fn) // LLM generation
|
|
229
|
+
trace.evaluation(name, fn) // Evaluation
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Complete Example
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
import { trace } from '@laikatest/sdk';
|
|
236
|
+
|
|
237
|
+
// RAG Pipeline
|
|
238
|
+
const answer = await trace.rag('support-qa', async () => {
|
|
239
|
+
// Step 1: Retrieve documents
|
|
240
|
+
const docs = await trace.retrieval('knowledge-base', async () => {
|
|
241
|
+
return await vectorDB.query(userQuestion, { topK: 5 });
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
// Step 2: Rerank for relevance
|
|
245
|
+
const reranked = await trace.rerank('relevance', async () => {
|
|
246
|
+
return await reranker.rerank(docs, userQuestion);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// Step 3: Generate answer
|
|
250
|
+
const answer = await trace.generation('answer', async () => {
|
|
251
|
+
return await openai.chat.completions.create({
|
|
252
|
+
model: 'gpt-4',
|
|
253
|
+
messages: buildPrompt(reranked, userQuestion)
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
return answer;
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
// Agent Workflow
|
|
261
|
+
await trace.agent('research-agent', async () => {
|
|
262
|
+
const plan = await trace.step('planning', async () => {
|
|
263
|
+
return await planNextAction(query);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
const results = await trace.tool('web-search', async () => {
|
|
267
|
+
return await searchTool.run(plan.query);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
return await trace.step('analysis', async () => {
|
|
271
|
+
return await analyzeResults(results);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Span Naming
|
|
277
|
+
|
|
278
|
+
All helpers automatically create semantic span names:
|
|
279
|
+
- `trace.rag('customer-qa')` → Span: `rag.customer-qa`
|
|
280
|
+
- `trace.retrieval('search')` → Span: `retrieval.search`
|
|
281
|
+
- `trace.tool('web-search')` → Span: `tool.web-search`
|
|
282
|
+
|
|
283
|
+
Each span also includes:
|
|
284
|
+
- `laikatest.operation.type` - The operation type (rag, agent, tool, etc.)
|
|
285
|
+
- `laikatest.operation.name` - The user-provided name
|
|
286
|
+
|
|
158
287
|
## API Reference
|
|
159
288
|
|
|
160
289
|
### LaikaTest Class
|
|
@@ -250,20 +379,7 @@ app.use((req, res, next) => {
|
|
|
250
379
|
|
|
251
380
|
## Migration from Separate Packages
|
|
252
381
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
```typescript
|
|
256
|
-
import { initLaika, setSessionId } from '@laikatest/auto-otel';
|
|
257
|
-
import { LaikaTest } from '@laikatest/js-client';
|
|
258
|
-
|
|
259
|
-
initLaika({ apiKey: 'key', serviceName: 'app' });
|
|
260
|
-
const client = new LaikaTest('key');
|
|
261
|
-
|
|
262
|
-
setSessionId('conv-123');
|
|
263
|
-
const prompt = await client.getExperimentPrompt('exp', { userId: 'u1' });
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
### After (Unified SDK)
|
|
382
|
+
If you're currently using `@laikatest/auto-otel` and `@laikatest/js-client` separately, you can migrate to the unified SDK:
|
|
267
383
|
|
|
268
384
|
```typescript
|
|
269
385
|
import { LaikaTest, setSessionId } from '@laikatest/sdk';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { LaikaTest } from './laika';
|
|
2
2
|
export { LaikaConfig } from './types';
|
|
3
|
-
export { setSessionId, getSessionId, clearSessionId, setUserId, getUserId, clearUserId, runWithContext, runWithContextAsync, setProperty, setProperties, getProperties, clearProperties, removeProperty, runWithProperties, runWithPropertiesAsync, shutdown, } from '@laikatest/auto-otel';
|
|
3
|
+
export { setSessionId, getSessionId, clearSessionId, setUserId, getUserId, clearUserId, runWithContext, runWithContextAsync, setProperty, setProperties, getProperties, clearProperties, removeProperty, runWithProperties, runWithPropertiesAsync, shutdown, withSpan, withSpanSync, } from '@laikatest/auto-otel';
|
|
4
4
|
export { Prompt, LaikaServiceError, NetworkError, ValidationError, AuthenticationError, } from '@laikatest/js-client';
|
|
5
5
|
export type { PromptContent, ScoreInput, ScoreType, ScoreSource, PushScoreOptions, PushScoreResponse, ClientOptions, GetPromptOptions, } from '@laikatest/js-client';
|
|
6
|
+
export { trace } from './trace';
|
|
7
|
+
export type { TraceCallback, TraceSyncCallback, OperationType } from './trace';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AuthenticationError = exports.ValidationError = exports.NetworkError = exports.LaikaServiceError = exports.Prompt = exports.shutdown = exports.runWithPropertiesAsync = exports.runWithProperties = exports.removeProperty = exports.clearProperties = exports.getProperties = exports.setProperties = exports.setProperty = exports.runWithContextAsync = exports.runWithContext = exports.clearUserId = exports.getUserId = exports.setUserId = exports.clearSessionId = exports.getSessionId = exports.setSessionId = exports.LaikaTest = void 0;
|
|
3
|
+
exports.trace = exports.AuthenticationError = exports.ValidationError = exports.NetworkError = exports.LaikaServiceError = exports.Prompt = exports.withSpanSync = exports.withSpan = exports.shutdown = exports.runWithPropertiesAsync = exports.runWithProperties = exports.removeProperty = exports.clearProperties = exports.getProperties = exports.setProperties = exports.setProperty = exports.runWithContextAsync = exports.runWithContext = exports.clearUserId = exports.getUserId = exports.setUserId = exports.clearSessionId = exports.getSessionId = exports.setSessionId = exports.LaikaTest = void 0;
|
|
4
4
|
// Main class
|
|
5
5
|
var laika_1 = require("./laika");
|
|
6
6
|
Object.defineProperty(exports, "LaikaTest", { enumerable: true, get: function () { return laika_1.LaikaTest; } });
|
|
@@ -22,6 +22,8 @@ Object.defineProperty(exports, "removeProperty", { enumerable: true, get: functi
|
|
|
22
22
|
Object.defineProperty(exports, "runWithProperties", { enumerable: true, get: function () { return auto_otel_1.runWithProperties; } });
|
|
23
23
|
Object.defineProperty(exports, "runWithPropertiesAsync", { enumerable: true, get: function () { return auto_otel_1.runWithPropertiesAsync; } });
|
|
24
24
|
Object.defineProperty(exports, "shutdown", { enumerable: true, get: function () { return auto_otel_1.shutdown; } });
|
|
25
|
+
Object.defineProperty(exports, "withSpan", { enumerable: true, get: function () { return auto_otel_1.withSpan; } });
|
|
26
|
+
Object.defineProperty(exports, "withSpanSync", { enumerable: true, get: function () { return auto_otel_1.withSpanSync; } });
|
|
25
27
|
// Re-export from client for convenience
|
|
26
28
|
var js_client_1 = require("@laikatest/js-client");
|
|
27
29
|
Object.defineProperty(exports, "Prompt", { enumerable: true, get: function () { return js_client_1.Prompt; } });
|
|
@@ -29,4 +31,7 @@ Object.defineProperty(exports, "LaikaServiceError", { enumerable: true, get: fun
|
|
|
29
31
|
Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return js_client_1.NetworkError; } });
|
|
30
32
|
Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return js_client_1.ValidationError; } });
|
|
31
33
|
Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return js_client_1.AuthenticationError; } });
|
|
32
|
-
|
|
34
|
+
// AI-native tracing API
|
|
35
|
+
var trace_1 = require("./trace");
|
|
36
|
+
Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return trace_1.trace; } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsYUFBYTtBQUNiLGlDQUFvQztBQUEzQixrR0FBQSxTQUFTLE9BQUE7QUFHbEIsMkNBQTJDO0FBQzNDLGtEQW1COEI7QUFsQjVCLHlHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLFlBQVksT0FBQTtBQUNaLDJHQUFBLGNBQWMsT0FBQTtBQUNkLHNHQUFBLFNBQVMsT0FBQTtBQUNULHNHQUFBLFNBQVMsT0FBQTtBQUNULHdHQUFBLFdBQVcsT0FBQTtBQUNYLDJHQUFBLGNBQWMsT0FBQTtBQUNkLGdIQUFBLG1CQUFtQixPQUFBO0FBQ25CLHdHQUFBLFdBQVcsT0FBQTtBQUNYLDBHQUFBLGFBQWEsT0FBQTtBQUNiLDBHQUFBLGFBQWEsT0FBQTtBQUNiLDRHQUFBLGVBQWUsT0FBQTtBQUNmLDJHQUFBLGNBQWMsT0FBQTtBQUNkLDhHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLG1IQUFBLHNCQUFzQixPQUFBO0FBQ3RCLHFHQUFBLFFBQVEsT0FBQTtBQUNSLHFHQUFBLFFBQVEsT0FBQTtBQUNSLHlHQUFBLFlBQVksT0FBQTtBQUdkLHdDQUF3QztBQUN4QyxrREFNOEI7QUFMNUIsbUdBQUEsTUFBTSxPQUFBO0FBQ04sOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIseUdBQUEsWUFBWSxPQUFBO0FBQ1osNEdBQUEsZUFBZSxPQUFBO0FBQ2YsZ0hBQUEsbUJBQW1CLE9BQUE7QUFlckIsd0JBQXdCO0FBQ3hCLGlDQUFnQztBQUF2Qiw4RkFBQSxLQUFLLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBNYWluIGNsYXNzXG5leHBvcnQgeyBMYWlrYVRlc3QgfSBmcm9tICcuL2xhaWthJztcbmV4cG9ydCB7IExhaWthQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCBmcm9tIGF1dG8tb3RlbCBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIHNldFNlc3Npb25JZCxcbiAgZ2V0U2Vzc2lvbklkLFxuICBjbGVhclNlc3Npb25JZCxcbiAgc2V0VXNlcklkLFxuICBnZXRVc2VySWQsXG4gIGNsZWFyVXNlcklkLFxuICBydW5XaXRoQ29udGV4dCxcbiAgcnVuV2l0aENvbnRleHRBc3luYyxcbiAgc2V0UHJvcGVydHksXG4gIHNldFByb3BlcnRpZXMsXG4gIGdldFByb3BlcnRpZXMsXG4gIGNsZWFyUHJvcGVydGllcyxcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHJ1bldpdGhQcm9wZXJ0aWVzLFxuICBydW5XaXRoUHJvcGVydGllc0FzeW5jLFxuICBzaHV0ZG93bixcbiAgd2l0aFNwYW4sXG4gIHdpdGhTcGFuU3luYyxcbn0gZnJvbSAnQGxhaWthdGVzdC9hdXRvLW90ZWwnO1xuXG4vLyBSZS1leHBvcnQgZnJvbSBjbGllbnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQge1xuICBQcm9tcHQsXG4gIExhaWthU2VydmljZUVycm9yLFxuICBOZXR3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgQXV0aGVudGljYXRpb25FcnJvcixcbn0gZnJvbSAnQGxhaWthdGVzdC9qcy1jbGllbnQnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBjbGllbnRcbmV4cG9ydCB0eXBlIHtcbiAgUHJvbXB0Q29udGVudCxcbiAgU2NvcmVJbnB1dCxcbiAgU2NvcmVUeXBlLFxuICBTY29yZVNvdXJjZSxcbiAgUHVzaFNjb3JlT3B0aW9ucyxcbiAgUHVzaFNjb3JlUmVzcG9uc2UsXG4gIENsaWVudE9wdGlvbnMsXG4gIEdldFByb21wdE9wdGlvbnMsXG59IGZyb20gJ0BsYWlrYXRlc3QvanMtY2xpZW50JztcblxuLy8gQUktbmF0aXZlIHRyYWNpbmcgQVBJXG5leHBvcnQgeyB0cmFjZSB9IGZyb20gJy4vdHJhY2UnO1xuZXhwb3J0IHR5cGUgeyBUcmFjZUNhbGxiYWNrLCBUcmFjZVN5bmNDYWxsYmFjaywgT3BlcmF0aW9uVHlwZSB9IGZyb20gJy4vdHJhY2UnO1xuIl19
|
package/dist/laika.js
CHANGED
|
@@ -20,13 +20,16 @@ class LaikaTest {
|
|
|
20
20
|
*/
|
|
21
21
|
static init(config) {
|
|
22
22
|
const instance = new LaikaTest();
|
|
23
|
+
// Derive OTLP endpoint from baseUrl if not explicitly set
|
|
24
|
+
const baseUrl = config.baseUrl || 'https://api.laikatest.com';
|
|
25
|
+
const endpoint = config.endpoint || `${baseUrl}/otel/v1/traces`;
|
|
23
26
|
try {
|
|
24
27
|
// Initialize tracing (if enabled, default: true)
|
|
25
28
|
if (config.tracing !== false) {
|
|
26
29
|
(0, auto_otel_1.initLaikaTest)({
|
|
27
30
|
apiKey: config.apiKey,
|
|
28
31
|
serviceName: config.serviceName,
|
|
29
|
-
endpoint:
|
|
32
|
+
endpoint: endpoint,
|
|
30
33
|
captureContent: config.captureContent,
|
|
31
34
|
debug: config.debug,
|
|
32
35
|
sessionId: config.sessionId,
|
|
@@ -40,7 +43,7 @@ class LaikaTest {
|
|
|
40
43
|
// Initialize experiments client (if enabled, default: true)
|
|
41
44
|
if (config.experiments !== false) {
|
|
42
45
|
instance.client = new js_client_1.LaikaTest(config.apiKey, {
|
|
43
|
-
baseUrl:
|
|
46
|
+
baseUrl: baseUrl,
|
|
44
47
|
timeout: config.timeout,
|
|
45
48
|
cacheEnabled: config.cacheEnabled,
|
|
46
49
|
cacheTTL: config.cacheTTL,
|
|
@@ -124,4 +127,4 @@ class LaikaTest {
|
|
|
124
127
|
}
|
|
125
128
|
}
|
|
126
129
|
exports.LaikaTest = LaikaTest;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFpa2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGFpa2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQStEO0FBQy9ELG9EQUE4RjtBQUc5Rjs7O0dBR0c7QUFDSCxNQUFhLFNBQVM7SUFJcEI7UUFIUSxXQUFNLEdBQTJCLElBQUksQ0FBQztRQUN0QyxtQkFBYyxHQUFZLEtBQUssQ0FBQztJQUVqQixDQUFDO0lBRXhCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFtQjtRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBRWpDLDBEQUEwRDtRQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLDJCQUEyQixDQUFDO1FBQzlELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksR0FBRyxPQUFPLGlCQUFpQixDQUFDO1FBRWhFLElBQUksQ0FBQztZQUNILGlEQUFpRDtZQUNqRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzdCLElBQUEseUJBQWEsRUFBQztvQkFDWixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07b0JBQ3JCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztvQkFDL0IsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztvQkFDckMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQzNCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtvQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO29CQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQzNCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7aUJBQzVDLENBQUMsQ0FBQztnQkFDSCxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUNqQyxDQUFDO1lBRUQsNERBQTREO1lBQzVELElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLHFCQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDbkQsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO29CQUNqQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7aUJBQzFCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHFDQUFxQztZQUNyQyxJQUFJLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDNUIsSUFBQSxvQkFBUSxHQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUNiLFVBQWtCLEVBQ2xCLE9BQTBCO1FBRTFCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsU0FBUyxDQUFJLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLGVBQXVCLEVBQ3ZCLE9BQWlDO1FBRWpDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsbUJBQW1CLENBQUksZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxNQUFNLEdBQVksRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUEsb0JBQVEsR0FBRSxDQUFDO1lBQ25CLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBYyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQWMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFFRCx5Q0FBeUM7SUFDakMsWUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBeklELDhCQXlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluaXRMYWlrYVRlc3QsIHNodXRkb3duIH0gZnJvbSAnQGxhaWthdGVzdC9hdXRvLW90ZWwnO1xuaW1wb3J0IHsgTGFpa2FUZXN0IGFzIExhaWthVGVzdENsaWVudCwgUHJvbXB0LCBHZXRQcm9tcHRPcHRpb25zIH0gZnJvbSAnQGxhaWthdGVzdC9qcy1jbGllbnQnO1xuaW1wb3J0IHsgTGFpa2FDb25maWcgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBVbmlmaWVkIExhaWthVGVzdCBTREsgZm9yIHRyYWNpbmcgYW5kIGV4cGVyaW1lbnRzLlxuICogUHJvdmlkZXMgYSBzaW5nbGUgZW50cnkgcG9pbnQgZm9yIGJvdGggb2JzZXJ2YWJpbGl0eSBhbmQgQS9CIHRlc3RpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWlrYVRlc3Qge1xuICBwcml2YXRlIGNsaWVudDogTGFpa2FUZXN0Q2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdHJhY2luZ0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBMYWlrYVRlc3Qgd2l0aCB1bmlmaWVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEVuYWJsZXMgYm90aCB0cmFjaW5nIGFuZCBleHBlcmltZW50cyBieSBkZWZhdWx0LlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgYXBpS2V5IG9yIHNlcnZpY2VOYW1lIGlzIG1pc3NpbmcvaW52YWxpZFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgT3BlblRlbGVtZXRyeSBTREsgZmFpbHMgdG8gc3RhcnRcbiAgICovXG4gIHN0YXRpYyBpbml0KGNvbmZpZzogTGFpa2FDb25maWcpOiBMYWlrYVRlc3Qge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IExhaWthVGVzdCgpO1xuXG4gICAgLy8gRGVyaXZlIE9UTFAgZW5kcG9pbnQgZnJvbSBiYXNlVXJsIGlmIG5vdCBleHBsaWNpdGx5IHNldFxuICAgIGNvbnN0IGJhc2VVcmwgPSBjb25maWcuYmFzZVVybCB8fCAnaHR0cHM6Ly9hcGkubGFpa2F0ZXN0LmNvbSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBjb25maWcuZW5kcG9pbnQgfHwgYCR7YmFzZVVybH0vb3RlbC92MS90cmFjZXNgO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluaXRpYWxpemUgdHJhY2luZyAoaWYgZW5hYmxlZCwgZGVmYXVsdDogdHJ1ZSlcbiAgICAgIGlmIChjb25maWcudHJhY2luZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgaW5pdExhaWthVGVzdCh7XG4gICAgICAgICAgYXBpS2V5OiBjb25maWcuYXBpS2V5LFxuICAgICAgICAgIHNlcnZpY2VOYW1lOiBjb25maWcuc2VydmljZU5hbWUsXG4gICAgICAgICAgZW5kcG9pbnQ6IGVuZHBvaW50LFxuICAgICAgICAgIGNhcHR1cmVDb250ZW50OiBjb25maWcuY2FwdHVyZUNvbnRlbnQsXG4gICAgICAgICAgZGVidWc6IGNvbmZpZy5kZWJ1ZyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGNvbmZpZy5zZXNzaW9uSWQsXG4gICAgICAgICAgZ2V0U2Vzc2lvbklkOiBjb25maWcuZ2V0U2Vzc2lvbklkLFxuICAgICAgICAgIHVzZXJJZDogY29uZmlnLnVzZXJJZCxcbiAgICAgICAgICBnZXRVc2VySWQ6IGNvbmZpZy5nZXRVc2VySWQsXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXM6IGNvbmZpZy5kZWZhdWx0UHJvcGVydGllcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RhbmNlLnRyYWNpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSBleHBlcmltZW50cyBjbGllbnQgKGlmIGVuYWJsZWQsIGRlZmF1bHQ6IHRydWUpXG4gICAgICBpZiAoY29uZmlnLmV4cGVyaW1lbnRzICE9PSBmYWxzZSkge1xuICAgICAgICBpbnN0YW5jZS5jbGllbnQgPSBuZXcgTGFpa2FUZXN0Q2xpZW50KGNvbmZpZy5hcGlLZXksIHtcbiAgICAgICAgICBiYXNlVXJsOiBiYXNlVXJsLFxuICAgICAgICAgIHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0LFxuICAgICAgICAgIGNhY2hlRW5hYmxlZDogY29uZmlnLmNhY2hlRW5hYmxlZCxcbiAgICAgICAgICBjYWNoZVRUTDogY29uZmlnLmNhY2hlVFRMLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDbGVhbnVwIGFueSBwYXJ0aWFsIGluaXRpYWxpemF0aW9uXG4gICAgICBpZiAoaW5zdGFuY2UudHJhY2luZ0VuYWJsZWQpIHtcbiAgICAgICAgc2h1dGRvd24oKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggcHJvbXB0IGNvbnRlbnQgYnkgbmFtZS5cbiAgICogUmVxdWlyZXMgZXhwZXJpbWVudHMgdG8gYmUgZW5hYmxlZC5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIGV4cGVyaW1lbnRzIGFyZSBub3QgZW5hYmxlZFxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIHByb21wdCBuYW1lIGlzIGludmFsaWRcbiAgICogQHRocm93cyB7QXV0aGVudGljYXRpb25FcnJvcn0gSWYgQVBJIGtleSBpcyBpbnZhbGlkXG4gICAqIEB0aHJvd3Mge0xhaWthU2VydmljZUVycm9yfSBJZiBBUEkgcmV0dXJucyBhbiBlcnJvclxuICAgKiBAdGhyb3dzIHtOZXR3b3JrRXJyb3J9IElmIG5ldHdvcmsgcmVxdWVzdCBmYWlsc1xuICAgKi9cbiAgYXN5bmMgZ2V0UHJvbXB0PEMgPSB1bmtub3duPihcbiAgICBwcm9tcHROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldFByb21wdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxQcm9tcHQ8Qz4+IHtcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudCEuZ2V0UHJvbXB0PEM+KHByb21wdE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBleHBlcmltZW50IHByb21wdCB3aXRoIGF1dG9tYXRpYyBidWNrZXRpbmcuXG4gICAqIFJlcXVpcmVzIGV4cGVyaW1lbnRzIHRvIGJlIGVuYWJsZWQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBleHBlcmltZW50cyBhcmUgbm90IGVuYWJsZWRcbiAgICogQHRocm93cyB7VmFsaWRhdGlvbkVycm9yfSBJZiBleHBlcmltZW50IHRpdGxlIG9yIGNvbnRleHQgaXMgaW52YWxpZFxuICAgKiBAdGhyb3dzIHtBdXRoZW50aWNhdGlvbkVycm9yfSBJZiBBUEkga2V5IGlzIGludmFsaWRcbiAgICogQHRocm93cyB7TGFpa2FTZXJ2aWNlRXJyb3J9IElmIEFQSSByZXR1cm5zIGFuIGVycm9yXG4gICAqIEB0aHJvd3Mge05ldHdvcmtFcnJvcn0gSWYgbmV0d29yayByZXF1ZXN0IGZhaWxzXG4gICAqL1xuICBhc3luYyBnZXRFeHBlcmltZW50UHJvbXB0PEMgPSB1bmtub3duPihcbiAgICBleHBlcmltZW50VGl0bGU6IHN0cmluZyxcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxQcm9tcHQ8Qz4+IHtcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudCEuZ2V0RXhwZXJpbWVudFByb21wdDxDPihleHBlcmltZW50VGl0bGUsIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0cmFjaW5nIGlzIGVuYWJsZWQuICovXG4gIGlzVHJhY2luZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHJhY2luZ0VuYWJsZWQ7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmIGV4cGVyaW1lbnRzIGNsaWVudCBpcyBlbmFibGVkLiAqL1xuICBpc0V4cGVyaW1lbnRzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2h1dGRvd24gYm90aCB0cmFjaW5nIGFuZCBjbGllbnQgcmVzb3VyY2VzLlxuICAgKiBDYWxsIHRoaXMgYmVmb3JlIHByb2Nlc3MgZXhpdCBmb3IgY2xlYW4gc2h1dGRvd24uXG4gICAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnRyYWNpbmdFbmFibGVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzaHV0ZG93bigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsaWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jbGllbnQuZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcignW0xhaWthVGVzdF0gRXJyb3JzIGR1cmluZyBzaHV0ZG93bjonLCBlcnJvcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaHJvd3MgaWYgZXhwZXJpbWVudHMgbm90IGVuYWJsZWQuICovXG4gIHByaXZhdGUgZW5zdXJlQ2xpZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0V4cGVyaW1lbnRzIG5vdCBlbmFibGVkLiBTZXQgZXhwZXJpbWVudHM6IHRydWUgaW4gY29uZmlnLidcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace an agent workflow
|
|
3
|
+
* @param name - Agent name
|
|
4
|
+
* @param fn - Async callback function
|
|
5
|
+
* @returns Promise resolving to callback result
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* await trace.agent('research-agent', async () => {
|
|
9
|
+
* const plan = await trace.step('planning', () => planAction());
|
|
10
|
+
* const result = await trace.tool('web-search', () => search());
|
|
11
|
+
* return result;
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function agent<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Trace a tool execution
|
|
18
|
+
* @param name - Tool name
|
|
19
|
+
* @param fn - Async callback function
|
|
20
|
+
* @returns Promise resolving to callback result
|
|
21
|
+
*/
|
|
22
|
+
export declare function tool<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
23
|
+
/**
|
|
24
|
+
* Trace a generic step/operation
|
|
25
|
+
* @param name - Step name
|
|
26
|
+
* @param fn - Async callback function
|
|
27
|
+
* @returns Promise resolving to callback result
|
|
28
|
+
*/
|
|
29
|
+
export declare function step<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.agent = agent;
|
|
4
|
+
exports.tool = tool;
|
|
5
|
+
exports.step = step;
|
|
6
|
+
const core_1 = require("./core");
|
|
7
|
+
/**
|
|
8
|
+
* Trace an agent workflow
|
|
9
|
+
* @param name - Agent name
|
|
10
|
+
* @param fn - Async callback function
|
|
11
|
+
* @returns Promise resolving to callback result
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* await trace.agent('research-agent', async () => {
|
|
15
|
+
* const plan = await trace.step('planning', () => planAction());
|
|
16
|
+
* const result = await trace.tool('web-search', () => search());
|
|
17
|
+
* return result;
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
async function agent(name, fn) {
|
|
22
|
+
return (0, core_1.traceOperation)('agent', name, fn);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Trace a tool execution
|
|
26
|
+
* @param name - Tool name
|
|
27
|
+
* @param fn - Async callback function
|
|
28
|
+
* @returns Promise resolving to callback result
|
|
29
|
+
*/
|
|
30
|
+
async function tool(name, fn) {
|
|
31
|
+
return (0, core_1.traceOperation)('tool', name, fn);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Trace a generic step/operation
|
|
35
|
+
* @param name - Step name
|
|
36
|
+
* @param fn - Async callback function
|
|
37
|
+
* @returns Promise resolving to callback result
|
|
38
|
+
*/
|
|
39
|
+
async function step(name, fn) {
|
|
40
|
+
return (0, core_1.traceOperation)('step', name, fn);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsc0JBRUM7QUFRRCxvQkFFQztBQVFELG9CQUVDO0FBdENELGlDQUF3QztBQUV4Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0ksS0FBSyxVQUFVLEtBQUssQ0FBSSxJQUFZLEVBQUUsRUFBb0I7SUFDL0QsT0FBTyxJQUFBLHFCQUFjLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsSUFBSSxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUM5RCxPQUFPLElBQUEscUJBQWMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUksSUFBWSxFQUFFLEVBQW9CO0lBQzlELE9BQU8sSUFBQSxxQkFBYyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYWNlT3BlcmF0aW9uIH0gZnJvbSAnLi9jb3JlJztcblxuLyoqXG4gKiBUcmFjZSBhbiBhZ2VudCB3b3JrZmxvd1xuICogQHBhcmFtIG5hbWUgLSBBZ2VudCBuYW1lXG4gKiBAcGFyYW0gZm4gLSBBc3luYyBjYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY2FsbGJhY2sgcmVzdWx0XG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXdhaXQgdHJhY2UuYWdlbnQoJ3Jlc2VhcmNoLWFnZW50JywgYXN5bmMgKCkgPT4ge1xuICogICBjb25zdCBwbGFuID0gYXdhaXQgdHJhY2Uuc3RlcCgncGxhbm5pbmcnLCAoKSA9PiBwbGFuQWN0aW9uKCkpO1xuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFjZS50b29sKCd3ZWItc2VhcmNoJywgKCkgPT4gc2VhcmNoKCkpO1xuICogICByZXR1cm4gcmVzdWx0O1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFnZW50PFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdhZ2VudCcsIG5hbWUsIGZuKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIHRvb2wgZXhlY3V0aW9uXG4gKiBAcGFyYW0gbmFtZSAtIFRvb2wgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9vbDxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbigndG9vbCcsIG5hbWUsIGZuKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIGdlbmVyaWMgc3RlcC9vcGVyYXRpb25cbiAqIEBwYXJhbSBuYW1lIC0gU3RlcCBuYW1lXG4gKiBAcGFyYW0gZm4gLSBBc3luYyBjYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY2FsbGJhY2sgcmVzdWx0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGVwPFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdzdGVwJywgbmFtZSwgZm4pO1xufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace an operation with semantic naming
|
|
3
|
+
* @param operation - Operation type (e.g., 'rag', 'agent', 'tool')
|
|
4
|
+
* @param name - User-provided name
|
|
5
|
+
* @param fn - Async callback function
|
|
6
|
+
* @returns Promise resolving to callback result
|
|
7
|
+
*/
|
|
8
|
+
export declare function traceOperation<T>(operation: string, name: string, fn: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.traceOperation = traceOperation;
|
|
4
|
+
const auto_otel_1 = require("@laikatest/auto-otel");
|
|
5
|
+
/**
|
|
6
|
+
* Trace an operation with semantic naming
|
|
7
|
+
* @param operation - Operation type (e.g., 'rag', 'agent', 'tool')
|
|
8
|
+
* @param name - User-provided name
|
|
9
|
+
* @param fn - Async callback function
|
|
10
|
+
* @returns Promise resolving to callback result
|
|
11
|
+
*/
|
|
12
|
+
async function traceOperation(operation, name, fn) {
|
|
13
|
+
const spanName = `${operation}.${name}`;
|
|
14
|
+
return (0, auto_otel_1.withSpan)(spanName, async (span) => {
|
|
15
|
+
// Add semantic attributes
|
|
16
|
+
span.setAttribute('laikatest.operation.type', operation);
|
|
17
|
+
span.setAttribute('laikatest.operation.name', name);
|
|
18
|
+
return await fn();
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFjZS9jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsd0NBY0M7QUF4QkQsb0RBQWdEO0FBR2hEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxjQUFjLENBQ2xDLFNBQWlCLEVBQ2pCLElBQVksRUFDWixFQUFvQjtJQUVwQixNQUFNLFFBQVEsR0FBRyxHQUFHLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUV4QyxPQUFPLElBQUEsb0JBQVEsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQVUsRUFBRSxFQUFFO1FBQzdDLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEQsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhTcGFuIH0gZnJvbSAnQGxhaWthdGVzdC9hdXRvLW90ZWwnO1xuaW1wb3J0IHsgU3BhbiB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5cbi8qKlxuICogVHJhY2UgYW4gb3BlcmF0aW9uIHdpdGggc2VtYW50aWMgbmFtaW5nXG4gKiBAcGFyYW0gb3BlcmF0aW9uIC0gT3BlcmF0aW9uIHR5cGUgKGUuZy4sICdyYWcnLCAnYWdlbnQnLCAndG9vbCcpXG4gKiBAcGFyYW0gbmFtZSAtIFVzZXItcHJvdmlkZWQgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhY2VPcGVyYXRpb248VD4oXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3Qgc3Bhbk5hbWUgPSBgJHtvcGVyYXRpb259LiR7bmFtZX1gO1xuXG4gIHJldHVybiB3aXRoU3BhbihzcGFuTmFtZSwgYXN5bmMgKHNwYW46IFNwYW4pID0+IHtcbiAgICAvLyBBZGQgc2VtYW50aWMgYXR0cmlidXRlc1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdsYWlrYXRlc3Qub3BlcmF0aW9uLnR5cGUnLCBvcGVyYXRpb24pO1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdsYWlrYXRlc3Qub3BlcmF0aW9uLm5hbWUnLCBuYW1lKTtcblxuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evaluation = evaluation;
|
|
4
|
+
const core_1 = require("./core");
|
|
5
|
+
/**
|
|
6
|
+
* Trace an evaluation step
|
|
7
|
+
* @param name - Evaluation name
|
|
8
|
+
* @param fn - Async callback function
|
|
9
|
+
* @returns Promise resolving to callback result
|
|
10
|
+
*/
|
|
11
|
+
async function evaluation(name, fn) {
|
|
12
|
+
return (0, core_1.traceOperation)('evaluation', name, fn);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFjZS9ldmFsdWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsZ0NBRUM7QUFWRCxpQ0FBd0M7QUFFeEM7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsVUFBVSxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUNwRSxPQUFPLElBQUEscUJBQWMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cmFjZU9wZXJhdGlvbiB9IGZyb20gJy4vY29yZSc7XG5cbi8qKlxuICogVHJhY2UgYW4gZXZhbHVhdGlvbiBzdGVwXG4gKiBAcGFyYW0gbmFtZSAtIEV2YWx1YXRpb24gbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGlvbjxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbignZXZhbHVhdGlvbicsIG5hbWUsIGZuKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace LLM generation
|
|
3
|
+
* @param name - Generation step name
|
|
4
|
+
* @param fn - Async callback function
|
|
5
|
+
* @returns Promise resolving to callback result
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const response = await trace.generation('summarize', async () => {
|
|
9
|
+
* return await openai.chat.completions.create({
|
|
10
|
+
* model: 'gpt-4',
|
|
11
|
+
* messages: [{ role: 'user', content: prompt }]
|
|
12
|
+
* });
|
|
13
|
+
* });
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function generation<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generation = generation;
|
|
4
|
+
const core_1 = require("./core");
|
|
5
|
+
/**
|
|
6
|
+
* Trace LLM generation
|
|
7
|
+
* @param name - Generation step name
|
|
8
|
+
* @param fn - Async callback function
|
|
9
|
+
* @returns Promise resolving to callback result
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const response = await trace.generation('summarize', async () => {
|
|
13
|
+
* return await openai.chat.completions.create({
|
|
14
|
+
* model: 'gpt-4',
|
|
15
|
+
* messages: [{ role: 'user', content: prompt }]
|
|
16
|
+
* });
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
async function generation(name, fn) {
|
|
21
|
+
return (0, core_1.traceOperation)('generation', name, fn);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFjZS9nZW5lcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUJBLGdDQUVDO0FBbkJELGlDQUF3QztBQUV4Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNJLEtBQUssVUFBVSxVQUFVLENBQUksSUFBWSxFQUFFLEVBQW9CO0lBQ3BFLE9BQU8sSUFBQSxxQkFBYyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYWNlT3BlcmF0aW9uIH0gZnJvbSAnLi9jb3JlJztcblxuLyoqXG4gKiBUcmFjZSBMTE0gZ2VuZXJhdGlvblxuICogQHBhcmFtIG5hbWUgLSBHZW5lcmF0aW9uIHN0ZXAgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHJhY2UuZ2VuZXJhdGlvbignc3VtbWFyaXplJywgYXN5bmMgKCkgPT4ge1xuICogICByZXR1cm4gYXdhaXQgb3BlbmFpLmNoYXQuY29tcGxldGlvbnMuY3JlYXRlKHtcbiAqICAgICBtb2RlbDogJ2dwdC00JyxcbiAqICAgICBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBwcm9tcHQgfV1cbiAqICAgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGlvbjxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbignZ2VuZXJhdGlvbicsIG5hbWUsIGZuKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { rag, retrieval, rerank, embedding } from './rag';
|
|
2
|
+
import { agent, tool, step } from './agent';
|
|
3
|
+
import { generation } from './generation';
|
|
4
|
+
import { evaluation } from './evaluation';
|
|
5
|
+
/**
|
|
6
|
+
* AI-native tracing API for LaikaTest SDK
|
|
7
|
+
*
|
|
8
|
+
* Provides semantic helpers for common AI workflows instead of low-level span API.
|
|
9
|
+
* All helpers automatically create properly named spans and add semantic attributes.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { trace } from '@laikatest/sdk';
|
|
14
|
+
*
|
|
15
|
+
* // RAG pipeline
|
|
16
|
+
* const answer = await trace.rag('qa', async () => {
|
|
17
|
+
* const docs = await trace.retrieval('search', () => vectorDB.search(query));
|
|
18
|
+
* return await trace.generation('answer', () => llm.generate(docs));
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Agent workflow
|
|
22
|
+
* await trace.agent('assistant', async () => {
|
|
23
|
+
* const result = await trace.tool('calculator', () => calculate(x, y));
|
|
24
|
+
* return result;
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare const trace: {
|
|
29
|
+
rag: typeof rag;
|
|
30
|
+
retrieval: typeof retrieval;
|
|
31
|
+
rerank: typeof rerank;
|
|
32
|
+
embedding: typeof embedding;
|
|
33
|
+
agent: typeof agent;
|
|
34
|
+
tool: typeof tool;
|
|
35
|
+
step: typeof step;
|
|
36
|
+
generation: typeof generation;
|
|
37
|
+
evaluation: typeof evaluation;
|
|
38
|
+
};
|
|
39
|
+
export type { TraceCallback, TraceSyncCallback, OperationType } from './types';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.trace = void 0;
|
|
4
|
+
const rag_1 = require("./rag");
|
|
5
|
+
const agent_1 = require("./agent");
|
|
6
|
+
const generation_1 = require("./generation");
|
|
7
|
+
const evaluation_1 = require("./evaluation");
|
|
8
|
+
/**
|
|
9
|
+
* AI-native tracing API for LaikaTest SDK
|
|
10
|
+
*
|
|
11
|
+
* Provides semantic helpers for common AI workflows instead of low-level span API.
|
|
12
|
+
* All helpers automatically create properly named spans and add semantic attributes.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { trace } from '@laikatest/sdk';
|
|
17
|
+
*
|
|
18
|
+
* // RAG pipeline
|
|
19
|
+
* const answer = await trace.rag('qa', async () => {
|
|
20
|
+
* const docs = await trace.retrieval('search', () => vectorDB.search(query));
|
|
21
|
+
* return await trace.generation('answer', () => llm.generate(docs));
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Agent workflow
|
|
25
|
+
* await trace.agent('assistant', async () => {
|
|
26
|
+
* const result = await trace.tool('calculator', () => calculate(x, y));
|
|
27
|
+
* return result;
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
exports.trace = {
|
|
32
|
+
// RAG workflow
|
|
33
|
+
rag: rag_1.rag,
|
|
34
|
+
retrieval: rag_1.retrieval,
|
|
35
|
+
rerank: rag_1.rerank,
|
|
36
|
+
embedding: rag_1.embedding,
|
|
37
|
+
// Agent workflow
|
|
38
|
+
agent: agent_1.agent,
|
|
39
|
+
tool: agent_1.tool,
|
|
40
|
+
step: agent_1.step,
|
|
41
|
+
// LLM operations
|
|
42
|
+
generation: generation_1.generation,
|
|
43
|
+
// Evaluation
|
|
44
|
+
evaluation: evaluation_1.evaluation,
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQTBEO0FBQzFELG1DQUE0QztBQUM1Qyw2Q0FBMEM7QUFDMUMsNkNBQTBDO0FBRTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ1UsUUFBQSxLQUFLLEdBQUc7SUFDbkIsZUFBZTtJQUNmLEdBQUcsRUFBSCxTQUFHO0lBQ0gsU0FBUyxFQUFULGVBQVM7SUFDVCxNQUFNLEVBQU4sWUFBTTtJQUNOLFNBQVMsRUFBVCxlQUFTO0lBRVQsaUJBQWlCO0lBQ2pCLEtBQUssRUFBTCxhQUFLO0lBQ0wsSUFBSSxFQUFKLFlBQUk7SUFDSixJQUFJLEVBQUosWUFBSTtJQUVKLGlCQUFpQjtJQUNqQixVQUFVLEVBQVYsdUJBQVU7SUFFVixhQUFhO0lBQ2IsVUFBVSxFQUFWLHVCQUFVO0NBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhZywgcmV0cmlldmFsLCByZXJhbmssIGVtYmVkZGluZyB9IGZyb20gJy4vcmFnJztcbmltcG9ydCB7IGFnZW50LCB0b29sLCBzdGVwIH0gZnJvbSAnLi9hZ2VudCc7XG5pbXBvcnQgeyBnZW5lcmF0aW9uIH0gZnJvbSAnLi9nZW5lcmF0aW9uJztcbmltcG9ydCB7IGV2YWx1YXRpb24gfSBmcm9tICcuL2V2YWx1YXRpb24nO1xuXG4vKipcbiAqIEFJLW5hdGl2ZSB0cmFjaW5nIEFQSSBmb3IgTGFpa2FUZXN0IFNES1xuICpcbiAqIFByb3ZpZGVzIHNlbWFudGljIGhlbHBlcnMgZm9yIGNvbW1vbiBBSSB3b3JrZmxvd3MgaW5zdGVhZCBvZiBsb3ctbGV2ZWwgc3BhbiBBUEkuXG4gKiBBbGwgaGVscGVycyBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBwcm9wZXJseSBuYW1lZCBzcGFucyBhbmQgYWRkIHNlbWFudGljIGF0dHJpYnV0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRyYWNlIH0gZnJvbSAnQGxhaWthdGVzdC9zZGsnO1xuICpcbiAqIC8vIFJBRyBwaXBlbGluZVxuICogY29uc3QgYW5zd2VyID0gYXdhaXQgdHJhY2UucmFnKCdxYScsIGFzeW5jICgpID0+IHtcbiAqICAgY29uc3QgZG9jcyA9IGF3YWl0IHRyYWNlLnJldHJpZXZhbCgnc2VhcmNoJywgKCkgPT4gdmVjdG9yREIuc2VhcmNoKHF1ZXJ5KSk7XG4gKiAgIHJldHVybiBhd2FpdCB0cmFjZS5nZW5lcmF0aW9uKCdhbnN3ZXInLCAoKSA9PiBsbG0uZ2VuZXJhdGUoZG9jcykpO1xuICogfSk7XG4gKlxuICogLy8gQWdlbnQgd29ya2Zsb3dcbiAqIGF3YWl0IHRyYWNlLmFnZW50KCdhc3Npc3RhbnQnLCBhc3luYyAoKSA9PiB7XG4gKiAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWNlLnRvb2woJ2NhbGN1bGF0b3InLCAoKSA9PiBjYWxjdWxhdGUoeCwgeSkpO1xuICogICByZXR1cm4gcmVzdWx0O1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHRyYWNlID0ge1xuICAvLyBSQUcgd29ya2Zsb3dcbiAgcmFnLFxuICByZXRyaWV2YWwsXG4gIHJlcmFuayxcbiAgZW1iZWRkaW5nLFxuXG4gIC8vIEFnZW50IHdvcmtmbG93XG4gIGFnZW50LFxuICB0b29sLFxuICBzdGVwLFxuXG4gIC8vIExMTSBvcGVyYXRpb25zXG4gIGdlbmVyYXRpb24sXG5cbiAgLy8gRXZhbHVhdGlvblxuICBldmFsdWF0aW9uLFxufTtcblxuLy8gUmUtZXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFRyYWNlQ2FsbGJhY2ssIFRyYWNlU3luY0NhbGxiYWNrLCBPcGVyYXRpb25UeXBlIH0gZnJvbSAnLi90eXBlcyc7XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace a RAG (Retrieval-Augmented Generation) pipeline
|
|
3
|
+
* @param name - Pipeline name
|
|
4
|
+
* @param fn - Async callback function
|
|
5
|
+
* @returns Promise resolving to callback result
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const answer = await trace.rag('qa-pipeline', async () => {
|
|
9
|
+
* const docs = await trace.retrieval('search', () => vectorDB.search(query));
|
|
10
|
+
* return await trace.generation('answer', () => llm.generate(docs));
|
|
11
|
+
* });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function rag<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
15
|
+
/**
|
|
16
|
+
* Trace document retrieval operation
|
|
17
|
+
* @param name - Retrieval step name
|
|
18
|
+
* @param fn - Async callback function
|
|
19
|
+
* @returns Promise resolving to callback result
|
|
20
|
+
*/
|
|
21
|
+
export declare function retrieval<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Trace document reranking operation
|
|
24
|
+
* @param name - Reranking step name
|
|
25
|
+
* @param fn - Async callback function
|
|
26
|
+
* @returns Promise resolving to callback result
|
|
27
|
+
*/
|
|
28
|
+
export declare function rerank<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
29
|
+
/**
|
|
30
|
+
* Trace embedding generation
|
|
31
|
+
* @param name - Embedding step name
|
|
32
|
+
* @param fn - Async callback function
|
|
33
|
+
* @returns Promise resolving to callback result
|
|
34
|
+
*/
|
|
35
|
+
export declare function embedding<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rag = rag;
|
|
4
|
+
exports.retrieval = retrieval;
|
|
5
|
+
exports.rerank = rerank;
|
|
6
|
+
exports.embedding = embedding;
|
|
7
|
+
const core_1 = require("./core");
|
|
8
|
+
/**
|
|
9
|
+
* Trace a RAG (Retrieval-Augmented Generation) pipeline
|
|
10
|
+
* @param name - Pipeline name
|
|
11
|
+
* @param fn - Async callback function
|
|
12
|
+
* @returns Promise resolving to callback result
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const answer = await trace.rag('qa-pipeline', async () => {
|
|
16
|
+
* const docs = await trace.retrieval('search', () => vectorDB.search(query));
|
|
17
|
+
* return await trace.generation('answer', () => llm.generate(docs));
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
async function rag(name, fn) {
|
|
22
|
+
return (0, core_1.traceOperation)('rag', name, fn);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Trace document retrieval operation
|
|
26
|
+
* @param name - Retrieval step name
|
|
27
|
+
* @param fn - Async callback function
|
|
28
|
+
* @returns Promise resolving to callback result
|
|
29
|
+
*/
|
|
30
|
+
async function retrieval(name, fn) {
|
|
31
|
+
return (0, core_1.traceOperation)('retrieval', name, fn);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Trace document reranking operation
|
|
35
|
+
* @param name - Reranking step name
|
|
36
|
+
* @param fn - Async callback function
|
|
37
|
+
* @returns Promise resolving to callback result
|
|
38
|
+
*/
|
|
39
|
+
async function rerank(name, fn) {
|
|
40
|
+
return (0, core_1.traceOperation)('rerank', name, fn);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Trace embedding generation
|
|
44
|
+
* @param name - Embedding step name
|
|
45
|
+
* @param fn - Async callback function
|
|
46
|
+
* @returns Promise resolving to callback result
|
|
47
|
+
*/
|
|
48
|
+
async function embedding(name, fn) {
|
|
49
|
+
return (0, core_1.traceOperation)('embedding', name, fn);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYWNlL3JhZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWVBLGtCQUVDO0FBUUQsOEJBRUM7QUFRRCx3QkFFQztBQVFELDhCQUVDO0FBL0NELGlDQUF3QztBQUV4Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSSxLQUFLLFVBQVUsR0FBRyxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUM3RCxPQUFPLElBQUEscUJBQWMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxTQUFTLENBQUksSUFBWSxFQUFFLEVBQW9CO0lBQ25FLE9BQU8sSUFBQSxxQkFBYyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLE1BQU0sQ0FBSSxJQUFZLEVBQUUsRUFBb0I7SUFDaEUsT0FBTyxJQUFBLHFCQUFjLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsU0FBUyxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUNuRSxPQUFPLElBQUEscUJBQWMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cmFjZU9wZXJhdGlvbiB9IGZyb20gJy4vY29yZSc7XG5cbi8qKlxuICogVHJhY2UgYSBSQUcgKFJldHJpZXZhbC1BdWdtZW50ZWQgR2VuZXJhdGlvbikgcGlwZWxpbmVcbiAqIEBwYXJhbSBuYW1lIC0gUGlwZWxpbmUgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFuc3dlciA9IGF3YWl0IHRyYWNlLnJhZygncWEtcGlwZWxpbmUnLCBhc3luYyAoKSA9PiB7XG4gKiAgIGNvbnN0IGRvY3MgPSBhd2FpdCB0cmFjZS5yZXRyaWV2YWwoJ3NlYXJjaCcsICgpID0+IHZlY3RvckRCLnNlYXJjaChxdWVyeSkpO1xuICogICByZXR1cm4gYXdhaXQgdHJhY2UuZ2VuZXJhdGlvbignYW5zd2VyJywgKCkgPT4gbGxtLmdlbmVyYXRlKGRvY3MpKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYWc8VD4obmFtZTogc3RyaW5nLCBmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gdHJhY2VPcGVyYXRpb24oJ3JhZycsIG5hbWUsIGZuKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBkb2N1bWVudCByZXRyaWV2YWwgb3BlcmF0aW9uXG4gKiBAcGFyYW0gbmFtZSAtIFJldHJpZXZhbCBzdGVwIG5hbWVcbiAqIEBwYXJhbSBmbiAtIEFzeW5jIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBjYWxsYmFjayByZXN1bHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJpZXZhbDxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbigncmV0cmlldmFsJywgbmFtZSwgZm4pO1xufVxuXG4vKipcbiAqIFRyYWNlIGRvY3VtZW50IHJlcmFua2luZyBvcGVyYXRpb25cbiAqIEBwYXJhbSBuYW1lIC0gUmVyYW5raW5nIHN0ZXAgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVyYW5rPFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdyZXJhbmsnLCBuYW1lLCBmbik7XG59XG5cbi8qKlxuICogVHJhY2UgZW1iZWRkaW5nIGdlbmVyYXRpb25cbiAqIEBwYXJhbSBuYW1lIC0gRW1iZWRkaW5nIHN0ZXAgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW1iZWRkaW5nPFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdlbWJlZGRpbmcnLCBuYW1lLCBmbik7XG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Callback function for trace operations
|
|
3
|
+
*/
|
|
4
|
+
export type TraceCallback<T> = () => Promise<T>;
|
|
5
|
+
/**
|
|
6
|
+
* Synchronous callback function for trace operations
|
|
7
|
+
*/
|
|
8
|
+
export type TraceSyncCallback<T> = () => T;
|
|
9
|
+
/**
|
|
10
|
+
* Operation types for semantic tracing
|
|
11
|
+
*/
|
|
12
|
+
export type OperationType = 'rag' | 'retrieval' | 'rerank' | 'embedding' | 'agent' | 'tool' | 'step' | 'generation' | 'evaluation';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRyYWNlIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhY2VDYWxsYmFjazxUPiA9ICgpID0+IFByb21pc2U8VD47XG5cbi8qKlxuICogU3luY2hyb25vdXMgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRyYWNlIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhY2VTeW5jQ2FsbGJhY2s8VD4gPSAoKSA9PiBUO1xuXG4vKipcbiAqIE9wZXJhdGlvbiB0eXBlcyBmb3Igc2VtYW50aWMgdHJhY2luZ1xuICovXG5leHBvcnQgdHlwZSBPcGVyYXRpb25UeXBlID1cbiAgfCAncmFnJ1xuICB8ICdyZXRyaWV2YWwnXG4gIHwgJ3JlcmFuaydcbiAgfCAnZW1iZWRkaW5nJ1xuICB8ICdhZ2VudCdcbiAgfCAndG9vbCdcbiAgfCAnc3RlcCdcbiAgfCAnZ2VuZXJhdGlvbidcbiAgfCAnZXZhbHVhdGlvbic7XG4iXX0=
|
package/dist/types.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export interface LaikaConfig {
|
|
|
11
11
|
tracing?: boolean;
|
|
12
12
|
/** Enable A/B testing client. Default: true */
|
|
13
13
|
experiments?: boolean;
|
|
14
|
-
/** OTLP endpoint URL.
|
|
14
|
+
/** OTLP endpoint URL. If not set, derived from baseUrl + '/otel/v1/traces' */
|
|
15
15
|
endpoint?: string;
|
|
16
16
|
/** Capture prompt/response content. Default: false (privacy-first) */
|
|
17
17
|
captureContent?: boolean;
|
|
@@ -27,7 +27,7 @@ export interface LaikaConfig {
|
|
|
27
27
|
getUserId?: () => string;
|
|
28
28
|
/** Default properties to attach to all spans */
|
|
29
29
|
defaultProperties?: Record<string, string | number | boolean>;
|
|
30
|
-
/** API base URL. Default: https://api.laikatest.com */
|
|
30
|
+
/** API base URL. Also used to derive OTLP endpoint if not set. Default: https://api.laikatest.com */
|
|
31
31
|
baseUrl?: string;
|
|
32
32
|
/** Request timeout in milliseconds. Default: 10000 */
|
|
33
33
|
timeout?: number;
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBjb25maWd1cmF0aW9uIGZvciBMYWlrYVRlc3QgU0RLLlxuICogQ29tYmluZXMgdHJhY2luZyAob2JzZXJ2YWJpbGl0eSkgYW5kIGV4cGVyaW1lbnRhdGlvbiAoQS9CIHRlc3RpbmcpIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWlrYUNvbmZpZyB7XG4gIC8qKiBBUEkga2V5IGZvciBMYWlrYSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQpICovXG4gIGFwaUtleTogc3RyaW5nO1xuXG4gIC8qKiBTZXJ2aWNlIG5hbWUgZm9yIHJlc291cmNlIGlkZW50aWZpY2F0aW9uIChyZXF1aXJlZCkgKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvLyBGZWF0dXJlIHRvZ2dsZXNcbiAgLyoqIEVuYWJsZSBPcGVuVGVsZW1ldHJ5IHRyYWNpbmcuIERlZmF1bHQ6IHRydWUgKi9cbiAgdHJhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBBL0IgdGVzdGluZyBjbGllbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgZXhwZXJpbWVudHM/
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBjb25maWd1cmF0aW9uIGZvciBMYWlrYVRlc3QgU0RLLlxuICogQ29tYmluZXMgdHJhY2luZyAob2JzZXJ2YWJpbGl0eSkgYW5kIGV4cGVyaW1lbnRhdGlvbiAoQS9CIHRlc3RpbmcpIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWlrYUNvbmZpZyB7XG4gIC8qKiBBUEkga2V5IGZvciBMYWlrYSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQpICovXG4gIGFwaUtleTogc3RyaW5nO1xuXG4gIC8qKiBTZXJ2aWNlIG5hbWUgZm9yIHJlc291cmNlIGlkZW50aWZpY2F0aW9uIChyZXF1aXJlZCkgKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvLyBGZWF0dXJlIHRvZ2dsZXNcbiAgLyoqIEVuYWJsZSBPcGVuVGVsZW1ldHJ5IHRyYWNpbmcuIERlZmF1bHQ6IHRydWUgKi9cbiAgdHJhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBBL0IgdGVzdGluZyBjbGllbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgZXhwZXJpbWVudHM/OiBib29sZWFuO1xuXG4gIC8vIFRyYWNpbmcgb3B0aW9ucyAocGFzc2VkIHRvIEBsYWlrYXRlc3QvYXV0by1vdGVsKVxuICAvKiogT1RMUCBlbmRwb2ludCBVUkwuIElmIG5vdCBzZXQsIGRlcml2ZWQgZnJvbSBiYXNlVXJsICsgJy9vdGVsL3YxL3RyYWNlcycgKi9cbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqIENhcHR1cmUgcHJvbXB0L3Jlc3BvbnNlIGNvbnRlbnQuIERlZmF1bHQ6IGZhbHNlIChwcml2YWN5LWZpcnN0KSAqL1xuICBjYXB0dXJlQ29udGVudD86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nLiBEZWZhdWx0OiBmYWxzZSAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLy8gU2hhcmVkIGNvbnRleHQgb3B0aW9uc1xuICAvKiogU3RhdGljIHNlc3Npb24gSUQgZm9yIGdyb3VwaW5nIHJlbGF0ZWQgdHJhY2VzICovXG4gIHNlc3Npb25JZD86IHN0cmluZztcblxuICAvKiogRHluYW1pYyBzZXNzaW9uIElEIGdldHRlciBmdW5jdGlvbiAqL1xuICBnZXRTZXNzaW9uSWQ/OiAoKSA9PiBzdHJpbmc7XG5cbiAgLyoqIFN0YXRpYyB1c2VyIElEIGZvciBwZXItdXNlciBhbmFseXRpY3MgKi9cbiAgdXNlcklkPzogc3RyaW5nO1xuXG4gIC8qKiBEeW5hbWljIHVzZXIgSUQgZ2V0dGVyIGZ1bmN0aW9uICovXG4gIGdldFVzZXJJZD86ICgpID0+IHN0cmluZztcblxuICAvKiogRGVmYXVsdCBwcm9wZXJ0aWVzIHRvIGF0dGFjaCB0byBhbGwgc3BhbnMgKi9cbiAgZGVmYXVsdFByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcblxuICAvLyBDbGllbnQgb3B0aW9ucyAocGFzc2VkIHRvIEBsYWlrYXRlc3QvY2xpZW50KVxuICAvKiogQVBJIGJhc2UgVVJMLiBBbHNvIHVzZWQgdG8gZGVyaXZlIE9UTFAgZW5kcG9pbnQgaWYgbm90IHNldC4gRGVmYXVsdDogaHR0cHM6Ly9hcGkubGFpa2F0ZXN0LmNvbSAqL1xuICBiYXNlVXJsPzogc3RyaW5nO1xuXG4gIC8qKiBSZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0OiAxMDAwMCAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKiBFbmFibGUgcHJvbXB0IGNhY2hpbmcuIERlZmF1bHQ6IHRydWUgKi9cbiAgY2FjaGVFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKiogQ2FjaGUgVFRMIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdDogMzAgKiA2MCAqIDEwMDAgKDMwIG1pbnV0ZXMpICovXG4gIGNhY2hlVFRMPzogbnVtYmVyO1xufVxuIl19
|