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.
Files changed (233) hide show
  1. package/apps/poolday/config/chat-files.json +27 -0
  2. package/apps/poolday/config/partition-generation.js +21 -0
  3. package/apps/poolday/config/partition-policy.json +74 -0
  4. package/apps/poolday/config/partition-releases.json +3 -0
  5. package/apps/poolday/config/work-profile.json +122 -0
  6. package/apps/poolday/host/chat-view.js +47 -0
  7. package/apps/poolday/host/earning/client.js +199 -0
  8. package/apps/poolday/host/earning/contribution.js +168 -0
  9. package/apps/poolday/host/partition-release.js +33 -0
  10. package/apps/poolday/host/work-partition-artifact-source.js +37 -0
  11. package/apps/poolday/host/work-partition-capsule.js +39 -0
  12. package/apps/poolday/host/work-partition-plan.js +167 -0
  13. package/apps/poolday/host/work-partition-tokenizer-guard.js +21 -0
  14. package/apps/poolday/infrastructure/model-storage-lock.js +22 -0
  15. package/apps/poolday/infrastructure/pack-release-storage.js +52 -0
  16. package/apps/poolday/pool/pack-operation.js +161 -0
  17. package/apps/poolday/pool/pack-release-policy.js +44 -0
  18. package/apps/poolday/pool/peer-pack-data-channel.js +217 -0
  19. package/apps/poolday/providers/work-adapter.js +67 -0
  20. package/apps/poolday/providers/work-device.js +33 -0
  21. package/apps/poolday/providers/work-generation-completion.js +55 -0
  22. package/apps/poolday/providers/work-provider.js +209 -0
  23. package/apps/poolday/providers/work-resident-provider.js +113 -0
  24. package/deploy/artifacts/doppler-gpu-0.7.1.tgz +0 -0
  25. package/docs/fleet-service.md +214 -0
  26. package/docs/native-participant.md +534 -0
  27. package/native-delivery.json +1174 -0
  28. package/package.json +29 -4
  29. package/packages/reploid/src/artifacts/binary.js +25 -0
  30. package/packages/reploid/src/artifacts/canonical-json.js +23 -0
  31. package/packages/reploid/src/artifacts/custody/exchange.js +402 -0
  32. package/packages/reploid/src/artifacts/custody/piece-acquisition.js +70 -0
  33. package/packages/reploid/src/artifacts/custody/runtime.js +404 -0
  34. package/packages/reploid/src/artifacts/custody/supply-budget.js +19 -0
  35. package/packages/reploid/src/artifacts/custody-certificate.js +123 -0
  36. package/packages/reploid/src/artifacts/delivery-attestation.js +64 -0
  37. package/packages/reploid/src/artifacts/generation-terminal.js +36 -0
  38. package/packages/reploid/src/artifacts/identity.js +91 -0
  39. package/packages/reploid/src/artifacts/participant-proofs.js +159 -0
  40. package/packages/reploid/src/artifacts/receipt.js +131 -0
  41. package/packages/reploid/src/artifacts/signatures.js +94 -0
  42. package/packages/reploid/src/artifacts/whole-model-receipt.js +42 -0
  43. package/packages/reploid/src/cancellation.js +44 -0
  44. package/packages/reploid/src/config/defaults.json +110 -0
  45. package/packages/reploid/src/config/index.js +209 -0
  46. package/packages/reploid/src/config/request-overrides.json +9 -0
  47. package/packages/reploid/src/config/transport-defaults.json +7 -0
  48. package/packages/reploid/src/hashing.js +30 -0
  49. package/packages/reploid/src/measurement/capacity-utilization.js +321 -0
  50. package/packages/reploid/src/measurement/index.js +5 -0
  51. package/packages/reploid/src/measurement/readiness-records.js +310 -0
  52. package/packages/reploid/src/mesh/computer-identity.js +50 -0
  53. package/packages/reploid/src/mesh/computer-identity.policy.json +8 -0
  54. package/packages/reploid/src/mesh/contribution.js +141 -0
  55. package/packages/reploid/src/mesh/generation-recovery.js +58 -0
  56. package/packages/reploid/src/mesh/gpu-signature-shader.js +27 -0
  57. package/packages/reploid/src/mesh/gpu-signature.js +136 -0
  58. package/packages/reploid/src/mesh/gpu-signature.policy.json +11 -0
  59. package/packages/reploid/src/mesh/index.js +66 -0
  60. package/packages/reploid/src/mesh/partitions/automatic-ordered-partitions.js +540 -0
  61. package/packages/reploid/src/mesh/partitions/automatic-partitions.js +298 -0
  62. package/packages/reploid/src/mesh/partitions/partition-attempt-evidence.js +282 -0
  63. package/packages/reploid/src/mesh/partitions/partition-attempt-queue-policy.json +6 -0
  64. package/packages/reploid/src/mesh/partitions/partition-attempt-queue.js +112 -0
  65. package/packages/reploid/src/mesh/partitions/partition-canonical-contract.js +167 -0
  66. package/packages/reploid/src/mesh/partitions/partition-canonical-execution.js +168 -0
  67. package/packages/reploid/src/mesh/partitions/partition-chat-canonical.js +49 -0
  68. package/packages/reploid/src/mesh/partitions/partition-chat.js +125 -0
  69. package/packages/reploid/src/mesh/partitions/partition-contract.js +192 -0
  70. package/packages/reploid/src/mesh/partitions/partition-device-admission.js +96 -0
  71. package/packages/reploid/src/mesh/partitions/partition-discovery.js +96 -0
  72. package/packages/reploid/src/mesh/partitions/partition-entry-publication.js +183 -0
  73. package/packages/reploid/src/mesh/partitions/partition-entry.js +434 -0
  74. package/packages/reploid/src/mesh/partitions/partition-generation-request.js +33 -0
  75. package/packages/reploid/src/mesh/partitions/partition-grants.js +277 -0
  76. package/packages/reploid/src/mesh/partitions/partition-link.js +103 -0
  77. package/packages/reploid/src/mesh/partitions/partition-network.js +109 -0
  78. package/packages/reploid/src/mesh/partitions/partition-ordered-chat.js +290 -0
  79. package/packages/reploid/src/mesh/partitions/partition-ordered-peer.js +415 -0
  80. package/packages/reploid/src/mesh/partitions/partition-ordered-publication.js +100 -0
  81. package/packages/reploid/src/mesh/partitions/partition-peer.js +314 -0
  82. package/packages/reploid/src/mesh/partitions/partition-placement.js +143 -0
  83. package/packages/reploid/src/mesh/partitions/partition-preparation-progress.js +25 -0
  84. package/packages/reploid/src/mesh/partitions/partition-receiver-policy.json +7 -0
  85. package/packages/reploid/src/mesh/partitions/partition-reservations.js +75 -0
  86. package/packages/reploid/src/mesh/partitions/partition-route-envelope-policy.json +16 -0
  87. package/packages/reploid/src/mesh/partitions/partition-route-envelope.js +74 -0
  88. package/packages/reploid/src/mesh/partitions/partition-route-execution.js +409 -0
  89. package/packages/reploid/src/mesh/partitions/partition-route-network.js +179 -0
  90. package/packages/reploid/src/mesh/partitions/partition-route-ranking.js +268 -0
  91. package/packages/reploid/src/mesh/partitions/partition-runner.js +319 -0
  92. package/packages/reploid/src/mesh/partitions/partition-stage-assignment.js +109 -0
  93. package/packages/reploid/src/mesh/partitions/partition-stage-commit.js +103 -0
  94. package/packages/reploid/src/mesh/partitions/partition-step-receiver.js +291 -0
  95. package/packages/reploid/src/mesh/partitions/partition-summary.js +122 -0
  96. package/packages/reploid/src/mesh/partitions/preparation-owner.js +40 -0
  97. package/packages/reploid/src/mesh/partitions/resident-error-codes.json +10 -0
  98. package/packages/reploid/src/mesh/partitions/resident-partition.js +333 -0
  99. package/packages/reploid/src/mesh/partitions/resident-route.js +46 -0
  100. package/packages/reploid/src/mesh/partitions/signed-resident-factory.js +59 -0
  101. package/packages/reploid/src/mesh/peer-generation.js +896 -0
  102. package/packages/reploid/src/mesh/peer-identity.js +87 -0
  103. package/packages/reploid/src/mesh/placement-beliefs.js +107 -0
  104. package/packages/reploid/src/mesh/preparation-progress.js +46 -0
  105. package/packages/reploid/src/mesh/provider-hardware.js +11 -0
  106. package/packages/reploid/src/mesh/remote-generation-requests.js +53 -0
  107. package/packages/reploid/src/mesh/swarm-coordination.js +140 -0
  108. package/packages/reploid/src/mesh/web-access-network.js +112 -0
  109. package/packages/reploid/src/mesh/web-access-policy.json +17 -0
  110. package/packages/reploid/src/retrieval/citations.js +156 -0
  111. package/packages/reploid/src/retrieval/claim-support.js +113 -0
  112. package/packages/reploid/src/retrieval/costs.js +101 -0
  113. package/packages/reploid/src/retrieval/fixed-provider.js +34 -0
  114. package/packages/reploid/src/retrieval/index.js +20 -0
  115. package/packages/reploid/src/retrieval/lexical-support.js +27 -0
  116. package/packages/reploid/src/retrieval/model-reviewer.js +67 -0
  117. package/packages/reploid/src/retrieval/page-fetch.json +10 -0
  118. package/packages/reploid/src/retrieval/page-text.js +182 -0
  119. package/packages/reploid/src/retrieval/passage.js +37 -0
  120. package/packages/reploid/src/retrieval/policy.json +14 -0
  121. package/packages/reploid/src/retrieval/retrieval.js +23 -0
  122. package/packages/reploid/src/retrieval/review-queue.js +76 -0
  123. package/packages/reploid/src/retrieval/sources.js +263 -0
  124. package/packages/reploid/src/retrieval/support-review.js +155 -0
  125. package/packages/reploid/src/retrieval/text.js +21 -0
  126. package/packages/reploid/src/rules/contribution.rules.json +8 -0
  127. package/packages/reploid/src/rules/routing.rules.json +24 -0
  128. package/packages/reploid/src/transport/assignment.js +571 -0
  129. package/packages/reploid/src/transport/bounded-channel-writer.js +46 -0
  130. package/packages/reploid/src/transport/index.js +11 -0
  131. package/packages/reploid/src/transport/introduction-admission.js +24 -0
  132. package/packages/reploid/src/transport/introduction-bootstrap.js +112 -0
  133. package/packages/reploid/src/transport/introduction-policy.json +12 -0
  134. package/packages/reploid/src/transport/introduction-records.js +90 -0
  135. package/packages/reploid/src/transport/introductions.js +209 -0
  136. package/packages/reploid/src/transport/partition-data-channel.js +421 -0
  137. package/packages/reploid/src/transport/partition-errors.json +16 -0
  138. package/packages/reploid/src/transport/retry-policy.js +36 -0
  139. package/packages/reploid/src/transport/room.js +502 -0
  140. package/packages/reploid/src/transport/sdp-fingerprint.js +5 -0
  141. package/packages/reploid/src/transport/signaling.js +571 -0
  142. package/packages/reploid/src/transport/swarm.js +1247 -0
  143. package/packages/reploid/src/transport/tool-offer-channel.js +137 -0
  144. package/server/browser-roots.js +42 -0
  145. package/server/browser-web-worker.js +94 -0
  146. package/server/chat-completions.js +45 -0
  147. package/server/fleet/browser-bridge.js +145 -0
  148. package/server/fleet/contract.js +42 -0
  149. package/server/fleet/credit-evidence.js +103 -0
  150. package/server/fleet/credit-recovery.js +175 -0
  151. package/server/fleet/credits.js +178 -0
  152. package/server/fleet/execution-admission.js +32 -0
  153. package/server/fleet/native-host.js +817 -0
  154. package/server/fleet/placement.js +132 -0
  155. package/server/fleet/requester.js +346 -0
  156. package/server/fleet/service.js +311 -0
  157. package/server/fleet/terminal-policy.js +83 -0
  158. package/server/fleet/text-api.js +94 -0
  159. package/server/hashing.js +35 -0
  160. package/server/http-request-owner.js +49 -0
  161. package/server/messages.js +57 -0
  162. package/server/native-canonical-epochs.js +90 -0
  163. package/server/native-change-log.js +40 -0
  164. package/server/native-earning.js +203 -0
  165. package/server/native-generation-journal.js +46 -0
  166. package/server/native-model-config.js +57 -0
  167. package/server/native-model-files.js +382 -0
  168. package/server/native-model-origin.js +54 -0
  169. package/server/native-model-origins.json +12 -0
  170. package/server/native-node.js +83 -0
  171. package/server/native-owner/controls.js +162 -0
  172. package/server/native-owner/monitor.js +251 -0
  173. package/server/native-owner/policy.js +273 -0
  174. package/server/native-owner/rate.js +92 -0
  175. package/server/native-participant.js +866 -0
  176. package/server/native-readiness-log.js +30 -0
  177. package/server/native-release-storage.js +64 -0
  178. package/server/native-shader-cache.js +369 -0
  179. package/server/native-supply-budget.js +66 -0
  180. package/server/native-whole-earning.js +67 -0
  181. package/server/native-whole-model-fill.js +182 -0
  182. package/server/native-whole-model.js +130 -0
  183. package/server/public-web-worker.js +66 -0
  184. package/server/responses.js +92 -0
  185. package/server/search/errors.js +47 -0
  186. package/server/search/page-fetch.js +185 -0
  187. package/server/text-api.js +83 -0
  188. package/server/text-recovery.js +45 -0
  189. package/server/text-request-options.js +23 -0
  190. package/server/text-requester.js +231 -0
  191. package/server/token-auth.js +9 -0
  192. package/server/whole-model-requester.js +99 -0
  193. package/shared/config/chat-models.json +4685 -0
  194. package/shared/config/doppler-execution-contracts.js +32 -0
  195. package/shared/config/doppler-execution-contracts.json +43 -0
  196. package/shared/config/doppler-generation-contract.js +223 -0
  197. package/shared/config/doppler-local-models.js +79 -0
  198. package/shared/config/doppler-package.json +7 -0
  199. package/shared/config/model-manifests/a0dc69e917133a82780823d17fc771c0f6b882d7c86c571deeaef45be2ff108b.json +6434 -0
  200. package/shared/config/model-manifests/e985e3cdad60d0cb57d84b436161e66ab5b3f6589a168de6f00b4610e5f1fb59.json +16534 -0
  201. package/shared/config/model-manifests/fa6eb7bbc3ba63571f8cede780b877d9272bde948697af93dd3d33837cb46137.json +7175 -0
  202. package/shared/config/model-pieces/qwen-0-8b-pieces.json +1506 -0
  203. package/shared/config/model-pieces/qwen-2b-pieces.json +4800 -0
  204. package/shared/config/model-pieces/qwen35b-q4_0-pieces.json +28880 -0
  205. package/shared/config/reploid-library.json +49 -0
  206. package/shared/config/swarm-bootstrap.json +21 -0
  207. package/shared/infrastructure/doppler-runtime-service.js +261 -0
  208. package/shared/pool/executable-pack.js +87 -0
  209. package/shared/pool/pack-operation-adapters.js +124 -0
  210. package/shared/pool/pack-operation-policy.js +75 -0
  211. package/shared/pool/pool-config.json +2280 -0
  212. package/shared/vendor/reploid/adapters/doppler-session.js +372 -0
  213. package/shared/vendor/reploid/artifacts/binary.js +25 -0
  214. package/shared/vendor/reploid/artifacts/canonical-json.js +23 -0
  215. package/shared/vendor/reploid/artifacts/delivery-attestation.js +64 -0
  216. package/shared/vendor/reploid/artifacts/identity.js +91 -0
  217. package/shared/vendor/reploid/artifacts/manifest-identity.js +17 -0
  218. package/shared/vendor/reploid/artifacts/participant-proofs.js +159 -0
  219. package/shared/vendor/reploid/artifacts/signatures.js +94 -0
  220. package/shared/vendor/reploid/config/defaults.json +110 -0
  221. package/shared/vendor/reploid/config/index.js +209 -0
  222. package/shared/vendor/reploid/config/request-overrides.json +9 -0
  223. package/shared/vendor/reploid/hashing.js +30 -0
  224. package/shared/vendor/reploid/mesh/generation-context-cache.js +97 -0
  225. package/shared/vendor/reploid/mesh/partitions/partition-attempt-evidence.js +282 -0
  226. package/shared/vendor/reploid/mesh/partitions/partition-contract.js +192 -0
  227. package/shared/vendor/reploid/mesh/partitions/partition-receiver-policy.json +7 -0
  228. package/shared/vendor/reploid/mesh/partitions/partition-route-ranking.js +268 -0
  229. package/shared/vendor/reploid/mesh/preparation-progress.js +46 -0
  230. package/shared/vendor/reploid/mesh/provider-hardware.js +11 -0
  231. package/shared/vendor/reploid/rules/routing.rules.json +24 -0
  232. package/shared/vendor/reploid/transport/partition-errors.json +16 -0
  233. 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
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "doppler-gpu",
3
+ "version": "0.7.1",
4
+ "spec": "0.7.1",
5
+ "resolved": "https://registry.npmjs.org/doppler-gpu/-/doppler-gpu-0.7.1.tgz",
6
+ "integrity": "sha512-nsg0sPBzUaG1tSI3+GoPtV6PIf4iV9gFtHSI77H1WPMPyNWbJ3OyQde5URb8NlRP0asR7B39y/y1nAk2fqi28Q=="
7
+ }