openpond-sdk 0.12.26 → 0.12.27

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 (200) hide show
  1. package/PRODUCT_INTEGRATION.md +13 -6
  2. package/README.md +2 -10
  3. package/SERVERLESS_SERVING.md +52 -35
  4. package/TASK_INGESTION.md +0 -4
  5. package/dist/advanced-refiner-evaluations.js +7 -7
  6. package/dist/ai-sdk.js +20 -83
  7. package/dist/ai-sdk.js.map +1 -1
  8. package/dist/candidate-evaluations.js +6 -6
  9. package/dist/{chunk-UZAVG2WK.js → chunk-3HOGOWKU.js} +8 -6
  10. package/dist/chunk-3HOGOWKU.js.map +1 -0
  11. package/dist/{chunk-YV6PPDXZ.js → chunk-3Z5IK2UK.js} +27 -2
  12. package/dist/chunk-3Z5IK2UK.js.map +1 -0
  13. package/dist/{chunk-4REK5TTE.js → chunk-4D4QSQC3.js} +2 -2
  14. package/dist/{chunk-AMZ2SWHR.js → chunk-534W2O2S.js} +2 -2
  15. package/dist/{chunk-6LVLWRBJ.js → chunk-54BJJL7G.js} +2 -2
  16. package/dist/{chunk-XWUTYFOU.js → chunk-5KJY44FB.js} +3 -3
  17. package/dist/{chunk-QKLZZOZD.js → chunk-7MLFWVDI.js} +29 -10
  18. package/dist/chunk-7MLFWVDI.js.map +1 -0
  19. package/dist/{chunk-4A4FNG4R.js → chunk-7ZV626YS.js} +2 -2
  20. package/dist/{chunk-57ROW3XF.js → chunk-ABOZV47D.js} +2 -2
  21. package/dist/{chunk-3BILL33A.js → chunk-BIQ5TG3T.js} +4 -4
  22. package/dist/{chunk-JINWKUKR.js → chunk-BT6CC6QB.js} +3 -3
  23. package/dist/{chunk-4PEK3YOW.js → chunk-CNFN6GHY.js} +2 -2
  24. package/dist/{chunk-X5AT253K.js → chunk-CVYGJUWM.js} +2 -2
  25. package/dist/{chunk-D26RJQU7.js → chunk-CX7ETU2F.js} +2 -2
  26. package/dist/{chunk-4CDLPMJK.js → chunk-D7LV3USE.js} +2 -2
  27. package/dist/{chunk-WZKKQNYY.js → chunk-GA7OSSEA.js} +2 -2
  28. package/dist/{chunk-EL6KZO43.js → chunk-GFWXDWEE.js} +3 -3
  29. package/dist/{chunk-XYK3MAIC.js → chunk-JYWIKBGD.js} +122 -112
  30. package/dist/chunk-JYWIKBGD.js.map +1 -0
  31. package/dist/{chunk-AQV7RQZH.js → chunk-K4WU4JOP.js} +2 -2
  32. package/dist/{chunk-CAOMKM55.js → chunk-L7MVGGBH.js} +2 -2
  33. package/dist/{chunk-P56JWQYV.js → chunk-LRFVISLA.js} +3 -3
  34. package/dist/{chunk-2U6BQ5C4.js → chunk-MJHQMQEW.js} +3 -3
  35. package/dist/chunk-ON3KSXWR.js +639 -0
  36. package/dist/chunk-ON3KSXWR.js.map +1 -0
  37. package/dist/{chunk-PMVSO23F.js → chunk-RMXZISHK.js} +10 -1
  38. package/dist/chunk-RMXZISHK.js.map +1 -0
  39. package/dist/{chunk-JWEIAEQ6.js → chunk-TMNEDWA7.js} +10 -3
  40. package/dist/chunk-TMNEDWA7.js.map +1 -0
  41. package/dist/{chunk-C7I4ZG6Q.js → chunk-TX552FQG.js} +3 -3
  42. package/dist/{chunk-4CRLQMJ2.js → chunk-VIDRZCPQ.js} +6 -6
  43. package/dist/{chunk-MN4FE52A.js → chunk-VRUAIMM3.js} +7 -7
  44. package/dist/chunk-VRUAIMM3.js.map +1 -0
  45. package/dist/{chunk-H5KHLBC5.js → chunk-WJZHSIGD.js} +6 -8
  46. package/dist/{chunk-H5KHLBC5.js.map → chunk-WJZHSIGD.js.map} +1 -1
  47. package/dist/{chunk-HCUZYGUK.js → chunk-WPTFJZ4L.js} +3 -3
  48. package/dist/connected-evidence.js +7 -7
  49. package/dist/dataset-workspaces.js +10 -10
  50. package/dist/errors.js +1 -1
  51. package/dist/experiment-evaluation-schedules.js +16 -16
  52. package/dist/experiment-improvements.js +7 -7
  53. package/dist/experiments.js +15 -15
  54. package/dist/index.js +23 -23
  55. package/dist/learning.js +15 -4
  56. package/dist/learning.js.map +1 -1
  57. package/dist/model-projects.js +1 -1
  58. package/dist/model-starter-attempts.js +2 -2
  59. package/dist/model-starter-catalog.js +4 -4
  60. package/dist/model-starters.js +4 -4
  61. package/dist/model-taskset-runs.js +3 -3
  62. package/dist/post-training.js +6 -6
  63. package/dist/taskset-drafts.js +6 -6
  64. package/dist/taskset-packages.js +12 -10
  65. package/dist/training-bundle.js +46 -20
  66. package/dist/training-bundle.js.map +1 -1
  67. package/dist/training-hardware.js +2 -2
  68. package/dist/training.js +5620 -4342
  69. package/dist/training.js.map +1 -1
  70. package/dist/types/packages/sdk/src/ai-sdk.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts +8 -4
  72. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +162 -162
  74. package/dist/types/packages/sdk/src/decision-model-serving.d.ts +4 -2
  75. package/dist/types/packages/sdk/src/decision-model-serving.d.ts.map +1 -1
  76. package/dist/types/packages/sdk/src/engram-model-serving.d.ts +3 -1
  77. package/dist/types/packages/sdk/src/engram-model-serving.d.ts.map +1 -1
  78. package/dist/types/packages/sdk/src/experiment-client.d.ts +699 -691
  79. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
  80. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +34 -28
  81. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts.map +1 -1
  82. package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +1889 -1889
  83. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
  84. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +21 -3
  85. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts.map +1 -1
  86. package/dist/types/packages/sdk/src/learning.d.ts +1 -0
  87. package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
  88. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts +272 -16
  89. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts.map +1 -1
  90. package/dist/types/packages/sdk/src/managed-compute-price.d.ts +53 -1
  91. package/dist/types/packages/sdk/src/managed-compute-price.d.ts.map +1 -1
  92. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +612 -356
  93. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts.map +1 -1
  94. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts +272 -16
  95. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts.map +1 -1
  96. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts +208 -16
  97. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts.map +1 -1
  98. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts +272 -16
  99. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts.map +1 -1
  100. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts +3 -0
  101. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts.map +1 -1
  102. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +25 -25
  103. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  104. package/dist/types/packages/sdk/src/model-learning-capabilities.d.ts +4 -0
  105. package/dist/types/packages/sdk/src/model-learning-capabilities.d.ts.map +1 -0
  106. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  107. package/dist/types/packages/sdk/src/model-supervised-training-defaults.d.ts.map +1 -1
  108. package/dist/types/packages/sdk/src/model-training-defaults.d.ts +5 -2
  109. package/dist/types/packages/sdk/src/model-training-defaults.d.ts.map +1 -1
  110. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts +8 -4
  111. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts.map +1 -1
  112. package/dist/types/packages/sdk/src/post-training.d.ts +7 -7
  113. package/dist/types/packages/sdk/src/product-model-response.d.ts +6 -2
  114. package/dist/types/packages/sdk/src/product-model-response.d.ts.map +1 -1
  115. package/dist/types/packages/sdk/src/product-model-transport.d.ts +99 -0
  116. package/dist/types/packages/sdk/src/product-model-transport.d.ts.map +1 -0
  117. package/dist/types/packages/sdk/src/product-model-wire.d.ts +104 -0
  118. package/dist/types/packages/sdk/src/product-model-wire.d.ts.map +1 -0
  119. package/dist/types/packages/sdk/src/product-models.d.ts +18 -15
  120. package/dist/types/packages/sdk/src/product-models.d.ts.map +1 -1
  121. package/dist/types/packages/sdk/src/serverless-serving.d.ts +416 -9
  122. package/dist/types/packages/sdk/src/serverless-serving.d.ts.map +1 -1
  123. package/dist/types/packages/sdk/src/steering-model-serving.d.ts +2144 -703
  124. package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -1
  125. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts +631 -0
  126. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts.map +1 -1
  127. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +120 -120
  128. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +20 -20
  129. package/dist/types/packages/sdk/src/taskset-packages.d.ts +1 -0
  130. package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
  131. package/dist/types/packages/sdk/src/taskset-text-policy.d.ts +11 -0
  132. package/dist/types/packages/sdk/src/taskset-text-policy.d.ts.map +1 -0
  133. package/dist/types/packages/sdk/src/training-compute-selection.d.ts +6 -19
  134. package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
  135. package/dist/types/packages/sdk/src/training-estimates.d.ts +1 -1
  136. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts +4 -1
  137. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts.map +1 -1
  138. package/dist/types/packages/sdk/src/training-harness-sources.d.ts +2 -2
  139. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
  140. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +406 -8
  141. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -1
  142. package/dist/types/packages/sdk/src/training-model-serving.d.ts +1136 -30
  143. package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -1
  144. package/dist/types/packages/sdk/src/training-operations.d.ts +11197 -0
  145. package/dist/types/packages/sdk/src/training-operations.d.ts.map +1 -0
  146. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +25 -25
  147. package/dist/types/packages/sdk/src/training-supervised.d.ts +13 -0
  148. package/dist/types/packages/sdk/src/training-supervised.d.ts.map +1 -1
  149. package/dist/types/packages/sdk/src/training-transport.d.ts +4 -1
  150. package/dist/types/packages/sdk/src/training-transport.d.ts.map +1 -1
  151. package/dist/types/packages/sdk/src/training.d.ts +15885 -4662
  152. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  153. package/dist/types/packages/sdk/src/weight-inference.d.ts +8 -5
  154. package/dist/types/packages/sdk/src/weight-inference.d.ts.map +1 -1
  155. package/dist/types/packages/sdk/src/weight-model-versions.d.ts +2089 -398
  156. package/dist/types/packages/sdk/src/weight-model-versions.d.ts.map +1 -1
  157. package/dist/types/packages/sdk/src/weight-space-artifact.d.ts +433 -0
  158. package/dist/types/packages/sdk/src/weight-space-artifact.d.ts.map +1 -0
  159. package/dist/types/packages/sdk/src/weight-space-evaluation.d.ts +1437 -0
  160. package/dist/types/packages/sdk/src/weight-space-evaluation.d.ts.map +1 -0
  161. package/dist/types/packages/sdk/src/weight-space-model-serving.d.ts +2910 -0
  162. package/dist/types/packages/sdk/src/weight-space-model-serving.d.ts.map +1 -0
  163. package/dist/types/packages/sdk/src/weight-space-programming.d.ts +845 -0
  164. package/dist/types/packages/sdk/src/weight-space-programming.d.ts.map +1 -0
  165. package/dist/types/packages/sdk/src/weight-space-sessions.d.ts +4600 -0
  166. package/dist/types/packages/sdk/src/weight-space-sessions.d.ts.map +1 -0
  167. package/fixtures/python-foundation/operation-matrix.json +369 -0
  168. package/fixtures/python-foundation/schemas.json +34304 -27905
  169. package/fixtures/python-foundation/training-estimate-http-workflow.json +1 -1
  170. package/package.json +2 -2
  171. package/dist/chunk-JWEIAEQ6.js.map +0 -1
  172. package/dist/chunk-MN4FE52A.js.map +0 -1
  173. package/dist/chunk-PMVSO23F.js.map +0 -1
  174. package/dist/chunk-QKLZZOZD.js.map +0 -1
  175. package/dist/chunk-UZAVG2WK.js.map +0 -1
  176. package/dist/chunk-XYK3MAIC.js.map +0 -1
  177. package/dist/chunk-YV6PPDXZ.js.map +0 -1
  178. package/dist/chunk-ZG4HVCJB.js +0 -248
  179. package/dist/chunk-ZG4HVCJB.js.map +0 -1
  180. /package/dist/{chunk-4REK5TTE.js.map → chunk-4D4QSQC3.js.map} +0 -0
  181. /package/dist/{chunk-AMZ2SWHR.js.map → chunk-534W2O2S.js.map} +0 -0
  182. /package/dist/{chunk-6LVLWRBJ.js.map → chunk-54BJJL7G.js.map} +0 -0
  183. /package/dist/{chunk-XWUTYFOU.js.map → chunk-5KJY44FB.js.map} +0 -0
  184. /package/dist/{chunk-4A4FNG4R.js.map → chunk-7ZV626YS.js.map} +0 -0
  185. /package/dist/{chunk-57ROW3XF.js.map → chunk-ABOZV47D.js.map} +0 -0
  186. /package/dist/{chunk-3BILL33A.js.map → chunk-BIQ5TG3T.js.map} +0 -0
  187. /package/dist/{chunk-JINWKUKR.js.map → chunk-BT6CC6QB.js.map} +0 -0
  188. /package/dist/{chunk-4PEK3YOW.js.map → chunk-CNFN6GHY.js.map} +0 -0
  189. /package/dist/{chunk-X5AT253K.js.map → chunk-CVYGJUWM.js.map} +0 -0
  190. /package/dist/{chunk-D26RJQU7.js.map → chunk-CX7ETU2F.js.map} +0 -0
  191. /package/dist/{chunk-4CDLPMJK.js.map → chunk-D7LV3USE.js.map} +0 -0
  192. /package/dist/{chunk-WZKKQNYY.js.map → chunk-GA7OSSEA.js.map} +0 -0
  193. /package/dist/{chunk-EL6KZO43.js.map → chunk-GFWXDWEE.js.map} +0 -0
  194. /package/dist/{chunk-AQV7RQZH.js.map → chunk-K4WU4JOP.js.map} +0 -0
  195. /package/dist/{chunk-CAOMKM55.js.map → chunk-L7MVGGBH.js.map} +0 -0
  196. /package/dist/{chunk-P56JWQYV.js.map → chunk-LRFVISLA.js.map} +0 -0
  197. /package/dist/{chunk-2U6BQ5C4.js.map → chunk-MJHQMQEW.js.map} +0 -0
  198. /package/dist/{chunk-C7I4ZG6Q.js.map → chunk-TX552FQG.js.map} +0 -0
  199. /package/dist/{chunk-4CRLQMJ2.js.map → chunk-VIDRZCPQ.js.map} +0 -0
  200. /package/dist/{chunk-HCUZYGUK.js.map → chunk-WPTFJZ4L.js.map} +0 -0
