@modular-prompt/driver 0.13.5 → 0.15.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/README.md +117 -4
- package/dist/driver-registry/ai-service.d.ts +23 -1
- package/dist/driver-registry/ai-service.d.ts.map +1 -1
- package/dist/driver-registry/ai-service.js +44 -10
- package/dist/driver-registry/ai-service.js.map +1 -1
- package/dist/driver-registry/config-based-factory.d.ts.map +1 -1
- package/dist/driver-registry/config-based-factory.js +16 -0
- package/dist/driver-registry/config-based-factory.js.map +1 -1
- package/dist/driver-registry/factory-helper.d.ts +2 -0
- package/dist/driver-registry/factory-helper.d.ts.map +1 -1
- package/dist/driver-registry/factory-helper.js +21 -3
- package/dist/driver-registry/factory-helper.js.map +1 -1
- package/dist/driver-registry/index.d.ts +2 -2
- package/dist/driver-registry/index.d.ts.map +1 -1
- package/dist/driver-registry/index.js +1 -1
- package/dist/driver-registry/index.js.map +1 -1
- package/dist/driver-registry/registry.d.ts.map +1 -1
- package/dist/driver-registry/registry.js +3 -1
- package/dist/driver-registry/registry.js.map +1 -1
- package/dist/driver-registry/types.d.ts +8 -2
- package/dist/driver-registry/types.d.ts.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/local-inference/adapters.d.ts +66 -0
- package/dist/local-inference/adapters.d.ts.map +1 -0
- package/dist/local-inference/adapters.js +2 -0
- package/dist/local-inference/adapters.js.map +1 -0
- package/dist/local-inference/driver.d.ts +51 -0
- package/dist/local-inference/driver.d.ts.map +1 -0
- package/dist/local-inference/driver.js +309 -0
- package/dist/local-inference/driver.js.map +1 -0
- package/dist/local-inference/index.d.ts +22 -0
- package/dist/local-inference/index.d.ts.map +1 -0
- package/dist/local-inference/index.js +17 -0
- package/dist/local-inference/index.js.map +1 -0
- package/dist/local-inference/process-client.d.ts +50 -0
- package/dist/local-inference/process-client.d.ts.map +1 -0
- package/dist/local-inference/process-client.js +92 -0
- package/dist/local-inference/process-client.js.map +1 -0
- package/dist/local-inference/process-communication.d.ts +41 -0
- package/dist/local-inference/process-communication.d.ts.map +1 -0
- package/dist/{mlx-ml/process → local-inference}/process-communication.js +40 -47
- package/dist/local-inference/process-communication.js.map +1 -0
- package/dist/local-inference/process-port.d.ts +12 -0
- package/dist/local-inference/process-port.d.ts.map +1 -0
- package/dist/local-inference/process-port.js +2 -0
- package/dist/local-inference/process-port.js.map +1 -0
- package/dist/local-inference/prompt-utils.d.ts +6 -0
- package/dist/local-inference/prompt-utils.d.ts.map +1 -0
- package/dist/local-inference/prompt-utils.js +17 -0
- package/dist/local-inference/prompt-utils.js.map +1 -0
- package/dist/local-inference/protocol.d.ts +192 -0
- package/dist/local-inference/protocol.d.ts.map +1 -0
- package/dist/local-inference/protocol.js +2 -0
- package/dist/local-inference/protocol.js.map +1 -0
- package/dist/local-inference/queue-types.d.ts +54 -0
- package/dist/local-inference/queue-types.d.ts.map +1 -0
- package/dist/local-inference/queue-types.js +2 -0
- package/dist/local-inference/queue-types.js.map +1 -0
- package/dist/local-inference/request-queue.d.ts +36 -0
- package/dist/local-inference/request-queue.d.ts.map +1 -0
- package/dist/{mlx-ml/process/queue.js → local-inference/request-queue.js} +89 -56
- package/dist/local-inference/request-queue.js.map +1 -0
- package/dist/local-inference/stream-utils.d.ts +19 -0
- package/dist/local-inference/stream-utils.d.ts.map +1 -0
- package/dist/local-inference/stream-utils.js +76 -0
- package/dist/local-inference/stream-utils.js.map +1 -0
- package/dist/mlx-ml/mlx-cache-support.d.ts +23 -0
- package/dist/mlx-ml/mlx-cache-support.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-cache-support.js +45 -0
- package/dist/mlx-ml/mlx-cache-support.js.map +1 -0
- package/dist/mlx-ml/mlx-driver.d.ts +20 -59
- package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
- package/dist/mlx-ml/mlx-driver.js +86 -415
- package/dist/mlx-ml/mlx-driver.js.map +1 -1
- package/dist/mlx-ml/mlx-local-inference-adapters.d.ts +3 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.js +19 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.js.map +1 -0
- package/dist/mlx-ml/mlx-options.d.ts +19 -0
- package/dist/mlx-ml/mlx-options.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-options.js +30 -0
- package/dist/mlx-ml/mlx-options.js.map +1 -0
- package/dist/mlx-ml/process/index.d.ts +11 -8
- package/dist/mlx-ml/process/index.d.ts.map +1 -1
- package/dist/mlx-ml/process/index.js +75 -52
- package/dist/mlx-ml/process/index.js.map +1 -1
- package/dist/mlx-ml/process/model-specific.d.ts +2 -1
- package/dist/mlx-ml/process/model-specific.d.ts.map +1 -1
- package/dist/mlx-ml/process/model-specific.js.map +1 -1
- package/dist/mlx-ml/process/prompt-builder.d.ts +11 -0
- package/dist/mlx-ml/process/prompt-builder.d.ts.map +1 -0
- package/dist/mlx-ml/process/prompt-builder.js +51 -0
- package/dist/mlx-ml/process/prompt-builder.js.map +1 -0
- package/dist/mlx-ml/process/types.d.ts +15 -183
- package/dist/mlx-ml/process/types.d.ts.map +1 -1
- package/dist/mlx-ml/tool-call-parser/tool-formatter.js +2 -2
- package/dist/mlx-ml/tool-call-parser/tool-formatter.js.map +1 -1
- package/dist/mlx-ml/types.d.ts +2 -45
- package/dist/mlx-ml/types.d.ts.map +1 -1
- package/dist/models-config/index.d.ts +8 -0
- package/dist/models-config/index.d.ts.map +1 -0
- package/dist/models-config/index.js +7 -0
- package/dist/models-config/index.js.map +1 -0
- package/dist/models-config/loader.d.ts +20 -0
- package/dist/models-config/loader.d.ts.map +1 -0
- package/dist/models-config/loader.js +85 -0
- package/dist/models-config/loader.js.map +1 -0
- package/dist/models-config/paths.d.ts +7 -0
- package/dist/models-config/paths.d.ts.map +1 -0
- package/dist/models-config/paths.js +11 -0
- package/dist/models-config/paths.js.map +1 -0
- package/dist/models-config/resolve.d.ts +57 -0
- package/dist/models-config/resolve.d.ts.map +1 -0
- package/dist/models-config/resolve.js +187 -0
- package/dist/models-config/resolve.js.map +1 -0
- package/dist/models-config/types.d.ts +60 -0
- package/dist/models-config/types.d.ts.map +1 -0
- package/dist/models-config/types.js +5 -0
- package/dist/models-config/types.js.map +1 -0
- package/dist/pytorch/process/index.d.ts +35 -0
- package/dist/pytorch/process/index.d.ts.map +1 -0
- package/dist/pytorch/process/index.js +69 -0
- package/dist/pytorch/process/index.js.map +1 -0
- package/dist/pytorch/pytorch-driver.d.ts +35 -0
- package/dist/pytorch/pytorch-driver.d.ts.map +1 -0
- package/dist/pytorch/pytorch-driver.js +48 -0
- package/dist/pytorch/pytorch-driver.js.map +1 -0
- package/dist/pytorch/pytorch-local-inference-adapters.d.ts +3 -0
- package/dist/pytorch/pytorch-local-inference-adapters.d.ts.map +1 -0
- package/dist/pytorch/pytorch-local-inference-adapters.js +19 -0
- package/dist/pytorch/pytorch-local-inference-adapters.js.map +1 -0
- package/dist/pytorch/pytorch-options.d.ts +8 -0
- package/dist/pytorch/pytorch-options.d.ts.map +1 -0
- package/dist/pytorch/pytorch-options.js +21 -0
- package/dist/pytorch/pytorch-options.js.map +1 -0
- package/dist/query-logger.js +1 -1
- package/dist/query-logger.js.map +1 -1
- package/dist/query-utils.d.ts +29 -0
- package/dist/query-utils.d.ts.map +1 -0
- package/dist/query-utils.js +61 -0
- package/dist/query-utils.js.map +1 -0
- package/dist/runtime/check.d.ts +10 -0
- package/dist/runtime/check.d.ts.map +1 -0
- package/dist/runtime/check.js +24 -0
- package/dist/runtime/check.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/manifest-core.d.mts +27 -0
- package/dist/runtime/manifest-core.d.mts.map +1 -0
- package/dist/runtime/manifest-core.mjs +68 -0
- package/dist/runtime/manifest-core.mjs.map +1 -0
- package/dist/runtime/manifest.d.ts +18 -0
- package/dist/runtime/manifest.d.ts.map +1 -0
- package/dist/runtime/manifest.js +9 -0
- package/dist/runtime/manifest.js.map +1 -0
- package/dist/runtime/paths-core.d.mts +17 -0
- package/dist/runtime/paths-core.d.mts.map +1 -0
- package/dist/runtime/paths-core.mjs +67 -0
- package/dist/runtime/paths-core.mjs.map +1 -0
- package/dist/runtime/paths.d.ts +12 -0
- package/dist/runtime/paths.d.ts.map +1 -0
- package/dist/runtime/paths.js +17 -0
- package/dist/runtime/paths.js.map +1 -0
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +8 -5
- package/scripts/download-model.js +25 -9
- package/scripts/runtime-cli.js +315 -0
- package/skills/driver-usage/SKILL.md +56 -1
- package/src/mlx-ml/python/__main__.py +43 -4
- package/src/mlx-ml/python/handlers/__init__.py +2 -1
- package/src/mlx-ml/python/handlers/cancel.py +53 -0
- package/src/mlx-ml/python/handlers/completion.py +3 -24
- package/src/mlx-ml/python/handlers/{chat.py → generate.py} +36 -106
- package/src/mlx-ml/python/handlers/render.py +40 -0
- package/src/mlx-ml/python/pyproject.toml +3 -2
- package/src/mlx-ml/python/server.py +35 -8
- package/src/mlx-ml/python/utils/template_render.py +80 -0
- package/src/mlx-ml/python/utils/token_utils.py +2 -2
- package/src/mlx-ml/python/uv.lock +549 -454
- package/src/pytorch/python/__main__.py +19 -0
- package/src/pytorch/python/backends/__init__.py +3 -0
- package/src/pytorch/python/backends/base.py +84 -0
- package/src/pytorch/python/backends/transformers_lm.py +127 -0
- package/src/pytorch/python/handlers/__init__.py +6 -0
- package/src/pytorch/python/handlers/cancel.py +53 -0
- package/src/pytorch/python/handlers/capabilities.py +6 -0
- package/src/pytorch/python/handlers/completion.py +15 -0
- package/src/pytorch/python/handlers/format_test.py +70 -0
- package/src/pytorch/python/handlers/generate.py +68 -0
- package/src/pytorch/python/handlers/render.py +40 -0
- package/src/pytorch/python/handlers/tokenize.py +63 -0
- package/src/pytorch/python/pyproject.toml +36 -0
- package/src/pytorch/python/server.py +140 -0
- package/src/pytorch/python/utils/__init__.py +0 -0
- package/src/pytorch/python/utils/chat_template_constraints.py +164 -0
- package/src/pytorch/python/utils/prompt_builder.py +54 -0
- package/src/pytorch/python/utils/template_render.py +80 -0
- package/src/pytorch/python/utils/token_utils.py +376 -0
- package/src/pytorch/python/uv.lock +694 -0
- package/dist/mlx-ml/process/process-communication.d.ts +0 -37
- package/dist/mlx-ml/process/process-communication.d.ts.map +0 -1
- package/dist/mlx-ml/process/process-communication.js.map +0 -1
- package/dist/mlx-ml/process/queue.d.ts +0 -33
- package/dist/mlx-ml/process/queue.d.ts.map +0 -1
- package/dist/mlx-ml/process/queue.js.map +0 -1
- package/scripts/setup-mlx.js +0 -53
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build {@link QueryResult.usage} from raw token counts.
|
|
3
|
+
* Omits the field when all counts are zero/undefined.
|
|
4
|
+
*/
|
|
5
|
+
export function buildQueryUsage(counts) {
|
|
6
|
+
const promptTokens = counts.promptTokens ?? 0;
|
|
7
|
+
const completionTokens = counts.completionTokens ?? 0;
|
|
8
|
+
const cacheReadTokens = counts.cacheReadTokens ?? 0;
|
|
9
|
+
const cacheWriteTokens = counts.cacheWriteTokens ?? 0;
|
|
10
|
+
if (promptTokens === 0 &&
|
|
11
|
+
completionTokens === 0 &&
|
|
12
|
+
cacheReadTokens === 0 &&
|
|
13
|
+
cacheWriteTokens === 0) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
promptTokens,
|
|
18
|
+
completionTokens,
|
|
19
|
+
totalTokens: promptTokens + completionTokens,
|
|
20
|
+
...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),
|
|
21
|
+
...(cacheWriteTokens > 0 ? { cacheWriteTokens } : {}),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Whether an {@link AbortSignal} is already aborted. */
|
|
25
|
+
export function isAborted(signal) {
|
|
26
|
+
return signal?.aborted ?? false;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Register an abort listener. Invokes `onAbort` immediately when already aborted.
|
|
30
|
+
* Returns a cleanup function.
|
|
31
|
+
*/
|
|
32
|
+
export function watchAbortSignal(signal, onAbort) {
|
|
33
|
+
if (!signal) {
|
|
34
|
+
return () => { };
|
|
35
|
+
}
|
|
36
|
+
if (signal.aborted) {
|
|
37
|
+
onAbort();
|
|
38
|
+
return () => { };
|
|
39
|
+
}
|
|
40
|
+
const handler = () => onAbort();
|
|
41
|
+
signal.addEventListener('abort', handler);
|
|
42
|
+
return () => signal.removeEventListener('abort', handler);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* StreamResult for a request that was aborted before inference started.
|
|
46
|
+
* `result` resolves (does not reject) with `finishReason: 'error'`.
|
|
47
|
+
*/
|
|
48
|
+
export function createAbortedStreamResult(extras = {}) {
|
|
49
|
+
const emptyStream = {
|
|
50
|
+
async *[Symbol.asyncIterator]() { },
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
stream: emptyStream,
|
|
54
|
+
result: Promise.resolve({
|
|
55
|
+
content: '',
|
|
56
|
+
finishReason: 'error',
|
|
57
|
+
...extras,
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=query-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-utils.js","sourceRoot":"","sources":["../src/query-utils.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAEtD,IACE,YAAY,KAAK,CAAC;QAClB,gBAAgB,KAAK,CAAC;QACtB,eAAe,KAAK,CAAC;QACrB,gBAAgB,KAAK,CAAC,EACtB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,WAAW,EAAE,YAAY,GAAG,gBAAgB;QAC5C,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA+B,EAC/B,OAAmB;IAEnB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAA+B,EAAE;IAEjC,MAAM,WAAW,GAA0B;QACzC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAI,CAAC;KACnC,CAAC;IACF,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;YACtB,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,OAAO;YACrB,GAAG,MAAM;SACV,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RuntimeProfile } from './paths.js';
|
|
2
|
+
import { isRuntimeReady } from './paths.js';
|
|
3
|
+
export declare class RuntimeNotReadyError extends Error {
|
|
4
|
+
readonly profile: RuntimeProfile;
|
|
5
|
+
readonly setupCommand: string;
|
|
6
|
+
constructor(profile: RuntimeProfile);
|
|
7
|
+
}
|
|
8
|
+
export { isRuntimeReady };
|
|
9
|
+
export declare function assertRuntimeReady(profile: RuntimeProfile): void;
|
|
10
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/runtime/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAe,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,OAAO,EAAE,cAAc;CAepC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAIhE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getVenvPath, isRuntimeReady } from './paths.js';
|
|
2
|
+
export class RuntimeNotReadyError extends Error {
|
|
3
|
+
profile;
|
|
4
|
+
setupCommand;
|
|
5
|
+
constructor(profile) {
|
|
6
|
+
const setupCommand = profile === 'mlx'
|
|
7
|
+
? 'pnpm run setup-mlx -w @modular-prompt/driver'
|
|
8
|
+
: profile === 'pytorch'
|
|
9
|
+
? 'pnpm run setup-pytorch -w @modular-prompt/driver'
|
|
10
|
+
: `node node_modules/@modular-prompt/driver/scripts/runtime-cli.js setup ${profile}`;
|
|
11
|
+
super(`${profile} runtime is not set up at ${getVenvPath(profile)}. ` +
|
|
12
|
+
`Run: ${setupCommand}`);
|
|
13
|
+
this.name = 'RuntimeNotReadyError';
|
|
14
|
+
this.profile = profile;
|
|
15
|
+
this.setupCommand = setupCommand;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export { isRuntimeReady };
|
|
19
|
+
export function assertRuntimeReady(profile) {
|
|
20
|
+
if (!isRuntimeReady(profile)) {
|
|
21
|
+
throw new RuntimeNotReadyError(profile);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/runtime/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,OAAO,CAAiB;IACxB,YAAY,CAAS;IAE9B,YAAY,OAAuB;QACjC,MAAM,YAAY,GAChB,OAAO,KAAK,KAAK;YACf,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,OAAO,KAAK,SAAS;gBACrB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,yEAAyE,OAAO,EAAE,CAAC;QAC3F,KAAK,CACH,GAAG,OAAO,6BAA6B,WAAW,CAAC,OAAO,CAAC,IAAI;YAC/D,QAAQ,YAAY,EAAE,CACvB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IACxD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MODULAR_PROMPT_DIR, RUNTIME_PROFILES, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, resolvePackageRoot, resolvePackageRootFromProcessModule, type RuntimeProfile, } from './paths.js';
|
|
2
|
+
export { readManifest, writeManifest, collectInstalledPackages, type RuntimeManifest, } from './manifest.js';
|
|
3
|
+
export { RuntimeNotReadyError, isRuntimeReady, assertRuntimeReady, } from './check.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mCAAmC,EACnC,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MODULAR_PROMPT_DIR, RUNTIME_PROFILES, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, resolvePackageRoot, resolvePackageRootFromProcessModule, } from './paths.js';
|
|
2
|
+
export { readManifest, writeManifest, collectInstalledPackages, } from './manifest.js';
|
|
3
|
+
export { RuntimeNotReadyError, isRuntimeReady, assertRuntimeReady, } from './check.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mCAAmC,GAEpC,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,wBAAwB,GAEzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {string} pythonDir
|
|
3
|
+
* @param {string} venvPath
|
|
4
|
+
* @returns {Record<string, string> | undefined}
|
|
5
|
+
*/
|
|
6
|
+
export function collectInstalledPackages(pythonDir: string, venvPath: string): Record<string, string> | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* @param {string} profile
|
|
9
|
+
* @returns {import('./manifest-core.mjs').RuntimeManifest | null}
|
|
10
|
+
*/
|
|
11
|
+
export function readManifest(profile: string): import("./manifest-core.mjs").RuntimeManifest | null;
|
|
12
|
+
/**
|
|
13
|
+
* @param {string} profile
|
|
14
|
+
* @param {import('./manifest-core.mjs').RuntimeManifest} manifest
|
|
15
|
+
*/
|
|
16
|
+
export function writeManifest(profile: string, manifest: import("./manifest-core.mjs").RuntimeManifest): void;
|
|
17
|
+
export type RuntimeManifest = {
|
|
18
|
+
profile: string;
|
|
19
|
+
driverVersion: string;
|
|
20
|
+
platform: string;
|
|
21
|
+
pythonVersion: string;
|
|
22
|
+
createdAt: string;
|
|
23
|
+
variant?: string | undefined;
|
|
24
|
+
torchVersion?: string | undefined;
|
|
25
|
+
packages?: Record<string, string> | undefined;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=manifest-core.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-core.d.mts","sourceRoot":"","sources":["../../src/runtime/manifest-core.mjs"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,oDAJW,MAAM,YACN,MAAM,GACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAmB9C;AAED;;;GAGG;AACH,sCAHW,MAAM,GACJ,OAAO,qBAAqB,EAAE,eAAe,GAAG,IAAI,CAShE;AAED;;;GAGG;AACH,uCAHW,MAAM,YACN,OAAO,qBAAqB,EAAE,eAAe,QAKvD;;aAIa,MAAM;mBACN,MAAM;cACN,MAAM;mBACN,MAAM;eACN,MAAM"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { getManifestPath, getRuntimeDir } from './paths-core.mjs';
|
|
5
|
+
|
|
6
|
+
function resolveVenvPython(venvPath) {
|
|
7
|
+
return process.platform === 'win32'
|
|
8
|
+
? join(venvPath, 'Scripts', 'python.exe')
|
|
9
|
+
: join(venvPath, 'bin', 'python');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {string} pythonDir
|
|
14
|
+
* @param {string} venvPath
|
|
15
|
+
* @returns {Record<string, string> | undefined}
|
|
16
|
+
*/
|
|
17
|
+
export function collectInstalledPackages(pythonDir, venvPath) {
|
|
18
|
+
try {
|
|
19
|
+
const venvPython = resolveVenvPython(venvPath);
|
|
20
|
+
const output = execSync(`uv pip list --format=json --python "${venvPython}"`, {
|
|
21
|
+
cwd: pythonDir,
|
|
22
|
+
encoding: 'utf8',
|
|
23
|
+
});
|
|
24
|
+
const list = JSON.parse(output);
|
|
25
|
+
/** @type {Record<string, string>} */
|
|
26
|
+
const packages = {};
|
|
27
|
+
for (const pkg of list) {
|
|
28
|
+
packages[pkg.name] = pkg.version;
|
|
29
|
+
}
|
|
30
|
+
return packages;
|
|
31
|
+
} catch {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @param {string} profile
|
|
38
|
+
* @returns {import('./manifest-core.mjs').RuntimeManifest | null}
|
|
39
|
+
*/
|
|
40
|
+
export function readManifest(profile) {
|
|
41
|
+
try {
|
|
42
|
+
const raw = readFileSync(getManifestPath(profile), 'utf8');
|
|
43
|
+
return JSON.parse(raw);
|
|
44
|
+
} catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @param {string} profile
|
|
51
|
+
* @param {import('./manifest-core.mjs').RuntimeManifest} manifest
|
|
52
|
+
*/
|
|
53
|
+
export function writeManifest(profile, manifest) {
|
|
54
|
+
mkdirSync(getRuntimeDir(profile), { recursive: true });
|
|
55
|
+
writeFileSync(getManifestPath(profile), JSON.stringify(manifest, null, 2) + '\n', 'utf8');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @typedef {Object} RuntimeManifest
|
|
60
|
+
* @property {string} profile
|
|
61
|
+
* @property {string} driverVersion
|
|
62
|
+
* @property {string} platform
|
|
63
|
+
* @property {string} pythonVersion
|
|
64
|
+
* @property {string} createdAt
|
|
65
|
+
* @property {string} [variant]
|
|
66
|
+
* @property {string} [torchVersion]
|
|
67
|
+
* @property {Record<string, string>} [packages]
|
|
68
|
+
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-core.mjs","sourceRoot":"","sources":["../../src/runtime/manifest-core.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,SAAS,iBAAiB,CAAC,QAAQ;IACjC,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO;QACjC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAS,EAAE,QAAQ;IAC1D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,uCAAuC,UAAU,GAAG,EAAE;YAC5E,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,qCAAqC;QACrC,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACnC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAO;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAO,EAAE,QAAQ;IAC7C,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RuntimeProfile } from './paths.js';
|
|
2
|
+
import { collectInstalledPackages } from './manifest-core.mjs';
|
|
3
|
+
export interface RuntimeManifest {
|
|
4
|
+
profile: RuntimeProfile;
|
|
5
|
+
driverVersion: string;
|
|
6
|
+
platform: string;
|
|
7
|
+
pythonVersion: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
/** PyTorch 等の runtime variant(例: cpu-minimal) */
|
|
10
|
+
variant?: string;
|
|
11
|
+
/** セットアップ時に記録した torch バージョン */
|
|
12
|
+
torchVersion?: string;
|
|
13
|
+
packages?: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
export declare function readManifest(profile: RuntimeProfile): RuntimeManifest | null;
|
|
16
|
+
export declare function writeManifest(profile: RuntimeProfile, manifest: RuntimeManifest): void;
|
|
17
|
+
export { collectInstalledPackages };
|
|
18
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/runtime/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,wBAAwB,EAGzB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,GAAG,IAAI,CAE5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAEtF;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { collectInstalledPackages, readManifest as readManifestCore, writeManifest as writeManifestCore, } from './manifest-core.mjs';
|
|
2
|
+
export function readManifest(profile) {
|
|
3
|
+
return readManifestCore(profile);
|
|
4
|
+
}
|
|
5
|
+
export function writeManifest(profile, manifest) {
|
|
6
|
+
writeManifestCore(profile, manifest);
|
|
7
|
+
}
|
|
8
|
+
export { collectInstalledPackages };
|
|
9
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/runtime/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,GACnC,MAAM,qBAAqB,CAAC;AAe7B,MAAM,UAAU,YAAY,CAAC,OAAuB;IAClD,OAAO,gBAAgB,CAAC,OAAO,CAA2B,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,QAAyB;IAC9E,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ~/.modular-prompt のルートパス
|
|
3
|
+
* MODULAR_PROMPT_HOME 環境変数で上書き可能(テスト用)
|
|
4
|
+
*/
|
|
5
|
+
export function getModularPromptHome(): string;
|
|
6
|
+
export function getRuntimesRoot(): string;
|
|
7
|
+
export function getRuntimeDir(profile: any): string;
|
|
8
|
+
export function getVenvPath(profile: any): string;
|
|
9
|
+
export function getManifestPath(profile: any): string;
|
|
10
|
+
export function getMlxPythonDir(packageRoot: any): string;
|
|
11
|
+
export function getPytorchPythonDir(packageRoot: any): string;
|
|
12
|
+
export function isRuntimeReady(profile: any): boolean;
|
|
13
|
+
/** ホーム配下の設定ディレクトリ名 */
|
|
14
|
+
export const MODULAR_PROMPT_DIR: ".modular-prompt";
|
|
15
|
+
/** サポートする runtime profile */
|
|
16
|
+
export const RUNTIME_PROFILES: string[];
|
|
17
|
+
//# sourceMappingURL=paths-core.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths-core.d.mts","sourceRoot":"","sources":["../../src/runtime/paths-core.mjs"],"names":[],"mappings":"AAUA;;;GAGG;AACH,+CAKC;AAED,0CAEC;AAED,oDAEC;AAED,kDAEC;AAED,sDAEC;AAiBD,0DAEC;AAED,8DAEC;AAED,sDAMC;AA9DD,sBAAsB;AACtB,iCAAkC,iBAAiB,CAAC;AAEpD,6BAA6B;AAC7B,wCAAmD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
/** ホーム配下の設定ディレクトリ名 */
|
|
6
|
+
export const MODULAR_PROMPT_DIR = '.modular-prompt';
|
|
7
|
+
|
|
8
|
+
/** サポートする runtime profile */
|
|
9
|
+
export const RUNTIME_PROFILES = ['mlx', 'pytorch'];
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* ~/.modular-prompt のルートパス
|
|
13
|
+
* MODULAR_PROMPT_HOME 環境変数で上書き可能(テスト用)
|
|
14
|
+
*/
|
|
15
|
+
export function getModularPromptHome() {
|
|
16
|
+
if (process.env.MODULAR_PROMPT_HOME) {
|
|
17
|
+
return process.env.MODULAR_PROMPT_HOME;
|
|
18
|
+
}
|
|
19
|
+
return path.join(os.homedir(), MODULAR_PROMPT_DIR);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getRuntimesRoot() {
|
|
23
|
+
return path.join(getModularPromptHome(), 'runtimes');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getRuntimeDir(profile) {
|
|
27
|
+
return path.join(getRuntimesRoot(), profile);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function getVenvPath(profile) {
|
|
31
|
+
return path.join(getRuntimeDir(profile), '.venv');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function getManifestPath(profile) {
|
|
35
|
+
return path.join(getRuntimeDir(profile), 'manifest.json');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @modular-prompt/driver パッケージルートから MLX Python プロジェクトを解決
|
|
40
|
+
*/
|
|
41
|
+
function resolvePythonProjectDir(packageRoot, segment) {
|
|
42
|
+
const distPython = path.join(packageRoot, 'dist', segment, 'python');
|
|
43
|
+
const srcPython = path.join(packageRoot, 'src', segment, 'python');
|
|
44
|
+
if (existsSync(distPython)) {
|
|
45
|
+
return distPython;
|
|
46
|
+
}
|
|
47
|
+
if (existsSync(srcPython)) {
|
|
48
|
+
return srcPython;
|
|
49
|
+
}
|
|
50
|
+
return srcPython;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function getMlxPythonDir(packageRoot) {
|
|
54
|
+
return resolvePythonProjectDir(packageRoot, 'mlx-ml');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getPytorchPythonDir(packageRoot) {
|
|
58
|
+
return resolvePythonProjectDir(packageRoot, 'pytorch');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function isRuntimeReady(profile) {
|
|
62
|
+
const venv = getVenvPath(profile);
|
|
63
|
+
return (
|
|
64
|
+
existsSync(path.join(venv, 'bin', 'python')) ||
|
|
65
|
+
existsSync(path.join(venv, 'Scripts', 'python.exe'))
|
|
66
|
+
);
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths-core.mjs","sourceRoot":"","sources":["../../src/runtime/paths-core.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,sBAAsB;AACtB,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAEpD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAO;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAO;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAO;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,WAAW,EAAE,OAAO;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAW;IACzC,OAAO,uBAAuB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAW;IAC7C,OAAO,uBAAuB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAO;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MODULAR_PROMPT_DIR, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady } from './paths-core.mjs';
|
|
2
|
+
export { MODULAR_PROMPT_DIR, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady, };
|
|
3
|
+
/** サポートする runtime profile */
|
|
4
|
+
export type RuntimeProfile = 'mlx' | 'pytorch';
|
|
5
|
+
export declare const RUNTIME_PROFILES: RuntimeProfile[];
|
|
6
|
+
/**
|
|
7
|
+
* @modular-prompt/driver パッケージルート(dist/ または packages/driver/)
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolvePackageRoot(fromDir: string): string;
|
|
10
|
+
/** dist/mlx-ml/process からパッケージルートを解決 */
|
|
11
|
+
export declare function resolvePackageRootFromProcessModule(importMetaUrl: string): string;
|
|
12
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAElB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,CAAC;AAEF,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAE/C,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAA8C,CAAC;AAE5F;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wCAAwC;AACxC,wBAAgB,mCAAmC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAGjF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { MODULAR_PROMPT_DIR, RUNTIME_PROFILES as RUNTIME_PROFILES_CORE, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady, } from './paths-core.mjs';
|
|
4
|
+
export { MODULAR_PROMPT_DIR, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady, };
|
|
5
|
+
export const RUNTIME_PROFILES = RUNTIME_PROFILES_CORE;
|
|
6
|
+
/**
|
|
7
|
+
* @modular-prompt/driver パッケージルート(dist/ または packages/driver/)
|
|
8
|
+
*/
|
|
9
|
+
export function resolvePackageRoot(fromDir) {
|
|
10
|
+
return path.resolve(fromDir, '..', '..', '..');
|
|
11
|
+
}
|
|
12
|
+
/** dist/mlx-ml/process からパッケージルートを解決 */
|
|
13
|
+
export function resolvePackageRootFromProcessModule(importMetaUrl) {
|
|
14
|
+
const moduleDir = path.dirname(fileURLToPath(importMetaUrl));
|
|
15
|
+
return resolvePackageRoot(moduleDir);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,IAAI,qBAAqB,EACzC,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,CAAC;AAKF,MAAM,CAAC,MAAM,gBAAgB,GAAqB,qBAAyC,CAAC;AAE5F;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,mCAAmC,CAAC,aAAqB;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7D,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Attachment, ToolCall, ToolResultKind } from '@modular-prompt/core';
|
|
2
2
|
import type { LogEntry } from '@modular-prompt/utils';
|
|
3
|
+
import type { CacheHandle } from './cache-controller.js';
|
|
3
4
|
export type { Attachment, CompiledPrompt, ToolCall, ToolResultKind } from '@modular-prompt/core';
|
|
4
5
|
/**
|
|
5
6
|
* Chat message role
|
|
@@ -88,6 +89,10 @@ export interface QueryResult {
|
|
|
88
89
|
promptTokens: number;
|
|
89
90
|
completionTokens: number;
|
|
90
91
|
totalTokens: number;
|
|
92
|
+
/** Tokens read from prompt/KV cache in this request */
|
|
93
|
+
cacheReadTokens?: number;
|
|
94
|
+
/** Tokens newly written to prompt/KV cache in this request */
|
|
95
|
+
cacheWriteTokens?: number;
|
|
91
96
|
};
|
|
92
97
|
/** Tool calls selected by the model */
|
|
93
98
|
toolCalls?: ToolCall[];
|
|
@@ -109,6 +114,10 @@ export type FinishReason = 'stop' | 'length' | 'error' | 'tool_calls';
|
|
|
109
114
|
* - 'chat': Conversational chat mode
|
|
110
115
|
*/
|
|
111
116
|
export type QueryMode = 'default' | 'thinking' | 'instruct' | 'chat';
|
|
117
|
+
/**
|
|
118
|
+
* API selection strategy (MLX / LocalInference drivers)
|
|
119
|
+
*/
|
|
120
|
+
export type ApiStrategy = 'auto' | 'force-chat' | 'force-completion';
|
|
112
121
|
/**
|
|
113
122
|
* Options for querying AI model
|
|
114
123
|
*/
|
|
@@ -126,7 +135,7 @@ export interface QueryOptions {
|
|
|
126
135
|
* - 'force-chat': Force chat API
|
|
127
136
|
* - 'force-completion': Force completion API
|
|
128
137
|
*/
|
|
129
|
-
apiStrategy?:
|
|
138
|
+
apiStrategy?: ApiStrategy;
|
|
130
139
|
/** Available tool definitions */
|
|
131
140
|
tools?: ToolDefinition[];
|
|
132
141
|
/** Tool usage strategy */
|
|
@@ -141,6 +150,16 @@ export interface QueryOptions {
|
|
|
141
150
|
* - undefined: driver default behavior
|
|
142
151
|
*/
|
|
143
152
|
cache?: boolean | 'read-only';
|
|
153
|
+
/**
|
|
154
|
+
* Externally prepared cache handle. When set, drivers that support KV caching
|
|
155
|
+
* skip internal prepare() and use this handle for generation.
|
|
156
|
+
*/
|
|
157
|
+
cacheHandle?: CacheHandle;
|
|
158
|
+
/**
|
|
159
|
+
* Abort signal for cancelling in-flight inference.
|
|
160
|
+
* Unsupported drivers ignore this option.
|
|
161
|
+
*/
|
|
162
|
+
signal?: AbortSignal;
|
|
144
163
|
}
|
|
145
164
|
/**
|
|
146
165
|
* Stream result with both stream and final result
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiDA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAE,OAAoC,CAAC,SAAS,CAAC,CAAC;AAClI,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@modular-prompt/driver",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"dist",
|
|
15
15
|
"scripts",
|
|
16
16
|
"skills",
|
|
17
|
-
"src/mlx-ml/python"
|
|
17
|
+
"src/mlx-ml/python",
|
|
18
|
+
"src/pytorch/python"
|
|
18
19
|
],
|
|
19
20
|
"dependencies": {
|
|
20
21
|
"@anthropic-ai/sdk": "0.61.0",
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
"directory": "packages/driver"
|
|
54
55
|
},
|
|
55
56
|
"scripts": {
|
|
56
|
-
"build": "tsc -b --force",
|
|
57
|
+
"build": "tsc -b --force && cp src/runtime/paths-core.mjs src/runtime/manifest-core.mjs dist/runtime/",
|
|
57
58
|
"test": "vitest",
|
|
58
59
|
"test:run": "vitest run",
|
|
59
60
|
"test:system": "vitest run --config vitest.config.system.ts",
|
|
@@ -63,7 +64,9 @@
|
|
|
63
64
|
"typecheck": "tsc --noEmit",
|
|
64
65
|
"copy-skills": "mkdir -p skills/driver-usage && cp ../../skills/driver-usage/SKILL.md skills/driver-usage/SKILL.md",
|
|
65
66
|
"clean": "rm -rf dist skills tsconfig.tsbuildinfo",
|
|
66
|
-
"
|
|
67
|
-
"setup-
|
|
67
|
+
"setup-mlx": "node scripts/runtime-cli.js setup mlx",
|
|
68
|
+
"setup-pytorch": "node scripts/runtime-cli.js setup pytorch",
|
|
69
|
+
"runtime:status": "node scripts/runtime-cli.js setup --status",
|
|
70
|
+
"runtime:cleanup": "node scripts/runtime-cli.js cleanup"
|
|
68
71
|
}
|
|
69
72
|
}
|
|
@@ -2,26 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
import { execSync } from 'child_process';
|
|
4
4
|
import { existsSync } from 'fs';
|
|
5
|
-
import {
|
|
6
|
-
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname, join } from 'path';
|
|
6
|
+
import { fileURLToPath, pathToFileURL } from 'url';
|
|
7
7
|
|
|
8
8
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
-
const
|
|
10
|
-
const distPythonDir = join(__dirname, '..', 'dist', 'mlx-ml', 'python');
|
|
9
|
+
const packageRoot = join(__dirname, '..');
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
const
|
|
11
|
+
function runtimeModuleUrl(name) {
|
|
12
|
+
const distPath = join(packageRoot, 'dist', 'runtime', name);
|
|
13
|
+
const srcPath = join(packageRoot, 'src', 'runtime', name);
|
|
14
|
+
return pathToFileURL(existsSync(distPath) ? distPath : srcPath).href;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const { getMlxPythonDir, getVenvPath } = await import(runtimeModuleUrl('paths-core.mjs'));
|
|
18
|
+
|
|
19
|
+
const targetDir = getMlxPythonDir(packageRoot);
|
|
20
|
+
const venvPath = getVenvPath('mlx');
|
|
14
21
|
|
|
15
22
|
if (!existsSync(targetDir)) {
|
|
16
23
|
console.error('❌ MLX Python directory not found.');
|
|
17
|
-
console.error(' Please run "
|
|
24
|
+
console.error(' Please run "pnpm run setup-mlx -w @modular-prompt/driver" first.');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!existsSync(join(venvPath, 'bin', 'python'))) {
|
|
29
|
+
console.error('❌ MLX runtime is not set up.');
|
|
30
|
+
console.error(' Please run "pnpm run setup-mlx -w @modular-prompt/driver" first.');
|
|
18
31
|
process.exit(1);
|
|
19
32
|
}
|
|
20
33
|
|
|
21
34
|
console.log('📦 Downloading test model...');
|
|
22
35
|
console.log(`📁 Working directory: ${targetDir}\n`);
|
|
23
36
|
|
|
24
|
-
// Get model name from command line arguments or use default
|
|
25
37
|
const modelName = process.argv[2] || 'mlx-community/gemma-3-270m-it-4bit';
|
|
26
38
|
|
|
27
39
|
try {
|
|
@@ -29,7 +41,11 @@ try {
|
|
|
29
41
|
`uv run mlx_lm.generate --model ${modelName} --prompt 'test' --max-tokens 1`,
|
|
30
42
|
{
|
|
31
43
|
cwd: targetDir,
|
|
32
|
-
stdio: 'inherit'
|
|
44
|
+
stdio: 'inherit',
|
|
45
|
+
env: {
|
|
46
|
+
...process.env,
|
|
47
|
+
UV_PROJECT_ENVIRONMENT: venvPath,
|
|
48
|
+
},
|
|
33
49
|
}
|
|
34
50
|
);
|
|
35
51
|
console.log('\n✅ Model downloaded successfully!');
|