@arizeai/phoenix-client 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/esm/__generated__/api/v1.d.ts +375 -0
  2. package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
  3. package/dist/esm/experiments/runExperiment.d.ts +48 -13
  4. package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
  5. package/dist/esm/experiments/runExperiment.js +139 -36
  6. package/dist/esm/experiments/runExperiment.js.map +1 -1
  7. package/dist/esm/spans/addSpanAnnotation.d.ts +39 -0
  8. package/dist/esm/spans/addSpanAnnotation.d.ts.map +1 -0
  9. package/dist/esm/spans/addSpanAnnotation.js +44 -0
  10. package/dist/esm/spans/addSpanAnnotation.js.map +1 -0
  11. package/dist/esm/spans/index.d.ts +3 -0
  12. package/dist/esm/spans/index.d.ts.map +1 -0
  13. package/dist/esm/spans/index.js +3 -0
  14. package/dist/esm/spans/index.js.map +1 -0
  15. package/dist/esm/spans/logSpanAnnotations.d.ts +51 -0
  16. package/dist/esm/spans/logSpanAnnotations.d.ts.map +1 -0
  17. package/dist/esm/spans/logSpanAnnotations.js +53 -0
  18. package/dist/esm/spans/logSpanAnnotations.js.map +1 -0
  19. package/dist/esm/spans/types.d.ts +43 -0
  20. package/dist/esm/spans/types.d.ts.map +1 -0
  21. package/dist/esm/spans/types.js +18 -0
  22. package/dist/esm/spans/types.js.map +1 -0
  23. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  24. package/dist/esm/types/annotations.d.ts +2 -1
  25. package/dist/esm/types/annotations.d.ts.map +1 -1
  26. package/dist/esm/types/experiments.d.ts +1 -7
  27. package/dist/esm/types/experiments.d.ts.map +1 -1
  28. package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -1
  29. package/dist/esm/utils/getPromptBySelector.d.ts.map +1 -1
  30. package/dist/src/__generated__/api/v1.d.ts +375 -0
  31. package/dist/src/__generated__/api/v1.d.ts.map +1 -1
  32. package/dist/src/experiments/runExperiment.d.ts +48 -13
  33. package/dist/src/experiments/runExperiment.d.ts.map +1 -1
  34. package/dist/src/experiments/runExperiment.js +138 -36
  35. package/dist/src/experiments/runExperiment.js.map +1 -1
  36. package/dist/src/spans/addSpanAnnotation.d.ts +39 -0
  37. package/dist/src/spans/addSpanAnnotation.d.ts.map +1 -0
  38. package/dist/src/spans/addSpanAnnotation.js +59 -0
  39. package/dist/src/spans/addSpanAnnotation.js.map +1 -0
  40. package/dist/src/spans/index.d.ts +3 -0
  41. package/dist/src/spans/index.d.ts.map +1 -0
  42. package/dist/src/spans/index.js +19 -0
  43. package/dist/src/spans/index.js.map +1 -0
  44. package/dist/src/spans/logSpanAnnotations.d.ts +51 -0
  45. package/dist/src/spans/logSpanAnnotations.d.ts.map +1 -0
  46. package/dist/src/spans/logSpanAnnotations.js +68 -0
  47. package/dist/src/spans/logSpanAnnotations.js.map +1 -0
  48. package/dist/src/spans/types.d.ts +43 -0
  49. package/dist/src/spans/types.d.ts.map +1 -0
  50. package/dist/src/spans/types.js +22 -0
  51. package/dist/src/spans/types.js.map +1 -0
  52. package/dist/src/types/annotations.d.ts +2 -1
  53. package/dist/src/types/annotations.d.ts.map +1 -1
  54. package/dist/src/types/experiments.d.ts +1 -7
  55. package/dist/src/types/experiments.d.ts.map +1 -1
  56. package/dist/src/utils/formatPromptMessages.d.ts.map +1 -1
  57. package/dist/src/utils/getPromptBySelector.d.ts.map +1 -1
  58. package/dist/tsconfig.tsbuildinfo +1 -1
  59. package/package.json +7 -1
  60. package/src/__generated__/api/v1.ts +375 -0
  61. package/src/experiments/runExperiment.ts +211 -74
  62. package/src/spans/addSpanAnnotation.ts +59 -0
  63. package/src/spans/index.ts +2 -0
  64. package/src/spans/logSpanAnnotations.ts +71 -0
  65. package/src/spans/types.ts +60 -0
  66. package/src/types/annotations.ts +4 -1
  67. package/src/types/experiments.ts +1 -7
