@modular-prompt/extract 1.0.0 → 1.2.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 (81) hide show
  1. package/README.md +83 -24
  2. package/dist/cache-lifecycle.d.ts +5 -1
  3. package/dist/cache-lifecycle.d.ts.map +1 -1
  4. package/dist/cache-lifecycle.js +22 -0
  5. package/dist/cache-lifecycle.js.map +1 -1
  6. package/dist/cli/add-command.d.ts +2 -0
  7. package/dist/cli/add-command.d.ts.map +1 -1
  8. package/dist/cli/add-command.js +9 -3
  9. package/dist/cli/add-command.js.map +1 -1
  10. package/dist/cli/args.d.ts +3 -0
  11. package/dist/cli/args.d.ts.map +1 -1
  12. package/dist/cli/args.js +29 -0
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/cli/constants.d.ts +4 -0
  15. package/dist/cli/constants.d.ts.map +1 -1
  16. package/dist/cli/constants.js +19 -0
  17. package/dist/cli/constants.js.map +1 -1
  18. package/dist/cli/create-command.d.ts +2 -0
  19. package/dist/cli/create-command.d.ts.map +1 -1
  20. package/dist/cli/create-command.js +11 -4
  21. package/dist/cli/create-command.js.map +1 -1
  22. package/dist/cli/extract-command.d.ts +2 -0
  23. package/dist/cli/extract-command.d.ts.map +1 -1
  24. package/dist/cli/extract-command.js +22 -5
  25. package/dist/cli/extract-command.js.map +1 -1
  26. package/dist/cli/list-command.d.ts +1 -0
  27. package/dist/cli/list-command.d.ts.map +1 -1
  28. package/dist/cli/list-command.js +6 -7
  29. package/dist/cli/list-command.js.map +1 -1
  30. package/dist/cli/manifest.d.ts +11 -0
  31. package/dist/cli/manifest.d.ts.map +1 -1
  32. package/dist/cli/manifest.js +16 -0
  33. package/dist/cli/manifest.js.map +1 -1
  34. package/dist/cli/store.d.ts +21 -1
  35. package/dist/cli/store.d.ts.map +1 -1
  36. package/dist/cli/store.js +189 -4
  37. package/dist/cli/store.js.map +1 -1
  38. package/dist/cli.js +18 -10
  39. package/dist/cli.js.map +1 -1
  40. package/dist/create-extract-runtime.d.ts +22 -0
  41. package/dist/create-extract-runtime.d.ts.map +1 -0
  42. package/dist/create-extract-runtime.js +27 -0
  43. package/dist/create-extract-runtime.js.map +1 -0
  44. package/dist/create-extract-session.d.ts.map +1 -1
  45. package/dist/create-extract-session.js +8 -2
  46. package/dist/create-extract-session.js.map +1 -1
  47. package/dist/create-mlx-extract-runtime.d.ts +18 -7
  48. package/dist/create-mlx-extract-runtime.d.ts.map +1 -1
  49. package/dist/create-mlx-extract-runtime.js +11 -1
  50. package/dist/create-mlx-extract-runtime.js.map +1 -1
  51. package/dist/create-pytorch-extract-runtime.d.ts +13 -0
  52. package/dist/create-pytorch-extract-runtime.d.ts.map +1 -0
  53. package/dist/create-pytorch-extract-runtime.js +52 -0
  54. package/dist/create-pytorch-extract-runtime.js.map +1 -0
  55. package/dist/default-models.d.ts +3 -8
  56. package/dist/default-models.d.ts.map +1 -1
  57. package/dist/default-models.js +4 -16
  58. package/dist/default-models.js.map +1 -1
  59. package/dist/extract-runtime-types.d.ts +16 -0
  60. package/dist/extract-runtime-types.d.ts.map +1 -0
  61. package/dist/extract-runtime-types.js +2 -0
  62. package/dist/extract-runtime-types.js.map +1 -0
  63. package/dist/extract-store.d.ts +48 -2
  64. package/dist/extract-store.d.ts.map +1 -1
  65. package/dist/extract-store.js +108 -10
  66. package/dist/extract-store.js.map +1 -1
  67. package/dist/index.d.ts +5 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +2 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/model-resolution.d.ts +15 -5
  72. package/dist/model-resolution.d.ts.map +1 -1
  73. package/dist/model-resolution.js +87 -27
  74. package/dist/model-resolution.js.map +1 -1
  75. package/dist/types.d.ts +12 -0
  76. package/dist/types.d.ts.map +1 -1
  77. package/docs/API.md +320 -0
  78. package/docs/CACHE_DESIGN.md +557 -0
  79. package/docs/LOCAL_MODEL_SETUP.md +765 -0
  80. package/docs/PROMPT_MODULE_SPEC.md +482 -0
  81. package/package.json +6 -4
