@owlmeans/llm 0.1.14 → 0.1.16-rc.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 (99) hide show
  1. package/agent-meta/instructions/llm-prompt-caching.instructions.md +100 -0
  2. package/agent-meta/instructions/llm.instructions.md +13 -3
  3. package/agent-meta/manifest.json +16 -2
  4. package/agent-meta/skills/llm/SKILL.md +54 -4
  5. package/agent-meta/skills/llm-prompt-caching/SKILL.md +135 -0
  6. package/build/consts.d.ts +36 -3
  7. package/build/consts.d.ts.map +1 -1
  8. package/build/consts.js +37 -4
  9. package/build/consts.js.map +1 -1
  10. package/build/execution/service.d.ts.map +1 -1
  11. package/build/execution/service.js +8 -3
  12. package/build/execution/service.js.map +1 -1
  13. package/build/execution/types.d.ts +20 -1
  14. package/build/execution/types.d.ts.map +1 -1
  15. package/build/execution/utils.d.ts +12 -1
  16. package/build/execution/utils.d.ts.map +1 -1
  17. package/build/execution/utils.js +22 -0
  18. package/build/execution/utils.js.map +1 -1
  19. package/build/helpers/cache.d.ts +17 -0
  20. package/build/helpers/cache.d.ts.map +1 -0
  21. package/build/helpers/cache.js +22 -0
  22. package/build/helpers/cache.js.map +1 -0
  23. package/build/helpers/index.d.ts +1 -0
  24. package/build/helpers/index.d.ts.map +1 -1
  25. package/build/helpers/index.js +1 -0
  26. package/build/helpers/index.js.map +1 -1
  27. package/build/helpers/spectate.d.ts.map +1 -1
  28. package/build/helpers/spectate.js +7 -0
  29. package/build/helpers/spectate.js.map +1 -1
  30. package/build/index.d.ts +1 -0
  31. package/build/index.d.ts.map +1 -1
  32. package/build/index.js +1 -0
  33. package/build/index.js.map +1 -1
  34. package/build/model.d.ts +1 -1
  35. package/build/model.d.ts.map +1 -1
  36. package/build/model.js +90 -16
  37. package/build/model.js.map +1 -1
  38. package/build/plugins/anthropic.d.ts.map +1 -1
  39. package/build/plugins/anthropic.js +136 -21
  40. package/build/plugins/anthropic.js.map +1 -1
  41. package/build/plugins/openai.d.ts +9 -0
  42. package/build/plugins/openai.d.ts.map +1 -1
  43. package/build/plugins/openai.js +23 -1
  44. package/build/plugins/openai.js.map +1 -1
  45. package/build/plugins/types.d.ts +38 -5
  46. package/build/plugins/types.d.ts.map +1 -1
  47. package/build/prompt/index.d.ts +5 -0
  48. package/build/prompt/index.d.ts.map +1 -0
  49. package/build/prompt/index.js +4 -0
  50. package/build/prompt/index.js.map +1 -0
  51. package/build/prompt/plugins.d.ts +24 -0
  52. package/build/prompt/plugins.d.ts.map +1 -0
  53. package/build/prompt/plugins.js +64 -0
  54. package/build/prompt/plugins.js.map +1 -0
  55. package/build/prompt/render.d.ts +28 -0
  56. package/build/prompt/render.d.ts.map +1 -0
  57. package/build/prompt/render.js +39 -0
  58. package/build/prompt/render.js.map +1 -0
  59. package/build/prompt/service.d.ts +16 -0
  60. package/build/prompt/service.d.ts.map +1 -0
  61. package/build/prompt/service.js +145 -0
  62. package/build/prompt/service.js.map +1 -0
  63. package/build/prompt/types.d.ts +101 -0
  64. package/build/prompt/types.d.ts.map +1 -0
  65. package/build/prompt/types.js +2 -0
  66. package/build/prompt/types.js.map +1 -0
  67. package/build/service.d.ts.map +1 -1
  68. package/build/service.js +3 -0
  69. package/build/service.js.map +1 -1
  70. package/build/types.d.ts +53 -3
  71. package/build/types.d.ts.map +1 -1
  72. package/build/utils/prompt.d.ts +14 -0
  73. package/build/utils/prompt.d.ts.map +1 -1
  74. package/build/utils/prompt.js +32 -0
  75. package/build/utils/prompt.js.map +1 -1
  76. package/package.json +13 -6
  77. package/src/consts.ts +43 -5
  78. package/src/execution/service.ts +9 -3
  79. package/src/execution/types.ts +21 -2
  80. package/src/execution/utils.ts +28 -1
  81. package/src/helpers/cache.ts +33 -0
  82. package/src/helpers/index.ts +1 -0
  83. package/src/helpers/spectate.ts +10 -0
  84. package/src/index.ts +1 -0
  85. package/src/model.ts +119 -16
  86. package/src/plugins/anthropic.ts +159 -20
  87. package/src/plugins/openai.ts +26 -1
  88. package/src/plugins/types.ts +42 -5
  89. package/src/prompt/index.ts +5 -0
  90. package/src/prompt/plugins.ts +69 -0
  91. package/src/prompt/render.ts +48 -0
  92. package/src/prompt/service.ts +194 -0
  93. package/src/prompt/types.ts +114 -0
  94. package/src/service.ts +3 -0
  95. package/src/types.ts +54 -3
  96. package/src/utils/prompt.ts +33 -0
  97. package/tests/execution.spec.ts +42 -0
  98. package/tests/plugins.spec.ts +279 -14
  99. package/tests/prompt.spec.ts +194 -0
