@arizeai/phoenix-client 5.2.0 → 5.3.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.
- package/dist/esm/__generated__/api/v1.d.ts +321 -9
- package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
- package/dist/esm/client.d.ts +2 -2
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +1 -1
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/datasets/appendDatasetExamples.d.ts +1 -1
- package/dist/esm/datasets/appendDatasetExamples.d.ts.map +1 -1
- package/dist/esm/datasets/appendDatasetExamples.js +1 -1
- package/dist/esm/datasets/appendDatasetExamples.js.map +1 -1
- package/dist/esm/datasets/createDataset.d.ts.map +1 -1
- package/dist/esm/datasets/createDataset.js.map +1 -1
- package/dist/esm/datasets/createOrGetDataset.d.ts.map +1 -1
- package/dist/esm/datasets/createOrGetDataset.js.map +1 -1
- package/dist/esm/datasets/getDataset.d.ts +1 -1
- package/dist/esm/datasets/getDataset.d.ts.map +1 -1
- package/dist/esm/datasets/getDataset.js.map +1 -1
- package/dist/esm/datasets/getDatasetExamples.d.ts +1 -1
- package/dist/esm/datasets/getDatasetExamples.d.ts.map +1 -1
- package/dist/esm/datasets/getDatasetExamples.js +1 -1
- package/dist/esm/datasets/getDatasetExamples.js.map +1 -1
- package/dist/esm/datasets/getDatasetInfo.d.ts +1 -1
- package/dist/esm/datasets/getDatasetInfo.d.ts.map +1 -1
- package/dist/esm/datasets/getDatasetInfo.js +1 -1
- package/dist/esm/datasets/getDatasetInfo.js.map +1 -1
- package/dist/esm/datasets/listDatasets.d.ts +1 -1
- package/dist/esm/datasets/listDatasets.d.ts.map +1 -1
- package/dist/esm/datasets/listDatasets.js.map +1 -1
- package/dist/esm/experiments/createExperiment.d.ts +39 -0
- package/dist/esm/experiments/createExperiment.d.ts.map +1 -0
- package/dist/esm/experiments/createExperiment.js +43 -0
- package/dist/esm/experiments/createExperiment.js.map +1 -0
- package/dist/esm/experiments/deleteExperiment.d.ts +36 -0
- package/dist/esm/experiments/deleteExperiment.d.ts.map +1 -0
- package/dist/esm/experiments/deleteExperiment.js +49 -0
- package/dist/esm/experiments/deleteExperiment.js.map +1 -0
- package/dist/esm/experiments/getExperiment.d.ts.map +1 -1
- package/dist/esm/experiments/getExperiment.js.map +1 -1
- package/dist/esm/experiments/getExperimentInfo.d.ts.map +1 -1
- package/dist/esm/experiments/getExperimentInfo.js +10 -3
- package/dist/esm/experiments/getExperimentInfo.js.map +1 -1
- package/dist/esm/experiments/getExperimentRuns.d.ts.map +1 -1
- package/dist/esm/experiments/getExperimentRuns.js.map +1 -1
- package/dist/esm/experiments/index.d.ts +5 -0
- package/dist/esm/experiments/index.d.ts.map +1 -1
- package/dist/esm/experiments/index.js +5 -0
- package/dist/esm/experiments/index.js.map +1 -1
- package/dist/esm/experiments/listExperiments.d.ts +29 -0
- package/dist/esm/experiments/listExperiments.d.ts.map +1 -0
- package/dist/esm/experiments/listExperiments.js +59 -0
- package/dist/esm/experiments/listExperiments.js.map +1 -0
- package/dist/esm/experiments/resumeEvaluation.d.ts +105 -0
- package/dist/esm/experiments/resumeEvaluation.d.ts.map +1 -0
- package/dist/esm/experiments/resumeEvaluation.js +558 -0
- package/dist/esm/experiments/resumeEvaluation.js.map +1 -0
- package/dist/esm/experiments/resumeExperiment.d.ts +102 -0
- package/dist/esm/experiments/resumeExperiment.d.ts.map +1 -0
- package/dist/esm/experiments/resumeExperiment.js +517 -0
- package/dist/esm/experiments/resumeExperiment.js.map +1 -0
- package/dist/esm/experiments/runExperiment.d.ts +2 -2
- package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
- package/dist/esm/experiments/runExperiment.js +35 -9
- package/dist/esm/experiments/runExperiment.js.map +1 -1
- package/dist/esm/prompts/createPrompt.d.ts +20 -2
- package/dist/esm/prompts/createPrompt.d.ts.map +1 -1
- package/dist/esm/prompts/createPrompt.js +14 -1
- package/dist/esm/prompts/createPrompt.js.map +1 -1
- package/dist/esm/prompts/sdks/toAI.d.ts +2 -2
- package/dist/esm/prompts/sdks/toAI.d.ts.map +1 -1
- package/dist/esm/prompts/sdks/toAI.js +1 -1
- package/dist/esm/prompts/sdks/toAI.js.map +1 -1
- package/dist/esm/prompts/sdks/toAnthropic.d.ts +1 -1
- package/dist/esm/prompts/sdks/toAnthropic.d.ts.map +1 -1
- package/dist/esm/prompts/sdks/toAnthropic.js +1 -1
- package/dist/esm/prompts/sdks/toAnthropic.js.map +1 -1
- package/dist/esm/prompts/sdks/toOpenAI.d.ts +1 -1
- package/dist/esm/prompts/sdks/toOpenAI.d.ts.map +1 -1
- package/dist/esm/prompts/sdks/toOpenAI.js +2 -2
- package/dist/esm/prompts/sdks/toOpenAI.js.map +1 -1
- package/dist/esm/prompts/sdks/toSDK.d.ts +1 -1
- package/dist/esm/prompts/sdks/toSDK.d.ts.map +1 -1
- package/dist/esm/prompts/sdks/toSDK.js +2 -2
- package/dist/esm/prompts/sdks/toSDK.js.map +1 -1
- package/dist/esm/prompts/sdks/types.d.ts.map +1 -1
- package/dist/esm/schemas/llm/anthropic/converters.d.ts.map +1 -1
- package/dist/esm/schemas/llm/anthropic/converters.js +2 -2
- package/dist/esm/schemas/llm/anthropic/converters.js.map +1 -1
- package/dist/esm/schemas/llm/anthropic/messagePartSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/anthropic/messagePartSchemas.js +1 -1
- package/dist/esm/schemas/llm/anthropic/messagePartSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/anthropic/messageSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/anthropic/messageSchemas.js +1 -1
- package/dist/esm/schemas/llm/anthropic/messageSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/anthropic/toolCallSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/anthropic/toolCallSchemas.js +1 -1
- package/dist/esm/schemas/llm/anthropic/toolCallSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/anthropic/toolSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/anthropic/toolSchemas.js +1 -1
- package/dist/esm/schemas/llm/anthropic/toolSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/constants.d.ts +9 -9
- package/dist/esm/schemas/llm/constants.d.ts.map +1 -1
- package/dist/esm/schemas/llm/constants.js +8 -8
- package/dist/esm/schemas/llm/constants.js.map +1 -1
- package/dist/esm/schemas/llm/converters.d.ts +33 -33
- package/dist/esm/schemas/llm/converters.d.ts.map +1 -1
- package/dist/esm/schemas/llm/converters.js +1 -1
- package/dist/esm/schemas/llm/converters.js.map +1 -1
- package/dist/esm/schemas/llm/openai/converters.d.ts +2 -2
- package/dist/esm/schemas/llm/openai/converters.d.ts.map +1 -1
- package/dist/esm/schemas/llm/openai/converters.js +3 -3
- package/dist/esm/schemas/llm/openai/converters.js.map +1 -1
- package/dist/esm/schemas/llm/openai/messageSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/openai/messageSchemas.js +2 -2
- package/dist/esm/schemas/llm/openai/messageSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/openai/responseFormatSchema.d.ts.map +1 -1
- package/dist/esm/schemas/llm/openai/responseFormatSchema.js +1 -1
- package/dist/esm/schemas/llm/openai/responseFormatSchema.js.map +1 -1
- package/dist/esm/schemas/llm/openai/toolSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/openai/toolSchemas.js +1 -1
- package/dist/esm/schemas/llm/openai/toolSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/converters.d.ts.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/converters.js +5 -5
- package/dist/esm/schemas/llm/phoenixPrompt/converters.js.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.js +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.js +2 -2
- package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.js +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.js.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.js +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js +1 -1
- package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/schemas.d.ts +12 -12
- package/dist/esm/schemas/llm/schemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/schemas.js +8 -8
- package/dist/esm/schemas/llm/schemas.js.map +1 -1
- package/dist/esm/schemas/llm/types.d.ts +14 -14
- package/dist/esm/schemas/llm/types.d.ts.map +1 -1
- package/dist/esm/schemas/llm/utils.d.ts.map +1 -1
- package/dist/esm/schemas/llm/utils.js +8 -8
- package/dist/esm/schemas/llm/utils.js.map +1 -1
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts +8 -8
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.js +1 -1
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.js.map +1 -1
- package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts +8 -8
- package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts.map +1 -1
- package/dist/esm/schemas/llm/vercel/messageSchemas.js +1 -1
- package/dist/esm/schemas/llm/vercel/messageSchemas.js.map +1 -1
- package/dist/esm/sessions/addSessionAnnotation.d.ts.map +1 -1
- package/dist/esm/sessions/addSessionAnnotation.js.map +1 -1
- package/dist/esm/sessions/logSessionAnnotations.d.ts.map +1 -1
- package/dist/esm/sessions/logSessionAnnotations.js.map +1 -1
- package/dist/esm/spans/addDocumentAnnotation.d.ts.map +1 -1
- package/dist/esm/spans/addDocumentAnnotation.js.map +1 -1
- package/dist/esm/spans/addSpanAnnotation.d.ts.map +1 -1
- package/dist/esm/spans/addSpanAnnotation.js.map +1 -1
- package/dist/esm/spans/getSpanAnnotations.d.ts +1 -1
- package/dist/esm/spans/getSpanAnnotations.d.ts.map +1 -1
- package/dist/esm/spans/getSpanAnnotations.js.map +1 -1
- package/dist/esm/spans/getSpans.d.ts +1 -1
- package/dist/esm/spans/getSpans.d.ts.map +1 -1
- package/dist/esm/spans/getSpans.js.map +1 -1
- package/dist/esm/spans/logDocumentAnnotations.d.ts.map +1 -1
- package/dist/esm/spans/logDocumentAnnotations.js.map +1 -1
- package/dist/esm/spans/logSpanAnnotations.d.ts.map +1 -1
- package/dist/esm/spans/logSpanAnnotations.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types/experiments.d.ts +60 -3
- package/dist/esm/types/experiments.d.ts.map +1 -1
- package/dist/esm/utils/channel.d.ts +229 -0
- package/dist/esm/utils/channel.d.ts.map +1 -0
- package/dist/esm/utils/channel.js +352 -0
- package/dist/esm/utils/channel.js.map +1 -0
- package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -1
- package/dist/esm/utils/formatPromptMessages.js +1 -1
- package/dist/esm/utils/formatPromptMessages.js.map +1 -1
- package/dist/esm/utils/getPromptBySelector.d.ts +1 -1
- package/dist/esm/utils/getPromptBySelector.d.ts.map +1 -1
- package/dist/esm/utils/getPromptBySelector.js +1 -1
- package/dist/esm/utils/getPromptBySelector.js.map +1 -1
- package/dist/esm/utils/isHttpError.d.ts +21 -0
- package/dist/esm/utils/isHttpError.d.ts.map +1 -0
- package/dist/esm/utils/isHttpError.js +33 -0
- package/dist/esm/utils/isHttpError.js.map +1 -0
- package/dist/src/__generated__/api/v1.d.ts +321 -9
- package/dist/src/__generated__/api/v1.d.ts.map +1 -1
- package/dist/src/client.d.ts +2 -2
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +1 -1
- package/dist/src/client.js.map +1 -1
- package/dist/src/datasets/appendDatasetExamples.d.ts +1 -1
- package/dist/src/datasets/appendDatasetExamples.d.ts.map +1 -1
- package/dist/src/datasets/appendDatasetExamples.js +1 -1
- package/dist/src/datasets/appendDatasetExamples.js.map +1 -1
- package/dist/src/datasets/createDataset.d.ts.map +1 -1
- package/dist/src/datasets/createDataset.js.map +1 -1
- package/dist/src/datasets/createOrGetDataset.d.ts.map +1 -1
- package/dist/src/datasets/createOrGetDataset.js.map +1 -1
- package/dist/src/datasets/getDataset.d.ts +1 -1
- package/dist/src/datasets/getDataset.d.ts.map +1 -1
- package/dist/src/datasets/getDataset.js.map +1 -1
- package/dist/src/datasets/getDatasetExamples.d.ts +1 -1
- package/dist/src/datasets/getDatasetExamples.d.ts.map +1 -1
- package/dist/src/datasets/getDatasetExamples.js +1 -1
- package/dist/src/datasets/getDatasetExamples.js.map +1 -1
- package/dist/src/datasets/getDatasetInfo.d.ts +1 -1
- package/dist/src/datasets/getDatasetInfo.d.ts.map +1 -1
- package/dist/src/datasets/getDatasetInfo.js +1 -1
- package/dist/src/datasets/getDatasetInfo.js.map +1 -1
- package/dist/src/datasets/listDatasets.d.ts +1 -1
- package/dist/src/datasets/listDatasets.d.ts.map +1 -1
- package/dist/src/datasets/listDatasets.js.map +1 -1
- package/dist/src/experiments/createExperiment.d.ts +39 -0
- package/dist/src/experiments/createExperiment.d.ts.map +1 -0
- package/dist/src/experiments/createExperiment.js +43 -0
- package/dist/src/experiments/createExperiment.js.map +1 -0
- package/dist/src/experiments/deleteExperiment.d.ts +36 -0
- package/dist/src/experiments/deleteExperiment.d.ts.map +1 -0
- package/dist/src/experiments/deleteExperiment.js +52 -0
- package/dist/src/experiments/deleteExperiment.js.map +1 -0
- package/dist/src/experiments/getExperiment.d.ts.map +1 -1
- package/dist/src/experiments/getExperiment.js.map +1 -1
- package/dist/src/experiments/getExperimentInfo.d.ts.map +1 -1
- package/dist/src/experiments/getExperimentInfo.js +10 -3
- package/dist/src/experiments/getExperimentInfo.js.map +1 -1
- package/dist/src/experiments/getExperimentRuns.d.ts.map +1 -1
- package/dist/src/experiments/getExperimentRuns.js.map +1 -1
- package/dist/src/experiments/index.d.ts +5 -0
- package/dist/src/experiments/index.d.ts.map +1 -1
- package/dist/src/experiments/index.js +5 -0
- package/dist/src/experiments/index.js.map +1 -1
- package/dist/src/experiments/listExperiments.d.ts +29 -0
- package/dist/src/experiments/listExperiments.d.ts.map +1 -0
- package/dist/src/experiments/listExperiments.js +66 -0
- package/dist/src/experiments/listExperiments.js.map +1 -0
- package/dist/src/experiments/resumeEvaluation.d.ts +105 -0
- package/dist/src/experiments/resumeEvaluation.d.ts.map +1 -0
- package/dist/src/experiments/resumeEvaluation.js +584 -0
- package/dist/src/experiments/resumeEvaluation.js.map +1 -0
- package/dist/src/experiments/resumeExperiment.d.ts +102 -0
- package/dist/src/experiments/resumeExperiment.d.ts.map +1 -0
- package/dist/src/experiments/resumeExperiment.js +540 -0
- package/dist/src/experiments/resumeExperiment.js.map +1 -0
- package/dist/src/experiments/runExperiment.d.ts +2 -2
- package/dist/src/experiments/runExperiment.d.ts.map +1 -1
- package/dist/src/experiments/runExperiment.js +34 -8
- package/dist/src/experiments/runExperiment.js.map +1 -1
- package/dist/src/prompts/createPrompt.d.ts +20 -2
- package/dist/src/prompts/createPrompt.d.ts.map +1 -1
- package/dist/src/prompts/createPrompt.js +14 -1
- package/dist/src/prompts/createPrompt.js.map +1 -1
- package/dist/src/prompts/sdks/toAI.d.ts +2 -2
- package/dist/src/prompts/sdks/toAI.d.ts.map +1 -1
- package/dist/src/prompts/sdks/toAI.js +1 -1
- package/dist/src/prompts/sdks/toAI.js.map +1 -1
- package/dist/src/prompts/sdks/toAnthropic.d.ts +1 -1
- package/dist/src/prompts/sdks/toAnthropic.d.ts.map +1 -1
- package/dist/src/prompts/sdks/toAnthropic.js +1 -1
- package/dist/src/prompts/sdks/toAnthropic.js.map +1 -1
- package/dist/src/prompts/sdks/toOpenAI.d.ts +1 -1
- package/dist/src/prompts/sdks/toOpenAI.d.ts.map +1 -1
- package/dist/src/prompts/sdks/toOpenAI.js +2 -2
- package/dist/src/prompts/sdks/toOpenAI.js.map +1 -1
- package/dist/src/prompts/sdks/toSDK.d.ts +1 -1
- package/dist/src/prompts/sdks/toSDK.d.ts.map +1 -1
- package/dist/src/prompts/sdks/toSDK.js +2 -2
- package/dist/src/prompts/sdks/toSDK.js.map +1 -1
- package/dist/src/prompts/sdks/types.d.ts.map +1 -1
- package/dist/src/schemas/llm/anthropic/converters.d.ts.map +1 -1
- package/dist/src/schemas/llm/anthropic/converters.js +2 -2
- package/dist/src/schemas/llm/anthropic/converters.js.map +1 -1
- package/dist/src/schemas/llm/anthropic/messagePartSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/anthropic/messagePartSchemas.js +1 -1
- package/dist/src/schemas/llm/anthropic/messagePartSchemas.js.map +1 -1
- package/dist/src/schemas/llm/anthropic/messageSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/anthropic/messageSchemas.js +1 -1
- package/dist/src/schemas/llm/anthropic/messageSchemas.js.map +1 -1
- package/dist/src/schemas/llm/anthropic/toolCallSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/anthropic/toolCallSchemas.js +1 -1
- package/dist/src/schemas/llm/anthropic/toolCallSchemas.js.map +1 -1
- package/dist/src/schemas/llm/anthropic/toolSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/anthropic/toolSchemas.js +1 -1
- package/dist/src/schemas/llm/anthropic/toolSchemas.js.map +1 -1
- package/dist/src/schemas/llm/constants.d.ts +9 -9
- package/dist/src/schemas/llm/constants.d.ts.map +1 -1
- package/dist/src/schemas/llm/constants.js +12 -12
- package/dist/src/schemas/llm/constants.js.map +1 -1
- package/dist/src/schemas/llm/converters.d.ts +33 -33
- package/dist/src/schemas/llm/converters.d.ts.map +1 -1
- package/dist/src/schemas/llm/converters.js +1 -1
- package/dist/src/schemas/llm/converters.js.map +1 -1
- package/dist/src/schemas/llm/openai/converters.d.ts +2 -2
- package/dist/src/schemas/llm/openai/converters.d.ts.map +1 -1
- package/dist/src/schemas/llm/openai/converters.js +8 -8
- package/dist/src/schemas/llm/openai/converters.js.map +1 -1
- package/dist/src/schemas/llm/openai/messageSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/openai/messageSchemas.js +2 -2
- package/dist/src/schemas/llm/openai/messageSchemas.js.map +1 -1
- package/dist/src/schemas/llm/openai/responseFormatSchema.d.ts.map +1 -1
- package/dist/src/schemas/llm/openai/responseFormatSchema.js +1 -1
- package/dist/src/schemas/llm/openai/responseFormatSchema.js.map +1 -1
- package/dist/src/schemas/llm/openai/toolSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/openai/toolSchemas.js +1 -1
- package/dist/src/schemas/llm/openai/toolSchemas.js.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/converters.d.ts.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/converters.js +5 -5
- package/dist/src/schemas/llm/phoenixPrompt/converters.js.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.js +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.js.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.js +2 -2
- package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.js.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.js +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.js.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.js.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.js +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.js.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js +1 -1
- package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -1
- package/dist/src/schemas/llm/schemas.d.ts +12 -12
- package/dist/src/schemas/llm/schemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/schemas.js +16 -16
- package/dist/src/schemas/llm/schemas.js.map +1 -1
- package/dist/src/schemas/llm/types.d.ts +14 -14
- package/dist/src/schemas/llm/types.d.ts.map +1 -1
- package/dist/src/schemas/llm/utils.d.ts.map +1 -1
- package/dist/src/schemas/llm/utils.js +19 -19
- package/dist/src/schemas/llm/utils.js.map +1 -1
- package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts +8 -8
- package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/vercel/messagePartSchemas.js +1 -1
- package/dist/src/schemas/llm/vercel/messagePartSchemas.js.map +1 -1
- package/dist/src/schemas/llm/vercel/messageSchemas.d.ts +8 -8
- package/dist/src/schemas/llm/vercel/messageSchemas.d.ts.map +1 -1
- package/dist/src/schemas/llm/vercel/messageSchemas.js +1 -1
- package/dist/src/schemas/llm/vercel/messageSchemas.js.map +1 -1
- package/dist/src/sessions/addSessionAnnotation.d.ts.map +1 -1
- package/dist/src/sessions/addSessionAnnotation.js.map +1 -1
- package/dist/src/sessions/logSessionAnnotations.d.ts.map +1 -1
- package/dist/src/sessions/logSessionAnnotations.js.map +1 -1
- package/dist/src/spans/addDocumentAnnotation.d.ts.map +1 -1
- package/dist/src/spans/addDocumentAnnotation.js.map +1 -1
- package/dist/src/spans/addSpanAnnotation.d.ts.map +1 -1
- package/dist/src/spans/addSpanAnnotation.js.map +1 -1
- package/dist/src/spans/getSpanAnnotations.d.ts +1 -1
- package/dist/src/spans/getSpanAnnotations.d.ts.map +1 -1
- package/dist/src/spans/getSpanAnnotations.js.map +1 -1
- package/dist/src/spans/getSpans.d.ts +1 -1
- package/dist/src/spans/getSpans.d.ts.map +1 -1
- package/dist/src/spans/getSpans.js.map +1 -1
- package/dist/src/spans/logDocumentAnnotations.d.ts.map +1 -1
- package/dist/src/spans/logDocumentAnnotations.js.map +1 -1
- package/dist/src/spans/logSpanAnnotations.d.ts.map +1 -1
- package/dist/src/spans/logSpanAnnotations.js.map +1 -1
- package/dist/src/types/experiments.d.ts +60 -3
- package/dist/src/types/experiments.d.ts.map +1 -1
- package/dist/src/utils/channel.d.ts +229 -0
- package/dist/src/utils/channel.d.ts.map +1 -0
- package/dist/src/utils/channel.js +385 -0
- package/dist/src/utils/channel.js.map +1 -0
- package/dist/src/utils/formatPromptMessages.d.ts.map +1 -1
- package/dist/src/utils/formatPromptMessages.js +1 -1
- package/dist/src/utils/formatPromptMessages.js.map +1 -1
- package/dist/src/utils/getPromptBySelector.d.ts +1 -1
- package/dist/src/utils/getPromptBySelector.d.ts.map +1 -1
- package/dist/src/utils/getPromptBySelector.js +1 -1
- package/dist/src/utils/getPromptBySelector.js.map +1 -1
- package/dist/src/utils/isHttpError.d.ts +21 -0
- package/dist/src/utils/isHttpError.d.ts.map +1 -0
- package/dist/src/utils/isHttpError.js +37 -0
- package/dist/src/utils/isHttpError.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/__generated__/api/v1.ts +321 -9
- package/src/client.ts +6 -5
- package/src/datasets/appendDatasetExamples.ts +4 -2
- package/src/datasets/createDataset.ts +1 -0
- package/src/datasets/createOrGetDataset.ts +2 -1
- package/src/datasets/getDataset.ts +2 -1
- package/src/datasets/getDatasetExamples.ts +4 -2
- package/src/datasets/getDatasetInfo.ts +4 -2
- package/src/datasets/listDatasets.ts +2 -1
- package/src/experiments/createExperiment.ts +90 -0
- package/src/experiments/deleteExperiment.ts +67 -0
- package/src/experiments/getExperiment.ts +1 -0
- package/src/experiments/getExperimentInfo.ts +11 -3
- package/src/experiments/getExperimentRuns.ts +3 -2
- package/src/experiments/index.ts +5 -0
- package/src/experiments/listExperiments.ts +83 -0
- package/src/experiments/resumeEvaluation.ts +799 -0
- package/src/experiments/resumeExperiment.ts +742 -0
- package/src/experiments/runExperiment.ts +55 -25
- package/src/prompts/createPrompt.ts +27 -9
- package/src/prompts/sdks/toAI.ts +6 -4
- package/src/prompts/sdks/toAnthropic.ts +7 -6
- package/src/prompts/sdks/toOpenAI.ts +10 -9
- package/src/prompts/sdks/toSDK.ts +5 -3
- package/src/prompts/sdks/types.ts +1 -0
- package/src/schemas/llm/anthropic/converters.ts +9 -7
- package/src/schemas/llm/anthropic/messagePartSchemas.ts +2 -1
- package/src/schemas/llm/anthropic/messageSchemas.ts +2 -2
- package/src/schemas/llm/anthropic/toolCallSchemas.ts +2 -1
- package/src/schemas/llm/anthropic/toolSchemas.ts +2 -1
- package/src/schemas/llm/constants.ts +14 -12
- package/src/schemas/llm/converters.ts +4 -3
- package/src/schemas/llm/openai/converters.ts +15 -13
- package/src/schemas/llm/openai/messageSchemas.ts +3 -3
- package/src/schemas/llm/openai/responseFormatSchema.ts +2 -1
- package/src/schemas/llm/openai/toolSchemas.ts +2 -1
- package/src/schemas/llm/phoenixPrompt/converters.ts +11 -10
- package/src/schemas/llm/phoenixPrompt/messagePartSchemas.ts +3 -2
- package/src/schemas/llm/phoenixPrompt/messageSchemas.ts +4 -3
- package/src/schemas/llm/phoenixPrompt/responseFormatSchema.ts +3 -2
- package/src/schemas/llm/phoenixPrompt/toolCallSchemas.ts +2 -2
- package/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.ts +3 -2
- package/src/schemas/llm/phoenixPrompt/toolSchemas.ts +3 -2
- package/src/schemas/llm/schemas.ts +9 -8
- package/src/schemas/llm/types.ts +17 -16
- package/src/schemas/llm/utils.ts +14 -12
- package/src/schemas/llm/vercel/messagePartSchemas.ts +2 -1
- package/src/schemas/llm/vercel/messageSchemas.ts +2 -2
- package/src/sessions/addSessionAnnotation.ts +1 -0
- package/src/sessions/logSessionAnnotations.ts +1 -0
- package/src/spans/addDocumentAnnotation.ts +1 -0
- package/src/spans/addSpanAnnotation.ts +1 -0
- package/src/spans/getSpanAnnotations.ts +1 -1
- package/src/spans/getSpans.ts +1 -1
- package/src/spans/logDocumentAnnotations.ts +1 -0
- package/src/spans/logSpanAnnotations.ts +1 -0
- package/src/types/experiments.ts +62 -3
- package/src/utils/channel.ts +397 -0
- package/src/utils/formatPromptMessages.ts +4 -3
- package/src/utils/getPromptBySelector.ts +4 -3
- package/src/utils/isHttpError.ts +45 -0
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
import { MimeType, OpenInferenceSpanKind, SemanticConventions, } from "@arizeai/openinference-semantic-conventions";
|
|
2
|
+
import { objectAsAttributes, register, SpanStatusCode, } from "@arizeai/phoenix-otel";
|
|
3
|
+
import { createClient } from "../client.js";
|
|
4
|
+
import { Channel, ChannelError } from "../utils/channel.js";
|
|
5
|
+
import { ensureString } from "../utils/ensureString.js";
|
|
6
|
+
import { toObjectHeaders } from "../utils/toObjectHeaders.js";
|
|
7
|
+
import { getExperimentInfo } from "./getExperimentInfo.js";
|
|
8
|
+
import invariant from "tiny-invariant";
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when evaluation is aborted due to a failure in stopOnFirstError mode.
|
|
11
|
+
* This provides semantic context that the abort was intentional, not an infrastructure failure.
|
|
12
|
+
* @internal - Not exported to minimize API surface area
|
|
13
|
+
*/
|
|
14
|
+
class EvaluationAbortedError extends Error {
|
|
15
|
+
constructor(message, cause) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "EvaluationAbortedError";
|
|
18
|
+
this.cause = cause;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Error thrown when the producer fails to fetch incomplete evaluations from the server.
|
|
23
|
+
* This is a critical error that should always be surfaced, even in stopOnFirstError=false mode.
|
|
24
|
+
* @internal - Not exported to minimize API surface area
|
|
25
|
+
*/
|
|
26
|
+
class EvaluationFetchError extends Error {
|
|
27
|
+
constructor(message, cause) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "EvaluationFetchError";
|
|
30
|
+
this.cause = cause;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const DEFAULT_PAGE_SIZE = 50;
|
|
34
|
+
/**
|
|
35
|
+
* Channel capacity multiplier for producer-consumer buffering.
|
|
36
|
+
* A value of 2 enables pipeline efficiency: workers process batch N while
|
|
37
|
+
* the producer fetches batch N+1, eliminating idle time without excessive
|
|
38
|
+
* memory usage. The channel blocks when full, providing natural backpressure.
|
|
39
|
+
*/
|
|
40
|
+
const CHANNEL_CAPACITY_MULTIPLIER = 2;
|
|
41
|
+
/**
|
|
42
|
+
* Transforms API incomplete evaluation response to IncompleteEvaluation
|
|
43
|
+
*/
|
|
44
|
+
function buildIncompleteEvaluation(apiResponse) {
|
|
45
|
+
return {
|
|
46
|
+
experimentRun: {
|
|
47
|
+
id: apiResponse.experiment_run.id,
|
|
48
|
+
experimentId: apiResponse.experiment_run.experiment_id,
|
|
49
|
+
datasetExampleId: apiResponse.experiment_run.dataset_example_id,
|
|
50
|
+
output: apiResponse.experiment_run.output ?? null,
|
|
51
|
+
startTime: new Date(apiResponse.experiment_run.start_time),
|
|
52
|
+
endTime: new Date(apiResponse.experiment_run.end_time),
|
|
53
|
+
error: apiResponse.experiment_run.error ?? null,
|
|
54
|
+
traceId: apiResponse.experiment_run.trace_id ?? null,
|
|
55
|
+
},
|
|
56
|
+
datasetExample: {
|
|
57
|
+
id: apiResponse.dataset_example.id,
|
|
58
|
+
input: apiResponse.dataset_example.input,
|
|
59
|
+
output: apiResponse.dataset_example.output ?? null,
|
|
60
|
+
metadata: apiResponse.dataset_example.metadata || {},
|
|
61
|
+
updatedAt: new Date(apiResponse.dataset_example.updated_at),
|
|
62
|
+
},
|
|
63
|
+
evaluationNames: apiResponse.evaluation_names,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Determines if an evaluator should run for an incomplete evaluation
|
|
68
|
+
*/
|
|
69
|
+
function shouldRunEvaluator(evaluator, incompleteEval) {
|
|
70
|
+
// Match evaluator name directly
|
|
71
|
+
return incompleteEval.evaluationNames.includes(evaluator.name);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Handles fetch errors with helpful version information for unsupported features
|
|
75
|
+
*/
|
|
76
|
+
async function handleEvaluationFetchError(error, client, featureName) {
|
|
77
|
+
// Check if this is a JSON parse error (likely 404 HTML response from old server)
|
|
78
|
+
const isJsonError = error instanceof SyntaxError &&
|
|
79
|
+
error.message.toLowerCase().includes("json");
|
|
80
|
+
if (isJsonError) {
|
|
81
|
+
// Fetch server version to provide helpful context
|
|
82
|
+
let versionInfo = "";
|
|
83
|
+
try {
|
|
84
|
+
const baseUrl = client.config.baseUrl || "";
|
|
85
|
+
const versionRes = await fetch(`${baseUrl}/arize_phoenix_version`);
|
|
86
|
+
if (versionRes.ok) {
|
|
87
|
+
const version = await versionRes.text();
|
|
88
|
+
versionInfo = ` Your current server version is ${version}.`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Ignore errors fetching version
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`The ${featureName} feature is not available on this Phoenix server. ` +
|
|
95
|
+
"Please upgrade your Phoenix server to use this feature." +
|
|
96
|
+
versionInfo);
|
|
97
|
+
}
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Sets up OpenTelemetry tracer for evaluation tracing
|
|
102
|
+
*/
|
|
103
|
+
function setupEvaluationTracer({ projectName, baseUrl, headers, useBatchSpanProcessor, diagLogLevel, setGlobalTracerProvider, }) {
|
|
104
|
+
if (!projectName) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const provider = register({
|
|
108
|
+
projectName,
|
|
109
|
+
url: baseUrl,
|
|
110
|
+
headers,
|
|
111
|
+
batch: useBatchSpanProcessor,
|
|
112
|
+
diagLogLevel,
|
|
113
|
+
global: setGlobalTracerProvider,
|
|
114
|
+
});
|
|
115
|
+
const tracer = provider.getTracer(projectName);
|
|
116
|
+
return { provider, tracer };
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Prints evaluation summary to logger
|
|
120
|
+
*/
|
|
121
|
+
function printEvaluationSummary({ logger, experimentId, totalProcessed, totalCompleted, }) {
|
|
122
|
+
logger.info("\n" + "=".repeat(70));
|
|
123
|
+
logger.info("📊 Evaluation Resume Summary");
|
|
124
|
+
logger.info("=".repeat(70));
|
|
125
|
+
logger.info(`Experiment ID: ${experimentId}`);
|
|
126
|
+
logger.info(`Runs processed: ${totalProcessed}`);
|
|
127
|
+
logger.info(`Evaluations completed: ${totalCompleted}`);
|
|
128
|
+
logger.info("=".repeat(70));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Resume incomplete evaluations for an experiment.
|
|
132
|
+
*
|
|
133
|
+
* This function identifies which evaluations have not been completed (either missing or failed)
|
|
134
|
+
* and runs the evaluators only for those runs. This is useful for:
|
|
135
|
+
* - Recovering from transient evaluator failures
|
|
136
|
+
* - Adding new evaluators to completed experiments
|
|
137
|
+
* - Completing partially evaluated experiments
|
|
138
|
+
*
|
|
139
|
+
* The function processes incomplete evaluations in batches using pagination to minimize memory usage.
|
|
140
|
+
*
|
|
141
|
+
* Evaluation names are matched to evaluator names. For example, if you pass
|
|
142
|
+
* an evaluator with name "accuracy", it will check for and resume any runs missing the "accuracy" evaluation.
|
|
143
|
+
*
|
|
144
|
+
* **Note:** Multi-output evaluators (evaluators that return an array of results) are not
|
|
145
|
+
* supported for resume operations. Each evaluator should produce a single evaluation
|
|
146
|
+
* result with a name matching the evaluator's name.
|
|
147
|
+
*
|
|
148
|
+
* @throws {Error} Throws different error types based on failure:
|
|
149
|
+
* - "EvaluationFetchError": Unable to fetch incomplete evaluations from the server.
|
|
150
|
+
* Always thrown regardless of stopOnFirstError, as it indicates critical infrastructure failure.
|
|
151
|
+
* - "EvaluationAbortedError": stopOnFirstError=true and an evaluator failed.
|
|
152
|
+
* Original error preserved in `cause` property.
|
|
153
|
+
* - Generic Error: Other evaluator execution errors or unexpected failures.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* import { resumeEvaluation } from "@arizeai/phoenix-client/experiments";
|
|
158
|
+
*
|
|
159
|
+
* // Standard usage: evaluation name matches evaluator name
|
|
160
|
+
* try {
|
|
161
|
+
* await resumeEvaluation({
|
|
162
|
+
* experimentId: "exp_123",
|
|
163
|
+
* evaluators: [{
|
|
164
|
+
* name: "correctness",
|
|
165
|
+
* kind: "CODE",
|
|
166
|
+
* evaluate: async ({ output, expected }) => ({
|
|
167
|
+
* score: output === expected ? 1 : 0
|
|
168
|
+
* })
|
|
169
|
+
* }],
|
|
170
|
+
* });
|
|
171
|
+
* } catch (error) {
|
|
172
|
+
* // Handle by error name (no instanceof needed)
|
|
173
|
+
* if (error.name === "EvaluationFetchError") {
|
|
174
|
+
* console.error("Failed to connect to server:", error.cause);
|
|
175
|
+
* } else if (error.name === "EvaluationAbortedError") {
|
|
176
|
+
* console.error("Evaluation stopped due to error:", error.cause);
|
|
177
|
+
* } else {
|
|
178
|
+
* console.error("Unexpected error:", error);
|
|
179
|
+
* }
|
|
180
|
+
* }
|
|
181
|
+
*
|
|
182
|
+
* // Stop on first error (useful for debugging)
|
|
183
|
+
* await resumeEvaluation({
|
|
184
|
+
* experimentId: "exp_123",
|
|
185
|
+
* evaluators: [myEvaluator],
|
|
186
|
+
* stopOnFirstError: true, // Exit immediately on first failure
|
|
187
|
+
* });
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export async function resumeEvaluation({ client: _client, experimentId, evaluators: _evaluators, logger = console, concurrency = 5, setGlobalTracerProvider = true, useBatchSpanProcessor = true, diagLogLevel, stopOnFirstError = false, }) {
|
|
191
|
+
const client = _client ?? createClient();
|
|
192
|
+
const pageSize = DEFAULT_PAGE_SIZE;
|
|
193
|
+
// Normalize evaluators to array
|
|
194
|
+
const evaluators = Array.isArray(_evaluators) ? _evaluators : [_evaluators];
|
|
195
|
+
// Validate inputs
|
|
196
|
+
invariant(evaluators.length > 0, "Must specify at least one evaluator");
|
|
197
|
+
// Get experiment info
|
|
198
|
+
logger.info(`🔍 Checking for incomplete evaluations...`);
|
|
199
|
+
const experiment = await getExperimentInfo({ client, experimentId });
|
|
200
|
+
// Initialize tracer (only if experiment has a project_name)
|
|
201
|
+
const baseUrl = client.config.baseUrl;
|
|
202
|
+
invariant(baseUrl, "Phoenix base URL not found. Please set PHOENIX_HOST or set baseUrl on the client.");
|
|
203
|
+
const tracerSetup = setupEvaluationTracer({
|
|
204
|
+
projectName: experiment.projectName,
|
|
205
|
+
baseUrl,
|
|
206
|
+
headers: client.config.headers
|
|
207
|
+
? toObjectHeaders(client.config.headers)
|
|
208
|
+
: undefined,
|
|
209
|
+
useBatchSpanProcessor,
|
|
210
|
+
diagLogLevel,
|
|
211
|
+
setGlobalTracerProvider,
|
|
212
|
+
});
|
|
213
|
+
const provider = tracerSetup?.provider ?? null;
|
|
214
|
+
const evalTracer = tracerSetup?.tracer ?? null;
|
|
215
|
+
// Build evaluation names list for query - derive from evaluator names
|
|
216
|
+
const evaluationNamesList = evaluators.map((e) => e.name);
|
|
217
|
+
// Create a CSP-style bounded buffer for evaluation distribution
|
|
218
|
+
const evalChannel = new Channel(pageSize * CHANNEL_CAPACITY_MULTIPLIER);
|
|
219
|
+
// Abort controller for stopOnFirstError coordination
|
|
220
|
+
const abortController = new AbortController();
|
|
221
|
+
const { signal } = abortController;
|
|
222
|
+
let totalProcessed = 0;
|
|
223
|
+
let totalCompleted = 0;
|
|
224
|
+
let totalFailed = 0;
|
|
225
|
+
// Producer: Fetch incomplete evaluations and send to channel
|
|
226
|
+
async function fetchIncompleteEvaluations() {
|
|
227
|
+
let cursor = null;
|
|
228
|
+
try {
|
|
229
|
+
do {
|
|
230
|
+
// Stop fetching if abort signal received
|
|
231
|
+
if (signal.aborted) {
|
|
232
|
+
logger.info("🛑 Stopping fetch due to error in evaluation");
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
let res;
|
|
236
|
+
try {
|
|
237
|
+
res = await client.GET("/v1/experiments/{experiment_id}/incomplete-evaluations", {
|
|
238
|
+
params: {
|
|
239
|
+
path: {
|
|
240
|
+
experiment_id: experimentId,
|
|
241
|
+
},
|
|
242
|
+
query: {
|
|
243
|
+
cursor,
|
|
244
|
+
limit: pageSize,
|
|
245
|
+
evaluation_name: evaluationNamesList,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
// Check for version compatibility issues and throw helpful error
|
|
252
|
+
try {
|
|
253
|
+
await handleEvaluationFetchError(error, client, "resume_evaluation");
|
|
254
|
+
// TypeScript: handleEvaluationFetchError never returns, but add throw for safety
|
|
255
|
+
throw new Error("handleEvaluationFetchError should never return");
|
|
256
|
+
}
|
|
257
|
+
catch (handledError) {
|
|
258
|
+
// Wrap the error (from handleEvaluationFetchError or original) in semantic error type
|
|
259
|
+
throw new EvaluationFetchError("Failed to fetch incomplete evaluations from server", handledError instanceof Error ? handledError : undefined);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Check for API errors
|
|
263
|
+
if (res.error) {
|
|
264
|
+
throw new EvaluationFetchError(`Failed to fetch incomplete evaluations: ${ensureString(res.error)}`);
|
|
265
|
+
}
|
|
266
|
+
cursor = res.data?.next_cursor ?? null;
|
|
267
|
+
const batchIncomplete = res.data?.data;
|
|
268
|
+
invariant(batchIncomplete, "Failed to fetch incomplete evaluations");
|
|
269
|
+
if (batchIncomplete.length === 0) {
|
|
270
|
+
if (totalProcessed === 0) {
|
|
271
|
+
logger.info("✅ No incomplete evaluations found. All evaluations are complete.");
|
|
272
|
+
}
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
if (totalProcessed === 0) {
|
|
276
|
+
logger.info("🧠 Resuming evaluations...");
|
|
277
|
+
}
|
|
278
|
+
// Build evaluation tasks and send to channel
|
|
279
|
+
let batchCount = 0;
|
|
280
|
+
for (const incomplete of batchIncomplete) {
|
|
281
|
+
// Stop sending items if abort signal received
|
|
282
|
+
if (signal.aborted) {
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
const incompleteEval = buildIncompleteEvaluation(incomplete);
|
|
286
|
+
const evaluatorsToRun = evaluators.filter((evaluator) => shouldRunEvaluator(evaluator, incompleteEval));
|
|
287
|
+
// Flatten: Send one channel item per evaluator
|
|
288
|
+
for (const evaluator of evaluatorsToRun) {
|
|
289
|
+
// Stop sending items if abort signal received
|
|
290
|
+
if (signal.aborted) {
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
await evalChannel.send({ incompleteEval, evaluator });
|
|
294
|
+
batchCount++;
|
|
295
|
+
totalProcessed++;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
logger.info(`Fetched batch of ${batchCount} evaluation tasks (channel buffer: ${evalChannel.length})`);
|
|
299
|
+
} while (cursor !== null && !signal.aborted);
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
// Re-throw with context preservation
|
|
303
|
+
if (error instanceof EvaluationFetchError) {
|
|
304
|
+
throw error;
|
|
305
|
+
}
|
|
306
|
+
// ChannelError from blocked send() should bubble up naturally
|
|
307
|
+
// (happens when channel closes while producer is blocked)
|
|
308
|
+
if (error instanceof ChannelError) {
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
// Wrap any unexpected errors from channel operations
|
|
312
|
+
throw new EvaluationFetchError("Unexpected error during evaluation fetch", error instanceof Error ? error : undefined);
|
|
313
|
+
}
|
|
314
|
+
finally {
|
|
315
|
+
evalChannel.close(); // Signal workers we're done
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Worker: Process evaluations from channel
|
|
319
|
+
async function processEvaluationsFromChannel() {
|
|
320
|
+
for await (const item of evalChannel) {
|
|
321
|
+
// Stop processing if abort signal received
|
|
322
|
+
if (signal.aborted) {
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
try {
|
|
326
|
+
await runSingleEvaluation({
|
|
327
|
+
client,
|
|
328
|
+
experimentId,
|
|
329
|
+
evaluator: item.evaluator,
|
|
330
|
+
experimentRun: item.incompleteEval.experimentRun,
|
|
331
|
+
datasetExample: item.incompleteEval.datasetExample,
|
|
332
|
+
tracer: evalTracer,
|
|
333
|
+
});
|
|
334
|
+
totalCompleted++;
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
totalFailed++;
|
|
338
|
+
logger.error(`Failed to run evaluator "${item.evaluator.name}" for run ${item.incompleteEval.experimentRun.id}: ${error}`);
|
|
339
|
+
// If stopOnFirstError is enabled, abort and re-throw
|
|
340
|
+
if (stopOnFirstError) {
|
|
341
|
+
logger.error("🛑 Stopping on first error");
|
|
342
|
+
abortController.abort();
|
|
343
|
+
throw error;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Start concurrent execution
|
|
349
|
+
// Wrap in try-finally to ensure channel is always closed, even if Promise.all throws
|
|
350
|
+
let executionError = null;
|
|
351
|
+
try {
|
|
352
|
+
const producerTask = fetchIncompleteEvaluations();
|
|
353
|
+
const workerTasks = Array.from({ length: concurrency }, () => processEvaluationsFromChannel());
|
|
354
|
+
// Wait for producer and all workers to finish
|
|
355
|
+
await Promise.all([producerTask, ...workerTasks]);
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
// Classify and handle errors based on their nature
|
|
359
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
360
|
+
// Always surface producer/infrastructure errors
|
|
361
|
+
if (error instanceof EvaluationFetchError) {
|
|
362
|
+
// Producer failed - this is ALWAYS critical regardless of stopOnFirstError
|
|
363
|
+
logger.error(`❌ Critical: Failed to fetch evaluations from server`);
|
|
364
|
+
executionError = err;
|
|
365
|
+
}
|
|
366
|
+
else if (error instanceof ChannelError && signal.aborted) {
|
|
367
|
+
// Channel closed due to intentional abort - wrap in semantic error
|
|
368
|
+
executionError = new EvaluationAbortedError("Evaluation stopped due to error in concurrent evaluator", err);
|
|
369
|
+
}
|
|
370
|
+
else if (stopOnFirstError) {
|
|
371
|
+
// Worker error in stopOnFirstError mode - already logged by worker
|
|
372
|
+
executionError = err;
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
// Unexpected error (not from worker, not from producer fetch)
|
|
376
|
+
// This could be a bug in our code or infrastructure failure
|
|
377
|
+
logger.error(`❌ Unexpected error during evaluation: ${err.message}`);
|
|
378
|
+
executionError = err;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
finally {
|
|
382
|
+
// Ensure channel is closed even if there are unexpected errors
|
|
383
|
+
// This is a safety net in case producer's finally block didn't execute
|
|
384
|
+
if (!evalChannel.isClosed) {
|
|
385
|
+
evalChannel.close();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// Only show completion message if we didn't stop on error
|
|
389
|
+
if (!executionError) {
|
|
390
|
+
logger.info(`✅ Evaluations completed.`);
|
|
391
|
+
}
|
|
392
|
+
if (totalFailed > 0 && !executionError) {
|
|
393
|
+
logger.info(`⚠️ Warning: ${totalFailed} out of ${totalProcessed} evaluations failed.`);
|
|
394
|
+
}
|
|
395
|
+
// Print summary
|
|
396
|
+
printEvaluationSummary({
|
|
397
|
+
logger,
|
|
398
|
+
experimentId: experiment.id,
|
|
399
|
+
totalProcessed,
|
|
400
|
+
totalCompleted,
|
|
401
|
+
});
|
|
402
|
+
// Flush spans (if tracer was initialized)
|
|
403
|
+
if (provider) {
|
|
404
|
+
await provider.forceFlush();
|
|
405
|
+
}
|
|
406
|
+
// Re-throw error if evaluation failed
|
|
407
|
+
if (executionError) {
|
|
408
|
+
throw executionError;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Record evaluation results to API.
|
|
413
|
+
*/
|
|
414
|
+
async function recordEvaluationResults({ client, evaluator, experimentRun, results, error, startTime, endTime, traceId = null, }) {
|
|
415
|
+
if (results) {
|
|
416
|
+
// Success case: record each evaluation result
|
|
417
|
+
for (const singleResult of results) {
|
|
418
|
+
await client.POST("/v1/experiment_evaluations", {
|
|
419
|
+
body: {
|
|
420
|
+
experiment_run_id: experimentRun.id,
|
|
421
|
+
name: evaluator.name,
|
|
422
|
+
annotator_kind: evaluator.kind,
|
|
423
|
+
result: {
|
|
424
|
+
score: singleResult.score ?? null,
|
|
425
|
+
label: singleResult.label ?? null,
|
|
426
|
+
explanation: singleResult.explanation ?? null,
|
|
427
|
+
metadata: singleResult.metadata ?? {},
|
|
428
|
+
},
|
|
429
|
+
start_time: startTime.toISOString(),
|
|
430
|
+
end_time: endTime.toISOString(),
|
|
431
|
+
error: null,
|
|
432
|
+
trace_id: traceId,
|
|
433
|
+
},
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
else if (error) {
|
|
438
|
+
// Error case: record failed evaluation with evaluator name
|
|
439
|
+
await client.POST("/v1/experiment_evaluations", {
|
|
440
|
+
body: {
|
|
441
|
+
experiment_run_id: experimentRun.id,
|
|
442
|
+
name: evaluator.name,
|
|
443
|
+
annotator_kind: evaluator.kind,
|
|
444
|
+
result: null,
|
|
445
|
+
start_time: startTime.toISOString(),
|
|
446
|
+
end_time: endTime.toISOString(),
|
|
447
|
+
error,
|
|
448
|
+
trace_id: traceId,
|
|
449
|
+
},
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Run a single evaluation and record the result.
|
|
455
|
+
*/
|
|
456
|
+
async function runSingleEvaluation({ client, experimentId, evaluator, experimentRun, datasetExample, tracer, }) {
|
|
457
|
+
const startTime = new Date();
|
|
458
|
+
// Prepare evaluator inputs
|
|
459
|
+
const taskOutput = experimentRun.output ?? null;
|
|
460
|
+
const expectedOutput = datasetExample.output ?? undefined;
|
|
461
|
+
// If no tracer (no project_name), execute without tracing
|
|
462
|
+
if (!tracer) {
|
|
463
|
+
let results;
|
|
464
|
+
let error;
|
|
465
|
+
try {
|
|
466
|
+
const result = await Promise.resolve(evaluator.evaluate({
|
|
467
|
+
input: datasetExample.input,
|
|
468
|
+
output: taskOutput,
|
|
469
|
+
expected: expectedOutput,
|
|
470
|
+
metadata: datasetExample.metadata,
|
|
471
|
+
}));
|
|
472
|
+
results = Array.isArray(result) ? result : [result];
|
|
473
|
+
}
|
|
474
|
+
catch (err) {
|
|
475
|
+
error = err instanceof Error ? err.message : String(err);
|
|
476
|
+
throw err;
|
|
477
|
+
}
|
|
478
|
+
finally {
|
|
479
|
+
const endTime = new Date();
|
|
480
|
+
await recordEvaluationResults({
|
|
481
|
+
client,
|
|
482
|
+
evaluator,
|
|
483
|
+
experimentRun,
|
|
484
|
+
results,
|
|
485
|
+
error,
|
|
486
|
+
startTime,
|
|
487
|
+
endTime,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
// With tracer: wrap execution in a span for observability
|
|
493
|
+
return tracer.startActiveSpan(`Evaluation: ${evaluator.name}`, async (span) => {
|
|
494
|
+
// Set span attributes for input
|
|
495
|
+
span.setAttributes({
|
|
496
|
+
[SemanticConventions.OPENINFERENCE_SPAN_KIND]: OpenInferenceSpanKind.EVALUATOR,
|
|
497
|
+
[SemanticConventions.INPUT_MIME_TYPE]: MimeType.JSON,
|
|
498
|
+
[SemanticConventions.INPUT_VALUE]: ensureString({
|
|
499
|
+
input: datasetExample.input,
|
|
500
|
+
output: experimentRun.output,
|
|
501
|
+
expected: datasetExample.output,
|
|
502
|
+
metadata: datasetExample.metadata,
|
|
503
|
+
}),
|
|
504
|
+
...objectAsAttributes({
|
|
505
|
+
experiment_id: experimentId,
|
|
506
|
+
experiment_run_id: experimentRun.id,
|
|
507
|
+
dataset_example_id: datasetExample.id,
|
|
508
|
+
}),
|
|
509
|
+
});
|
|
510
|
+
let results;
|
|
511
|
+
let error;
|
|
512
|
+
try {
|
|
513
|
+
// Execute the evaluator (only once!)
|
|
514
|
+
const result = await Promise.resolve(evaluator.evaluate({
|
|
515
|
+
input: datasetExample.input,
|
|
516
|
+
output: taskOutput,
|
|
517
|
+
expected: expectedOutput,
|
|
518
|
+
metadata: datasetExample.metadata,
|
|
519
|
+
}));
|
|
520
|
+
results = Array.isArray(result) ? result : [result];
|
|
521
|
+
// Set output span attributes
|
|
522
|
+
span.setAttributes({
|
|
523
|
+
[SemanticConventions.OUTPUT_MIME_TYPE]: MimeType.JSON,
|
|
524
|
+
[SemanticConventions.OUTPUT_VALUE]: ensureString(result),
|
|
525
|
+
});
|
|
526
|
+
// Set attributes from first result for span metadata
|
|
527
|
+
if (results[0]) {
|
|
528
|
+
span.setAttributes(objectAsAttributes(results[0]));
|
|
529
|
+
}
|
|
530
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
531
|
+
}
|
|
532
|
+
catch (err) {
|
|
533
|
+
error = err instanceof Error ? err.message : String(err);
|
|
534
|
+
span.setStatus({
|
|
535
|
+
code: SpanStatusCode.ERROR,
|
|
536
|
+
message: error,
|
|
537
|
+
});
|
|
538
|
+
span.recordException(err);
|
|
539
|
+
throw err;
|
|
540
|
+
}
|
|
541
|
+
finally {
|
|
542
|
+
const endTime = new Date();
|
|
543
|
+
span.end();
|
|
544
|
+
// Record results to API
|
|
545
|
+
await recordEvaluationResults({
|
|
546
|
+
client,
|
|
547
|
+
evaluator,
|
|
548
|
+
experimentRun,
|
|
549
|
+
results,
|
|
550
|
+
error,
|
|
551
|
+
startTime,
|
|
552
|
+
endTime,
|
|
553
|
+
traceId: span.spanContext().traceId,
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
//# sourceMappingURL=resumeEvaluation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeEvaluation.js","sourceRoot":"","sources":["../../../src/experiments/resumeEvaluation.ts"],"names":[],"mappings":"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"}
|