@owlmeans/llm 0.1.14
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 +193 -0
- package/agent-meta/instructions/llm.instructions.md +66 -0
- package/agent-meta/manifest.json +23 -0
- package/agent-meta/skills/llm/SKILL.md +121 -0
- package/build/consts.d.ts +67 -0
- package/build/consts.d.ts.map +1 -0
- package/build/consts.js +76 -0
- package/build/consts.js.map +1 -0
- package/build/errors.d.ts +33 -0
- package/build/errors.d.ts.map +1 -0
- package/build/errors.js +52 -0
- package/build/errors.js.map +1 -0
- package/build/execution/index.d.ts +4 -0
- package/build/execution/index.d.ts.map +1 -0
- package/build/execution/index.js +3 -0
- package/build/execution/index.js.map +1 -0
- package/build/execution/service.d.ts +21 -0
- package/build/execution/service.d.ts.map +1 -0
- package/build/execution/service.js +129 -0
- package/build/execution/service.js.map +1 -0
- package/build/execution/types.d.ts +119 -0
- package/build/execution/types.d.ts.map +1 -0
- package/build/execution/types.js +2 -0
- package/build/execution/types.js.map +1 -0
- package/build/execution/utils.d.ts +28 -0
- package/build/execution/utils.d.ts.map +1 -0
- package/build/execution/utils.js +60 -0
- package/build/execution/utils.js.map +1 -0
- package/build/helpers/index.d.ts +5 -0
- package/build/helpers/index.d.ts.map +1 -0
- package/build/helpers/index.js +5 -0
- package/build/helpers/index.js.map +1 -0
- package/build/helpers/json.d.ts +24 -0
- package/build/helpers/json.d.ts.map +1 -0
- package/build/helpers/json.js +119 -0
- package/build/helpers/json.js.map +1 -0
- package/build/helpers/messages.d.ts +10 -0
- package/build/helpers/messages.d.ts.map +1 -0
- package/build/helpers/messages.js +9 -0
- package/build/helpers/messages.js.map +1 -0
- package/build/helpers/retry.d.ts +18 -0
- package/build/helpers/retry.d.ts.map +1 -0
- package/build/helpers/retry.js +57 -0
- package/build/helpers/retry.js.map +1 -0
- package/build/helpers/spectate.d.ts +8 -0
- package/build/helpers/spectate.d.ts.map +1 -0
- package/build/helpers/spectate.js +54 -0
- package/build/helpers/spectate.js.map +1 -0
- package/build/index.d.ts +13 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +11 -0
- package/build/index.js.map +1 -0
- package/build/model.d.ts +12 -0
- package/build/model.d.ts.map +1 -0
- package/build/model.js +297 -0
- package/build/model.js.map +1 -0
- package/build/plugins/anthropic.d.ts +4 -0
- package/build/plugins/anthropic.d.ts.map +1 -0
- package/build/plugins/anthropic.js +86 -0
- package/build/plugins/anthropic.js.map +1 -0
- package/build/plugins/compatible.d.ts +18 -0
- package/build/plugins/compatible.d.ts.map +1 -0
- package/build/plugins/compatible.js +54 -0
- package/build/plugins/compatible.js.map +1 -0
- package/build/plugins/export.d.ts +6 -0
- package/build/plugins/export.d.ts.map +1 -0
- package/build/plugins/export.js +5 -0
- package/build/plugins/export.js.map +1 -0
- package/build/plugins/index.d.ts +18 -0
- package/build/plugins/index.d.ts.map +1 -0
- package/build/plugins/index.js +42 -0
- package/build/plugins/index.js.map +1 -0
- package/build/plugins/openai.d.ts +28 -0
- package/build/plugins/openai.d.ts.map +1 -0
- package/build/plugins/openai.js +89 -0
- package/build/plugins/openai.js.map +1 -0
- package/build/plugins/types.d.ts +80 -0
- package/build/plugins/types.d.ts.map +1 -0
- package/build/plugins/types.js +2 -0
- package/build/plugins/types.js.map +1 -0
- package/build/plugins/utils.d.ts +27 -0
- package/build/plugins/utils.d.ts.map +1 -0
- package/build/plugins/utils.js +33 -0
- package/build/plugins/utils.js.map +1 -0
- package/build/service.d.ts +24 -0
- package/build/service.d.ts.map +1 -0
- package/build/service.js +95 -0
- package/build/service.js.map +1 -0
- package/build/types.d.ts +190 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/build/utils/config.d.ts +13 -0
- package/build/utils/config.d.ts.map +1 -0
- package/build/utils/config.js +15 -0
- package/build/utils/config.js.map +1 -0
- package/build/utils/null-report.d.ts +36 -0
- package/build/utils/null-report.d.ts.map +1 -0
- package/build/utils/null-report.js +84 -0
- package/build/utils/null-report.js.map +1 -0
- package/build/utils/prompt.d.ts +15 -0
- package/build/utils/prompt.d.ts.map +1 -0
- package/build/utils/prompt.js +45 -0
- package/build/utils/prompt.js.map +1 -0
- package/build/utils/schema.d.ts +20 -0
- package/build/utils/schema.d.ts.map +1 -0
- package/build/utils/schema.js +28 -0
- package/build/utils/schema.js.map +1 -0
- package/build/utils/stream.d.ts +22 -0
- package/build/utils/stream.d.ts.map +1 -0
- package/build/utils/stream.js +54 -0
- package/build/utils/stream.js.map +1 -0
- package/package.json +65 -0
- package/src/consts.ts +89 -0
- package/src/errors.ts +65 -0
- package/src/execution/index.ts +4 -0
- package/src/execution/service.ts +185 -0
- package/src/execution/types.ts +139 -0
- package/src/execution/utils.ts +79 -0
- package/src/helpers/index.ts +5 -0
- package/src/helpers/json.ts +117 -0
- package/src/helpers/messages.ts +12 -0
- package/src/helpers/retry.ts +59 -0
- package/src/helpers/spectate.ts +67 -0
- package/src/index.ts +13 -0
- package/src/model.ts +379 -0
- package/src/plugins/anthropic.ts +97 -0
- package/src/plugins/compatible.ts +62 -0
- package/src/plugins/export.ts +6 -0
- package/src/plugins/index.ts +53 -0
- package/src/plugins/openai.ts +108 -0
- package/src/plugins/types.ts +92 -0
- package/src/plugins/utils.ts +38 -0
- package/src/service.ts +125 -0
- package/src/types.ts +214 -0
- package/src/utils/config.ts +19 -0
- package/src/utils/null-report.ts +126 -0
- package/src/utils/prompt.ts +46 -0
- package/src/utils/schema.ts +35 -0
- package/src/utils/stream.ts +58 -0
- package/tests/context.ts +110 -0
- package/tests/execution.spec.ts +200 -0
- package/tests/helpers.spec.ts +192 -0
- package/tests/internals.spec.ts +141 -0
- package/tests/model.spec.ts +116 -0
- package/tests/plugins.spec.ts +227 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AACA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BasicConfig, BasicContext } from '@owlmeans/context';
|
|
2
|
+
import type { ExecutionService, ExecutionServiceOptions, ExecutionShape, WithExecutionService } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build the execution service implementation WITHOUT registering it as a context
|
|
5
|
+
* service, so a consumer can publish extra methods alongside it (observability
|
|
6
|
+
* factories, domain-specific refinement). Spread it into your own `createService`:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* const api = executionServiceApi<MyShape>({ collaboratorKeys: ['files'] }, () => service)
|
|
10
|
+
* const service = createService<MyExecutionService>(alias, {
|
|
11
|
+
* ...api,
|
|
12
|
+
* // delegate to `api`, never to `service`, or you recurse
|
|
13
|
+
* forTask: (parent, input) => api.forTask(parent, { ...input, effort: effortOf(input.mode) }),
|
|
14
|
+
* spectator: (exec, kind) => makeSpectator(exec, kind),
|
|
15
|
+
* } as MyExecutionService)
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare const executionServiceApi: <S extends ExecutionShape = ExecutionShape>(options: ExecutionServiceOptions, self: () => ExecutionService<S>) => ExecutionService<S>;
|
|
19
|
+
export declare const makeExecutionService: <S extends ExecutionShape = ExecutionShape>(alias?: string, options?: ExecutionServiceOptions) => ExecutionService<S>;
|
|
20
|
+
export declare const appendExecutionService: <C extends BasicConfig, T extends BasicContext<C>, S extends ExecutionShape = ExecutionShape>(ctx: T, alias?: string, options?: ExecutionServiceOptions) => T & WithExecutionService<S>;
|
|
21
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/execution/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKlE,OAAO,KAAK,EACkB,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EACrD,oBAAoB,EACrD,MAAM,YAAY,CAAA;AAKnB;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,cAAc,GAAG,cAAc,EAC3E,SAAS,uBAAuB,EAChC,MAAM,MAAM,gBAAgB,CAAC,CAAC,CAAC,KAC9B,gBAAgB,CAAC,CAAC,CA6HpB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,cAAc,GAAG,cAAc,EAC5E,QAAO,MAA0B,EACjC,UAAS,uBAA4B,KACpC,gBAAgB,CAAC,CAAC,CAMpB,CAAA;AAED,eAAO,MAAM,sBAAsB,GACjC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,cAAc,GAAG,cAAc,EAE3F,KAAK,CAAC,EACN,QAAO,MAA0B,EACjC,UAAS,uBAA4B,KACpC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAQ5B,CAAA"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { createService } from '@owlmeans/context';
|
|
2
|
+
import { ExecutionLevel } from '@owlmeans/llm-common';
|
|
3
|
+
import { COLLABORATOR_KEYS, EXECUTION_SERVICE } from '../consts.js';
|
|
4
|
+
import { composeExecState, composeTaskState, effortPatch, freeze, mergeOverride, mergePolicy, resolveRole, } from './utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Build the execution service implementation WITHOUT registering it as a context
|
|
7
|
+
* service, so a consumer can publish extra methods alongside it (observability
|
|
8
|
+
* factories, domain-specific refinement). Spread it into your own `createService`:
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* const api = executionServiceApi<MyShape>({ collaboratorKeys: ['files'] }, () => service)
|
|
12
|
+
* const service = createService<MyExecutionService>(alias, {
|
|
13
|
+
* ...api,
|
|
14
|
+
* // delegate to `api`, never to `service`, or you recurse
|
|
15
|
+
* forTask: (parent, input) => api.forTask(parent, { ...input, effort: effortOf(input.mode) }),
|
|
16
|
+
* spectator: (exec, kind) => makeSpectator(exec, kind),
|
|
17
|
+
* } as MyExecutionService)
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export const executionServiceApi = (options, self) => {
|
|
21
|
+
const plugins = [];
|
|
22
|
+
const collaboratorKeys = [...COLLABORATOR_KEYS, ...(options.collaboratorKeys ?? [])];
|
|
23
|
+
/** Recompose the JSON-safe state of a task execution after any refinement. */
|
|
24
|
+
const recompose = (exec) => {
|
|
25
|
+
if (exec.level === ExecutionLevel.Task) {
|
|
26
|
+
const task = exec;
|
|
27
|
+
task.state = composeTaskState(task, collaboratorKeys);
|
|
28
|
+
}
|
|
29
|
+
return exec;
|
|
30
|
+
};
|
|
31
|
+
const api = {
|
|
32
|
+
root: input => freeze({
|
|
33
|
+
...input,
|
|
34
|
+
level: ExecutionLevel.Project,
|
|
35
|
+
purpose: { ...input.purpose },
|
|
36
|
+
policy: { ...input.policy },
|
|
37
|
+
}),
|
|
38
|
+
forTask: (parent, input) => {
|
|
39
|
+
const { effort, phase, data, ...extras } = input;
|
|
40
|
+
const policy = effort != null
|
|
41
|
+
? mergePolicy(parent.policy, { effort })
|
|
42
|
+
: { ...parent.policy };
|
|
43
|
+
// Spreading the parent carries every collaborator and domain field forward; the
|
|
44
|
+
// task's own state is composed afterwards, from the seeded resumable fields.
|
|
45
|
+
const taskExec = {
|
|
46
|
+
...parent, ...extras, level: ExecutionLevel.Task, purpose: { ...parent.purpose }, policy,
|
|
47
|
+
};
|
|
48
|
+
taskExec.state = composeTaskState({
|
|
49
|
+
...taskExec,
|
|
50
|
+
state: {
|
|
51
|
+
level: ExecutionLevel.Task,
|
|
52
|
+
purpose: taskExec.purpose,
|
|
53
|
+
policy: taskExec.policy,
|
|
54
|
+
phase,
|
|
55
|
+
data,
|
|
56
|
+
},
|
|
57
|
+
}, collaboratorKeys);
|
|
58
|
+
return freeze(taskExec);
|
|
59
|
+
},
|
|
60
|
+
forHelper: (parent, input) => {
|
|
61
|
+
const { role, effort, dedication, ...extras } = input;
|
|
62
|
+
const localPolicy = effort != null ? mergePolicy(parent.policy, { effort }) : parent.policy;
|
|
63
|
+
const scoped = { ...parent, policy: localPolicy };
|
|
64
|
+
const helperExec = {
|
|
65
|
+
...parent,
|
|
66
|
+
...extras,
|
|
67
|
+
level: ExecutionLevel.Helper,
|
|
68
|
+
purpose: dedication != null
|
|
69
|
+
? { ...parent.purpose, dedication }
|
|
70
|
+
: { ...parent.purpose },
|
|
71
|
+
policy: localPolicy,
|
|
72
|
+
role: resolveRole(localPolicy, role),
|
|
73
|
+
model: self().model(scoped, role),
|
|
74
|
+
temperatureFactory: self().temperatureFactory(scoped, role),
|
|
75
|
+
};
|
|
76
|
+
// A helper is not resumable — drop a parent task's composed state.
|
|
77
|
+
delete helperExec.state;
|
|
78
|
+
return freeze(helperExec);
|
|
79
|
+
},
|
|
80
|
+
derive: (exec, patch) => freeze(recompose({ ...exec, ...patch })),
|
|
81
|
+
withPurpose: (exec, patch) => freeze(recompose({ ...exec, purpose: { ...exec.purpose, ...patch } })),
|
|
82
|
+
escalate: (exec, patch) => freeze(recompose({ ...exec, policy: mergePolicy(exec.policy, patch) })),
|
|
83
|
+
model: (exec, role, override) => {
|
|
84
|
+
const effectiveRole = resolveRole(exec.policy, role ?? exec.role);
|
|
85
|
+
const policyOverride = exec.policy.modelOverrides?.[effectiveRole];
|
|
86
|
+
const merged = mergeOverride(effortPatch(exec.policy.effort), policyOverride, override);
|
|
87
|
+
// Strip undefined values so the factory does not see spurious keys.
|
|
88
|
+
const clean = Object.fromEntries(Object.entries(merged).filter(([, value]) => value !== undefined));
|
|
89
|
+
return exec.models().getModel(effectiveRole, clean);
|
|
90
|
+
},
|
|
91
|
+
temperatureFactory: (exec, role) => temperature => self().model(exec, role, {
|
|
92
|
+
...(temperature != null ? { temperature } : {}),
|
|
93
|
+
...(temperature != null && temperature > 0.2 ? { topP: 0.8 } : {}),
|
|
94
|
+
}),
|
|
95
|
+
use: plugin => {
|
|
96
|
+
plugins.push(plugin);
|
|
97
|
+
},
|
|
98
|
+
checkpoint: async (exec, key) => {
|
|
99
|
+
if (plugins.length === 0) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const state = self().snapshot(exec);
|
|
103
|
+
await Promise.all(plugins.map(plugin => plugin.onCheckpoint?.(state, exec, key)));
|
|
104
|
+
},
|
|
105
|
+
snapshot: exec => {
|
|
106
|
+
if (exec.level === ExecutionLevel.Task) {
|
|
107
|
+
return freeze({ ...exec.state });
|
|
108
|
+
}
|
|
109
|
+
return freeze(composeExecState(exec, collaboratorKeys));
|
|
110
|
+
},
|
|
111
|
+
restore: (state, collaborators = {}) => freeze({
|
|
112
|
+
...state,
|
|
113
|
+
...collaborators,
|
|
114
|
+
...(state.level === ExecutionLevel.Task ? { state } : {}),
|
|
115
|
+
}),
|
|
116
|
+
};
|
|
117
|
+
return api;
|
|
118
|
+
};
|
|
119
|
+
export const makeExecutionService = (alias = EXECUTION_SERVICE, options = {}) => {
|
|
120
|
+
const service = createService(alias, executionServiceApi(options, () => service));
|
|
121
|
+
return service;
|
|
122
|
+
};
|
|
123
|
+
export const appendExecutionService = (ctx, alias = EXECUTION_SERVICE, options = {}) => {
|
|
124
|
+
const context = ctx;
|
|
125
|
+
context.registerService(makeExecutionService(alias, options));
|
|
126
|
+
context.executions = () => context.service(alias);
|
|
127
|
+
return context;
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/execution/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
2
|
+
import type { InitializedService } from '@owlmeans/context';
|
|
3
|
+
import type { ExecutionEffort, ExecutionLevel, ExecutionState, LlmPurpose, ModelConfigOverride, ModelPolicy, ModelRole, TaskExecutionState } from '@owlmeans/llm-common';
|
|
4
|
+
import type { LlmService, TemperatureFactory } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Runtime execution = serializable {@link ExecutionState} + attached collaborators.
|
|
7
|
+
* A frozen data object with NO behavior of its own — all logic (construct, refine,
|
|
8
|
+
* resolve a model, snapshot, restore) lives on {@link ExecutionService}. Passing it to
|
|
9
|
+
* the next performer creates a NEW object; an execution is immutable between layers.
|
|
10
|
+
*
|
|
11
|
+
* Extend this interface (and {@link ExecutionState}) to carry domain context; every
|
|
12
|
+
* field that is not declared a collaborator travels into the snapshot automatically.
|
|
13
|
+
*/
|
|
14
|
+
export interface Execution extends ExecutionState {
|
|
15
|
+
/** Resolver for the model factory — a function so the service can be swapped/cloned. */
|
|
16
|
+
models: () => LlmService;
|
|
17
|
+
outputErrors?: boolean;
|
|
18
|
+
captureNull?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ProjectExecution extends Execution {
|
|
21
|
+
level: ExecutionLevel.Project;
|
|
22
|
+
}
|
|
23
|
+
export interface TaskExecution extends Execution {
|
|
24
|
+
level: ExecutionLevel.Task;
|
|
25
|
+
/** The composed, JSON-safe state — recomposed on every refinement. */
|
|
26
|
+
state: TaskExecutionState;
|
|
27
|
+
}
|
|
28
|
+
export interface HelperExecution extends Execution {
|
|
29
|
+
level: ExecutionLevel.Helper;
|
|
30
|
+
role: ModelRole;
|
|
31
|
+
/** A model already resolved against the policy (effort + overrides). */
|
|
32
|
+
model: BaseChatModel;
|
|
33
|
+
temperatureFactory: TemperatureFactory;
|
|
34
|
+
}
|
|
35
|
+
export interface ProjectExecutionInput {
|
|
36
|
+
models: () => LlmService;
|
|
37
|
+
policy: ModelPolicy;
|
|
38
|
+
purpose: LlmPurpose;
|
|
39
|
+
outputErrors?: boolean;
|
|
40
|
+
captureNull?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface TaskExecutionInput {
|
|
43
|
+
/** Raise (or lower) the effort tier for this task and everything derived from it. */
|
|
44
|
+
effort?: ExecutionEffort;
|
|
45
|
+
/** Optional seeds for the resumable task state. */
|
|
46
|
+
phase?: string;
|
|
47
|
+
data?: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
export interface HelperExecutionInput {
|
|
50
|
+
role: ModelRole;
|
|
51
|
+
/** Local effort bump without escalating the whole branch. */
|
|
52
|
+
effort?: ExecutionEffort;
|
|
53
|
+
/** Refines `purpose.dedication`. */
|
|
54
|
+
dedication?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Collaborators re-attached to a state that was restored from storage. */
|
|
57
|
+
export interface RestoreCollaborators {
|
|
58
|
+
models?: () => LlmService;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resilience extension seam. A plugin observes flow boundaries (via
|
|
62
|
+
* {@link ExecutionService.checkpoint}) and can persist/enqueue the JSON-safe
|
|
63
|
+
* {@link ExecutionState}, or supply one back on resume. This package ships NO concrete
|
|
64
|
+
* implementation — with no plugin registered, `checkpoint` is a no-op.
|
|
65
|
+
*/
|
|
66
|
+
export interface ExecutionPlugin {
|
|
67
|
+
/** Fired at a flow boundary with a JSON-safe snapshot; persist/enqueue as desired. */
|
|
68
|
+
onCheckpoint?: (state: ExecutionState, exec: Execution, key?: string) => Promise<void>;
|
|
69
|
+
/** Resume hook: return a previously persisted state for `key`, or `null`. */
|
|
70
|
+
onRestore?: (key: string) => Promise<ExecutionState | null>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The set of domain types an {@link ExecutionService} works with. A consumer declares
|
|
74
|
+
* its own shape (extending each member) and instantiates the service generic with it,
|
|
75
|
+
* which keeps the method signatures precise without redeclaring — and therefore without
|
|
76
|
+
* the contravariance problem that narrowing an inherited method signature would cause.
|
|
77
|
+
*/
|
|
78
|
+
export interface ExecutionShape {
|
|
79
|
+
exec: Execution;
|
|
80
|
+
project: ProjectExecution;
|
|
81
|
+
task: TaskExecution;
|
|
82
|
+
helper: HelperExecution;
|
|
83
|
+
projectInput: ProjectExecutionInput;
|
|
84
|
+
taskInput: TaskExecutionInput;
|
|
85
|
+
helperInput: HelperExecutionInput;
|
|
86
|
+
purpose: LlmPurpose;
|
|
87
|
+
collaborators: RestoreCollaborators;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Standard OwlMeans context service. Every construction/refinement method returns a new,
|
|
91
|
+
* `Object.freeze`d object — executions are immutable between performers.
|
|
92
|
+
*/
|
|
93
|
+
export interface ExecutionService<S extends ExecutionShape = ExecutionShape> extends InitializedService {
|
|
94
|
+
root: (input: S['projectInput']) => S['project'];
|
|
95
|
+
forTask: (parent: S['project'], input: S['taskInput']) => S['task'];
|
|
96
|
+
forHelper: (parent: S['exec'], input: S['helperInput']) => S['helper'];
|
|
97
|
+
derive: <E extends S['exec']>(exec: E, patch: Partial<E>) => E;
|
|
98
|
+
withPurpose: <E extends S['exec']>(exec: E, patch: Partial<S['purpose']>) => E;
|
|
99
|
+
escalate: <E extends S['exec']>(exec: E, patch: Partial<ModelPolicy>) => E;
|
|
100
|
+
model: (exec: S['exec'], role?: ModelRole, override?: ModelConfigOverride) => BaseChatModel;
|
|
101
|
+
temperatureFactory: (exec: S['exec'], role?: ModelRole) => TemperatureFactory;
|
|
102
|
+
/** Register a resilience plugin (checkpoint/resume). No-op seam until one is provided. */
|
|
103
|
+
use: (plugin: ExecutionPlugin) => void;
|
|
104
|
+
/** Snapshot `exec` and dispatch it to every registered plugin. No-op if none. */
|
|
105
|
+
checkpoint: (exec: S['exec'], key?: string) => Promise<void>;
|
|
106
|
+
snapshot: (exec: S['exec']) => ExecutionState;
|
|
107
|
+
restore: (state: ExecutionState, collaborators?: S['collaborators']) => S['exec'];
|
|
108
|
+
}
|
|
109
|
+
export interface ExecutionServiceOptions {
|
|
110
|
+
/**
|
|
111
|
+
* Execution fields that are collaborators, not state — excluded from every snapshot.
|
|
112
|
+
* Merged with the package's own {@link COLLABORATOR_KEYS}.
|
|
113
|
+
*/
|
|
114
|
+
collaboratorKeys?: string[];
|
|
115
|
+
}
|
|
116
|
+
export interface WithExecutionService<S extends ExecutionShape = ExecutionShape> {
|
|
117
|
+
executions: () => ExecutionService<S>;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/execution/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ExecutionEffort, ExecutionState, ModelConfigOverride, ModelConfigPatch, ModelPolicy, ModelRole, TaskExecutionState } from '@owlmeans/llm-common';
|
|
2
|
+
import type { Execution, TaskExecution } from './types.js';
|
|
3
|
+
export declare const freeze: <T extends object>(o: T) => Readonly<T>;
|
|
4
|
+
/** Overlay a partial policy onto a base one. Override maps are merged, not replaced. */
|
|
5
|
+
export declare const mergePolicy: (base: ModelPolicy, patch: Partial<ModelPolicy>) => ModelPolicy;
|
|
6
|
+
/** Apply the policy's role→role remap. */
|
|
7
|
+
export declare const resolveRole: (policy: ModelPolicy, role: ModelRole) => ModelRole;
|
|
8
|
+
export declare const effortPatch: (effort: ExecutionEffort) => ModelConfigPatch;
|
|
9
|
+
/** Normalize a {@link ModelConfigOverride} (alias or patch) to a patch. */
|
|
10
|
+
export declare const resolveModelConfig: (override: ModelConfigOverride) => ModelConfigPatch;
|
|
11
|
+
/**
|
|
12
|
+
* Merge effort < policy.modelOverride < call-site override into a single patch.
|
|
13
|
+
* Any field present in a higher-precedence source wins.
|
|
14
|
+
*/
|
|
15
|
+
export declare const mergeOverride: (effortBase: ModelConfigPatch, policyOverride: ModelConfigOverride | undefined, callOverride: ModelConfigOverride | undefined) => ModelConfigPatch;
|
|
16
|
+
/**
|
|
17
|
+
* Project an execution down to its JSON-safe state: every own field except the declared
|
|
18
|
+
* collaborators. Domain fields added by a consumer are carried through automatically,
|
|
19
|
+
* which is what lets an extended execution be persisted without extra wiring.
|
|
20
|
+
*/
|
|
21
|
+
export declare const composeExecState: (exec: Execution, collaboratorKeys: string[]) => ExecutionState;
|
|
22
|
+
/**
|
|
23
|
+
* Same as {@link composeExecState}, plus the resumable task fields carried over from the
|
|
24
|
+
* execution's PRIOR state (they live only there — `phase`/`cursor`/`completed`/`data` are
|
|
25
|
+
* advanced by the workflow, not by refinement).
|
|
26
|
+
*/
|
|
27
|
+
export declare const composeTaskState: (exec: TaskExecution, collaboratorKeys: string[]) => TaskExecutionState;
|
|
28
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ExecutionLevel } from '@owlmeans/llm-common';
|
|
2
|
+
import { EFFORT_TABLE } from '../consts.js';
|
|
3
|
+
export const freeze = (o) => Object.freeze(o);
|
|
4
|
+
/** Overlay a partial policy onto a base one. Override maps are merged, not replaced. */
|
|
5
|
+
export const mergePolicy = (base, patch) => ({
|
|
6
|
+
effort: patch.effort ?? base.effort,
|
|
7
|
+
roleOverrides: patch.roleOverrides != null || base.roleOverrides != null
|
|
8
|
+
? { ...base.roleOverrides, ...patch.roleOverrides }
|
|
9
|
+
: undefined,
|
|
10
|
+
modelOverrides: patch.modelOverrides != null || base.modelOverrides != null
|
|
11
|
+
? { ...base.modelOverrides, ...patch.modelOverrides }
|
|
12
|
+
: undefined,
|
|
13
|
+
});
|
|
14
|
+
/** Apply the policy's role→role remap. */
|
|
15
|
+
export const resolveRole = (policy, role) => policy.roleOverrides?.[role] ?? role;
|
|
16
|
+
export const effortPatch = (effort) => EFFORT_TABLE[effort];
|
|
17
|
+
/** Normalize a {@link ModelConfigOverride} (alias or patch) to a patch. */
|
|
18
|
+
export const resolveModelConfig = (override) => typeof override === 'string' ? { preset: override } : override;
|
|
19
|
+
/**
|
|
20
|
+
* Merge effort < policy.modelOverride < call-site override into a single patch.
|
|
21
|
+
* Any field present in a higher-precedence source wins.
|
|
22
|
+
*/
|
|
23
|
+
export const mergeOverride = (effortBase, policyOverride, callOverride) => {
|
|
24
|
+
const policy = policyOverride != null ? resolveModelConfig(policyOverride) : {};
|
|
25
|
+
const call = callOverride != null ? resolveModelConfig(callOverride) : {};
|
|
26
|
+
return { ...effortBase, ...policy, ...call };
|
|
27
|
+
};
|
|
28
|
+
// --- Serialization ---
|
|
29
|
+
/**
|
|
30
|
+
* Project an execution down to its JSON-safe state: every own field except the declared
|
|
31
|
+
* collaborators. Domain fields added by a consumer are carried through automatically,
|
|
32
|
+
* which is what lets an extended execution be persisted without extra wiring.
|
|
33
|
+
*/
|
|
34
|
+
export const composeExecState = (exec, collaboratorKeys) => {
|
|
35
|
+
const state = {};
|
|
36
|
+
for (const [key, value] of Object.entries(exec)) {
|
|
37
|
+
if (!collaboratorKeys.includes(key)) {
|
|
38
|
+
state[key] = value;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return state;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Same as {@link composeExecState}, plus the resumable task fields carried over from the
|
|
45
|
+
* execution's PRIOR state (they live only there — `phase`/`cursor`/`completed`/`data` are
|
|
46
|
+
* advanced by the workflow, not by refinement).
|
|
47
|
+
*/
|
|
48
|
+
export const composeTaskState = (exec, collaboratorKeys) => {
|
|
49
|
+
const base = composeExecState(exec, collaboratorKeys);
|
|
50
|
+
const prior = exec.state ?? {};
|
|
51
|
+
return {
|
|
52
|
+
...base,
|
|
53
|
+
level: ExecutionLevel.Task,
|
|
54
|
+
phase: prior.phase,
|
|
55
|
+
completed: prior.completed,
|
|
56
|
+
cursor: prior.cursor,
|
|
57
|
+
data: prior.data,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/execution/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recover a JSON value from message content. Some models ignore the tool they were
|
|
3
|
+
* pinned to and emit the schema-shaped JSON directly as plain message content, so the
|
|
4
|
+
* tool-call parse yields nothing while the content is still valid JSON. Tolerates
|
|
5
|
+
* markdown fences and leading/trailing prose by falling back to the outermost
|
|
6
|
+
* `{...}` / `[...]` span. Returns `null` when nothing parseable is found.
|
|
7
|
+
*/
|
|
8
|
+
export declare const parseJsonContent: (content: unknown) => unknown;
|
|
9
|
+
/**
|
|
10
|
+
* Reconcile a model's answer with the schema it was given, for the two mistakes models
|
|
11
|
+
* make most often with tool-call arguments:
|
|
12
|
+
*
|
|
13
|
+
* 1. **Stringified structures** — an `array` field filled with the string `"[]"`, an
|
|
14
|
+
* `integer` field with `"7"`, a `boolean` with `"true"`. Parsed back to the declared
|
|
15
|
+
* type; on a parse failure the original value is kept so validation reports the real error.
|
|
16
|
+
* 2. **Over-wrapped scalars** — a `string` field filled with `{ path: "…" }` instead of
|
|
17
|
+
* `"…"`. Unwrapped via the likely key, or via the single string property if there is
|
|
18
|
+
* exactly one.
|
|
19
|
+
*
|
|
20
|
+
* Walks objects and arrays, so nested occurrences are fixed too. Purely defensive: a
|
|
21
|
+
* value that already matches its schema is returned untouched.
|
|
22
|
+
*/
|
|
23
|
+
export declare const coerceToSchema: (value: unknown, schema: unknown) => unknown;
|
|
24
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/helpers/json.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,OAmCnD,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,EAAE,QAAQ,OAAO,KAAG,OA+ChE,CAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/** Property names checked when a model wraps a scalar string in an object. */
|
|
2
|
+
const SCALAR_KEYS = ['path', 'file', 'filename', 'name', 'value', 'source'];
|
|
3
|
+
const tryParse = (text) => {
|
|
4
|
+
try {
|
|
5
|
+
return JSON.parse(text);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Recover a JSON value from message content. Some models ignore the tool they were
|
|
13
|
+
* pinned to and emit the schema-shaped JSON directly as plain message content, so the
|
|
14
|
+
* tool-call parse yields nothing while the content is still valid JSON. Tolerates
|
|
15
|
+
* markdown fences and leading/trailing prose by falling back to the outermost
|
|
16
|
+
* `{...}` / `[...]` span. Returns `null` when nothing parseable is found.
|
|
17
|
+
*/
|
|
18
|
+
export const parseJsonContent = (content) => {
|
|
19
|
+
let text;
|
|
20
|
+
if (typeof content === 'string') {
|
|
21
|
+
text = content;
|
|
22
|
+
}
|
|
23
|
+
else if (Array.isArray(content)) {
|
|
24
|
+
text = content.map(part => typeof part === 'object' && part !== null && 'text' in part
|
|
25
|
+
? String(part.text) : '').join('');
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
text = text.trim();
|
|
31
|
+
if (text === '')
|
|
32
|
+
return null;
|
|
33
|
+
const fence = text.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
34
|
+
if (fence != null)
|
|
35
|
+
text = fence[1].trim();
|
|
36
|
+
const whole = tryParse(text);
|
|
37
|
+
if (whole !== undefined)
|
|
38
|
+
return whole;
|
|
39
|
+
const firstObj = text.indexOf('{');
|
|
40
|
+
const lastObj = text.lastIndexOf('}');
|
|
41
|
+
if (firstObj >= 0 && lastObj > firstObj) {
|
|
42
|
+
const parsed = tryParse(text.slice(firstObj, lastObj + 1));
|
|
43
|
+
if (parsed !== undefined)
|
|
44
|
+
return parsed;
|
|
45
|
+
}
|
|
46
|
+
const firstArr = text.indexOf('[');
|
|
47
|
+
const lastArr = text.lastIndexOf(']');
|
|
48
|
+
if (firstArr >= 0 && lastArr > firstArr) {
|
|
49
|
+
const parsed = tryParse(text.slice(firstArr, lastArr + 1));
|
|
50
|
+
if (parsed !== undefined)
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Reconcile a model's answer with the schema it was given, for the two mistakes models
|
|
57
|
+
* make most often with tool-call arguments:
|
|
58
|
+
*
|
|
59
|
+
* 1. **Stringified structures** — an `array` field filled with the string `"[]"`, an
|
|
60
|
+
* `integer` field with `"7"`, a `boolean` with `"true"`. Parsed back to the declared
|
|
61
|
+
* type; on a parse failure the original value is kept so validation reports the real error.
|
|
62
|
+
* 2. **Over-wrapped scalars** — a `string` field filled with `{ path: "…" }` instead of
|
|
63
|
+
* `"…"`. Unwrapped via the likely key, or via the single string property if there is
|
|
64
|
+
* exactly one.
|
|
65
|
+
*
|
|
66
|
+
* Walks objects and arrays, so nested occurrences are fixed too. Purely defensive: a
|
|
67
|
+
* value that already matches its schema is returned untouched.
|
|
68
|
+
*/
|
|
69
|
+
export const coerceToSchema = (value, schema) => {
|
|
70
|
+
if (schema == null || typeof schema !== 'object')
|
|
71
|
+
return value;
|
|
72
|
+
const s = schema;
|
|
73
|
+
const type = s.type;
|
|
74
|
+
if (typeof value === 'string' && type != null && type !== 'string') {
|
|
75
|
+
if (type === 'array' || type === 'object') {
|
|
76
|
+
try {
|
|
77
|
+
return coerceToSchema(JSON.parse(value), schema);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (type === 'integer' || type === 'number') {
|
|
84
|
+
const n = Number(value);
|
|
85
|
+
return Number.isNaN(n) ? value : n;
|
|
86
|
+
}
|
|
87
|
+
if (type === 'boolean') {
|
|
88
|
+
if (value === 'true')
|
|
89
|
+
return true;
|
|
90
|
+
if (value === 'false')
|
|
91
|
+
return false;
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (type === 'string' && value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
96
|
+
const obj = value;
|
|
97
|
+
for (const key of SCALAR_KEYS) {
|
|
98
|
+
if (typeof obj[key] === 'string')
|
|
99
|
+
return obj[key];
|
|
100
|
+
}
|
|
101
|
+
const strings = Object.values(obj).filter((v) => typeof v === 'string');
|
|
102
|
+
if (strings.length === 1)
|
|
103
|
+
return strings[0];
|
|
104
|
+
}
|
|
105
|
+
if (type === 'object' && s.properties != null && value != null
|
|
106
|
+
&& typeof value === 'object' && !Array.isArray(value)) {
|
|
107
|
+
const obj = value;
|
|
108
|
+
for (const [key, propSchema] of Object.entries(s.properties)) {
|
|
109
|
+
if (key in obj)
|
|
110
|
+
obj[key] = coerceToSchema(obj[key], propSchema);
|
|
111
|
+
}
|
|
112
|
+
return obj;
|
|
113
|
+
}
|
|
114
|
+
if (type === 'array' && Array.isArray(value) && s.items != null) {
|
|
115
|
+
return value.map(item => coerceToSchema(item, s.items));
|
|
116
|
+
}
|
|
117
|
+
return value;
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/helpers/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MessageFieldWithRole } from '@langchain/core/messages';
|
|
2
|
+
import type { ModelInput } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Normalize whatever a caller passed as input into an array of role-tagged messages:
|
|
5
|
+
* a bare string becomes a `user` message, a single message becomes a one-element array.
|
|
6
|
+
* The result is a fresh array the model is free to mutate (JSON directive, `/no_think`,
|
|
7
|
+
* cache markers) without touching the caller's data.
|
|
8
|
+
*/
|
|
9
|
+
export declare const normalizeInput: (input: ModelInput) => MessageFieldWithRole[];
|
|
10
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/helpers/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,UAAU,KAAG,oBAAoB,EAE2D,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize whatever a caller passed as input into an array of role-tagged messages:
|
|
3
|
+
* a bare string becomes a `user` message, a single message becomes a one-element array.
|
|
4
|
+
* The result is a fresh array the model is free to mutate (JSON directive, `/no_think`,
|
|
5
|
+
* cache markers) without touching the caller's data.
|
|
6
|
+
*/
|
|
7
|
+
export const normalizeInput = (input) => (Array.isArray(input) ? input : [input])
|
|
8
|
+
.map(message => typeof message === 'string' ? { role: 'user', content: message } : message);
|
|
9
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/helpers/messages.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAiB,EAA0B,EAAE,CAC1E,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACrC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAA2B,CAAA"}
|