openpond-sdk 0.12.24 → 0.12.26
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/LEARNING.md +5 -7
- package/OPENTELEMETRY.md +1 -1
- package/PRODUCT_INTEGRATION.md +129 -0
- package/README.md +13 -3
- package/SERVERLESS_SERVING.md +37 -0
- package/TASKSETS.md +1 -2
- package/TASK_INGESTION.md +87 -86
- package/TRAINING_PROTOCOL.md +7 -3
- package/TRAINING_WORKFLOWS.md +11 -6
- package/dist/advanced-refiner-evaluations.js +10 -9
- package/dist/ai-sdk.js +225 -0
- package/dist/ai-sdk.js.map +1 -0
- package/dist/candidate-evaluations.js +7 -6
- package/dist/{chunk-ZQFROKKS.js → chunk-2U6BQ5C4.js} +3 -3
- package/dist/{chunk-BNBPKCIR.js → chunk-3BILL33A.js} +4 -4
- package/dist/{chunk-3B5KSH3V.js → chunk-456F3BXD.js} +5 -2
- package/dist/chunk-456F3BXD.js.map +1 -0
- package/dist/{chunk-GCUWJUUM.js → chunk-4A4FNG4R.js} +2 -2
- package/dist/{chunk-EZME7DV4.js → chunk-4CDLPMJK.js} +2 -2
- package/dist/{chunk-SP7DQEQM.js → chunk-4CRLQMJ2.js} +5 -5
- package/dist/{chunk-QOX57Y27.js → chunk-4PEK3YOW.js} +6 -3
- package/dist/chunk-4PEK3YOW.js.map +1 -0
- package/dist/{chunk-GS5HEE4M.js → chunk-4REK5TTE.js} +2 -2
- package/dist/{chunk-AG6UJ3DI.js → chunk-57ROW3XF.js} +3 -3
- package/dist/{chunk-3BYFS4RO.js → chunk-6LVLWRBJ.js} +11 -8
- package/dist/chunk-6LVLWRBJ.js.map +1 -0
- package/dist/{chunk-3VUF5H3B.js → chunk-AMZ2SWHR.js} +2 -2
- package/dist/{chunk-ZQ6QTYRE.js → chunk-AQV7RQZH.js} +11 -11
- package/dist/{chunk-ZQ6QTYRE.js.map → chunk-AQV7RQZH.js.map} +1 -1
- package/dist/{chunk-BJMENXR4.js → chunk-C7I4ZG6Q.js} +3 -3
- package/dist/{chunk-JMFYNIYZ.js → chunk-CAOMKM55.js} +6 -3
- package/dist/chunk-CAOMKM55.js.map +1 -0
- package/dist/{chunk-QNOCM5JX.js → chunk-D26RJQU7.js} +2 -2
- package/dist/{chunk-GBDBKGXW.js → chunk-EL6KZO43.js} +3 -3
- package/dist/{chunk-MVAEE5EI.js → chunk-H5KHLBC5.js} +5 -2
- package/dist/chunk-H5KHLBC5.js.map +1 -0
- package/dist/{chunk-7G47YXQT.js → chunk-HCUZYGUK.js} +8 -5
- package/dist/chunk-HCUZYGUK.js.map +1 -0
- package/dist/{chunk-Q4RGCEOI.js → chunk-JINWKUKR.js} +3 -3
- package/dist/{chunk-626JLH4D.js → chunk-JWEIAEQ6.js} +2 -2
- package/dist/{chunk-DH6O4JFB.js → chunk-KJTX4A27.js} +5 -2
- package/dist/chunk-KJTX4A27.js.map +1 -0
- package/dist/{chunk-OBI2MQYU.js → chunk-MN4FE52A.js} +17 -14
- package/dist/chunk-MN4FE52A.js.map +1 -0
- package/dist/{chunk-NZRGRUYG.js → chunk-MUG4OQKL.js} +21 -7
- package/dist/chunk-MUG4OQKL.js.map +1 -0
- package/dist/{chunk-C3TS766N.js → chunk-N6LGT7NT.js} +5 -2
- package/dist/chunk-N6LGT7NT.js.map +1 -0
- package/dist/{chunk-QIGMNB6M.js → chunk-P56JWQYV.js} +3 -3
- package/dist/{chunk-GX6KMHW2.js → chunk-QKLZZOZD.js} +5 -2
- package/dist/chunk-QKLZZOZD.js.map +1 -0
- package/dist/chunk-QYWPNNP3.js +9 -0
- package/dist/chunk-QYWPNNP3.js.map +1 -0
- package/dist/{chunk-QCRNQMN4.js → chunk-UZAVG2WK.js} +5 -5
- package/dist/chunk-UZAVG2WK.js.map +1 -0
- package/dist/{chunk-Z252BNAZ.js → chunk-VE5JD5FN.js} +6 -2
- package/dist/chunk-VE5JD5FN.js.map +1 -0
- package/dist/{chunk-7F43U2NC.js → chunk-WZKKQNYY.js} +3 -3
- package/dist/{chunk-6EZAGTZG.js → chunk-X5AT253K.js} +5 -5
- package/dist/{chunk-ZRTNR4U7.js → chunk-XWUTYFOU.js} +3 -3
- package/dist/{chunk-KEG5QS7W.js → chunk-XYK3MAIC.js} +193 -193
- package/dist/chunk-XYK3MAIC.js.map +1 -0
- package/dist/chunk-ZG4HVCJB.js +248 -0
- package/dist/chunk-ZG4HVCJB.js.map +1 -0
- package/dist/connected-evidence.js +11 -10
- package/dist/dataset-commerce.js +4 -1
- package/dist/dataset-commerce.js.map +1 -1
- package/dist/dataset-marketplace.js +4 -1
- package/dist/dataset-marketplace.js.map +1 -1
- package/dist/dataset-workspaces.js +157 -93
- package/dist/dataset-workspaces.js.map +1 -1
- package/dist/errors.js +2 -1
- package/dist/experiment-evaluation-schedules.js +20 -19
- package/dist/experiment-improvements.js +8 -7
- package/dist/experiments.js +21 -20
- package/dist/human-review.js +2 -1
- package/dist/index.js +87 -56
- package/dist/index.js.map +1 -1
- package/dist/learning.js +6 -3
- package/dist/learning.js.map +1 -1
- package/dist/model-projects.js +2 -1
- package/dist/model-starter-attempts.js +3 -2
- package/dist/model-starter-catalog.js +7 -4
- package/dist/model-starter-catalog.js.map +1 -1
- package/dist/model-starters.js +4 -3
- package/dist/model-taskset-runs.js +7 -4
- package/dist/model-taskset-runs.js.map +1 -1
- package/dist/post-training.js +7 -6
- package/dist/taskset-catalog.js +2 -1
- package/dist/taskset-drafts.js +13 -10
- package/dist/taskset-drafts.js.map +1 -1
- package/dist/taskset-packages.js +16 -15
- package/dist/tool-learning.js +4 -1
- package/dist/tool-learning.js.map +1 -1
- package/dist/training-bundle.js +19 -18
- package/dist/training-bundle.js.map +1 -1
- package/dist/training-hardware.js +3 -2
- package/dist/training-projects.js +4 -1
- package/dist/training-projects.js.map +1 -1
- package/dist/training.js +2761 -2626
- package/dist/training.js.map +1 -1
- package/dist/types/packages/sdk/src/ai-sdk.d.ts +6 -0
- package/dist/types/packages/sdk/src/ai-sdk.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +21 -21
- package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +1 -1
- package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/connected-sync.d.ts +1 -1
- package/dist/types/packages/sdk/src/connected-sync.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-commerce.d.ts +1 -1
- package/dist/types/packages/sdk/src/dataset-commerce.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-marketplace.d.ts +1 -1
- package/dist/types/packages/sdk/src/dataset-marketplace.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-population.d.ts +1 -1
- package/dist/types/packages/sdk/src/dataset-population.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts +1 -1
- package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts +9 -2
- package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +141 -141
- package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/dataset-workspace-error.d.ts +28 -0
- package/dist/types/packages/sdk/src/dataset-workspace-error.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +1 -0
- package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/endpoints.d.ts +4 -0
- package/dist/types/packages/sdk/src/endpoints.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/evaluation-coordination-http.d.ts +1 -1
- package/dist/types/packages/sdk/src/evaluation-coordination-http.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-client.d.ts +637 -637
- package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +28 -28
- package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +28 -28
- package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +1623 -1623
- package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-inspection.d.ts +1 -1
- package/dist/types/packages/sdk/src/experiment-inspection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
- package/dist/types/packages/sdk/src/grader-inspection.d.ts +1 -1
- package/dist/types/packages/sdk/src/grader-inspection.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/human-review-client.d.ts +1 -1
- package/dist/types/packages/sdk/src/human-review-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/index.d.ts +13 -4
- package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/learning-client.d.ts +1 -1
- package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts +1 -1
- package/dist/types/packages/sdk/src/learning-correction-metrics.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +347 -347
- package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +25 -25
- package/dist/types/packages/sdk/src/model-projects.d.ts +1 -1
- package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +1 -1
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +1 -1
- package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +29 -29
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/post-training.d.ts +7 -7
- package/dist/types/packages/sdk/src/product-model-response.d.ts +4 -0
- package/dist/types/packages/sdk/src/product-model-response.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/product-models.d.ts +76 -0
- package/dist/types/packages/sdk/src/product-models.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts +1 -1
- package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/serverless-serving.d.ts +157 -0
- package/dist/types/packages/sdk/src/serverless-serving.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/steering-model-serving.d.ts +276 -0
- package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-catalog.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-catalog.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +121 -121
- package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +20 -20
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +20 -20
- package/dist/types/packages/sdk/src/tool-learning-client.d.ts +1 -1
- package/dist/types/packages/sdk/src/tool-learning-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-evidence.d.ts +54 -0
- package/dist/types/packages/sdk/src/training-evidence.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/training-harness-sources.d.ts +2 -2
- package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +232 -0
- package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-model-serving.d.ts +552 -0
- package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-project-client.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-transport.d.ts +1 -1
- package/dist/types/packages/sdk/src/training-transport.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training.d.ts +2489 -2148
- package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/types.d.ts +14 -1
- package/dist/types/packages/sdk/src/types.d.ts.map +1 -1
- package/examples/learning/submit.py +1 -1
- package/examples/learning/submit.ts +2 -2
- package/examples/training/continual.ts +4 -4
- package/examples/training/manual.ts +1 -3
- package/fixtures/personalized-inference-request.schema.json +316 -0
- package/fixtures/python-foundation/schemas.json +4873 -4484
- package/package.json +19 -3
- package/dist/chunk-3B5KSH3V.js.map +0 -1
- package/dist/chunk-3BYFS4RO.js.map +0 -1
- package/dist/chunk-7G47YXQT.js.map +0 -1
- package/dist/chunk-C3TS766N.js.map +0 -1
- package/dist/chunk-DH6O4JFB.js.map +0 -1
- package/dist/chunk-GX6KMHW2.js.map +0 -1
- package/dist/chunk-JMFYNIYZ.js.map +0 -1
- package/dist/chunk-KEG5QS7W.js.map +0 -1
- package/dist/chunk-MVAEE5EI.js.map +0 -1
- package/dist/chunk-NZRGRUYG.js.map +0 -1
- package/dist/chunk-OBI2MQYU.js.map +0 -1
- package/dist/chunk-QCRNQMN4.js.map +0 -1
- package/dist/chunk-QOX57Y27.js.map +0 -1
- package/dist/chunk-Z252BNAZ.js.map +0 -1
- /package/dist/{chunk-ZQFROKKS.js.map → chunk-2U6BQ5C4.js.map} +0 -0
- /package/dist/{chunk-BNBPKCIR.js.map → chunk-3BILL33A.js.map} +0 -0
- /package/dist/{chunk-GCUWJUUM.js.map → chunk-4A4FNG4R.js.map} +0 -0
- /package/dist/{chunk-EZME7DV4.js.map → chunk-4CDLPMJK.js.map} +0 -0
- /package/dist/{chunk-SP7DQEQM.js.map → chunk-4CRLQMJ2.js.map} +0 -0
- /package/dist/{chunk-GS5HEE4M.js.map → chunk-4REK5TTE.js.map} +0 -0
- /package/dist/{chunk-AG6UJ3DI.js.map → chunk-57ROW3XF.js.map} +0 -0
- /package/dist/{chunk-3VUF5H3B.js.map → chunk-AMZ2SWHR.js.map} +0 -0
- /package/dist/{chunk-BJMENXR4.js.map → chunk-C7I4ZG6Q.js.map} +0 -0
- /package/dist/{chunk-QNOCM5JX.js.map → chunk-D26RJQU7.js.map} +0 -0
- /package/dist/{chunk-GBDBKGXW.js.map → chunk-EL6KZO43.js.map} +0 -0
- /package/dist/{chunk-Q4RGCEOI.js.map → chunk-JINWKUKR.js.map} +0 -0
- /package/dist/{chunk-626JLH4D.js.map → chunk-JWEIAEQ6.js.map} +0 -0
- /package/dist/{chunk-QIGMNB6M.js.map → chunk-P56JWQYV.js.map} +0 -0
- /package/dist/{chunk-7F43U2NC.js.map → chunk-WZKKQNYY.js.map} +0 -0
- /package/dist/{chunk-6EZAGTZG.js.map → chunk-X5AT253K.js.map} +0 -0
- /package/dist/{chunk-ZRTNR4U7.js.map → chunk-XWUTYFOU.js.map} +0 -0
package/LEARNING.md
CHANGED
|
@@ -11,7 +11,7 @@ formats first. The sample uses an input object with `question` and an output
|
|
|
11
11
|
object with `answer`; adapt the record to your published format. The scripts read
|
|
12
12
|
the source's exact task-definition reference from the server.
|
|
13
13
|
|
|
14
|
-
Set `OPENPOND_API_KEY
|
|
14
|
+
Set `OPENPOND_API_KEY` and `OPENPOND_LEARNING_SCOPE` in your
|
|
15
15
|
shell, then run one of:
|
|
16
16
|
|
|
17
17
|
```sh
|
|
@@ -19,12 +19,10 @@ node --experimental-strip-types submit.ts SOURCE_ID example.json
|
|
|
19
19
|
python3 submit.py SOURCE_ID example.json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
the local server uses the profile scope in the request body. These variables are example configuration, not arguments
|
|
27
|
-
that should be committed with credentials.
|
|
22
|
+
The SDK connects to OpenPond automatically. The server authorizes the requested
|
|
23
|
+
workspace scope. The SDK and Python example send that scope in
|
|
24
|
+
`X-OpenPond-Team-Id`. Keep credentials in your application's secret configuration.
|
|
25
|
+
Do not commit their values.
|
|
28
26
|
|
|
29
27
|
Assign stable example/attempt identities and preserve `idempotencyKey`, timestamp
|
|
30
28
|
and content on retries. A different record must use a different key. Submission
|
package/OPENTELEMETRY.md
CHANGED
|
@@ -19,7 +19,7 @@ import { OpenPondClient } from "openpond-sdk";
|
|
|
19
19
|
import { OpenPondSpanExporter } from "openpond-sdk/opentelemetry";
|
|
20
20
|
import { BatchSpanProcessor, TracerProvider } from "@opentelemetry/sdk-trace";
|
|
21
21
|
|
|
22
|
-
const client = new OpenPondClient({
|
|
22
|
+
const client = new OpenPondClient({ apiKey, teamId });
|
|
23
23
|
const exporter = new OpenPondSpanExporter({
|
|
24
24
|
client,
|
|
25
25
|
datasetId,
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Use OpenPond in your product
|
|
2
|
+
|
|
3
|
+
The APIs below target the **0.12.25 source candidate**, which is not published
|
|
4
|
+
yet. Registry version 0.12.24 does not include configured Dataset/named-model
|
|
5
|
+
setup. Use the built candidate package until the coordinated release.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Configure one application-owned server client. Bind aliases to exact callable
|
|
9
|
+
Model IDs from your serving destination:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { createOpenPondClient } from "openpond-sdk";
|
|
13
|
+
|
|
14
|
+
export const openpond = createOpenPondClient({
|
|
15
|
+
apiKey: process.env.OPENPOND_API_KEY!,
|
|
16
|
+
teamId: process.env.OPENPOND_TEAM_ID!,
|
|
17
|
+
datasetId: process.env.OPENPOND_DATASET_ID!,
|
|
18
|
+
models: { support: process.env.OPENPOND_MODEL_ID! },
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const answer = await openpond.models.support.generate({ prompt: "How do I rotate a token?" });
|
|
22
|
+
console.log(answer.text, answer.requestId, answer.usage);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The SDK connects to OpenPond with your API key for task submission and personalized
|
|
26
|
+
inference. Use a key authorized for the selected Dataset and Model. A Dataset-only
|
|
27
|
+
producer key cannot invoke inference. Bind the exact callable Model ID; no
|
|
28
|
+
catalogue default or substitute Model is selected. Naming a Model never activates serving, approves a
|
|
29
|
+
candidate, starts training, or automatically captures inference as a task.
|
|
30
|
+
Decision scorers use their separate typed scoring APIs.
|
|
31
|
+
|
|
32
|
+
`generate` accepts either `prompt` or text `messages`, plus optional `temperature`,
|
|
33
|
+
`maxTokens` and `signal`. Results include `text`, `requestId`, requested `modelId`,
|
|
34
|
+
server-reported `resolvedModelId`, `finishReason`, nullable `usage`, and nullable
|
|
35
|
+
`systemFingerprint`, plus retained server `evidence` when supplied. Evidence
|
|
36
|
+
presence is not client-side verification. Core handles are text APIs; tools need
|
|
37
|
+
the supported integration and explicit capabilities. The current personalized API
|
|
38
|
+
rejects multimodal and structured-output modes. Aliases are typed TypeScript
|
|
39
|
+
properties; multiple clients remain independent.
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
for await (const event of openpond.models.support.stream({ prompt: "Explain token rotation" })) {
|
|
43
|
+
if (event.type === "text") process.stdout.write(event.text);
|
|
44
|
+
else console.log(event.result.usage);
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Breaking the iteration cancels the response. An interrupted stream raises
|
|
49
|
+
`ProductModelError` and never emits a successful `finish`. It may already have
|
|
50
|
+
incurred usage; inference is never automatically replayed. `serving.timeoutMs`
|
|
51
|
+
defaults to 60 seconds and accepts at most 300 seconds. Supply a caller abort
|
|
52
|
+
signal to cancel an individual request. Text requests are bounded to 1 MiB and
|
|
53
|
+
results to 8 MiB; individual stream frames to 1 MiB.
|
|
54
|
+
|
|
55
|
+
Await task delivery separately with `openpond.addTask(...)`. If inference succeeds
|
|
56
|
+
and optional task delivery fails, preserve both outcomes rather than discarding
|
|
57
|
+
the delivery error or pretending the answer failed. See [task ingestion](TASK_INGESTION.md).
|
|
58
|
+
|
|
59
|
+
## Python sync and async
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
from ponder_sdk import AsyncClient
|
|
63
|
+
|
|
64
|
+
async with AsyncClient(
|
|
65
|
+
api_key=api_key, team_id=team_id,
|
|
66
|
+
dataset_id=dataset_id,
|
|
67
|
+
model_aliases={"support": model_id},
|
|
68
|
+
) as openpond:
|
|
69
|
+
answer = await openpond.models.support.generate(prompt="How do I rotate a token?")
|
|
70
|
+
print(answer.text, answer.request_id, answer.usage)
|
|
71
|
+
await openpond.add_task({"id": event_id, "name": "Token rotation", "input": {"question": question}})
|
|
72
|
+
async for event in openpond.models.support.stream(prompt="Explain the steps"):
|
|
73
|
+
if event.type == "text":
|
|
74
|
+
print(event.text, end="")
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`Client` has the same configuration and synchronous calls/iteration. Named aliases
|
|
78
|
+
augment existing Model administration methods; choose aliases that don't collide
|
|
79
|
+
with those methods. Bracket access (`openpond.models["support"]`) is also available.
|
|
80
|
+
Inference shares the existing client's HTTP pool and timeout. Close partially
|
|
81
|
+
consumed iterators (or use `contextlib.closing`/`aclosing`) to release streams
|
|
82
|
+
promptly. Native async cancellation propagates. No SDK queues or flush calls exist.
|
|
83
|
+
|
|
84
|
+
## Optional Vercel AI SDK 7 integration
|
|
85
|
+
|
|
86
|
+
Install `ai@^7.0.165` and `@ai-sdk/openai-compatible@^3.0.87` alongside OpenPond.
|
|
87
|
+
Only the `openpond-sdk/ai-sdk` entry point imports the optional provider; task
|
|
88
|
+
submission has no Vercel dependency. This adapter targets LanguageModelV4 and is
|
|
89
|
+
not an upgrade of an application's existing AI SDK 4/5/6 installation.
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import { generateText, streamText } from "ai";
|
|
93
|
+
import { toAIModel } from "openpond-sdk/ai-sdk";
|
|
94
|
+
import { openpond } from "./openpond.server.js";
|
|
95
|
+
|
|
96
|
+
const model = toAIModel(openpond.models.support);
|
|
97
|
+
const answer = await generateText({ model, prompt: "Explain token rotation", maxRetries: 0 });
|
|
98
|
+
|
|
99
|
+
// Inside an authenticated product backend route:
|
|
100
|
+
export async function POST(request: Request) {
|
|
101
|
+
// Authenticate the product user and validate/limit this payload first.
|
|
102
|
+
const { prompt } = await request.json();
|
|
103
|
+
const result = streamText({ model, prompt, abortSignal: request.signal, maxRetries: 0 });
|
|
104
|
+
return result.toUIMessageStreamResponse();
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Use the AI SDK 7 React `useChat`/transport recipe against your own authenticated
|
|
109
|
+
backend. Never place the OpenPond client or secrets in browser code. AI SDK's UI
|
|
110
|
+
stream response is different from raw OpenAI SSE; use
|
|
111
|
+
`toUIMessageStreamResponse()` rather than forwarding raw SSE into `useChat`.
|
|
112
|
+
|
|
113
|
+
The official compatible provider handles content/usage conversion, tool deltas and
|
|
114
|
+
stream cancellation. OpenPond gates features against the selected binding:
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
models: {
|
|
118
|
+
support: {
|
|
119
|
+
id: process.env.OPENPOND_MODEL_ID!,
|
|
120
|
+
capabilities: { streaming: true, tools: true },
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Only enable tools after checking that exact deployment.
|
|
126
|
+
Defaults are streaming enabled and tools disabled. Structured-output and multimodal
|
|
127
|
+
inputs are rejected. Failed provider calls are surfaced as non-retryable SDK
|
|
128
|
+
errors to prevent implicit replay of billed requests. Explicit `maxRetries: 0`
|
|
129
|
+
also makes that intent visible in application code.
|
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ Node.js 22.14 or newer is required. This package is server-only: never expose an
|
|
|
20
20
|
|
|
21
21
|
`OpenPondExperimentsClient` from `openpond-sdk/experiments` admits one run and its
|
|
22
22
|
immutable configuration with `run(configuration)`. It is also available as
|
|
23
|
-
`createOpenPondClient({ apiKey
|
|
23
|
+
`createOpenPondClient({ apiKey }).experiments(teamId)`. The request includes
|
|
24
24
|
one stable operation ID (also on its nested request), dataset/population,
|
|
25
25
|
target/settings, selected graders and spending cap. Reuse the same operation ID
|
|
26
26
|
after a transport failure; it returns the same Experiment without duplicate work.
|
|
@@ -67,7 +67,6 @@ export const maxDuration = 800;
|
|
|
67
67
|
|
|
68
68
|
const openpond = createOpenPondClient({
|
|
69
69
|
apiKey: process.env.OPENPOND_API_KEY!,
|
|
70
|
-
baseUrl: process.env.OPENPOND_API_URL,
|
|
71
70
|
});
|
|
72
71
|
|
|
73
72
|
export async function POST(request: Request) {
|
|
@@ -392,4 +391,15 @@ not implicitly share a spending cap.
|
|
|
392
391
|
|
|
393
392
|
## Add production tasks
|
|
394
393
|
|
|
395
|
-
|
|
394
|
+
Configure `datasetId` once and await `client.addTask({ id: sourceEventId, name, input })`. Use `client.dataset(otherDatasetId).addTask(task)` for another destination. See [task ingestion](TASK_INGESTION.md) for TypeScript/Python examples, receipt semantics and duplicate-safe retries. Task uploads do not enable training.
|
|
395
|
+
|
|
396
|
+
Dataset workspace HTTP failures throw `DatasetWorkspaceRequestError` from
|
|
397
|
+
`openpond-sdk/dataset-workspaces`, with `status`, an allowlisted `code`,
|
|
398
|
+
`retryable`, and `outcomeUnknown`. Messages contain fixed recovery guidance;
|
|
399
|
+
raw server diagnostics are discarded. `retryable` does not trigger an automatic
|
|
400
|
+
retry. When `outcomeUnknown` is true, retain the original operation ID and request
|
|
401
|
+
bytes, recover its receipt with `operationResult`, or retry the identical request.
|
|
402
|
+
|
|
403
|
+
## Add OpenPond to a product
|
|
404
|
+
|
|
405
|
+
Configure named personalized Model handles with `models` and your API key, then call `client.models.support.generate({ prompt })` or iterate `stream({ prompt })`. See [product integration](PRODUCT_INTEGRATION.md) for TypeScript, Python, React/backend and optional Vercel AI SDK 7 examples. Inference never activates serving or automatically captures tasks.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Usage-based saved Model serving
|
|
2
|
+
|
|
3
|
+
A saved trained Model can be activated when the service returns a compatible
|
|
4
|
+
Serverless price review. Model availability and GPU residency are separate:
|
|
5
|
+
the Model stays callable while unused workers scale down. Cold requests can wait
|
|
6
|
+
for model loading; no fixed cold-start latency is promised.
|
|
7
|
+
|
|
8
|
+
Read `training.modelServing(modelProjectId, { teamId, versionHash })` for the
|
|
9
|
+
exact saved version. When `serverlessReview` is available, use
|
|
10
|
+
`createServerlessServingApproval(serverlessReview, spendingLimit)` from
|
|
11
|
+
`openpond-sdk/training` and include the result as `serverlessApproval` in the
|
|
12
|
+
normal `training.controlModelServing` activation request. Retain the original
|
|
13
|
+
operation ID and exact request for recovery. The request's idle setting must
|
|
14
|
+
match the review's `workerIdleTimeoutSeconds`.
|
|
15
|
+
|
|
16
|
+
Activation creates callable configuration. Each inference reserves a finite
|
|
17
|
+
amount of workspace credit before dispatch and settles observed allocated
|
|
18
|
+
execution time. Compatible requests can share a worker; their quantities divide
|
|
19
|
+
the same interval rather than each receiving a full GPU clock. Startup, queue
|
|
20
|
+
and idle time have no separate customer charge. Token usage is still reported,
|
|
21
|
+
with no additional token charge for the same Serverless request.
|
|
22
|
+
|
|
23
|
+
The optional spending limit bounds the accepted activation's cumulative usage.
|
|
24
|
+
An omitted limit uses available workspace credit. Pending requests retain their
|
|
25
|
+
credit holds until execution release is confirmed. Stop closes new admission
|
|
26
|
+
and requests cancellation while preserving outstanding settlement and cleanup.
|
|
27
|
+
Delayed supplier records do not increase an accepted customer price.
|
|
28
|
+
|
|
29
|
+
Current usage is returned in `control.serverless`: `chargedUsd`, `reservedUsd`,
|
|
30
|
+
`quantityMicros` and the retained review. Supplier-cost status is separate from
|
|
31
|
+
the customer debit. An unavailable review does not qualify another model or
|
|
32
|
+
modification method automatically.
|
|
33
|
+
|
|
34
|
+
Python consumers use the same generated request/response contracts and can
|
|
35
|
+
import `create_serverless_serving_approval` from `ponder_sdk.serverless_serving`.
|
|
36
|
+
The official CLI's `hosted-model-serving` and `hosted-control-model-serving`
|
|
37
|
+
operations use these same Model contracts.
|
package/TASKSETS.md
CHANGED
|
@@ -8,7 +8,6 @@ optional Model Project attachment filtering before returning records.
|
|
|
8
8
|
import { OpenPondTasksetCatalogClient } from "openpond-sdk/taskset-catalog";
|
|
9
9
|
|
|
10
10
|
const tasksets = new OpenPondTasksetCatalogClient({
|
|
11
|
-
baseUrl: "https://api.openpond.ai",
|
|
12
11
|
apiKey,
|
|
13
12
|
teamId,
|
|
14
13
|
});
|
|
@@ -262,7 +261,7 @@ Imported source still requires explicit source review before publication.
|
|
|
262
261
|
|
|
263
262
|
`OpenPondTasksetDraftClient` from `openpond-sdk/taskset-drafts` defines the
|
|
264
263
|
scoped `/v1/models/:modelId/taskset-drafts` protocol. Construct it in server code
|
|
265
|
-
with `
|
|
264
|
+
with `apiKey` and `teamId`. It supports source inspection,
|
|
266
265
|
initialization, listing, document/file reads and edits, explicit Model refresh,
|
|
267
266
|
validation, publication and deletion. Hosting these endpoints requires a server
|
|
268
267
|
implementation; exporting this client alone does not make them available.
|
package/TASK_INGESTION.md
CHANGED
|
@@ -1,135 +1,136 @@
|
|
|
1
1
|
# Add tasks to a Dataset
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
a release, create a Model or enable a collection schedule.
|
|
3
|
+
The APIs below target the **0.12.25 source candidate**, which is not published
|
|
4
|
+
yet. Registry version 0.12.24 does not include configured Dataset/named-model
|
|
5
|
+
setup. Use the built candidate package until the coordinated release.
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
|
|
8
|
+
Configure a client once in your product's server module. Submit one structured
|
|
9
|
+
source event with `await addTask(task)`:
|
|
10
10
|
|
|
11
11
|
```ts
|
|
12
12
|
import { createOpenPondClient } from "openpond-sdk";
|
|
13
13
|
|
|
14
|
-
const
|
|
14
|
+
export const openpond = createOpenPondClient({
|
|
15
15
|
apiKey: process.env.OPENPOND_API_KEY!,
|
|
16
16
|
teamId: process.env.OPENPOND_TEAM_ID!,
|
|
17
|
+
datasetId: process.env.OPENPOND_DATASET_ID!,
|
|
17
18
|
});
|
|
18
19
|
|
|
19
|
-
const receipt = await
|
|
20
|
+
const receipt = await openpond.addTask({
|
|
21
|
+
id: sourceEventId,
|
|
20
22
|
name: "Handle an expired API token",
|
|
21
23
|
input: { request: "Fetch the report", observedError: "Token expired" },
|
|
22
|
-
source: { kind: "production_agent", eventId:
|
|
23
|
-
}
|
|
24
|
-
|
|
24
|
+
source: { kind: "production_agent", eventId: sourceEventId },
|
|
25
|
+
});
|
|
25
26
|
console.log(receipt.taskId, receipt.receivedAt);
|
|
26
27
|
```
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
## Bind the destination once
|
|
29
|
+
The client connects to OpenPond automatically and keeps its own credentials;
|
|
30
|
+
no mutable global account is used. For an explicit alternate Dataset:
|
|
32
31
|
|
|
33
32
|
```ts
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const addTask = createTaskAdder({
|
|
37
|
-
apiKey: process.env.OPENPOND_API_KEY!,
|
|
38
|
-
teamId: process.env.OPENPOND_TEAM_ID!,
|
|
39
|
-
datasetId: process.env.OPENPOND_DATASET_ID!,
|
|
40
|
-
baseUrl: "https://api.openpond.ai",
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
await addTask({
|
|
33
|
+
await openpond.dataset(otherDatasetId).addTask({
|
|
34
|
+
id: sourceEventId,
|
|
44
35
|
name: "Explain a failed agent run",
|
|
45
36
|
input: { request: "Summarize the report", outcome: "incomplete" },
|
|
46
|
-
}
|
|
37
|
+
});
|
|
47
38
|
```
|
|
48
39
|
|
|
49
|
-
|
|
50
|
-
it never uses a global account, last-selected Dataset or implicit Fix-it Model.
|
|
40
|
+
`addTask(datasetId, task)` and the `createTaskAdder` helper remain available.
|
|
51
41
|
|
|
52
|
-
##
|
|
42
|
+
## Delivery, identity and retries
|
|
53
43
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
A successful receipt confirms durable storage of the task and its processing
|
|
45
|
+
obligation. It does not wait for indexing, grading or training. Dataset projection
|
|
46
|
+
may lag acknowledgement. Await suspends this async function while the JavaScript
|
|
47
|
+
event loop continues handling other work. There is no SDK background queue,
|
|
48
|
+
flush command or permanent streaming connection.
|
|
59
49
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
`id` identifies the source event within the workspace and Dataset. It is separate
|
|
51
|
+
from the server's canonical `receipt.taskId`. Repeating the same source ID and
|
|
52
|
+
content returns the original receipt; changed content conflicts instead of
|
|
53
|
+
silently overwriting. New credentials still need current authorization for that
|
|
54
|
+
exact Dataset. A successful upload grants no training permission.
|
|
64
55
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
Retain an explicit stable idempotency key for each source event. Repeating the
|
|
68
|
-
same key and task in the same authorized destination returns the original
|
|
69
|
-
receipt without inserting a duplicate. Reusing a key with different content is
|
|
70
|
-
a conflict. Separate keys add separate tasks, including simultaneous writers.
|
|
71
|
-
|
|
72
|
-
The SDK makes one request; it does not silently replay arbitrary mutations.
|
|
73
|
-
When a response is lost, `DatasetTaskIngestionError.operationId` retains the
|
|
74
|
-
operation identity and `outcomeUnknown` indicates that persistence could not be
|
|
75
|
-
confirmed. Retry the original task with that same key. Do not generate a new
|
|
76
|
-
key merely because the response was interrupted. A supplied abort signal is
|
|
77
|
-
forwarded to the request; an interrupted response can still have been saved.
|
|
56
|
+
The SDK sends once. It never automatically replays a mutation. Preserve your
|
|
57
|
+
source ID and original content across uncertain outcomes:
|
|
78
58
|
|
|
79
59
|
```ts
|
|
80
60
|
import { DatasetTaskIngestionError } from "openpond-sdk";
|
|
81
61
|
|
|
62
|
+
const task = { id: sourceEventId, name: "Expired token", input: { error: "expired" } };
|
|
82
63
|
try {
|
|
83
|
-
await addTask(task, {
|
|
64
|
+
await openpond.addTask(task, { signal: request.signal, timeoutMs: 10_000 });
|
|
84
65
|
} catch (error) {
|
|
85
66
|
if (error instanceof DatasetTaskIngestionError && error.outcomeUnknown) {
|
|
86
|
-
// Retain task
|
|
67
|
+
// Retain task and error.sourceId privately for a later exact retry.
|
|
87
68
|
}
|
|
88
69
|
throw error;
|
|
89
70
|
}
|
|
90
71
|
```
|
|
91
72
|
|
|
92
|
-
|
|
93
|
-
`
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
The server owns authorization, atomic append and revision history. Appending
|
|
107
|
-
does not rewrite fixed Experiment Dataset versions or previously published
|
|
108
|
-
releases. Full authoring still uses the revisioned Dataset workspace API.
|
|
73
|
+
When `id` is omitted the SDK generates one before dispatch. On uncertain delivery,
|
|
74
|
+
`DatasetTaskIngestionError.sourceId` (also `operationId`) retains it. Supply that
|
|
75
|
+
ID in a later retry. Prefer an explicit ID when cancellation or process exit could
|
|
76
|
+
prevent handling the error. An event never transmitted successfully cannot be
|
|
77
|
+
promised durable. `idempotencyKey` is accepted for existing callers; supplying a
|
|
78
|
+
conflicting `task.id` is rejected before dispatch.
|
|
79
|
+
|
|
80
|
+
Every task has `name` and structured `input`. Optional fields: `expectedOutput`,
|
|
81
|
+
`split`, `tags`, and `source` (`kind`, `eventId`, `label`, `occurredAt`). Default
|
|
82
|
+
split: `validation`; `train` alone grants no learning authority. Requests are
|
|
83
|
+
bounded to 128 KiB. The receipt retains workspace, Dataset, canonical task and
|
|
84
|
+
source identities, first-save `receivedAt`, revision, `state: "saved"` and
|
|
85
|
+
`trainingUseAuthorized: false`. Source occurrence time differs from upload time.
|
|
86
|
+
Existing immutable releases and Experiment inputs retain their own identities.
|
|
109
87
|
|
|
110
88
|
## Python
|
|
111
89
|
|
|
112
|
-
|
|
113
|
-
|
|
90
|
+
`ponder-sdk` uses the same configured destination and source ID with its native
|
|
91
|
+
owned connection pool:
|
|
114
92
|
|
|
115
93
|
```python
|
|
116
94
|
from ponder_sdk import Client
|
|
117
95
|
|
|
118
|
-
with Client(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
96
|
+
with Client(api_key=api_key, team_id=team_id,
|
|
97
|
+
dataset_id=dataset_id) as openpond:
|
|
98
|
+
receipt = openpond.add_task({
|
|
99
|
+
"id": source_event_id,
|
|
100
|
+
"name": "Expired token",
|
|
101
|
+
"input": {"error": "Token expired"},
|
|
102
|
+
})
|
|
103
|
+
# Alternate destination; uses the same pool:
|
|
104
|
+
# openpond.dataset(other_dataset_id).add_task(task)
|
|
124
105
|
```
|
|
125
106
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
107
|
+
Sync calls block their calling thread. Async applications use
|
|
108
|
+
`async with AsyncClient(...)` and `await openpond.add_task(task)`. Both validate the
|
|
109
|
+
maintained wire schemas and never replay writes automatically. A `PonderError`
|
|
110
|
+
retains `operation_id` and `outcome_unknown`; cancellation propagates, so retain
|
|
111
|
+
your own source ID before awaiting. Closing the HTTP pool is resource cleanup,
|
|
112
|
+
not delivery flushing.
|
|
113
|
+
|
|
114
|
+
## HTTP and React
|
|
115
|
+
|
|
116
|
+
The HTTP operation remains `POST /v1/dataset-workspaces/{datasetId}/tasks` with
|
|
117
|
+
Bearer auth and `X-OpenPond-Team-Id`. The public `task.id` maps to wire
|
|
118
|
+
`operationId`; it is excluded from `task` content:
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"schemaVersion": "openpond.datasetTaskAppend.v1",
|
|
123
|
+
"operationId": "stable-source-event",
|
|
124
|
+
"task": { "name": "Expired token", "input": { "error": "expired" } }
|
|
125
|
+
}
|
|
126
|
+
```
|
|
129
127
|
|
|
130
|
-
|
|
128
|
+
React calls your authenticated product backend. The backend selects an authorized
|
|
129
|
+
Dataset and awaits the configured client. Keep OpenPond secrets and destination
|
|
130
|
+
authority server-side; do not accept an arbitrary browser-supplied Dataset ID.
|
|
131
|
+
For named model calls and the optional Vercel integration see
|
|
132
|
+
[product integration](PRODUCT_INTEGRATION.md).
|
|
131
133
|
|
|
132
|
-
OpenTelemetry is
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
OTLP receiver, automatically capture arbitrary logs, or authorize training.
|
|
134
|
+
OpenTelemetry is a separate optional source adapter, not this request format.
|
|
135
|
+
Project explicitly selected spans into structured tasks. This endpoint is not an
|
|
136
|
+
OTLP receiver and does not capture arbitrary logs or authorize training.
|
package/TRAINING_PROTOCOL.md
CHANGED
|
@@ -50,8 +50,8 @@ GET /v1/training/jobs?modelProjectId=&cursor=&limit=
|
|
|
50
50
|
GET /v1/training/jobs/{jobId}
|
|
51
51
|
POST /v1/training/jobs/{jobId}/cancel
|
|
52
52
|
POST /v1/training/jobs/{jobId}/stop-after-group
|
|
53
|
-
GET /v1/training/jobs/{jobId}/events
|
|
54
|
-
GET /v1/training/jobs/{jobId}/logs
|
|
53
|
+
GET /v1/training/jobs/{jobId}/events?after=0&limit=50
|
|
54
|
+
GET /v1/training/jobs/{jobId}/logs?after=0&limit=50
|
|
55
55
|
GET /v1/training/jobs/{jobId}/outputs
|
|
56
56
|
|
|
57
57
|
PUT /v1/model-projects/{portableProjectId}
|
|
@@ -205,7 +205,7 @@ and an in-memory asset map without creating a training job or acquiring compute.
|
|
|
205
205
|
|
|
206
206
|
The compiler verifies selected release identities and private verifier bytes,
|
|
207
207
|
checks training/evaluation isolation, and rejects missing or unexpected Work
|
|
208
|
-
assets. Callers retain responsibility for authorizing the inputs and
|
|
208
|
+
assets. Callers retain responsibility for authorizing the inputs and preparing the
|
|
209
209
|
result through the training artifact API before job admission. Filesystem cache
|
|
210
210
|
materialization remains a Desktop concern.
|
|
211
211
|
|
|
@@ -328,3 +328,7 @@ It performs no authentication, network upload, tool execution, training, or mode
|
|
|
328
328
|
activation. Callers must verify authentic durable hosted receipts before
|
|
329
329
|
acknowledging delivery. Import the portable entry in browser code; the Node queue
|
|
330
330
|
is a separate runtime capability.
|
|
331
|
+
|
|
332
|
+
### Retained evidence pagination
|
|
333
|
+
|
|
334
|
+
Events and logs return at most 100 records per database-selected page (default 50), plus `nextOffset` or `null`. Use `training.eventsPage(jobId, { after, limit })` and `training.logsPage(...)` to obtain `{ items, nextOffset }`. The SDK validates the returned job, sequence window, count and continuation before exposing records. Offsets address the current ordered snapshot; lifecycle snapshots can change while a run is live. They are not an immutable append-only cursor. Existing `events()`/`logs()` convenience reads follow pages with an aggregate response-byte budget and a 100,000-record ceiling. MCP requests exactly one page.
|
package/TRAINING_WORKFLOWS.md
CHANGED
|
@@ -9,8 +9,8 @@ the actual host/account before preparing work.
|
|
|
9
9
|
|
|
10
10
|
## Authentication and lifecycle
|
|
11
11
|
|
|
12
|
-
Training and Model clients
|
|
13
|
-
supplier) and an injectable `fetch`. Use
|
|
12
|
+
Training and Model clients connect to OpenPond automatically. They accept
|
|
13
|
+
`headers` (including an async token supplier) and an injectable `fetch`. Use your API key as the Bearer credential and
|
|
14
14
|
`X-OpenPond-Team-Id`; retain server authorization and owner checks. Learning,
|
|
15
15
|
Dataset and taskset-run clients accept their existing `apiKey` and workspace
|
|
16
16
|
scope. Never put credentials in URLs, request identities, fixtures or receipts.
|
|
@@ -204,8 +204,7 @@ the job controls and keep its identity.
|
|
|
204
204
|
explicit `recordCandidateDecision` with its exact artifact reference and CAS.
|
|
205
205
|
`cancel` reconciles the current job version before sending remote cancellation.
|
|
206
206
|
|
|
207
|
-
The examples require `
|
|
208
|
-
`OPENPOND_TEAM_ID` from the caller's normal configured account. They use only
|
|
207
|
+
The examples require `OPENPOND_API_KEY` and `OPENPOND_TEAM_ID` from the caller's normal configured account. They use only
|
|
209
208
|
public SDK imports, bound each invocation to two minutes and write new receipt
|
|
210
209
|
files exclusively with mode0600. They do not poll indefinitely or automatically
|
|
211
210
|
retry an uncertain paid start. Keep the original receipt for future reconciliation.
|
|
@@ -495,9 +494,9 @@ of `neuron_steering` and `inspect_activations`. `draftSchema` describes the form
|
|
|
495
494
|
not permission to write or execute.
|
|
496
495
|
|
|
497
496
|
Each capability observation retains `validationLevel`: `null` when execution is
|
|
498
|
-
unavailable, `source_validated` for an experimental
|
|
497
|
+
unavailable, `source_validated` for an experimental runtime, or
|
|
499
498
|
`gpu_qualified` after a retained exact-model/runtime GPU run. Source validation
|
|
500
|
-
describes a runtime reviewed for an experimental
|
|
499
|
+
describes a runtime reviewed for an experimental trial; it is not
|
|
501
500
|
evidence that training or inference has already succeeded. Read the runtime's retained evidence; neither level
|
|
502
501
|
reserves compute, approves a charge or establishes model quality. Engram,
|
|
503
502
|
Decision, AlphaEdit and neuron-training capabilities use the same distinction.
|
|
@@ -669,3 +668,9 @@ optimizer creation and exports a cumulative patch with parent, initial and
|
|
|
669
668
|
final state hashes. A runtime must explicitly advertise this mode before
|
|
670
669
|
admission; source packaging alone does not establish native qualification or
|
|
671
670
|
old/new held-out retention.
|
|
671
|
+
|
|
672
|
+
### Managed GRPO sampling support
|
|
673
|
+
|
|
674
|
+
Use `topP: 1` for managed GRPO. The current qualified trainer replays temperature and the retained required-tool grammar; it cannot replay an independent nucleus filter or separate JSON response grammar. Unsupported generation settings are rejected during preparation, before allocation. Structured Work output uses its supported required-tool path. Existing saved requests retain their explicit settings and are never silently rewritten.
|
|
675
|
+
|
|
676
|
+
The current managed runtime admits at least two optimizer iterations. A single iteration is not inherently invalid GRPO, but needs explicit support from the selected runtime before it can be prepared. Each iteration accumulates the entire trajectory group before stepping; `gradientAccumulationSteps` does not define separate optimizer windows for GRPO. SFT uses its own true batch accumulation and exact model/image limits. Held-out SFT evaluation does not select optimizer updates.
|
|
@@ -12,19 +12,20 @@ import {
|
|
|
12
12
|
sealAdvancedRefinerEvaluationPin,
|
|
13
13
|
sealAdvancedRefinerReviewReceipt,
|
|
14
14
|
verifyAdvancedRefinerEvaluationPin
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-626JLH4D.js";
|
|
15
|
+
} from "./chunk-X5AT253K.js";
|
|
16
|
+
import "./chunk-D26RJQU7.js";
|
|
17
|
+
import "./chunk-456F3BXD.js";
|
|
18
|
+
import "./chunk-JWEIAEQ6.js";
|
|
20
19
|
import "./chunk-O6FKHAWN.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-H3367ISL.js";
|
|
21
|
+
import "./chunk-4REK5TTE.js";
|
|
22
|
+
import "./chunk-XWUTYFOU.js";
|
|
23
|
+
import "./chunk-CAOMKM55.js";
|
|
24
|
+
import "./chunk-H5KHLBC5.js";
|
|
25
25
|
import "./chunk-CL3IOOVL.js";
|
|
26
26
|
import "./chunk-B3ZHJ2KK.js";
|
|
27
27
|
import "./chunk-H3JZ3P5T.js";
|
|
28
|
+
import "./chunk-QYWPNNP3.js";
|
|
28
29
|
import "./chunk-YLJ4XMA6.js";
|
|
29
30
|
export {
|
|
30
31
|
AdvancedRefinerEvaluationAccountingSchema,
|