@atomic-chat/core 0.20.7 → 0.21.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/dist/backend/install/service.d.ts +2 -20
- package/dist/backend/install/service.js +1 -0
- package/dist/backend/install/service.js.map +1 -1
- package/dist/cli/launch.d.ts +23 -3
- package/dist/cli/launch.js +59 -8
- package/dist/cli/launch.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/contracts/diagnostics.d.ts +21 -0
- package/dist/contracts/diagnostics.js +70 -0
- package/dist/contracts/diagnostics.js.map +1 -0
- package/dist/contracts/errors.d.ts +17 -75
- package/dist/contracts/errors.js +130 -2
- package/dist/contracts/errors.js.map +1 -1
- package/dist/contracts/events.d.ts +8 -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/settings.d.ts +5 -0
- package/dist/contracts/settings.js.map +1 -1
- package/dist/core/atomic-core.d.ts +3 -1
- package/dist/core/atomic-core.js +6 -2
- package/dist/core/atomic-core.js.map +1 -1
- package/dist/core/create.js +13 -3
- package/dist/core/create.js.map +1 -1
- package/dist/core/managed-environment.d.ts +2 -0
- package/dist/core/managed-environment.js +2 -0
- package/dist/core/managed-environment.js.map +1 -1
- package/dist/core/sessions.js +1 -0
- package/dist/core/sessions.js.map +1 -1
- package/dist/decision/service.d.ts +2 -23
- package/dist/decision/service.js +27 -0
- package/dist/decision/service.js.map +1 -1
- package/dist/decision/wiring.d.ts +2 -0
- package/dist/decision/wiring.js +1 -6
- package/dist/decision/wiring.js.map +1 -1
- package/dist/diffusion/errors.js +3 -3
- package/dist/diffusion/errors.js.map +1 -1
- package/dist/diffusion/jobs.js +1 -0
- package/dist/diffusion/jobs.js.map +1 -1
- package/dist/diffusion/remote-job.js +1 -0
- package/dist/diffusion/remote-job.js.map +1 -1
- package/dist/diffusion/service.d.ts +2 -6
- package/dist/diffusion/service.js +1 -0
- package/dist/diffusion/service.js.map +1 -1
- package/dist/diffusion/session.d.ts +2 -5
- package/dist/diffusion/session.js +1 -0
- package/dist/diffusion/session.js.map +1 -1
- package/dist/diffusion/wiring.d.ts +2 -0
- package/dist/diffusion/wiring.js +1 -5
- package/dist/diffusion/wiring.js.map +1 -1
- package/dist/downloads/downloader.d.ts +2 -18
- package/dist/downloads/downloader.js +204 -96
- package/dist/downloads/downloader.js.map +1 -1
- package/dist/downloads/protocol.d.ts +6 -2
- package/dist/downloads/protocol.js +27 -5
- package/dist/downloads/protocol.js.map +1 -1
- package/dist/embedding/service.d.ts +2 -18
- package/dist/embedding/service.js +21 -1
- package/dist/embedding/service.js.map +1 -1
- package/dist/embedding/wiring.d.ts +2 -0
- package/dist/embedding/wiring.js +1 -6
- package/dist/embedding/wiring.js.map +1 -1
- package/dist/integrations/catalog.d.ts +25 -8
- package/dist/integrations/catalog.js +105 -38
- package/dist/integrations/catalog.js.map +1 -1
- package/dist/integrations/configure/atomic-agent.d.ts +9 -1
- package/dist/integrations/configure/atomic-agent.js +42 -3
- package/dist/integrations/configure/atomic-agent.js.map +1 -1
- package/dist/integrations/configure/backup.d.ts +21 -0
- package/dist/integrations/configure/backup.js +52 -0
- package/dist/integrations/configure/backup.js.map +1 -0
- package/dist/integrations/configure/claude-code.d.ts +11 -4
- package/dist/integrations/configure/claude-code.js +73 -24
- package/dist/integrations/configure/claude-code.js.map +1 -1
- package/dist/integrations/configure/cline.d.ts +14 -4
- package/dist/integrations/configure/cline.js +78 -6
- package/dist/integrations/configure/cline.js.map +1 -1
- package/dist/integrations/configure/codex.d.ts +5 -3
- package/dist/integrations/configure/codex.js +12 -5
- package/dist/integrations/configure/codex.js.map +1 -1
- package/dist/integrations/configure/copilot.d.ts +28 -5
- package/dist/integrations/configure/copilot.js +124 -8
- package/dist/integrations/configure/copilot.js.map +1 -1
- package/dist/integrations/configure/droid.d.ts +13 -7
- package/dist/integrations/configure/droid.js +48 -17
- package/dist/integrations/configure/droid.js.map +1 -1
- package/dist/integrations/configure/dsh.d.ts +36 -20
- package/dist/integrations/configure/dsh.js +250 -48
- package/dist/integrations/configure/dsh.js.map +1 -1
- package/dist/integrations/configure/goose.d.ts +21 -7
- package/dist/integrations/configure/goose.js +141 -10
- package/dist/integrations/configure/goose.js.map +1 -1
- package/dist/integrations/configure/hermes.d.ts +63 -10
- package/dist/integrations/configure/hermes.js +360 -75
- package/dist/integrations/configure/hermes.js.map +1 -1
- package/dist/integrations/configure/json-backup.d.ts +73 -0
- package/dist/integrations/configure/json-backup.js +292 -0
- package/dist/integrations/configure/json-backup.js.map +1 -0
- package/dist/integrations/configure/json-key-backup.d.ts +43 -0
- package/dist/integrations/configure/json-key-backup.js +113 -0
- package/dist/integrations/configure/json-key-backup.js.map +1 -0
- package/dist/integrations/configure/kilo.d.ts +4 -4
- package/dist/integrations/configure/kilo.js +6 -9
- package/dist/integrations/configure/kilo.js.map +1 -1
- package/dist/integrations/configure/legacy-env-block.d.ts +18 -0
- package/dist/integrations/configure/legacy-env-block.js +47 -0
- package/dist/integrations/configure/legacy-env-block.js.map +1 -0
- package/dist/integrations/configure/mimo.d.ts +3 -2
- package/dist/integrations/configure/mimo.js +8 -9
- package/dist/integrations/configure/mimo.js.map +1 -1
- package/dist/integrations/configure/muse.d.ts +3 -3
- package/dist/integrations/configure/muse.js +5 -6
- package/dist/integrations/configure/muse.js.map +1 -1
- package/dist/integrations/configure/openclaude.d.ts +22 -7
- package/dist/integrations/configure/openclaude.js +132 -39
- package/dist/integrations/configure/openclaude.js.map +1 -1
- package/dist/integrations/configure/openclaw.d.ts +19 -5
- package/dist/integrations/configure/openclaw.js +79 -23
- package/dist/integrations/configure/openclaw.js.map +1 -1
- package/dist/integrations/configure/opencode-style.d.ts +53 -11
- package/dist/integrations/configure/opencode-style.js +218 -23
- package/dist/integrations/configure/opencode-style.js.map +1 -1
- package/dist/integrations/configure/opencode.d.ts +5 -4
- package/dist/integrations/configure/opencode.js +8 -10
- package/dist/integrations/configure/opencode.js.map +1 -1
- package/dist/integrations/configure/openhands.d.ts +5 -4
- package/dist/integrations/configure/openhands.js +7 -7
- package/dist/integrations/configure/openhands.js.map +1 -1
- package/dist/integrations/configure/pi.d.ts +6 -5
- package/dist/integrations/configure/pi.js +79 -30
- package/dist/integrations/configure/pi.js.map +1 -1
- package/dist/integrations/configure/poolside.d.ts +5 -4
- package/dist/integrations/configure/poolside.js +7 -7
- package/dist/integrations/configure/poolside.js.map +1 -1
- package/dist/integrations/configure/registry.d.ts +6 -0
- package/dist/integrations/configure/registry.js +1 -0
- package/dist/integrations/configure/registry.js.map +1 -1
- package/dist/integrations/configure/zcode.d.ts +6 -7
- package/dist/integrations/configure/zcode.js +26 -11
- package/dist/integrations/configure/zcode.js.map +1 -1
- package/dist/integrations/configure/zed.d.ts +16 -4
- package/dist/integrations/configure/zed.js +61 -13
- package/dist/integrations/configure/zed.js.map +1 -1
- package/dist/lock/instance-lock.js +7 -3
- package/dist/lock/instance-lock.js.map +1 -1
- package/dist/models/gguf/kv-cache.d.ts +20 -1
- package/dist/models/gguf/kv-cache.js +97 -7
- package/dist/models/gguf/kv-cache.js.map +1 -1
- package/dist/models/gguf/reader.d.ts +5 -3
- package/dist/models/gguf/reader.js +10 -6
- package/dist/models/gguf/reader.js.map +1 -1
- package/dist/remote-access/manager.d.ts +2 -0
- package/dist/remote-access/manager.js +18 -2
- package/dist/remote-access/manager.js.map +1 -1
- package/dist/runtime/environment/service.d.ts +2 -14
- package/dist/runtime/environment/service.js +10 -0
- package/dist/runtime/environment/service.js.map +1 -1
- package/dist/runtime/environment/wiring.d.ts +2 -23
- package/dist/runtime/environment/wiring.js +1 -0
- package/dist/runtime/environment/wiring.js.map +1 -1
- package/dist/runtime/llamacpp/args.d.ts +14 -0
- package/dist/runtime/llamacpp/args.js +48 -4
- package/dist/runtime/llamacpp/args.js.map +1 -1
- package/dist/runtime/llamacpp/ctx-ladder.d.ts +6 -3
- package/dist/runtime/llamacpp/ctx-ladder.js +6 -3
- package/dist/runtime/llamacpp/ctx-ladder.js.map +1 -1
- package/dist/runtime/llamacpp/errors.d.ts +2 -2
- package/dist/runtime/llamacpp/errors.js +29 -19
- package/dist/runtime/llamacpp/errors.js.map +1 -1
- package/dist/runtime/llamacpp/fit-margin.d.ts +24 -0
- package/dist/runtime/llamacpp/fit-margin.js +31 -0
- package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
- package/dist/runtime/llamacpp/generation-limits.d.ts +45 -0
- package/dist/runtime/llamacpp/generation-limits.js +61 -0
- package/dist/runtime/llamacpp/generation-limits.js.map +1 -0
- package/dist/runtime/llamacpp/load-plan.d.ts +14 -2
- package/dist/runtime/llamacpp/load-plan.js +64 -13
- package/dist/runtime/llamacpp/load-plan.js.map +1 -1
- package/dist/runtime/llamacpp/runtime.d.ts +1 -0
- package/dist/runtime/llamacpp/runtime.js +2 -0
- package/dist/runtime/llamacpp/runtime.js.map +1 -1
- package/dist/runtime/managed-engines/runtime.js +13 -2
- package/dist/runtime/managed-engines/runtime.js.map +1 -1
- package/dist/runtime/managed-engines/spec.d.ts +6 -0
- package/dist/runtime/managed-engines/spec.js.map +1 -1
- package/dist/runtime/managed-models/auto-limits.d.ts +47 -0
- package/dist/runtime/managed-models/auto-limits.js +60 -0
- package/dist/runtime/managed-models/auto-limits.js.map +1 -0
- package/dist/runtime/managed-models/index.d.ts +1 -0
- package/dist/runtime/managed-models/index.js +1 -0
- package/dist/runtime/managed-models/index.js.map +1 -1
- package/dist/runtime/mlx/config.d.ts +9 -5
- package/dist/runtime/mlx/config.js +12 -6
- package/dist/runtime/mlx/config.js.map +1 -1
- package/dist/runtime/mlx/model-files.d.ts +9 -0
- package/dist/runtime/mlx/model-files.js +26 -0
- package/dist/runtime/mlx/model-files.js.map +1 -1
- package/dist/runtime/mlx/runtime.d.ts +7 -0
- package/dist/runtime/mlx/runtime.js +24 -2
- package/dist/runtime/mlx/runtime.js.map +1 -1
- package/dist/runtime/sglang/adapter.d.ts +4 -0
- package/dist/runtime/sglang/adapter.js +9 -6
- package/dist/runtime/sglang/adapter.js.map +1 -1
- package/dist/runtime/sglang/engine.js +2 -1
- package/dist/runtime/sglang/engine.js.map +1 -1
- package/dist/runtime/sglang/memory.d.ts +11 -1
- package/dist/runtime/sglang/memory.js +34 -3
- package/dist/runtime/sglang/memory.js.map +1 -1
- package/dist/runtime/sglang/settings.d.ts +2 -1
- package/dist/runtime/sglang/settings.js +11 -7
- package/dist/runtime/sglang/settings.js.map +1 -1
- package/dist/runtime/vllm/adapter.d.ts +4 -0
- package/dist/runtime/vllm/adapter.js +9 -6
- package/dist/runtime/vllm/adapter.js.map +1 -1
- package/dist/runtime/vllm/engine.js +1 -0
- package/dist/runtime/vllm/engine.js.map +1 -1
- package/dist/runtime/vllm/memory.d.ts +12 -1
- package/dist/runtime/vllm/memory.js +44 -2
- package/dist/runtime/vllm/memory.js.map +1 -1
- package/dist/runtime/vllm/settings.d.ts +2 -1
- package/dist/runtime/vllm/settings.js +12 -7
- package/dist/runtime/vllm/settings.js.map +1 -1
- package/dist/server/public/context-window.d.ts +29 -0
- package/dist/server/public/context-window.js +77 -0
- package/dist/server/public/context-window.js.map +1 -0
- package/dist/server/public/decision-preview.js +1 -0
- package/dist/server/public/decision-preview.js.map +1 -1
- package/dist/server/public/errors.d.ts +17 -4
- package/dist/server/public/errors.js +58 -8
- package/dist/server/public/errors.js.map +1 -1
- package/dist/server/public/forward.js +86 -22
- package/dist/server/public/forward.js.map +1 -1
- package/dist/server/public/index.d.ts +1 -0
- package/dist/server/public/index.js +1 -0
- package/dist/server/public/index.js.map +1 -1
- package/dist/server/public/listing.d.ts +9 -2
- package/dist/server/public/listing.js +30 -9
- package/dist/server/public/listing.js.map +1 -1
- package/dist/server/public/responses.js +9 -5
- package/dist/server/public/responses.js.map +1 -1
- package/dist/server/public/system-messages.d.ts +39 -0
- package/dist/server/public/system-messages.js +166 -0
- package/dist/server/public/system-messages.js.map +1 -0
- package/dist/server/public/telemetry.d.ts +9 -0
- package/dist/server/public/telemetry.js +42 -6
- package/dist/server/public/telemetry.js.map +1 -1
- package/dist/server/public/thinking.d.ts +26 -0
- package/dist/server/public/thinking.js +62 -0
- package/dist/server/public/thinking.js.map +1 -0
- package/dist/server/public/trace.d.ts +8 -0
- package/dist/server/public/trace.js +17 -0
- package/dist/server/public/trace.js.map +1 -1
- package/dist/server/public/types.d.ts +8 -0
- package/dist/server/shims/index.d.ts +1 -0
- package/dist/server/shims/index.js +1 -0
- package/dist/server/shims/index.js.map +1 -1
- package/dist/server/shims/reminders.d.ts +8 -0
- package/dist/server/shims/reminders.js +14 -0
- package/dist/server/shims/reminders.js.map +1 -0
- package/dist/server/shims/responses.d.ts +33 -9
- package/dist/server/shims/responses.js +160 -36
- package/dist/server/shims/responses.js.map +1 -1
- package/dist/settings/default-migrations.d.ts +34 -0
- package/dist/settings/default-migrations.js +47 -0
- package/dist/settings/default-migrations.js.map +1 -0
- package/dist/settings/schema/atomic-prism.json +23 -9
- package/dist/settings/schema/llamacpp-upstream.json +23 -9
- package/dist/settings/schema/llamacpp.json +23 -9
- package/dist/settings/schema/sglang.json +8 -8
- package/dist/settings/schema/vllm.json +8 -8
- package/dist/settings/schema.js +1 -0
- package/dist/settings/schema.js.map +1 -1
- package/dist/settings/store.d.ts +6 -0
- package/dist/settings/store.js +19 -2
- package/dist/settings/store.js.map +1 -1
- package/dist/telemetry/diagnostics.d.ts +14 -0
- package/dist/telemetry/diagnostics.js +285 -0
- package/dist/telemetry/diagnostics.js.map +1 -0
- package/dist/telemetry/envelope.d.ts +1 -1
- package/dist/telemetry/envelope.js +57 -28
- package/dist/telemetry/envelope.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -0
- package/dist/telemetry/index.js +1 -0
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/policy.d.ts +1 -1
- package/dist/telemetry/policy.js +45 -2
- package/dist/telemetry/policy.js.map +1 -1
- package/dist/telemetry/reporter.d.ts +1 -0
- package/dist/telemetry/reporter.js +0 -0
- package/dist/telemetry/reporter.js.map +1 -1
- package/dist/telemetry/reports.d.ts +2 -7
- package/dist/telemetry/reports.js +34 -29
- package/dist/telemetry/reports.js.map +1 -1
- package/dist/telemetry/stack.d.ts +1 -1
- package/dist/telemetry/stack.js +8 -1
- package/dist/telemetry/stack.js.map +1 -1
- package/dist/telemetry/subscribe.d.ts +1 -1
- package/dist/telemetry/subscribe.js +7 -5
- package/dist/telemetry/subscribe.js.map +1 -1
- package/dist/telemetry/types.d.ts +3 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/runtime/vllm/settings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GAEvB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/runtime/vllm/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The context window a local session serves: what `/models` advertises (`context_length`,
|
|
3
|
+
* `meta.n_ctx`) so an agent can compact before it overflows, and what the request log keeps with each
|
|
4
|
+
* request.
|
|
5
|
+
*
|
|
6
|
+
* A session that declares its limits (`LocalTarget.policy`) says so itself. llama.cpp says it in
|
|
7
|
+
* `/props` (`default_generation_settings.n_ctx`, the window of one slot): under fit the core never
|
|
8
|
+
* chose it, so nothing else knows it. `/props` is answered from the server's metadata without a slot,
|
|
9
|
+
* so it is cheap even while a prompt is being processed, and it is read once per loaded session.
|
|
10
|
+
* Any other engine has no window the server can learn: none is advertised rather than a guess.
|
|
11
|
+
*/
|
|
12
|
+
import type { LocalTarget, PublicServerDeps } from './types.js';
|
|
13
|
+
/** The window in a llama.cpp `/props` body; `undefined` when it does not say. */
|
|
14
|
+
export declare function windowFromProps(body: unknown): number | undefined;
|
|
15
|
+
/** What the core can learn of each session's window, asked once per session generation. */
|
|
16
|
+
export declare class SessionWindows {
|
|
17
|
+
private readonly known;
|
|
18
|
+
private readonly fetchImpl;
|
|
19
|
+
private readonly timeoutMs;
|
|
20
|
+
constructor(options?: {
|
|
21
|
+
fetch?: typeof fetch;
|
|
22
|
+
timeoutMs?: number;
|
|
23
|
+
});
|
|
24
|
+
/** The window `target` serves; `undefined` when its engine does not say or cannot be asked. */
|
|
25
|
+
of(target: LocalTarget): Promise<number | undefined>;
|
|
26
|
+
private readProps;
|
|
27
|
+
}
|
|
28
|
+
/** The window a request to `target` runs with: the one it declares, else what the host can learn. */
|
|
29
|
+
export declare function sessionWindow(deps: PublicServerDeps, target: LocalTarget): Promise<number | undefined>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The context window a local session serves: what `/models` advertises (`context_length`,
|
|
3
|
+
* `meta.n_ctx`) so an agent can compact before it overflows, and what the request log keeps with each
|
|
4
|
+
* request.
|
|
5
|
+
*
|
|
6
|
+
* A session that declares its limits (`LocalTarget.policy`) says so itself. llama.cpp says it in
|
|
7
|
+
* `/props` (`default_generation_settings.n_ctx`, the window of one slot): under fit the core never
|
|
8
|
+
* chose it, so nothing else knows it. `/props` is answered from the server's metadata without a slot,
|
|
9
|
+
* so it is cheap even while a prompt is being processed, and it is read once per loaded session.
|
|
10
|
+
* Any other engine has no window the server can learn: none is advertised rather than a guess.
|
|
11
|
+
*/
|
|
12
|
+
import { isLlamaCppServer } from './thinking.js';
|
|
13
|
+
const PROPS_TIMEOUT_MS = 2000;
|
|
14
|
+
/** Sessions remembered at most; past it the cache starts over (every reload is a new session). */
|
|
15
|
+
const MAX_REMEMBERED = 64;
|
|
16
|
+
/** The window in a llama.cpp `/props` body; `undefined` when it does not say. */
|
|
17
|
+
export function windowFromProps(body) {
|
|
18
|
+
if (typeof body !== 'object' || body === null)
|
|
19
|
+
return undefined;
|
|
20
|
+
const props = body;
|
|
21
|
+
for (const value of [props.default_generation_settings?.n_ctx, props.n_ctx]) {
|
|
22
|
+
if (typeof value === 'number' && Number.isFinite(value) && value > 0)
|
|
23
|
+
return Math.floor(value);
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
/** What the core can learn of each session's window, asked once per session generation. */
|
|
28
|
+
export class SessionWindows {
|
|
29
|
+
known = new Map();
|
|
30
|
+
fetchImpl;
|
|
31
|
+
timeoutMs;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
34
|
+
this.timeoutMs = options.timeoutMs ?? PROPS_TIMEOUT_MS;
|
|
35
|
+
}
|
|
36
|
+
/** The window `target` serves; `undefined` when its engine does not say or cannot be asked. */
|
|
37
|
+
of(target) {
|
|
38
|
+
if (!isLlamaCppServer(target.provider))
|
|
39
|
+
return Promise.resolve(undefined);
|
|
40
|
+
// A reload gets a new generation (and port and key): the window it was loaded with may differ.
|
|
41
|
+
const key = [target.provider, target.modelId, target.port, target.generation ?? '', target.apiKey].join('\0');
|
|
42
|
+
const cached = this.known.get(key);
|
|
43
|
+
if (cached)
|
|
44
|
+
return cached;
|
|
45
|
+
if (this.known.size >= MAX_REMEMBERED)
|
|
46
|
+
this.known.clear();
|
|
47
|
+
const read = this.readProps(target);
|
|
48
|
+
this.known.set(key, read);
|
|
49
|
+
// An engine still starting, or one that did not answer, is asked again next time.
|
|
50
|
+
void read.then((window) => {
|
|
51
|
+
if (window === undefined && this.known.get(key) === read)
|
|
52
|
+
this.known.delete(key);
|
|
53
|
+
});
|
|
54
|
+
return read;
|
|
55
|
+
}
|
|
56
|
+
async readProps(target) {
|
|
57
|
+
try {
|
|
58
|
+
const response = await this.fetchImpl(`http://127.0.0.1:${target.port}/props`, {
|
|
59
|
+
headers: target.apiKey ? { Authorization: `Bearer ${target.apiKey}` } : {},
|
|
60
|
+
signal: AbortSignal.timeout(this.timeoutMs),
|
|
61
|
+
});
|
|
62
|
+
if (!response.ok)
|
|
63
|
+
return undefined;
|
|
64
|
+
return windowFromProps(await response.json());
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** The window a request to `target` runs with: the one it declares, else what the host can learn. */
|
|
72
|
+
export function sessionWindow(deps, target) {
|
|
73
|
+
if (target.policy?.contextLength !== undefined)
|
|
74
|
+
return Promise.resolve(target.policy.contextLength);
|
|
75
|
+
return deps.contextWindow?.(target) ?? Promise.resolve(undefined);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=context-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-window.js","sourceRoot":"","sources":["../../../src/server/public/context-window.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-preview.js","sourceRoot":"","sources":["../../../src/server/public/decision-preview.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decision-preview.js","sourceRoot":"","sources":["../../../src/server/public/decision-preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type { JsonValue } from '../shims/index.js';
|
|
13
13
|
export declare const LLAMA_CONTEXT_OVERFLOW_TYPE = "exceed_context_size_error";
|
|
14
|
+
/** A specific engine refusal suitable for excluding an oversized prompt from error reporting. */
|
|
15
|
+
export declare function isLlamaContextOverflow(body: string): boolean;
|
|
14
16
|
/** A request that no longer fits the loaded context window, as llama.cpp and MLX word it. */
|
|
15
17
|
export declare function isContextLimitError(status: number, body: string): boolean;
|
|
16
18
|
export declare function bodyIndicatesOom(body: string): boolean;
|
|
@@ -39,6 +41,13 @@ export declare function selectedProviderUnavailableJson(modelId: string, provide
|
|
|
39
41
|
*/
|
|
40
42
|
export declare function emptyMessagesRefusal(json: JsonValue): string | undefined;
|
|
41
43
|
export declare function computeErrorEnvelope(oom: boolean): string;
|
|
44
|
+
/**
|
|
45
|
+
* A llama.cpp context overflow as the Anthropic API words one: a 400 `invalid_request_error` whose
|
|
46
|
+
* message is exactly `prompt is too long: N tokens > M maximum`. Claude Code matches that wording to
|
|
47
|
+
* compact the conversation and retry; any other text it shows as a failed turn. `undefined` for any
|
|
48
|
+
* other error, or an overflow that does not say both sizes.
|
|
49
|
+
*/
|
|
50
|
+
export declare function anthropicPromptTooLong(status: number, body: string): string | undefined;
|
|
42
51
|
/**
|
|
43
52
|
* A local engine's error as the client receives it: an existing `{"error": {...}}` envelope passes
|
|
44
53
|
* unchanged, anything else (plain stderr text, mlx-vlm's `{"detail": ...}`) is wrapped with a typed
|
|
@@ -48,8 +57,12 @@ export declare function structureBackendErrorBody(body: string, oom: boolean, ct
|
|
|
48
57
|
export declare function clientMaxTokens(requestBody: Buffer): number | undefined;
|
|
49
58
|
/**
|
|
50
59
|
* A 200 whose `finish_reason` is `length` because the context window ran out rather than because
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* `
|
|
60
|
+
* an output cap was reached. The cap is the client's `max_tokens` or, without one, the engine's own:
|
|
61
|
+
* core starts llama.cpp with `--n-predict` (DEFAULT_N_PREDICT unless the user set another,
|
|
62
|
+
* `engineCap`), so a `length` with no client cap is no longer always the window. Either way only a
|
|
63
|
+
* stop clearly short of the cap counts. An unknown token count is taken as client-driven under a
|
|
64
|
+
* client cap, so a `max_tokens: 16` health check never grows the context, and as the window under
|
|
65
|
+
* the engine's alone, as before. `engineCap` `null` (an engine started without a cap) keeps the
|
|
66
|
+
* old rule: with no client cap, `length` can only mean the window.
|
|
54
67
|
*/
|
|
55
|
-
export declare function isContextOverflowFinishLength(response: JsonValue, requestBody: Buffer): boolean;
|
|
68
|
+
export declare function isContextOverflowFinishLength(response: JsonValue, requestBody: Buffer, engineCap?: number | null): boolean;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* The wording of every message is part of the contract: the app's UI and external agents match on
|
|
10
10
|
* it to decide whether to offer a larger context or a smaller model.
|
|
11
11
|
*/
|
|
12
|
+
import { DEFAULT_N_PREDICT } from '../../runtime/llamacpp/generation-limits.js';
|
|
12
13
|
import { isJsonObject, serdeToString } from '../shims/index.js';
|
|
13
14
|
/**
|
|
14
15
|
* How llama.cpp says a prompt does not fit (upstream, TurboQuant and Prism alike): a 400 with
|
|
@@ -18,12 +19,16 @@ import { isJsonObject, serdeToString } from '../shims/index.js';
|
|
|
18
19
|
*/
|
|
19
20
|
const LLAMA_CONTEXT_OVERFLOW = /request \(\d+ tokens\) exceeds the available context size/i;
|
|
20
21
|
export const LLAMA_CONTEXT_OVERFLOW_TYPE = 'exceed_context_size_error';
|
|
22
|
+
/** A specific engine refusal suitable for excluding an oversized prompt from error reporting. */
|
|
23
|
+
export function isLlamaContextOverflow(body) {
|
|
24
|
+
return LLAMA_CONTEXT_OVERFLOW.test(body) || errorTypeOf(body) === LLAMA_CONTEXT_OVERFLOW_TYPE;
|
|
25
|
+
}
|
|
21
26
|
/** A request that no longer fits the loaded context window, as llama.cpp and MLX word it. */
|
|
22
27
|
export function isContextLimitError(status, body) {
|
|
23
28
|
if (![400, 413, 500, 503].includes(status))
|
|
24
29
|
return false;
|
|
25
30
|
const b = body.toLowerCase();
|
|
26
|
-
if (
|
|
31
|
+
if (isLlamaContextOverflow(body))
|
|
27
32
|
return true;
|
|
28
33
|
// Older builds' wording.
|
|
29
34
|
if (b.includes('the request exceeds the available context size'))
|
|
@@ -117,6 +122,43 @@ function errorTypeOf(body) {
|
|
|
117
122
|
const type = isJsonObject(error) ? error['type'] : undefined;
|
|
118
123
|
return typeof type === 'string' ? type : undefined;
|
|
119
124
|
}
|
|
125
|
+
/** The prompt size and window of a llama.cpp context overflow, from its fields or its message. */
|
|
126
|
+
function llamaOverflowSizes(body) {
|
|
127
|
+
const parsed = parseJson(body);
|
|
128
|
+
const error = isJsonObject(parsed) ? parsed['error'] : undefined;
|
|
129
|
+
if (isJsonObject(error)) {
|
|
130
|
+
const prompt = asU64(error['n_prompt_tokens']);
|
|
131
|
+
const window = asU64(error['n_ctx']);
|
|
132
|
+
if (prompt !== undefined && window !== undefined && window > 0)
|
|
133
|
+
return { prompt, window };
|
|
134
|
+
}
|
|
135
|
+
const message = isJsonObject(error) && typeof error['message'] === 'string' ? error['message'] : body;
|
|
136
|
+
const sizes = /request \((\d+) tokens\) exceeds the available context size \((\d+) tokens\)/i.exec(message) ??
|
|
137
|
+
/input \((\d+) tokens\) is larger than the max context size \((\d+) tokens\)/i.exec(message);
|
|
138
|
+
return sizes ? { prompt: Number(sizes[1]), window: Number(sizes[2]) } : undefined;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* A llama.cpp context overflow as the Anthropic API words one: a 400 `invalid_request_error` whose
|
|
142
|
+
* message is exactly `prompt is too long: N tokens > M maximum`. Claude Code matches that wording to
|
|
143
|
+
* compact the conversation and retry; any other text it shows as a failed turn. `undefined` for any
|
|
144
|
+
* other error, or an overflow that does not say both sizes.
|
|
145
|
+
*/
|
|
146
|
+
export function anthropicPromptTooLong(status, body) {
|
|
147
|
+
if (status !== 400)
|
|
148
|
+
return undefined;
|
|
149
|
+
if (!isLlamaContextOverflow(body))
|
|
150
|
+
return undefined;
|
|
151
|
+
const sizes = llamaOverflowSizes(body);
|
|
152
|
+
if (sizes === undefined)
|
|
153
|
+
return undefined;
|
|
154
|
+
return serdeToString({
|
|
155
|
+
type: 'error',
|
|
156
|
+
error: {
|
|
157
|
+
type: 'invalid_request_error',
|
|
158
|
+
message: `prompt is too long: ${sizes.prompt} tokens > ${sizes.window} maximum`,
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
120
162
|
function isStructuredErrorBody(body) {
|
|
121
163
|
const parsed = parseJson(body);
|
|
122
164
|
return isJsonObject(parsed) && isJsonObject(parsed['error']);
|
|
@@ -150,20 +192,28 @@ export function clientMaxTokens(requestBody) {
|
|
|
150
192
|
}
|
|
151
193
|
/**
|
|
152
194
|
* A 200 whose `finish_reason` is `length` because the context window ran out rather than because
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
* `
|
|
195
|
+
* an output cap was reached. The cap is the client's `max_tokens` or, without one, the engine's own:
|
|
196
|
+
* core starts llama.cpp with `--n-predict` (DEFAULT_N_PREDICT unless the user set another,
|
|
197
|
+
* `engineCap`), so a `length` with no client cap is no longer always the window. Either way only a
|
|
198
|
+
* stop clearly short of the cap counts. An unknown token count is taken as client-driven under a
|
|
199
|
+
* client cap, so a `max_tokens: 16` health check never grows the context, and as the window under
|
|
200
|
+
* the engine's alone, as before. `engineCap` `null` (an engine started without a cap) keeps the
|
|
201
|
+
* old rule: with no client cap, `length` can only mean the window.
|
|
156
202
|
*/
|
|
157
|
-
export function isContextOverflowFinishLength(response, requestBody) {
|
|
203
|
+
export function isContextOverflowFinishLength(response, requestBody, engineCap = DEFAULT_N_PREDICT) {
|
|
158
204
|
const choices = isJsonObject(response) ? response['choices'] : undefined;
|
|
159
205
|
const hasLength = Array.isArray(choices) && choices.some((c) => isJsonObject(c) && c['finish_reason'] === 'length');
|
|
160
206
|
if (!hasLength)
|
|
161
207
|
return false;
|
|
162
|
-
const
|
|
163
|
-
|
|
208
|
+
const clientCap = clientMaxTokens(requestBody);
|
|
209
|
+
const cap = clientCap ?? engineCap;
|
|
210
|
+
if (cap === null)
|
|
164
211
|
return true;
|
|
165
212
|
const usage = isJsonObject(response) ? response['usage'] : undefined;
|
|
166
213
|
const done = asU64(isJsonObject(usage) ? usage['completion_tokens'] : undefined);
|
|
167
|
-
|
|
214
|
+
// Without a count, only the client's own cap is a known reason; the engine's is not proven.
|
|
215
|
+
if (done === undefined)
|
|
216
|
+
return clientCap === undefined;
|
|
217
|
+
return done + 1 < cap;
|
|
168
218
|
}
|
|
169
219
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/server/public/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAG/D;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,4DAA4D,CAAA;AAC3F,MAAM,CAAC,MAAM,2BAA2B,GAAG,2BAA2B,CAAA;AAEtE,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,IAAY;IAC9D,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAC5B,IAAI,sBAAsB,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/server/public/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,12 +24,15 @@ import { AnthropicStreamConverter, anthropicRequestToChat, chatResponseToAnthrop
|
|
|
24
24
|
import { LOCAL_SEARCH_ORDER, resolveRemoteProvider, resolveSelectedRoute } from '../../router/index.js';
|
|
25
25
|
import { captureReport, inferenceFailureReport } from '../../telemetry/index.js';
|
|
26
26
|
import { autoIncreaseCtx } from './ctx.js';
|
|
27
|
+
import { sessionWindow } from './context-window.js';
|
|
27
28
|
import { SseLineReader } from './sse.js';
|
|
28
29
|
import { StreamTelemetry, isUsageOnlyChunk, maybeInjectStreamUsage } from './telemetry.js';
|
|
29
30
|
import { endpointFromPath } from './trace.js';
|
|
30
|
-
import { bodyIndicatesOom, computeErrorEnvelope, emptyMessagesRefusal, isComputeBackendError, isContextLimitError, isContextOverflowFinishLength, modelNotFoundJson, selectedProviderUnavailableJson, structureBackendErrorBody, structuredErrorJson, } from './errors.js';
|
|
31
|
+
import { anthropicPromptTooLong, bodyIndicatesOom, computeErrorEnvelope, emptyMessagesRefusal, isComputeBackendError, isContextLimitError, isLlamaContextOverflow, isContextOverflowFinishLength, modelNotFoundJson, selectedProviderUnavailableJson, structureBackendErrorBody, structuredErrorJson, } from './errors.js';
|
|
31
32
|
import { answer, clientGone, connectTimeoutMs, invalidJsonMessage } from './exchange.js';
|
|
32
33
|
import { policyRefusal } from './policy.js';
|
|
34
|
+
import { placedSystemMessages } from './system-messages.js';
|
|
35
|
+
import { isLlamaCppServer, noThinkingTemplateKwargs } from './thinking.js';
|
|
33
36
|
import { embeddingInputRefusal, messageRolesRefusal } from './validate.js';
|
|
34
37
|
import { forwardableHeaders, pipeBody, readBody, readUpstreamText, relay, relayedHeaders, sendUpstream, } from './wire.js';
|
|
35
38
|
const NO_SELECTION = new Map();
|
|
@@ -183,6 +186,7 @@ export async function serveForward(ex) {
|
|
|
183
186
|
}
|
|
184
187
|
backend = { kind: 'local', session };
|
|
185
188
|
trace.backend = session.provider;
|
|
189
|
+
trace.recordWindow(() => sessionWindow(ex.deps, session));
|
|
186
190
|
const refused = session.policy && policyRefusal(session.policy, ex.path, modelId, json);
|
|
187
191
|
if (refused) {
|
|
188
192
|
trace.errorKind = 'bad_request';
|
|
@@ -217,13 +221,22 @@ export async function serveForward(ex) {
|
|
|
217
221
|
answer(ex, 500, 'Internal routing error');
|
|
218
222
|
return;
|
|
219
223
|
}
|
|
224
|
+
// An Anthropic request that asks for no thinking gets none from a llama.cpp chat template either
|
|
225
|
+
// (QA B08): on `/v1/messages` and on the chat-completions fallback alike.
|
|
226
|
+
const noThinking = isMessages && backend.kind === 'local'
|
|
227
|
+
? noThinkingTemplateKwargs(backend.session.provider, json)
|
|
228
|
+
: undefined;
|
|
229
|
+
// System messages inside the conversation stay where they are, as reminders in a user turn, before a
|
|
230
|
+
// strict llama.cpp template sees them (QA B08, audit S1): on `/v1/messages` and on the fallback.
|
|
231
|
+
const placed = isMessages && backend.kind === 'local' ? placedSystemMessages(backend.session.provider, json) : undefined;
|
|
232
|
+
const messagesJson = placed !== undefined && isJsonObject(json) ? { ...json, ...placed } : json;
|
|
220
233
|
// A session that declares its routes and has no `/v1/messages` of its own goes straight to the
|
|
221
234
|
// chat-completions translation: asking it first would only be refused (findings-2.14-r1.md item 4).
|
|
222
235
|
if (isMessages &&
|
|
223
236
|
backend.kind === 'local' &&
|
|
224
237
|
backend.session.policy &&
|
|
225
238
|
!backend.session.policy.routes.some((r) => r.method === 'POST' && r.path === '/v1/messages')) {
|
|
226
|
-
await messagesFallback(ex, backend, url, key,
|
|
239
|
+
await messagesFallback(ex, backend, url, key, messagesJson, noThinking);
|
|
227
240
|
return;
|
|
228
241
|
}
|
|
229
242
|
// While the inspector watches, a local streaming chat is asked for real token counts. Only local
|
|
@@ -231,13 +244,19 @@ export async function serveForward(ex) {
|
|
|
231
244
|
const injected = trace.inspecting && stream && ex.path === '/chat/completions' && backend.kind === 'local'
|
|
232
245
|
? maybeInjectStreamUsage(raw)
|
|
233
246
|
: undefined;
|
|
247
|
+
const rewritten = (noThinking !== undefined || placed !== undefined) && isJsonObject(messagesJson)
|
|
248
|
+
? Buffer.from(serdeToString({
|
|
249
|
+
...messagesJson,
|
|
250
|
+
...(noThinking !== undefined ? { chat_template_kwargs: noThinking } : {}),
|
|
251
|
+
}))
|
|
252
|
+
: undefined;
|
|
234
253
|
const signal = clientGone(ex);
|
|
235
254
|
let response;
|
|
236
255
|
try {
|
|
237
256
|
response = await sendUpstream(url, {
|
|
238
257
|
method: ex.method,
|
|
239
258
|
headers: outboundHeaders(ex, ['host', 'authorization'], backend, key),
|
|
240
|
-
body: injected ?? raw,
|
|
259
|
+
body: injected ?? rewritten ?? raw,
|
|
241
260
|
connectTimeoutMs: connectTimeoutMs(ex),
|
|
242
261
|
signal,
|
|
243
262
|
});
|
|
@@ -250,7 +269,7 @@ export async function serveForward(ex) {
|
|
|
250
269
|
}
|
|
251
270
|
if (!isSuccess(response.status)) {
|
|
252
271
|
if (isMessages)
|
|
253
|
-
await messagesFallback(ex, backend, url, key,
|
|
272
|
+
await messagesFallback(ex, backend, url, key, messagesJson, noThinking, response);
|
|
254
273
|
else
|
|
255
274
|
await upstreamError(ex, backend, modelId, raw, response);
|
|
256
275
|
return;
|
|
@@ -378,6 +397,22 @@ async function growAndRetry(ex, provider, modelId, raw, trigger) {
|
|
|
378
397
|
await relay(ex.res, retry, ex.cors);
|
|
379
398
|
return true;
|
|
380
399
|
}
|
|
400
|
+
/** Only a terminal failure from a local engine belongs to this core. Inspect its body here only. */
|
|
401
|
+
function reportInferenceFailure(ex, backend, status, body) {
|
|
402
|
+
if (backend.kind !== 'local' || status < 500)
|
|
403
|
+
return;
|
|
404
|
+
const oom = bodyIndicatesOom(body);
|
|
405
|
+
const compute = isComputeBackendError(status, body);
|
|
406
|
+
if (!oom && !compute && isLlamaContextOverflow(body))
|
|
407
|
+
return;
|
|
408
|
+
captureReport(ex.deps.errors, inferenceFailureReport({
|
|
409
|
+
provider: backend.session.provider,
|
|
410
|
+
modelId: backend.session.modelId,
|
|
411
|
+
status,
|
|
412
|
+
compute,
|
|
413
|
+
oom,
|
|
414
|
+
}));
|
|
415
|
+
}
|
|
381
416
|
async function upstreamError(ex, backend, modelId, raw, response) {
|
|
382
417
|
const errorBody = await readUpstreamText(response);
|
|
383
418
|
const status = response.status;
|
|
@@ -396,14 +431,7 @@ async function upstreamError(ex, backend, modelId, raw, response) {
|
|
|
396
431
|
// it started. An error it knows (a context overflow) gets its own OpenAI body; any other is
|
|
397
432
|
// wrapped like every local engine's.
|
|
398
433
|
recordFailure();
|
|
399
|
-
|
|
400
|
-
provider,
|
|
401
|
-
modelId,
|
|
402
|
-
status,
|
|
403
|
-
body: errorBody,
|
|
404
|
-
compute: false,
|
|
405
|
-
oom: trace.oomDetected,
|
|
406
|
-
}));
|
|
434
|
+
reportInferenceFailure(ex, backend, status, errorBody);
|
|
407
435
|
const mapped = policy.mapError(status, errorBody);
|
|
408
436
|
if (mapped !== null) {
|
|
409
437
|
answer(ex, status, serdeToString(mapped), [['Content-Type', 'application/json']]);
|
|
@@ -428,19 +456,12 @@ async function upstreamError(ex, backend, modelId, raw, response) {
|
|
|
428
456
|
trace.oomDetected = true;
|
|
429
457
|
trace.ctxOverflowDetected = false;
|
|
430
458
|
const oom = bodyIndicatesOom(errorBody);
|
|
431
|
-
|
|
459
|
+
reportInferenceFailure(ex, backend, status, errorBody);
|
|
432
460
|
answer(ex, 400, computeErrorEnvelope(oom));
|
|
433
461
|
return;
|
|
434
462
|
}
|
|
435
463
|
recordFailure();
|
|
436
|
-
|
|
437
|
-
provider,
|
|
438
|
-
modelId,
|
|
439
|
-
status,
|
|
440
|
-
body: errorBody,
|
|
441
|
-
compute: false,
|
|
442
|
-
oom: trace.oomDetected,
|
|
443
|
-
}));
|
|
464
|
+
reportInferenceFailure(ex, backend, status, errorBody);
|
|
444
465
|
answer(ex, status, structureBackendErrorBody(errorBody, trace.oomDetected, trace.ctxOverflowDetected));
|
|
445
466
|
return;
|
|
446
467
|
}
|
|
@@ -482,13 +503,34 @@ async function inspectFinish(ex, session, modelId, raw, response) {
|
|
|
482
503
|
* gets the original error; if it answers with an error, the client gets that one.
|
|
483
504
|
*/
|
|
484
505
|
async function messagesFallback(ex, backend, url, key, json,
|
|
506
|
+
/** `chat_template_kwargs` that keep a llama.cpp template from thinking the request did not ask for. */
|
|
507
|
+
noThinking,
|
|
485
508
|
/** The engine's own answer to `/messages`; absent when the session is known not to serve it. */
|
|
486
509
|
response) {
|
|
487
510
|
const errorBody = response === undefined ? undefined : await readUpstreamText(response);
|
|
488
511
|
const trace = ex.trace;
|
|
489
|
-
trace.anthropicFallback = true;
|
|
490
512
|
const errorKind = backend.kind === 'local' ? 'local_model_error' : 'remote_provider_error';
|
|
513
|
+
// A prompt the engine's window cannot hold would not fit as chat completions either: the client is
|
|
514
|
+
// told in the Anthropic API's own words, which make Claude Code compact the conversation (audit X1).
|
|
515
|
+
if (response !== undefined &&
|
|
516
|
+
errorBody !== undefined &&
|
|
517
|
+
answeredPromptTooLong(ex, backend, response.status, errorBody))
|
|
518
|
+
return;
|
|
519
|
+
trace.anthropicFallback = true;
|
|
491
520
|
const chat = anthropicRequestToChat(json);
|
|
521
|
+
if (isJsonObject(chat) && noThinking !== undefined)
|
|
522
|
+
chat['chat_template_kwargs'] = noThinking;
|
|
523
|
+
// llama.cpp's own `/v1/messages` stops at the request's `max_tokens`; the translation keeps that
|
|
524
|
+
// cap, or an engine started with `n_predict -1` writes until its context is full. Other engines
|
|
525
|
+
// keep the translation as the Rust proxy shipped it, without the cap.
|
|
526
|
+
const maxTokens = isJsonObject(json) ? json['max_tokens'] : undefined;
|
|
527
|
+
if (isJsonObject(chat) &&
|
|
528
|
+
backend.kind === 'local' &&
|
|
529
|
+
isLlamaCppServer(backend.session.provider) &&
|
|
530
|
+
typeof maxTokens === 'number' &&
|
|
531
|
+
maxTokens > 0) {
|
|
532
|
+
chat['max_tokens'] = maxTokens;
|
|
533
|
+
}
|
|
492
534
|
if (chat !== null) {
|
|
493
535
|
let base = url;
|
|
494
536
|
while (base.endsWith('/messages'))
|
|
@@ -508,10 +550,13 @@ response) {
|
|
|
508
550
|
});
|
|
509
551
|
if (!isSuccess(fallback.status)) {
|
|
510
552
|
const fallbackError = await readUpstreamText(fallback);
|
|
553
|
+
if (answeredPromptTooLong(ex, backend, fallback.status, fallbackError))
|
|
554
|
+
return;
|
|
511
555
|
trace.errorKind = errorKind;
|
|
512
556
|
trace.upstreamStatus = fallback.status;
|
|
513
557
|
trace.oomDetected = bodyIndicatesOom(fallbackError);
|
|
514
558
|
trace.ctxOverflowDetected = isContextLimitError(fallback.status, fallbackError);
|
|
559
|
+
reportInferenceFailure(ex, backend, fallback.status, fallbackError);
|
|
515
560
|
// A declared session's own error wording (its context overflow) reads the same here as on
|
|
516
561
|
// the chat route itself.
|
|
517
562
|
const policy = backend.kind === 'local' ? backend.session.policy : undefined;
|
|
@@ -555,8 +600,27 @@ response) {
|
|
|
555
600
|
trace.upstreamStatus = response.status;
|
|
556
601
|
trace.oomDetected = bodyIndicatesOom(errorBody);
|
|
557
602
|
trace.ctxOverflowDetected = isContextLimitError(response.status, errorBody);
|
|
603
|
+
reportInferenceFailure(ex, backend, response.status, errorBody);
|
|
558
604
|
answer(ex, response.status, errorBody);
|
|
559
605
|
}
|
|
606
|
+
/**
|
|
607
|
+
* Answer a local engine's context overflow on `/messages` as Anthropic's `prompt is too long`; `false`
|
|
608
|
+
* for any other error, which the caller handles as before. A remote provider words its own errors.
|
|
609
|
+
*/
|
|
610
|
+
function answeredPromptTooLong(ex, backend, status, errorBody) {
|
|
611
|
+
if (backend.kind !== 'local')
|
|
612
|
+
return false;
|
|
613
|
+
const tooLong = anthropicPromptTooLong(status, errorBody);
|
|
614
|
+
if (tooLong === undefined)
|
|
615
|
+
return false;
|
|
616
|
+
const trace = ex.trace;
|
|
617
|
+
trace.errorKind = 'local_model_error';
|
|
618
|
+
trace.upstreamStatus = status;
|
|
619
|
+
trace.oomDetected = false;
|
|
620
|
+
trace.ctxOverflowDetected = true;
|
|
621
|
+
answer(ex, 400, tooLong, [['Content-Type', 'application/json']]);
|
|
622
|
+
return true;
|
|
623
|
+
}
|
|
560
624
|
async function* anthropicStream(upstream) {
|
|
561
625
|
const conv = new AnthropicStreamConverter();
|
|
562
626
|
const decoder = new TextDecoder();
|