@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.
Files changed (516) hide show
  1. package/README.md +136 -7
  2. package/dist/esm/__generated__/api/v1.d.ts +743 -12
  3. package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
  4. package/dist/esm/client.d.ts +9 -2
  5. package/dist/esm/client.d.ts.map +1 -1
  6. package/dist/esm/client.js +3 -2
  7. package/dist/esm/client.js.map +1 -1
  8. package/dist/esm/config.d.ts.map +1 -1
  9. package/dist/esm/config.js +11 -1
  10. package/dist/esm/config.js.map +1 -1
  11. package/dist/esm/experiments/runExperiment.d.ts +35 -8
  12. package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
  13. package/dist/esm/experiments/runExperiment.js +29 -39
  14. package/dist/esm/experiments/runExperiment.js.map +1 -1
  15. package/dist/esm/index.d.ts +0 -1
  16. package/dist/esm/index.d.ts.map +1 -1
  17. package/dist/esm/index.js +0 -1
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/esm/prompts/constants.d.ts +6 -0
  20. package/dist/esm/prompts/constants.d.ts.map +1 -0
  21. package/dist/esm/prompts/constants.js +10 -0
  22. package/dist/esm/prompts/constants.js.map +1 -0
  23. package/dist/esm/prompts/createPrompt.d.ts +65 -0
  24. package/dist/esm/prompts/createPrompt.d.ts.map +1 -0
  25. package/dist/esm/prompts/createPrompt.js +95 -0
  26. package/dist/esm/prompts/createPrompt.js.map +1 -0
  27. package/dist/esm/prompts/getPrompt.d.ts +16 -0
  28. package/dist/esm/prompts/getPrompt.d.ts.map +1 -0
  29. package/dist/esm/prompts/getPrompt.js +11 -0
  30. package/dist/esm/prompts/getPrompt.js.map +1 -0
  31. package/dist/esm/prompts/index.d.ts +4 -0
  32. package/dist/esm/prompts/index.d.ts.map +1 -0
  33. package/dist/esm/prompts/index.js +4 -0
  34. package/dist/esm/prompts/index.js.map +1 -0
  35. package/dist/esm/prompts/sdks/constants.d.ts +6 -0
  36. package/dist/esm/prompts/sdks/constants.d.ts.map +1 -0
  37. package/dist/esm/prompts/sdks/constants.js +6 -0
  38. package/dist/esm/prompts/sdks/constants.js.map +1 -0
  39. package/dist/esm/prompts/sdks/index.d.ts +2 -0
  40. package/dist/esm/prompts/sdks/index.d.ts.map +1 -0
  41. package/dist/esm/prompts/sdks/index.js +2 -0
  42. package/dist/esm/prompts/sdks/index.js.map +1 -0
  43. package/dist/esm/prompts/sdks/toAI.d.ts +12 -0
  44. package/dist/esm/prompts/sdks/toAI.d.ts.map +1 -0
  45. package/dist/esm/prompts/sdks/toAI.js +70 -0
  46. package/dist/esm/prompts/sdks/toAI.js.map +1 -0
  47. package/dist/esm/prompts/sdks/toAnthropic.d.ts +9 -0
  48. package/dist/esm/prompts/sdks/toAnthropic.d.ts.map +1 -0
  49. package/dist/esm/prompts/sdks/toAnthropic.js +69 -0
  50. package/dist/esm/prompts/sdks/toAnthropic.js.map +1 -0
  51. package/dist/esm/prompts/sdks/toOpenAI.d.ts +11 -0
  52. package/dist/esm/prompts/sdks/toOpenAI.d.ts.map +1 -0
  53. package/dist/esm/prompts/sdks/toOpenAI.js +77 -0
  54. package/dist/esm/prompts/sdks/toOpenAI.js.map +1 -0
  55. package/dist/esm/prompts/sdks/toSDK.d.ts +47 -0
  56. package/dist/esm/prompts/sdks/toSDK.d.ts.map +1 -0
  57. package/dist/esm/prompts/sdks/toSDK.js +44 -0
  58. package/dist/esm/prompts/sdks/toSDK.js.map +1 -0
  59. package/dist/esm/prompts/sdks/types.d.ts +28 -0
  60. package/dist/esm/prompts/sdks/types.d.ts.map +1 -0
  61. package/dist/esm/prompts/sdks/types.js +2 -0
  62. package/dist/esm/prompts/sdks/types.js.map +1 -0
  63. package/dist/esm/schemas/jsonLiteralSchema.d.ts +17 -0
  64. package/dist/esm/schemas/jsonLiteralSchema.d.ts.map +1 -0
  65. package/dist/esm/schemas/jsonLiteralSchema.js +16 -0
  66. package/dist/esm/schemas/jsonLiteralSchema.js.map +1 -0
  67. package/dist/esm/schemas/jsonSchema.d.ts +132 -0
  68. package/dist/esm/schemas/jsonSchema.d.ts.map +1 -0
  69. package/dist/esm/schemas/jsonSchema.js +42 -0
  70. package/dist/esm/schemas/jsonSchema.js.map +1 -0
  71. package/dist/esm/schemas/llm/anthropic/converters.d.ts +1497 -0
  72. package/dist/esm/schemas/llm/anthropic/converters.d.ts.map +1 -0
  73. package/dist/esm/schemas/llm/anthropic/converters.js +123 -0
  74. package/dist/esm/schemas/llm/anthropic/converters.js.map +1 -0
  75. package/dist/esm/schemas/llm/anthropic/messagePartSchemas.d.ts +264 -0
  76. package/dist/esm/schemas/llm/anthropic/messagePartSchemas.d.ts.map +1 -0
  77. package/dist/esm/schemas/llm/anthropic/messagePartSchemas.js +36 -0
  78. package/dist/esm/schemas/llm/anthropic/messagePartSchemas.js.map +1 -0
  79. package/dist/esm/schemas/llm/anthropic/messageSchemas.d.ts +795 -0
  80. package/dist/esm/schemas/llm/anthropic/messageSchemas.d.ts.map +1 -0
  81. package/dist/esm/schemas/llm/anthropic/messageSchemas.js +23 -0
  82. package/dist/esm/schemas/llm/anthropic/messageSchemas.js.map +1 -0
  83. package/dist/esm/schemas/llm/anthropic/toolCallSchemas.d.ts +48 -0
  84. package/dist/esm/schemas/llm/anthropic/toolCallSchemas.d.ts.map +1 -0
  85. package/dist/esm/schemas/llm/anthropic/toolCallSchemas.js +27 -0
  86. package/dist/esm/schemas/llm/anthropic/toolCallSchemas.js.map +1 -0
  87. package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.d.ts +30 -0
  88. package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.d.ts.map +1 -0
  89. package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.js +19 -0
  90. package/dist/esm/schemas/llm/anthropic/toolChoiceSchemas.js.map +1 -0
  91. package/dist/esm/schemas/llm/anthropic/toolSchemas.d.ts +191 -0
  92. package/dist/esm/schemas/llm/anthropic/toolSchemas.d.ts.map +1 -0
  93. package/dist/esm/schemas/llm/anthropic/toolSchemas.js +31 -0
  94. package/dist/esm/schemas/llm/anthropic/toolSchemas.js.map +1 -0
  95. package/dist/esm/schemas/llm/constants.d.ts +7422 -0
  96. package/dist/esm/schemas/llm/constants.d.ts.map +1 -0
  97. package/dist/esm/schemas/llm/constants.js +128 -0
  98. package/dist/esm/schemas/llm/constants.js.map +1 -0
  99. package/dist/esm/schemas/llm/converters.d.ts +29720 -0
  100. package/dist/esm/schemas/llm/converters.d.ts.map +1 -0
  101. package/dist/esm/schemas/llm/converters.js +308 -0
  102. package/dist/esm/schemas/llm/converters.js.map +1 -0
  103. package/dist/esm/schemas/llm/openai/converters.d.ts +3507 -0
  104. package/dist/esm/schemas/llm/openai/converters.d.ts.map +1 -0
  105. package/dist/esm/schemas/llm/openai/converters.js +311 -0
  106. package/dist/esm/schemas/llm/openai/converters.js.map +1 -0
  107. package/dist/esm/schemas/llm/openai/messagePartSchemas.d.ts +64 -0
  108. package/dist/esm/schemas/llm/openai/messagePartSchemas.d.ts.map +1 -0
  109. package/dist/esm/schemas/llm/openai/messagePartSchemas.js +21 -0
  110. package/dist/esm/schemas/llm/openai/messagePartSchemas.js.map +1 -0
  111. package/dist/esm/schemas/llm/openai/messageSchemas.d.ts +733 -0
  112. package/dist/esm/schemas/llm/openai/messageSchemas.d.ts.map +1 -0
  113. package/dist/esm/schemas/llm/openai/messageSchemas.js +67 -0
  114. package/dist/esm/schemas/llm/openai/messageSchemas.js.map +1 -0
  115. package/dist/esm/schemas/llm/openai/responseFormatSchema.d.ts +233 -0
  116. package/dist/esm/schemas/llm/openai/responseFormatSchema.d.ts.map +1 -0
  117. package/dist/esm/schemas/llm/openai/responseFormatSchema.js +19 -0
  118. package/dist/esm/schemas/llm/openai/responseFormatSchema.js.map +1 -0
  119. package/dist/esm/schemas/llm/openai/toolCallSchemas.d.ts +95 -0
  120. package/dist/esm/schemas/llm/openai/toolCallSchemas.d.ts.map +1 -0
  121. package/dist/esm/schemas/llm/openai/toolCallSchemas.js +40 -0
  122. package/dist/esm/schemas/llm/openai/toolCallSchemas.js.map +1 -0
  123. package/dist/esm/schemas/llm/openai/toolChoiceSchemas.d.ts +28 -0
  124. package/dist/esm/schemas/llm/openai/toolChoiceSchemas.d.ts.map +1 -0
  125. package/dist/esm/schemas/llm/openai/toolChoiceSchemas.js +16 -0
  126. package/dist/esm/schemas/llm/openai/toolChoiceSchemas.js.map +1 -0
  127. package/dist/esm/schemas/llm/openai/toolSchemas.d.ts +1282 -0
  128. package/dist/esm/schemas/llm/openai/toolSchemas.d.ts.map +1 -0
  129. package/dist/esm/schemas/llm/openai/toolSchemas.js +62 -0
  130. package/dist/esm/schemas/llm/openai/toolSchemas.js.map +1 -0
  131. package/dist/esm/schemas/llm/phoenixPrompt/converters.d.ts +847 -0
  132. package/dist/esm/schemas/llm/phoenixPrompt/converters.d.ts.map +1 -0
  133. package/dist/esm/schemas/llm/phoenixPrompt/converters.js +130 -0
  134. package/dist/esm/schemas/llm/phoenixPrompt/converters.js.map +1 -0
  135. package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts +128 -0
  136. package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts.map +1 -0
  137. package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.js +60 -0
  138. package/dist/esm/schemas/llm/phoenixPrompt/messagePartSchemas.js.map +1 -0
  139. package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.d.ts +196 -0
  140. package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.d.ts.map +1 -0
  141. package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.js +23 -0
  142. package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.js.map +1 -0
  143. package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts +41 -0
  144. package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts.map +1 -0
  145. package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.js +15 -0
  146. package/dist/esm/schemas/llm/phoenixPrompt/responseFormatSchema.js.map +1 -0
  147. package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts +36 -0
  148. package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts.map +1 -0
  149. package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.js +3 -0
  150. package/dist/esm/schemas/llm/phoenixPrompt/toolCallSchemas.js.map +1 -0
  151. package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts +34 -0
  152. package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts.map +1 -0
  153. package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.js +21 -0
  154. package/dist/esm/schemas/llm/phoenixPrompt/toolChoiceSchemas.js.map +1 -0
  155. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.d.ts +41 -0
  156. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -0
  157. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js +15 -0
  158. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -0
  159. package/dist/esm/schemas/llm/schemas.d.ts +2777 -0
  160. package/dist/esm/schemas/llm/schemas.d.ts.map +1 -0
  161. package/dist/esm/schemas/llm/schemas.js +77 -0
  162. package/dist/esm/schemas/llm/schemas.js.map +1 -0
  163. package/dist/esm/schemas/llm/types.d.ts +129 -0
  164. package/dist/esm/schemas/llm/types.d.ts.map +1 -0
  165. package/dist/esm/schemas/llm/types.js +2 -0
  166. package/dist/esm/schemas/llm/types.js.map +1 -0
  167. package/dist/esm/schemas/llm/utils.d.ts +25 -0
  168. package/dist/esm/schemas/llm/utils.d.ts.map +1 -0
  169. package/dist/esm/schemas/llm/utils.js +176 -0
  170. package/dist/esm/schemas/llm/utils.js.map +1 -0
  171. package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts +114 -0
  172. package/dist/esm/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -0
  173. package/dist/esm/schemas/llm/vercel/messagePartSchemas.js +35 -0
  174. package/dist/esm/schemas/llm/vercel/messagePartSchemas.js.map +1 -0
  175. package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts +142 -0
  176. package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts.map +1 -0
  177. package/dist/esm/schemas/llm/vercel/messageSchemas.js +42 -0
  178. package/dist/esm/schemas/llm/vercel/messageSchemas.js.map +1 -0
  179. package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.d.ts +16 -0
  180. package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.d.ts.map +1 -0
  181. package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.js +14 -0
  182. package/dist/esm/schemas/llm/vercel/toolChoiceSchemas.js.map +1 -0
  183. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  184. package/dist/esm/types/core.d.ts +8 -0
  185. package/dist/esm/types/core.d.ts.map +1 -1
  186. package/dist/esm/types/logger.d.ts +6 -0
  187. package/dist/esm/types/logger.d.ts.map +1 -0
  188. package/dist/esm/types/logger.js +2 -0
  189. package/dist/esm/types/logger.js.map +1 -0
  190. package/dist/esm/types/prompts.d.ts +107 -0
  191. package/dist/esm/types/prompts.d.ts.map +1 -0
  192. package/dist/esm/types/prompts.js +2 -0
  193. package/dist/esm/types/prompts.js.map +1 -0
  194. package/dist/esm/utils/assertUnreachable.d.ts +8 -0
  195. package/dist/esm/utils/assertUnreachable.d.ts.map +1 -0
  196. package/dist/esm/utils/assertUnreachable.js +10 -0
  197. package/dist/esm/utils/assertUnreachable.js.map +1 -0
  198. package/dist/esm/utils/formatPromptMessages.d.ts +26 -0
  199. package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -0
  200. package/dist/esm/utils/formatPromptMessages.js +64 -0
  201. package/dist/esm/utils/formatPromptMessages.js.map +1 -0
  202. package/dist/esm/utils/getDatasetLike.d.ts +22 -0
  203. package/dist/esm/utils/getDatasetLike.d.ts.map +1 -0
  204. package/dist/esm/utils/getDatasetLike.js +37 -0
  205. package/dist/esm/utils/getDatasetLike.js.map +1 -0
  206. package/dist/esm/utils/getPromptVersionLike.d.ts +29 -0
  207. package/dist/esm/utils/getPromptVersionLike.d.ts.map +1 -0
  208. package/dist/esm/utils/getPromptVersionLike.js +50 -0
  209. package/dist/esm/utils/getPromptVersionLike.js.map +1 -0
  210. package/dist/esm/utils/isObject.d.ts +5 -0
  211. package/dist/esm/utils/isObject.d.ts.map +1 -0
  212. package/dist/esm/utils/isObject.js +7 -0
  213. package/dist/esm/utils/isObject.js.map +1 -0
  214. package/dist/esm/utils/noopLogger.d.ts +9 -0
  215. package/dist/esm/utils/noopLogger.d.ts.map +1 -0
  216. package/dist/esm/utils/noopLogger.js +9 -0
  217. package/dist/esm/utils/noopLogger.js.map +1 -0
  218. package/dist/esm/utils/safelyParseJSON.d.ts +14 -0
  219. package/dist/esm/utils/safelyParseJSON.d.ts.map +1 -0
  220. package/dist/esm/utils/safelyParseJSON.js +15 -0
  221. package/dist/esm/utils/safelyParseJSON.js.map +1 -0
  222. package/dist/esm/utils/safelyStringifyJSON.d.ts +14 -0
  223. package/dist/esm/utils/safelyStringifyJSON.d.ts.map +1 -0
  224. package/dist/esm/utils/safelyStringifyJSON.js +15 -0
  225. package/dist/esm/utils/safelyStringifyJSON.js.map +1 -0
  226. package/dist/esm/utils/schemaMatches.d.ts +17 -0
  227. package/dist/esm/utils/schemaMatches.d.ts.map +1 -0
  228. package/dist/esm/utils/schemaMatches.js +9 -0
  229. package/dist/esm/utils/schemaMatches.js.map +1 -0
  230. package/dist/src/__generated__/api/v1.d.ts +743 -12
  231. package/dist/src/__generated__/api/v1.d.ts.map +1 -1
  232. package/dist/src/client.d.ts +9 -2
  233. package/dist/src/client.d.ts.map +1 -1
  234. package/dist/src/client.js +3 -2
  235. package/dist/src/client.js.map +1 -1
  236. package/dist/src/config.d.ts.map +1 -1
  237. package/dist/src/config.js +9 -1
  238. package/dist/src/config.js.map +1 -1
  239. package/dist/src/experiments/runExperiment.d.ts +35 -8
  240. package/dist/src/experiments/runExperiment.d.ts.map +1 -1
  241. package/dist/src/experiments/runExperiment.js +29 -34
  242. package/dist/src/experiments/runExperiment.js.map +1 -1
  243. package/dist/src/index.d.ts +0 -1
  244. package/dist/src/index.d.ts.map +1 -1
  245. package/dist/src/index.js +0 -1
  246. package/dist/src/index.js.map +1 -1
  247. package/dist/src/prompts/constants.d.ts +6 -0
  248. package/dist/src/prompts/constants.d.ts.map +1 -0
  249. package/dist/src/prompts/constants.js +13 -0
  250. package/dist/src/prompts/constants.js.map +1 -0
  251. package/dist/src/prompts/createPrompt.d.ts +65 -0
  252. package/dist/src/prompts/createPrompt.d.ts.map +1 -0
  253. package/dist/src/prompts/createPrompt.js +123 -0
  254. package/dist/src/prompts/createPrompt.js.map +1 -0
  255. package/dist/src/prompts/getPrompt.d.ts +16 -0
  256. package/dist/src/prompts/getPrompt.d.ts.map +1 -0
  257. package/dist/src/prompts/getPrompt.js +25 -0
  258. package/dist/src/prompts/getPrompt.js.map +1 -0
  259. package/dist/src/prompts/index.d.ts +4 -0
  260. package/dist/src/prompts/index.d.ts.map +1 -0
  261. package/dist/src/prompts/index.js +20 -0
  262. package/dist/src/prompts/index.js.map +1 -0
  263. package/dist/src/prompts/sdks/constants.d.ts +6 -0
  264. package/dist/src/prompts/sdks/constants.d.ts.map +1 -0
  265. package/dist/src/prompts/sdks/constants.js +9 -0
  266. package/dist/src/prompts/sdks/constants.js.map +1 -0
  267. package/dist/src/prompts/sdks/index.d.ts +2 -0
  268. package/dist/src/prompts/sdks/index.d.ts.map +1 -0
  269. package/dist/src/prompts/sdks/index.js +18 -0
  270. package/dist/src/prompts/sdks/index.js.map +1 -0
  271. package/dist/src/prompts/sdks/toAI.d.ts +12 -0
  272. package/dist/src/prompts/sdks/toAI.d.ts.map +1 -0
  273. package/dist/src/prompts/sdks/toAI.js +75 -0
  274. package/dist/src/prompts/sdks/toAI.js.map +1 -0
  275. package/dist/src/prompts/sdks/toAnthropic.d.ts +9 -0
  276. package/dist/src/prompts/sdks/toAnthropic.d.ts.map +1 -0
  277. package/dist/src/prompts/sdks/toAnthropic.js +71 -0
  278. package/dist/src/prompts/sdks/toAnthropic.js.map +1 -0
  279. package/dist/src/prompts/sdks/toOpenAI.d.ts +11 -0
  280. package/dist/src/prompts/sdks/toOpenAI.d.ts.map +1 -0
  281. package/dist/src/prompts/sdks/toOpenAI.js +78 -0
  282. package/dist/src/prompts/sdks/toOpenAI.js.map +1 -0
  283. package/dist/src/prompts/sdks/toSDK.d.ts +47 -0
  284. package/dist/src/prompts/sdks/toSDK.d.ts.map +1 -0
  285. package/dist/src/prompts/sdks/toSDK.js +63 -0
  286. package/dist/src/prompts/sdks/toSDK.js.map +1 -0
  287. package/dist/src/prompts/sdks/types.d.ts +28 -0
  288. package/dist/src/prompts/sdks/types.d.ts.map +1 -0
  289. package/dist/src/prompts/sdks/types.js +3 -0
  290. package/dist/src/prompts/sdks/types.js.map +1 -0
  291. package/dist/src/schemas/jsonLiteralSchema.d.ts +17 -0
  292. package/dist/src/schemas/jsonLiteralSchema.d.ts.map +1 -0
  293. package/dist/src/schemas/jsonLiteralSchema.js +22 -0
  294. package/dist/src/schemas/jsonLiteralSchema.js.map +1 -0
  295. package/dist/src/schemas/jsonSchema.d.ts +132 -0
  296. package/dist/src/schemas/jsonSchema.d.ts.map +1 -0
  297. package/dist/src/schemas/jsonSchema.js +48 -0
  298. package/dist/src/schemas/jsonSchema.js.map +1 -0
  299. package/dist/src/schemas/llm/anthropic/converters.d.ts +1497 -0
  300. package/dist/src/schemas/llm/anthropic/converters.d.ts.map +1 -0
  301. package/dist/src/schemas/llm/anthropic/converters.js +132 -0
  302. package/dist/src/schemas/llm/anthropic/converters.js.map +1 -0
  303. package/dist/src/schemas/llm/anthropic/messagePartSchemas.d.ts +264 -0
  304. package/dist/src/schemas/llm/anthropic/messagePartSchemas.d.ts.map +1 -0
  305. package/dist/src/schemas/llm/anthropic/messagePartSchemas.js +42 -0
  306. package/dist/src/schemas/llm/anthropic/messagePartSchemas.js.map +1 -0
  307. package/dist/src/schemas/llm/anthropic/messageSchemas.d.ts +795 -0
  308. package/dist/src/schemas/llm/anthropic/messageSchemas.d.ts.map +1 -0
  309. package/dist/src/schemas/llm/anthropic/messageSchemas.js +29 -0
  310. package/dist/src/schemas/llm/anthropic/messageSchemas.js.map +1 -0
  311. package/dist/src/schemas/llm/anthropic/toolCallSchemas.d.ts +48 -0
  312. package/dist/src/schemas/llm/anthropic/toolCallSchemas.d.ts.map +1 -0
  313. package/dist/src/schemas/llm/anthropic/toolCallSchemas.js +34 -0
  314. package/dist/src/schemas/llm/anthropic/toolCallSchemas.js.map +1 -0
  315. package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.d.ts +30 -0
  316. package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.d.ts.map +1 -0
  317. package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.js +25 -0
  318. package/dist/src/schemas/llm/anthropic/toolChoiceSchemas.js.map +1 -0
  319. package/dist/src/schemas/llm/anthropic/toolSchemas.d.ts +191 -0
  320. package/dist/src/schemas/llm/anthropic/toolSchemas.d.ts.map +1 -0
  321. package/dist/src/schemas/llm/anthropic/toolSchemas.js +38 -0
  322. package/dist/src/schemas/llm/anthropic/toolSchemas.js.map +1 -0
  323. package/dist/src/schemas/llm/constants.d.ts +7422 -0
  324. package/dist/src/schemas/llm/constants.d.ts.map +1 -0
  325. package/dist/src/schemas/llm/constants.js +131 -0
  326. package/dist/src/schemas/llm/constants.js.map +1 -0
  327. package/dist/src/schemas/llm/converters.d.ts +29720 -0
  328. package/dist/src/schemas/llm/converters.d.ts.map +1 -0
  329. package/dist/src/schemas/llm/converters.js +330 -0
  330. package/dist/src/schemas/llm/converters.js.map +1 -0
  331. package/dist/src/schemas/llm/openai/converters.d.ts +3507 -0
  332. package/dist/src/schemas/llm/openai/converters.d.ts.map +1 -0
  333. package/dist/src/schemas/llm/openai/converters.js +321 -0
  334. package/dist/src/schemas/llm/openai/converters.js.map +1 -0
  335. package/dist/src/schemas/llm/openai/messagePartSchemas.d.ts +64 -0
  336. package/dist/src/schemas/llm/openai/messagePartSchemas.d.ts.map +1 -0
  337. package/dist/src/schemas/llm/openai/messagePartSchemas.js +27 -0
  338. package/dist/src/schemas/llm/openai/messagePartSchemas.js.map +1 -0
  339. package/dist/src/schemas/llm/openai/messageSchemas.d.ts +733 -0
  340. package/dist/src/schemas/llm/openai/messageSchemas.d.ts.map +1 -0
  341. package/dist/src/schemas/llm/openai/messageSchemas.js +73 -0
  342. package/dist/src/schemas/llm/openai/messageSchemas.js.map +1 -0
  343. package/dist/src/schemas/llm/openai/responseFormatSchema.d.ts +233 -0
  344. package/dist/src/schemas/llm/openai/responseFormatSchema.d.ts.map +1 -0
  345. package/dist/src/schemas/llm/openai/responseFormatSchema.js +25 -0
  346. package/dist/src/schemas/llm/openai/responseFormatSchema.js.map +1 -0
  347. package/dist/src/schemas/llm/openai/toolCallSchemas.d.ts +95 -0
  348. package/dist/src/schemas/llm/openai/toolCallSchemas.d.ts.map +1 -0
  349. package/dist/src/schemas/llm/openai/toolCallSchemas.js +47 -0
  350. package/dist/src/schemas/llm/openai/toolCallSchemas.js.map +1 -0
  351. package/dist/src/schemas/llm/openai/toolChoiceSchemas.d.ts +28 -0
  352. package/dist/src/schemas/llm/openai/toolChoiceSchemas.d.ts.map +1 -0
  353. package/dist/src/schemas/llm/openai/toolChoiceSchemas.js +22 -0
  354. package/dist/src/schemas/llm/openai/toolChoiceSchemas.js.map +1 -0
  355. package/dist/src/schemas/llm/openai/toolSchemas.d.ts +1282 -0
  356. package/dist/src/schemas/llm/openai/toolSchemas.d.ts.map +1 -0
  357. package/dist/src/schemas/llm/openai/toolSchemas.js +69 -0
  358. package/dist/src/schemas/llm/openai/toolSchemas.js.map +1 -0
  359. package/dist/src/schemas/llm/phoenixPrompt/converters.d.ts +847 -0
  360. package/dist/src/schemas/llm/phoenixPrompt/converters.d.ts.map +1 -0
  361. package/dist/src/schemas/llm/phoenixPrompt/converters.js +133 -0
  362. package/dist/src/schemas/llm/phoenixPrompt/converters.js.map +1 -0
  363. package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts +128 -0
  364. package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.d.ts.map +1 -0
  365. package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.js +71 -0
  366. package/dist/src/schemas/llm/phoenixPrompt/messagePartSchemas.js.map +1 -0
  367. package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.d.ts +196 -0
  368. package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.d.ts.map +1 -0
  369. package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.js +29 -0
  370. package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.js.map +1 -0
  371. package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts +41 -0
  372. package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.d.ts.map +1 -0
  373. package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.js +21 -0
  374. package/dist/src/schemas/llm/phoenixPrompt/responseFormatSchema.js.map +1 -0
  375. package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts +36 -0
  376. package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.d.ts.map +1 -0
  377. package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.js +6 -0
  378. package/dist/src/schemas/llm/phoenixPrompt/toolCallSchemas.js.map +1 -0
  379. package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts +34 -0
  380. package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.d.ts.map +1 -0
  381. package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.js +27 -0
  382. package/dist/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.js.map +1 -0
  383. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.d.ts +41 -0
  384. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -0
  385. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js +21 -0
  386. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -0
  387. package/dist/src/schemas/llm/schemas.d.ts +2777 -0
  388. package/dist/src/schemas/llm/schemas.d.ts.map +1 -0
  389. package/dist/src/schemas/llm/schemas.js +83 -0
  390. package/dist/src/schemas/llm/schemas.js.map +1 -0
  391. package/dist/src/schemas/llm/types.d.ts +129 -0
  392. package/dist/src/schemas/llm/types.d.ts.map +1 -0
  393. package/dist/src/schemas/llm/types.js +3 -0
  394. package/dist/src/schemas/llm/types.js.map +1 -0
  395. package/dist/src/schemas/llm/utils.d.ts +25 -0
  396. package/dist/src/schemas/llm/utils.d.ts.map +1 -0
  397. package/dist/src/schemas/llm/utils.js +187 -0
  398. package/dist/src/schemas/llm/utils.js.map +1 -0
  399. package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts +114 -0
  400. package/dist/src/schemas/llm/vercel/messagePartSchemas.d.ts.map +1 -0
  401. package/dist/src/schemas/llm/vercel/messagePartSchemas.js +41 -0
  402. package/dist/src/schemas/llm/vercel/messagePartSchemas.js.map +1 -0
  403. package/dist/src/schemas/llm/vercel/messageSchemas.d.ts +142 -0
  404. package/dist/src/schemas/llm/vercel/messageSchemas.d.ts.map +1 -0
  405. package/dist/src/schemas/llm/vercel/messageSchemas.js +48 -0
  406. package/dist/src/schemas/llm/vercel/messageSchemas.js.map +1 -0
  407. package/dist/src/schemas/llm/vercel/toolChoiceSchemas.d.ts +16 -0
  408. package/dist/src/schemas/llm/vercel/toolChoiceSchemas.d.ts.map +1 -0
  409. package/dist/src/schemas/llm/vercel/toolChoiceSchemas.js +20 -0
  410. package/dist/src/schemas/llm/vercel/toolChoiceSchemas.js.map +1 -0
  411. package/dist/src/types/core.d.ts +8 -0
  412. package/dist/src/types/core.d.ts.map +1 -1
  413. package/dist/src/types/logger.d.ts +6 -0
  414. package/dist/src/types/logger.d.ts.map +1 -0
  415. package/dist/src/types/logger.js +3 -0
  416. package/dist/src/types/logger.js.map +1 -0
  417. package/dist/src/types/prompts.d.ts +107 -0
  418. package/dist/src/types/prompts.d.ts.map +1 -0
  419. package/dist/src/types/prompts.js +3 -0
  420. package/dist/src/types/prompts.js.map +1 -0
  421. package/dist/src/utils/assertUnreachable.d.ts +8 -0
  422. package/dist/src/utils/assertUnreachable.d.ts.map +1 -0
  423. package/dist/src/utils/assertUnreachable.js +13 -0
  424. package/dist/src/utils/assertUnreachable.js.map +1 -0
  425. package/dist/src/utils/formatPromptMessages.d.ts +26 -0
  426. package/dist/src/utils/formatPromptMessages.d.ts.map +1 -0
  427. package/dist/src/utils/formatPromptMessages.js +61 -0
  428. package/dist/src/utils/formatPromptMessages.js.map +1 -0
  429. package/dist/src/utils/getDatasetLike.d.ts +22 -0
  430. package/dist/src/utils/getDatasetLike.d.ts.map +1 -0
  431. package/dist/src/utils/getDatasetLike.js +47 -0
  432. package/dist/src/utils/getDatasetLike.js.map +1 -0
  433. package/dist/src/utils/getPromptVersionLike.d.ts +29 -0
  434. package/dist/src/utils/getPromptVersionLike.d.ts.map +1 -0
  435. package/dist/src/utils/getPromptVersionLike.js +68 -0
  436. package/dist/src/utils/getPromptVersionLike.js.map +1 -0
  437. package/dist/src/utils/isObject.d.ts +5 -0
  438. package/dist/src/utils/isObject.d.ts.map +1 -0
  439. package/dist/src/utils/isObject.js +10 -0
  440. package/dist/src/utils/isObject.js.map +1 -0
  441. package/dist/src/utils/noopLogger.d.ts +9 -0
  442. package/dist/src/utils/noopLogger.d.ts.map +1 -0
  443. package/dist/src/utils/noopLogger.js +12 -0
  444. package/dist/src/utils/noopLogger.js.map +1 -0
  445. package/dist/src/utils/safelyParseJSON.d.ts +14 -0
  446. package/dist/src/utils/safelyParseJSON.d.ts.map +1 -0
  447. package/dist/src/utils/safelyParseJSON.js +18 -0
  448. package/dist/src/utils/safelyParseJSON.js.map +1 -0
  449. package/dist/src/utils/safelyStringifyJSON.d.ts +14 -0
  450. package/dist/src/utils/safelyStringifyJSON.d.ts.map +1 -0
  451. package/dist/src/utils/safelyStringifyJSON.js +18 -0
  452. package/dist/src/utils/safelyStringifyJSON.js.map +1 -0
  453. package/dist/src/utils/schemaMatches.d.ts +17 -0
  454. package/dist/src/utils/schemaMatches.d.ts.map +1 -0
  455. package/dist/src/utils/schemaMatches.js +13 -0
  456. package/dist/src/utils/schemaMatches.js.map +1 -0
  457. package/dist/tsconfig.tsbuildinfo +1 -1
  458. package/package.json +32 -5
  459. package/src/__generated__/api/v1.ts +743 -12
  460. package/src/client.ts +9 -2
  461. package/src/config.ts +12 -1
  462. package/src/experiments/runExperiment.ts +54 -53
  463. package/src/index.ts +0 -2
  464. package/src/prompts/constants.ts +11 -0
  465. package/src/prompts/createPrompt.ts +181 -0
  466. package/src/prompts/getPrompt.ts +26 -0
  467. package/src/prompts/index.ts +3 -0
  468. package/src/prompts/sdks/constants.ts +10 -0
  469. package/src/prompts/sdks/index.ts +1 -0
  470. package/src/prompts/sdks/toAI.ts +105 -0
  471. package/src/prompts/sdks/toAnthropic.ts +98 -0
  472. package/src/prompts/sdks/toOpenAI.ts +115 -0
  473. package/src/prompts/sdks/toSDK.ts +81 -0
  474. package/src/prompts/sdks/types.ts +28 -0
  475. package/src/schemas/jsonLiteralSchema.ts +24 -0
  476. package/src/schemas/jsonSchema.ts +47 -0
  477. package/src/schemas/llm/anthropic/converters.ts +172 -0
  478. package/src/schemas/llm/anthropic/messagePartSchemas.ts +53 -0
  479. package/src/schemas/llm/anthropic/messageSchemas.ts +34 -0
  480. package/src/schemas/llm/anthropic/toolCallSchemas.ts +34 -0
  481. package/src/schemas/llm/anthropic/toolChoiceSchemas.ts +21 -0
  482. package/src/schemas/llm/anthropic/toolSchemas.ts +41 -0
  483. package/src/schemas/llm/constants.ts +156 -0
  484. package/src/schemas/llm/converters.ts +499 -0
  485. package/src/schemas/llm/openai/converters.ts +383 -0
  486. package/src/schemas/llm/openai/messagePartSchemas.ts +30 -0
  487. package/src/schemas/llm/openai/messageSchemas.ts +78 -0
  488. package/src/schemas/llm/openai/responseFormatSchema.ts +22 -0
  489. package/src/schemas/llm/openai/toolCallSchemas.ts +58 -0
  490. package/src/schemas/llm/openai/toolChoiceSchemas.ts +18 -0
  491. package/src/schemas/llm/openai/toolSchemas.ts +74 -0
  492. package/src/schemas/llm/phoenixPrompt/converters.ts +178 -0
  493. package/src/schemas/llm/phoenixPrompt/messagePartSchemas.ts +95 -0
  494. package/src/schemas/llm/phoenixPrompt/messageSchemas.ts +34 -0
  495. package/src/schemas/llm/phoenixPrompt/responseFormatSchema.ts +21 -0
  496. package/src/schemas/llm/phoenixPrompt/toolCallSchemas.ts +7 -0
  497. package/src/schemas/llm/phoenixPrompt/toolChoiceSchemas.ts +26 -0
  498. package/src/schemas/llm/phoenixPrompt/toolSchemas.ts +20 -0
  499. package/src/schemas/llm/schemas.ts +94 -0
  500. package/src/schemas/llm/types.ts +161 -0
  501. package/src/schemas/llm/utils.ts +259 -0
  502. package/src/schemas/llm/vercel/messagePartSchemas.ts +54 -0
  503. package/src/schemas/llm/vercel/messageSchemas.ts +54 -0
  504. package/src/schemas/llm/vercel/toolChoiceSchemas.ts +16 -0
  505. package/src/types/core.ts +9 -0
  506. package/src/types/logger.ts +5 -0
  507. package/src/types/prompts.ts +151 -0
  508. package/src/utils/assertUnreachable.ts +9 -0
  509. package/src/utils/formatPromptMessages.ts +79 -0
  510. package/src/utils/getDatasetLike.ts +52 -0
  511. package/src/utils/getPromptVersionLike.ts +73 -0
  512. package/src/utils/isObject.ts +6 -0
  513. package/src/utils/noopLogger.ts +10 -0
  514. package/src/utils/safelyParseJSON.ts +13 -0
  515. package/src/utils/safelyStringifyJSON.ts +15 -0
  516. 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 configuration - The configuration to use for the client.
50
- * @param configuration.options - The options to use for the client's OpenAPI Fetch wrapper.
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: environment.PHOENIX_CLIENT_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 Logger = {
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
- client?: PhoenixClient;
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 getDataset({ dataset: _dataset, client });
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 = JSON.stringify(taskOutput);
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 getDataset({ dataset: experiment.datasetId, client });
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
@@ -1,3 +1 @@
1
1
  export * from "./client";
2
-
3
- export * from "./experiments";
@@ -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,3 @@
1
+ export * from "./getPrompt";
2
+ export * from "./createPrompt";
3
+ export * from "./sdks";
@@ -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
+ };