turbollm 1.14.0 → 1.14.2
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 +15 -4
- package/dist/{chunk-J24U6O5Q.js → chunk-PJPEPLCC.js} +15 -0
- package/dist/{chunk-IX5FQWMQ.js → chunk-SEL52AIK.js} +26 -11
- package/dist/cli.js +1131 -490
- package/dist/code-routes.js +1 -1
- package/dist/code-run-manager.js +1 -1
- package/dist/{distiller-PS7TKBY6.js → distiller-VMWKFGZ3.js} +1 -1
- package/dist/webdist/assets/{AgentEditPage-DiJIyQ5c.js → AgentEditPage-tnUusLAh.js} +1 -1
- package/dist/webdist/assets/{ChatScreen-okIINvx9.js → ChatScreen-CVxY8mMP.js} +4 -4
- package/dist/webdist/assets/CodeComposer-B6CpZqDi.js +1 -0
- package/dist/webdist/assets/CodeHomeScreen-CZ4K1TeC.js +1 -0
- package/dist/webdist/assets/{CodeSessionScreen-C1iDX1Dz.js → CodeSessionScreen-Dorqtv3D.js} +3 -3
- package/dist/webdist/assets/CustomizeScreen-DAbZ0eB4.js +4 -0
- package/dist/webdist/assets/EnginesScreen-1NQSnakW.js +10 -0
- package/dist/webdist/assets/{HardwareSection-Dy-7b_gI.js → HardwareSection-D96Q5CZG.js} +1 -1
- package/dist/webdist/assets/JevPlaygroundScreen-0gTNSPQK.js +4 -0
- package/dist/webdist/assets/ModelDetailDialog-B7JlKrJO.js +1 -0
- package/dist/webdist/assets/{ModelLoadMenu-CUgsolzj.js → ModelLoadMenu-BnlNJNw-.js} +1 -1
- package/dist/webdist/assets/{ModelsScreen-DDtp63UR.js → ModelsScreen-DGpFp6S-.js} +2 -2
- package/dist/webdist/assets/OnboardingScreen-CCIJnIi5.js +1 -0
- package/dist/webdist/assets/RoutineEditPage-Co4_3XhP.js +1 -0
- package/dist/webdist/assets/RoutinesPanel-zJF-E6mo.js +1 -0
- package/dist/webdist/assets/SettingsScreen-D5cIWfQJ.js +2 -0
- package/dist/webdist/assets/SidebarResizeHandle-Dq_U6yuG.js +2 -0
- package/dist/webdist/assets/{SkillEditPage-Bd_elRU6.js → SkillEditPage-Ba2xDoam.js} +1 -1
- package/dist/webdist/assets/TextClassificationRuntimeLabel-BpYt4W5O.js +1 -0
- package/dist/webdist/assets/{ToolApprovalBar-CUotEGv6.js → ToolApprovalBar-DaK8QffX.js} +15 -15
- package/dist/webdist/assets/WorkspaceModeTabs-DTf4E0GA.js +1 -0
- package/dist/webdist/assets/WorkspaceScreen-9HSZ7UHW.js +1 -0
- package/dist/webdist/assets/{abnfDiagram-N423BO3Z-D4qUs6KP.js → abnfDiagram-N423BO3Z-B1QGUB6J.js} +1 -1
- package/dist/webdist/assets/{agent-api-wjr1CSL9.js → agent-api-BEBWhAbY.js} +1 -1
- package/dist/webdist/assets/{arc-Dez50YO9.js → arc-DLvgYZ6e.js} +1 -1
- package/dist/webdist/assets/{architectureDiagram-T3A2C74G-DmsRR1_Y.js → architectureDiagram-T3A2C74G-BmkrXymW.js} +1 -1
- package/dist/webdist/assets/arrow-down-DkZ95RMq.js +1 -0
- package/dist/webdist/assets/arrow-up-w6zrcoir.js +1 -0
- package/dist/webdist/assets/{badge-CksW7yOr.js → badge-DVKueHPN.js} +1 -1
- package/dist/webdist/assets/{blockDiagram-VBNYF7ZC-DVsOGm63.js → blockDiagram-VBNYF7ZC-LbNZcnRe.js} +1 -1
- package/dist/webdist/assets/{c4Diagram-5PPSVZJV-DuD2IKcf.js → c4Diagram-5PPSVZJV-De5pN9xg.js} +1 -1
- package/dist/webdist/assets/channel-mutI49t2.js +1 -0
- package/dist/webdist/assets/{chat-api-CUEHqc3o.js → chat-api-Dv-oqejk.js} +1 -1
- package/dist/webdist/assets/chat-queries-CewwIh0J.js +1 -0
- package/dist/webdist/assets/{chevron-down-CMthk8sq.js → chevron-down-DcmMmTn-.js} +1 -1
- package/dist/webdist/assets/{chevron-left-BHsjloFD.js → chevron-left-CoiCxQA4.js} +1 -1
- package/dist/webdist/assets/chevron-right-CmS3eOCE.js +1 -0
- package/dist/webdist/assets/{chunk-2GRJ4B5K-mCrgEnOk.js → chunk-2GRJ4B5K-DeY68X39.js} +1 -1
- package/dist/webdist/assets/{chunk-2Q5K7J3B-CB--nQz8.js → chunk-2Q5K7J3B-CuJ1CtX2.js} +1 -1
- package/dist/webdist/assets/{chunk-5RXB4S5H-npnDTsGI.js → chunk-5RXB4S5H-B8Zw950n.js} +1 -1
- package/dist/webdist/assets/{chunk-5VM5RSS4-Dy-_qijb.js → chunk-5VM5RSS4-KlDl74CQ.js} +1 -1
- package/dist/webdist/assets/{chunk-6Q2QTUOP-xi2-gUVB.js → chunk-6Q2QTUOP-BnNne1Os.js} +1 -1
- package/dist/webdist/assets/{chunk-GF5L2VYU-BhJKGS3t.js → chunk-GF5L2VYU-BDPSRdQv.js} +1 -1
- package/dist/webdist/assets/{chunk-JWPE2WC7-CgK6Phiy.js → chunk-JWPE2WC7-C2LUzMMw.js} +1 -1
- package/dist/webdist/assets/{chunk-KBJHAD2P-rJP8cgbH.js → chunk-KBJHAD2P-D84e5RM_.js} +1 -1
- package/dist/webdist/assets/{chunk-RYQCIY6F-LMXaxAUW.js → chunk-RYQCIY6F-B7nPmyRB.js} +1 -1
- package/dist/webdist/assets/{chunk-XXDRQBXY-Egaue6FK.js → chunk-XXDRQBXY-AmYmEQJP.js} +1 -1
- package/dist/webdist/assets/{circle-check-UpG6b-yk.js → circle-check-BRqW4CsL.js} +1 -1
- package/dist/webdist/assets/{circle-x-BbWW1cEW.js → circle-x-BN-0hIbm.js} +1 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-Bmu-KUGL.js +1 -0
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-Bmu-KUGL.js +1 -0
- package/dist/webdist/assets/{collapsible-Bvt-3Dje.js → collapsible-__N4cdCZ.js} +1 -1
- package/dist/webdist/assets/{common-7bKxHlFN.js → common-BQq8WPIb.js} +1 -1
- package/dist/webdist/assets/{cose-bilkent-JH36ORCC-BplRQRpJ.js → cose-bilkent-JH36ORCC-DhnDWmuW.js} +1 -1
- package/dist/webdist/assets/{cynefin-VYW2F7L2-BEssnT89.js → cynefin-VYW2F7L2-e0jhu0MI.js} +1 -1
- package/dist/webdist/assets/{cynefinDiagram-MW4NZA55-CmN23mXI.js → cynefinDiagram-MW4NZA55-DqjgK_iL.js} +1 -1
- package/dist/webdist/assets/{dagre-VZM6K2ZE-BnzVfHdw.js → dagre-VZM6K2ZE-BGNsCCES.js} +1 -1
- package/dist/webdist/assets/{diagram-7IWD3JNH-Bvf1BnM2.js → diagram-7IWD3JNH-CW6Q0snt.js} +1 -1
- package/dist/webdist/assets/{diagram-B4RE2ZJO-8CeAGkn6.js → diagram-B4RE2ZJO-B5c5yRvK.js} +1 -1
- package/dist/webdist/assets/{diagram-LBJQPF4R-C8UmzDjJ.js → diagram-LBJQPF4R-BIvlaKtx.js} +1 -1
- package/dist/webdist/assets/{diagram-Q27KOJAE-ExDIWzGa.js → diagram-Q27KOJAE-Czf-ye04.js} +1 -1
- package/dist/webdist/assets/{diagram-UB23O5K3-NTOlUSNM.js → diagram-UB23O5K3-DE3kHe-N.js} +1 -1
- package/dist/webdist/assets/{dropdown-menu-C7XdhXfN.js → dropdown-menu-COm_GkV7.js} +1 -1
- package/dist/webdist/assets/{ebnfDiagram-BXEA7PRR-DSLXnVcA.js → ebnfDiagram-BXEA7PRR-CqZvsQuG.js} +1 -1
- package/dist/webdist/assets/{erDiagram-JOGREHBK-C9N6ltou.js → erDiagram-JOGREHBK-yvYG3ngv.js} +1 -1
- package/dist/webdist/assets/{file-text-0lpSyfWS.js → file-text-B6FA7Q1h.js} +1 -1
- package/dist/webdist/assets/flask-conical-CaJ49MUq.js +1 -0
- package/dist/webdist/assets/{flowDiagram-UKHOOZJN-BEpdoBJK.js → flowDiagram-UKHOOZJN-Dnq_UKUn.js} +1 -1
- package/dist/webdist/assets/folder-input-TSd2AuPT.js +1 -0
- package/dist/webdist/assets/folder-plus-DphE2jL5.js +1 -0
- package/dist/webdist/assets/{ganttDiagram-PKOTCBZU-JBTZctPg.js → ganttDiagram-PKOTCBZU-CoRR11PO.js} +1 -1
- package/dist/webdist/assets/{git-branch-LGIPJBji.js → git-branch-CJq3lkZm.js} +1 -1
- package/dist/webdist/assets/{gitGraphDiagram-DS77QQ5N-BE8GgT4b.js → gitGraphDiagram-DS77QQ5N-BErio5T0.js} +1 -1
- package/dist/webdist/assets/{globe-BZvXG7nu.js → globe-B1_rJR_Q.js} +1 -1
- package/dist/webdist/assets/{index-DZjLhFsI.js → index-ClfLzd40.js} +11 -11
- package/dist/webdist/assets/index-DZoGFHn8.css +1 -0
- package/dist/webdist/assets/{infoDiagram-6WML65LV-CQK2P3-1.js → infoDiagram-6WML65LV-Cb2MPW4j.js} +1 -1
- package/dist/webdist/assets/{ishikawaDiagram-WSZJBQD7-JgMGUhtq.js → ishikawaDiagram-WSZJBQD7-5H19GA8p.js} +1 -1
- package/dist/webdist/assets/{journeyDiagram-NVQOT4AX-FJXvRlwV.js → journeyDiagram-NVQOT4AX-C5SgRgwd.js} +1 -1
- package/dist/webdist/assets/{kanban-definition-27J2QSJJ-DHUtWhPw.js → kanban-definition-27J2QSJJ-Ihe735zx.js} +1 -1
- package/dist/webdist/assets/{linear-BXMrvrnx.js → linear-BEPlpGMB.js} +1 -1
- package/dist/webdist/assets/{lock-BuQP3O8t.js → lock-BV0OSbIx.js} +1 -1
- package/dist/webdist/assets/{mermaid.core-S_RQyOsW.js → mermaid.core-Bt6veX0C.js} +4 -4
- package/dist/webdist/assets/{mindmap-definition-FAOFIHXS-D6uoAnSN.js → mindmap-definition-FAOFIHXS-DHHRM1bQ.js} +1 -1
- package/dist/webdist/assets/{monitor-B4zAo7OI.js → monitor-Balfhcw2.js} +1 -1
- package/dist/webdist/assets/{onboarding-pick-BLFfRRkr.js → onboarding-pick-DLiG5ctU.js} +1 -1
- package/dist/webdist/assets/{pegDiagram-VL7TDLO6-xbZuTOco.js → pegDiagram-VL7TDLO6-BLdGJ-f0.js} +1 -1
- package/dist/webdist/assets/pencil-CN48KHVw.js +1 -0
- package/dist/webdist/assets/{personas-CM56vmHR.js → personas-Cdtcei1Q.js} +2 -2
- package/dist/webdist/assets/{pieDiagram-7S7Q4E2Y-DNpMdzBT.js → pieDiagram-7S7Q4E2Y-BpObnryv.js} +1 -1
- package/dist/webdist/assets/{quadrantDiagram-CIZ2JOQS-DGwOFRyi.js → quadrantDiagram-CIZ2JOQS-CJOorRuX.js} +1 -1
- package/dist/webdist/assets/{railroadDiagram-AXF67PYL-CzB8w48H.js → railroadDiagram-AXF67PYL-BOkSU2J5.js} +1 -1
- package/dist/webdist/assets/{refresh-cw-BDzlGNDg.js → refresh-cw-CpaENY74.js} +1 -1
- package/dist/webdist/assets/{remote-failure-B7HGWJkJ.js → remote-failure-Le7JhpD3.js} +1 -1
- package/dist/webdist/assets/{requirementDiagram-LRYGKXZP-CmCwDIBl.js → requirementDiagram-LRYGKXZP-tCLGfIhr.js} +1 -1
- package/dist/webdist/assets/{rocket-D3uvOsNZ.js → rocket-D7qZYT9O.js} +1 -1
- package/dist/webdist/assets/rotate-ccw-DybvLiz1.js +1 -0
- package/dist/webdist/assets/{sankeyDiagram-W5VNT64P-DQNzMUJ3.js → sankeyDiagram-W5VNT64P-DzcuXSnA.js} +1 -1
- package/dist/webdist/assets/{sequenceDiagram-SI44F4Z6-CMrIVeVl.js → sequenceDiagram-SI44F4Z6-LJnZ3bL-.js} +1 -1
- package/dist/webdist/assets/sheet-DdZKjOeh.js +1 -0
- package/dist/webdist/assets/{sizeCapture-X5ZJPWSS-TjCLqzce.js → sizeCapture-X5ZJPWSS-B1_bl0TL.js} +1 -1
- package/dist/webdist/assets/{skeleton-Dxu5wc0L.js → skeleton-CglyWPQw.js} +1 -1
- package/dist/webdist/assets/sliders-horizontal-Xkfwi1fI.js +1 -0
- package/dist/webdist/assets/sparkles-AwLaRfcP.js +1 -0
- package/dist/webdist/assets/star-CT3XRE-k.js +1 -0
- package/dist/webdist/assets/{stateDiagram-OKZ733FA-DNMCj4tf.js → stateDiagram-OKZ733FA-CMVmr7Zf.js} +1 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-nLHfPOlr.js +1 -0
- package/dist/webdist/assets/{swimlanes-SLNWSIFB-CtvQNY0N.js → swimlanes-SLNWSIFB-o7LqgRkn.js} +2 -2
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-BiRBhEgu.js +8 -0
- package/dist/webdist/assets/{switch-DIadx8HA.js → switch-fLgUmJgY.js} +1 -1
- package/dist/webdist/assets/terminal-D2nV3CrY.js +1 -0
- package/dist/webdist/assets/{timeline-definition-Z64GVDOM-BrzE2nEM.js → timeline-definition-Z64GVDOM-NGvuXBQN.js} +1 -1
- package/dist/webdist/assets/trash-2-CV5t0bZP.js +1 -0
- package/dist/webdist/assets/{vennDiagram-T6HMQDX7-Bo6Xl6Hi.js → vennDiagram-T6HMQDX7-CnPGhl_y.js} +1 -1
- package/dist/webdist/assets/vram-BvF2RLge.js +1 -0
- package/dist/webdist/assets/{wardleyDiagram-T6FBY63Y-IOpBpINS.js → wardleyDiagram-T6FBY63Y-Q_r2y2GO.js} +1 -1
- package/dist/webdist/assets/wrench-BtzWmTcQ.js +1 -0
- package/dist/webdist/assets/{xychartDiagram-ELKLHX3M-DOh0gSue.js → xychartDiagram-ELKLHX3M-qU8UaZIt.js} +1 -1
- package/dist/webdist/index.html +2 -2
- package/package.json +2 -2
- package/dist/webdist/assets/CodeComposer-Cjg4xu5i.js +0 -1
- package/dist/webdist/assets/CodeHomeScreen-aqIQxmWg.js +0 -1
- package/dist/webdist/assets/CustomizeScreen-BskDZVOp.js +0 -4
- package/dist/webdist/assets/EnginesScreen-DT_E6Bqd.js +0 -10
- package/dist/webdist/assets/JevPlaygroundScreen-BJ9EXDPE.js +0 -4
- package/dist/webdist/assets/ModelDetailDialog-C5ejpvy6.js +0 -1
- package/dist/webdist/assets/OnboardingScreen-BlX_k6qt.js +0 -1
- package/dist/webdist/assets/RoutineEditPage-Cc0idJ-3.js +0 -1
- package/dist/webdist/assets/RoutinesPanel-OqbQ0SmB.js +0 -1
- package/dist/webdist/assets/SettingsScreen-C9rK-X9n.js +0 -2
- package/dist/webdist/assets/SidebarResizeHandle-BgR_YpxG.js +0 -2
- package/dist/webdist/assets/WorkspaceScreen-DF5OMiKx.js +0 -1
- package/dist/webdist/assets/channel-CyfqT0Zk.js +0 -1
- package/dist/webdist/assets/chat-queries-CzD9RmqG.js +0 -1
- package/dist/webdist/assets/chevron-right-rb18aZPa.js +0 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-vs5mQ5z7.js +0 -1
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-vs5mQ5z7.js +0 -1
- package/dist/webdist/assets/folder-input-CA06TkHQ.js +0 -1
- package/dist/webdist/assets/folder-plus-1PSVHL0Z.js +0 -1
- package/dist/webdist/assets/index-BoD2hVgN.css +0 -1
- package/dist/webdist/assets/model-kind-C1rLvNZj.js +0 -1
- package/dist/webdist/assets/pencil-BWfgZfTf.js +0 -1
- package/dist/webdist/assets/rotate-ccw-BACVmdwR.js +0 -1
- package/dist/webdist/assets/sheet-BMLkQ0th.js +0 -1
- package/dist/webdist/assets/sliders-horizontal-B0oyFTI0.js +0 -1
- package/dist/webdist/assets/sparkles-BmWBphjQ.js +0 -1
- package/dist/webdist/assets/star-DtH9hIqK.js +0 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-BDtEUZuR.js +0 -1
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-BJHI83P3.js +0 -8
- package/dist/webdist/assets/terminal-C8Qor-4N.js +0 -1
- package/dist/webdist/assets/trash-2-DuhMUqOF.js +0 -1
- package/dist/webdist/assets/vram-DPDyCsNQ.js +0 -1
- package/dist/webdist/assets/wrench-z3LG4dD8.js +0 -1
package/README.md
CHANGED
|
@@ -369,14 +369,20 @@ there. Entirely local; nothing leaves your machine.
|
|
|
369
369
|
</details>
|
|
370
370
|
|
|
371
371
|
<details>
|
|
372
|
-
<summary><strong>🧠 Jev — ask structured questions about any text, locally</strong></summary>
|
|
372
|
+
<summary><strong>🧠 Text classification (Jev and Laya) — ask structured questions about any text, locally</strong></summary>
|
|
373
373
|
|
|
374
374
|
<br/>
|
|
375
375
|
|
|
376
|
+
- **Models → Discover → Text classification** finds every model TurboLLM can run for this, whichever chat
|
|
377
|
+
engine is active. Two kinds run today: Jev (NLI cross-encoders on vLLM) and Laya (its own engine).
|
|
376
378
|
- **Load an NLI model (such as OpenJev) and TurboLLM detects it as a Jev model.** Workspace turns
|
|
377
|
-
into a
|
|
378
|
-
|
|
379
|
-
|
|
379
|
+
into a playground: two editors — the content, and the questions you're asking about it — *are*
|
|
380
|
+
the request. Ctrl/Cmd+Enter to run; see the answers per question, the raw response, and a
|
|
381
|
+
copyable `curl`.
|
|
382
|
+
- **The questions editor has a Form view, too.** Toggle between JSON and Form any time. Form gives
|
|
383
|
+
you one card per question — a type dropdown (Yes/no, Pick one, Scale), instructions, and the
|
|
384
|
+
fields each type needs (an option list, an ordered scale) — no hand-written JSON required. Both
|
|
385
|
+
views stay in sync, and editing one question never touches another's.
|
|
380
386
|
- **`POST /v1/systemone`** answers yes/no, pick-one, and scale questions in one call, using the
|
|
381
387
|
public System One API's exact field names — a client written for that shape only changes its
|
|
382
388
|
base URL and key. `POST /v1/classify` and `POST /v1/rerank` are there too for raw
|
|
@@ -384,6 +390,11 @@ there. Entirely local; nothing leaves your machine.
|
|
|
384
390
|
- **Honestly labelled:** answers are the model's NLI entailment scores, not a calibrated decision
|
|
385
391
|
model, and the docs explain exactly how each number is computed.
|
|
386
392
|
- Runs on vLLM (Linux or WSL2). Full guide: <https://turbollm.dev/docs/jev>.
|
|
393
|
+
- **Laya decision models, too** ([convaiinnovations/laya](https://huggingface.co/convaiinnovations/laya)):
|
|
394
|
+
- What it is: a calibrated System One model that answers the same `/v1/systemone` questions in 100+ languages.
|
|
395
|
+
- Where it runs: on its own Laya engine (Engines page; Windows, macOS, Linux; CPU or GPU), beside your chat model.
|
|
396
|
+
- How to get it: switch on the Text classification chip in Discover, or search "laya". The same playground opens from the Text classification tab under Chat, Code and Routines.
|
|
397
|
+
- Overview of both: <https://turbollm.dev/docs/text-classification>.
|
|
387
398
|
|
|
388
399
|
</details>
|
|
389
400
|
|
|
@@ -6,6 +6,8 @@ import { join } from "path";
|
|
|
6
6
|
|
|
7
7
|
// src/engines/compat.ts
|
|
8
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;
|
|
9
11
|
if (entry.jev && engineKind !== "vllm") return NEEDS_VLLM;
|
|
10
12
|
if (!engineAcceptsFormat(engineKind, entry.format)) return formatIncompatibility(engineKind, entry.format);
|
|
11
13
|
if (entry.audio && engineRejectsAudioModel(engineKind)) return audioIncompatibility(engineKind);
|
|
@@ -16,12 +18,24 @@ var NEEDS_VLLM = {
|
|
|
16
18
|
label: "Needs vLLM (Linux or WSL2)",
|
|
17
19
|
message: "This is a Jev model \u2014 it runs only on vLLM (Linux or WSL2). Activate a vLLM engine to load it."
|
|
18
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
|
+
};
|
|
19
32
|
var NEEDS_PYTHON_ENGINE_LABEL = "needs MLX or vLLM";
|
|
20
33
|
function formatIncompatibility(engineKind, format) {
|
|
21
34
|
const label = format === "gguf" ? "needs llama.cpp" : NEEDS_PYTHON_ENGINE_LABEL;
|
|
22
35
|
return { code: "format", label, message: formatMismatchMessage(engineKind, format) };
|
|
23
36
|
}
|
|
24
37
|
function formatMismatchMessage(engineKind, format) {
|
|
38
|
+
if (engineKind === "laya") return "The Laya engine runs only Laya models \u2014 load this one on another engine.";
|
|
25
39
|
if (engineKind === "mlx")
|
|
26
40
|
return "The active engine is MLX \u2014 pick a safetensors model, or switch to a llama.cpp engine for GGUF.";
|
|
27
41
|
if (engineKind === "rapid-mlx")
|
|
@@ -46,6 +60,7 @@ function engineAcceptsFormat(engineKind, format) {
|
|
|
46
60
|
if (engineKind === "rapid-mlx") return format === "mlx";
|
|
47
61
|
if (engineKind === "mlx-vlm") return format === "mlx";
|
|
48
62
|
if (engineKind === "vllm") return format === "mlx";
|
|
63
|
+
if (engineKind === "laya") return false;
|
|
49
64
|
return format === "gguf";
|
|
50
65
|
}
|
|
51
66
|
function engineRejectsAudioModel(engineKind) {
|
|
@@ -76,6 +76,16 @@ async function proxyStream(remote, path, init, signal, fetchImpl = fetch) {
|
|
|
76
76
|
return fetchImpl(buildUpstream(remote, path), { ...init, signal });
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
// src/models/text-classifier.ts
|
|
80
|
+
function isTextClassifier(entry) {
|
|
81
|
+
return textClassifierRuntime(entry) !== void 0;
|
|
82
|
+
}
|
|
83
|
+
function textClassifierRuntime(entry) {
|
|
84
|
+
if (entry.jev) return "vllm";
|
|
85
|
+
if (entry.laya) return "laya";
|
|
86
|
+
return void 0;
|
|
87
|
+
}
|
|
88
|
+
|
|
79
89
|
// src/observability/request-log.ts
|
|
80
90
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
81
91
|
function requestLogConfig(d) {
|
|
@@ -195,12 +205,13 @@ function resolveChatUpstream(d, requestedModel) {
|
|
|
195
205
|
if (ms.state !== "running" || !ms.model) {
|
|
196
206
|
return { ok: false, status: 409, code: "model_not_loaded", message: "Load a model first." };
|
|
197
207
|
}
|
|
198
|
-
|
|
208
|
+
const loadedEntry = d.scanner.get(ms.model.key);
|
|
209
|
+
if (loadedEntry && isTextClassifier(loadedEntry)) {
|
|
199
210
|
return {
|
|
200
211
|
ok: false,
|
|
201
212
|
status: 409,
|
|
202
213
|
code: "jev_model_loaded",
|
|
203
|
-
message: "A
|
|
214
|
+
message: "A text classification model is loaded \u2014 it cannot chat. Switch to a chat model, or use the text classification playground."
|
|
204
215
|
};
|
|
205
216
|
}
|
|
206
217
|
const target = d.manager.target();
|
|
@@ -1528,13 +1539,17 @@ import { join as join10 } from "path";
|
|
|
1528
1539
|
var BENCH_RATE_LIMIT_MS = 60 * 60 * 1e3;
|
|
1529
1540
|
|
|
1530
1541
|
// src/models/scanner.ts
|
|
1531
|
-
import { existsSync as
|
|
1542
|
+
import { existsSync as existsSync8, lstatSync as lstatSync2, readdirSync as readdirSync5, readFileSync as readFileSync8, realpathSync as realpathSync2, rmSync as rmSync4, writeFileSync as writeFileSync6 } from "fs";
|
|
1532
1543
|
import { readdir, realpath, stat } from "fs/promises";
|
|
1533
|
-
import { basename as
|
|
1544
|
+
import { basename as basename3, dirname as dirname4, isAbsolute, join as join12, relative, resolve as resolve2, sep as sep2 } from "path";
|
|
1534
1545
|
|
|
1535
1546
|
// src/gguf/gguf.ts
|
|
1536
1547
|
import { closeSync, openSync, readSync } from "fs";
|
|
1537
1548
|
|
|
1549
|
+
// src/models/laya.ts
|
|
1550
|
+
import { existsSync as existsSync7, lstatSync, readFileSync as readFileSync7 } from "fs";
|
|
1551
|
+
import { basename as basename2, join as join11 } from "path";
|
|
1552
|
+
|
|
1538
1553
|
// src/models/profile.ts
|
|
1539
1554
|
var ROCM_APU_NOMMAP_MIN_BYTES = 30 * 1024 ** 3;
|
|
1540
1555
|
|
|
@@ -1604,7 +1619,7 @@ async function autoTitleFromConversation(d, convId) {
|
|
|
1604
1619
|
}
|
|
1605
1620
|
|
|
1606
1621
|
// src/code/code-session.ts
|
|
1607
|
-
import { join as
|
|
1622
|
+
import { join as join13, resolve as resolve3 } from "path";
|
|
1608
1623
|
import { readFile as readFile3 } from "fs/promises";
|
|
1609
1624
|
import { Type, Unsafe } from "typebox";
|
|
1610
1625
|
import {
|
|
@@ -1917,7 +1932,7 @@ var CREATE_ROUTINE_TOOL = {
|
|
|
1917
1932
|
prompt: { type: "string", description: "The task to run, in the same words a user would ask it." },
|
|
1918
1933
|
scheduleDisplay: { type: "string", description: 'Human-readable schedule, e.g. "Runs weekdays at 9:00 AM". Must accurately describe scheduleRule.' },
|
|
1919
1934
|
scheduleRule: SCHEDULE_RULE_SCHEMA,
|
|
1920
|
-
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
|
|
1935
|
+
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" or "kind: laya" \u2014 those are text classification models and cannot run a routine.` },
|
|
1921
1936
|
agentId: { type: "string", description: 'Required when flavor is "chat": an existing Customize -> Agents persona id.' },
|
|
1922
1937
|
workspacePath: { type: "string", description: 'Required when flavor is "code": absolute path to the workspace directory.' },
|
|
1923
1938
|
// Driven off schema.ts's list, not a second hand-maintained copy: this enum is what a MODEL
|
|
@@ -2426,7 +2441,7 @@ async function runCodeSession(params) {
|
|
|
2426
2441
|
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`);
|
|
2427
2442
|
task = `${HISTORY_FALLBACK_PREFIX}${renderHistoryFallbackText(summaryText, priorMessages)}${HISTORY_FALLBACK_SUFFIX}${rawTask}`;
|
|
2428
2443
|
}
|
|
2429
|
-
const agentDir =
|
|
2444
|
+
const agentDir = join13(d.store.dir(), "pi-agent");
|
|
2430
2445
|
modelRegistry.registerProvider("local", {
|
|
2431
2446
|
...upstream.provider,
|
|
2432
2447
|
api: "openai-completions",
|
|
@@ -2553,7 +2568,7 @@ async function runCodeSession(params) {
|
|
|
2553
2568
|
await sink({ event: "tool_call", data });
|
|
2554
2569
|
});
|
|
2555
2570
|
};
|
|
2556
|
-
const skillAgentDir =
|
|
2571
|
+
const skillAgentDir = join13(d.store.dir(), "pi-agent");
|
|
2557
2572
|
const skillResourceLoader = new DefaultResourceLoader({
|
|
2558
2573
|
cwd: repoRoot,
|
|
2559
2574
|
agentDir: skillAgentDir,
|
|
@@ -2694,7 +2709,7 @@ async function runCodeSession(params) {
|
|
|
2694
2709
|
await sink({ event: "tool_call", data });
|
|
2695
2710
|
});
|
|
2696
2711
|
};
|
|
2697
|
-
const subAgentDir =
|
|
2712
|
+
const subAgentDir = join13(d.store.dir(), "pi-agent");
|
|
2698
2713
|
const subResourceLoader = new DefaultResourceLoader({
|
|
2699
2714
|
cwd: repoRoot,
|
|
2700
2715
|
agentDir: subAgentDir,
|
|
@@ -3349,7 +3364,7 @@ async function compactCodeSession(params) {
|
|
|
3349
3364
|
return payload;
|
|
3350
3365
|
});
|
|
3351
3366
|
};
|
|
3352
|
-
const compactAgentDir =
|
|
3367
|
+
const compactAgentDir = join13(d.store.dir(), "pi-agent");
|
|
3353
3368
|
const compactResourceLoader = new DefaultResourceLoader({
|
|
3354
3369
|
cwd: repoRoot,
|
|
3355
3370
|
agentDir: compactAgentDir,
|
|
@@ -3448,7 +3463,7 @@ async function lookbackPreCompactionHistory(params) {
|
|
|
3448
3463
|
return payload;
|
|
3449
3464
|
});
|
|
3450
3465
|
};
|
|
3451
|
-
const lookbackAgentDir =
|
|
3466
|
+
const lookbackAgentDir = join13(d.store.dir(), "pi-agent");
|
|
3452
3467
|
const lookbackResourceLoader = new DefaultResourceLoader({
|
|
3453
3468
|
cwd: repoRoot,
|
|
3454
3469
|
agentDir: lookbackAgentDir,
|