turbollm 1.13.7 → 1.14.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 +23 -0
- package/dist/{chunk-FJDRILNH.js → chunk-P2FJIT7T.js} +26 -9
- package/dist/{chunk-5IU2DOOW.js → chunk-PJPEPLCC.js} +53 -2
- package/dist/cli.js +2262 -591
- package/dist/code-routes.js +1 -1
- package/dist/code-run-manager.js +1 -1
- package/dist/{distiller-3S34HCI6.js → distiller-VMWKFGZ3.js} +1 -1
- package/dist/webdist/assets/{AgentEditPage-E7HtOsup.js → AgentEditPage-Cwa-zL38.js} +1 -1
- package/dist/webdist/assets/{ChatScreen-dEouSpAv.js → ChatScreen-Bc_Yl9Sx.js} +9 -9
- package/dist/webdist/assets/CodeComposer-C6DyfH1r.js +1 -0
- package/dist/webdist/assets/CodeHomeScreen-b_zDL9RG.js +1 -0
- package/dist/webdist/assets/{CodeSessionScreen-BX1Eaqga.js → CodeSessionScreen-8b2Ge4ie.js} +11 -11
- package/dist/webdist/assets/CustomizeScreen-C5nkAICY.js +4 -0
- package/dist/webdist/assets/EnginesScreen-Up11ZhyB.js +10 -0
- package/dist/webdist/assets/HardwareSection-OH0TJi_Z.js +1 -0
- package/dist/webdist/assets/JevPlaygroundScreen-BREsXz9q.js +4 -0
- package/dist/webdist/assets/ModelDetailDialog-B1JcClTY.js +1 -0
- package/dist/webdist/assets/ModelLoadMenu-CwIOXYXO.js +1 -0
- package/dist/webdist/assets/ModelsScreen-DQwvBWif.js +2 -0
- package/dist/webdist/assets/OnboardingScreen-BqE0BT90.js +1 -0
- package/dist/webdist/assets/RoutineEditPage-DdZEKfQD.js +1 -0
- package/dist/webdist/assets/RoutinesPanel-BDGU4Lcb.js +1 -0
- package/dist/webdist/assets/SettingsScreen-DAeKSCFf.js +2 -0
- package/dist/webdist/assets/SidebarResizeHandle-0RTQMpIq.js +2 -0
- package/dist/webdist/assets/{SkillEditPage-CCtOQTmq.js → SkillEditPage-D0GorNvr.js} +1 -1
- package/dist/webdist/assets/{ToolApprovalBar-PlYgG25-.js → ToolApprovalBar-OKYB_ZAA.js} +15 -15
- package/dist/webdist/assets/WorkspaceScreen-DMAN9bBt.js +1 -0
- package/dist/webdist/assets/{abnfDiagram-N423BO3Z-DsZ93mAM.js → abnfDiagram-N423BO3Z-XHFTI65L.js} +1 -1
- package/dist/webdist/assets/{agent-api-BQn5nZNX.js → agent-api-DOk_QFal.js} +1 -1
- package/dist/webdist/assets/{arc-BGrHHnrw.js → arc-CNkBhygf.js} +1 -1
- package/dist/webdist/assets/{architectureDiagram-T3A2C74G-Ey1UrzU-.js → architectureDiagram-T3A2C74G-DhS0yd8i.js} +1 -1
- package/dist/webdist/assets/badge-BLWWKpdD.js +1 -0
- package/dist/webdist/assets/{blockDiagram-VBNYF7ZC-D78LM23z.js → blockDiagram-VBNYF7ZC-Da4dRXQ_.js} +1 -1
- package/dist/webdist/assets/{c4Diagram-5PPSVZJV-CvPfXzDr.js → c4Diagram-5PPSVZJV-DZlyWoX0.js} +1 -1
- package/dist/webdist/assets/channel-Dd7EBACN.js +1 -0
- package/dist/webdist/assets/{chat-api-BKO4BTWe.js → chat-api-CH2dRFBP.js} +1 -1
- package/dist/webdist/assets/chat-queries-BNmg0pO8.js +1 -0
- package/dist/webdist/assets/{chevron-down-SLGilXKT.js → chevron-down-CvGX_-uJ.js} +1 -1
- package/dist/webdist/assets/{chevron-left-CU5U4gIb.js → chevron-left-DOsYIFeW.js} +1 -1
- package/dist/webdist/assets/{chevron-right-BY4anLEq.js → chevron-right-COyiGhAj.js} +1 -1
- package/dist/webdist/assets/{chunk-2GRJ4B5K-P3cu6Bc0.js → chunk-2GRJ4B5K-C9h1bvfm.js} +1 -1
- package/dist/webdist/assets/{chunk-2Q5K7J3B-BgP7AimG.js → chunk-2Q5K7J3B-BMmm-jOe.js} +1 -1
- package/dist/webdist/assets/{chunk-5RXB4S5H-B-FXWALA.js → chunk-5RXB4S5H-DHORQmlT.js} +1 -1
- package/dist/webdist/assets/{chunk-5VM5RSS4-C-lQ75_C.js → chunk-5VM5RSS4-Di4-RCdG.js} +1 -1
- package/dist/webdist/assets/{chunk-6Q2QTUOP-Cv-tXjKv.js → chunk-6Q2QTUOP-CBDkYNQ8.js} +1 -1
- package/dist/webdist/assets/{chunk-GF5L2VYU-C3sxcn3E.js → chunk-GF5L2VYU-BBX-ZTlB.js} +1 -1
- package/dist/webdist/assets/{chunk-JWPE2WC7-C-AvRcoC.js → chunk-JWPE2WC7-CVxwbspM.js} +1 -1
- package/dist/webdist/assets/{chunk-KBJHAD2P-DMDEB7Sy.js → chunk-KBJHAD2P-Oo5VRh3b.js} +1 -1
- package/dist/webdist/assets/{chunk-RYQCIY6F-DX_4YbYG.js → chunk-RYQCIY6F-Bf2E5f4L.js} +1 -1
- package/dist/webdist/assets/{chunk-XXDRQBXY-C-C12qlP.js → chunk-XXDRQBXY-DpxzpFS3.js} +1 -1
- package/dist/webdist/assets/{circle-check-D0IMfrYq.js → circle-check-sJ35WLnC.js} +1 -1
- package/dist/webdist/assets/{circle-x-pqL2JhJm.js → circle-x-hbELBZ-8.js} +1 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-CvUjZ1BS.js +1 -0
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-CvUjZ1BS.js +1 -0
- package/dist/webdist/assets/collapsible-iTZnDqcl.js +1 -0
- package/dist/webdist/assets/common-BgZzRAuV.js +1 -0
- package/dist/webdist/assets/{cose-bilkent-JH36ORCC-0_jV9L5K.js → cose-bilkent-JH36ORCC-DRPykHKI.js} +1 -1
- package/dist/webdist/assets/{cynefin-VYW2F7L2-D-cQNJqC.js → cynefin-VYW2F7L2-Bf5rHv2Z.js} +1 -1
- package/dist/webdist/assets/{cynefinDiagram-MW4NZA55-QRp_3yKa.js → cynefinDiagram-MW4NZA55-i0FqYmRg.js} +1 -1
- package/dist/webdist/assets/{dagre-VZM6K2ZE-DYHS_FuW.js → dagre-VZM6K2ZE-CMbhTMZ4.js} +1 -1
- package/dist/webdist/assets/{diagram-7IWD3JNH-js1EUUk6.js → diagram-7IWD3JNH-CsOv9oXF.js} +1 -1
- package/dist/webdist/assets/{diagram-B4RE2ZJO-BHVEhFez.js → diagram-B4RE2ZJO-Dh_nM4nT.js} +1 -1
- package/dist/webdist/assets/{diagram-LBJQPF4R-Cc-5wAwq.js → diagram-LBJQPF4R-kpDBpfMN.js} +1 -1
- package/dist/webdist/assets/{diagram-Q27KOJAE-jTxFyyeN.js → diagram-Q27KOJAE-DsoOGsDe.js} +1 -1
- package/dist/webdist/assets/{diagram-UB23O5K3-LP8zrNnQ.js → diagram-UB23O5K3-Dm3BTmfy.js} +1 -1
- package/dist/webdist/assets/{dropdown-menu-IOTY3_-B.js → dropdown-menu-CbF1OiRs.js} +1 -1
- package/dist/webdist/assets/{ebnfDiagram-BXEA7PRR-qDNqlger.js → ebnfDiagram-BXEA7PRR-BuzsXY7o.js} +1 -1
- package/dist/webdist/assets/{erDiagram-JOGREHBK-owRtaAi_.js → erDiagram-JOGREHBK-xNT1gtBK.js} +1 -1
- package/dist/webdist/assets/{file-text-BotUNsIW.js → file-text-7zVScZD1.js} +1 -1
- package/dist/webdist/assets/{flowDiagram-UKHOOZJN-D26LSAka.js → flowDiagram-UKHOOZJN-CQY8WhcV.js} +1 -1
- package/dist/webdist/assets/{folder-input-D3qEcRaK.js → folder-input-CaZXVybt.js} +1 -1
- package/dist/webdist/assets/{folder-plus-4hzyN--0.js → folder-plus-D-kUUPUg.js} +1 -1
- package/dist/webdist/assets/{ganttDiagram-PKOTCBZU-FOBYQpFD.js → ganttDiagram-PKOTCBZU-C_iuCo8m.js} +1 -1
- package/dist/webdist/assets/{git-branch-CSkwfOC2.js → git-branch-BAuPsOG-.js} +1 -1
- package/dist/webdist/assets/{gitGraphDiagram-DS77QQ5N-D1pwlyQx.js → gitGraphDiagram-DS77QQ5N-BnzkkDM-.js} +1 -1
- package/dist/webdist/assets/{globe-BvQjzBKb.js → globe-tqOR-8Fp.js} +1 -1
- package/dist/webdist/assets/{index-Bs1-t0Ft.js → index-BAqhUJky.js} +1 -1
- package/dist/webdist/assets/index-BoD2hVgN.css +1 -0
- package/dist/webdist/assets/index-CgxaB3Gh.js +15 -0
- package/dist/webdist/assets/{infoDiagram-6WML65LV-DAxebGLC.js → infoDiagram-6WML65LV-BfOOh49N.js} +1 -1
- package/dist/webdist/assets/{ishikawaDiagram-WSZJBQD7-DIdOYDDr.js → ishikawaDiagram-WSZJBQD7-DWrnYaz5.js} +1 -1
- package/dist/webdist/assets/{journeyDiagram-NVQOT4AX-BLvkNn5k.js → journeyDiagram-NVQOT4AX-Cykxha8K.js} +1 -1
- package/dist/webdist/assets/{kanban-definition-27J2QSJJ-DKyJQb6a.js → kanban-definition-27J2QSJJ-B_u2ZkKD.js} +1 -1
- package/dist/webdist/assets/{linear-sR1aOS-1.js → linear-CCF9Cm7E.js} +1 -1
- package/dist/webdist/assets/{lock-K-a91AFa.js → lock-knxG_35Q.js} +1 -1
- package/dist/webdist/assets/{mermaid.core-sVxlfu4j.js → mermaid.core-hpcIlkU_.js} +4 -4
- package/dist/webdist/assets/{mindmap-definition-FAOFIHXS-Yo_cYEEu.js → mindmap-definition-FAOFIHXS-Bo6uupGZ.js} +1 -1
- package/dist/webdist/assets/model-kind-DfGaG8Om.js +1 -0
- package/dist/webdist/assets/{monitor-_13VL1du.js → monitor-h6B1Mhx_.js} +1 -1
- package/dist/webdist/assets/{pegDiagram-VL7TDLO6-BSAx7r44.js → pegDiagram-VL7TDLO6-CmaR_a28.js} +1 -1
- package/dist/webdist/assets/{pencil-CshqlsN6.js → pencil-Bcc9OQIw.js} +1 -1
- package/dist/webdist/assets/{personas-CFMpT4jP.js → personas-Ax5CJgp-.js} +1 -1
- package/dist/webdist/assets/{pieDiagram-7S7Q4E2Y-DJDpIi_G.js → pieDiagram-7S7Q4E2Y-BRwAkrJv.js} +1 -1
- package/dist/webdist/assets/{quadrantDiagram-CIZ2JOQS-BYUOd1Ld.js → quadrantDiagram-CIZ2JOQS-ltrBwN2e.js} +1 -1
- package/dist/webdist/assets/{radix-B7FN0WwE.js → radix-KD8-DhVi.js} +2 -2
- package/dist/webdist/assets/{railroadDiagram-AXF67PYL-Cp7ActLQ.js → railroadDiagram-AXF67PYL-BJnzgPB2.js} +1 -1
- package/dist/webdist/assets/{refresh-cw-BgvgHNs_.js → refresh-cw-BhFglZpi.js} +1 -1
- package/dist/webdist/assets/remote-failure-Cln9acAA.js +1 -0
- package/dist/webdist/assets/{requirementDiagram-LRYGKXZP-BRIn9Bao.js → requirementDiagram-LRYGKXZP-C5ahe8aN.js} +1 -1
- package/dist/webdist/assets/{rocket-Bdyspsau.js → rocket-DatVWRvk.js} +1 -1
- package/dist/webdist/assets/{rotate-ccw-CXchjxoU.js → rotate-ccw-vrFQeroT.js} +1 -1
- package/dist/webdist/assets/{sankeyDiagram-W5VNT64P-DrfFnEda.js → sankeyDiagram-W5VNT64P-DIrucd4o.js} +1 -1
- package/dist/webdist/assets/{sequenceDiagram-SI44F4Z6-BRvCwGTa.js → sequenceDiagram-SI44F4Z6-NZ2lgqIC.js} +1 -1
- package/dist/webdist/assets/sheet-Cls7ZzjB.js +1 -0
- package/dist/webdist/assets/{sizeCapture-X5ZJPWSS-BLSbFiEe.js → sizeCapture-X5ZJPWSS-BR-pPk3k.js} +1 -1
- package/dist/webdist/assets/skeleton-B0RuU-NT.js +1 -0
- package/dist/webdist/assets/{sliders-horizontal-X0H751ey.js → sliders-horizontal-BTgEAYjk.js} +1 -1
- package/dist/webdist/assets/{sparkles-B57ip_p2.js → sparkles-zNEWlBS7.js} +1 -1
- package/dist/webdist/assets/{star-DFChWJ1H.js → star-DqSiDQYi.js} +1 -1
- package/dist/webdist/assets/{stateDiagram-OKZ733FA-dWf7zqCN.js → stateDiagram-OKZ733FA-BzhDztc8.js} +1 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-CcnhkGux.js +1 -0
- package/dist/webdist/assets/{swimlanes-SLNWSIFB-lCDiXKRw.js → swimlanes-SLNWSIFB-4YPENUjd.js} +2 -2
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-CkFtsRtE.js +8 -0
- package/dist/webdist/assets/{switch-1qn4bGLW.js → switch-BMiiAxbI.js} +1 -1
- package/dist/webdist/assets/{terminal-BiLS4W9p.js → terminal-BI0KvmWZ.js} +1 -1
- package/dist/webdist/assets/{timeline-definition-Z64GVDOM-DSxynxhf.js → timeline-definition-Z64GVDOM-Bdm_1AE1.js} +1 -1
- package/dist/webdist/assets/{trash-2-JXgZx0Gm.js → trash-2-_mCrc_yU.js} +1 -1
- package/dist/webdist/assets/{useIsDesktop-DAdBFmSY.js → useIsDesktop-DrrTyUa5.js} +1 -1
- package/dist/webdist/assets/{vendor-C1I6euDx.js → vendor-DbyaiIiX.js} +2 -2
- package/dist/webdist/assets/{vennDiagram-T6HMQDX7-AFtVyBx_.js → vennDiagram-T6HMQDX7-C_hXfFgj.js} +1 -1
- package/dist/webdist/assets/{wardleyDiagram-T6FBY63Y-Bi_TjYlH.js → wardleyDiagram-T6FBY63Y-Dkrk5amJ.js} +1 -1
- package/dist/webdist/assets/{wrench-C6y9CDpZ.js → wrench-BOFcMR_W.js} +1 -1
- package/dist/webdist/assets/{xychartDiagram-ELKLHX3M-BaREW8xI.js → xychartDiagram-ELKLHX3M-DD1iYy6L.js} +1 -1
- package/dist/webdist/index.html +4 -4
- package/package.json +2 -2
- package/dist/webdist/assets/CodeComposer-CkqctDdp.js +0 -1
- package/dist/webdist/assets/CodeHomeScreen-W_lZHAT2.js +0 -1
- package/dist/webdist/assets/CustomizeScreen-BszOveS0.js +0 -4
- package/dist/webdist/assets/EnginesScreen-C3Tr39oE.js +0 -10
- package/dist/webdist/assets/HardwareSection-Cvzgs-RM.js +0 -1
- package/dist/webdist/assets/ModelDetailDialog-CQ_x0n0p.js +0 -1
- package/dist/webdist/assets/ModelLoadMenu-Lir_ZeaD.js +0 -1
- package/dist/webdist/assets/ModelsScreen-BwzqukhW.js +0 -2
- package/dist/webdist/assets/OnboardingScreen-Df_1EYOW.js +0 -1
- package/dist/webdist/assets/RoutineEditPage-CdZnyBEw.js +0 -1
- package/dist/webdist/assets/RoutinesPanel-CBOpHq9E.js +0 -1
- package/dist/webdist/assets/SettingsScreen-Bhih9go0.js +0 -2
- package/dist/webdist/assets/SidebarResizeHandle-CNnIPZEp.js +0 -2
- package/dist/webdist/assets/WorkspaceScreen-CqmBBbxz.js +0 -1
- package/dist/webdist/assets/alert-dialog-D9Z7ppH_.js +0 -1
- package/dist/webdist/assets/channel-DCuz_wdC.js +0 -1
- package/dist/webdist/assets/chat-queries-CqiPDqGV.js +0 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-DFsr_nh-.js +0 -1
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-DFsr_nh-.js +0 -1
- package/dist/webdist/assets/collapsible-Bwm3DfUf.js +0 -1
- package/dist/webdist/assets/index-A9e9aiYI.css +0 -1
- package/dist/webdist/assets/index-CXLOA4-7.js +0 -14
- package/dist/webdist/assets/link-constants-CbmzSBFF.js +0 -1
- package/dist/webdist/assets/remote-failure-CU6FQAv2.js +0 -1
- package/dist/webdist/assets/sheet-BEHvWodM.js +0 -1
- package/dist/webdist/assets/skeleton-_WE_l7Ss.js +0 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-CQPsdlPu.js +0 -1
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-CzicNSYv.js +0 -8
package/README.md
CHANGED
|
@@ -368,6 +368,29 @@ there. Entirely local; nothing leaves your machine.
|
|
|
368
368
|
|
|
369
369
|
</details>
|
|
370
370
|
|
|
371
|
+
<details>
|
|
372
|
+
<summary><strong>🧠 Jev — ask structured questions about any text, locally</strong></summary>
|
|
373
|
+
|
|
374
|
+
<br/>
|
|
375
|
+
|
|
376
|
+
- **Load an NLI model (such as OpenJev) and TurboLLM detects it as a Jev model.** Workspace turns
|
|
377
|
+
into a JSON-first playground: two editors — the content, and the questions you're asking about
|
|
378
|
+
it — *are* the request. Ctrl/Cmd+Enter to run; see the answers per question, the raw response,
|
|
379
|
+
and a copyable `curl`.
|
|
380
|
+
- **`POST /v1/systemone`** answers yes/no, pick-one, and scale questions in one call, using the
|
|
381
|
+
public System One API's exact field names — a client written for that shape only changes its
|
|
382
|
+
base URL and key. `POST /v1/classify` and `POST /v1/rerank` are there too for raw
|
|
383
|
+
premise/hypothesis work.
|
|
384
|
+
- **Honestly labelled:** answers are the model's NLI entailment scores, not a calibrated decision
|
|
385
|
+
model, and the docs explain exactly how each number is computed.
|
|
386
|
+
- Runs on vLLM (Linux or WSL2). Full guide: <https://turbollm.dev/docs/jev>.
|
|
387
|
+
- **Laya decision models, too** ([convaiinnovations/laya](https://huggingface.co/convaiinnovations/laya)):
|
|
388
|
+
- What it is: a calibrated System One model that answers the same `/v1/systemone` questions in 100+ languages.
|
|
389
|
+
- Where it runs: on its own Laya engine (Engines page; Windows, macOS, Linux; CPU or GPU), beside your chat model.
|
|
390
|
+
- How to get it: search "laya" in Discover. The playground opens from the Workspace sidebar while it is loaded.
|
|
391
|
+
|
|
392
|
+
</details>
|
|
393
|
+
|
|
371
394
|
<details>
|
|
372
395
|
<summary><strong>🔌 APIs & integrations — OpenAI + Anthropic, a model-loading gateway, and a stateful chat API</strong></summary>
|
|
373
396
|
|
|
@@ -195,6 +195,14 @@ function resolveChatUpstream(d, requestedModel) {
|
|
|
195
195
|
if (ms.state !== "running" || !ms.model) {
|
|
196
196
|
return { ok: false, status: 409, code: "model_not_loaded", message: "Load a model first." };
|
|
197
197
|
}
|
|
198
|
+
if (d.scanner.get(ms.model.key)?.jev) {
|
|
199
|
+
return {
|
|
200
|
+
ok: false,
|
|
201
|
+
status: 409,
|
|
202
|
+
code: "jev_model_loaded",
|
|
203
|
+
message: "A Jev model is loaded \u2014 it labels text and cannot chat. Switch to a chat model, or use the Jev Playground."
|
|
204
|
+
};
|
|
205
|
+
}
|
|
198
206
|
const target = d.manager.target();
|
|
199
207
|
if (!target) {
|
|
200
208
|
return { ok: false, status: 409, code: "model_not_loaded", message: "Engine not running." };
|
|
@@ -1520,13 +1528,17 @@ import { join as join10 } from "path";
|
|
|
1520
1528
|
var BENCH_RATE_LIMIT_MS = 60 * 60 * 1e3;
|
|
1521
1529
|
|
|
1522
1530
|
// src/models/scanner.ts
|
|
1523
|
-
import { existsSync as
|
|
1531
|
+
import { existsSync as existsSync8, lstatSync as lstatSync2, readdirSync as readdirSync5, readFileSync as readFileSync8, realpathSync as realpathSync2, rmSync as rmSync4, writeFileSync as writeFileSync6 } from "fs";
|
|
1524
1532
|
import { readdir, realpath, stat } from "fs/promises";
|
|
1525
|
-
import { basename as
|
|
1533
|
+
import { basename as basename3, dirname as dirname4, isAbsolute, join as join12, relative, resolve as resolve2, sep as sep2 } from "path";
|
|
1526
1534
|
|
|
1527
1535
|
// src/gguf/gguf.ts
|
|
1528
1536
|
import { closeSync, openSync, readSync } from "fs";
|
|
1529
1537
|
|
|
1538
|
+
// src/models/laya.ts
|
|
1539
|
+
import { existsSync as existsSync7, lstatSync, readFileSync as readFileSync7 } from "fs";
|
|
1540
|
+
import { basename as basename2, join as join11 } from "path";
|
|
1541
|
+
|
|
1530
1542
|
// src/models/profile.ts
|
|
1531
1543
|
var ROCM_APU_NOMMAP_MIN_BYTES = 30 * 1024 ** 3;
|
|
1532
1544
|
|
|
@@ -1596,7 +1608,7 @@ async function autoTitleFromConversation(d, convId) {
|
|
|
1596
1608
|
}
|
|
1597
1609
|
|
|
1598
1610
|
// src/code/code-session.ts
|
|
1599
|
-
import { join as
|
|
1611
|
+
import { join as join13, resolve as resolve3 } from "path";
|
|
1600
1612
|
import { readFile as readFile3 } from "fs/promises";
|
|
1601
1613
|
import { Type, Unsafe } from "typebox";
|
|
1602
1614
|
import {
|
|
@@ -1909,7 +1921,7 @@ var CREATE_ROUTINE_TOOL = {
|
|
|
1909
1921
|
prompt: { type: "string", description: "The task to run, in the same words a user would ask it." },
|
|
1910
1922
|
scheduleDisplay: { type: "string", description: 'Human-readable schedule, e.g. "Runs weekdays at 9:00 AM". Must accurately describe scheduleRule.' },
|
|
1911
1923
|
scheduleRule: SCHEDULE_RULE_SCHEMA,
|
|
1912
|
-
modelKey: { type: "string", description: `One of TurboLLM's own model keys \u2014 a compound id (e.g. "gemma 4 26b a4b qat|Q4_0|14439362752"), never a generic name like "gpt-4" or "claude". Call list_models first if you don't already know a real one; never guess.` },
|
|
1924
|
+
modelKey: { type: "string", description: `One of TurboLLM's own model keys \u2014 a compound id (e.g. "gemma 4 26b a4b qat|Q4_0|14439362752"), never a generic name like "gpt-4" or "claude". Call list_models first if you don't already know a real one; never guess. Never pick a model list_models marks "kind: jev" \u2014 it labels text and cannot run a routine.` },
|
|
1913
1925
|
agentId: { type: "string", description: 'Required when flavor is "chat": an existing Customize -> Agents persona id.' },
|
|
1914
1926
|
workspacePath: { type: "string", description: 'Required when flavor is "code": absolute path to the workspace directory.' },
|
|
1915
1927
|
// Driven off schema.ts's list, not a second hand-maintained copy: this enum is what a MODEL
|
|
@@ -2418,7 +2430,7 @@ async function runCodeSession(params) {
|
|
|
2418
2430
|
console.warn(`[code-session] history seed for session ${sessionId} produced ${sessionManager.getEntries().length}/${expectedEntries} expected entries \u2014 falling back to a plain-text history prefix on this turn's prompt`);
|
|
2419
2431
|
task = `${HISTORY_FALLBACK_PREFIX}${renderHistoryFallbackText(summaryText, priorMessages)}${HISTORY_FALLBACK_SUFFIX}${rawTask}`;
|
|
2420
2432
|
}
|
|
2421
|
-
const agentDir =
|
|
2433
|
+
const agentDir = join13(d.store.dir(), "pi-agent");
|
|
2422
2434
|
modelRegistry.registerProvider("local", {
|
|
2423
2435
|
...upstream.provider,
|
|
2424
2436
|
api: "openai-completions",
|
|
@@ -2545,7 +2557,7 @@ async function runCodeSession(params) {
|
|
|
2545
2557
|
await sink({ event: "tool_call", data });
|
|
2546
2558
|
});
|
|
2547
2559
|
};
|
|
2548
|
-
const skillAgentDir =
|
|
2560
|
+
const skillAgentDir = join13(d.store.dir(), "pi-agent");
|
|
2549
2561
|
const skillResourceLoader = new DefaultResourceLoader({
|
|
2550
2562
|
cwd: repoRoot,
|
|
2551
2563
|
agentDir: skillAgentDir,
|
|
@@ -2686,7 +2698,7 @@ async function runCodeSession(params) {
|
|
|
2686
2698
|
await sink({ event: "tool_call", data });
|
|
2687
2699
|
});
|
|
2688
2700
|
};
|
|
2689
|
-
const subAgentDir =
|
|
2701
|
+
const subAgentDir = join13(d.store.dir(), "pi-agent");
|
|
2690
2702
|
const subResourceLoader = new DefaultResourceLoader({
|
|
2691
2703
|
cwd: repoRoot,
|
|
2692
2704
|
agentDir: subAgentDir,
|
|
@@ -3341,7 +3353,7 @@ async function compactCodeSession(params) {
|
|
|
3341
3353
|
return payload;
|
|
3342
3354
|
});
|
|
3343
3355
|
};
|
|
3344
|
-
const compactAgentDir =
|
|
3356
|
+
const compactAgentDir = join13(d.store.dir(), "pi-agent");
|
|
3345
3357
|
const compactResourceLoader = new DefaultResourceLoader({
|
|
3346
3358
|
cwd: repoRoot,
|
|
3347
3359
|
agentDir: compactAgentDir,
|
|
@@ -3440,7 +3452,7 @@ async function lookbackPreCompactionHistory(params) {
|
|
|
3440
3452
|
return payload;
|
|
3441
3453
|
});
|
|
3442
3454
|
};
|
|
3443
|
-
const lookbackAgentDir =
|
|
3455
|
+
const lookbackAgentDir = join13(d.store.dir(), "pi-agent");
|
|
3444
3456
|
const lookbackResourceLoader = new DefaultResourceLoader({
|
|
3445
3457
|
cwd: repoRoot,
|
|
3446
3458
|
agentDir: lookbackAgentDir,
|
|
@@ -3602,6 +3614,11 @@ var CodeRunManager = class {
|
|
|
3602
3614
|
}
|
|
3603
3615
|
return false;
|
|
3604
3616
|
}
|
|
3617
|
+
/** Every session mid-turn (running or queued) — the per-session form of {@link anyActive}, for
|
|
3618
|
+
* the active-work probe that names what a model load would interrupt (ADR-434 (i)(3)). */
|
|
3619
|
+
activeSessionIds() {
|
|
3620
|
+
return [...this.sessions.keys()].filter((id) => this.isActive(id));
|
|
3621
|
+
}
|
|
3605
3622
|
/** The turns currently WAITING behind the active turn (not the running one) — the server-side
|
|
3606
3623
|
* message queue, surfaced to the UI so its "Queued" chips survive a disconnect. `userMsgId`
|
|
3607
3624
|
* (not just index) identifies each entry so a per-chip action (sendNow) can target one
|
|
@@ -5,11 +5,62 @@ import { readFileSync, readdirSync, statSync, existsSync } from "fs";
|
|
|
5
5
|
import { join } from "path";
|
|
6
6
|
|
|
7
7
|
// src/engines/compat.ts
|
|
8
|
+
function modelIncompatibility(engineKind, entry) {
|
|
9
|
+
if (entry.format === "gguf" && entry.arch === GGMLC_ARCH) return GGMLC_GGUF;
|
|
10
|
+
if (entry.laya) return engineKind === "laya" ? null : NEEDS_LAYA;
|
|
11
|
+
if (entry.jev && engineKind !== "vllm") return NEEDS_VLLM;
|
|
12
|
+
if (!engineAcceptsFormat(engineKind, entry.format)) return formatIncompatibility(engineKind, entry.format);
|
|
13
|
+
if (entry.audio && engineRejectsAudioModel(engineKind)) return audioIncompatibility(engineKind);
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
var NEEDS_VLLM = {
|
|
17
|
+
code: "needs_vllm",
|
|
18
|
+
label: "Needs vLLM (Linux or WSL2)",
|
|
19
|
+
message: "This is a Jev model \u2014 it runs only on vLLM (Linux or WSL2). Activate a vLLM engine to load it."
|
|
20
|
+
};
|
|
21
|
+
var NEEDS_LAYA = {
|
|
22
|
+
code: "needs_laya",
|
|
23
|
+
label: "Needs the Laya engine",
|
|
24
|
+
message: "This is a Laya model \u2014 it runs only on the Laya engine. Install Laya from Engines to load it."
|
|
25
|
+
};
|
|
26
|
+
var GGMLC_ARCH = "ggmlc";
|
|
27
|
+
var GGMLC_GGUF = {
|
|
28
|
+
code: "format",
|
|
29
|
+
label: "ggmlc GGUF \u2014 not loadable",
|
|
30
|
+
message: "This GGUF uses the ggmlc architecture, which llama.cpp can't load. For Laya, download convaiinnovations/laya instead: it runs on the Laya engine."
|
|
31
|
+
};
|
|
32
|
+
var NEEDS_PYTHON_ENGINE_LABEL = "needs MLX or vLLM";
|
|
33
|
+
function formatIncompatibility(engineKind, format) {
|
|
34
|
+
const label = format === "gguf" ? "needs llama.cpp" : NEEDS_PYTHON_ENGINE_LABEL;
|
|
35
|
+
return { code: "format", label, message: formatMismatchMessage(engineKind, format) };
|
|
36
|
+
}
|
|
37
|
+
function formatMismatchMessage(engineKind, format) {
|
|
38
|
+
if (engineKind === "laya") return "The Laya engine runs only Laya models \u2014 load this one on another engine.";
|
|
39
|
+
if (engineKind === "mlx")
|
|
40
|
+
return "The active engine is MLX \u2014 pick a safetensors model, or switch to a llama.cpp engine for GGUF.";
|
|
41
|
+
if (engineKind === "rapid-mlx")
|
|
42
|
+
return "The active engine is Rapid-MLX \u2014 pick a safetensors model, or switch to a llama.cpp engine for GGUF.";
|
|
43
|
+
if (engineKind === "mlx-vlm")
|
|
44
|
+
return "The active engine is MLX-VLM \u2014 pick a safetensors model, or switch to a llama.cpp engine for GGUF.";
|
|
45
|
+
if (engineKind === "vllm")
|
|
46
|
+
return "The active engine is vLLM \u2014 pick a safetensors / HF model, or switch to a llama.cpp engine for GGUF.";
|
|
47
|
+
return format === "mlx" ? "This is a safetensors model \u2014 activate an MLX or vLLM engine to load it." : "The active engine can only load GGUF models.";
|
|
48
|
+
}
|
|
49
|
+
function audioIncompatibility(engineKind) {
|
|
50
|
+
const engineLabel = engineKind === "mlx-vlm" ? "MLX-VLM" : "Rapid-MLX";
|
|
51
|
+
const certainty = engineKind === "mlx-vlm" ? "is expected to fail" : "fails";
|
|
52
|
+
return {
|
|
53
|
+
code: "audio",
|
|
54
|
+
label: NEEDS_PYTHON_ENGINE_LABEL,
|
|
55
|
+
message: `${engineLabel} cannot load models with an audio tower \u2014 the audio encoder ${certainty} due to an upstream mlx-vlm bug in the sanitizer for these architectures. Switch to the MLX engine instead.`
|
|
56
|
+
};
|
|
57
|
+
}
|
|
8
58
|
function engineAcceptsFormat(engineKind, format) {
|
|
9
59
|
if (engineKind === "mlx") return format === "mlx";
|
|
10
60
|
if (engineKind === "rapid-mlx") return format === "mlx";
|
|
11
61
|
if (engineKind === "mlx-vlm") return format === "mlx";
|
|
12
62
|
if (engineKind === "vllm") return format === "mlx";
|
|
63
|
+
if (engineKind === "laya") return false;
|
|
13
64
|
return format === "gguf";
|
|
14
65
|
}
|
|
15
66
|
function engineRejectsAudioModel(engineKind) {
|
|
@@ -178,8 +229,8 @@ ${f.content}`);
|
|
|
178
229
|
}
|
|
179
230
|
|
|
180
231
|
export {
|
|
181
|
-
|
|
182
|
-
|
|
232
|
+
modelIncompatibility,
|
|
233
|
+
ENGINE_MODEL_ALIAS,
|
|
183
234
|
engineModelAlias,
|
|
184
235
|
evaluateVariant,
|
|
185
236
|
distillFromConversation,
|