@@ -1,7 +1,7 @@
1
1
  import { createService } from '@owlmeans/context';
2
2
  import { ExecutionLevel } from '@owlmeans/llm-common';
3
3
  import { COLLABORATOR_KEYS, EXECUTION_SERVICE } from '../consts.js';
4
- import { composeExecState, composeTaskState, effortPatch, freeze, mergeOverride, mergePolicy, resolveRole, } from './utils.js';
4
+ import { composeExecState, composeTaskState, effortPatch, freeze, mergeOverride, mergePolicy, mergePrompt, resolveRole, } from './utils.js';
5
5
  /**
6
6
  * Build the execution service implementation WITHOUT registering it as a context
7
7
  * service, so a consumer can publish extra methods alongside it (observability
@@ -34,16 +34,19 @@ export const executionServiceApi = (options, self) => {
34
34
  level: ExecutionLevel.Project,
35
35
  purpose: { ...input.purpose },
36
36
  policy: { ...input.policy },
37
+ ...(input.prompt != null ? { prompt: { ...input.prompt } } : {}),
37
38
  }),
38
39
  forTask: (parent, input) => {
39
- const { effort, phase, data, ...extras } = input;
40
+ const { effort, phase, data, prompt, ...extras } = input;
40
41
  const policy = effort != null
41
42
  ? mergePolicy(parent.policy, { effort })
42
43
  : { ...parent.policy };
44
+ const merged = mergePrompt(parent.prompt, prompt);
43
45
  // Spreading the parent carries every collaborator and domain field forward; the
44
46
  // task's own state is composed afterwards, from the seeded resumable fields.
45
47
  const taskExec = {
46
48
  ...parent, ...extras, level: ExecutionLevel.Task, purpose: { ...parent.purpose }, policy,
49
+ ...(merged != null ? { prompt: merged } : {}),
47
50
  };
48
51
  taskExec.state = composeTaskState({
49
52
  ...taskExec,
@@ -58,9 +61,10 @@ export const executionServiceApi = (options, self) => {
58
61
  return freeze(taskExec);
59
62
  },
60
63
  forHelper: (parent, input) => {
61
- const { role, effort, dedication, ...extras } = input;
64
+ const { role, effort, dedication, prompt, ...extras } = input;
62
65
  const localPolicy = effort != null ? mergePolicy(parent.policy, { effort }) : parent.policy;
63
66
  const scoped = { ...parent, policy: localPolicy };
67
+ const merged = mergePrompt(parent.prompt, prompt);
64
68
  const helperExec = {
65
69
  ...parent,
66
70
  ...extras,
@@ -69,6 +73,7 @@ export const executionServiceApi = (options, self) => {
69
73
  ? { ...parent.purpose, dedication }
70
74
  : { ...parent.purpose },
71
75
  policy: localPolicy,
76
+ ...(merged != null ? { prompt: merged } : {}),
72
77
  role: resolveRole(localPolicy, role),
73
78
  model: self().model(scoped, role),
74
79
  temperatureFactory: self().temperatureFactory(scoped, role),
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/execution/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/execution/service.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
2
2
  import type { InitializedService } from '@owlmeans/context';
3
- import type { ExecutionEffort, ExecutionLevel, ExecutionState, LlmPurpose, ModelConfigOverride, ModelPolicy, ModelRole, TaskExecutionState } from '@owlmeans/llm-common';
3
+ import type { ExecutionEffort, ExecutionLevel, ExecutionState, FileProviderRef, LlmPurpose, ModelConfigOverride, ModelPolicy, ModelRole, PromptPolicy, TaskExecutionState } from '@owlmeans/llm-common';
4
4
  import type { LlmService, TemperatureFactory } from '../types.js';
5
+ import type { PromptService } from '../prompt/types.js';
5
6
  /**
6
7
  * Runtime execution = serializable {@link ExecutionState} + attached collaborators.
7
8
  * A frozen data object with NO behavior of its own — all logic (construct, refine,
@@ -14,6 +15,10 @@ import type { LlmService, TemperatureFactory } from '../types.js';
14
15
  export interface Execution extends ExecutionState {
15
16
  /** Resolver for the model factory — a function so the service can be swapped/cloned. */
