reploid 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/poolday/config/chat-files.json +27 -0
- package/apps/poolday/config/partition-generation.js +21 -0
- package/apps/poolday/config/partition-policy.json +74 -0
- package/apps/poolday/config/partition-releases.json +3 -0
- package/apps/poolday/config/work-profile.json +122 -0
- package/apps/poolday/host/chat-view.js +47 -0
- package/apps/poolday/host/earning/client.js +199 -0
- package/apps/poolday/host/earning/contribution.js +168 -0
- package/apps/poolday/host/partition-release.js +33 -0
- package/apps/poolday/host/work-partition-artifact-source.js +37 -0
- package/apps/poolday/host/work-partition-capsule.js +39 -0
- package/apps/poolday/host/work-partition-plan.js +167 -0
- package/apps/poolday/host/work-partition-tokenizer-guard.js +21 -0
- package/apps/poolday/infrastructure/model-storage-lock.js +22 -0
- package/apps/poolday/infrastructure/pack-release-storage.js +52 -0
- package/apps/poolday/pool/pack-operation.js +161 -0
- package/apps/poolday/pool/pack-release-policy.js +44 -0
- package/apps/poolday/pool/peer-pack-data-channel.js +217 -0
- package/apps/poolday/providers/work-adapter.js +67 -0
- package/apps/poolday/providers/work-device.js +33 -0
- package/apps/poolday/providers/work-generation-completion.js +55 -0
- package/apps/poolday/providers/work-provider.js +209 -0
- package/apps/poolday/providers/work-resident-provider.js +113 -0
- package/deploy/artifacts/doppler-gpu-0.7.1.tgz +0 -0
- package/docs/fleet-service.md +214 -0
- package/docs/native-participant.md +534 -0
- package/native-delivery.json +1174 -0
- package/package.json +29 -4
- package/packages/reploid/src/artifacts/binary.js +25 -0
- package/packages/reploid/src/artifacts/canonical-json.js +23 -0
- package/packages/reploid/src/artifacts/custody/exchange.js +402 -0
- package/packages/reploid/src/artifacts/custody/piece-acquisition.js +70 -0
- package/packages/reploid/src/artifacts/custody/runtime.js +404 -0
- package/packages/reploid/src/artifacts/custody/supply-budget.js +19 -0
- package/packages/reploid/src/artifacts/custody-certificate.js +123 -0
- package/packages/reploid/src/artifacts/delivery-attestation.js +64 -0
- package/packages/reploid/src/artifacts/generation-terminal.js +36 -0
- package/packages/reploid/src/artifacts/identity.js +91 -0
- package/packages/reploid/src/artifacts/participant-proofs.js +159 -0
- package/packages/reploid/src/artifacts/receipt.js +131 -0
- package/packages/reploid/src/artifacts/signatures.js +94 -0
- package/packages/reploid/src/artifacts/whole-model-receipt.js +42 -0
- package/packages/reploid/src/cancellation.js +44 -0
- package/packages/reploid/src/config/defaults.json +110 -0
- package/packages/reploid/src/config/index.js +209 -0
- package/packages/reploid/src/config/request-overrides.json +9 -0
- package/packages/reploid/src/config/transport-defaults.json +7 -0
- package/packages/reploid/src/hashing.js +30 -0
- package/packages/reploid/src/measurement/capacity-utilization.js +321 -0
- package/packages/reploid/src/measurement/index.js +5 -0
- package/packages/reploid/src/measurement/readiness-records.js +310 -0
- package/packages/reploid/src/mesh/computer-identity.js +50 -0
- package/packages/reploid/src/mesh/computer-identity.policy.json +8 -0
- package/packages/reploid/src/mesh/contribution.js +141 -0
- package/packages/reploid/src/mesh/generation-recovery.js +58 -0
- package/packages/reploid/src/mesh/gpu-signature-shader.js +27 -0
- package/packages/reploid/src/mesh/gpu-signature.js +136 -0
- package/packages/reploid/src/mesh/gpu-signature.policy.json +11 -0
- package/packages/reploid/src/mesh/index.js +66 -0
- package/packages/reploid/src/mesh/partitions/automatic-ordered-partitions.js +540 -0
- package/packages/reploid/src/mesh/partitions/automatic-partitions.js +298 -0
- package/packages/reploid/src/mesh/partitions/partition-attempt-evidence.js +282 -0
- package/packages/reploid/src/mesh/partitions/partition-attempt-queue-policy.json +6 -0
- package/packages/reploid/src/mesh/partitions/partition-attempt-queue.js +112 -0
- package/packages/reploid/src/mesh/partitions/partition-canonical-contract.js +167 -0
- package/packages/reploid/src/mesh/partitions/partition-canonical-execution.js +168 -0
- package/packages/reploid/src/mesh/partitions/partition-chat-canonical.js +49 -0
- package/packages/reploid/src/mesh/partitions/partition-chat.js +125 -0
- package/packages/reploid/src/mesh/partitions/partition-contract.js +192 -0
- package/packages/reploid/src/mesh/partitions/partition-device-admission.js +96 -0
- package/packages/reploid/src/mesh/partitions/partition-discovery.js +96 -0
- package/packages/reploid/src/mesh/partitions/partition-entry-publication.js +183 -0
- package/packages/reploid/src/mesh/partitions/partition-entry.js +434 -0
- package/packages/reploid/src/mesh/partitions/partition-generation-request.js +33 -0
- package/packages/reploid/src/mesh/partitions/partition-grants.js +277 -0
- package/packages/reploid/src/mesh/partitions/partition-link.js +103 -0
- package/packages/reploid/src/mesh/partitions/partition-network.js +109 -0
- package/packages/reploid/src/mesh/partitions/partition-ordered-chat.js +290 -0
- package/packages/reploid/src/mesh/partitions/partition-ordered-peer.js +415 -0
- package/packages/reploid/src/mesh/partitions/partition-ordered-publication.js +100 -0
- package/packages/reploid/src/mesh/partitions/partition-peer.js +314 -0
- package/packages/reploid/src/mesh/partitions/partition-placement.js +143 -0
- package/packages/reploid/src/mesh/partitions/partition-preparation-progress.js +25 -0
- package/packages/reploid/src/mesh/partitions/partition-receiver-policy.json +7 -0
- package/packages/reploid/src/mesh/partitions/partition-reservations.js +75 -0
- package/packages/reploid/src/mesh/partitions/partition-route-envelope-policy.json +16 -0
- package/packages/reploid/src/mesh/partitions/partition-route-envelope.js +74 -0
- package/packages/reploid/src/mesh/partitions/partition-route-execution.js +409 -0
- package/packages/reploid/src/mesh/partitions/partition-route-network.js +179 -0
- package/packages/reploid/src/mesh/partitions/partition-route-ranking.js +268 -0
- package/packages/reploid/src/mesh/partitions/partition-runner.js +319 -0
- package/packages/reploid/src/mesh/partitions/partition-stage-assignment.js +109 -0
- package/packages/reploid/src/mesh/partitions/partition-stage-commit.js +103 -0
- package/packages/reploid/src/mesh/partitions/partition-step-receiver.js +291 -0
- package/packages/reploid/src/mesh/partitions/partition-summary.js +122 -0
- package/packages/reploid/src/mesh/partitions/preparation-owner.js +40 -0
- package/packages/reploid/src/mesh/partitions/resident-error-codes.json +10 -0
- package/packages/reploid/src/mesh/partitions/resident-partition.js +333 -0
- package/packages/reploid/src/mesh/partitions/resident-route.js +46 -0
- package/packages/reploid/src/mesh/partitions/signed-resident-factory.js +59 -0
- package/packages/reploid/src/mesh/peer-generation.js +896 -0
- package/packages/reploid/src/mesh/peer-identity.js +87 -0
- package/packages/reploid/src/mesh/placement-beliefs.js +107 -0
- package/packages/reploid/src/mesh/preparation-progress.js +46 -0
- package/packages/reploid/src/mesh/provider-hardware.js +11 -0
- package/packages/reploid/src/mesh/remote-generation-requests.js +53 -0
- package/packages/reploid/src/mesh/swarm-coordination.js +140 -0
- package/packages/reploid/src/mesh/web-access-network.js +112 -0
- package/packages/reploid/src/mesh/web-access-policy.json +17 -0
- package/packages/reploid/src/retrieval/citations.js +156 -0
- package/packages/reploid/src/retrieval/claim-support.js +113 -0
- package/packages/reploid/src/retrieval/costs.js +101 -0
- package/packages/reploid/src/retrieval/fixed-provider.js +34 -0
- package/packages/reploid/src/retrieval/index.js +20 -0
- package/packages/reploid/src/retrieval/lexical-support.js +27 -0
- package/packages/reploid/src/retrieval/model-reviewer.js +67 -0
- package/packages/reploid/src/retrieval/page-fetch.json +10 -0
- package/packages/reploid/src/retrieval/page-text.js +182 -0
- package/packages/reploid/src/retrieval/passage.js +37 -0
- package/packages/reploid/src/retrieval/policy.json +14 -0
- package/packages/reploid/src/retrieval/retrieval.js +23 -0
- package/packages/reploid/src/retrieval/review-queue.js +76 -0
- package/packages/reploid/src/retrieval/sources.js +263 -0
- package/packages/reploid/src/retrieval/support-review.js +155 -0
- package/packages/reploid/src/retrieval/text.js +21 -0
- package/packages/reploid/src/rules/contribution.rules.json +8 -0
- package/packages/reploid/src/rules/routing.rules.json +24 -0
- package/packages/reploid/src/transport/assignment.js +571 -0
- package/packages/reploid/src/transport/bounded-channel-writer.js +46 -0
- package/packages/reploid/src/transport/index.js +11 -0
- package/packages/reploid/src/transport/introduction-admission.js +24 -0
- package/packages/reploid/src/transport/introduction-bootstrap.js +112 -0
- package/packages/reploid/src/transport/introduction-policy.json +12 -0
- package/packages/reploid/src/transport/introduction-records.js +90 -0
- package/packages/reploid/src/transport/introductions.js +209 -0
- package/packages/reploid/src/transport/partition-data-channel.js +421 -0
- package/packages/reploid/src/transport/partition-errors.json +16 -0
- package/packages/reploid/src/transport/retry-policy.js +36 -0
- package/packages/reploid/src/transport/room.js +502 -0
- package/packages/reploid/src/transport/sdp-fingerprint.js +5 -0
- package/packages/reploid/src/transport/signaling.js +571 -0
- package/packages/reploid/src/transport/swarm.js +1247 -0
- package/packages/reploid/src/transport/tool-offer-channel.js +137 -0
- package/server/browser-roots.js +42 -0
- package/server/browser-web-worker.js +94 -0
- package/server/chat-completions.js +45 -0
- package/server/fleet/browser-bridge.js +145 -0
- package/server/fleet/contract.js +42 -0
- package/server/fleet/credit-evidence.js +103 -0
- package/server/fleet/credit-recovery.js +175 -0
- package/server/fleet/credits.js +178 -0
- package/server/fleet/execution-admission.js +32 -0
- package/server/fleet/native-host.js +817 -0
- package/server/fleet/placement.js +132 -0
- package/server/fleet/requester.js +346 -0
- package/server/fleet/service.js +311 -0
- package/server/fleet/terminal-policy.js +83 -0
- package/server/fleet/text-api.js +94 -0
- package/server/hashing.js +35 -0
- package/server/http-request-owner.js +49 -0
- package/server/messages.js +57 -0
- package/server/native-canonical-epochs.js +90 -0
- package/server/native-change-log.js +40 -0
- package/server/native-earning.js +203 -0
- package/server/native-generation-journal.js +46 -0
- package/server/native-model-config.js +57 -0
- package/server/native-model-files.js +382 -0
- package/server/native-model-origin.js +54 -0
- package/server/native-model-origins.json +12 -0
- package/server/native-node.js +83 -0
- package/server/native-owner/controls.js +162 -0
- package/server/native-owner/monitor.js +251 -0
- package/server/native-owner/policy.js +273 -0
- package/server/native-owner/rate.js +92 -0
- package/server/native-participant.js +866 -0
- package/server/native-readiness-log.js +30 -0
- package/server/native-release-storage.js +64 -0
- package/server/native-shader-cache.js +369 -0
- package/server/native-supply-budget.js +66 -0
- package/server/native-whole-earning.js +67 -0
- package/server/native-whole-model-fill.js +182 -0
- package/server/native-whole-model.js +130 -0
- package/server/public-web-worker.js +66 -0
- package/server/responses.js +92 -0
- package/server/search/errors.js +47 -0
- package/server/search/page-fetch.js +185 -0
- package/server/text-api.js +83 -0
- package/server/text-recovery.js +45 -0
- package/server/text-request-options.js +23 -0
- package/server/text-requester.js +231 -0
- package/server/token-auth.js +9 -0
- package/server/whole-model-requester.js +99 -0
- package/shared/config/chat-models.json +4685 -0
- package/shared/config/doppler-execution-contracts.js +32 -0
- package/shared/config/doppler-execution-contracts.json +43 -0
- package/shared/config/doppler-generation-contract.js +223 -0
- package/shared/config/doppler-local-models.js +79 -0
- package/shared/config/doppler-package.json +7 -0
- package/shared/config/model-manifests/a0dc69e917133a82780823d17fc771c0f6b882d7c86c571deeaef45be2ff108b.json +6434 -0
- package/shared/config/model-manifests/e985e3cdad60d0cb57d84b436161e66ab5b3f6589a168de6f00b4610e5f1fb59.json +16534 -0
- package/shared/config/model-manifests/fa6eb7bbc3ba63571f8cede780b877d9272bde948697af93dd3d33837cb46137.json +7175 -0
- package/shared/config/model-pieces/qwen-0-8b-pieces.json +1506 -0
- package/shared/config/model-pieces/qwen-2b-pieces.json +4800 -0
- package/shared/config/model-pieces/qwen35b-q4_0-pieces.json +28880 -0
- package/shared/config/reploid-library.json +49 -0
- package/shared/config/swarm-bootstrap.json +21 -0
- package/shared/infrastructure/doppler-runtime-service.js +261 -0
- package/shared/pool/executable-pack.js +87 -0
- package/shared/pool/pack-operation-adapters.js +124 -0
- package/shared/pool/pack-operation-policy.js +75 -0
- package/shared/pool/pool-config.json +2280 -0
- package/shared/vendor/reploid/adapters/doppler-session.js +372 -0
- package/shared/vendor/reploid/artifacts/binary.js +25 -0
- package/shared/vendor/reploid/artifacts/canonical-json.js +23 -0
- package/shared/vendor/reploid/artifacts/delivery-attestation.js +64 -0
- package/shared/vendor/reploid/artifacts/identity.js +91 -0
- package/shared/vendor/reploid/artifacts/manifest-identity.js +17 -0
- package/shared/vendor/reploid/artifacts/participant-proofs.js +159 -0
- package/shared/vendor/reploid/artifacts/signatures.js +94 -0
- package/shared/vendor/reploid/config/defaults.json +110 -0
- package/shared/vendor/reploid/config/index.js +209 -0
- package/shared/vendor/reploid/config/request-overrides.json +9 -0
- package/shared/vendor/reploid/hashing.js +30 -0
- package/shared/vendor/reploid/mesh/generation-context-cache.js +97 -0
- package/shared/vendor/reploid/mesh/partitions/partition-attempt-evidence.js +282 -0
- package/shared/vendor/reploid/mesh/partitions/partition-contract.js +192 -0
- package/shared/vendor/reploid/mesh/partitions/partition-receiver-policy.json +7 -0
- package/shared/vendor/reploid/mesh/partitions/partition-route-ranking.js +268 -0
- package/shared/vendor/reploid/mesh/preparation-progress.js +46 -0
- package/shared/vendor/reploid/mesh/provider-hardware.js +11 -0
- package/shared/vendor/reploid/rules/routing.rules.json +24 -0
- package/shared/vendor/reploid/transport/partition-errors.json +16 -0
- package/README.md +0 -3
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import configuration from './doppler-execution-contracts.json' with { type: 'json' };
|
|
2
|
+
|
|
3
|
+
if (configuration?.schema !== 'reploid.doppler-execution-contracts/v1'
|
|
4
|
+
|| !configuration.formats || Array.isArray(configuration.formats)
|
|
5
|
+
|| !configuration.apis || Array.isArray(configuration.apis)
|
|
6
|
+
|| !Object.keys(configuration.formats).length) throw new Error('Invalid Doppler execution contract configuration');
|
|
7
|
+
|
|
8
|
+
const contracts = Object.freeze(Object.fromEntries(Object.entries(configuration.formats).map(([schema, format]) => {
|
|
9
|
+
const api = configuration.apis[format.api];
|
|
10
|
+
if (!api || typeof format.releaseHistory !== 'boolean'
|
|
11
|
+
|| ['openMethod', 'sessionSchema', 'sessionIdentity', 'receiptIdentity', 'requestSchema', 'eventSchema',
|
|
12
|
+
'receiptSchema', 'sequenceReceiptSchema', 'adapterSchema'].some(field => typeof api[field] !== 'string' || !api[field])
|
|
13
|
+
|| !Array.isArray(api.identityFields) || api.identityFields.length !== 5
|
|
14
|
+
|| api.identityFields.some(field => typeof field !== 'string' || !field)) throw new Error('Invalid Doppler execution contract configuration');
|
|
15
|
+
return [schema, Object.freeze({ ...api, schema, releaseHistory: format.releaseHistory,
|
|
16
|
+
identityFields: Object.freeze([...api.identityFields]) })];
|
|
17
|
+
})));
|
|
18
|
+
|
|
19
|
+
export function resolveDopplerExecutionContract(schema) {
|
|
20
|
+
if (!Object.hasOwn(contracts, schema)) throw new Error('Unsupported executable model schema');
|
|
21
|
+
return contracts[schema];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function resolveDopplerOperationContract(bindingSchema, requestSchema) {
|
|
25
|
+
const contract = resolveDopplerExecutionContract(bindingSchema);
|
|
26
|
+
if (requestSchema === contract.requestSchema) return contract;
|
|
27
|
+
const format = configuration.incrementalFormats?.[requestSchema];
|
|
28
|
+
if (!format || format.openMethod !== contract.openMethod || format.incremental !== true) {
|
|
29
|
+
throw new Error('Unsupported operation request format for this executable model');
|
|
30
|
+
}
|
|
31
|
+
return Object.freeze({ ...contract, ...format, requestSchema });
|
|
32
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "reploid.doppler-execution-contracts/v1",
|
|
3
|
+
"incrementalFormats": {
|
|
4
|
+
"doppler.capsule-operation-request/v2": {
|
|
5
|
+
"openMethod": "openCapsule",
|
|
6
|
+
"eventSchema": "doppler.capsule-operation-event/v2",
|
|
7
|
+
"receiptSchema": "doppler.capsule-operation-receipt/v2",
|
|
8
|
+
"incremental": true
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"formats": {
|
|
12
|
+
"doppler.pack/v2": { "api": "pack", "releaseHistory": false },
|
|
13
|
+
"doppler.pack/v3": { "api": "pack", "releaseHistory": true },
|
|
14
|
+
"doppler.capsule/v2": { "api": "capsule", "releaseHistory": false },
|
|
15
|
+
"doppler.capsule/v3": { "api": "capsule", "releaseHistory": true }
|
|
16
|
+
},
|
|
17
|
+
"apis": {
|
|
18
|
+
"pack": {
|
|
19
|
+
"openMethod": "openPack",
|
|
20
|
+
"sessionSchema": "doppler.pack-session/v1",
|
|
21
|
+
"sessionIdentity": "packIdentity",
|
|
22
|
+
"receiptIdentity": "pack",
|
|
23
|
+
"identityFields": ["schema", "packId", "semanticRoot", "envelopeDigest", "artifactClosureDigest"],
|
|
24
|
+
"requestSchema": "doppler.pack-operation-request/v1",
|
|
25
|
+
"eventSchema": "doppler.pack-operation-event/v1",
|
|
26
|
+
"receiptSchema": "doppler.pack-operation-receipt/v1",
|
|
27
|
+
"sequenceReceiptSchema": "doppler.pack-execution-receipt/v1",
|
|
28
|
+
"adapterSchema": "doppler.pack-adapter/v1"
|
|
29
|
+
},
|
|
30
|
+
"capsule": {
|
|
31
|
+
"openMethod": "openCapsule",
|
|
32
|
+
"sessionSchema": "doppler.capsule-session/v1",
|
|
33
|
+
"sessionIdentity": "capsuleIdentity",
|
|
34
|
+
"receiptIdentity": "capsule",
|
|
35
|
+
"identityFields": ["schema", "capsuleId", "semanticRoot", "envelopeDigest", "artifactClosureDigest"],
|
|
36
|
+
"requestSchema": "doppler.capsule-operation-request/v1",
|
|
37
|
+
"eventSchema": "doppler.capsule-operation-event/v1",
|
|
38
|
+
"receiptSchema": "doppler.capsule-operation-receipt/v1",
|
|
39
|
+
"sequenceReceiptSchema": "doppler.capsule-execution-receipt/v1",
|
|
40
|
+
"adapterSchema": "doppler.capsule-adapter/v1"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
// Generated by scripts/sync-doppler-generation-contract.js from installed doppler-gpu/generation-contract.
|
|
2
|
+
// src/config/generation-contract.json
|
|
3
|
+
var generation_contract_default = {
|
|
4
|
+
schema: "doppler.generation-contract/v1",
|
|
5
|
+
input: {
|
|
6
|
+
prompt: { type: "string", nonempty: true },
|
|
7
|
+
promptTokens: { type: "array", items: "integer", minimum: 0, maximum: 4294967294, nonempty: true }
|
|
8
|
+
},
|
|
9
|
+
inputExactlyOne: ["prompt", "promptTokens"],
|
|
10
|
+
options: {
|
|
11
|
+
maxTokens: { type: "integer", minimum: 1, required: true },
|
|
12
|
+
maxSeqLen: { type: "integer", minimum: 1, required: true },
|
|
13
|
+
temperature: { type: "number", minimum: 0, required: true, runtimeSampling: true },
|
|
14
|
+
topP: { type: "number", exclusiveMinimum: 0, maximum: 1, required: true, runtimeSampling: true },
|
|
15
|
+
topK: { type: "integer", minimum: 0, required: true, runtimeSampling: true },
|
|
16
|
+
repetitionPenalty: { type: "number", exclusiveMinimum: 0, required: true, runtimeSampling: true },
|
|
17
|
+
repetitionPenaltyWindow: { type: "integer", minimum: 0, maximum: 4294967295, required: true, runtimeSampling: true },
|
|
18
|
+
presencePenalty: { type: "number", minimum: 0, default: 0, runtimeSampling: true },
|
|
19
|
+
useChatTemplate: { type: "boolean", required: true },
|
|
20
|
+
seed: { type: "number", minimum: 0, requiredWhenPositive: "temperature" },
|
|
21
|
+
suppressTokenIds: { type: "array", items: "integer", minimum: 0, maximum: 4294967294, default: [], runtimeSampling: true },
|
|
22
|
+
stopSequences: { type: "array", items: "string", nonemptyItems: true, default: [] }
|
|
23
|
+
},
|
|
24
|
+
penaltyOrder: ["repetitionPenalty", "presencePenalty"],
|
|
25
|
+
filterOrder: ["topK", "topP"],
|
|
26
|
+
zeroWindow: "all-context-tokens",
|
|
27
|
+
completionSchema: "doppler.generation-completion/v1",
|
|
28
|
+
stoppingReasons: ["max-tokens", "eos-token", "stop-token", "stop-sequence"],
|
|
29
|
+
errors: {
|
|
30
|
+
invalidRequest: "DOPPLER_GENERATION_INVALID_REQUEST",
|
|
31
|
+
aborted: "DOPPLER_GENERATION_ABORTED",
|
|
32
|
+
deadline: "DOPPLER_GENERATION_DEADLINE"
|
|
33
|
+
},
|
|
34
|
+
canonical: {
|
|
35
|
+
metadataLimits: {
|
|
36
|
+
maxBytes: 65536,
|
|
37
|
+
maxDepth: 16,
|
|
38
|
+
maxNodes: 8192
|
|
39
|
+
},
|
|
40
|
+
maxProposalTokens: 4,
|
|
41
|
+
policy: {
|
|
42
|
+
schema: {
|
|
43
|
+
type: "string",
|
|
44
|
+
enum: [
|
|
45
|
+
"doppler.generation-policy/v3"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
sampler: {
|
|
49
|
+
type: "string",
|
|
50
|
+
enum: [
|
|
51
|
+
"philox4x32-10/cpu-categorical-v1"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
seedHex64: {
|
|
55
|
+
type: "string",
|
|
56
|
+
pattern: "^[a-f0-9]{16}$"
|
|
57
|
+
},
|
|
58
|
+
selectionArithmeticId: {
|
|
59
|
+
type: "hash"
|
|
60
|
+
},
|
|
61
|
+
temperature: {
|
|
62
|
+
type: "number",
|
|
63
|
+
minimum: 0
|
|
64
|
+
},
|
|
65
|
+
topK: {
|
|
66
|
+
type: "integer",
|
|
67
|
+
minimum: 0
|
|
68
|
+
},
|
|
69
|
+
topP: {
|
|
70
|
+
type: "number",
|
|
71
|
+
exclusiveMinimum: 0,
|
|
72
|
+
maximum: 1
|
|
73
|
+
},
|
|
74
|
+
repetitionPenalty: {
|
|
75
|
+
type: "number",
|
|
76
|
+
exclusiveMinimum: 0
|
|
77
|
+
},
|
|
78
|
+
repetitionPenaltyWindow: {
|
|
79
|
+
type: "integer",
|
|
80
|
+
minimum: 0
|
|
81
|
+
},
|
|
82
|
+
presencePenalty: {
|
|
83
|
+
type: "number",
|
|
84
|
+
minimum: 0
|
|
85
|
+
},
|
|
86
|
+
presencePenaltyWindow: {
|
|
87
|
+
type: "integer",
|
|
88
|
+
minimum: 0
|
|
89
|
+
},
|
|
90
|
+
suppressTokenIds: {
|
|
91
|
+
type: "tokens"
|
|
92
|
+
},
|
|
93
|
+
padTokenId: {
|
|
94
|
+
type: "token",
|
|
95
|
+
nullable: true
|
|
96
|
+
},
|
|
97
|
+
eosTokenIds: {
|
|
98
|
+
type: "tokens"
|
|
99
|
+
},
|
|
100
|
+
stopTokenIds: {
|
|
101
|
+
type: "tokens"
|
|
102
|
+
},
|
|
103
|
+
toolTokenIds: {
|
|
104
|
+
type: "tokens"
|
|
105
|
+
},
|
|
106
|
+
stopSequences: {
|
|
107
|
+
type: "array",
|
|
108
|
+
items: "string",
|
|
109
|
+
maxItems: 16,
|
|
110
|
+
maxItemLength: 256,
|
|
111
|
+
nonemptyItems: true
|
|
112
|
+
},
|
|
113
|
+
toolBoundaryPolicy: {
|
|
114
|
+
type: "string",
|
|
115
|
+
enum: [
|
|
116
|
+
"stop",
|
|
117
|
+
"reject"
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
maxGeneratedTokens: {
|
|
121
|
+
type: "integer",
|
|
122
|
+
minimum: 0
|
|
123
|
+
},
|
|
124
|
+
materializedInputCapacity: {
|
|
125
|
+
type: "integer",
|
|
126
|
+
minimum: 0
|
|
127
|
+
},
|
|
128
|
+
totalAcceptedTokenLimit: {
|
|
129
|
+
type: "integer",
|
|
130
|
+
minimum: 0
|
|
131
|
+
},
|
|
132
|
+
maxRawOutputUtf16: {
|
|
133
|
+
type: "integer",
|
|
134
|
+
minimum: 0
|
|
135
|
+
},
|
|
136
|
+
maxVisibleOutputUtf16: {
|
|
137
|
+
type: "integer",
|
|
138
|
+
minimum: 0
|
|
139
|
+
},
|
|
140
|
+
decoderContract: {
|
|
141
|
+
type: "hash"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
stopReasons: [
|
|
145
|
+
"eos-token",
|
|
146
|
+
"stop-token",
|
|
147
|
+
"tool-boundary",
|
|
148
|
+
"stop-sequence",
|
|
149
|
+
"max-tokens",
|
|
150
|
+
"context-limit"
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// src/config/generation-contract.js
|
|
156
|
+
function freezeGeneration(value) {
|
|
157
|
+
if (!value || typeof value !== "object" || Object.isFrozen(value)) return value;
|
|
158
|
+
for (const child of Object.values(value)) freezeGeneration(child);
|
|
159
|
+
return Object.freeze(value);
|
|
160
|
+
}
|
|
161
|
+
var GENERATION_CONTRACT = freezeGeneration(generation_contract_default);
|
|
162
|
+
var GenerationError = class extends Error {
|
|
163
|
+
constructor(kind, message, options = {}) {
|
|
164
|
+
super(message, options);
|
|
165
|
+
this.name = "GenerationError";
|
|
166
|
+
this.code = GENERATION_CONTRACT.errors[kind];
|
|
167
|
+
if (!this.code) throw new Error("Unknown generation error kind.");
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
function requireValue(ok, message) {
|
|
171
|
+
if (!ok) throw new GenerationError("invalidRequest", message);
|
|
172
|
+
}
|
|
173
|
+
function validateGenerationField(name, value, rule = GENERATION_CONTRACT.options[name]) {
|
|
174
|
+
requireValue(rule, `Unknown generation field: ${name}.`);
|
|
175
|
+
if (rule.type === "array") {
|
|
176
|
+
requireValue(Array.isArray(value) && (!rule.nonempty || value.length > 0), `Invalid ${name}: array required.`);
|
|
177
|
+
for (const item of value) validateGenerationField(name, item, {
|
|
178
|
+
type: rule.items,
|
|
179
|
+
minimum: rule.minimum,
|
|
180
|
+
maximum: rule.maximum,
|
|
181
|
+
nonempty: rule.nonemptyItems
|
|
182
|
+
});
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const matches = rule.type === "integer" ? Number.isSafeInteger(value) : rule.type === "number" ? Number.isFinite(value) : typeof value === rule.type;
|
|
186
|
+
requireValue(matches, `Invalid ${name}: ${rule.type} required.`);
|
|
187
|
+
requireValue(!rule.nonempty || value.trim().length > 0, `Invalid ${name}: non-empty text required.`);
|
|
188
|
+
requireValue((rule.minimum === void 0 || value >= rule.minimum) && (rule.exclusiveMinimum === void 0 || value > rule.exclusiveMinimum) && (rule.maximum === void 0 || value <= rule.maximum), `Invalid ${name}: outside its supported range.`);
|
|
189
|
+
}
|
|
190
|
+
function validateGenerationInput(input) {
|
|
191
|
+
requireValue(input && typeof input === "object" && !Array.isArray(input), "Generation input must be an object.");
|
|
192
|
+
requireValue(Object.keys(input).every((key) => Object.hasOwn(GENERATION_CONTRACT.input, key)), "Unknown generation input field.");
|
|
193
|
+
requireValue(
|
|
194
|
+
GENERATION_CONTRACT.inputExactlyOne.filter((key) => Object.hasOwn(input, key)).length === 1,
|
|
195
|
+
"generate requires exactly one prompt or promptTokens input."
|
|
196
|
+
);
|
|
197
|
+
for (const [key, value] of Object.entries(input)) validateGenerationField(key, value, GENERATION_CONTRACT.input[key]);
|
|
198
|
+
}
|
|
199
|
+
function resolveGenerationOptions(options) {
|
|
200
|
+
requireValue(options && typeof options === "object" && !Array.isArray(options), "Generation options must be an object.");
|
|
201
|
+
requireValue(Object.keys(options).every((key) => Object.hasOwn(GENERATION_CONTRACT.options, key)), "Unknown generation option field.");
|
|
202
|
+
const resolved = {};
|
|
203
|
+
for (const [key, rule] of Object.entries(GENERATION_CONTRACT.options)) {
|
|
204
|
+
const value = options[key] === void 0 ? rule.default : options[key];
|
|
205
|
+
if (value === void 0) {
|
|
206
|
+
requireValue(
|
|
207
|
+
!rule.required && !(rule.requiredWhenPositive && options[rule.requiredWhenPositive] > 0),
|
|
208
|
+
`Capsule generation requires explicit ${key}.`
|
|
209
|
+
);
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
validateGenerationField(key, value, rule);
|
|
213
|
+
resolved[key] = structuredClone(value);
|
|
214
|
+
}
|
|
215
|
+
return freezeGeneration(resolved);
|
|
216
|
+
}
|
|
217
|
+
export {
|
|
218
|
+
GENERATION_CONTRACT,
|
|
219
|
+
GenerationError,
|
|
220
|
+
resolveGenerationOptions,
|
|
221
|
+
validateGenerationField,
|
|
222
|
+
validateGenerationInput
|
|
223
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Reploid local Doppler model contract.
|
|
3
|
+
*/
|
|
4
|
+
import chatModels from './chat-models.json' with { type: 'json' };
|
|
5
|
+
import dopplerPackage from './doppler-package.json' with { type: 'json' };
|
|
6
|
+
|
|
7
|
+
export const DOPPLER_PACKAGE_NAME = dopplerPackage.name;
|
|
8
|
+
export const DOPPLER_PACKAGE_VERSION = dopplerPackage.version;
|
|
9
|
+
// Browser generation and partitions consume the same integrity-pinned package.
|
|
10
|
+
export const DOPPLER_BROWSER_RUNTIME_VERSION = dopplerPackage.version;
|
|
11
|
+
export const DOPPLER_PACKAGE_SPEC = dopplerPackage.spec;
|
|
12
|
+
export const DOPPLER_PACKAGE_TARBALL_URL = dopplerPackage.resolved;
|
|
13
|
+
export const DOPPLER_PACKAGE_INTEGRITY = dopplerPackage.integrity;
|
|
14
|
+
export const DOPPLER_BROWSER_RELEASE_REF =
|
|
15
|
+
`${DOPPLER_PACKAGE_NAME}@${DOPPLER_BROWSER_RUNTIME_VERSION}`;
|
|
16
|
+
const DOPPLER_BROWSER_RELEASE_BASE_URL =
|
|
17
|
+
`/vendor/doppler/${DOPPLER_BROWSER_RUNTIME_VERSION}`;
|
|
18
|
+
export const DOPPLER_MODULE_URL = `${DOPPLER_BROWSER_RELEASE_BASE_URL}/src/index.js`;
|
|
19
|
+
export const DOPPLER_TRAINING_URL = `${DOPPLER_BROWSER_RELEASE_BASE_URL}/src/training-browser.js`;
|
|
20
|
+
export const DOPPLER_PARTITIONS_MODULE_URL = `/vendor/doppler/${dopplerPackage.version}/src/partitions.js`;
|
|
21
|
+
export const DOPPLER_KERNEL_BASE_URL = `${DOPPLER_BROWSER_RELEASE_BASE_URL}/src/gpu/kernels`;
|
|
22
|
+
export const DOPPLER_TOOLING_URL = `${DOPPLER_BROWSER_RELEASE_BASE_URL}/src/tooling-exports.browser.js`;
|
|
23
|
+
export const DOPPLER_STORAGE_TOOLING_URL =
|
|
24
|
+
`${DOPPLER_BROWSER_RELEASE_BASE_URL}/src/tooling-exports/storage.js`;
|
|
25
|
+
|
|
26
|
+
export function resolveDopplerBrowserAssets({ pageUrl, explicitBase, storedBase } = {}) {
|
|
27
|
+
const origin = new URL(pageUrl);
|
|
28
|
+
const normalize = value => value ? new URL(String(value).replace(/\/+$/, '') + '/', origin).href.replace(/\/$/, '') : null;
|
|
29
|
+
const explicit = normalize(explicitBase);
|
|
30
|
+
let saved = null;
|
|
31
|
+
if (!explicit) {
|
|
32
|
+
try {
|
|
33
|
+
saved = normalize(storedBase);
|
|
34
|
+
if (saved && !['http:', 'https:'].includes(new URL(saved).protocol)) saved = null;
|
|
35
|
+
} catch { /* Ignore an unusable saved override, not an explicit developer selection. */ }
|
|
36
|
+
}
|
|
37
|
+
const obsolete = saved === normalize('/doppler')
|
|
38
|
+
|| saved === 'https://cdn.jsdelivr.net/npm/doppler-gpu@0.6.2';
|
|
39
|
+
const baseUrl = explicit || (!obsolete && saved) || normalize(DOPPLER_BROWSER_RELEASE_BASE_URL);
|
|
40
|
+
if (!['http:', 'https:'].includes(new URL(baseUrl).protocol)) throw new Error('Doppler assets require an HTTP(S) base');
|
|
41
|
+
return { baseUrl, moduleUrl: `${baseUrl}/src/index.js`, kernelBaseUrl: `${baseUrl}/src/gpu/kernels`,
|
|
42
|
+
storageModuleUrl: `${baseUrl}/src/tooling-exports/storage.js` };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const DEFAULT_DOPPLER_MODEL_ID = 'qwen-3-5-2b-q4k-ehaf16';
|
|
46
|
+
|
|
47
|
+
export const LOCAL_DOPPLER_MODELS = Object.freeze(chatModels.map(model => Object.freeze({
|
|
48
|
+
...model, adapters: Object.freeze(model.adapters),
|
|
49
|
+
packageName: DOPPLER_PACKAGE_NAME, packageVersion: DOPPLER_BROWSER_RUNTIME_VERSION
|
|
50
|
+
})));
|
|
51
|
+
|
|
52
|
+
export function getLocalDopplerModel(modelId) {
|
|
53
|
+
const id = String(modelId || '').trim();
|
|
54
|
+
if (!id) return null;
|
|
55
|
+
return LOCAL_DOPPLER_MODELS.find((model) => model.id === id) || null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function getDefaultLocalDopplerModel() {
|
|
59
|
+
return getLocalDopplerModel(DEFAULT_DOPPLER_MODEL_ID) || LOCAL_DOPPLER_MODELS[0] || null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function buildLocalDopplerModelConfig(modelId) {
|
|
63
|
+
const model = getLocalDopplerModel(modelId);
|
|
64
|
+
if (!model) return null;
|
|
65
|
+
return {
|
|
66
|
+
id: model.id,
|
|
67
|
+
name: model.name,
|
|
68
|
+
identity: model.identity,
|
|
69
|
+
provider: model.provider,
|
|
70
|
+
hostType: 'browser-local',
|
|
71
|
+
packageName: model.packageName,
|
|
72
|
+
packageVersion: model.packageVersion
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function buildDefaultLocalDopplerModelConfig() {
|
|
77
|
+
const model = getDefaultLocalDopplerModel();
|
|
78
|
+
return model ? buildLocalDopplerModelConfig(model.id) : null;
|
|
79
|
+
}
|