deepclause-sdk 0.1.0 → 0.1.1
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 +83 -12
- package/dist/agent.d.ts +2 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +1 -0
- package/dist/agent.js.map +1 -1
- package/dist/cli/config.d.ts +62 -2
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +15 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl.d.ts +25 -0
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +165 -5
- package/dist/cli/repl.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +6 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/visualize.d.ts +4 -0
- package/dist/cli/visualize.d.ts.map +1 -1
- package/dist/cli/visualize.js +29 -4
- package/dist/cli/visualize.js.map +1 -1
- package/dist/prolog/bridge.d.ts +3 -1
- package/dist/prolog/bridge.d.ts.map +1 -1
- package/dist/prolog/bridge.js +2 -0
- package/dist/prolog/bridge.js.map +1 -1
- package/dist/prolog-src/deepclause_mi.pl +196 -9
- package/dist/repl/agent.d.ts +18 -0
- package/dist/repl/agent.d.ts.map +1 -1
- package/dist/repl/agent.js +47 -3
- package/dist/repl/agent.js.map +1 -1
- package/dist/repl/backend.d.ts +31 -0
- package/dist/repl/backend.d.ts.map +1 -1
- package/dist/repl/backend.js +122 -77
- package/dist/repl/backend.js.map +1 -1
- package/dist/repl/harness-tools.d.ts +25 -0
- package/dist/repl/harness-tools.d.ts.map +1 -1
- package/dist/repl/harness-tools.js +73 -2
- package/dist/repl/harness-tools.js.map +1 -1
- package/dist/repl/imagegen.d.ts +29 -0
- package/dist/repl/imagegen.d.ts.map +1 -0
- package/dist/repl/imagegen.js +84 -0
- package/dist/repl/imagegen.js.map +1 -0
- package/dist/repl/index.d.ts +12 -2
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +5 -0
- package/dist/repl/index.js.map +1 -1
- package/dist/repl/model-resolver.d.ts +59 -0
- package/dist/repl/model-resolver.d.ts.map +1 -0
- package/dist/repl/model-resolver.js +156 -0
- package/dist/repl/model-resolver.js.map +1 -0
- package/dist/repl/render.d.ts +28 -1
- package/dist/repl/render.d.ts.map +1 -1
- package/dist/repl/render.js +94 -1
- package/dist/repl/render.js.map +1 -1
- package/dist/repl/session.d.ts +68 -0
- package/dist/repl/session.d.ts.map +1 -1
- package/dist/repl/session.js +206 -8
- package/dist/repl/session.js.map +1 -1
- package/dist/repl/tui/transcript.d.ts +2 -0
- package/dist/repl/tui/transcript.d.ts.map +1 -1
- package/dist/repl/tui/transcript.js +16 -0
- package/dist/repl/tui/transcript.js.map +1 -1
- package/dist/runner.d.ts +13 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +101 -16
- package/dist/runner.js.map +1 -1
- package/dist/system/assets/docs/AGENT_PROMPT.md +75 -1
- package/dist/system/assets/docs/DML_REFERENCE.md +32 -0
- package/dist/types.d.ts +56 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/visualize/ascii.d.ts +55 -0
- package/dist/visualize/ascii.d.ts.map +1 -0
- package/dist/visualize/ascii.js +242 -0
- package/dist/visualize/ascii.js.map +1 -0
- package/dist/visualize/display.d.ts +24 -0
- package/dist/visualize/display.d.ts.map +1 -0
- package/dist/visualize/display.js +29 -0
- package/dist/visualize/display.js.map +1 -0
- package/dist/visualize/graphics.d.ts +35 -0
- package/dist/visualize/graphics.d.ts.map +1 -0
- package/dist/visualize/graphics.js +96 -0
- package/dist/visualize/graphics.js.map +1 -0
- package/dist/visualize/image.d.ts +38 -0
- package/dist/visualize/image.d.ts.map +1 -0
- package/dist/visualize/image.js +95 -0
- package/dist/visualize/image.js.map +1 -0
- package/dist/visualize/index.d.ts +7 -0
- package/dist/visualize/index.d.ts.map +1 -1
- package/dist/visualize/index.js +9 -0
- package/dist/visualize/index.js.map +1 -1
- package/dist/visualize/raster.d.ts +23 -0
- package/dist/visualize/raster.d.ts.map +1 -0
- package/dist/visualize/raster.js +47 -0
- package/dist/visualize/raster.js.map +1 -0
- package/dist/visualize/svg.d.ts +39 -0
- package/dist/visualize/svg.d.ts.map +1 -0
- package/dist/visualize/svg.js +148 -0
- package/dist/visualize/svg.js.map +1 -0
- package/dist/visualize/transcode.d.ts +13 -0
- package/dist/visualize/transcode.d.ts.map +1 -0
- package/dist/visualize/transcode.js +40 -0
- package/dist/visualize/transcode.js.map +1 -0
- package/docs/images/repl.png +0 -0
- package/package.json +7 -5
- package/src/prolog-src/deepclause_mi.pl +196 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/visualize/svg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional raster transcoding (JPEG/WebP/GIF → PNG) for terminal display.
|
|
3
|
+
*
|
|
4
|
+
* PNG passes through untouched and SVG is handled by resvg (`raster.ts`); the
|
|
5
|
+
* other formats need a decoder. `sharp` is loaded lazily and is not a hard
|
|
6
|
+
* dependency — when it is unavailable those formats fall back to the
|
|
7
|
+
* path + external-open behaviour.
|
|
8
|
+
*/
|
|
9
|
+
/** True when a raster transcoder is available. */
|
|
10
|
+
export declare function transcoderAvailable(): Promise<boolean>;
|
|
11
|
+
/** Transcode arbitrary raster bytes to PNG, or undefined when unsupported. */
|
|
12
|
+
export declare function transcodeToPng(bytes: Buffer, mimeType: string): Promise<Buffer | undefined>;
|
|
13
|
+
//# sourceMappingURL=transcode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcode.d.ts","sourceRoot":"","sources":["../../src/visualize/transcode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,kDAAkD;AAClD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5D;AAED,8EAA8E;AAC9E,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAcjG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional raster transcoding (JPEG/WebP/GIF → PNG) for terminal display.
|
|
3
|
+
*
|
|
4
|
+
* PNG passes through untouched and SVG is handled by resvg (`raster.ts`); the
|
|
5
|
+
* other formats need a decoder. `sharp` is loaded lazily and is not a hard
|
|
6
|
+
* dependency — when it is unavailable those formats fall back to the
|
|
7
|
+
* path + external-open behaviour.
|
|
8
|
+
*/
|
|
9
|
+
async function loadSharp() {
|
|
10
|
+
// Variable specifier keeps this compiling when the optional dep is absent.
|
|
11
|
+
const specifier = 'sharp';
|
|
12
|
+
try {
|
|
13
|
+
return (await import(specifier));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** True when a raster transcoder is available. */
|
|
20
|
+
export async function transcoderAvailable() {
|
|
21
|
+
return (await loadSharp()) !== undefined;
|
|
22
|
+
}
|
|
23
|
+
/** Transcode arbitrary raster bytes to PNG, or undefined when unsupported. */
|
|
24
|
+
export async function transcodeToPng(bytes, mimeType) {
|
|
25
|
+
if (mimeType === 'image/png') {
|
|
26
|
+
return bytes;
|
|
27
|
+
}
|
|
28
|
+
const sharp = await loadSharp();
|
|
29
|
+
if (!sharp) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const factory = sharp.default ?? sharp;
|
|
34
|
+
return await factory(bytes).png().toBuffer();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=transcode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcode.js","sourceRoot":"","sources":["../../src/visualize/transcode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,KAAK,UAAU,SAAS;IACtB,2EAA2E;IAC3E,MAAM,SAAS,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAA2B,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC,KAAK,SAAS,CAAC;AAC3C,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,QAAgB;IAClE,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;QACvC,OAAO,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deepclause-sdk",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Neuro-symbolic runtime: a self-modifying DML/Prolog REPL, one-shot runner, and TypeScript SDK",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Neuro-symbolic runtime: a self-modifying DML/Prolog REPL, one-shot runner, and TypeScript SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -40,12 +40,13 @@
|
|
|
40
40
|
"cli": "tsx src/cli/index.ts"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@earendil-works/pi-ai": "^1.0.4",
|
|
44
|
-
"@earendil-works/pi-coding-agent": "^1.0.4",
|
|
45
|
-
"@earendil-works/pi-tui": "^1.0.4",
|
|
46
43
|
"@ai-sdk/anthropic": "^3.0.35",
|
|
47
44
|
"@ai-sdk/google": "^3.0.60",
|
|
48
45
|
"@ai-sdk/openai": "^3.0.25",
|
|
46
|
+
"@resvg/resvg-js": "^2.6.2",
|
|
47
|
+
"@earendil-works/pi-ai": "^1.0.4",
|
|
48
|
+
"@earendil-works/pi-coding-agent": "^1.0.4",
|
|
49
|
+
"@earendil-works/pi-tui": "^1.0.4",
|
|
49
50
|
"ai": "^6.0.116",
|
|
50
51
|
"commander": "^12.1.0",
|
|
51
52
|
"deepclause-agentvm": "^0.0.5",
|
|
@@ -68,6 +69,7 @@
|
|
|
68
69
|
},
|
|
69
70
|
"files": [
|
|
70
71
|
"dist",
|
|
72
|
+
"docs/images",
|
|
71
73
|
"src/prolog-src",
|
|
72
74
|
"vendor/swipl-wasm/dist",
|
|
73
75
|
"vendor/swipl-wasm/package.json",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
repl_user_predicates/2,
|
|
72
72
|
repl_user_predicates_text/2,
|
|
73
73
|
repl_predicate_arities/3,
|
|
74
|
+
repl_probe_nondeterminism/6,
|
|
74
75
|
repl_set_meta_catalog/2,
|
|
75
76
|
repl_set_meta_template/2,
|
|
76
77
|
repl_set_harness_examples/2,
|
|
@@ -336,6 +337,7 @@ extract_var_info(Bindings, Term, BareVar, Info) :-
|
|
|
336
337
|
).
|
|
337
338
|
|
|
338
339
|
%% wrapper_type(?Wrapper, ?Type)
|
|
340
|
+
wrapper_type(media, media).
|
|
339
341
|
wrapper_type(string, string).
|
|
340
342
|
wrapper_type(integer, integer).
|
|
341
343
|
wrapper_type(float, number).
|
|
@@ -477,6 +479,7 @@ typed_arg(Var, Info, Wrapped) :-
|
|
|
477
479
|
typed_arg_type(Type, Var, Info, Wrapped).
|
|
478
480
|
typed_arg(Var, _, Var).
|
|
479
481
|
|
|
482
|
+
typed_arg_type(media, Var, _, media(Var)) :- !.
|
|
480
483
|
typed_arg_type(string, Var, _, Var) :- !.
|
|
481
484
|
typed_arg_type(integer, Var, _, integer(Var)) :- !.
|
|
482
485
|
typed_arg_type(number, Var, _, number(Var)) :- !.
|
|
@@ -2052,6 +2055,87 @@ repl_predicate_arities(SessionId, Name, Arities) :-
|
|
|
2052
2055
|
Arities0),
|
|
2053
2056
|
sort(Arities0, Arities).
|
|
2054
2057
|
|
|
2058
|
+
%% ============================================================
|
|
2059
|
+
%% Nondeterminism probe (end_turn advisory)
|
|
2060
|
+
%%
|
|
2061
|
+
%% After a commit, the host may probe each changed pure predicate: if calling it
|
|
2062
|
+
%% with fresh variables yields more than a threshold of solutions, the predicate
|
|
2063
|
+
%% is probably missing a commit (`once/1` / `!`) and would flood an `execute`.
|
|
2064
|
+
%% Side-effecting predicates are never run (see repl_impure_name/1), fact tables
|
|
2065
|
+
%% are skipped, and the search is bounded by an inference limit.
|
|
2066
|
+
%% ============================================================
|
|
2067
|
+
|
|
2068
|
+
%% Functors with side effects: model calls, host tools, file IO, DB mutation.
|
|
2069
|
+
repl_impure_name(task). repl_impure_name(prompt). repl_impure_name(exec).
|
|
2070
|
+
repl_impure_name(system). repl_impure_name(user). repl_impure_name(answer).
|
|
2071
|
+
repl_impure_name(input). repl_impure_name(output). repl_impure_name(read_media).
|
|
2072
|
+
repl_impure_name(attach_media). repl_impure_name(save_image). repl_impure_name(gen_image).
|
|
2073
|
+
repl_impure_name(judge). repl_impure_name(choose). repl_impure_name(rate).
|
|
2074
|
+
repl_impure_name(verify). repl_impure_name(probability).
|
|
2075
|
+
repl_impure_name(write_file). repl_impure_name(append_file). repl_impure_name(delete_file).
|
|
2076
|
+
repl_impure_name(make_directory_path). repl_impure_name(open). repl_impure_name(close).
|
|
2077
|
+
repl_impure_name(assert). repl_impure_name(assertz). repl_impure_name(asserta).
|
|
2078
|
+
repl_impure_name(retract). repl_impure_name(retractall).
|
|
2079
|
+
repl_impure_name(consult). repl_impure_name(use_module). repl_impure_name(load_files).
|
|
2080
|
+
|
|
2081
|
+
%% repl_body_impure(+Goal) — true when the goal tree calls a side-effecting name.
|
|
2082
|
+
repl_body_impure(Goal) :-
|
|
2083
|
+
callable(Goal),
|
|
2084
|
+
functor(Goal, Name, _),
|
|
2085
|
+
repl_impure_name(Name),
|
|
2086
|
+
!.
|
|
2087
|
+
repl_body_impure((A, _)) :- repl_body_impure(A).
|
|
2088
|
+
repl_body_impure((_, B)) :- repl_body_impure(B).
|
|
2089
|
+
repl_body_impure((A ; B)) :- ( repl_body_impure(A) ; repl_body_impure(B) ).
|
|
2090
|
+
repl_body_impure((A -> B)) :- ( repl_body_impure(A) ; repl_body_impure(B) ).
|
|
2091
|
+
repl_body_impure(\+ Goal) :- repl_body_impure(Goal).
|
|
2092
|
+
repl_body_impure(once(Goal)) :- repl_body_impure(Goal).
|
|
2093
|
+
repl_body_impure(ignore(Goal)) :- repl_body_impure(Goal).
|
|
2094
|
+
repl_body_impure(forall(Gen, Action)) :- ( repl_body_impure(Gen) ; repl_body_impure(Action) ).
|
|
2095
|
+
repl_body_impure(catch(Goal, _, Recovery)) :- ( repl_body_impure(Goal) ; repl_body_impure(Recovery) ).
|
|
2096
|
+
repl_body_impure(findall(_, Goal, _)) :- repl_body_impure(Goal).
|
|
2097
|
+
repl_body_impure(findall(_, Goal, _, _)) :- repl_body_impure(Goal).
|
|
2098
|
+
repl_body_impure(call_with_inference_limit(Goal, _, _)) :- repl_body_impure(Goal).
|
|
2099
|
+
repl_body_impure(with_output_to(_, Goal)) :- repl_body_impure(Goal).
|
|
2100
|
+
repl_body_impure(_:Goal) :- repl_body_impure(Goal).
|
|
2101
|
+
|
|
2102
|
+
repl_predicate_pure(SessionId, Name, Arity) :-
|
|
2103
|
+
functor(Head, Name, Arity),
|
|
2104
|
+
\+ ( clause(SessionId:Head, Body), repl_body_impure(Body) ).
|
|
2105
|
+
|
|
2106
|
+
%% True when the predicate has at least one clause with a real body (not a fact).
|
|
2107
|
+
repl_predicate_has_rule(SessionId, Name, Arity) :-
|
|
2108
|
+
functor(Head, Name, Arity),
|
|
2109
|
+
clause(SessionId:Head, Body),
|
|
2110
|
+
Body \== true,
|
|
2111
|
+
!.
|
|
2112
|
+
|
|
2113
|
+
%% repl_probe_nondeterminism(+SessionId, +Name, +Arity, +Threshold, +Bound, -Result)
|
|
2114
|
+
%% Result: one | many | timeout | data | unsafe | removed | error.
|
|
2115
|
+
repl_probe_nondeterminism(SessionId, Name, Arity, Threshold, Bound, Result) :-
|
|
2116
|
+
( \+ current_predicate(SessionId:Name/Arity)
|
|
2117
|
+
-> Result = removed
|
|
2118
|
+
; \+ repl_predicate_has_rule(SessionId, Name, Arity)
|
|
2119
|
+
-> Result = data
|
|
2120
|
+
; \+ repl_predicate_pure(SessionId, Name, Arity)
|
|
2121
|
+
-> Result = unsafe
|
|
2122
|
+
; functor(Head, Name, Arity),
|
|
2123
|
+
N is Threshold + 1,
|
|
2124
|
+
catch(
|
|
2125
|
+
( with_output_to(string(_),
|
|
2126
|
+
call_with_inference_limit(call_nth(SessionId:Head, N), Bound, R)),
|
|
2127
|
+
( R == false -> Result = one
|
|
2128
|
+
; R == inference_limit_exceeded -> Result = timeout
|
|
2129
|
+
; R == true -> Result = many
|
|
2130
|
+
; R == (!) -> Result = many % success is returned as `!` in this build
|
|
2131
|
+
; Result = error
|
|
2132
|
+
)
|
|
2133
|
+
),
|
|
2134
|
+
_,
|
|
2135
|
+
Result = error
|
|
2136
|
+
)
|
|
2137
|
+
).
|
|
2138
|
+
|
|
2055
2139
|
%% repl_history_listing(+SessionId)
|
|
2056
2140
|
%% Human-readable tail for `listing(history)`.
|
|
2057
2141
|
repl_history_listing(SessionId) :-
|
|
@@ -2463,8 +2547,15 @@ step_engine(SessionId, Status, Content, Payload) :-
|
|
|
2463
2547
|
|
|
2464
2548
|
%% process_engine_result(+Result, -Status, -Content, -Payload)
|
|
2465
2549
|
process_engine_result(output(Text), output, Text, none) :- !.
|
|
2550
|
+
process_engine_result(media(Payload), media, '', Payload) :- is_dict(Payload), !.
|
|
2466
2551
|
process_engine_result(log(Text), log, Text, none) :- !.
|
|
2467
2552
|
process_engine_result(answer(Text), answer, Text, none) :- !.
|
|
2553
|
+
%% Current 8-arg format (with model spec from with_model/2)
|
|
2554
|
+
process_engine_result(request_agent_loop(Desc, Vars, Tools, Memory, ToolScope, ReasoningEffort, RecipeContext, ModelSpec), request_agent_loop, '',
|
|
2555
|
+
payload{taskDescription: Desc, outputVars: Vars, userTools: Tools, memory: Memory, toolScope: ToolScope, reasoningEffort: ReasoningEffort, recipeContext: RecipeContext, modelSpec: ModelSpec}) :- !.
|
|
2556
|
+
%% Prompt-family 6-arg format (tool scope + model spec; no reasoning/recipe)
|
|
2557
|
+
process_engine_result(request_agent_loop(Desc, Vars, Tools, Memory, ToolScope, ModelSpec), request_agent_loop, '',
|
|
2558
|
+
payload{taskDescription: Desc, outputVars: Vars, userTools: Tools, memory: Memory, toolScope: ToolScope, reasoningEffort: none, recipeContext: "", modelSpec: ModelSpec}) :- !.
|
|
2468
2559
|
%% Note: Memory and tool scope are now passed in the payload for the agent loop
|
|
2469
2560
|
process_engine_result(request_agent_loop(Desc, Vars, Tools, Memory, ToolScope, ReasoningEffort, RecipeContext), request_agent_loop, '',
|
|
2470
2561
|
payload{taskDescription: Desc, outputVars: Vars, userTools: Tools, memory: Memory, toolScope: ToolScope, reasoningEffort: ReasoningEffort, recipeContext: RecipeContext}) :- !.
|
|
@@ -2476,10 +2567,14 @@ process_engine_result(request_agent_loop(Desc, Vars, Tools, Memory), request_age
|
|
|
2476
2567
|
payload{taskDescription: Desc, outputVars: Vars, userTools: Tools, memory: Memory, toolScope: none, reasoningEffort: none, recipeContext: ""}) :- !.
|
|
2477
2568
|
process_engine_result(request_exec(Tool, Args), request_exec, '',
|
|
2478
2569
|
payload{toolName: Tool, args: Args}) :- !.
|
|
2570
|
+
process_engine_result(request_sample_token(Prompt, Allowed, ModelSpec), request_sample_token, '',
|
|
2571
|
+
payload{prompt: Prompt, allowedTokens: Allowed, modelSpec: ModelSpec}) :- !.
|
|
2479
2572
|
process_engine_result(request_sample_token(Prompt, Allowed), request_sample_token, '',
|
|
2480
|
-
payload{prompt: Prompt, allowedTokens: Allowed}) :- !.
|
|
2573
|
+
payload{prompt: Prompt, allowedTokens: Allowed, modelSpec: none}) :- !.
|
|
2574
|
+
process_engine_result(request_llm(Messages, ModelSpec), request_llm, '',
|
|
2575
|
+
payload{messages: Messages, modelSpec: ModelSpec}) :- !.
|
|
2481
2576
|
process_engine_result(request_llm(Messages), request_llm, '',
|
|
2482
|
-
payload{messages: Messages}) :- !.
|
|
2577
|
+
payload{messages: Messages, modelSpec: none}) :- !.
|
|
2483
2578
|
process_engine_result(request_judgment(Payload), request_judgment, '', Payload) :- !.
|
|
2484
2579
|
%% Tool result from inline tool execution
|
|
2485
2580
|
process_engine_result(tool_result(Result), tool_result, '',
|
|
@@ -2714,6 +2809,25 @@ get_reasoning_effort(State, Effort) :-
|
|
|
2714
2809
|
; Effort = none
|
|
2715
2810
|
).
|
|
2716
2811
|
|
|
2812
|
+
%% set_model_state(+StateIn, +Spec, -StateOut)
|
|
2813
|
+
set_model_state(StateIn, Spec, StateOut) :-
|
|
2814
|
+
StateOut = StateIn.put(model_spec, Spec).
|
|
2815
|
+
|
|
2816
|
+
%% clear_model_state(+StateIn, -StateOut)
|
|
2817
|
+
clear_model_state(StateIn, StateOut) :-
|
|
2818
|
+
( get_dict(model_spec, StateIn, _)
|
|
2819
|
+
-> del_dict(model_spec, StateIn, _, StateOut)
|
|
2820
|
+
; StateOut = StateIn
|
|
2821
|
+
).
|
|
2822
|
+
|
|
2823
|
+
%% get_model_spec(+State, -Spec)
|
|
2824
|
+
%% `none` means "no override" (use the session model).
|
|
2825
|
+
get_model_spec(State, Spec) :-
|
|
2826
|
+
( get_dict(model_spec, State, Spec)
|
|
2827
|
+
-> true
|
|
2828
|
+
; Spec = none
|
|
2829
|
+
).
|
|
2830
|
+
|
|
2717
2831
|
%% ============================================================
|
|
2718
2832
|
%% Recipe Context Helpers
|
|
2719
2833
|
%% ============================================================
|
|
@@ -3090,8 +3204,9 @@ mi_call(task(Desc), StateIn, StateOut) :-
|
|
|
3090
3204
|
get_tool_scope(StateIn, ToolScope),
|
|
3091
3205
|
get_reasoning_effort(StateIn, ReasoningEffort),
|
|
3092
3206
|
get_recipe_context(StateIn, RecipeContext),
|
|
3207
|
+
get_model_spec(StateIn, ModelSpec),
|
|
3093
3208
|
% Yield request with current memory and tool scope
|
|
3094
|
-
engine_yield(request_agent_loop(InterpDesc, [], UserTools, Memory, ToolScope, ReasoningEffort, RecipeContext)),
|
|
3209
|
+
engine_yield(request_agent_loop(InterpDesc, [], UserTools, Memory, ToolScope, ReasoningEffort, RecipeContext, ModelSpec)),
|
|
3095
3210
|
% Handle signals (tool calls) until agent_done
|
|
3096
3211
|
handle_agent_signals(SessionId, StateIn, StateAfterAgent),
|
|
3097
3212
|
session_agent_result(SessionId, Result),
|
|
@@ -3161,7 +3276,8 @@ mi_call(prompt(Desc), StateIn, StateOut) :-
|
|
|
3161
3276
|
get_depth(StateIn, Depth),
|
|
3162
3277
|
add_trace_entry(SessionId, llm_call, prompt, [InterpDesc], Depth),
|
|
3163
3278
|
% prompt/N is a simple LLM call - no tools, no tool scope
|
|
3164
|
-
|
|
3279
|
+
get_model_spec(StateIn, ModelSpec),
|
|
3280
|
+
engine_yield(request_agent_loop(InterpDesc, [], [], [], none, ModelSpec)),
|
|
3165
3281
|
% Wait for agent_done (no tool calls expected since no tools provided)
|
|
3166
3282
|
handle_agent_signals(SessionId, StateIn, StateOut),
|
|
3167
3283
|
session_agent_result(SessionId, Result),
|
|
@@ -3196,7 +3312,8 @@ mi_call_prompt_n(Desc, Vars, VarNames, StateIn, StateOut) :-
|
|
|
3196
3312
|
get_depth(StateIn, Depth),
|
|
3197
3313
|
add_trace_entry(SessionId, llm_call, prompt, [InterpDesc], Depth),
|
|
3198
3314
|
% prompt/N is a simple LLM call - no tools, no tool scope
|
|
3199
|
-
|
|
3315
|
+
get_model_spec(StateIn, ModelSpec),
|
|
3316
|
+
engine_yield(request_agent_loop(InterpDesc, VarNames, [], [], none, ModelSpec)),
|
|
3200
3317
|
% Wait for agent_done (no tool calls expected since no tools provided)
|
|
3201
3318
|
handle_agent_signals(SessionId, StateIn, StateOut),
|
|
3202
3319
|
session_agent_result(SessionId, Result),
|
|
@@ -3223,7 +3340,8 @@ mi_call_sample_token(Desc, Allowed, Token, StateIn, StateOut) :-
|
|
|
3223
3340
|
get_session_id(SessionId),
|
|
3224
3341
|
get_depth(StateIn, Depth),
|
|
3225
3342
|
add_trace_entry(SessionId, llm_call, sample_token, [InterpDesc, Allowed], Depth),
|
|
3226
|
-
|
|
3343
|
+
get_model_spec(StateIn, ModelSpec),
|
|
3344
|
+
engine_yield(request_sample_token(InterpDesc, Allowed, ModelSpec)),
|
|
3227
3345
|
wait_sample_token_signal(SessionId),
|
|
3228
3346
|
( session_sample_token_result(SessionId, Result)
|
|
3229
3347
|
-> retract(session_sample_token_result(SessionId, _)),
|
|
@@ -3431,7 +3549,8 @@ mi_call_llm(Messages, Reply, StateIn, StateOut) :-
|
|
|
3431
3549
|
get_session_id(SessionId),
|
|
3432
3550
|
get_depth(StateIn, Depth),
|
|
3433
3551
|
add_trace_entry(SessionId, llm_call, llm, [Messages], Depth),
|
|
3434
|
-
|
|
3552
|
+
get_model_spec(StateIn, ModelSpec),
|
|
3553
|
+
engine_yield(request_llm(Messages, ModelSpec)),
|
|
3435
3554
|
wait_llm_signal(SessionId),
|
|
3436
3555
|
( session_llm_result(SessionId, Result)
|
|
3437
3556
|
-> retract(session_llm_result(SessionId, _)),
|
|
@@ -3474,7 +3593,8 @@ mi_call_task_n(Desc, Vars, VarNames, StateIn, StateOut) :-
|
|
|
3474
3593
|
get_tool_scope(StateIn, ToolScope),
|
|
3475
3594
|
get_reasoning_effort(StateIn, ReasoningEffort),
|
|
3476
3595
|
get_recipe_context(StateIn, RecipeContext),
|
|
3477
|
-
|
|
3596
|
+
get_model_spec(StateIn, ModelSpec),
|
|
3597
|
+
engine_yield(request_agent_loop(InterpDesc, VarNames, UserTools, Memory, ToolScope, ReasoningEffort, RecipeContext, ModelSpec)),
|
|
3478
3598
|
% Handle signals (tool calls) until agent_done
|
|
3479
3599
|
handle_agent_signals(SessionId, StateIn, StateAfterAgent),
|
|
3480
3600
|
session_agent_result(SessionId, Result),
|
|
@@ -3589,6 +3709,17 @@ mi_call(with_reasoning(Goal, Effort), StateIn, StateOut) :-
|
|
|
3589
3709
|
mi_call(Goal, ScopedState, StateWithScope),
|
|
3590
3710
|
clear_reasoning_effort_state(StateWithScope, StateOut).
|
|
3591
3711
|
|
|
3712
|
+
%% mi_call(with_model(Spec, Goal), +StateIn, -StateOut)
|
|
3713
|
+
%% Run Goal with a specific model, and optionally a reasoning level. `Spec` is a
|
|
3714
|
+
%% string — "provider:model", "provider:model#reasoning", "model",
|
|
3715
|
+
%% "model#reasoning" — or a model{provider, id, temperature, maxTokens, reasoning}
|
|
3716
|
+
%% dict. It applies to task/N, prompt/N and sample_token/N (not judgments).
|
|
3717
|
+
mi_call(with_model(Spec, Goal), StateIn, StateOut) :-
|
|
3718
|
+
!,
|
|
3719
|
+
set_model_state(StateIn, Spec, ScopedState),
|
|
3720
|
+
mi_call(Goal, ScopedState, StateWithScope),
|
|
3721
|
+
clear_model_state(StateWithScope, StateOut).
|
|
3722
|
+
|
|
3592
3723
|
%% mi_call(with_recipe(Goal, Query), +StateIn, -StateOut)
|
|
3593
3724
|
%% Run Goal with a recipe loaded as transient context (not persisted to memory).
|
|
3594
3725
|
mi_call(with_recipe(Goal, Query), StateIn, StateOut) :-
|
|
@@ -3647,9 +3778,39 @@ mi_call(attach_media(Media), StateIn, StateOut) :-
|
|
|
3647
3778
|
append(Memory, [Message], NewMemory),
|
|
3648
3779
|
set_memory(StateIn, NewMemory, StateOut).
|
|
3649
3780
|
|
|
3781
|
+
%% mi_call(save_image(+Media, +OutPath), +StateIn, -StateOut)
|
|
3782
|
+
%% Write a media reference to a workspace file: `save_image(media(Path, Mime), "out.png")`,
|
|
3783
|
+
%% `save_image(media{svg: Svg}, "out.svg")`. Parent directories must exist.
|
|
3784
|
+
mi_call(save_image(Media, Out), StateIn, StateIn) :-
|
|
3785
|
+
!,
|
|
3786
|
+
media_dict(Media, Dict),
|
|
3787
|
+
( get_dict(kind, Dict, inline_svg),
|
|
3788
|
+
get_dict(data, Dict, Svg)
|
|
3789
|
+
-> resolve_workspace_path(Out, OutAbs),
|
|
3790
|
+
open(OutAbs, write, Stream),
|
|
3791
|
+
write(Stream, Svg),
|
|
3792
|
+
close(Stream)
|
|
3793
|
+
; get_dict(path, Dict, Path),
|
|
3794
|
+
Path \== ""
|
|
3795
|
+
-> resolve_workspace_path(Path, InAbs),
|
|
3796
|
+
resolve_workspace_path(Out, OutAbs),
|
|
3797
|
+
copy_file(InAbs, OutAbs)
|
|
3798
|
+
; throw(error(domain_error(save_image, Media), save_image/2))
|
|
3799
|
+
).
|
|
3800
|
+
|
|
3650
3801
|
%% media_dict(+Media, -Dict)
|
|
3651
|
-
%%
|
|
3802
|
+
%% Normalizes an image reference for display/attachment:
|
|
3803
|
+
%% media(Path, Mime) | media(Path) | a bare Path string
|
|
3804
|
+
%% media{path: Path} | media{path: Path, mime: Mime}
|
|
3805
|
+
%% media{svg: SvgString} (inline SVG)
|
|
3806
|
+
%% media{data: Base64} | media{data: Base64, mime: Mime} (inline bytes)
|
|
3652
3807
|
media_dict(media(Path, Mime), media{path: Path, mime: Mime}) :- !.
|
|
3808
|
+
media_dict(media(Path), media{path: Path, mime: Mime}) :- !, media_mime(Path, Mime).
|
|
3809
|
+
media_dict(media{path: Path, mime: Mime}, media{path: Path, mime: Mime}) :- !.
|
|
3810
|
+
media_dict(media{path: Path}, media{path: Path, mime: Mime}) :- !, media_mime(Path, Mime).
|
|
3811
|
+
media_dict(media{svg: Svg}, media{path: "", mime: "image/svg+xml", kind: inline_svg, data: Svg}) :- !.
|
|
3812
|
+
media_dict(media{data: Data, mime: Mime}, media{path: "", mime: Mime, kind: inline_data, data: Data}) :- !.
|
|
3813
|
+
media_dict(media{data: Data}, media{path: "", mime: "image/png", kind: inline_data, data: Data}) :- !.
|
|
3653
3814
|
media_dict(Path, media{path: Path, mime: Mime}) :- media_mime(Path, Mime).
|
|
3654
3815
|
|
|
3655
3816
|
%% media_mime(+Path, -Mime)
|
|
@@ -3657,6 +3818,7 @@ media_dict(Path, media{path: Path, mime: Mime}) :- media_mime(Path, Mime).
|
|
|
3657
3818
|
media_mime(Path, Mime) :-
|
|
3658
3819
|
( string(Path) -> atom_string(Atom, Path) ; Atom = Path ),
|
|
3659
3820
|
( sub_atom(Atom, _, _, 0, '.png') -> Mime = "image/png"
|
|
3821
|
+
; sub_atom(Atom, _, _, 0, '.svg') -> Mime = "image/svg+xml"
|
|
3660
3822
|
; sub_atom(Atom, _, _, 0, '.jpg') -> Mime = "image/jpeg"
|
|
3661
3823
|
; sub_atom(Atom, _, _, 0, '.jpeg') -> Mime = "image/jpeg"
|
|
3662
3824
|
; sub_atom(Atom, _, _, 0, '.gif') -> Mime = "image/gif"
|
|
@@ -3676,6 +3838,29 @@ mi_call(answer(Text), StateIn, StateIn) :-
|
|
|
3676
3838
|
engine_yield(answer(InterpText)),
|
|
3677
3839
|
throw('$answer_commit').
|
|
3678
3840
|
|
|
3841
|
+
%% mi_call(output(Media), +StateIn, -StateOut)
|
|
3842
|
+
%% Present an image instead of text: `output(media(Path, Mime))`, `output(media(Path))`,
|
|
3843
|
+
%% or a dict form (`media{svg: Svg}`, `media{data: Base64, mime: Mime}`). The host
|
|
3844
|
+
%% renders it inline (kitty/iTerm2) or reports the path.
|
|
3845
|
+
%% This clause must come before the generic `output(Text)` clause; it fails
|
|
3846
|
+
%% through for anything that is not a media reference.
|
|
3847
|
+
mi_call(output(Media), StateIn, StateIn) :-
|
|
3848
|
+
nonvar(Media),
|
|
3849
|
+
( Media = media(_, _)
|
|
3850
|
+
; Media = media(_)
|
|
3851
|
+
; is_dict(Media)
|
|
3852
|
+
),
|
|
3853
|
+
media_dict(Media, Dict),
|
|
3854
|
+
!,
|
|
3855
|
+
get_dict(mime, Dict, Mime),
|
|
3856
|
+
get_dict(path, Dict, Path),
|
|
3857
|
+
( get_dict(data, Dict, Data) -> true ; Data = "" ),
|
|
3858
|
+
( get_dict(kind, Dict, Kind) -> true ; Kind = file ),
|
|
3859
|
+
get_session_id(SessionId),
|
|
3860
|
+
get_depth(StateIn, Depth),
|
|
3861
|
+
add_trace_entry(SessionId, media, media, [Path], Depth),
|
|
3862
|
+
engine_yield(media(media{path: Path, mimeType: Mime, kind: Kind, data: Data})).
|
|
3863
|
+
|
|
3679
3864
|
%% mi_call(output(Text), +StateIn, -StateOut)
|
|
3680
3865
|
mi_call(output(Text), StateIn, StateIn) :-
|
|
3681
3866
|
get_params(StateIn, Params),
|
|
@@ -4419,6 +4604,7 @@ is_mi_special_predicate(system(_)).
|
|
|
4419
4604
|
is_mi_special_predicate(user(_)). %% Add user message to context
|
|
4420
4605
|
is_mi_special_predicate(read_media(_,_)).
|
|
4421
4606
|
is_mi_special_predicate(attach_media(_)).
|
|
4607
|
+
is_mi_special_predicate(save_image(_,_)).
|
|
4422
4608
|
is_mi_special_predicate(task(_)).
|
|
4423
4609
|
is_mi_special_predicate(task(_,_)).
|
|
4424
4610
|
is_mi_special_predicate(task(_,_,_)).
|
|
@@ -4442,6 +4628,7 @@ is_mi_special_predicate(with_tools(_,_)).
|
|
|
4442
4628
|
is_mi_special_predicate(without_tools(_,_)).
|
|
4443
4629
|
%% Reasoning effort scoping
|
|
4444
4630
|
is_mi_special_predicate(with_reasoning(_,_)).
|
|
4631
|
+
is_mi_special_predicate(with_model(_,_)).
|
|
4445
4632
|
%% Recipe context scoping
|
|
4446
4633
|
is_mi_special_predicate(with_recipe(_,_)).
|
|
4447
4634
|
%% Semantic judgment predicates
|