16
17
  models: () => LlmService;
18
+ /** Resolver for the skill registry / prompt composer. Same late-binding rationale. */
19
+ prompts?: () => PromptService;
20
+ /** File access offered to prompt plugins. Declared a collaborator, never snapshotted. */
21
+ files?: FileProviderRef;
17
22
  outputErrors?: boolean;
18
23
  captureNull?: boolean;
19
24
  }
@@ -34,28 +39,42 @@ export interface HelperExecution extends Execution {
34
39
  }
35
40
  export interface ProjectExecutionInput {
36
41
  models: () => LlmService;
42
+ prompts?: () => PromptService;
43
+ files?: FileProviderRef;
37
44
  policy: ModelPolicy;
38
45
  purpose: LlmPurpose;
46
+ /** Baseline role and skills for the whole run. */
47
+ prompt?: PromptPolicy;
39
48
  outputErrors?: boolean;
40
49
  captureNull?: boolean;
41
50
  }
42
51
  export interface TaskExecutionInput {
43
52
  /** Raise (or lower) the effort tier for this task and everything derived from it. */
44
53
  effort?: ExecutionEffort;
54
+ /** Skills (and optionally a role) layered on top of the project's. Skills accumulate. */
55
+ prompt?: PromptPolicy;
45
56
  /** Optional seeds for the resumable task state. */
46
57
  phase?: string;
47
58
  data?: Record<string, unknown>;
48
59
  }
49
60
  export interface HelperExecutionInput {
61
+ /**
62
+ * Which MODEL to use. Distinct from `prompt.role`, which is the system-prompt text
63
+ * defining the persona — one selects hardware, the other writes the job description.
64
+ */
50
65
  role: ModelRole;
51
66
  /** Local effort bump without escalating the whole branch. */
52
67
  effort?: ExecutionEffort;
68
+ /** The helper's persona and its own skills, layered on top of the task's. */
69
+ prompt?: PromptPolicy;
53
70
  /** Refines `purpose.dedication`. */
54
71
  dedication?: string;
55
72
  }
56
73
  /** Collaborators re-attached to a state that was restored from storage. */
57
74
  export interface RestoreCollaborators {
58
75
  models?: () => LlmService;
76
+ prompts?: () => PromptService;
77
+ files?: FileProviderRef;
59
78
  }
60
79
  /**
61
80
  * Resilience extension seam. A plugin observes flow boundaries (via
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution/types.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,19 @@
1
- import type { ExecutionEffort, ExecutionState, ModelConfigOverride, ModelConfigPatch, ModelPolicy, ModelRole, TaskExecutionState } from '@owlmeans/llm-common';
1
+ import type { ExecutionEffort, ExecutionState, ModelConfigOverride, ModelConfigPatch, ModelPolicy, ModelRole, PromptPolicy, TaskExecutionState } from '@owlmeans/llm-common';
2
2
  import type { Execution, TaskExecution } from './types.js';
3
3
  export declare const freeze: <T extends object>(o: T) => Readonly<T>;
4
4
  /** Overlay a partial policy onto a base one. Override maps are merged, not replaced. */
5
5
  export declare const mergePolicy: (base: ModelPolicy, patch: Partial<ModelPolicy>) => ModelPolicy;