@@ -1,10 +1,11 @@
1
1
  import { resolve } from 'node:path';
2
2
  import { createExtractSession } from '../create-extract-session.js';
3
- import { createMlxExtractRuntime } from '../create-mlx-extract-runtime.js';
4
- import { DEFAULT_MAX_TOKENS } from './constants.js';
5
- import { readManifest } from './manifest.js';
3
+ import { createExtractRuntime } from '../create-extract-runtime.js';
4
+ import { assertExtractRuntimeMatchesManifest, ensureStoreKvCache, } from '../extract-store.js';
5
+ import { DEFAULT_MAX_TOKENS, resolveAutoRebuildCache } from './constants.js';
6
+ import { getManifestProvider, readManifest } from './manifest.js';
6
7
  import { renderExtractPrompt } from './render-prompt.js';
7
- import { resolveStoreDir } from './store.js';
8
+ import { formatKvCacheRebuildWarning, resolveStoreDir } from './store.js';
8
9
  export async function runExtractCommand(options) {
9
10
  const containerDir = resolve(options.cacheDir);
10
11
  const storeDir = resolveStoreDir(containerDir, options.storename);
@@ -22,16 +23,32 @@ export async function runExtractCommand(options) {
22
23
  if (options.dryRun) {
23
24
  return renderExtractPrompt({ materials: manifest.materials }, request);
24
25
  }
25
- const runtime = await createMlxExtractRuntime({
26
+ const autoRebuildCache = resolveAutoRebuildCache(options.autoRebuildCache);
27
+ const cacheResult = await ensureStoreKvCache({
28
+ storeDir,
29
+ storename: options.storename,
30
+ manifest,
31
+ autoRebuildCache,
32
+ });
33
+ if (cacheResult.rebuilt) {
34
+ console.error(formatKvCacheRebuildWarning(options.storename, manifest.materials.length));
35
+ }
36
+ const runtime = await createExtractRuntime({
26
37
  model: manifest.model,
38
+ provider: getManifestProvider(manifest),
27
39
  cacheDir: storeDir,
40
+ ...(manifest.backend ? { backend: manifest.backend } : {}),
41
+ ...(manifest.maxImageSize !== undefined ? { maxImageSize: manifest.maxImageSize } : {}),
28
42
  });
29
43
  try {
44
+ assertExtractRuntimeMatchesManifest(runtime, manifest);
30
45
  const session = createExtractSession({
31
46
  driver: runtime.driver,
32
47
  cacheController: runtime.cacheController,
33
48
  model: runtime.model,
49
+ maxImageSize: runtime.maxImageSize,
34
50
  corpus: { materials: manifest.materials },
51
+ autoRebuildCache,
35
52
  });
36
53
  const result = await session.extract(request);
37
54
  await session.close({ releaseCache: false });
@@ -1 +1 @@
1
- {"version":3,"file":"extract-command.js","sourceRoot":"","sources":["../../src/cli/extract-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAW7C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA8B;IACpE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAElE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,OAAO,CAAC,KAAK;QAClB,OAAO,EAAE;YACP,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;YAClD,WAAW,EAAE,CAAU;SACxB;KACF,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,mBAAmB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC;QAC5C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,oBAAoB,CAAC;YACnC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;SAC1C,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"extract-command.js","sourceRoot":"","sources":["../../src/cli/extract-command.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export interface ListCommandOptions {
5
5
  export interface StoreSummary {
6
6
  storename: string;
7
7
  model: string;
8
+ provider: 'mlx' | 'pytorch';
8
9
  materialTitles: string[];
9
10
  createdAt: string;
10
11
  updatedAt?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"list-command.d.ts","sourceRoot":"","sources":["../../src/cli/list-command.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAsBD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAuB1E;AAmBD,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOjF"}
1
+ {"version":3,"file":"list-command.d.ts","sourceRoot":"","sources":["../../src/cli/list-command.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAiBD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAyB1E;AAoBD,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOjF"}
@@ -1,7 +1,7 @@
1
1
  import { readdir } from 'node:fs/promises';
2
2
  import { resolve } from 'node:path';
3
- import { isKvCacheFile } from './store.js';
4
- import { manifestExists, readManifest } from './manifest.js';
3
+ import { inspectStoreKvCache } from './store.js';
4
+ import { getManifestProvider, manifestExists, readManifest } from './manifest.js';
5
5
  async function listStoreDirectories(containerDir) {
6
6
  try {
7
7
  const entries = await readdir(containerDir, { withFileTypes: true });
@@ -17,10 +17,6 @@ async function listStoreDirectories(containerDir) {
17
17
  throw error;
18
18
  }
19
19
  }
20
- async function hasKvCache(storeDir) {
21
- const entries = await readdir(storeDir, { withFileTypes: true });
22
- return entries.some((entry) => entry.isFile() && isKvCacheFile(entry.name));
23
- }
24
20
  export async function listStores(cacheDir) {
25
21
  const containerDir = resolve(cacheDir);
26
22
  const storeNames = await listStoreDirectories(containerDir);
@@ -31,13 +27,15 @@ export async function listStores(cacheDir) {
31
27
  continue;
32
28
  }
33
29
  const manifest = await readManifest(storeDir);
30
+ const cacheStatus = await inspectStoreKvCache(storeDir);
34
31
  summaries.push({
35
32
  storename: manifest.storename ?? storename,
36
33
  model: manifest.model,
34
+ provider: getManifestProvider(manifest),
37
35
  materialTitles: manifest.materials.map((material) => material.title),
38
36
  createdAt: manifest.createdAt,
39
37
  updatedAt: manifest.updatedAt,
40
- hasKvCache: await hasKvCache(storeDir),
38
+ hasKvCache: cacheStatus.hasKvCache,
41
39
  });
42
40
  }
43
41
  return summaries;
@@ -49,6 +47,7 @@ function formatSummary(summary) {
49
47
  const lines = [
50
48
  `Store: ${summary.storename}`,
51
49
  ` Model: ${summary.model}`,
50
+ ` Provider: ${summary.provider}`,
52
51
  ` Materials: ${summary.materialTitles.length}${materials}`,
53
52
  ` Created: ${summary.createdAt}`,
54
53
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"list-command.js","sourceRoot":"","sources":["../../src/cli/list-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-command.js","sourceRoot":"","sources":["../../src/cli/list-command.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,24 @@
1
+ import type { MlxBackendMode } from '@modular-prompt/driver';
1
2
  import type { MaterialInput } from '../extract-elements.js';
3
+ import type { ExtractProvider } from '../extract-runtime-types.js';
2
4
  export interface ExtractCacheManifest {
3
5
  version: 1;
4
6
  /** Store name for self-describing cache directories. */
5
7
  storename?: string;
6
8
  model: string;
9
+ /** Provider that owns the persisted cache format. Missing means legacy MLX. */
10
+ provider?: ExtractProvider;
11
+ /** MLX backend selected when the store was prepared. Missing means `auto` for legacy stores. */
12
+ backend?: MlxBackendMode;
13
+ /** VLM image resize limit used to prepare the persisted cache. */
14
+ maxImageSize?: number;
7
15
  materials: MaterialInput[];
8
16
  createdAt: string;
9
17
  updatedAt?: string;
10
18
  }
19
+ export declare function isExtractProvider(value: unknown): value is ExtractProvider;
20
+ /** Resolve the provider of a manifest, preserving compatibility with MLX stores created before v1 provider metadata. */
21
+ export declare function getManifestProvider(manifest: ExtractCacheManifest): ExtractProvider;
11
22
  export declare function manifestPath(cacheDir: string): string;
12
23
  export declare function manifestExists(cacheDir: string): Promise<boolean>;
13
24
  export declare function readManifest(cacheDir: string): Promise<ExtractCacheManifest>;
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/cli/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAYlF;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/cli/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,gGAAgG;IAChG,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,wHAAwH;AACxH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,eAAe,CAEnF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkBlF;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -1,6 +1,16 @@
1
1
  import { readFile, writeFile, access } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  import { MANIFEST_FILENAME } from './constants.js';
4
+ function isMlxBackend(value) {
5
+ return value === 'auto' || value === 'lm' || value === 'vlm' || value === 'optiq';
6
+ }
7
+ export function isExtractProvider(value) {
8
+ return value === 'mlx' || value === 'pytorch';
9
+ }
10
+ /** Resolve the provider of a manifest, preserving compatibility with MLX stores created before v1 provider metadata. */
11
+ export function getManifestProvider(manifest) {
12
+ return manifest.provider ?? 'mlx';
13
+ }
4
14
  export function manifestPath(cacheDir) {
5
15
  return join(cacheDir, MANIFEST_FILENAME);
6
16
  }
@@ -19,6 +29,12 @@ export async function readManifest(cacheDir) {
19
29
  if (parsed.version !== 1
20
30
  || !parsed.model
21
31
  || !Array.isArray(parsed.materials)
32
+ || (parsed.provider !== undefined && !isExtractProvider(parsed.provider))
33
+ || (parsed.backend !== undefined && !isMlxBackend(parsed.backend))
34
+ || (parsed.maxImageSize !== undefined
35
+ && (typeof parsed.maxImageSize !== 'number'
36
+ || !Number.isFinite(parsed.maxImageSize)
37
+ || parsed.maxImageSize <= 0))
22
38
  || (parsed.updatedAt !== undefined && typeof parsed.updatedAt !== 'string')) {
23
39
  throw new Error(`Invalid manifest: ${manifestPath(cacheDir)}`);
24
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/cli/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAYnD,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;IACvD,IACE,MAAM,CAAC,OAAO,KAAK,CAAC;WACjB,CAAC,MAAM,CAAC,KAAK;WACb,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;WAChC,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,EAC3E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,QAA8B;IAE9B,MAAM,SAAS,CACb,YAAY,CAAC,QAAQ,CAAC,EACtB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACxC,OAAO,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/cli/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAkBnD,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC;AAChD,CAAC;AAED,wHAAwH;AACxH,MAAM,UAAU,mBAAmB,CAAC,QAA8B;IAChE,OAAO,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;IACvD,IACE,MAAM,CAAC,OAAO,KAAK,CAAC;WACjB,CAAC,MAAM,CAAC,KAAK;WACb,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;WAChC,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;WACtE,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;WAC/D,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS;eAChC,CAAC,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;mBACtC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;mBACrC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;WAC9B,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,EAC3E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,QAA8B;IAE9B,MAAM,SAAS,CACb,YAAY,CAAC,QAAQ,CAAC,EACtB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACxC,OAAO,CACR,CAAC;AACJ,CAAC"}
@@ -4,6 +4,26 @@ export declare function validateStorename(storename: string): void;
4
4
  export declare function resolveStoreDir(containerDir: string, storename: string): string;
5
5
  /** Return whether a path already exists, regardless of its file type. */
6
6
  export declare function storeExists(storeDir: string): Promise<boolean>;
7
- /** Return whether the store contains at least one persisted KV cache archive. */
7
+ /** Return whether a store entry is a persisted KV cache file or namespace. */
8
8
  export declare function isKvCacheFile(filename: string): boolean;
9
+ export type StoreKvCacheIssue = 'missing' | 'cache-invalid' | 'index-invalid' | 'index-entry-missing';
10
+ export interface StoreKvCacheStatus {
11
+ /** Whether the store has a cache that can be used by a new extract session. */
12
+ hasKvCache: boolean;
13
+ /** Whether extract should run a full prefill before the user query. */
14
+ needsRebuild: boolean;
15
+ /** Whether the controller can use an indexed cache as an incremental base. */
16
+ hasIncrementalBase: boolean;
17
+ issue?: StoreKvCacheIssue;
18
+ }
19
+ /**
20
+ * Inspect the persisted cache without starting a model runtime.
21
+ *
22
+ * A cache-index entry is considered usable only when its referenced cache and
23
+ * token metadata exist. A store without an index can still be used for an
24
+ * exact cache hit (legacy layout), but it cannot provide an incremental base.
25
+ */
26
+ export declare function inspectStoreKvCache(storeDir: string): Promise<StoreKvCacheStatus>;
27
+ /** Warning emitted after an automatic full cache rebuild. */
28
+ export declare function formatKvCacheRebuildWarning(storename: string, materialCount: number): string;
9
29
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cli/store.ts"],"names":[],"mappings":"AAMA,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAUzD;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED,yEAAyE;AACzE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cli/store.ts"],"names":[],"mappings":"AAMA,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAUzD;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED,yEAAyE;AACzE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpE;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKvD;AAID,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,eAAe,GACf,eAAe,GACf,qBAAqB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,UAAU,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,8EAA8E;IAC9E,kBAAkB,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAwID;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgEvF;AAED,6DAA6D;AAC7D,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAG5F"}
package/dist/cli/store.js CHANGED
@@ -1,5 +1,5 @@
1
- import { stat } from 'node:fs/promises';
2
- import { join } from 'node:path';
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { isAbsolute, join, relative, resolve, sep } from 'node:path';
3
3
  const STORE_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;
4
4
  const RESERVED_STORE_NAMES = new Set(['create', 'add', 'extract', 'list', 'clean']);
5
5
  /** Validate a store name used as a single directory component. */
@@ -29,8 +29,193 @@ export async function storeExists(storeDir) {
29
29
  throw error;
30
30
  }
31
31
  }
32
- /** Return whether the store contains at least one persisted KV cache archive. */
32
+ /** Return whether a store entry is a persisted KV cache file or namespace. */
33
33
  export function isKvCacheFile(filename) {
34
- return filename.endsWith('.safetensors.zip');
34
+ return filename.endsWith('.safetensors.zip')
35
+ || filename.endsWith('.pytorch-cache')
36
+ || filename.endsWith('.vlm.safetensors')
37
+ || filename.endsWith('.vlm-vision.safetensors');
38
+ }
39
+ const CACHE_INDEX_FILENAME = 'cache-index.json';
40
+ function isRecord(value) {
41
+ return typeof value === 'object' && value !== null;
42
+ }
43
+ function isVlmCachePath(cachePath) {
44
+ return cachePath.split(sep).some((segment) => segment.endsWith('.vlm.safetensors')
45
+ || segment.endsWith('.vlm-vision.safetensors'));
46
+ }
47
+ async function hasHealthyCacheFile(cachePath) {
48
+ let cacheStat;
49
+ try {
50
+ cacheStat = await stat(cachePath);
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ if (cacheStat.isDirectory()) {
56
+ let entries;
57
+ try {
58
+ entries = await readdir(cachePath, { withFileTypes: true });
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ for (const entry of entries) {
64
+ const childPath = join(cachePath, entry.name);
65
+ if (entry.isDirectory() && await hasHealthyCacheFile(childPath)) {
66
+ return true;
67
+ }
68
+ if (entry.isFile() && entry.name.endsWith('.safetensors')) {
69
+ if (await hasHealthyCacheFile(childPath)) {
70
+ return true;
71
+ }
72
+ }
73
+ }
74
+ return false;
75
+ }
76
+ if (!cacheStat.isFile()) {
77
+ return false;
78
+ }
79
+ try {
80
+ const metadata = JSON.parse(await readFile(`${cachePath}.meta.json`, 'utf-8'));
81
+ return typeof metadata.token_count === 'number' && metadata.token_count > 0;
82
+ }
83
+ catch {
84
+ return false;
85
+ }
86
+ }
87
+ async function readCacheIndex(storeDir) {
88
+ try {
89
+ const parsed = JSON.parse(await readFile(join(storeDir, CACHE_INDEX_FILENAME), 'utf-8'));
90
+ if (!isRecord(parsed)
91
+ || parsed.version !== 1
92
+ || !Array.isArray(parsed.entries)
93
+ || !parsed.entries.every(isRecord)) {
94
+ return { present: true };
95
+ }
96
+ return {
97
+ present: true,
98
+ entries: parsed.entries,
99
+ };
100
+ }
101
+ catch (error) {
102
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
103
+ return { present: false };
104
+ }
105
+ return { present: true };
106
+ }
107
+ }
108
+ function resolveIndexedCachePath(storeDir, entry) {
109
+ if (typeof entry.key !== 'string' || entry.key.length === 0) {
110
+ return undefined;
111
+ }
112
+ let indexedPath;
113
+ if (typeof entry.path === 'string') {
114
+ if (entry.path.startsWith('memory://')) {
115
+ return undefined;
116
+ }
117
+ indexedPath = entry.path;
118
+ }
119
+ else if (entry.backend === 'pytorch') {
120
+ indexedPath = `${entry.key}.pytorch-cache`;
121
+ }
122
+ else if (entry.backend === undefined || entry.backend === 'lm') {
123
+ indexedPath = `${entry.key}.safetensors.zip`;
124
+ }
125
+ else {
126
+ return undefined;
127
+ }
128
+ const resolvedStoreDir = resolve(storeDir);
129
+ const resolvedPath = isAbsolute(indexedPath)
130
+ ? resolve(indexedPath)
131
+ : resolve(resolvedStoreDir, indexedPath);
132
+ const pathFromStore = relative(resolvedStoreDir, resolvedPath);
133
+ if (pathFromStore.length === 0
134
+ || pathFromStore === '..'
135
+ || pathFromStore.startsWith(`..${sep}`)) {
136
+ return undefined;
137
+ }
138
+ return resolvedPath;
139
+ }
140
+ async function listRawCachePaths(storeDir) {
141
+ let entries;
142
+ try {
143
+ entries = await readdir(storeDir, { withFileTypes: true });
144
+ }
145
+ catch {
146
+ return [];
147
+ }
148
+ return entries
149
+ .filter((entry) => (entry.isFile() || entry.isDirectory()) && isKvCacheFile(entry.name))
150
+ .map((entry) => join(storeDir, entry.name));
151
+ }
152
+ /**
153
+ * Inspect the persisted cache without starting a model runtime.
154
+ *
155
+ * A cache-index entry is considered usable only when its referenced cache and
156
+ * token metadata exist. A store without an index can still be used for an
157
+ * exact cache hit (legacy layout), but it cannot provide an incremental base.
158
+ */
159
+ export async function inspectStoreKvCache(storeDir) {
160
+ const rawCachePaths = await listRawCachePaths(storeDir);
161
+ const index = await readCacheIndex(storeDir);
162
+ if (!index.present) {
163
+ const hasHealthyCache = (await Promise.all(rawCachePaths.map((cachePath) => hasHealthyCacheFile(cachePath)))).some(Boolean);
164
+ return {
165
+ hasKvCache: hasHealthyCache,
166
+ needsRebuild: !hasHealthyCache,
167
+ hasIncrementalBase: false,
168
+ ...(hasHealthyCache
169
+ ? {}
170
+ : { issue: rawCachePaths.length > 0 ? 'cache-invalid' : 'missing' }),
171
+ };
172
+ }
173
+ if (!index.entries) {
174
+ return {
175
+ hasKvCache: false,
176
+ needsRebuild: true,
177
+ hasIncrementalBase: false,
178
+ issue: 'index-invalid',
179
+ };
180
+ }
181
+ const activeEntries = index.entries.filter((entry) => entry.hint !== 'release');
182
+ if (activeEntries.length === 0) {
183
+ return {
184
+ hasKvCache: false,
185
+ needsRebuild: true,
186
+ hasIncrementalBase: false,
187
+ issue: 'index-entry-missing',
188
+ };
189
+ }
190
+ const indexedCachePaths = activeEntries.map((entry) => resolveIndexedCachePath(storeDir, entry));
191
+ const entriesAreHealthy = await Promise.all(indexedCachePaths.map(async (cachePath) => {
192
+ return cachePath !== undefined && await hasHealthyCacheFile(cachePath);
193
+ }));
194
+ if (!entriesAreHealthy.every(Boolean)) {
195
+ return {
196
+ hasKvCache: false,
197
+ needsRebuild: true,
198
+ hasIncrementalBase: false,
199
+ issue: 'index-entry-missing',
200
+ };
201
+ }
202
+ // VLM exact snapshots are valid exact-cache hits, but the VLM controllers
203
+ // intentionally do not search them as incremental bases. `add` must
204
+ // therefore take the full-rebuild path even when the snapshot is healthy.
205
+ const hasVlmNamespace = activeEntries.some((entry, index) => {
206
+ const indexedPath = indexedCachePaths[index];
207
+ return entry.backend === 'vlm'
208
+ || (indexedPath !== undefined && isVlmCachePath(indexedPath));
209
+ });
210
+ return {
211
+ hasKvCache: true,
212
+ needsRebuild: false,
213
+ hasIncrementalBase: !hasVlmNamespace,
214
+ };
215
+ }
216
+ /** Warning emitted after an automatic full cache rebuild. */
217
+ export function formatKvCacheRebuildWarning(storename, materialCount) {
218
+ return `warning: KV cache missing for store '${storename}'; `
219
+ + `rebuilt cache from manifest (${materialCount} materials).`;
35
220
  }
36
221
  //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cli/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AACzD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpF,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,SAAS,CAAC,yCAAyC,CACjF,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,kBAAkB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,SAAiB;IACrE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cli/store.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -15,9 +15,9 @@ function printHelp() {
15
15
  console.log(`modular-prompt-extract v${packageJson.version}
16
16
 
17
17
  Usage:
18
- modular-prompt-extract create <storename> [-d <cache-dir>] [-m <model>] [--dry-run] <files...>
19
- modular-prompt-extract add <storename> [-d <cache-dir>] [--dry-run] <files...>
20
- modular-prompt-extract extract <storename> [-d <cache-dir>] [--max-tokens <n>] [--dry-run] <query...>
18
+ modular-prompt-extract create <storename> [-d <cache-dir>] [-m <model>] [--provider <mlx|pytorch>] [--dry-run] <files...>
19
+ modular-prompt-extract add <storename> [-d <cache-dir>] [--auto-rebuild-cache|--no-auto-rebuild-cache] [--dry-run] <files...>
20
+ modular-prompt-extract extract <storename> [-d <cache-dir>] [--max-tokens <n>] [--auto-rebuild-cache|--no-auto-rebuild-cache] [--dry-run] <query...>
21
21
  modular-prompt-extract list [-d <cache-dir>]
22
22
  modular-prompt-extract clean <storename> [-d <cache-dir>]
23
23
  modular-prompt-extract clean --all [-d <cache-dir>]
@@ -31,9 +31,12 @@ Commands:
31
31
 
32
32
  Options:
33
33
  -d, --cache-dir <path> Store container directory (default: ${resolveDefaultContainerDir()})
34
- -m, --model <model> MLX model alias from models.yaml or raw model id
34
+ -m, --model <model> Model alias from models.yaml or raw model id
35
+ --provider <provider> Extract provider for create (mlx or pytorch)
35
36
  --max-tokens <n> Max tokens for extract (default: ${DEFAULT_MAX_TOKENS})
36
- --dry-run Compile and print full prompt text (no MLX / no cache write)
37
+ --auto-rebuild-cache Enable KV cache regeneration (add/extract; default)
38
+ --no-auto-rebuild-cache Do not regenerate a missing KV cache (add/extract)
39
+ --dry-run Compile and print full prompt text (no driver / no cache write)
37
40
  --all Remove the entire cache container (clean only)
38
41
  -h, --help Show help
39
42
 
@@ -41,11 +44,13 @@ Store name:
41
44
  Must match [a-zA-Z0-9][a-zA-Z0-9_-]* and cannot be create, add, extract, list, or clean.
42
45
 
43
46
  Note:
44
- Without -m, models.default (or the first model entry) is selected from bundled config merged with
45
- ~/.modular-prompt/models.yaml (MODULAR_PROMPT_HOME can override its location).
46
- MLX_MODEL is also supported for backward compatibility as the bundled default; user yaml overrides it.
47
- If no model is configured, specify -m <model-id-or-alias> or define models.default.
48
- MLX backend is fixed to mlx-lm (backend: lm) for prompt cache support.
47
+ Without -m, models.default is selected from ~/.modular-prompt/models.yaml
48
+ (MODULAR_PROMPT_HOME can override its location). No model is bundled.
49
+ If no model is configured, specify -m <model-id-or-alias> or define models.default
50
+ in the user models.yaml.
51
+ MLX backend follows models.yaml (backend: auto by default; lm/vlm may be
52
+ selected explicitly). PyTorch extract is text-only and uses device/venvPath
53
+ from models.yaml driverOptions. Store manifests persist provider and model.
49
54
  `);
50
55
  }
51
56
  async function main() {
@@ -63,6 +68,7 @@ async function main() {
63
68
  cacheDir,
64
69
  storename: parsed.storename,
65
70
  model: parsed.model,
71
+ provider: parsed.provider,
66
72
  files: parsed.positional,
67
73
  dryRun: parsed.dryRun,
68
74
  });
@@ -77,6 +83,7 @@ async function main() {
77
83
  storename: parsed.storename,
78
84
  files: parsed.positional,
79
85
  dryRun: parsed.dryRun,
86
+ autoRebuildCache: parsed.autoRebuildCache,
80
87
  });
81
88
  if (typeof output === 'string') {
82
89
  process.stdout.write(`${output}\n`);
@@ -90,6 +97,7 @@ async function main() {
90
97
  query: parsed.positional.join(' '),
91
98
  maxTokens: parsed.maxTokens,
92
99
  dryRun: parsed.dryRun,
100
+ autoRebuildCache: parsed.autoRebuildCache,
93
101
  });
94
102
  process.stdout.write(`${text}\n`);
95
103
  return;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { MlxBackendMode } from '@modular-prompt/driver';
2
+ import { type ExtractProvider } from './model-resolution.js';
3
+ import type { ExtractRuntime } from './extract-runtime-types.js';
4
+ export interface ExtractRuntimeOptions {
5
+ /** Model alias or provider-specific model ID. */
6
+ model?: string;
7
+ /** Explicit provider for raw IDs or persisted store validation. */
8
+ provider?: ExtractProvider;
9
+ /** Fixed cache directory. When omitted, a managed temp directory is used. */
10
+ cacheDir?: string;
11
+ /** MLX backend; ignored for PyTorch. */
12
+ backend?: MlxBackendMode;
13
+ /** MLX VLM image resize limit; ignored for PyTorch. */
14
+ maxImageSize?: number;
15
+ }
16
+ /**
17
+ * Create the cache-capable runtime selected by the resolved model provider.
18
+ * The original model reference is passed to the provider runtime so alias
19
+ * driverOptions (device, venvPath, backend, and so on) are preserved.
20
+ */
21
+ export declare function createExtractRuntime(options: ExtractRuntimeOptions): Promise<ExtractRuntime>;
22
+ //# sourceMappingURL=create-extract-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-extract-runtime.d.ts","sourceRoot":"","sources":["../src/create-extract-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA0BzB"}
@@ -0,0 +1,27 @@
1
+ import { createMlxExtractRuntime } from './create-mlx-extract-runtime.js';
2
+ import { createPytorchExtractRuntime } from './create-pytorch-extract-runtime.js';
3
+ import { resolveMergedModels, resolveModelSpec, } from './model-resolution.js';
4
+ /**
5
+ * Create the cache-capable runtime selected by the resolved model provider.
6
+ * The original model reference is passed to the provider runtime so alias
7
+ * driverOptions (device, venvPath, backend, and so on) are preserved.
8
+ */
9
+ export async function createExtractRuntime(options) {
10
+ const resolved = resolveModelSpec(options.model, resolveMergedModels(), options.provider);
11
+ if (resolved.provider === 'mlx') {
12
+ return createMlxExtractRuntime({
13
+ model: options.model,
14
+ ...(options.backend !== undefined ? { backend: options.backend } : {}),
15
+ ...(options.cacheDir !== undefined ? { cacheDir: options.cacheDir } : {}),
16
+ ...(options.maxImageSize !== undefined ? { maxImageSize: options.maxImageSize } : {}),
17
+ });
18
+ }
19
+ if (resolved.provider === 'pytorch') {
20
+ return createPytorchExtractRuntime({
21
+ model: options.model,
22
+ ...(options.cacheDir !== undefined ? { cacheDir: options.cacheDir } : {}),
23
+ });
24
+ }
25
+ throw new Error(`Extract supports MLX and PyTorch models, but '${resolved.model}' uses provider '${resolved.provider}'`);
26
+ }
27
+ //# sourceMappingURL=create-extract-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-extract-runtime.js","sourceRoot":"","sources":["../src/create-extract-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAgB/B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA8B;IAE9B,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,OAAO,CAAC,KAAK,EACb,mBAAmB,EAAE,EACrB,OAAO,CAAC,QAAQ,CACjB,CAAC;IAEF,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO,uBAAuB,CAAC;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,2BAA2B,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CACb,iDAAiD,QAAQ,CAAC,KAAK,oBAAoB,QAAQ,CAAC,QAAQ,GAAG,CACxG,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-extract-session.d.ts","sourceRoot":"","sources":["../src/create-extract-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAiC,cAAc,EAA8B,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAyBnI,wBAAgB,oBAAoB,CAAC,QAAQ,GAAG,cAAc,EAC5D,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GACvC,cAAc,CA2EhB"}
1
+ {"version":3,"file":"create-extract-session.d.ts","sourceRoot":"","sources":["../src/create-extract-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAiC,cAAc,EAA8B,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAyBnI,wBAAgB,oBAAoB,CAAC,QAAQ,GAAG,cAAc,EAC5D,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GACvC,cAAc,CAiFhB"}