@arizeai/phoenix-client 0.0.1 → 1.0.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/README.md +136 -7
- package/dist/esm/__generated__/api/v1.d.ts +743 -12
- package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
- package/dist/esm/client.d.ts +9 -2
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +3 -2
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +11 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/experiments/runExperiment.d.ts +35 -8
- package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
- package/dist/esm/experiments/runExperiment.js +29 -39
- package/dist/esm/experiments/runExperiment.js.map +1 -1
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/prompts/constants.d.ts +6 -0
- package/dist/esm/prompts/constants.d.ts.map +1 -0
- package/dist/esm/prompts/constants.js +10 -0
- package/dist/esm/prompts/constants.js.map +1 -0
- package/dist/esm/prompts/createPrompt.d.ts +65 -0
- package/dist/esm/prompts/createPrompt.d.ts.map +1 -0
- package/dist/esm/prompts/createPrompt.js +95 -0
- package/dist/esm/prompts/createPrompt.js.map +1 -0
- package/dist/esm/prompts/getPrompt.d.ts +16 -0
- package/dist/esm/prompts/getPrompt.d.ts.map +1 -0
- package/dist/esm/prompts/getPrompt.js +11 -0
- package/dist/esm/prompts/getPrompt.js.map +1 -0
- package/dist/esm/prompts/index.d.ts +4 -0
- package/dist/esm/prompts/index.d.ts.map +1 -0
- package/dist/esm/prompts/index.js +4 -0
- package/dist/esm/prompts/index.js.map +1 -0
- package/dist/esm/prompts/sdks/constants.d.ts +6 -0
- package/dist/esm/prompts/sdks/constants.d.ts.map +1 -0
- package/dist/esm/prompts/sdks/constants.js +6 -0
- package/dist/esm/prompts/sdks/constants.js.map +1 -0
- package/dist/esm/prompts/sdks/index.d.ts +2 -0
- package/dist/esm/prompts/sdks/index.d.ts.map +1 -0
- package/dist/esm/prompts/sdks/index.js +2 -0
- package/dist/esm/prompts/sdks/index.js.map +1 -0
- package/dist/esm/prompts/sdks/toAI.d.ts +12 -0
- package/dist/esm/prompts/sdks/toAI.d.ts.map +1 -0
- package/dist/esm/prompts/sdks/toAI.js +70 -0
- package/dist/esm/prompts/sdks/toAI.js.map +1 -0
- package/dist/esm/prompts/sdks/toAnthropic.d.ts +9 -0
- package/dist/esm/prompts/sdks/toAnthropic.d.ts.map +1 -0
- package/dist/esm/prompts/sdks/toAnthropic.js +69 -0
- package/dist/esm/prompts/sdks/toAnthropic.js.map +1 -0
- package/dist/esm/prompts/sdks/toOpenAI.d.ts +11 -0
- package/dist/esm/prompts/sdks/toOpenAI.d.ts.map +1 -0
- package/dist/esm/prompts/sdks/toOpenAI.js +77 -0
- package/dist/esm/prompts/sdks/toOpenAI.js.map +1 -0
- package/dist/esm/prompts/sdks/toSDK.d.ts +47 -0
- package/dist/esm/prompts/sdks/toSDK.d.ts.map +1 -0
- package/dist/esm/prompts/sdks/toSDK.js +44 -0
- package/dist/esm/prompts/sdks/toSDK.js.map +1 -0
- package/dist/esm/prompts/sdks/types.d.ts +28 -0
- package/dist/esm/prompts/sdks/types.d.ts.map +1 -0
- package/dist/esm/prompts/sdks/types.js +2 -0
- package/dist/esm/prompts/sdks/types.js.map +1 -0
- package/dist/esm/schemas/jsonLiteralSchema.d.ts +17 -0
- package/dist/esm/schemas/jsonLiteralSchema.d.ts.map +1 -0
- package/dist/esm/schemas/jsonLiteralSchema.js +16 -0
- package/dist/esm/schemas/jsonLiteralSchema.js.map +1 -0
- package/dist/esm/schemas/jsonSchema.d.ts +132 -0
- package/dist/esm/schemas/jsonSchema.d.ts.map +1 -0
- package/dist/esm/schemas/jsonSchema.js +42 -0
- package/dist/esm/schemas/jsonSchema.js.map +1 -0
- package/dist/esm/schemas/llm/anthropic/converters.d.ts +1497 -0
- package/dist/esm/schemas/llm/anthropic/converters.d.ts.map +1 -0
- package/dist/esm/schemas/llm/anthropic/converters.js +123 -0
- package/dist/esm/schemas/llm/anthropic/converters.js.map +1 -0
- package/dist/esm/schemas/llm/anthropic/messagePartSchemas.d.ts +264 -0
- package/dist/esm/schemas/llm/anthropic/messagePartSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/anthropic/messagePartSchemas.js +36 -0
- package/dist/esm/schemas/llm/anthropic/messagePartSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/anthropic/messageSchemas.d.ts +795 -0
- package/dist/esm/schemas/llm/anthropic/messageSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/anthropic/messageSchemas.js +23 -0
- package/dist/esm/schemas/llm/anthropic/messageSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/anthropic/toolCallSchemas.d.ts +48 -0
- package/dist/esm/schemas/llm/anthropic/toolCallSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/anthropic/toolCallSchemas.js +27 -0
- package/dist/esm/schemas/llm/anthropic/toolCallSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.d.ts +30 -0
- package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.js +19 -0
- package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/anthropic/toolSchemas.d.ts +191 -0
- package/dist/esm/schemas/llm/anthropic/toolSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/anthropic/toolSchemas.js +31 -0
- package/dist/esm/schemas/llm/anthropic/toolSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/constants.d.ts +7422 -0
- package/dist/esm/schemas/llm/constants.d.ts.map +1 -0
- package/dist/esm/schemas/llm/constants.js +128 -0
- package/dist/esm/schemas/llm/constants.js.map +1 -0
- package/dist/esm/schemas/llm/converters.d.ts +29720 -0
- package/dist/esm/schemas/llm/converters.d.ts.map +1 -0
- package/dist/esm/schemas/llm/converters.js +308 -0
- package/dist/esm/schemas/llm/converters.js.map +1 -0
- package/dist/esm/schemas/llm/openai/converters.d.ts +3507 -0
- package/dist/esm/schemas/llm/openai/converters.d.ts.map +1 -0
- package/dist/esm/schemas/llm/openai/converters.js +311 -0
- package/dist/esm/schemas/llm/openai/converters.js.map +1 -0
- package/dist/esm/schemas/llm/openai/messagePartSchemas.d.ts +64 -0
- package/dist/esm/schemas/llm/openai/messagePartSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/openai/messagePartSchemas.js +21 -0
- package/dist/esm/schemas/llm/openai/messagePartSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/openai/messageSchemas.d.ts +733 -0
- package/dist/esm/schemas/llm/openai/messageSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/openai/messageSchemas.js +67 -0
- package/dist/esm/schemas/llm/openai/messageSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/openai/responseFormatSchema.d.ts +233 -0
- package/dist/esm/schemas/llm/openai/responseFormatSchema.d.ts.map +1 -0
- package/dist/esm/schemas/llm/openai/responseFormatSchema.js +19 -0
- package/dist/esm/schemas/llm/openai/responseFormatSchema.js.map +1 -0
- package/dist/esm/schemas/llm/openai/toolCallSchemas.d.ts +95 -0
- package/dist/esm/schemas/llm/openai/toolCallSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/openai/toolCallSchemas.js +40 -0
- package/dist/esm/schemas/llm/openai/toolCallSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/openai/toolChoiceSchemas.d.ts +28 -0
- package/dist/esm/schemas/llm/openai/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/openai/toolChoiceSchemas.js +16 -0
- package/dist/esm/schemas/llm/openai/toolChoiceSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/openai/toolSchemas.d.ts +1282 -0
- package/dist/esm/schemas/llm/openai/toolSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/openai/toolSchemas.js +62 -0
- package/dist/esm/schemas/llm/openai/toolSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/converters.d.ts +847 -0
- package/dist/esm/schemas/llm/phoenixPrompt/converters.d.ts.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/converters.js +130 -0
- package/dist/esm/schemas/llm/phoenixPrompt/converters.js.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts +128 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.js +60 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.d.ts +196 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.js +23 -0
- package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts +41 -0
- package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.js +15 -0
- package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.js.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts +36 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.js +3 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts +34 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.js +21 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.d.ts +41 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js +15 -0
- package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/schemas.d.ts +2777 -0
- package/dist/esm/schemas/llm/schemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/schemas.js +77 -0
- package/dist/esm/schemas/llm/schemas.js.map +1 -0
- package/dist/esm/schemas/llm/types.d.ts +129 -0
- package/dist/esm/schemas/llm/types.d.ts.map +1 -0
- package/dist/esm/schemas/llm/types.js +2 -0
- package/dist/esm/schemas/llm/types.js.map +1 -0
- package/dist/esm/schemas/llm/utils.d.ts +25 -0
- package/dist/esm/schemas/llm/utils.d.ts.map +1 -0
- package/dist/esm/schemas/llm/utils.js +176 -0
- package/dist/esm/schemas/llm/utils.js.map +1 -0
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts +114 -0
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.js +35 -0
- package/dist/esm/schemas/llm/vercel/messagePartSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts +142 -0
- package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/vercel/messageSchemas.js +42 -0
- package/dist/esm/schemas/llm/vercel/messageSchemas.js.map +1 -0
- package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.d.ts +16 -0
- package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.js +14 -0
- package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types/core.d.ts +8 -0
- package/dist/esm/types/core.d.ts.map +1 -1
- package/dist/esm/types/logger.d.ts +6 -0
- package/dist/esm/types/logger.d.ts.map +1 -0
- package/dist/esm/types/logger.js +2 -0
- package/dist/esm/types/logger.js.map +1 -0
- package/dist/esm/types/prompts.d.ts +107 -0
- package/dist/esm/types/prompts.d.ts.map +1 -0
- package/dist/esm/types/prompts.js +2 -0
- package/dist/esm/types/prompts.js.map +1 -0
- package/dist/esm/utils/assertUnreachable.d.ts +8 -0
- package/dist/esm/utils/assertUnreachable.d.ts.map +1 -0
- package/dist/esm/utils/assertUnreachable.js +10 -0
- package/dist/esm/utils/assertUnreachable.js.map +1 -0
- package/dist/esm/utils/formatPromptMessages.d.ts +26 -0
- package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -0
- package/dist/esm/utils/formatPromptMessages.js +64 -0
- package/dist/esm/utils/formatPromptMessages.js.map +1 -0
- package/dist/esm/utils/getDatasetLike.d.ts +22 -0
- package/dist/esm/utils/getDatasetLike.d.ts.map +1 -0
- package/dist/esm/utils/getDatasetLike.js +37 -0
- package/dist/esm/utils/getDatasetLike.js.map +1 -0
- package/dist/esm/utils/getPromptVersionLike.d.ts +29 -0
- package/dist/esm/utils/getPromptVersionLike.d.ts.map +1 -0
- package/dist/esm/utils/getPromptVersionLike.js +50 -0
- package/dist/esm/utils/getPromptVersionLike.js.map +1 -0
- package/dist/esm/utils/isObject.d.ts +5 -0
- package/dist/esm/utils/isObject.d.ts.map +1 -0
- package/dist/esm/utils/isObject.js +7 -0
- package/dist/esm/utils/isObject.js.map +1 -0
- package/dist/esm/utils/noopLogger.d.ts +9 -0
- package/dist/esm/utils/noopLogger.d.ts.map +1 -0
- package/dist/esm/utils/noopLogger.js +9 -0
- package/dist/esm/utils/noopLogger.js.map +1 -0
- package/dist/esm/utils/safelyParseJSON.d.ts +14 -0
- package/dist/esm/utils/safelyParseJSON.d.ts.map +1 -0
- package/dist/esm/utils/safelyParseJSON.js +15 -0
- package/dist/esm/utils/safelyParseJSON.js.map +1 -0
- package/dist/esm/utils/safelyStringifyJSON.d.ts +14 -0
- package/dist/esm/utils/safelyStringifyJSON.d.ts.map +1 -0
- package/dist/esm/utils/safelyStringifyJSON.js +15 -0
- package/dist/esm/utils/safelyStringifyJSON.js.map +1 -0
- package/dist/esm/utils/schemaMatches.d.ts +17 -0
- package/dist/esm/utils/schemaMatches.d.ts.map +1 -0
- package/dist/esm/utils/schemaMatches.js +9 -0
- package/dist/esm/utils/schemaMatches.js.map +1 -0
- package/dist/src/__generated__/api/v1.d.ts +743 -12
- package/dist/src/__generated__/api/v1.d.ts.map +1 -1
- package/dist/src/client.d.ts +9 -2
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +3 -2
- package/dist/src/client.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +9 -1
- package/dist/src/config.js.map +1 -1
- package/dist/src/experiments/runExperiment.d.ts +35 -8
- package/dist/src/experiments/runExperiment.d.ts.map +1 -1
- package/dist/src/experiments/runExperiment.js +29 -34
- package/dist/src/experiments/runExperiment.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/prompts/constants.d.ts +6 -0
- package/dist/src/prompts/constants.d.ts.map +1 -0
- package/dist/src/prompts/constants.js +13 -0
- package/dist/src/prompts/constants.js.map +1 -0
- package/dist/src/prompts/createPrompt.d.ts +65 -0
- package/dist/src/prompts/createPrompt.d.ts.map +1 -0
- package/dist/src/prompts/createPrompt.js +123 -0
- package/dist/src/prompts/createPrompt.js.map +1 -0
- package/dist/src/prompts/getPrompt.d.ts +16 -0
- package/dist/src/prompts/getPrompt.d.ts.map +1 -0
- package/dist/src/prompts/getPrompt.js +25 -0
- package/dist/src/prompts/getPrompt.js.map +1 -0
- package/dist/src/prompts/index.d.ts +4 -0
- package/dist/src/prompts/index.d.ts.map +1 -0
- package/dist/src/prompts/index.js +20 -0
- package/dist/src/prompts/index.js.map +1 -0
- package/dist/src/prompts/sdks/constants.d.ts +6 -0
- package/dist/src/prompts/sdks/constants.d.ts.map +1 -0
- package/dist/src/prompts/sdks/constants.js +9 -0
- package/dist/src/prompts/sdks/constants.js.map +1 -0
- package/dist/src/prompts/sdks/index.d.ts +2 -0
- package/dist/src/prompts/sdks/index.d.ts.map +1 -0
- package/dist/src/prompts/sdks/index.js +18 -0
- package/dist/src/prompts/sdks/index.js.map +1 -0
- package/dist/src/prompts/sdks/toAI.d.ts +12 -0
- package/dist/src/prompts/sdks/toAI.d.ts.map +1 -0
- package/dist/src/prompts/sdks/toAI.js +75 -0
- package/dist/src/prompts/sdks/toAI.js.map +1 -0
- package/dist/src/prompts/sdks/toAnthropic.d.ts +9 -0
- package/dist/src/prompts/sdks/toAnthropic.d.ts.map +1 -0
- package/dist/src/prompts/sdks/toAnthropic.js +71 -0
- package/dist/src/prompts/sdks/toAnthropic.js.map +1 -0
- package/dist/src/prompts/sdks/toOpenAI.d.ts +11 -0
- package/dist/src/prompts/sdks/toOpenAI.d.ts.map +1 -0
- package/dist/src/prompts/sdks/toOpenAI.js +78 -0
- package/dist/src/prompts/sdks/toOpenAI.js.map +1 -0
- package/dist/src/prompts/sdks/toSDK.d.ts +47 -0
- package/dist/src/prompts/sdks/toSDK.d.ts.map +1 -0
- package/dist/src/prompts/sdks/toSDK.js +63 -0
- package/dist/src/prompts/sdks/toSDK.js.map +1 -0
- package/dist/src/prompts/sdks/types.d.ts +28 -0
- package/dist/src/prompts/sdks/types.d.ts.map +1 -0
- package/dist/src/prompts/sdks/types.js +3 -0
- package/dist/src/prompts/sdks/types.js.map +1 -0
- package/dist/src/schemas/jsonLiteralSchema.d.ts +17 -0
- package/dist/src/schemas/jsonLiteralSchema.d.ts.map +1 -0
- package/dist/src/schemas/jsonLiteralSchema.js +22 -0
- package/dist/src/schemas/jsonLiteralSchema.js.map +1 -0
- package/dist/src/schemas/jsonSchema.d.ts +132 -0
- package/dist/src/schemas/jsonSchema.d.ts.map +1 -0
- package/dist/src/schemas/jsonSchema.js +48 -0
- package/dist/src/schemas/jsonSchema.js.map +1 -0
- package/dist/src/schemas/llm/anthropic/converters.d.ts +1497 -0
- package/dist/src/schemas/llm/anthropic/converters.d.ts.map +1 -0
- package/dist/src/schemas/llm/anthropic/converters.js +132 -0
- package/dist/src/schemas/llm/anthropic/converters.js.map +1 -0
- package/dist/src/schemas/llm/anthropic/messagePartSchemas.d.ts +264 -0
- package/dist/src/schemas/llm/anthropic/messagePartSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/anthropic/messagePartSchemas.js +42 -0
- package/dist/src/schemas/llm/anthropic/messagePartSchemas.js.map +1 -0
- package/dist/src/schemas/llm/anthropic/messageSchemas.d.ts +795 -0
- package/dist/src/schemas/llm/anthropic/messageSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/anthropic/messageSchemas.js +29 -0
- package/dist/src/schemas/llm/anthropic/messageSchemas.js.map +1 -0
- package/dist/src/schemas/llm/anthropic/toolCallSchemas.d.ts +48 -0
- package/dist/src/schemas/llm/anthropic/toolCallSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/anthropic/toolCallSchemas.js +34 -0
- package/dist/src/schemas/llm/anthropic/toolCallSchemas.js.map +1 -0
- package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.d.ts +30 -0
- package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.js +25 -0
- package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.js.map +1 -0
- package/dist/src/schemas/llm/anthropic/toolSchemas.d.ts +191 -0
- package/dist/src/schemas/llm/anthropic/toolSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/anthropic/toolSchemas.js +38 -0
- package/dist/src/schemas/llm/anthropic/toolSchemas.js.map +1 -0
- package/dist/src/schemas/llm/constants.d.ts +7422 -0
- package/dist/src/schemas/llm/constants.d.ts.map +1 -0
- package/dist/src/schemas/llm/constants.js +131 -0
- package/dist/src/schemas/llm/constants.js.map +1 -0
- package/dist/src/schemas/llm/converters.d.ts +29720 -0
- package/dist/src/schemas/llm/converters.d.ts.map +1 -0
- package/dist/src/schemas/llm/converters.js +330 -0
- package/dist/src/schemas/llm/converters.js.map +1 -0
- package/dist/src/schemas/llm/openai/converters.d.ts +3507 -0
- package/dist/src/schemas/llm/openai/converters.d.ts.map +1 -0
- package/dist/src/schemas/llm/openai/converters.js +321 -0
- package/dist/src/schemas/llm/openai/converters.js.map +1 -0
- package/dist/src/schemas/llm/openai/messagePartSchemas.d.ts +64 -0
- package/dist/src/schemas/llm/openai/messagePartSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/openai/messagePartSchemas.js +27 -0
- package/dist/src/schemas/llm/openai/messagePartSchemas.js.map +1 -0
- package/dist/src/schemas/llm/openai/messageSchemas.d.ts +733 -0
- package/dist/src/schemas/llm/openai/messageSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/openai/messageSchemas.js +73 -0
- package/dist/src/schemas/llm/openai/messageSchemas.js.map +1 -0
- package/dist/src/schemas/llm/openai/responseFormatSchema.d.ts +233 -0
- package/dist/src/schemas/llm/openai/responseFormatSchema.d.ts.map +1 -0
- package/dist/src/schemas/llm/openai/responseFormatSchema.js +25 -0
- package/dist/src/schemas/llm/openai/responseFormatSchema.js.map +1 -0
- package/dist/src/schemas/llm/openai/toolCallSchemas.d.ts +95 -0
- package/dist/src/schemas/llm/openai/toolCallSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/openai/toolCallSchemas.js +47 -0
- package/dist/src/schemas/llm/openai/toolCallSchemas.js.map +1 -0
- package/dist/src/schemas/llm/openai/toolChoiceSchemas.d.ts +28 -0
- package/dist/src/schemas/llm/openai/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/openai/toolChoiceSchemas.js +22 -0
- package/dist/src/schemas/llm/openai/toolChoiceSchemas.js.map +1 -0
- package/dist/src/schemas/llm/openai/toolSchemas.d.ts +1282 -0
- package/dist/src/schemas/llm/openai/toolSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/openai/toolSchemas.js +69 -0
- package/dist/src/schemas/llm/openai/toolSchemas.js.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/converters.d.ts +847 -0
- package/dist/src/schemas/llm/phoenixPrompt/converters.d.ts.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/converters.js +133 -0
- package/dist/src/schemas/llm/phoenixPrompt/converters.js.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts +128 -0
- package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.js +71 -0
- package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.js.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.d.ts +196 -0
- package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.js +29 -0
- package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.js.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts +41 -0
- package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.js +21 -0
- package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.js.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts +36 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.js +6 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.js.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts +34 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.js +27 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.js.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.d.ts +41 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js +21 -0
- package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -0
- package/dist/src/schemas/llm/schemas.d.ts +2777 -0
- package/dist/src/schemas/llm/schemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/schemas.js +83 -0
- package/dist/src/schemas/llm/schemas.js.map +1 -0
- package/dist/src/schemas/llm/types.d.ts +129 -0
- package/dist/src/schemas/llm/types.d.ts.map +1 -0
- package/dist/src/schemas/llm/types.js +3 -0
- package/dist/src/schemas/llm/types.js.map +1 -0
- package/dist/src/schemas/llm/utils.d.ts +25 -0
- package/dist/src/schemas/llm/utils.d.ts.map +1 -0
- package/dist/src/schemas/llm/utils.js +187 -0
- package/dist/src/schemas/llm/utils.js.map +1 -0
- package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts +114 -0
- package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/vercel/messagePartSchemas.js +41 -0
- package/dist/src/schemas/llm/vercel/messagePartSchemas.js.map +1 -0
- package/dist/src/schemas/llm/vercel/messageSchemas.d.ts +142 -0
- package/dist/src/schemas/llm/vercel/messageSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/vercel/messageSchemas.js +48 -0
- package/dist/src/schemas/llm/vercel/messageSchemas.js.map +1 -0
- package/dist/src/schemas/llm/vercel/toolChoiceSchemas.d.ts +16 -0
- package/dist/src/schemas/llm/vercel/toolChoiceSchemas.d.ts.map +1 -0
- package/dist/src/schemas/llm/vercel/toolChoiceSchemas.js +20 -0
- package/dist/src/schemas/llm/vercel/toolChoiceSchemas.js.map +1 -0
- package/dist/src/types/core.d.ts +8 -0
- package/dist/src/types/core.d.ts.map +1 -1
- package/dist/src/types/logger.d.ts +6 -0
- package/dist/src/types/logger.d.ts.map +1 -0
- package/dist/src/types/logger.js +3 -0
- package/dist/src/types/logger.js.map +1 -0
- package/dist/src/types/prompts.d.ts +107 -0
- package/dist/src/types/prompts.d.ts.map +1 -0
- package/dist/src/types/prompts.js +3 -0
- package/dist/src/types/prompts.js.map +1 -0
- package/dist/src/utils/assertUnreachable.d.ts +8 -0
- package/dist/src/utils/assertUnreachable.d.ts.map +1 -0
- package/dist/src/utils/assertUnreachable.js +13 -0
- package/dist/src/utils/assertUnreachable.js.map +1 -0
- package/dist/src/utils/formatPromptMessages.d.ts +26 -0
- package/dist/src/utils/formatPromptMessages.d.ts.map +1 -0
- package/dist/src/utils/formatPromptMessages.js +61 -0
- package/dist/src/utils/formatPromptMessages.js.map +1 -0
- package/dist/src/utils/getDatasetLike.d.ts +22 -0
- package/dist/src/utils/getDatasetLike.d.ts.map +1 -0
- package/dist/src/utils/getDatasetLike.js +47 -0
- package/dist/src/utils/getDatasetLike.js.map +1 -0
- package/dist/src/utils/getPromptVersionLike.d.ts +29 -0
- package/dist/src/utils/getPromptVersionLike.d.ts.map +1 -0
- package/dist/src/utils/getPromptVersionLike.js +68 -0
- package/dist/src/utils/getPromptVersionLike.js.map +1 -0
- package/dist/src/utils/isObject.d.ts +5 -0
- package/dist/src/utils/isObject.d.ts.map +1 -0
- package/dist/src/utils/isObject.js +10 -0
- package/dist/src/utils/isObject.js.map +1 -0
- package/dist/src/utils/noopLogger.d.ts +9 -0
- package/dist/src/utils/noopLogger.d.ts.map +1 -0
- package/dist/src/utils/noopLogger.js +12 -0
- package/dist/src/utils/noopLogger.js.map +1 -0
- package/dist/src/utils/safelyParseJSON.d.ts +14 -0
- package/dist/src/utils/safelyParseJSON.d.ts.map +1 -0
- package/dist/src/utils/safelyParseJSON.js +18 -0
- package/dist/src/utils/safelyParseJSON.js.map +1 -0
- package/dist/src/utils/safelyStringifyJSON.d.ts +14 -0
- package/dist/src/utils/safelyStringifyJSON.d.ts.map +1 -0
- package/dist/src/utils/safelyStringifyJSON.js +18 -0
- package/dist/src/utils/safelyStringifyJSON.js.map +1 -0
- package/dist/src/utils/schemaMatches.d.ts +17 -0
- package/dist/src/utils/schemaMatches.d.ts.map +1 -0
- package/dist/src/utils/schemaMatches.js +13 -0
- package/dist/src/utils/schemaMatches.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +32 -5
- package/src/__generated__/api/v1.ts +743 -12
- package/src/client.ts +9 -2
- package/src/config.ts +12 -1
- package/src/experiments/runExperiment.ts +54 -53
- package/src/index.ts +0 -2
- package/src/prompts/constants.ts +11 -0
- package/src/prompts/createPrompt.ts +181 -0
- package/src/prompts/getPrompt.ts +26 -0
- package/src/prompts/index.ts +3 -0
- package/src/prompts/sdks/constants.ts +10 -0
- package/src/prompts/sdks/index.ts +1 -0
- package/src/prompts/sdks/toAI.ts +105 -0
- package/src/prompts/sdks/toAnthropic.ts +98 -0
- package/src/prompts/sdks/toOpenAI.ts +115 -0
- package/src/prompts/sdks/toSDK.ts +81 -0
- package/src/prompts/sdks/types.ts +28 -0
- package/src/schemas/jsonLiteralSchema.ts +24 -0
- package/src/schemas/jsonSchema.ts +47 -0
- package/src/schemas/llm/anthropic/converters.ts +172 -0
- package/src/schemas/llm/anthropic/messagePartSchemas.ts +53 -0
- package/src/schemas/llm/anthropic/messageSchemas.ts +34 -0
- package/src/schemas/llm/anthropic/toolCallSchemas.ts +34 -0
- package/src/schemas/llm/anthropic/toolChoiceSchemas.ts +21 -0
- package/src/schemas/llm/anthropic/toolSchemas.ts +41 -0
- package/src/schemas/llm/constants.ts +156 -0
- package/src/schemas/llm/converters.ts +499 -0
- package/src/schemas/llm/openai/converters.ts +383 -0
- package/src/schemas/llm/openai/messagePartSchemas.ts +30 -0
- package/src/schemas/llm/openai/messageSchemas.ts +78 -0
- package/src/schemas/llm/openai/responseFormatSchema.ts +22 -0
- package/src/schemas/llm/openai/toolCallSchemas.ts +58 -0
- package/src/schemas/llm/openai/toolChoiceSchemas.ts +18 -0
- package/src/schemas/llm/openai/toolSchemas.ts +74 -0
- package/src/schemas/llm/phoenixPrompt/converters.ts +178 -0
- package/src/schemas/llm/phoenixPrompt/messagePartSchemas.ts +95 -0
- package/src/schemas/llm/phoenixPrompt/messageSchemas.ts +34 -0
- package/src/schemas/llm/phoenixPrompt/responseFormatSchema.ts +21 -0
- package/src/schemas/llm/phoenixPrompt/toolCallSchemas.ts +7 -0
- package/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.ts +26 -0
- package/src/schemas/llm/phoenixPrompt/toolSchemas.ts +20 -0
- package/src/schemas/llm/schemas.ts +94 -0
- package/src/schemas/llm/types.ts +161 -0
- package/src/schemas/llm/utils.ts +259 -0
- package/src/schemas/llm/vercel/messagePartSchemas.ts +54 -0
- package/src/schemas/llm/vercel/messageSchemas.ts +54 -0
- package/src/schemas/llm/vercel/toolChoiceSchemas.ts +16 -0
- package/src/types/core.ts +9 -0
- package/src/types/logger.ts +5 -0
- package/src/types/prompts.ts +151 -0
- package/src/utils/assertUnreachable.ts +9 -0
- package/src/utils/formatPromptMessages.ts +79 -0
- package/src/utils/getDatasetLike.ts +52 -0
- package/src/utils/getPromptVersionLike.ts +73 -0
- package/src/utils/isObject.ts +6 -0
- package/src/utils/noopLogger.ts +10 -0
- package/src/utils/safelyParseJSON.ts +13 -0
- package/src/utils/safelyStringifyJSON.ts +15 -0
- package/src/utils/schemaMatches.ts +29 -0
package/src/client.ts
CHANGED
|
@@ -13,6 +13,9 @@ type pathsV1 = oapiPathsV1;
|
|
|
13
13
|
type componentsV1 = oapiComponentsV1;
|
|
14
14
|
type operationsV1 = oapiOperationsV1;
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Generated openapi types for the Phoenix client
|
|
18
|
+
*/
|
|
16
19
|
export type Types = {
|
|
17
20
|
V1: {
|
|
18
21
|
paths: pathsV1;
|
|
@@ -46,8 +49,9 @@ export const getMergedOptions = ({
|
|
|
46
49
|
/**
|
|
47
50
|
* Create a Phoenix client.
|
|
48
51
|
*
|
|
49
|
-
* @param
|
|
50
|
-
* @param
|
|
52
|
+
* @param config - The configuration to use for the client.
|
|
53
|
+
* @param config.options - The options to use for the client's OpenAPI Fetch wrapper.
|
|
54
|
+
* @param config.getEnvironmentOptions - The function to use to get the environment options.
|
|
51
55
|
* @returns The Phoenix client.
|
|
52
56
|
*/
|
|
53
57
|
export const createClient = (
|
|
@@ -60,4 +64,7 @@ export const createClient = (
|
|
|
60
64
|
return createOpenApiClient<pathsV1>(mergedOptions);
|
|
61
65
|
};
|
|
62
66
|
|
|
67
|
+
/**
|
|
68
|
+
* The type of the Phoenix client
|
|
69
|
+
*/
|
|
63
70
|
export type PhoenixClient = ReturnType<typeof createClient>;
|
package/src/config.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ClientOptions } from "openapi-fetch";
|
|
|
2
2
|
import z from "zod";
|
|
3
3
|
|
|
4
4
|
const phoenixEnvironmentSchema = z.object({
|
|
5
|
+
PHOENIX_API_KEY: z.string().optional(),
|
|
5
6
|
PHOENIX_HOST: z.string().optional(),
|
|
6
7
|
PHOENIX_CLIENT_HEADERS: z
|
|
7
8
|
.string()
|
|
@@ -33,9 +34,19 @@ const phoenixEnvironmentToClientOptions = (
|
|
|
33
34
|
): Partial<ClientOptions> => {
|
|
34
35
|
const options: Partial<ClientOptions> = {
|
|
35
36
|
baseUrl: environment.PHOENIX_HOST,
|
|
36
|
-
headers:
|
|
37
|
+
headers: {
|
|
38
|
+
...(environment.PHOENIX_CLIENT_HEADERS ?? {}),
|
|
39
|
+
...(environment.PHOENIX_API_KEY
|
|
40
|
+
? { Authorization: `Bearer ${environment.PHOENIX_API_KEY}` }
|
|
41
|
+
: {}),
|
|
42
|
+
},
|
|
37
43
|
};
|
|
38
44
|
|
|
45
|
+
// if headers is an empty object, delete it
|
|
46
|
+
if (options.headers && Object.keys(options.headers).length === 0) {
|
|
47
|
+
delete options.headers;
|
|
48
|
+
}
|
|
49
|
+
|
|
39
50
|
// filter out undefined values
|
|
40
51
|
// this will prevent clobbering over default values when merging
|
|
41
52
|
return Object.fromEntries(
|
|
@@ -12,33 +12,51 @@ import type {
|
|
|
12
12
|
import { promisifyResult } from "../utils/promisifyResult";
|
|
13
13
|
import invariant from "tiny-invariant";
|
|
14
14
|
import { pluralize } from "../utils/pluralize";
|
|
15
|
+
import { ClientFn } from "../types/core";
|
|
16
|
+
import { getDatasetLike } from "../utils/getDatasetLike";
|
|
17
|
+
import { type Logger } from "../types/logger";
|
|
15
18
|
|
|
16
|
-
export type
|
|
17
|
-
info: (message: string) => void;
|
|
18
|
-
error: (message: string) => void;
|
|
19
|
-
log: (message: string) => void;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export type RunExperimentParams = {
|
|
19
|
+
export type RunExperimentParams = ClientFn & {
|
|
23
20
|
/**
|
|
24
21
|
* An optional name for the experiment.
|
|
25
22
|
* Defaults to the dataset name + a timestamp
|
|
26
23
|
*/
|
|
27
24
|
experimentName?: string;
|
|
28
|
-
|
|
25
|
+
/**
|
|
26
|
+
* The dataset to run the experiment on
|
|
27
|
+
*/
|
|
29
28
|
dataset: Dataset | string | Example[];
|
|
29
|
+
/**
|
|
30
|
+
* The task to run
|
|
31
|
+
*/
|
|
30
32
|
task: ExperimentTask;
|
|
33
|
+
/**
|
|
34
|
+
* The evaluators to use
|
|
35
|
+
*/
|
|
31
36
|
evaluators?: Evaluator[];
|
|
37
|
+
/**
|
|
38
|
+
* The number of repetitions to run
|
|
39
|
+
*/
|
|
32
40
|
repetitions?: number;
|
|
33
41
|
/**
|
|
34
42
|
* The project under which the experiment task traces are recorded
|
|
35
43
|
*/
|
|
36
44
|
projectName?: string;
|
|
45
|
+
/**
|
|
46
|
+
* The logger to use
|
|
47
|
+
*/
|
|
37
48
|
logger?: Logger;
|
|
49
|
+
/**
|
|
50
|
+
* Whether to record the experiment results
|
|
51
|
+
*/
|
|
52
|
+
record?: boolean;
|
|
38
53
|
};
|
|
39
54
|
|
|
40
55
|
/**
|
|
41
56
|
* Run an experiment.
|
|
57
|
+
*
|
|
58
|
+
* @experimental This feature is not complete, and will change in the future.
|
|
59
|
+
* @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
|
|
42
60
|
*/
|
|
43
61
|
export async function runExperiment({
|
|
44
62
|
experimentName: _experimentName,
|
|
@@ -49,9 +67,10 @@ export async function runExperiment({
|
|
|
49
67
|
repetitions = 1,
|
|
50
68
|
projectName = "default",
|
|
51
69
|
logger = console,
|
|
70
|
+
record = true,
|
|
52
71
|
}: RunExperimentParams): Promise<RanExperiment> {
|
|
53
72
|
const client = _client ?? createClient();
|
|
54
|
-
const dataset = await
|
|
73
|
+
const dataset = await getDatasetLike({ dataset: _dataset, client });
|
|
55
74
|
invariant(dataset, `Dataset not found`);
|
|
56
75
|
invariant(dataset.examples.length > 0, `Dataset has no examples`);
|
|
57
76
|
const experimentName =
|
|
@@ -69,6 +88,12 @@ export async function runExperiment({
|
|
|
69
88
|
projectName,
|
|
70
89
|
};
|
|
71
90
|
|
|
91
|
+
if (!record) {
|
|
92
|
+
logger.info(
|
|
93
|
+
`🔧 Running experiment in readonly mode. Results will not be recorded.`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
72
97
|
logger.info(
|
|
73
98
|
`🧪 Starting experiment "${experimentName}" on dataset "${dataset.id}" with task "${task.name}" and ${evaluators?.length ?? 0} ${pluralize(
|
|
74
99
|
"evaluator",
|
|
@@ -160,7 +185,10 @@ function runTask({
|
|
|
160
185
|
try {
|
|
161
186
|
const taskOutput = await promisifyResult(task(example));
|
|
162
187
|
// TODO: why doesn't run output type match task output type?
|
|
163
|
-
thisRun.output =
|
|
188
|
+
thisRun.output =
|
|
189
|
+
typeof taskOutput === "string"
|
|
190
|
+
? taskOutput
|
|
191
|
+
: JSON.stringify(taskOutput);
|
|
164
192
|
} catch (error) {
|
|
165
193
|
thisRun.error = error instanceof Error ? error.message : "Unknown error";
|
|
166
194
|
}
|
|
@@ -170,6 +198,12 @@ function runTask({
|
|
|
170
198
|
return Promise.all(dataset.examples.map(run));
|
|
171
199
|
}
|
|
172
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Evaluate an experiment.
|
|
203
|
+
*
|
|
204
|
+
* @experimental This feature is not complete, and will change in the future.
|
|
205
|
+
* @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
|
|
206
|
+
*/
|
|
173
207
|
export async function evaluateExperiment({
|
|
174
208
|
experiment,
|
|
175
209
|
evaluators,
|
|
@@ -189,7 +223,10 @@ export async function evaluateExperiment({
|
|
|
189
223
|
logger: Logger;
|
|
190
224
|
}): Promise<RanExperiment> {
|
|
191
225
|
const client = _client ?? createClient();
|
|
192
|
-
const dataset = await
|
|
226
|
+
const dataset = await getDatasetLike({
|
|
227
|
+
dataset: experiment.datasetId,
|
|
228
|
+
client,
|
|
229
|
+
});
|
|
193
230
|
invariant(dataset, `Dataset "${experiment.datasetId}" not found`);
|
|
194
231
|
invariant(
|
|
195
232
|
dataset.examples.length > 0,
|
|
@@ -248,6 +285,9 @@ export async function evaluateExperiment({
|
|
|
248
285
|
|
|
249
286
|
/**
|
|
250
287
|
* Run an evaluator against a run.
|
|
288
|
+
*
|
|
289
|
+
* @experimental This feature is not complete, and will change in the future.
|
|
290
|
+
* @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
|
|
251
291
|
*/
|
|
252
292
|
async function runEvaluator({
|
|
253
293
|
evaluator,
|
|
@@ -292,51 +332,12 @@ async function runEvaluator({
|
|
|
292
332
|
return evaluate();
|
|
293
333
|
}
|
|
294
334
|
|
|
295
|
-
/**
|
|
296
|
-
* Return a dataset object from the input.
|
|
297
|
-
*
|
|
298
|
-
* If the input is a string, assume it is a dataset id and fetch the dataset from the client.
|
|
299
|
-
* If the input is an array of examples, create a new dataset from the examples then return it.
|
|
300
|
-
* If the input is a dataset, return it as is.
|
|
301
|
-
*
|
|
302
|
-
* @param dataset - The dataset to get.
|
|
303
|
-
* @returns The dataset.
|
|
304
|
-
*/
|
|
305
|
-
async function getDataset({
|
|
306
|
-
dataset,
|
|
307
|
-
client,
|
|
308
|
-
}: {
|
|
309
|
-
dataset: Dataset | string | Example[];
|
|
310
|
-
client: PhoenixClient;
|
|
311
|
-
}): Promise<Dataset> {
|
|
312
|
-
if (typeof dataset === "string") {
|
|
313
|
-
const datasetResponse = await client
|
|
314
|
-
.GET(`/v1/datasets/{id}`, { params: { path: { id: dataset } } })
|
|
315
|
-
.then((d) => d.data?.data);
|
|
316
|
-
invariant(datasetResponse, `Dataset ${dataset} not found`);
|
|
317
|
-
const examples = await client
|
|
318
|
-
.GET(`/v1/datasets/{id}/examples`, { params: { path: { id: dataset } } })
|
|
319
|
-
.then((e) => e.data?.data);
|
|
320
|
-
invariant(examples, `Examples for dataset ${dataset} not found`);
|
|
321
|
-
const datasetWithExamples: Dataset = {
|
|
322
|
-
...datasetResponse,
|
|
323
|
-
examples: examples.examples.map((example) => ({
|
|
324
|
-
...example,
|
|
325
|
-
updatedAt: new Date(example.updated_at),
|
|
326
|
-
})),
|
|
327
|
-
versionId: examples.version_id,
|
|
328
|
-
};
|
|
329
|
-
return datasetWithExamples;
|
|
330
|
-
}
|
|
331
|
-
if (Array.isArray(dataset)) {
|
|
332
|
-
throw new Error("TODO: implement dataset creation from examples");
|
|
333
|
-
}
|
|
334
|
-
return dataset;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
335
|
/**
|
|
338
336
|
* Wrap an evaluator function in an object with a name property.
|
|
339
337
|
*
|
|
338
|
+
* @experimental This feature is not complete, and will change in the future.
|
|
339
|
+
* @deprecated This function will be un-marked as deprecated once the experimental feature flag is removed.
|
|
340
|
+
*
|
|
340
341
|
* @param name - The name of the evaluator.
|
|
341
342
|
* @param evaluate - The evaluator function.
|
|
342
343
|
* @returns The evaluator object.
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PromptModelProvider } from "../types/prompts";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A mapping of ModelProvider to a human-readable string
|
|
5
|
+
*/
|
|
6
|
+
export const PromptModelProviders: Record<PromptModelProvider, string> = {
|
|
7
|
+
OPENAI: "OpenAI",
|
|
8
|
+
AZURE_OPENAI: "Azure OpenAI",
|
|
9
|
+
ANTHROPIC: "Anthropic",
|
|
10
|
+
GOOGLE: "Google",
|
|
11
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { createClient } from "../client";
|
|
2
|
+
import { ClientFn } from "../types/core";
|
|
3
|
+
import {
|
|
4
|
+
PromptData,
|
|
5
|
+
PromptVersionData,
|
|
6
|
+
PromptVersion,
|
|
7
|
+
OpenAIInvocationParameters,
|
|
8
|
+
AzureOpenAIInvocationParameters,
|
|
9
|
+
AnthropicInvocationParameters,
|
|
10
|
+
GoogleInvocationParameters,
|
|
11
|
+
PromptChatMessage,
|
|
12
|
+
} from "../types/prompts";
|
|
13
|
+
import { assertUnreachable } from "../utils/assertUnreachable";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Parameters to crate a prompt
|
|
17
|
+
*/
|
|
18
|
+
export interface CreatePromptParams extends ClientFn, PromptData {
|
|
19
|
+
/**
|
|
20
|
+
* The name of the promt
|
|
21
|
+
*/
|
|
22
|
+
name: string;
|
|
23
|
+
/**
|
|
24
|
+
* The description of the prompt
|
|
25
|
+
*/
|
|
26
|
+
description?: string;
|
|
27
|
+
/**
|
|
28
|
+
* The prompt version to push onto the history of the prompt
|
|
29
|
+
*/
|
|
30
|
+
version: PromptVersionData;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Create a prompt and store it in Phoenix
|
|
35
|
+
* If a prompt with the same name exists, a new version of the prompt will be appended to the history
|
|
36
|
+
*/
|
|
37
|
+
export async function createPrompt({
|
|
38
|
+
client: _client,
|
|
39
|
+
version,
|
|
40
|
+
...promptParams
|
|
41
|
+
}: CreatePromptParams): Promise<PromptVersion> {
|
|
42
|
+
const client = _client ?? createClient();
|
|
43
|
+
const response = await client.POST("/v1/prompts", {
|
|
44
|
+
body: {
|
|
45
|
+
prompt: promptParams,
|
|
46
|
+
version: version,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
const createdPromptVersion = response.data?.data;
|
|
50
|
+
if (!createdPromptVersion) {
|
|
51
|
+
throw new Error("Failed to create prompt");
|
|
52
|
+
}
|
|
53
|
+
return createdPromptVersion;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
interface PromptVersionInputBase {
|
|
57
|
+
description?: string;
|
|
58
|
+
modelName: PromptVersionData["model_name"];
|
|
59
|
+
/**
|
|
60
|
+
* The template for the prompt version.
|
|
61
|
+
* Currently only chat is supported.
|
|
62
|
+
*/
|
|
63
|
+
template: PromptChatMessage[];
|
|
64
|
+
/**
|
|
65
|
+
* The format of the template.
|
|
66
|
+
* @default "MUSTACHE"
|
|
67
|
+
*/
|
|
68
|
+
templateFormat?: PromptVersionData["template_format"];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
interface OpenAIPromptVersionInput extends PromptVersionInputBase {
|
|
72
|
+
modelProvider: "OPENAI";
|
|
73
|
+
invocationParameters?: OpenAIInvocationParameters;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
interface AzureOpenAIPromptVersionInput extends PromptVersionInputBase {
|
|
77
|
+
modelProvider: "AZURE_OPENAI";
|
|
78
|
+
invocationParameters?: AzureOpenAIInvocationParameters;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface AnthropicPromptVersionInput extends PromptVersionInputBase {
|
|
82
|
+
modelProvider: "ANTHROPIC";
|
|
83
|
+
/**
|
|
84
|
+
* The invocation parameters for the prompt version.
|
|
85
|
+
* For Anthropic, the invocation parameters are required since max_tokens is required.
|
|
86
|
+
*/
|
|
87
|
+
invocationParameters: AnthropicInvocationParameters;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
interface GooglePromptVersionInput extends PromptVersionInputBase {
|
|
91
|
+
modelProvider: "GOOGLE";
|
|
92
|
+
invocationParameters?: GoogleInvocationParameters;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
type PromptVersionInput =
|
|
96
|
+
| OpenAIPromptVersionInput
|
|
97
|
+
| AzureOpenAIPromptVersionInput
|
|
98
|
+
| AnthropicPromptVersionInput
|
|
99
|
+
| GooglePromptVersionInput;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* A helper function to construct a prompt version declaratively
|
|
103
|
+
*/
|
|
104
|
+
export function promptVersion(params: PromptVersionInput): PromptVersionData {
|
|
105
|
+
const {
|
|
106
|
+
description = "",
|
|
107
|
+
modelProvider: model_provider,
|
|
108
|
+
modelName: model_name,
|
|
109
|
+
template: templateMessages,
|
|
110
|
+
templateFormat: template_format = "MUSTACHE",
|
|
111
|
+
invocationParameters: invocation_parameters,
|
|
112
|
+
} = params;
|
|
113
|
+
switch (model_provider) {
|
|
114
|
+
case "OPENAI":
|
|
115
|
+
return {
|
|
116
|
+
description,
|
|
117
|
+
model_provider,
|
|
118
|
+
model_name,
|
|
119
|
+
template_type: "CHAT",
|
|
120
|
+
template_format,
|
|
121
|
+
template: {
|
|
122
|
+
type: "chat",
|
|
123
|
+
messages: templateMessages,
|
|
124
|
+
},
|
|
125
|
+
invocation_parameters: {
|
|
126
|
+
type: "openai",
|
|
127
|
+
openai: invocation_parameters ?? {},
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
case "AZURE_OPENAI":
|
|
131
|
+
return {
|
|
132
|
+
description,
|
|
133
|
+
model_provider,
|
|
134
|
+
model_name,
|
|
135
|
+
template_type: "CHAT",
|
|
136
|
+
template_format,
|
|
137
|
+
template: {
|
|
138
|
+
type: "chat",
|
|
139
|
+
messages: templateMessages,
|
|
140
|
+
},
|
|
141
|
+
invocation_parameters: {
|
|
142
|
+
type: "azure_openai",
|
|
143
|
+
azure_openai: invocation_parameters ?? {},
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
case "ANTHROPIC":
|
|
147
|
+
return {
|
|
148
|
+
description,
|
|
149
|
+
model_provider,
|
|
150
|
+
model_name,
|
|
151
|
+
template_type: "CHAT",
|
|
152
|
+
template_format,
|
|
153
|
+
template: {
|
|
154
|
+
type: "chat",
|
|
155
|
+
messages: templateMessages,
|
|
156
|
+
},
|
|
157
|
+
invocation_parameters: {
|
|
158
|
+
type: "anthropic",
|
|
159
|
+
anthropic: invocation_parameters,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
case "GOOGLE":
|
|
163
|
+
return {
|
|
164
|
+
description,
|
|
165
|
+
model_provider,
|
|
166
|
+
model_name,
|
|
167
|
+
template_type: "CHAT",
|
|
168
|
+
template_format,
|
|
169
|
+
template: {
|
|
170
|
+
type: "chat",
|
|
171
|
+
messages: templateMessages,
|
|
172
|
+
},
|
|
173
|
+
invocation_parameters: {
|
|
174
|
+
type: "google",
|
|
175
|
+
google: invocation_parameters ?? {},
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
default:
|
|
179
|
+
assertUnreachable(model_provider);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createClient } from "../client";
|
|
2
|
+
import { ClientFn } from "../types/core";
|
|
3
|
+
import { PromptSelector, PromptVersion } from "../types/prompts";
|
|
4
|
+
import { getPromptBySelector } from "../utils/getPromptVersionLike";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Parameters for the getPrompt function
|
|
8
|
+
*/
|
|
9
|
+
export interface GetPromptParams extends ClientFn {
|
|
10
|
+
/**
|
|
11
|
+
* The prompt to get. Can be in the form of a prompt id, a prompt version id, a prompt name, or a prompt name + tag.
|
|
12
|
+
*/
|
|
13
|
+
prompt: PromptSelector;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Get a prompt from the Phoenix API.
|
|
18
|
+
*/
|
|
19
|
+
export async function getPrompt({
|
|
20
|
+
client: _client,
|
|
21
|
+
prompt: _prompt,
|
|
22
|
+
}: GetPromptParams): Promise<PromptVersion | null> {
|
|
23
|
+
const client = _client ?? createClient();
|
|
24
|
+
const promptVersion = await getPromptBySelector({ client, prompt: _prompt });
|
|
25
|
+
return promptVersion;
|
|
26
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PromptModelProvider } from "../../types/prompts";
|
|
2
|
+
|
|
3
|
+
export const SUPPORTED_SDKS = ["openai", "anthropic", "ai"] as const;
|
|
4
|
+
|
|
5
|
+
export const SUPPORTED_SDK_TO_PROMPT_MODEL_PROVIDER = {
|
|
6
|
+
openai: "OPENAI",
|
|
7
|
+
anthropic: "ANTHROPIC",
|
|
8
|
+
} satisfies Partial<
|
|
9
|
+
Record<(typeof SUPPORTED_SDKS)[number], PromptModelProvider>
|
|
10
|
+
>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./toSDK";
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import invariant from "tiny-invariant";
|
|
2
|
+
import {
|
|
3
|
+
safelyConvertMessageToProvider,
|
|
4
|
+
safelyConvertToolChoiceToProvider,
|
|
5
|
+
} from "../../schemas/llm/converters";
|
|
6
|
+
import { formatPromptMessages } from "../../utils/formatPromptMessages";
|
|
7
|
+
import { Variables, toSDKParamsBase } from "./types";
|
|
8
|
+
import {
|
|
9
|
+
type streamText,
|
|
10
|
+
type generateText,
|
|
11
|
+
type ToolSet,
|
|
12
|
+
type Tool,
|
|
13
|
+
jsonSchema,
|
|
14
|
+
} from "ai";
|
|
15
|
+
import { VercelAIToolChoice } from "../../schemas/llm/vercel/toolChoiceSchemas";
|
|
16
|
+
|
|
17
|
+
export type PartialStreamTextParams = Omit<
|
|
18
|
+
Parameters<typeof streamText>[0] | Parameters<typeof generateText>[0],
|
|
19
|
+
"model"
|
|
20
|
+
>;
|
|
21
|
+
|
|
22
|
+
export type ToAIParams<V extends Variables> = toSDKParamsBase<V>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Converts a Phoenix prompt to Vercel AI sdk params.
|
|
26
|
+
*
|
|
27
|
+
* - note: To use response format, you must pass `prompt.response_format.json` to generateObject or streamObject
|
|
28
|
+
* directly, through the `schema` argument.
|
|
29
|
+
*/
|
|
30
|
+
export const toAI = <V extends Variables>({
|
|
31
|
+
prompt,
|
|
32
|
+
variables,
|
|
33
|
+
}: ToAIParams<V>): PartialStreamTextParams | null => {
|
|
34
|
+
// eslint-disable-next-line no-console
|
|
35
|
+
console.warn(
|
|
36
|
+
"Prompt invocation parameters not currently supported in AI SDK, falling back to default invocation parameters"
|
|
37
|
+
);
|
|
38
|
+
try {
|
|
39
|
+
// parts of the prompt that can be directly converted to OpenAI params
|
|
40
|
+
const baseCompletionParams = {
|
|
41
|
+
// Invocation parameters are validated on the phoenix-side
|
|
42
|
+
} satisfies Partial<PartialStreamTextParams>;
|
|
43
|
+
|
|
44
|
+
if (!("messages" in prompt.template)) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let formattedMessages = prompt.template.messages;
|
|
49
|
+
|
|
50
|
+
if (variables) {
|
|
51
|
+
formattedMessages = formatPromptMessages(
|
|
52
|
+
prompt.template_format,
|
|
53
|
+
formattedMessages,
|
|
54
|
+
variables
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const messages = formattedMessages.map((message) => {
|
|
59
|
+
const vercelAIMessage = safelyConvertMessageToProvider({
|
|
60
|
+
message,
|
|
61
|
+
targetProvider: "VERCEL_AI",
|
|
62
|
+
});
|
|
63
|
+
invariant(vercelAIMessage, "Message is not valid");
|
|
64
|
+
return vercelAIMessage;
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// convert tools to Vercel AI tool set, which is a map of tool name to tool
|
|
68
|
+
let tools: ToolSet | undefined = prompt.tools?.tools.reduce((acc, tool) => {
|
|
69
|
+
if (!tool.function.parameters) {
|
|
70
|
+
return acc;
|
|
71
|
+
}
|
|
72
|
+
acc[tool.function.name] = {
|
|
73
|
+
type: "function",
|
|
74
|
+
parameters: jsonSchema(tool.function.parameters),
|
|
75
|
+
description: tool.function.description,
|
|
76
|
+
} satisfies Tool;
|
|
77
|
+
return acc;
|
|
78
|
+
}, {} as ToolSet);
|
|
79
|
+
const hasTools = Object.keys(tools ?? {}).length > 0;
|
|
80
|
+
tools = hasTools ? tools : undefined;
|
|
81
|
+
|
|
82
|
+
let toolChoice: VercelAIToolChoice | undefined =
|
|
83
|
+
safelyConvertToolChoiceToProvider({
|
|
84
|
+
toolChoice: prompt.tools?.tool_choice,
|
|
85
|
+
targetProvider: "VERCEL_AI",
|
|
86
|
+
}) || undefined;
|
|
87
|
+
toolChoice = hasTools ? toolChoice : undefined;
|
|
88
|
+
|
|
89
|
+
// combine base and computed params
|
|
90
|
+
const completionParams = {
|
|
91
|
+
...baseCompletionParams,
|
|
92
|
+
messages,
|
|
93
|
+
tools,
|
|
94
|
+
toolChoice,
|
|
95
|
+
} satisfies Partial<PartialStreamTextParams>;
|
|
96
|
+
|
|
97
|
+
return completionParams;
|
|
98
|
+
} catch (error) {
|
|
99
|
+
// eslint-disable-next-line no-console
|
|
100
|
+
console.warn(`Failed to convert prompt to AI params`);
|
|
101
|
+
// eslint-disable-next-line no-console
|
|
102
|
+
console.error(error);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { MessageCreateParams } from "@anthropic-ai/sdk/resources/messages/messages";
|
|
2
|
+
import type { Variables, toSDKParamsBase } from "./types";
|
|
3
|
+
import { formatPromptMessages } from "../../utils/formatPromptMessages";
|
|
4
|
+
|
|
5
|
+
import invariant from "tiny-invariant";
|
|
6
|
+
import {
|
|
7
|
+
safelyConvertMessageToProvider,
|
|
8
|
+
safelyConvertToolChoiceToProvider,
|
|
9
|
+
safelyConvertToolDefinitionToProvider,
|
|
10
|
+
} from "../../schemas/llm/converters";
|
|
11
|
+
import { AnthropicToolChoice } from "../../schemas/llm/anthropic/toolChoiceSchemas";
|
|
12
|
+
|
|
13
|
+
// We must re-export these types so that they are included in the phoenix-client distribution
|
|
14
|
+
export type { MessageCreateParams };
|
|
15
|
+
|
|
16
|
+
export type ToAnthropicParams<V extends Variables> = toSDKParamsBase<V>;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Convert a Phoenix prompt to Anthropic client sdk's message create parameters
|
|
20
|
+
*/
|
|
21
|
+
export const toAnthropic = <V extends Variables = Variables>({
|
|
22
|
+
prompt,
|
|
23
|
+
variables,
|
|
24
|
+
}: ToAnthropicParams<V>): MessageCreateParams | null => {
|
|
25
|
+
try {
|
|
26
|
+
let invocationParameters: { max_tokens: number } | undefined;
|
|
27
|
+
if (prompt.invocation_parameters.type === "anthropic") {
|
|
28
|
+
invocationParameters = prompt.invocation_parameters.anthropic;
|
|
29
|
+
} else {
|
|
30
|
+
// eslint-disable-next-line no-console
|
|
31
|
+
console.warn(
|
|
32
|
+
"Prompt is not an Anthropic prompt, falling back to default Anthropic invocation parameters"
|
|
33
|
+
);
|
|
34
|
+
invocationParameters = { max_tokens: 1024 };
|
|
35
|
+
}
|
|
36
|
+
// parts of the prompt that can be directly converted to Anthropic params
|
|
37
|
+
const baseCompletionParams = {
|
|
38
|
+
model: prompt.model_name,
|
|
39
|
+
...invocationParameters,
|
|
40
|
+
} satisfies Partial<MessageCreateParams>;
|
|
41
|
+
|
|
42
|
+
if (!("messages" in prompt.template)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
let formattedMessages = prompt.template.messages;
|
|
47
|
+
|
|
48
|
+
if (variables) {
|
|
49
|
+
formattedMessages = formatPromptMessages(
|
|
50
|
+
prompt.template_format,
|
|
51
|
+
formattedMessages,
|
|
52
|
+
variables
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const messages = formattedMessages.map((message) => {
|
|
57
|
+
const anthropicMessage = safelyConvertMessageToProvider({
|
|
58
|
+
message,
|
|
59
|
+
targetProvider: "ANTHROPIC",
|
|
60
|
+
});
|
|
61
|
+
invariant(anthropicMessage, "Message is not valid");
|
|
62
|
+
return anthropicMessage;
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
let tools = prompt.tools?.tools.map((tool) => {
|
|
66
|
+
const anthropicToolDefinition = safelyConvertToolDefinitionToProvider({
|
|
67
|
+
toolDefinition: tool,
|
|
68
|
+
targetProvider: "ANTHROPIC",
|
|
69
|
+
});
|
|
70
|
+
invariant(anthropicToolDefinition, "Tool definition is not valid");
|
|
71
|
+
return anthropicToolDefinition;
|
|
72
|
+
});
|
|
73
|
+
tools = (tools?.length ?? 0) > 0 ? tools : undefined;
|
|
74
|
+
|
|
75
|
+
let tool_choice: AnthropicToolChoice | undefined =
|
|
76
|
+
safelyConvertToolChoiceToProvider({
|
|
77
|
+
toolChoice: prompt?.tools?.tool_choice,
|
|
78
|
+
targetProvider: "ANTHROPIC",
|
|
79
|
+
}) || undefined;
|
|
80
|
+
tool_choice = tools?.length ? tool_choice : undefined;
|
|
81
|
+
|
|
82
|
+
// combine base and computed params
|
|
83
|
+
const completionParams = {
|
|
84
|
+
...baseCompletionParams,
|
|
85
|
+
messages,
|
|
86
|
+
tools,
|
|
87
|
+
tool_choice,
|
|
88
|
+
} satisfies Partial<MessageCreateParams>;
|
|
89
|
+
|
|
90
|
+
return completionParams;
|
|
91
|
+
} catch (e) {
|
|
92
|
+
// eslint-disable-next-line no-console
|
|
93
|
+
console.warn(`Failed to convert prompt to Anthropic params`);
|
|
94
|
+
// eslint-disable-next-line no-console
|
|
95
|
+
console.error(e);
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
};
|