@@ -1,248 +0,0 @@
1
- import {
2
- readBoundedJsonResponse
3
- } from "./chunk-B3ZHJ2KK.js";
4
- import {
5
- DEFAULT_MODEL_BASE_URL
6
- } from "./chunk-QYWPNNP3.js";
7
-
8
- // src/product-models.ts
9
- import { z } from "zod";
10
- var ProductModelError = class extends Error {
11
- constructor(code, status, outcomeUnknown, requestId) {
12
- super(`OpenPond model request failed (${code}).`);
13
- this.code = code;
14
- this.status = status;
15
- this.outcomeUnknown = outcomeUnknown;
16
- this.requestId = requestId;
17
- this.name = "ProductModelError";
18
- }
19
- code;
20
- status;
21
- outcomeUnknown;
22
- requestId;
23
- };
24
- var Message = z.object({ role: z.enum(["system", "user", "assistant"]), content: z.string().max(2e5) }).strict();
25
- var Input = z.object({
26
- prompt: z.string().max(2e5).optional(),
27
- messages: z.array(Message).min(1).max(128).optional(),
28
- temperature: z.number().min(0).max(2).optional(),
29
- maxTokens: z.number().int().min(1).max(4096).optional()
30
- }).strict().refine(
31
- (v) => v.prompt !== void 0 !== (v.messages !== void 0),
32
- "Supply prompt or messages, exclusively."
33
- );
34
- var Usage = z.object({
35
- prompt_tokens: z.number().int().nonnegative(),
36
- completion_tokens: z.number().int().nonnegative(),
37
- total_tokens: z.number().int().nonnegative()
38
- });
39
- var Chunk = z.object({
40
- id: z.string(),
41
- model: z.string(),
42
- system_fingerprint: z.string().nullable().optional(),
43
- openpond: z.record(z.string(), z.json()).optional(),
44
- usage: Usage.nullable().optional(),
45
- choices: z.array(
46
- z.object({
47
- index: z.number().int(),
48
- finish_reason: z.string().nullable().optional(),
49
- delta: z.object({ content: z.string().nullable().optional(), tool_calls: z.unknown().optional() }).passthrough().optional(),
50
- message: z.object({ content: z.string().nullable(), tool_calls: z.unknown().optional() }).passthrough().optional()
51
- })
52
- ).max(1)
53
- });
54
- function productModelEndpoint(value) {
55
- const url = new URL(value);
56
- if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
57
- throw new Error("A clean serving base URL is required.");
58
- return url.href.replace(/\/$/, "");
59
- }
60
- var ProductModel = class {
61
- constructor(binding, connection) {
62
- this.connection = connection;
63
- this.id = z.string().trim().regex(/^[a-z0-9][a-z0-9._:-]{2,127}$/).parse(typeof binding === "string" ? binding : binding.id);
64
- this.capabilities = {
65
- streaming: true,
66
- tools: false,
67
- structuredOutput: false,
68
- ...typeof binding === "string" ? {} : binding.capabilities
69
- };
70
- if (!connection.apiKey.trim())
71
- throw new Error("Named models require an API key.");
72
- this.connection = { ...connection, baseUrl: productModelEndpoint(connection.baseUrl ?? DEFAULT_MODEL_BASE_URL) };
73
- if (connection.timeoutMs !== void 0 && (!Number.isFinite(connection.timeoutMs) || connection.timeoutMs <= 0 || connection.timeoutMs > 3e5))
74
- throw new Error("Serving timeoutMs must be greater than zero and at most 300000.");
75
- }
76
- connection;
77
- id;
78
- capabilities;
79
- /** Provider integrations use the same exact destination and transport. */
80
- providerConnection() {
81
- return { ...this.connection };
82
- }
83
- async request(input, stream) {
84
- if (stream && !this.capabilities.streaming)
85
- throw new ProductModelError("streaming_unsupported", 0, false);
86
- const { signal, ...raw } = input;
87
- const parsed = Input.parse(raw);
88
- const body = JSON.stringify({
89
- model: this.id,
90
- messages: parsed.messages ?? [{ role: "user", content: parsed.prompt }],
91
- ...parsed.temperature === void 0 ? {} : { temperature: parsed.temperature },
92
- ...parsed.maxTokens === void 0 ? {} : { max_tokens: parsed.maxTokens },
93
- stream
94
- });
95
- if (new TextEncoder().encode(body).length > 1024 * 1024)
96
- throw new ProductModelError("payload_too_large", 0, false);
97
- const deadline = AbortSignal.timeout(this.connection.timeoutMs ?? 6e4);
98
- let response;
99
- try {
100
- response = await (this.connection.fetch ?? fetch)(
101
- `${productModelEndpoint(this.connection.baseUrl)}/chat/completions`,
102
- {
103
- method: "POST",
104
- redirect: "error",
105
- headers: {
106
- Authorization: `Bearer ${this.connection.apiKey}`,
107
- ...this.connection.teamId ? { "X-OpenPond-Team-Id": this.connection.teamId } : {},
108
- "Content-Type": "application/json",
109
- Accept: stream ? "text/event-stream" : "application/json"
110
- },
111
- body,
112
- signal: signal ? AbortSignal.any([signal, deadline]) : deadline
113
- }
114
- );
115
- } catch {
116
- throw new ProductModelError("model_outcome_unknown", 0, true);
117
- }
118
- if (!response.ok) {
119
- await response.body?.cancel();
120
- throw new ProductModelError(
121
- "model_request_rejected",
122
- response.status,
123
- response.status >= 500,
124
- response.headers.get("x-openpond-request-id") ?? response.headers.get("x-request-id") ?? void 0
125
- );
126
- }
127
- return response;
128
- }
129
- async generate(input) {
130
- const response = await this.request(input, false);
131
- try {
132
- const chunk = Chunk.parse(
133
- await readBoundedJsonResponse(response, 8 * 1024 * 1024, "Model result")
134
- );
135
- if (chunk.choices.length !== 1 || !chunk.choices[0].message || chunk.choices[0].message.tool_calls)
136
- throw new Error("Unsupported response");
137
- return this.result(
138
- chunk,
139
- chunk.choices[0].message.content ?? "",
140
- chunk.choices[0].finish_reason ?? null,
141
- response
142
- );
143
- } catch {
144
- throw new ProductModelError(
145
- "model_response_invalid",
146
- response.status,
147
- true,
148
- response.headers.get("x-openpond-request-id") ?? response.headers.get("x-request-id") ?? void 0
149
- );
150
- }
151
- }
152
- result(chunk, text, finishReason, response) {
153
- return {
154
- text,
155
- requestId: response.headers.get("x-openpond-request-id") ?? response.headers.get("x-request-id") ?? chunk.id,
156
- modelId: this.id,
157
- resolvedModelId: chunk.model,
158
- finishReason,
159
- usage: chunk.usage ? {
160
- inputTokens: chunk.usage.prompt_tokens,
161
- outputTokens: chunk.usage.completion_tokens,
162
- totalTokens: chunk.usage.total_tokens
163
- } : null,
164
- systemFingerprint: chunk.system_fingerprint ?? null,
165
- evidence: chunk.openpond ?? null
166
- };
167
- }
168
- /** Breaking iteration cancels the HTTP body. A truncated stream never produces finish. */
169
- async *stream(input) {
170
- const response = await this.request(input, true);
171
- if (!response.headers.get("content-type")?.includes("text/event-stream") || !response.body) {
172
- await response.body?.cancel();
173
- throw new ProductModelError("model_stream_invalid", response.status, true);
174
- }
175
- const reader = response.body.getReader();
176
- const decoder = new TextDecoder();
177
- let buffer = "", text = "", finish = null, last;
178
- let usage = null;
179
- let outputBytes = 0;
180
- try {
181
- for (; ; ) {
182
- const { done, value } = await reader.read();
183
- buffer = (buffer + decoder.decode(value, { stream: !done })).replace(/\r\n/g, "\n");
184
- if (new TextEncoder().encode(buffer).length > 1024 * 1024)
185
- throw new Error("Stream frame too large");
186
- let boundary;
187
- while ((boundary = buffer.indexOf("\n\n")) >= 0) {
188
- const frame = buffer.slice(0, boundary);
189
- buffer = buffer.slice(boundary + 2);
190
- const data = frame.split("\n").filter((line) => line.startsWith("data:")).map((line) => line.slice(5).trimStart()).join("\n");
191
- if (!data) continue;
192
- if (data === "[DONE]") {
193
- if (!last || !finish) throw new Error("Incomplete stream");
194
- yield {
195
- type: "finish",
196
- result: this.result({ ...last, usage }, text, finish, response)
197
- };
198
- return;
199
- }
200
- const chunk = Chunk.parse(JSON.parse(data));
201
- if (last && (last.id !== chunk.id || last.model !== chunk.model))
202
- throw new Error("Stream identity changed");
203
- last = chunk;
204
- if (chunk.usage) usage = chunk.usage;
205
- const choice = chunk.choices[0];
206
- if (choice?.delta?.tool_calls) throw new Error("Tool output unsupported by text API");
207
- if (choice?.finish_reason) finish = choice.finish_reason;
208
- const delta = choice?.delta?.content;
209
- if (delta) {
210
- text += delta;
211
- outputBytes += new TextEncoder().encode(delta).length;
212
- if (outputBytes > 8 * 1024 * 1024) throw new Error("Model output too large");
213
- yield { type: "text", text: delta };
214
- }
215
- }
216
- if (done) throw new Error("Stream ended before DONE");
217
- }
218
- } catch (error) {
219
- if (error instanceof ProductModelError) throw error;
220
- throw new ProductModelError(
221
- "model_stream_interrupted",
222
- response.status,
223
- true,
224
- response.headers.get("x-openpond-request-id") ?? response.headers.get("x-request-id") ?? void 0
225
- );
226
- } finally {
227
- await reader.cancel().catch(() => {
228
- });
229
- reader.releaseLock();
230
- }
231
- }
232
- };
233
- function createProductModels(bindings, connection) {
234
- return Object.fromEntries(
235
- Object.entries(bindings).map(([name, binding]) => [
236
- name,
237
- new ProductModel(binding, connection)
238
- ])
239
- );
240
- }
241
-
242
- export {
243
- ProductModelError,
244
- productModelEndpoint,
245
- ProductModel,
246
- createProductModels
247
- };
248
- //# sourceMappingURL=chunk-ZG4HVCJB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/product-models.ts"],"sourcesContent":["import { DEFAULT_MODEL_BASE_URL } from \"./endpoints.js\";\nimport { z } from \"zod\";\nimport { readBoundedJsonResponse } from \"./protocol.js\";\n\nexport type ProductModelBinding = {\n id: string;\n capabilities?: { streaming?: boolean; tools?: boolean; structuredOutput?: false };\n};\nexport type ProductModelMessage = { role: \"system\" | \"user\" | \"assistant\"; content: string };\nexport type ProductModelInput = {\n prompt?: string;\n messages?: ProductModelMessage[];\n temperature?: number;\n maxTokens?: number;\n signal?: AbortSignal;\n};\nexport type ProductModelUsage = { inputTokens: number; outputTokens: number; totalTokens: number };\nexport type ProductModelResult = {\n text: string;\n requestId: string;\n modelId: string;\n resolvedModelId: string;\n finishReason: string | null;\n usage: ProductModelUsage | null;\n systemFingerprint: string | null;\n /** Retained server evidence; presence alone is not client-side verification. */\n evidence: Record<string, unknown> | null;\n};\nexport type ProductModelEvent =\n | { type: \"text\"; text: string }\n | { type: \"finish\"; result: ProductModelResult };\nexport type ProductModelConnection = {\n baseUrl?: string;\n teamId?: string;\n apiKey: string;\n timeoutMs?: number;\n fetch?: typeof fetch;\n};\nexport type ProductModels<Models> = { readonly [Name in keyof Models]: ProductModel };\n\nexport class ProductModelError extends Error {\n constructor(\n readonly code: string,\n readonly status: number,\n readonly outcomeUnknown: boolean,\n readonly requestId?: string,\n ) {\n super(`OpenPond model request failed (${code}).`);\n this.name = \"ProductModelError\";\n }\n}\nconst Message = z\n .object({ role: z.enum([\"system\", \"user\", \"assistant\"]), content: z.string().max(200_000) })\n .strict();\nconst Input = z\n .object({\n prompt: z.string().max(200_000).optional(),\n messages: z.array(Message).min(1).max(128).optional(),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().int().min(1).max(4096).optional(),\n })\n .strict()\n .refine(\n (v) => (v.prompt !== undefined) !== (v.messages !== undefined),\n \"Supply prompt or messages, exclusively.\",\n );\nconst Usage = z.object({\n prompt_tokens: z.number().int().nonnegative(),\n completion_tokens: z.number().int().nonnegative(),\n total_tokens: z.number().int().nonnegative(),\n});\nconst Chunk = z.object({\n id: z.string(),\n model: z.string(),\n system_fingerprint: z.string().nullable().optional(),\n openpond: z.record(z.string(), z.json()).optional(),\n usage: Usage.nullable().optional(),\n choices: z\n .array(\n z.object({\n index: z.number().int(),\n finish_reason: z.string().nullable().optional(),\n delta: z\n .object({ content: z.string().nullable().optional(), tool_calls: z.unknown().optional() })\n .passthrough()\n .optional(),\n message: z\n .object({ content: z.string().nullable(), tool_calls: z.unknown().optional() })\n .passthrough()\n .optional(),\n }),\n )\n .max(1),\n});\n\nexport function productModelEndpoint(value: string): string {\n const url = new URL(value);\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.search ||\n url.hash\n )\n throw new Error(\"A clean serving base URL is required.\");\n return url.href.replace(/\\/$/, \"\");\n}\n\n/** A named text model. This never resolves a catalogue default or activates serving. */\nexport class ProductModel {\n readonly id: string;\n readonly capabilities: Required<NonNullable<ProductModelBinding[\"capabilities\"]>>;\n constructor(\n binding: string | ProductModelBinding,\n private readonly connection: ProductModelConnection,\n ) {\n this.id = z\n .string()\n .trim()\n .regex(/^[a-z0-9][a-z0-9._:-]{2,127}$/)\n .parse(typeof binding === \"string\" ? binding : binding.id);\n this.capabilities = {\n streaming: true,\n tools: false,\n structuredOutput: false,\n ...(typeof binding === \"string\" ? {} : binding.capabilities),\n };\n if (!connection.apiKey.trim())\n throw new Error(\"Named models require an API key.\");\n this.connection = { ...connection, baseUrl: productModelEndpoint(connection.baseUrl ?? DEFAULT_MODEL_BASE_URL) };\n if (\n connection.timeoutMs !== undefined &&\n (!Number.isFinite(connection.timeoutMs) ||\n connection.timeoutMs <= 0 ||\n connection.timeoutMs > 300_000)\n )\n throw new Error(\"Serving timeoutMs must be greater than zero and at most 300000.\");\n }\n /** Provider integrations use the same exact destination and transport. */\n providerConnection(): Readonly<ProductModelConnection> {\n return { ...this.connection };\n }\n private async request(input: ProductModelInput, stream: boolean): Promise<Response> {\n if (stream && !this.capabilities.streaming)\n throw new ProductModelError(\"streaming_unsupported\", 0, false);\n const { signal, ...raw } = input;\n const parsed = Input.parse(raw);\n const body = JSON.stringify({\n model: this.id,\n messages: parsed.messages ?? [{ role: \"user\", content: parsed.prompt }],\n ...(parsed.temperature === undefined ? {} : { temperature: parsed.temperature }),\n ...(parsed.maxTokens === undefined ? {} : { max_tokens: parsed.maxTokens }),\n stream,\n });\n if (new TextEncoder().encode(body).length > 1024 * 1024)\n throw new ProductModelError(\"payload_too_large\", 0, false);\n const deadline = AbortSignal.timeout(this.connection.timeoutMs ?? 60_000);\n let response: Response;\n try {\n response = await (this.connection.fetch ?? fetch)(\n `${productModelEndpoint(this.connection.baseUrl!)}/chat/completions`,\n {\n method: \"POST\",\n redirect: \"error\",\n headers: {\n Authorization: `Bearer ${this.connection.apiKey}`,\n ...(this.connection.teamId ? { \"X-OpenPond-Team-Id\": this.connection.teamId } : {}),\n \"Content-Type\": \"application/json\",\n Accept: stream ? \"text/event-stream\" : \"application/json\",\n },\n body,\n signal: signal ? AbortSignal.any([signal, deadline]) : deadline,\n },\n );\n } catch {\n throw new ProductModelError(\"model_outcome_unknown\", 0, true);\n }\n if (!response.ok) {\n await response.body?.cancel();\n throw new ProductModelError(\n \"model_request_rejected\",\n response.status,\n response.status >= 500,\n response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n undefined,\n );\n }\n return response;\n }\n async generate(input: ProductModelInput): Promise<ProductModelResult> {\n const response = await this.request(input, false);\n try {\n const chunk = Chunk.parse(\n await readBoundedJsonResponse(response, 8 * 1024 * 1024, \"Model result\"),\n );\n if (\n chunk.choices.length !== 1 ||\n !chunk.choices[0].message ||\n chunk.choices[0].message.tool_calls\n )\n throw new Error(\"Unsupported response\");\n return this.result(\n chunk,\n chunk.choices[0].message.content ?? \"\",\n chunk.choices[0].finish_reason ?? null,\n response,\n );\n } catch {\n throw new ProductModelError(\n \"model_response_invalid\",\n response.status,\n true,\n response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n undefined,\n );\n }\n }\n private result(\n chunk: z.infer<typeof Chunk>,\n text: string,\n finishReason: string | null,\n response: Response,\n ): ProductModelResult {\n return {\n text,\n requestId:\n response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n chunk.id,\n modelId: this.id,\n resolvedModelId: chunk.model,\n finishReason,\n usage: chunk.usage\n ? {\n inputTokens: chunk.usage.prompt_tokens,\n outputTokens: chunk.usage.completion_tokens,\n totalTokens: chunk.usage.total_tokens,\n }\n : null,\n systemFingerprint: chunk.system_fingerprint ?? null,\n evidence: chunk.openpond ?? null,\n };\n }\n /** Breaking iteration cancels the HTTP body. A truncated stream never produces finish. */\n async *stream(input: ProductModelInput): AsyncGenerator<ProductModelEvent> {\n const response = await this.request(input, true);\n if (!response.headers.get(\"content-type\")?.includes(\"text/event-stream\") || !response.body) {\n await response.body?.cancel();\n throw new ProductModelError(\"model_stream_invalid\", response.status, true);\n }\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\",\n text = \"\",\n finish: string | null = null,\n last: z.infer<typeof Chunk> | undefined;\n let usage: z.infer<typeof Usage> | null = null;\n let outputBytes = 0;\n try {\n for (;;) {\n const { done, value } = await reader.read();\n buffer = (buffer + decoder.decode(value, { stream: !done })).replace(/\\r\\n/g, \"\\n\");\n if (new TextEncoder().encode(buffer).length > 1024 * 1024)\n throw new Error(\"Stream frame too large\");\n let boundary: number;\n while ((boundary = buffer.indexOf(\"\\n\\n\")) >= 0) {\n const frame = buffer.slice(0, boundary);\n buffer = buffer.slice(boundary + 2);\n const data = frame\n .split(\"\\n\")\n .filter((line) => line.startsWith(\"data:\"))\n .map((line) => line.slice(5).trimStart())\n .join(\"\\n\");\n if (!data) continue;\n if (data === \"[DONE]\") {\n if (!last || !finish) throw new Error(\"Incomplete stream\");\n yield {\n type: \"finish\",\n result: this.result({ ...last, usage }, text, finish, response),\n };\n return;\n }\n const chunk = Chunk.parse(JSON.parse(data));\n if (last && (last.id !== chunk.id || last.model !== chunk.model))\n throw new Error(\"Stream identity changed\");\n last = chunk;\n if (chunk.usage) usage = chunk.usage;\n const choice = chunk.choices[0];\n if (choice?.delta?.tool_calls) throw new Error(\"Tool output unsupported by text API\");\n if (choice?.finish_reason) finish = choice.finish_reason;\n const delta = choice?.delta?.content;\n if (delta) {\n text += delta;\n outputBytes += new TextEncoder().encode(delta).length;\n if (outputBytes > 8 * 1024 * 1024) throw new Error(\"Model output too large\");\n yield { type: \"text\", text: delta };\n }\n }\n if (done) throw new Error(\"Stream ended before DONE\");\n }\n } catch (error) {\n if (error instanceof ProductModelError) throw error;\n throw new ProductModelError(\n \"model_stream_interrupted\",\n response.status,\n true,\n response.headers.get(\"x-openpond-request-id\") ??\n response.headers.get(\"x-request-id\") ??\n undefined,\n );\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n }\n}\nexport function createProductModels<\n const Models extends Record<string, string | ProductModelBinding>,\n>(bindings: Models, connection: ProductModelConnection): ProductModels<Models> {\n return Object.fromEntries(\n Object.entries(bindings).map(([name, binding]) => [\n name,\n new ProductModel(binding, connection),\n ]),\n ) as ProductModels<Models>;\n}\n"],"mappings":"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","names":[]}