@arizeai/phoenix-client
Version:
A client for the Phoenix API
81 lines • 3.54 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.appendDatasetExamples = appendDatasetExamples;
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
const client_1 = require("../client");
const getDatasetInfo_1 = require("./getDatasetInfo");
/**
* Append examples to an existing dataset.
*
* @experimental this interface may change in the future
*
* @param params - The parameters for appending examples
* @param params.client - Optional Phoenix client instance
* @param params.dataset - The dataset to append examples to (by ID or name)
* @param params.examples - The examples to append. Each example can include:
* - `input`: Required input data for the example
* - `output`: Optional expected output data
* - `metadata`: Optional metadata for the example
* - `splits`: Optional split assignment (string, array of strings, or null)
* - `spanId`: Optional OpenTelemetry span ID to link the example back to its source span
*
* @returns A promise that resolves to the dataset ID
*
* @example
* ```ts
* // Append examples with span links to an existing dataset
* const { datasetId } = await appendDatasetExamples({
* dataset: { datasetName: "qa-dataset" },
* examples: [
* {
* input: { question: "What is deep learning?" },
* output: { answer: "Deep learning is..." },
* spanId: "span123abc" // Links to the source span
* }
* ]
* });
* ```
*/
async function appendDatasetExamples({ client: _client, dataset, examples, }) {
var _a;
const client = _client || (0, client_1.createClient)();
const inputs = examples.map((example) => example.input);
const outputs = examples.map((example) => { var _a; return (_a = example.output) !== null && _a !== void 0 ? _a : {}; }); // Treat null as an empty object
const metadata = examples.map((example) => { var _a; return (_a = example.metadata) !== null && _a !== void 0 ? _a : {}; });
const splits = examples.map((example) => example.splits !== undefined ? example.splits : null);
// Extract span IDs from examples, preserving null/undefined as null
const spanIds = examples.map((example) => { var _a; return (_a = example === null || example === void 0 ? void 0 : example.spanId) !== null && _a !== void 0 ? _a : null; });
// Only include span_ids in the request if at least one example has a span ID
const hasSpanIds = spanIds.some((id) => id !== null);
let datasetName;
if ("datasetName" in dataset) {
datasetName = dataset.datasetName;
}
else {
const datasetInfo = await (0, getDatasetInfo_1.getDatasetInfo)({
client,
dataset,
});
datasetName = datasetInfo.name;
}
const appendResponse = await client.POST("/v1/datasets/upload", {
params: {
query: {
sync: true,
},
},
body: Object.assign({ name: datasetName, action: "append", inputs,
outputs,
metadata,
splits }, (hasSpanIds ? { span_ids: spanIds } : {})),
});
(0, tiny_invariant_1.default)((_a = appendResponse.data) === null || _a === void 0 ? void 0 : _a.data, "Failed to append dataset examples");
const datasetId = appendResponse.data.data.dataset_id;
return {
datasetId,
};
}
//# sourceMappingURL=appendDatasetExamples.js.map