UNPKG

@arizeai/phoenix-client

Version:

A client for the Phoenix API

73 lines (67 loc) 1.9 kB
import { createClient } from "../client"; import { ClientFn } from "../types/core"; import { DatasetSelector, Example } from "../types/datasets"; import { getDatasetInfo } from "./getDatasetInfo"; import invariant from "tiny-invariant"; export type AppendDatasetExamplesParams = ClientFn & { /** * The dataset to append examples to */ dataset: DatasetSelector; /** * The examples to append to the dataset */ examples: Example[]; }; export type AppendDatasetExamplesResponse = { datasetId: string; // TODO: respond with the versionId // versionId: string; }; /** * Append examples to an existing dataset * @experimental this interface may change in the future */ export async function appendDatasetExamples({ client: _client, dataset, examples, }: AppendDatasetExamplesParams): Promise<AppendDatasetExamplesResponse> { const client = _client || createClient(); const inputs = examples.map((example) => example.input); const outputs = examples.map((example) => example.output ?? {}); // Treat null as an empty object const metadata = examples.map((example) => example.metadata ?? {}); const splits = examples.map((example) => example.splits !== undefined ? example.splits : null ); let datasetName: string; if ("datasetName" in dataset) { datasetName = dataset.datasetName; } else { const datasetInfo = await getDatasetInfo({ client, dataset, }); datasetName = datasetInfo.name; } const appendResponse = await client.POST("/v1/datasets/upload", { params: { query: { sync: true, }, }, body: { name: datasetName, action: "append", inputs, outputs, metadata, splits, }, }); invariant(appendResponse.data?.data, "Failed to append dataset examples"); const datasetId = appendResponse.data.data.dataset_id; return { datasetId, }; }