6
+ /**
7
+ * Overlay a prompt policy onto the one inherited from the parent level.
8
+ *
9
+ * Skills ACCUMULATE — a task adds to what the project declared, a helper adds to the
10
+ * task — because that is how a capability set is built up as work narrows. The role is
11
+ * replaced instead: the deepest level that names one owns the persona.
12
+ *
13
+ * The union preserves first-seen order and de-duplicates, so the composed prompt is
14
+ * byte-identical no matter how many levels contributed the same skill.
15
+ */
16
+ export declare const mergePrompt: (base: PromptPolicy | undefined, patch: PromptPolicy | undefined) => PromptPolicy | undefined;
6
17
  /** Apply the policy's role→role remap. */
7
18
  export declare const resolveRole: (policy: ModelPolicy, role: ModelRole) => ModelRole;
8
19
  export declare const effortPatch: (effort: ExecutionEffort) => ModelConfigPatch;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/execution/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EACtE,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAC3C,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1D,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,KAAG,QAAQ,CAAC,CAAC,CAAqB,CAAA;AAE/E,wFAAwF;AACxF,eAAO,MAAM,WAAW,GAAI,MAAM,WAAW,EAAE,OAAO,OAAO,CAAC,WAAW,CAAC,KAAG,WAQ3E,CAAA;AAEF,0CAA0C;AAC1C,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,EAAE,MAAM,SAAS,KAAG,SACF,CAAA;AAEjE,eAAO,MAAM,WAAW,GAAI,QAAQ,eAAe,KAAG,gBAAwC,CAAA;AAE9F,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,GAAI,UAAU,mBAAmB,KAAG,gBACH,CAAA;AAEhE;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,gBAAgB,EAC5B,gBAAgB,mBAAmB,GAAG,SAAS,EAC/C,cAAc,mBAAmB,GAAG,SAAS,KAC5C,gBAIF,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,SAAS,EAAE,kBAAkB,MAAM,EAAE,KAAG,cAQ9E,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,aAAa,EAAE,kBAAkB,MAAM,EAAE,KAAG,kBAWlF,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/execution/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EACtE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,EACzD,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1D,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,KAAG,QAAQ,CAAC,CAAC,CAAqB,CAAA;AAE/E,wFAAwF;AACxF,eAAO,MAAM,WAAW,GAAI,MAAM,WAAW,EAAE,OAAO,OAAO,CAAC,WAAW,CAAC,KAAG,WAQ3E,CAAA;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,YAAY,GAAG,SAAS,EAC9B,OAAO,YAAY,GAAG,SAAS,KAC9B,YAAY,GAAG,SAYjB,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,EAAE,MAAM,SAAS,KAAG,SACF,CAAA;AAEjE,eAAO,MAAM,WAAW,GAAI,QAAQ,eAAe,KAAG,gBAAwC,CAAA;AAE9F,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,GAAI,UAAU,mBAAmB,KAAG,gBACH,CAAA;AAEhE;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,gBAAgB,EAC5B,gBAAgB,mBAAmB,GAAG,SAAS,EAC/C,cAAc,mBAAmB,GAAG,SAAS,KAC5C,gBAIF,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,SAAS,EAAE,kBAAkB,MAAM,EAAE,KAAG,cAQ9E,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,aAAa,EAAE,kBAAkB,MAAM,EAAE,KAAG,kBAWlF,CAAA"}
@@ -11,6 +11,28 @@ export const mergePolicy = (base, patch) => ({
11
11
  ? { ...base.modelOverrides, ...patch.modelOverrides }
12
12
  : undefined,
13
13
  });
14
+ /**
15
+ * Overlay a prompt policy onto the one inherited from the parent level.
16
+ *
17
+ * Skills ACCUMULATE — a task adds to what the project declared, a helper adds to the
18
+ * task — because that is how a capability set is built up as work narrows. The role is
19
+ * replaced instead: the deepest level that names one owns the persona.
20
+ *
21
+ * The union preserves first-seen order and de-duplicates, so the composed prompt is
22
+ * byte-identical no matter how many levels contributed the same skill.
23
+ */
24
+ export const mergePrompt = (base, patch) => {
25
+ if (base == null && patch == null) {
26
+ return undefined;
27
+ }
28
+ const skills = [...new Set([...(base?.skills ?? []), ...(patch?.skills ?? [])])];
29
+ return {
30
+ ...base,
31
+ ...patch,
32
+ ...(base?.role != null || patch?.role != null ? { role: patch?.role ?? base?.role } : {}),
33
+ ...(skills.length > 0 ? { skills } : {}),
34
+ };
35
+ };
14
36
  /** Apply the policy's role→role remap. */
