@atomic-chat/core 0.19.0 → 0.20.5
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/dist/app-daemon.js +5 -0
- package/dist/app-daemon.js.map +1 -1
- package/dist/cli/bin.js +0 -0
- package/dist/cli/launch.js +2 -0
- package/dist/cli/launch.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +5 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cloud/registry.js +1 -0
- package/dist/cloud/registry.js.map +1 -1
- package/dist/config/paths.d.ts +1 -1
- package/dist/config/paths.js +12 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/contracts/engine-builds.d.ts +6 -1
- package/dist/contracts/engine-builds.js +1 -1
- package/dist/contracts/engine-builds.js.map +1 -1
- package/dist/contracts/engines.d.ts +1 -1
- package/dist/contracts/engines.js +2 -0
- package/dist/contracts/engines.js.map +1 -1
- package/dist/contracts/errors.d.ts +7 -1
- package/dist/contracts/errors.js.map +1 -1
- package/dist/contracts/events.d.ts +3 -1
- package/dist/contracts/geniex.d.ts +98 -0
- package/dist/contracts/geniex.js +15 -0
- package/dist/contracts/geniex.js.map +1 -0
- package/dist/contracts/index.d.ts +1 -0
- package/dist/contracts/index.js +1 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/model-yml.d.ts +40 -0
- package/dist/contracts/model-yml.js +7 -0
- package/dist/contracts/model-yml.js.map +1 -1
- package/dist/contracts/session.d.ts +6 -1
- package/dist/contracts/session.js.map +1 -1
- package/dist/contracts/settings.d.ts +12 -1
- package/dist/contracts/settings.js.map +1 -1
- package/dist/core/app-lease.d.ts +56 -0
- package/dist/core/app-lease.js +50 -0
- package/dist/core/app-lease.js.map +1 -0
- package/dist/core/atomic-core.d.ts +1 -1
- package/dist/core/create.js +109 -5
- package/dist/core/create.js.map +1 -1
- package/dist/engine-builds/engines.d.ts +28 -7
- package/dist/engine-builds/engines.js +49 -5
- package/dist/engine-builds/engines.js.map +1 -1
- package/dist/engine-builds/geniex.d.ts +35 -0
- package/dist/engine-builds/geniex.js +111 -0
- package/dist/engine-builds/geniex.js.map +1 -0
- package/dist/engine-builds/manifest.d.ts +43 -0
- package/dist/engine-builds/manifest.js +92 -0
- package/dist/engine-builds/manifest.js.map +1 -1
- package/dist/engine-builds/order.d.ts +2 -1
- package/dist/engine-builds/order.js +2 -0
- package/dist/engine-builds/order.js.map +1 -1
- package/dist/engine-builds/select.d.ts +15 -0
- package/dist/engine-builds/select.js +14 -0
- package/dist/engine-builds/select.js.map +1 -1
- package/dist/engine-builds/service.d.ts +5 -3
- package/dist/engine-builds/service.js +21 -2
- package/dist/engine-builds/service.js.map +1 -1
- package/dist/engines/service.d.ts +2 -1
- package/dist/engines/service.js +3 -1
- package/dist/engines/service.js.map +1 -1
- package/dist/engines/versions.js +3 -0
- package/dist/engines/versions.js.map +1 -1
- package/dist/integrations/catalog.d.ts +3 -1
- package/dist/integrations/catalog.js +8 -2
- package/dist/integrations/catalog.js.map +1 -1
- package/dist/integrations/config-io.d.ts +45 -4
- package/dist/integrations/config-io.js +91 -6
- package/dist/integrations/config-io.js.map +1 -1
- package/dist/integrations/configure/codex-repair.d.ts +75 -0
- package/dist/integrations/configure/codex-repair.js +254 -0
- package/dist/integrations/configure/codex-repair.js.map +1 -0
- package/dist/integrations/configure/codex.d.ts +48 -10
- package/dist/integrations/configure/codex.js +126 -32
- package/dist/integrations/configure/codex.js.map +1 -1
- package/dist/integrations/configure/registry.d.ts +4 -1
- package/dist/integrations/configure/registry.js +1 -0
- package/dist/integrations/configure/registry.js.map +1 -1
- package/dist/models/gguf/kv-cache.d.ts +5 -0
- package/dist/models/gguf/kv-cache.js +35 -2
- package/dist/models/gguf/kv-cache.js.map +1 -1
- package/dist/models/gguf/reader.d.ts +5 -0
- package/dist/models/gguf/reader.js +15 -3
- package/dist/models/gguf/reader.js.map +1 -1
- package/dist/router/resolve.d.ts +3 -2
- package/dist/router/resolve.js +3 -1
- package/dist/router/resolve.js.map +1 -1
- package/dist/runtime/geniex/accelerators.d.ts +20 -0
- package/dist/runtime/geniex/accelerators.js +53 -0
- package/dist/runtime/geniex/accelerators.js.map +1 -0
- package/dist/runtime/geniex/check.d.ts +34 -0
- package/dist/runtime/geniex/check.js +117 -0
- package/dist/runtime/geniex/check.js.map +1 -0
- package/dist/runtime/geniex/chip.d.ts +29 -0
- package/dist/runtime/geniex/chip.js +35 -0
- package/dist/runtime/geniex/chip.js.map +1 -0
- package/dist/runtime/geniex/devices.d.ts +13 -0
- package/dist/runtime/geniex/devices.js +32 -0
- package/dist/runtime/geniex/devices.js.map +1 -0
- package/dist/runtime/geniex/geniex-host.d.ts +17 -0
- package/dist/runtime/geniex/geniex-host.js +26 -0
- package/dist/runtime/geniex/geniex-host.js.map +1 -0
- package/dist/runtime/geniex/host/args.d.ts +56 -0
- package/dist/runtime/geniex/host/args.js +115 -0
- package/dist/runtime/geniex/host/args.js.map +1 -0
- package/dist/runtime/geniex/host/engine.d.ts +76 -0
- package/dist/runtime/geniex/host/engine.js +122 -0
- package/dist/runtime/geniex/host/engine.js.map +1 -0
- package/dist/runtime/geniex/host/ffi-bun.d.ts +15 -0
- package/dist/runtime/geniex/host/ffi-bun.js +415 -0
- package/dist/runtime/geniex/host/ffi-bun.js.map +1 -0
- package/dist/runtime/geniex/host/grammar.d.ts +11 -0
- package/dist/runtime/geniex/host/grammar.js +223 -0
- package/dist/runtime/geniex/host/grammar.js.map +1 -0
- package/dist/runtime/geniex/host/inspect.d.ts +25 -0
- package/dist/runtime/geniex/host/inspect.js +177 -0
- package/dist/runtime/geniex/host/inspect.js.map +1 -0
- package/dist/runtime/geniex/host/library.d.ts +117 -0
- package/dist/runtime/geniex/host/library.js +38 -0
- package/dist/runtime/geniex/host/library.js.map +1 -0
- package/dist/runtime/geniex/host/openai.d.ts +62 -0
- package/dist/runtime/geniex/host/openai.js +458 -0
- package/dist/runtime/geniex/host/openai.js.map +1 -0
- package/dist/runtime/geniex/host/run.d.ts +48 -0
- package/dist/runtime/geniex/host/run.js +208 -0
- package/dist/runtime/geniex/host/run.js.map +1 -0
- package/dist/runtime/geniex/host/server.d.ts +39 -0
- package/dist/runtime/geniex/host/server.js +232 -0
- package/dist/runtime/geniex/host/server.js.map +1 -0
- package/dist/runtime/geniex/host/worker-protocol.d.ts +76 -0
- package/dist/runtime/geniex/host/worker-protocol.js +116 -0
- package/dist/runtime/geniex/host/worker-protocol.js.map +1 -0
- package/dist/runtime/geniex/host/worker-source.generated.d.ts +1 -0
- package/dist/runtime/geniex/host/worker-source.generated.js +4 -0
- package/dist/runtime/geniex/host/worker-source.generated.js.map +1 -0
- package/dist/runtime/geniex/host/worker.d.ts +7 -0
- package/dist/runtime/geniex/host/worker.js +19 -0
- package/dist/runtime/geniex/host/worker.js.map +1 -0
- package/dist/runtime/geniex/host-process.d.ts +48 -0
- package/dist/runtime/geniex/host-process.js +104 -0
- package/dist/runtime/geniex/host-process.js.map +1 -0
- package/dist/runtime/geniex/index.d.ts +11 -0
- package/dist/runtime/geniex/index.js +12 -0
- package/dist/runtime/geniex/index.js.map +1 -0
- package/dist/runtime/geniex/model-yml.d.ts +8 -0
- package/dist/runtime/geniex/model-yml.js +98 -0
- package/dist/runtime/geniex/model-yml.js.map +1 -0
- package/dist/runtime/geniex/runtime.d.ts +94 -0
- package/dist/runtime/geniex/runtime.js +366 -0
- package/dist/runtime/geniex/runtime.js.map +1 -0
- package/dist/runtime/litert-lm/host/openai.d.ts +4 -37
- package/dist/runtime/litert-lm/host/openai.js +11 -96
- package/dist/runtime/litert-lm/host/openai.js.map +1 -1
- package/dist/runtime/litert-lm/host/pool.d.ts +1 -7
- package/dist/runtime/litert-lm/host/pool.js +1 -17
- package/dist/runtime/litert-lm/host/pool.js.map +1 -1
- package/dist/runtime/litert-lm/host/server.js +11 -53
- package/dist/runtime/litert-lm/host/server.js.map +1 -1
- package/dist/runtime/llamacpp/args.d.ts +5 -0
- package/dist/runtime/llamacpp/args.js +2 -0
- package/dist/runtime/llamacpp/args.js.map +1 -1
- package/dist/runtime/llamacpp/fit-margin.d.ts +44 -0
- package/dist/runtime/llamacpp/fit-margin.js +50 -0
- package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
- package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
- package/dist/runtime/llamacpp/load-plan.js +57 -22
- package/dist/runtime/llamacpp/load-plan.js.map +1 -1
- package/dist/runtime/llamacpp/runtime.d.ts +5 -1
- package/dist/runtime/llamacpp/runtime.js +6 -1
- package/dist/runtime/llamacpp/runtime.js.map +1 -1
- package/dist/runtime/shared/external-sessions.js +1 -0
- package/dist/runtime/shared/external-sessions.js.map +1 -1
- package/dist/runtime/shared/fifo-lock.d.ts +10 -0
- package/dist/runtime/shared/fifo-lock.js +21 -0
- package/dist/runtime/shared/fifo-lock.js.map +1 -0
- package/dist/runtime/shared/index.d.ts +2 -0
- package/dist/runtime/shared/index.js +2 -0
- package/dist/runtime/shared/index.js.map +1 -1
- package/dist/runtime/shared/openai-sse.d.ts +112 -0
- package/dist/runtime/shared/openai-sse.js +178 -0
- package/dist/runtime/shared/openai-sse.js.map +1 -0
- package/dist/server/clients.d.ts +6 -0
- package/dist/server/clients.js +11 -0
- package/dist/server/clients.js.map +1 -1
- package/dist/server/control/router.js +2 -0
- package/dist/server/control/router.js.map +1 -1
- package/dist/server/control/routes/geniex.d.ts +7 -0
- package/dist/server/control/routes/geniex.js +22 -0
- package/dist/server/control/routes/geniex.js.map +1 -0
- package/dist/server/control/types.d.ts +11 -1
- package/dist/server/control/types.js.map +1 -1
- package/dist/server/http.js +2 -0
- package/dist/server/http.js.map +1 -1
- package/dist/server/public/embedding.d.ts +8 -7
- package/dist/server/public/embedding.js +15 -7
- package/dist/server/public/embedding.js.map +1 -1
- package/dist/server/public/forward.js +23 -6
- package/dist/server/public/forward.js.map +1 -1
- package/dist/server/public/listing.js +1 -0
- package/dist/server/public/listing.js.map +1 -1
- package/dist/server/public/responses.js +9 -0
- package/dist/server/public/responses.js.map +1 -1
- package/dist/server/public/telemetry.d.ts +7 -1
- package/dist/server/public/telemetry.js +11 -3
- package/dist/server/public/telemetry.js.map +1 -1
- package/dist/server/public/trace.d.ts +8 -4
- package/dist/server/public/trace.js +15 -7
- package/dist/server/public/trace.js.map +1 -1
- package/dist/server/public/validate.d.ts +32 -0
- package/dist/server/public/validate.js +146 -0
- package/dist/server/public/validate.js.map +1 -0
- package/dist/settings/schema/geniex.json +63 -0
- package/dist/settings/schema/mlx.json +1 -1
- package/dist/settings/schema.js +11 -0
- package/dist/settings/schema.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-repair.js","sourceRoot":"","sources":["../../../src/integrations/configure/codex-repair.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codex CLI —
|
|
2
|
+
* Codex CLI — a profile file of our own, `<codex_home>/atomic-chat.config.toml`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Codex 0.134+ layers `$CODEX_HOME/<name>.config.toml` over the base `config.toml` when it is run
|
|
5
|
+
* with `--profile <name>`, so `launch` runs `codex --profile atomic-chat` (catalog `runArgs`) and the
|
|
6
|
+
* model, the provider and its endpoint live in a file nothing else writes. The provider id is
|
|
7
|
+
* `atomic-chat`, not `atomic`, so it never merges into a `[model_providers.atomic]` the user has.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
* root
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* The shared `config.toml` is no longer ours to write. Earlier versions edited it (two managed
|
|
10
|
+
* regions: bare root `model` / `model_provider` at the top, `[model_providers.atomic]` at the end),
|
|
11
|
+
* and a user who already had a root `model` got a duplicate key that stopped Codex — and the ChatGPT
|
|
12
|
+
* desktop app, which reads the same file — from starting. The only thing done to it now is removing
|
|
13
|
+
* those regions, through the strict repair in `codex-repair.ts`, before the profile is written.
|
|
12
14
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* Order: version gate, repair, profile. Below 0.134 `--profile` meant the old `[profiles.x]` tables,
|
|
16
|
+
* so an old Codex is refused before anything is touched; a version that cannot be read is let through.
|
|
17
|
+
* The profile is rewritten only while its first line says Atomic Chat wrote it: a file of the same
|
|
18
|
+
* name that someone else made is refused, never replaced. A profile that is a symbolic link is
|
|
19
|
+
* written through, so the link survives; one that points at nothing is refused rather than replaced.
|
|
20
|
+
* The bytes are a contract with the desktop writer (ADR 2026-10-27-codex-runs-on-a-profile-of-its-own),
|
|
21
|
+
* so either side can rewrite the other's.
|
|
15
22
|
*/
|
|
23
|
+
import type { ConfigFs } from '../config-io.js';
|
|
16
24
|
import type { ConfigureInput } from './registry.js';
|
|
25
|
+
/** The profile name `--profile` takes, and the stem of its file. */
|
|
26
|
+
export declare const CODEX_PROFILE = "atomic-chat";
|
|
27
|
+
/** A profile file is ours iff it starts with this. */
|
|
28
|
+
export declare const CODEX_PROFILE_OWNER_PREFIX = "# Managed by Atomic Chat";
|
|
29
|
+
/**
|
|
30
|
+
* The first release where `--profile <name>` reads `<name>.config.toml`; 0.131–0.133 called that
|
|
31
|
+
* `--profile-v2` and meant the old `[profiles.x]` tables by `--profile`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const CODEX_MIN_VERSION: readonly [0, 134, 0];
|
|
34
|
+
export type CodexVersion = readonly [number, number, number];
|
|
35
|
+
/**
|
|
36
|
+
* Codex's own home: `$CODEX_HOME` when set and non-empty, else `<home>/.codex`. Codex resolves a
|
|
37
|
+
* relative `$CODEX_HOME` against its working directory, which `launch` shares with it. A leading `~`
|
|
38
|
+
* is expanded against the home directory: a quoted `CODEX_HOME="~/x"` reaches us unexpanded.
|
|
39
|
+
*/
|
|
40
|
+
export declare function codexHome(env: NodeJS.ProcessEnv, home: string): string;
|
|
41
|
+
export declare function codexProfilePath(dir: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* The profile's exact bytes. Codex reads the key from the variable `env_key` names, never inline, so
|
|
44
|
+
* a keyless server gets no `env_key` line at all and `launch` sets the variable on the child.
|
|
45
|
+
*/
|
|
46
|
+
export declare function renderCodexProfile(apiUrl: string, model: string, apiKey: string): string;
|
|
47
|
+
/** `codex --version` prints `codex-cli 0.146.0`: the first `x.y.z` in the output. */
|
|
48
|
+
export declare function parseCodexVersion(output: string): CodexVersion | undefined;
|
|
49
|
+
export declare function isCodexTooOld([major, minor, patch]: CodexVersion): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Write the profile, refusing to replace a file of that name Atomic Chat did not write. Returns its
|
|
52
|
+
* path. A profile that cannot be read is an error, never "absent"; a symbolic link is written through.
|
|
53
|
+
*/
|
|
54
|
+
export declare function writeCodexProfile(fs: ConfigFs, dir: string, apiUrl: string, model: string, apiKey: string): Promise<string>;
|
|
17
55
|
export declare function configureCodex(input: ConfigureInput): Promise<void>;
|
|
@@ -1,43 +1,137 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codex CLI —
|
|
2
|
+
* Codex CLI — a profile file of our own, `<codex_home>/atomic-chat.config.toml`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Codex 0.134+ layers `$CODEX_HOME/<name>.config.toml` over the base `config.toml` when it is run
|
|
5
|
+
* with `--profile <name>`, so `launch` runs `codex --profile atomic-chat` (catalog `runArgs`) and the
|
|
6
|
+
* model, the provider and its endpoint live in a file nothing else writes. The provider id is
|
|
7
|
+
* `atomic-chat`, not `atomic`, so it never merges into a `[model_providers.atomic]` the user has.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
* root
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* The shared `config.toml` is no longer ours to write. Earlier versions edited it (two managed
|
|
10
|
+
* regions: bare root `model` / `model_provider` at the top, `[model_providers.atomic]` at the end),
|
|
11
|
+
* and a user who already had a root `model` got a duplicate key that stopped Codex — and the ChatGPT
|
|
12
|
+
* desktop app, which reads the same file — from starting. The only thing done to it now is removing
|
|
13
|
+
* those regions, through the strict repair in `codex-repair.ts`, before the profile is written.
|
|
12
14
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* Order: version gate, repair, profile. Below 0.134 `--profile` meant the old `[profiles.x]` tables,
|
|
16
|
+
* so an old Codex is refused before anything is touched; a version that cannot be read is let through.
|
|
17
|
+
* The profile is rewritten only while its first line says Atomic Chat wrote it: a file of the same
|
|
18
|
+
* name that someone else made is refused, never replaced. A profile that is a symbolic link is
|
|
19
|
+
* written through, so the link survives; one that points at nothing is refused rather than replaced.
|
|
20
|
+
* The bytes are a contract with the desktop writer (ADR 2026-10-27-codex-runs-on-a-profile-of-its-own),
|
|
21
|
+
* so either side can rewrite the other's.
|
|
15
22
|
*/
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
23
|
+
import { join, resolve } from 'node:path';
|
|
24
|
+
import { parse as parseToml } from 'smol-toml';
|
|
25
|
+
import { AtomicCoreError } from '../../contracts/index.js';
|
|
26
|
+
import { expandTilde, tomlBasicStringEscape } from '../config-io.js';
|
|
27
|
+
import { repairLegacyCodexConfig } from './codex-repair.js';
|
|
18
28
|
import { registerWriter } from './registry.js';
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
/** The profile name `--profile` takes, and the stem of its file. */
|
|
30
|
+
export const CODEX_PROFILE = 'atomic-chat';
|
|
31
|
+
/** A profile file is ours iff it starts with this. */
|
|
32
|
+
export const CODEX_PROFILE_OWNER_PREFIX = '# Managed by Atomic Chat';
|
|
33
|
+
/**
|
|
34
|
+
* The first release where `--profile <name>` reads `<name>.config.toml`; 0.131–0.133 called that
|
|
35
|
+
* `--profile-v2` and meant the old `[profiles.x]` tables by `--profile`.
|
|
36
|
+
*/
|
|
37
|
+
export const CODEX_MIN_VERSION = [0, 134, 0];
|
|
38
|
+
/**
|
|
39
|
+
* Codex's own home: `$CODEX_HOME` when set and non-empty, else `<home>/.codex`. Codex resolves a
|
|
40
|
+
* relative `$CODEX_HOME` against its working directory, which `launch` shares with it. A leading `~`
|
|
41
|
+
* is expanded against the home directory: a quoted `CODEX_HOME="~/x"` reaches us unexpanded.
|
|
42
|
+
*/
|
|
43
|
+
export function codexHome(env, home) {
|
|
44
|
+
const raw = env['CODEX_HOME'];
|
|
45
|
+
return raw === undefined || raw === '' ? join(home, '.codex') : resolve(expandTilde(raw, home));
|
|
46
|
+
}
|
|
47
|
+
export function codexProfilePath(dir) {
|
|
48
|
+
return join(dir, `${CODEX_PROFILE}.config.toml`);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The profile's exact bytes. Codex reads the key from the variable `env_key` names, never inline, so
|
|
52
|
+
* a keyless server gets no `env_key` line at all and `launch` sets the variable on the child.
|
|
53
|
+
*/
|
|
54
|
+
export function renderCodexProfile(apiUrl, model, apiKey) {
|
|
55
|
+
return (`${CODEX_PROFILE_OWNER_PREFIX}: \`codex --profile ${CODEX_PROFILE}\` runs Codex on your local models.\n` +
|
|
56
|
+
'# Atomic Chat rewrites this file when Codex is connected again and deletes it on disconnect.\n' +
|
|
27
57
|
`model = "${tomlBasicStringEscape(model)}"\n` +
|
|
28
|
-
`model_provider = "
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const envKeyLine = apiKey === '' ? '' : `env_key = "ATOMIC_CHAT_API_KEY"\n`;
|
|
33
|
-
const block = `${ATOMIC_MANAGED_BEGIN}\n` +
|
|
34
|
-
`[model_providers.atomic]\n` +
|
|
35
|
-
`name = "Atomic Chat"\n` +
|
|
58
|
+
`model_provider = "${CODEX_PROFILE}"\n` +
|
|
59
|
+
'\n' +
|
|
60
|
+
`[model_providers.${CODEX_PROFILE}]\n` +
|
|
61
|
+
'name = "Atomic Chat"\n' +
|
|
36
62
|
`base_url = "${tomlBasicStringEscape(apiUrl)}"\n` +
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
63
|
+
(apiKey === '' ? '' : 'env_key = "ATOMIC_CHAT_API_KEY"\n'));
|
|
64
|
+
}
|
|
65
|
+
/** `codex --version` prints `codex-cli 0.146.0`: the first `x.y.z` in the output. */
|
|
66
|
+
export function parseCodexVersion(output) {
|
|
67
|
+
const match = /(\d+)\.(\d+)\.(\d+)/.exec(output);
|
|
68
|
+
return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : undefined;
|
|
69
|
+
}
|
|
70
|
+
export function isCodexTooOld([major, minor, patch]) {
|
|
71
|
+
const [minMajor, minMinor, minPatch] = CODEX_MIN_VERSION;
|
|
72
|
+
if (major !== minMajor)
|
|
73
|
+
return major < minMajor;
|
|
74
|
+
if (minor !== minMinor)
|
|
75
|
+
return minor < minMinor;
|
|
76
|
+
return patch < minPatch;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Write the profile, refusing to replace a file of that name Atomic Chat did not write. Returns its
|
|
80
|
+
* path. A profile that cannot be read is an error, never "absent"; a symbolic link is written through.
|
|
81
|
+
*/
|
|
82
|
+
export async function writeCodexProfile(fs, dir, apiUrl, model, apiKey) {
|
|
83
|
+
const path = codexProfilePath(dir);
|
|
84
|
+
const contents = renderCodexProfile(apiUrl, model, apiKey);
|
|
85
|
+
// Cannot fail with the escaping above; it keeps a future edit of the template from shipping a file
|
|
86
|
+
// Codex would reject.
|
|
87
|
+
parseToml(contents);
|
|
88
|
+
let target;
|
|
89
|
+
let existing;
|
|
90
|
+
try {
|
|
91
|
+
target = await fs.linkTarget(path);
|
|
92
|
+
existing = await fs.readStrict(target);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
// Only a link to nothing makes `linkTarget` report "not found"; writing would replace the link.
|
|
96
|
+
const dangling = e.code === 'ENOENT';
|
|
97
|
+
throw new AtomicCoreError('IO_ERROR', dangling
|
|
98
|
+
? `${path} is a symbolic link to a file that does not exist. Remove the link or create the file it points to, then connect Codex again.`
|
|
99
|
+
: `Failed to read ${path}`, e.message);
|
|
100
|
+
}
|
|
101
|
+
if (existing !== undefined && !existing.startsWith(CODEX_PROFILE_OWNER_PREFIX)) {
|
|
102
|
+
throw new AtomicCoreError('IO_ERROR', `${path} already exists and was not written by Atomic Chat. Rename or remove it, then connect Codex again.`);
|
|
103
|
+
}
|
|
104
|
+
await fs.write(target, contents);
|
|
105
|
+
return path;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The installed Codex's version, or `undefined` when it cannot be told: no runner, a launcher that
|
|
109
|
+
* does not start or fails, output without a version. On Windows the npm launcher is `codex.cmd`,
|
|
110
|
+
* which only `cmd` can run (as for Cline).
|
|
111
|
+
*/
|
|
112
|
+
async function installedCodexVersion(input) {
|
|
113
|
+
if (!input.spawn)
|
|
114
|
+
return undefined;
|
|
115
|
+
const program = input.program ?? 'codex';
|
|
116
|
+
const windows = input.platform === 'win32';
|
|
117
|
+
try {
|
|
118
|
+
const result = await input.spawn(windows ? 'cmd' : program, windows ? ['/C', program, '--version'] : ['--version']);
|
|
119
|
+
return result.code === 0 ? parseCodexVersion(result.stdout) : undefined;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export async function configureCodex(input) {
|
|
126
|
+
const version = await installedCodexVersion(input);
|
|
127
|
+
if (version && isCodexTooOld(version)) {
|
|
128
|
+
throw new AtomicCoreError('IO_ERROR', `Codex CLI ${version.join('.')} is too old for Atomic Chat. Update it to 0.134 or newer and connect again.`);
|
|
129
|
+
}
|
|
130
|
+
const dir = codexHome(input.env, input.fs.home);
|
|
131
|
+
const repair = await repairLegacyCodexConfig(input.fs, dir, input.platform);
|
|
132
|
+
if (repair.kind === 'conflict')
|
|
133
|
+
throw new AtomicCoreError('IO_ERROR', repair.reason);
|
|
134
|
+
await writeCodexProfile(input.fs, dir, input.apiUrl, input.model, input.apiKey);
|
|
41
135
|
}
|
|
42
136
|
registerWriter('codex', configureCodex);
|
|
43
137
|
//# sourceMappingURL=codex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/integrations/configure/codex.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/integrations/configure/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,12 +14,14 @@ export interface ConfigureInput {
|
|
|
14
14
|
/** `$SHELL`; decides which rc file the env-var agents write to. */
|
|
15
15
|
shell: string | undefined;
|
|
16
16
|
env: NodeJS.ProcessEnv;
|
|
17
|
-
/** Run a command (
|
|
17
|
+
/** Run a command (Cline's `cline auth`, Codex's `--version`). Resolves with its exit status and output. */
|
|
18
18
|
spawn?: (program: string, args: string[]) => Promise<{
|
|
19
19
|
code: number;
|
|
20
20
|
stdout: string;
|
|
21
21
|
stderr: string;
|
|
22
22
|
}>;
|
|
23
|
+
/** The agent's launcher as detection found it (bare name or absolute path); Codex asks it its version. */
|
|
24
|
+
program?: string;
|
|
23
25
|
}
|
|
24
26
|
export type ConfigureWriter = (input: ConfigureInput) => Promise<void>;
|
|
25
27
|
/** Register a writer for an agent id. Called once per module at import time. */
|
|
@@ -33,6 +35,7 @@ export interface ConfigureOptions {
|
|
|
33
35
|
shell?: string | undefined;
|
|
34
36
|
env?: NodeJS.ProcessEnv;
|
|
35
37
|
spawn?: ConfigureInput['spawn'];
|
|
38
|
+
program?: string;
|
|
36
39
|
}
|
|
37
40
|
/**
|
|
38
41
|
* Point an agent at a local endpoint. `model` may be empty only for the agents whose Rust
|
|
@@ -45,6 +45,7 @@ export async function configureAgent(agent, apiUrl, model, apiKey, options = {})
|
|
|
45
45
|
shell: options.shell ?? env['SHELL'],
|
|
46
46
|
env,
|
|
47
47
|
...(options.spawn ? { spawn: options.spawn } : {}),
|
|
48
|
+
...(options.program ? { program: options.program } : {}),
|
|
48
49
|
});
|
|
49
50
|
}
|
|
50
51
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/integrations/configure/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/integrations/configure/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAmB9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;AAElD,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAuB;IACrE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AACnC,CAAC;AAYD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAqB,EACrB,MAAc,EACd,KAAa,EACb,MAAc,EACd,UAA4B,EAAE;IAE9B,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,eAAe,QAAQ,CAAC,IAAI,oCAAoC,EAChE,6BAA6B,QAAQ,CAAC,EAAE,GAAG,CAC5C,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAA;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACtF,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,+DAA+D,CAAC,CAAA;IACxG,CAAC;IACD,MAAM,MAAM,CAAC;QACX,MAAM;QACN,KAAK;QACL,MAAM;QACN,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,YAAY,CAAC,IAAc,CAAC;QAC9C,QAAQ;QACR,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC;QACpC,GAAG;QACH,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* KV-cache size estimate from GGUF metadata. Port of `gguf/utils.rs`
|
|
3
3
|
* (`kv_cache_bits_per_element`, `estimate_kv_cache_internal`). Error strings are the Rust
|
|
4
4
|
* `Display` texts, which the app receives verbatim.
|
|
5
|
+
*
|
|
6
|
+
* Beyond the port: a per-layer `head_count_kv` array (`[0, 0, 8, …]`, which `reader.ts` inlines at
|
|
7
|
+
* any length) counts only the layers with KV heads, each with its own count, as llama.cpp allocates
|
|
8
|
+
* them — a hybrid model's recurrent layers hold no KV cache. The Rust estimate cannot read the array
|
|
9
|
+
* and counts every block with `head_count` heads (15 times LFM2.5-2.6B's real 16 KiB per token).
|
|
5
10
|
*/
|
|
6
11
|
export interface KvCacheEstimate {
|
|
7
12
|
size: number;
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* KV-cache size estimate from GGUF metadata. Port of `gguf/utils.rs`
|
|
3
3
|
* (`kv_cache_bits_per_element`, `estimate_kv_cache_internal`). Error strings are the Rust
|
|
4
4
|
* `Display` texts, which the app receives verbatim.
|
|
5
|
+
*
|
|
6
|
+
* Beyond the port: a per-layer `head_count_kv` array (`[0, 0, 8, …]`, which `reader.ts` inlines at
|
|
7
|
+
* any length) counts only the layers with KV heads, each with its own count, as llama.cpp allocates
|
|
8
|
+
* them — a hybrid model's recurrent layers hold no KV cache. The Rust estimate cannot read the array
|
|
9
|
+
* and counts every block with `head_count` heads (15 times LFM2.5-2.6B's real 16 KiB per token).
|
|
5
10
|
*/
|
|
6
11
|
import { parseRustU64 } from '../../util/index.js';
|
|
7
12
|
export class KvCacheError extends Error {
|
|
@@ -53,6 +58,26 @@ const u64 = (meta, key) => {
|
|
|
53
58
|
const raw = meta[key];
|
|
54
59
|
return raw === undefined ? undefined : parseRustU64(raw);
|
|
55
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* The KV heads of each layer from an inline integer array, or `undefined` for anything else: a
|
|
63
|
+
* scalar, the reader's placeholder, a malformed list, or one in which no layer has a KV head.
|
|
64
|
+
*/
|
|
65
|
+
function perLayerKvHeads(raw) {
|
|
66
|
+
const text = raw?.trim();
|
|
67
|
+
if (!text || !text.startsWith('[') || !text.endsWith(']'))
|
|
68
|
+
return undefined;
|
|
69
|
+
const inner = text.slice(1, -1).trim();
|
|
70
|
+
if (inner === '')
|
|
71
|
+
return undefined;
|
|
72
|
+
const heads = [];
|
|
73
|
+
for (const part of inner.split(',')) {
|
|
74
|
+
const n = parseRustU64(part.trim());
|
|
75
|
+
if (n === undefined)
|
|
76
|
+
return undefined;
|
|
77
|
+
heads.push(n);
|
|
78
|
+
}
|
|
79
|
+
return heads.some((n) => n > 0) ? heads : undefined;
|
|
80
|
+
}
|
|
56
81
|
export function estimateKvCache(meta, ctxSize, cacheTypeK, cacheTypeV) {
|
|
57
82
|
const arch = meta['general.architecture'];
|
|
58
83
|
if (arch === undefined)
|
|
@@ -61,10 +86,17 @@ export function estimateKvCache(meta, ctxSize, cacheTypeK, cacheTypeV) {
|
|
|
61
86
|
if (nLayer === undefined || nLayer <= 0)
|
|
62
87
|
throw new KvCacheError(KV_CACHE_ERRORS.blockCountInvalid);
|
|
63
88
|
const headCount = u64(meta, `${arch}.attention.head_count`);
|
|
89
|
+
const layerKvHeads = perLayerKvHeads(meta[`${arch}.attention.head_count_kv`]);
|
|
64
90
|
const headCountKv = u64(meta, `${arch}.attention.head_count_kv`);
|
|
65
|
-
const nHead =
|
|
91
|
+
const nHead = layerKvHeads
|
|
92
|
+
? Math.max(...layerKvHeads)
|
|
93
|
+
: headCountKv !== undefined && headCountKv > 0
|
|
94
|
+
? headCountKv
|
|
95
|
+
: (headCount ?? 0);
|
|
66
96
|
if (nHead === 0)
|
|
67
97
|
throw new KvCacheError(KV_CACHE_ERRORS.headCountInvalid);
|
|
98
|
+
/** KV heads summed over the layers: `block_count × heads` for a scalar, the array's sum per layer. */
|
|
99
|
+
const kvHeadsAcrossLayers = layerKvHeads ? layerKvHeads.reduce((a, b) => a + b, 0) : nLayer * nHead;
|
|
68
100
|
let keyLen = u64(meta, `${arch}.attention.key_length`) ?? 0;
|
|
69
101
|
let valLen = u64(meta, `${arch}.attention.value_length`) ?? 0;
|
|
70
102
|
if (keyLen === 0 || valLen === 0) {
|
|
@@ -84,7 +116,8 @@ export function estimateKvCache(meta, ctxSize, cacheTypeK, cacheTypeV) {
|
|
|
84
116
|
const ctxLen = ctxSize === undefined ? maxCtx : Math.min(ctxSize, maxCtx);
|
|
85
117
|
const slidingWindowRaw = u64(meta, `${arch}.attention.sliding_window`);
|
|
86
118
|
const slidingWindow = slidingWindowRaw !== undefined && slidingWindowRaw > 0 ? slidingWindowRaw : undefined;
|
|
87
|
-
const bitsPerToken =
|
|
119
|
+
const bitsPerToken = kvHeadsAcrossLayers *
|
|
120
|
+
(keyLen * kvCacheBitsPerElement(cacheTypeK) + valLen * kvCacheBitsPerElement(cacheTypeV));
|
|
88
121
|
const kvPerToken = Math.ceil(bitsPerToken / 8);
|
|
89
122
|
const fullCost = ctxLen * kvPerToken;
|
|
90
123
|
const size = slidingWindow === undefined ? fullCost : Math.floor((fullCost + slidingWindow * kvPerToken) / 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kv-cache.js","sourceRoot":"","sources":["../../../src/models/gguf/kv-cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kv-cache.js","sourceRoot":"","sources":["../../../src/models/gguf/kv-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Reads magic, version, tensor count and the metadata KV block only — never the tensor table.
|
|
5
5
|
* Every value is stringified the way the Rust reader does (`to_string()`, `[a, b]` for arrays of
|
|
6
6
|
* up to 24 elements, a placeholder for longer ones), so downstream code sees identical strings.
|
|
7
|
+
* One deliberate exception: an integer `<arch>.attention.head_count_kv` is inlined at any length up
|
|
8
|
+
* to `MAX_PER_LAYER_ARRAY_LEN`, because a hybrid model names its attention layers there, one entry
|
|
9
|
+
* per block, and the KV-cache estimate needs every entry (LFM2.5-2.6B has 30 blocks, 8 of them attend).
|
|
7
10
|
*
|
|
8
11
|
* Pure over a byte buffer; callers feed it a file prefix and grow it while it asks for more.
|
|
9
12
|
*/
|
|
@@ -16,6 +19,8 @@ export declare const GGUF_VALUE_TYPE_NAMES: readonly ["Uint8", "Int8", "Uint16",
|
|
|
16
19
|
export declare const MAX_GGUF_STRING_BYTES: number;
|
|
17
20
|
export declare const MAX_GGUF_ARRAY_LEN = 1000000;
|
|
18
21
|
export declare const INLINE_ARRAY_MAX_LEN = 24;
|
|
22
|
+
/** The longest per-layer array inlined past `INLINE_ARRAY_MAX_LEN`: more blocks than any model has. */
|
|
23
|
+
export declare const MAX_PER_LAYER_ARRAY_LEN = 4096;
|
|
19
24
|
/** The buffer ended before the header did; feed more bytes and retry. */
|
|
20
25
|
export declare class GgufNeedMoreData extends Error {
|
|
21
26
|
constructor();
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Reads magic, version, tensor count and the metadata KV block only — never the tensor table.
|
|
5
5
|
* Every value is stringified the way the Rust reader does (`to_string()`, `[a, b]` for arrays of
|
|
6
6
|
* up to 24 elements, a placeholder for longer ones), so downstream code sees identical strings.
|
|
7
|
+
* One deliberate exception: an integer `<arch>.attention.head_count_kv` is inlined at any length up
|
|
8
|
+
* to `MAX_PER_LAYER_ARRAY_LEN`, because a hybrid model names its attention layers there, one entry
|
|
9
|
+
* per block, and the KV-cache estimate needs every entry (LFM2.5-2.6B has 30 blocks, 8 of them attend).
|
|
7
10
|
*
|
|
8
11
|
* Pure over a byte buffer; callers feed it a file prefix and grow it while it asks for more.
|
|
9
12
|
*/
|
|
@@ -26,6 +29,14 @@ export const GGUF_VALUE_TYPE_NAMES = [
|
|
|
26
29
|
export const MAX_GGUF_STRING_BYTES = 1024 * 1024;
|
|
27
30
|
export const MAX_GGUF_ARRAY_LEN = 1_000_000;
|
|
28
31
|
export const INLINE_ARRAY_MAX_LEN = 24;
|
|
32
|
+
/** The longest per-layer array inlined past `INLINE_ARRAY_MAX_LEN`: more blocks than any model has. */
|
|
33
|
+
export const MAX_PER_LAYER_ARRAY_LEN = 4096;
|
|
34
|
+
/** Integer GGUF value types (`u8` … `i32`, `u64`, `i64`). */
|
|
35
|
+
const INTEGER_TYPES = new Set([0, 1, 2, 3, 4, 5, 10, 11]);
|
|
36
|
+
/** Keys whose integer arrays are one entry per block and are inlined at any length. */
|
|
37
|
+
function isPerLayerKey(key) {
|
|
38
|
+
return /^[^.]+\.attention\.head_count_kv$/.test(key);
|
|
39
|
+
}
|
|
29
40
|
/** The buffer ended before the header did; feed more bytes and retry. */
|
|
30
41
|
export class GgufNeedMoreData extends Error {
|
|
31
42
|
constructor() {
|
|
@@ -137,7 +148,7 @@ function valueType(n) {
|
|
|
137
148
|
throw new GgufParseError(`Unknown GGUF value type: ${n}`);
|
|
138
149
|
return n;
|
|
139
150
|
}
|
|
140
|
-
function readValue(c, type) {
|
|
151
|
+
function readValue(c, type, perLayer = false) {
|
|
141
152
|
switch (type) {
|
|
142
153
|
case 0:
|
|
143
154
|
return String(c.u8());
|
|
@@ -169,7 +180,8 @@ function readValue(c, type) {
|
|
|
169
180
|
if (len > BigInt(MAX_GGUF_ARRAY_LEN))
|
|
170
181
|
throw new GgufParseError(`Array length ${len} is unreasonably large`);
|
|
171
182
|
const n = Number(len);
|
|
172
|
-
|
|
183
|
+
const inlineAll = perLayer && INTEGER_TYPES.has(elemType) && n <= MAX_PER_LAYER_ARRAY_LEN;
|
|
184
|
+
if (n > INLINE_ARRAY_MAX_LEN && !inlineAll) {
|
|
173
185
|
skipArray(c, elemType, n);
|
|
174
186
|
return `<Array of type ${GGUF_VALUE_TYPE_NAMES[elemType]} with ${n} elements, data skipped>`;
|
|
175
187
|
}
|
|
@@ -234,7 +246,7 @@ export function readGgufMetadata(bytes) {
|
|
|
234
246
|
try {
|
|
235
247
|
const key = readString(c);
|
|
236
248
|
const type = valueType(c.u32());
|
|
237
|
-
metadata[key] = readValue(c, type);
|
|
249
|
+
metadata[key] = readValue(c, type, isPerLayerKey(key));
|
|
238
250
|
}
|
|
239
251
|
catch (e) {
|
|
240
252
|
if (e instanceof GgufNeedMoreData)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../src/models/gguf/reader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../src/models/gguf/reader.ts"],"names":[],"mappings":"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"}
|
package/dist/router/resolve.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface RemoteProvider {
|
|
|
21
21
|
/** The image and video models enabled for this provider; never part of chat routing. */
|
|
22
22
|
media?: CloudProviderMedia;
|
|
23
23
|
}
|
|
24
|
-
export type LocalProvider = 'llamacpp' | 'llamacpp-upstream' | 'mlx' | 'tensorrt-llm' | 'atomic-prism' | 'vllm' | 'sglang' | 'foundry-local' | 'litert-lm';
|
|
24
|
+
export type LocalProvider = 'llamacpp' | 'llamacpp-upstream' | 'mlx' | 'tensorrt-llm' | 'atomic-prism' | 'vllm' | 'sglang' | 'foundry-local' | 'litert-lm' | 'geniex';
|
|
25
25
|
/**
|
|
26
26
|
* The order local providers are searched in when a request names only a model. The same model id
|
|
27
27
|
* loaded under two engines resolves to the first; changing the order would silently move traffic.
|
|
@@ -29,7 +29,8 @@ export type LocalProvider = 'llamacpp' | 'llamacpp-upstream' | 'mlx' | 'tensorrt
|
|
|
29
29
|
* exactly that reason: adding a provider moves nothing that already resolved (`vllm` after
|
|
30
30
|
* `atomic-prism`, which core 0.10.0 already shipped; change `add-vllm-runtime`, D11; `sglang` after
|
|
31
31
|
* `vllm`, change `add-sglang-runtime`, D8; `foundry-local` after `sglang`, change `add-foundry-local`, D5;
|
|
32
|
-
* `litert-lm` after `foundry-local`, change `add-litert-lm-runtime`, task 6.1
|
|
32
|
+
* `litert-lm` after `foundry-local`, change `add-litert-lm-runtime`, task 6.1; `geniex` after `litert-lm`,
|
|
33
|
+
* change `add-geniex-runtime`, task 6.1). A Prism-only file never loads
|
|
33
34
|
* under another engine (the compatibility gate), so its sessions are found here even near the end of
|
|
34
35
|
* the list; one store model is never loaded in two managed providers at once, so their order never
|
|
35
36
|
* decides between two live sessions of one id.
|
package/dist/router/resolve.js
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* exactly that reason: adding a provider moves nothing that already resolved (`vllm` after
|
|
13
13
|
* `atomic-prism`, which core 0.10.0 already shipped; change `add-vllm-runtime`, D11; `sglang` after
|
|
14
14
|
* `vllm`, change `add-sglang-runtime`, D8; `foundry-local` after `sglang`, change `add-foundry-local`, D5;
|
|
15
|
-
* `litert-lm` after `foundry-local`, change `add-litert-lm-runtime`, task 6.1
|
|
15
|
+
* `litert-lm` after `foundry-local`, change `add-litert-lm-runtime`, task 6.1; `geniex` after `litert-lm`,
|
|
16
|
+
* change `add-geniex-runtime`, task 6.1). A Prism-only file never loads
|
|
16
17
|
* under another engine (the compatibility gate), so its sessions are found here even near the end of
|
|
17
18
|
* the list; one store model is never loaded in two managed providers at once, so their order never
|
|
18
19
|
* decides between two live sessions of one id.
|
|
@@ -27,6 +28,7 @@ export const LOCAL_SEARCH_ORDER = [
|
|
|
27
28
|
'sglang',
|
|
28
29
|
'foundry-local',
|
|
29
30
|
'litert-lm',
|
|
31
|
+
'geniex',
|
|
30
32
|
];
|
|
31
33
|
/**
|
|
32
34
|
* The remote provider that owns `modelId`, if any. For an id the app selected no provider for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/router/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/router/resolve.ts"],"names":[],"mappings":"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"}
|