@@ -1,40 +1,80 @@
1
- import { createClient } from "../client.js";
2
- import { promisifyResult } from "../utils/promisifyResult.js";
1
+ import { queue } from "async";
3
2
  import invariant from "tiny-invariant";
4
- import { pluralize } from "../utils/pluralize.js";
3
+ import { createClient } from "../client.js";
5
4
  import { getDatasetBySelector } from "../utils/getDatasetBySelector.js";
5
+ import { pluralize } from "../utils/pluralize.js";
6
+ import { promisifyResult } from "../utils/promisifyResult.js";
6
7
  /**
7
8
  * Run an experiment.
8
9
  *
10
+ * @example
11
+ * ```ts
12
+ * import { asEvaluator, runExperiment } from "@phoenix/client/experiments";
13
+ *
14
+ * const experiment = await runExperiment({
15
+ * dataset: "my-dataset",
16
+ * task: async (example) => example.input,
17
+ * evaluators: [
18
+ * asEvaluator("my-evaluator", "CODE", async (params) => params.output),
19
+ * ],
20
+ * });
21
+ * ```
22
+ *
9
23
  * @experimental This feature is not complete, and will change in the future.
10
- * @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
11
24
  */
12
- export async function runExperiment({ experimentName: _experimentName, client: _client, dataset: _dataset, task, evaluators, repetitions = 1, projectName = "default", logger = console, record = true, }) {
25
+ export async function runExperiment({ experimentName: _experimentName, experimentDescription, experimentMetadata, client: _client, dataset: _dataset, task, evaluators, projectName = "default", logger = console, record = true, concurrency = 5, dryRun = false, }) {
26
+ const isDryRun = typeof dryRun === "number" || dryRun === true;
13
27
  const client = _client ?? createClient();
14
28
  const dataset = await getDatasetBySelector({ dataset: _dataset, client });
15
29
  invariant(dataset, `Dataset not found`);
16
30
  invariant(dataset.examples.length > 0, `Dataset has no examples`);
31
+ const nExamples = typeof dryRun === "number"
32
+ ? Math.max(dryRun, dataset.examples.length)
33
+ : dataset.examples.length;
17
34
  const experimentName = _experimentName ?? `${dataset.name}-${new Date().toISOString()}`;
18
35
  const experimentParams = {
19
- nRepetitions: repetitions,
20
- // TODO: Make configurable?
21
- nExamples: dataset.examples.length,
22
- };
23
- const experiment = {
24
- id: id(),
25
- datasetId: dataset.id,
26
- datasetVersionId: dataset.versionId,
27
- repetitions,
28
- projectName,
36
+ nExamples,
29
37
  };
38
+ let experiment;
39
+ if (isDryRun) {
40
+ experiment = {
41
+ id: id(),
42
+ datasetId: dataset.id,
43
+ datasetVersionId: dataset.versionId,
44
+ projectName,
45
+ };
46
+ }
47
+ else {
48
+ const experimentResponse = await client
49
+ .POST("/v1/datasets/{dataset_id}/experiments", {
50
+ params: {
51
+ path: {
52
+ dataset_id: dataset.id,
53
+ },
54
+ },
55
+ body: {
56
+ name: experimentName,
57
+ description: experimentDescription,
58
+ metadata: experimentMetadata,
59
+ project_name: projectName,
60
+ },
61
+ })
62
+ .then((res) => res.data?.data);
63
+ invariant(experimentResponse, `Failed to create experiment`);
64
+ experiment = {
65
+ id: experimentResponse.id,
66
+ datasetId: dataset.id,
67
+ datasetVersionId: dataset.versionId,
68
+ projectName,
69
+ };
70
+ }
30
71
  if (!record) {
31
72
  logger.info(`🔧 Running experiment in readonly mode. Results will not be recorded.`);
32
73
  }
33
- logger.info(`🧪 Starting experiment "${experimentName}" on dataset "${dataset.id}" with task "${task.name}" and ${evaluators?.length ?? 0} ${pluralize("evaluator", evaluators?.length ?? 0)}`);
34
- logger.info(`🔁 Running ${repetitions} ${pluralize("repetition", repetitions)} of task "${task.name}"`);
74
+ logger.info(`🧪 Starting experiment "${experimentName}" on dataset "${dataset.id}" with task "${task.name}" and ${evaluators?.length ?? 0} ${pluralize("evaluator", evaluators?.length ?? 0)} and ${concurrency} concurrent runs`);
35
75
  const runs = {};
36
- await Promise.all(Array.from({ length: repetitions }, (_, i) => runTask({
37
- repetition: i + 1,
76
+ await runTask({
77
+ client,
38
78
  experimentId: experiment.id,
39
79
  task,
40
80
  dataset,
@@ -42,7 +82,10 @@ export async function runExperiment({ experimentName: _experimentName, client: _
42
82
  onComplete: (run) => {
43
83
  runs[run.id] = run;
44
84
  },
45
- })));
85
+ concurrency,
86
+ isDryRun,
87
+ nExamples,
88
+ });
46
89
  logger.info(`✅ Task runs completed`);
47
90
  const ranExperiment = {
48
91
  ...experiment,
@@ -54,24 +97,26 @@ export async function runExperiment({ experimentName: _experimentName, client: _
54
97
  evaluators: evaluators ?? [],
55
98
  client,
56
99
  logger,
100
+ concurrency,
101
+ dryRun,
57
102
  });
58
103
  ranExperiment.evaluationRuns = evaluationRuns;
59
104
  logger.info(`✅ Experiment ${experiment.id} completed`);
60
105
  return ranExperiment;
61
106
  }
62
107
  /**
63
- * Run a task against all examples in a dataset.
108
+ * Run a task against n examples in a dataset.
64
109
  */
65
- function runTask({ experimentId, task, dataset, repetition, onComplete, logger, }) {
66
- logger.info(`🔧 (${repetition}) Running task "${task.name}" on dataset "${dataset.id}"`);
110
+ function runTask({ client, experimentId, task, dataset, onComplete, logger, concurrency = 5, isDryRun, nExamples, }) {
111
+ logger.info(`🔧 Running task "${task.name}" on dataset "${dataset.id}"`);
67
112
  const run = async (example) => {
113
+ logger.info(`🔧 Running task "${task.name}" on example "${example.id} of dataset "${dataset.id}"`);
68
114
  const thisRun = {
69
115
  id: id(),
70
- traceId: id(),
116
+ traceId: null, // TODO: fill this in once we trace experiments
71
117
  experimentId,
72
118
  datasetExampleId: example.id,
73
119
  startTime: new Date(),
74
- repetitionNumber: repetition,
75
120
  endTime: new Date(), // will get replaced with actual end time
76
121
  output: null,
77
122
  error: null,
@@ -88,17 +133,46 @@ function runTask({ experimentId, task, dataset, repetition, onComplete, logger,
88
133
  thisRun.error = error instanceof Error ? error.message : "Unknown error";
89
134
  }
90
135
  thisRun.endTime = new Date();
136
+ if (!isDryRun) {
137
+ // Log the run to the server
138
+ // We log this without awaiting (e.g. best effort)
139
+ const res = await client.POST("/v1/experiments/{experiment_id}/runs", {
140
+ params: {
141
+ path: {
142
+ experiment_id: experimentId,
143
+ },
144
+ },
145
+ body: {
146
+ dataset_example_id: example.id,
147
+ output: thisRun.output,
148
+ repetition_number: 0,
149
+ start_time: thisRun.startTime.toISOString(),
150
+ end_time: thisRun.endTime.toISOString(),
151
+ trace_id: thisRun.traceId,
152
+ error: thisRun.error,
153
+ },
154
+ });
155
+ // replace the local run id with the server-assigned id
156
+ thisRun.id = res.data?.data.id ?? thisRun.id;
157
+ }
91
158
  onComplete(thisRun);
159
+ return thisRun;
92
160
  };
93
- return Promise.all(dataset.examples.map(run));
161
+ const q = queue(run, concurrency);
162
+ const examplesToUse = dataset.examples.slice(0, nExamples);
163
+ examplesToUse.forEach((example) => q.push(example));
164
+ return q.drain();
94
165
  }
95
166
  /**
96
167
  * Evaluate an experiment.
97
168
  *
98
169
  * @experimental This feature is not complete, and will change in the future.
99
- * @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
100
170
  */
101
- export async function evaluateExperiment({ experiment, evaluators, client: _client, logger, }) {
171
+ export async function evaluateExperiment({ experiment, evaluators, client: _client, logger, concurrency = 5, dryRun = false, }) {
172
+ const isDryRun = typeof dryRun === "number" || dryRun === true;
173
+ const nRuns = typeof dryRun === "number"
174
+ ? Math.max(dryRun, Object.keys(experiment.runs).length)
175
+ : Object.keys(experiment.runs).length;
102
176
  const client = _client ?? createClient();
103
177
  const dataset = await getDatasetBySelector({
104
178
  dataset: experiment.datasetId,
@@ -107,6 +181,7 @@ export async function evaluateExperiment({ experiment, evaluators, client: _clie
107
181
  invariant(dataset, `Dataset "${experiment.datasetId}" not found`);
108
182
  invariant(dataset.examples.length > 0, `Dataset "${experiment.datasetId}" has no examples`);
109
183
  invariant(experiment.runs, `Experiment "${experiment.id}" has no runs`);
184
+ const runsToEvaluate = Object.values(experiment.runs).slice(0, nRuns);
110
185
  if (evaluators?.length === 0) {
111
186
  return {
112
187
  ...experiment,
@@ -123,12 +198,40 @@ export async function evaluateExperiment({ experiment, evaluators, client: _clie
123
198
  evaluationRuns[run.id] = run;
124
199
  };
125
200
  // Run evaluators against all runs
126
- await Promise.all(evaluators.map((evaluator) => Promise.all(Object.values(experiment.runs).map((run) => runEvaluator({
201
+ // Flat list of evaluator + run tuples
202
+ const evaluatorsAndRuns = evaluators.flatMap((evaluator) => runsToEvaluate.map((run) => ({
127
203
  evaluator,
128
204
  run,
129
- exampleCache: examplesById,
130
- onComplete: onEvaluationComplete,
131
- })))));
205
+ })));
206
+ const evaluatorsQueue = queue(async (evaluatorAndRun) => {
207
+ const evalResult = await runEvaluator({
208
+ evaluator: evaluatorAndRun.evaluator,
209
+ run: evaluatorAndRun.run,
210
+ exampleCache: examplesById,
211
+ onComplete: onEvaluationComplete,
212
+ });
213
+ if (!isDryRun) {
214
+ logger.info(`📝 Logging evaluation ${evalResult.id}`);
215
+ // Log the evaluation to the server
216
+ // We log this without awaiting (e.g. best effort)
217
+ client.POST("/v1/experiment_evaluations", {
218
+ body: {
219
+ experiment_run_id: evaluatorAndRun.run.id,
220
+ name: evaluatorAndRun.evaluator.name,
221
+ annotator_kind: evaluatorAndRun.evaluator.kind,
222
+ start_time: evalResult.startTime.toISOString(),
223
+ end_time: evalResult.endTime.toISOString(),
224
+ result: {
225
+ ...evalResult.result,
226
+ },
227
+ error: evalResult.error,
228
+ trace_id: evalResult.traceId,
229
+ },
230
+ });
231
+ }
232
+ }, concurrency);
233
+ evaluatorsAndRuns.forEach((evaluatorAndRun) => evaluatorsQueue.push(evaluatorAndRun));
234
+ await evaluatorsQueue.drain();
132
235
  logger.info(`✅ Evaluation runs completed`);
133
236
  return {
134
237
  ...experiment,
@@ -139,7 +242,6 @@ export async function evaluateExperiment({ experiment, evaluators, client: _clie
139
242
  * Run an evaluator against a run.
140
243
  *
141
244
  * @experimental This feature is not complete, and will change in the future.
142
- * @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
143
245
  */
144
246
  async function runEvaluator({ evaluator, run, exampleCache, onComplete, }) {
145
247
  const example = exampleCache[run.datasetExampleId];
@@ -147,7 +249,7 @@ async function runEvaluator({ evaluator, run, exampleCache, onComplete, }) {
147
249
  const evaluate = async () => {
148
250
  const thisEval = {
149
251
  id: id(),
150
- traceId: id(),
252
+ traceId: null, // TODO: fill this in once we trace experiments
151
253
  experimentRunId: run.id,
152
254
  startTime: new Date(),
153
255
  endTime: new Date(), // will get replaced with actual end time
@@ -170,6 +272,7 @@ async function runEvaluator({ evaluator, run, exampleCache, onComplete, }) {
170
272
  }
171
273
  thisEval.endTime = new Date();
172
274
  onComplete(thisEval);
275
+ return thisEval;
173
276
  };
174
277
  return evaluate();
175
278
  }
@@ -177,15 +280,15 @@ async function runEvaluator({ evaluator, run, exampleCache, onComplete, }) {
177
280
  * Wrap an evaluator function in an object with a name property.
178
281
  *
179
282
  * @experimental This feature is not complete, and will change in the future.
180
- * @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
181
283
  *
182
284
  * @param name - The name of the evaluator.
183
285
  * @param evaluate - The evaluator function.
184
286
  * @returns The evaluator object.
185
287
  */
186
- export function asEvaluator(name, evaluate) {
288
+ export function asEvaluator({ name, kind, evaluate, }) {
187
289
  return {
188
290
  name,
291
+ kind,
189
292
  evaluate,
190
293
  };
191
294
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runExperiment.js","sourceRoot":"","sources":["../../../src/experiments/runExperiment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runExperiment.js","sourceRoot":"","sources":["../../../src/experiments/runExperiment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { ClientFn } from "../types/core.js";
2
+ import { SpanAnnotation } from "./types.js";
3
+ /**
4
+ * Parameters to add a span annotation
5
+ */
6
+ interface AddSpanAnnotationParams extends ClientFn {
7
+ spanAnnotation: SpanAnnotation;
8
+ }
9
+ /**
10
+ * Add an annotation to a span.
11
+ *
12
+ * The annotation can be of type "LLM", "CODE", or "HUMAN" and can include a label, score, and metadata.
13
+ * If an identifier is provided and an annotation with that identifier already exists, it will be updated.
14
+ *
15
+ * @param params - The parameters to add a span annotation
16
+ * @returns The ID of the created or updated annotation
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const result = await addSpanAnnotation({
21
+ * spanAnnotation: {
22
+ * spanId: "123abc",
23
+ * name: "quality_score",
24
+ * label: "good",
25
+ * score: 0.95,
26
+ * annotatorKind: "LLM",
27
+ * identifier: "custom_id_123",
28
+ * metadata: {
29
+ * model: "gpt-4"
30
+ * }
31
+ * }
32
+ * });
33
+ * ```
34
+ */
35
+ export declare function addSpanAnnotation({ client: _client, spanAnnotation, }: AddSpanAnnotationParams): Promise<{
36
+ id: string;
37
+ }>;
38
+ export {};
39
+ //# sourceMappingURL=addSpanAnnotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addSpanAnnotation.d.ts","sourceRoot":"","sources":["../../../src/spans/addSpanAnnotation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAwB,MAAM,SAAS,CAAC;AAE/D;;GAEG;AACH,UAAU,uBAAwB,SAAQ,QAAQ;IAChD,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,MAAM,EAAE,OAAO,EACf,cAAc,GACf,EAAE,uBAAuB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBnD"}
@@ -0,0 +1,44 @@
1
+ import { createClient } from "../client.js";
2
+ import { toSpanAnnotationData } from "./types.js";
3
+ /**
4
+ * Add an annotation to a span.
5
+ *
6
+ * The annotation can be of type "LLM", "CODE", or "HUMAN" and can include a label, score, and metadata.
7
+ * If an identifier is provided and an annotation with that identifier already exists, it will be updated.
8
+ *
9
+ * @param params - The parameters to add a span annotation
10
+ * @returns The ID of the created or updated annotation
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const result = await addSpanAnnotation({
15
+ * spanAnnotation: {
16
+ * spanId: "123abc",
17
+ * name: "quality_score",
18
+ * label: "good",
19
+ * score: 0.95,
20
+ * annotatorKind: "LLM",
21
+ * identifier: "custom_id_123",
22
+ * metadata: {
23
+ * model: "gpt-4"
24
+ * }
25
+ * }
26
+ * });
27
+ * ```
28
+ */
29
+ export async function addSpanAnnotation({ client: _client, spanAnnotation, }) {
30
+ const client = _client ?? createClient();
31
+ const { data, error } = await client.POST("/v1/span_annotations", {
32
+ body: {
33
+ data: [toSpanAnnotationData(spanAnnotation)],
34
+ },
35
+ });
36
+ if (error) {
37
+ throw new Error(`Failed to add span annotation: ${error}`);
38
+ }
39
+ if (!data?.data?.[0]?.id) {
40
+ throw new Error("No annotation ID returned from server");
41
+ }
42
+ return data.data[0];
43
+ }
44
+ //# sourceMappingURL=addSpanAnnotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addSpanAnnotation.js","sourceRoot":"","sources":["../../../src/spans/addSpanAnnotation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAkB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAS/D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,MAAM,EAAE,OAAO,EACf,cAAc,GACU;IACxB,MAAM,MAAM,GAAG,OAAO,IAAI,YAAY,EAAE,CAAC;IAEzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;QAChE,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;SAC7C;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./addSpanAnnotation.js";
2
+ export * from "./logSpanAnnotations.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spans/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./addSpanAnnotation.js";
2
+ export * from "./logSpanAnnotations.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/spans/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { ClientFn } from "../types/core.js";
2
+ import { SpanAnnotation } from "./types.js";
3
+ /**
4
+ * Parameters to log multiple span annotations
5
+ */
6
+ interface LogSpanAnnotationsParams extends ClientFn {
7
+ /**
8
+ * The span annotations to log
9
+ */
10
+ spanAnnotations: SpanAnnotation[];
11
+ }
12
+ /**
13
+ * Log multiple span annotations in a single request.
14
+ *
15
+ * Each annotation can be of type "LLM", "CODE", or "HUMAN" and can include a label, score, and metadata.
16
+ * If an identifier is provided and an annotation with that identifier already exists, it will be updated.
17
+ *
18
+ * @param params - The parameters to log span annotations
19
+ * @returns The IDs of the created or updated annotations
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const results = await logSpanAnnotations({
24
+ * spanAnnotations: [
25
+ * {
26
+ * spanId: "123abc",
27
+ * name: "quality_score",
28
+ * label: "good",
29
+ * score: 0.95,
30
+ * annotatorKind: "LLM",
31
+ * identifier: "custom_id_123",
32
+ * metadata: {
33
+ * model: "gpt-4"
34
+ * }
35
+ * },
36
+ * {
37
+ * spanId: "456def",
38
+ * name: "sentiment",
39
+ * label: "positive",
40
+ * score: 0.8,
41
+ * annotatorKind: "CODE"
42
+ * }
43
+ * ]
44
+ * });
45
+ * ```
46
+ */
47
+ export declare function logSpanAnnotations({ client: _client, spanAnnotations, }: LogSpanAnnotationsParams): Promise<{
48
+ id: string;
49
+ }[]>;
50
+ export {};
51
+ //# sourceMappingURL=logSpanAnnotations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSpanAnnotations.d.ts","sourceRoot":"","sources":["../../../src/spans/logSpanAnnotations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAwB,MAAM,SAAS,CAAC;AAE/D;;GAEG;AACH,UAAU,wBAAyB,SAAQ,QAAQ;IACjD;;OAEG;IACH,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,MAAM,EAAE,OAAO,EACf,eAAe,GAChB,EAAE,wBAAwB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAkBtD"}
@@ -0,0 +1,53 @@
1
+ import { createClient } from "../client.js";
2
+ import { toSpanAnnotationData } from "./types.js";
3
+ /**
4
+ * Log multiple span annotations in a single request.
5
+ *
6
+ * Each annotation can be of type "LLM", "CODE", or "HUMAN" and can include a label, score, and metadata.
7
+ * If an identifier is provided and an annotation with that identifier already exists, it will be updated.
8
+ *
9
+ * @param params - The parameters to log span annotations
10
+ * @returns The IDs of the created or updated annotations
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const results = await logSpanAnnotations({
15
+ * spanAnnotations: [
16
+ * {
17
+ * spanId: "123abc",
18
+ * name: "quality_score",
19
+ * label: "good",
20
+ * score: 0.95,
21
+ * annotatorKind: "LLM",
22
+ * identifier: "custom_id_123",
23
+ * metadata: {
24
+ * model: "gpt-4"
25
+ * }
26
+ * },
27
+ * {
28
+ * spanId: "456def",
29
+ * name: "sentiment",
30
+ * label: "positive",
31
+ * score: 0.8,
32
+ * annotatorKind: "CODE"
33
+ * }
34
+ * ]
35
+ * });
36
+ * ```
37
+ */
38
+ export async function logSpanAnnotations({ client: _client, spanAnnotations, }) {
39
+ const client = _client ?? createClient();
40
+ const { data, error } = await client.POST("/v1/span_annotations", {
41
+ body: {
42
+ data: spanAnnotations.map(toSpanAnnotationData),
43
+ },
44
+ });
45
+ if (error) {
46
+ throw new Error(`Failed to log span annotations: ${error}`);
47
+ }
48
+ if (!data?.data?.length) {
49
+ throw new Error("No annotation IDs returned from server");
50
+ }
51
+ return data.data;
52
+ }
53
+ //# sourceMappingURL=logSpanAnnotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSpanAnnotations.js","sourceRoot":"","sources":["../../../src/spans/logSpanAnnotations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAkB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAY/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,MAAM,EAAE,OAAO,EACf,eAAe,GACU;IACzB,MAAM,MAAM,GAAG,OAAO,IAAI,YAAY,EAAE,CAAC;IAEzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;QAChE,IAAI,EAAE;YACJ,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,oBAAoB,CAAC;SAChD;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { paths } from "../__generated__/api/v1.js";
2
+ type SpanAnnotationData = paths["/v1/span_annotations"]["post"]["requestBody"]["content"]["application/json"]["data"][0];
3
+ /**
4
+ * Parameters for a single span annotation
5
+ */
6
+ export interface SpanAnnotation {
7
+ /**
8
+ * The OpenTelemetry Span ID (hex format without 0x prefix)
9
+ */
10
+ spanId: string;
11
+ /**
12
+ * The name of the annotation
13
+ */
14
+ name: string;
15
+ /**
16
+ * The label assigned by the annotation
17
+ */
18
+ label?: string;
19
+ /**
20
+ * The score assigned by the annotation
21
+ */
22
+ score?: number;
23
+ /**
24
+ * The identifier of the annotation. If provided, the annotation will be updated if it already exists.
25
+ */
26
+ identifier?: string;
27
+ /**
28
+ * Metadata for the annotation
29
+ */
30
+ metadata?: Record<string, unknown>;
31
+ /**
32
+ * The kind of annotator used for the annotation
33
+ * Can be "HUMAN", "LLM", or "CODE"
34
+ * @default "HUMAN"
35
+ */
36
+ annotatorKind?: SpanAnnotationData["annotator_kind"];
37
+ }
38
+ /**
39
+ * Convert a SpanAnnotation to the API format
40
+ */
41
+ export declare function toSpanAnnotationData(annotation: SpanAnnotation): SpanAnnotationData;
42
+ export {};
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/spans/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,KAAK,kBAAkB,GACrB,KAAK,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,cAAc,GACzB,kBAAkB,CAapB"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Convert a SpanAnnotation to the API format
3
+ */
4
+ export function toSpanAnnotationData(annotation) {
5
+ return {
6
+ span_id: annotation.spanId,
7
+ name: annotation.name,
8
+ annotator_kind: annotation.annotatorKind ?? "HUMAN",
9
+ result: {
10
+ label: annotation.label ?? null,
11
+ score: annotation.score ?? null,
12
+ explanation: null,
13
+ },
14
+ metadata: annotation.metadata ?? null,
15
+ identifier: annotation.identifier ?? "",
16
+ };
17
+ }
18
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/spans/types.ts"],"names":[],"mappings":"AAyCA;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAA0B;IAE1B,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,MAAM;QAC1B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,cAAc,EAAE,UAAU,CAAC,aAAa,IAAI,OAAO;QACnD,MAAM,EAAE;YACN,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,IAAI;YAC/B,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,IAAI;YAC/B,WAAW,EAAE,IAAI;SAClB;QACD,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,IAAI;QACrC,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,EAAE;KACxC,CAAC;AACJ,CAAC"}