15
37
  export const resolveRole = (policy, role) => policy.roleOverrides?.[role] ?? role;
16
38
  export const effortPatch = (effort) => EFFORT_TABLE[effort];
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/execution/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/execution/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { UsageMetadata } from '@langchain/core/messages';
2
+ import type { CacheUsage } from '@owlmeans/llm-common';
3
+ /**
4
+ * Prompt-cache accounting for one completion.
5
+ *
6
+ * This is the only honest answer to "is caching actually working". A composed prefix can
7
+ * look perfectly stable and still miss on every call — a stray timestamp, a set iterated
8
+ * in a different order, a tool list rebuilt per request. If `read` stays at zero across
9
+ * repeated calls that share a prefix, something is invalidating it; diff the rendered
10
+ * blocks between two calls to find out what.
11
+ */
12
+ export declare const readCacheUsage: (message: {
13
+ usage_metadata?: UsageMetadata;
14
+ }) => CacheUsage;
15
+ /** `true` when the provider reported any cache activity at all. */
16
+ export declare const hasCacheActivity: (usage: CacheUsage) => boolean;
17
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/helpers/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQtD;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS;IAAE,cAAc,CAAC,EAAE,aAAa,CAAA;CAAE,KAAG,UAU5E,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,KAAG,OACf,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Prompt-cache accounting for one completion.
3
+ *
4
+ * This is the only honest answer to "is caching actually working". A composed prefix can
5
+ * look perfectly stable and still miss on every call — a stray timestamp, a set iterated
6
+ * in a different order, a tool list rebuilt per request. If `read` stays at zero across
7
+ * repeated calls that share a prefix, something is invalidating it; diff the rendered
8
+ * blocks between two calls to find out what.
9
+ */
10
+ export const readCacheUsage = (message) => {
11
+ const usage = message.usage_metadata;
12
+ const details = usage?.input_token_details;
13
+ return {
14
+ read: details?.cache_read ?? 0,
15
+ creation: details?.cache_creation ?? 0,
16
+ input: usage?.input_tokens ?? 0,
17
+ output: usage?.output_tokens ?? 0,
18
+ };
19
+ };
20
+ /** `true` when the provider reported any cache activity at all. */
21
+ export const hasCacheActivity = (usage) => usage.read > 0 || usage.creation > 0;
22
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/helpers/cache.ts"],"names":[],"mappings":"AASA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA2C,EAAc,EAAE;IACxF,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAA;IACpC,MAAM,OAAO,GAAG,KAAK,EAAE,mBAAoD,CAAA;IAE3E,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QAC9B,QAAQ,EAAE,OAAO,EAAE,cAAc,IAAI,CAAC;QACtC,KAAK,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,aAAa,IAAI,CAAC;KAClC,CAAA;AACH,CAAC,CAAA;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAW,EAAE,CAC7D,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAA"}
@@ -2,4 +2,5 @@ export * from './retry.js';
2
2
  export * from './json.js';
3
3
  export * from './messages.js';
4
4
  export * from './spectate.js';
5
+ export * from './cache.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
@@ -2,4 +2,5 @@ export * from './retry.js';
2
2
  export * from './json.js';
3
3
  export * from './messages.js';
4
4
  export * from './spectate.js';
5
+ export * from './cache.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"spectate.d.ts","sourceRoot":"","sources":["../../src/helpers/spectate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAA;AAIjE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA8B/D;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,YAAY,EAAE,UAAU,MAAM,MAE9D,OAAO,cAAc,EAAE,EACvB,SAAS,SAAS,EAClB,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,YAAY,MAAM,iEAsBnB,CAAA"}
1
+ {"version":3,"file":"spectate.d.ts","sourceRoot":"","sources":["../../src/helpers/spectate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAA;AAIjE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA+B/D;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,YAAY,EAAE,UAAU,MAAM,MAE9D,OAAO,cAAc,EAAE,EACvB,SAAS,SAAS,EAClB,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,YAAY,MAAM,iEA+BnB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { BaseMessage } from '@langchain/core/messages';
2
2
  import { SpectatorContentType } from '@owlmeans/llm-common';
3
+ import { hasCacheActivity, readCacheUsage } from './cache.js';
3
4
  /** Normalize one prompt message into the spectator's storage shape. */
4
5
  const describeInput = (msg, callType) => {
5
6
  const entry = {
@@ -49,6 +50,12 @@ export const spectate = (spectator, callType) => async (input, message, action,
49
50
  else {
50
51
  completion.content = message.content;
51
52
  }
53
+ // Silent unless the provider reported cache activity, so it costs nothing when
54
+ // caching is off — and is the one signal that tells a stable prefix from a broken one.
55
+ const cache = readCacheUsage(message);
56
+ if (hasCacheActivity(cache)) {
57
+ console.log(`Prompt cache [${action}]: read ${cache.read}, written ${cache.creation}, uncached ${cache.input}`);
58
+ }
52
59
  return spectator.log({ action, retries, startedAt, messages: [...messages, completion] });
53
60
  };
54
61
  //# sourceMappingURL=spectate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spectate.js","sourceRoot":"","sources":["../../src/helpers/spectate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spectate.js","sourceRoot":"","sources":["../../src/helpers/spectate.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export * from './model.js';
5
5
  export * from './service.js';
6
6
  export * from './helpers/index.js';
7
7
  export * from './execution/index.js';
8
+ export * from './prompt/index.js';
8
9
  export type * from './plugins/types.js';
9
10
  export { plugins, registerLlmPlugin, pluginOf, pluginFor, resolvePlugin } from './plugins/index.js';
10
11
  export { anthropicPlugin, ANTHROPIC_FAMILY } from './plugins/anthropic.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,mBAAmB,YAAY,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,mBAAmB,oBAAoB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnG,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,mBAAmB,YAAY,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,mBAAmB,oBAAoB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnG,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA"}
package/build/index.js CHANGED
@@ -4,6 +4,7 @@ export * from './model.js';
4
4
  export * from './service.js';
5
5
  export * from './helpers/index.js';
6
6
  export * from './execution/index.js';
7
+ export * from './prompt/index.js';
7
8
  export { plugins, registerLlmPlugin, pluginOf, pluginFor, resolvePlugin } from './plugins/index.js';
8
9
  export { anthropicPlugin, ANTHROPIC_FAMILY } from './plugins/anthropic.js';
9
10
  export { compatiblePlugin } from './plugins/compatible.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAE3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AAEpC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnG,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAE3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnG,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA"}
package/build/model.d.ts CHANGED
@@ -8,5 +8,5 @@ import type { LlmModel, LlmModelOptions, LlmSpectator } from './types.js';
8
8
  * provider-independent parts: streaming under an idle deadline, retry/fallback
9
9
  * escalation, schema validation and coercion, spectator logging, and null diagnostics.
10
10
  */
11
- export declare const makeLlmModel: ({ model, outputErrors, captureNull, retries, purpose, }: LlmModelOptions, spectator: LlmSpectator) => LlmModel;
11
+ export declare const makeLlmModel: ({ model, outputErrors, captureNull, retries, purpose, prompt, prompts, files, }: LlmModelOptions, spectator: LlmSpectator) => LlmModel;
12
12
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACuB,QAAQ,EAAE,eAAe,EAC1D,YAAY,EACb,MAAM,YAAY,CAAA;AAInB;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,yDAM1B,eAAe,EAAE,WAAW,YAAY,KAAG,QA6U7C,CAAA"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACuB,QAAQ,EAAE,eAAe,EAC1D,YAAY,EACb,MAAM,YAAY,CAAA;AA8CnB;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,iFAS1B,eAAe,EAAE,WAAW,YAAY,KAAG,QAuY7C,CAAA"}
package/build/model.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Ajv } from 'ajv';
2
- import { AIMessage } from '@langchain/core/messages';
2
+ import { AIMessage, BaseMessage } from '@langchain/core/messages';
3
3
  import { StructuredMode } from '@owlmeans/llm-common';
4
- import { DEFAULT_MAX_OUTPUT_CAP, DEFAULT_MODEL_RETRIES, FALLBACK_AFTER_ATTEMPTS, } from './consts.js';
4
+ import { DEFAULT_MAX_OUTPUT_CAP, DEFAULT_MODEL_RETRIES, FALLBACK_AFTER_ATTEMPTS, MAX_CACHE_BREAKPOINTS, } from './consts.js';
5
5
  import { LlmModelError } from './errors.js';
6
6
  import { pluginFor, pluginOf } from './plugins/index.js';
7
7
  import { coerceToSchema, parseJsonContent } from './helpers/json.js';
@@ -10,9 +10,46 @@ import { withRetry } from './helpers/retry.js';
10
10
  import { spectate } from './helpers/spectate.js';
11
11
  import { idleTimeout, readConfig } from './utils/config.js';
12
12
  import { reportNull } from './utils/null-report.js';
13
- import { applyNoThink, ensureJsonMention } from './utils/prompt.js';
13
+ import { applyNoThink, ensureJsonMention, stripCacheMarkers } from './utils/prompt.js';
14
14
  import { resolveSchemaValidator, toToolName, unwrapNamed } from './utils/schema.js';
15
15
  import { streamWithDeadline } from './utils/stream.js';
16
+ const isSystem = (msg) => msg instanceof BaseMessage ? msg.getType() === 'system' : `${msg.role}` === 'system';
17
+ const textOf = (content) => {
18
+ if (typeof content === 'string') {
19
+ return content.trim();
20
+ }
21
+ if (Array.isArray(content)) {
22
+ return content
23
+ .map(part => {
24
+ const text = part.text;
25
+ return typeof text === 'string' ? text : '';
26
+ })
27
+ .filter(text => text !== '')
28
+ .join('\n\n')
29
+ .trim();
30
+ }
31
+ return '';
32
+ };
33
+ /**
34
+ * Detach the caller's LEADING system messages and return their text.
35
+ *
36
+ * They are re-emitted as the `Context` block of the composed prompt, which is what keeps
37
+ * a caller that still builds its own `SystemMessage` working unchanged — the text simply
38
+ * travels a different route and lands in the same place. Only the leading run is taken:
39
+ * a system message deliberately placed mid-conversation is an operator instruction whose
40
+ * position carries meaning, and moving it would change what the model sees.
41
+ */
42
+ const takeLeadingSystem = (msgs) => {
43
+ const carried = [];
44
+ while (msgs.length > 0 && isSystem(msgs[0])) {
45
+ const [msg] = msgs.splice(0, 1);
46
+ const text = textOf(msg.content);
47
+ if (text !== '') {
48
+ carried.push(text);
49
+ }
50
+ }
51
+ return carried;
52
+ };
16
53
  /**
17
54
  * Build the four-method model API on top of a LangChain chat model.
18
55
  *
@@ -22,22 +59,59 @@ import { streamWithDeadline } from './utils/stream.js';
22
59
  * provider-independent parts: streaming under an idle deadline, retry/fallback
23
60
  * escalation, schema validation and coercion, spectator logging, and null diagnostics.
24
61
  */
25
- export const makeLlmModel = ({ model, outputErrors = false, captureNull = false, retries = DEFAULT_MODEL_RETRIES, purpose, }, spectator) => {
62
+ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false, retries = DEFAULT_MODEL_RETRIES, purpose, prompt, prompts, files, }, spectator) => {
26
63
  const ajv = new Ajv({ strict: false });
27
64
  // The original config and its plugin are static per model instance: a REFINED instance
28
65
  // is rebuilt from `lc_kwargs` and does not reliably carry the metadata back.
29
66
  const config = readConfig(model);
30
67
  const plugin = pluginOf(config.provider) ?? pluginFor(model);
31
68
  const timeout = idleTimeout(config);
32
- /** Normalize, then apply every in-place prompt adaptation, in dependency order. */
33
- const prepare = (input, useCache, cacheMax, json) => {
69
+ /**
70
+ * Normalize, compose the system prompt, then apply every in-place prompt adaptation, in
71
+ * dependency order.
72
+ *
73
+ * With no prompt service wired this is exactly what it always was — the caller's
74
+ * messages, a JSON nudge, `/no_think`, cache markers. With one, the caller's leading
75
+ * system text is folded into a composed prompt whose stable sections come first, which
76
+ * is the whole point: a prompt cache is a PREFIX match, so the bytes every call shares
77
+ * have to be physically ahead of the bytes that differ.
78
+ */
79
+ const prepare = async (input, action, useCache, cacheMax, json, callSkills) => {
34
80
  const msgs = normalizeInput(input);
81
+ // The caller may hand back messages this pipeline marked on a PREVIOUS call — the
82
+ // markers live on its own objects. The budget is per request, so clear them and
83
+ // re-place our own below; otherwise they accumulate until the provider 400s.
84
+ stripCacheMarkers(msgs);
85
+ let reserved = 0;
86
+ if (prompts != null) {
87
+ const carried = takeLeadingSystem(msgs);
88
+ const composed = await prompts().compose({
89
+ ...prompt,
90
+ context: [...(prompt?.context ?? []), ...carried],
91
+ callSkills: callSkills ?? prompt?.callSkills,
92
+ }, msgs, { model, provider: plugin, purpose, action, cacheMax, files });
93
+ if (composed.system != null) {
94
+ msgs.unshift(composed.system);
95
+ reserved = composed.breakpoints;
96
+ }
97
+ else {
98
+ // Defensive: nothing was contributed, so hand the caller's own text straight back.
99
+ for (let i = carried.length - 1; i >= 0; i--) {
100
+ msgs.unshift({ role: 'system', content: carried[i] });
101
+ }
102
+ }
103
+ }
35
104
  if (json)
36
105
  ensureJsonMention(msgs);
37
106
  applyNoThink(msgs, config.disableThinking);
38
107
  // Cache markers replace string content with content blocks, so they must go last.
39
- if (plugin?.patchCache?.(msgs, { model, useCache, cacheMax }) === true) {
40
- console.log(`Prompt caching enabled for ${plugin.type} (up to ${cacheMax} breakpoints)`);
108
+ const ttl = prompt?.cacheTtl;
109
+ const marked = plugin?.patchCache?.(msgs, {
110
+ model, useCache, cacheMax, reserved, ...(ttl != null ? { ttl } : {}),
111
+ });
112
+ if (reserved > 0 || marked === true) {
113
+ console.log(`Prompt caching for ${plugin?.type}: ${reserved} system breakpoint(s)`
114
+ + `${marked === true ? ', 1 message breakpoint' : ''}`);
41
115
  }
42
116
  return msgs;
43
117
  };
@@ -145,8 +219,8 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
145
219
  return { piece, result, mode };
146
220
  };
147
221
  const helper = {
148
- ask: async (input, { ref, filter, action, useCache = false, cacheMax = 4 }) => {
149
- const msgs = prepare(input, useCache, cacheMax, false);
222
+ ask: async (input, { ref, filter, action, useCache = false, cacheMax = MAX_CACHE_BREAKPOINTS, skills }) => {
223
+ const msgs = await prepare(input, action, useCache, cacheMax, false, skills);
150
224
  return withRetry({ retries, outputErrors }, async (i) => {
151
225
  const refined = refineModel(i);
152
226
  console.log('Use model to ask: ', refined.getName(), refined.lc_kwargs.model);
@@ -183,8 +257,8 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
183
257
  return output;
184
258
  });
185
259
  },
186
- talk: async (input, { ref, filter, action, useCache = false, cacheMax = 4 }) => {
187
- const msgs = prepare(input, useCache, cacheMax, false);
260
+ talk: async (input, { ref, filter, action, useCache = false, cacheMax = MAX_CACHE_BREAKPOINTS, skills }) => {
261
+ const msgs = await prepare(input, action, useCache, cacheMax, false, skills);
188
262
  return withRetry({ retries, outputErrors }, async (i) => {
189
263
  const refined = refineModel(i);
190
264
  console.log('Use model to talk: ', refined.getName(), refined.lc_kwargs.model);
@@ -210,8 +284,8 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
210
284
  return message;
211
285
  });
212
286
  },
213
- invoke: async (input, schema, { temperature, ref, filter, action, useCache = false, cacheMax = 4 }) => {
214
- const msgs = prepare(input, useCache, cacheMax, true);
287
+ invoke: async (input, schema, { temperature, ref, filter, action, useCache = false, cacheMax = MAX_CACHE_BREAKPOINTS, skills }) => {
288
+ const msgs = await prepare(input, action, useCache, cacheMax, true, skills);
215
289
  const { name, innerSchema, validate } = resolveSchemaValidator(ajv, schema);
216
290
  const toolName = toToolName(innerSchema.title ?? name);
217
291
  return withRetry({ retries, outputErrors }, async (i) => {
@@ -248,8 +322,8 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
248
322
  return result;
249
323
  });
250
324
  },
251
- request: async (input, schema, { ref, filter, action, useCache = false, cacheMax = 4 }) => {
252
- const msgs = prepare(input, useCache, cacheMax, true);
325
+ request: async (input, schema, { ref, filter, action, useCache = false, cacheMax = MAX_CACHE_BREAKPOINTS, skills }) => {
326
+ const msgs = await prepare(input, action, useCache, cacheMax, true, skills);
253
327
  const { name, innerSchema, validate } = resolveSchemaValidator(ajv, schema);
254
328
  const toolName = toToolName(innerSchema.title ?? name);
255
329
  return withRetry({ retries, outputErrors }, async (i) => {