@abot-ai/runtime 1.9.0 → 2.0.0
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 +5 -1
- package/dist/scripts/add-runtime-model.js +11 -5
- package/dist/scripts/init-runtime.js +15 -10
- package/dist/scripts/runtime-model-addition.js +6 -1
- package/dist/scripts/runtime-setup-command-options.d.ts +11 -0
- package/dist/scripts/runtime-setup-command-options.js +41 -0
- package/dist/scripts/runtime-setup-files.d.ts +3 -2
- package/dist/scripts/runtime-setup-files.js +19 -4
- package/dist/scripts/runtime-setup-model-options.d.ts +8 -0
- package/dist/scripts/runtime-setup-model-options.js +40 -0
- package/dist/scripts/runtime-setup-presentation.js +2 -2
- package/dist/scripts/runtime-setup-provider-options.d.ts +4 -0
- package/dist/scripts/runtime-setup-provider-options.js +20 -0
- package/dist/src/model-gateway/client/contracts.d.ts +3 -0
- package/dist/src/model-gateway/client/input-token-count.js +36 -16
- package/dist/src/model-gateway/client/message-projection.d.ts +2 -0
- package/dist/src/model-gateway/client/message-projection.js +1 -0
- package/dist/src/model-gateway/client/options.js +1 -1
- package/dist/src/model-gateway/client/raw.js +1 -0
- package/dist/src/model-gateway/index.d.ts +1 -1
- package/dist/src/model-gateway/observability/input-token-count-diagnostics.d.ts +26 -0
- package/dist/src/model-gateway/observability/input-token-count-diagnostics.js +178 -0
- package/dist/src/model-gateway/policy/invocation-policy.d.ts +1 -3
- package/dist/src/model-gateway/policy/invocation-policy.js +3 -30
- package/dist/src/model-gateway/policy/reasoning-mode-budget.d.ts +5 -0
- package/dist/src/model-gateway/policy/reasoning-mode-budget.js +13 -0
- package/dist/src/model-gateway/policy/reasoning-policy.d.ts +10 -0
- package/dist/src/model-gateway/policy/reasoning-policy.js +124 -0
- package/dist/src/model-gateway/protocol/openai-embedding-response.d.ts +1 -0
- package/dist/src/model-gateway/protocol/openai-embedding-response.js +28 -0
- package/dist/src/model-gateway/protocol/sse-data.d.ts +9 -0
- package/dist/src/model-gateway/protocol/sse-data.js +67 -0
- package/dist/src/model-gateway/providers/envelope-budget.js +10 -1
- package/dist/src/model-gateway/providers/llamacpp/adapter.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/adapter.js +79 -0
- package/dist/src/model-gateway/providers/llamacpp/connection.d.ts +9 -0
- package/dist/src/model-gateway/providers/llamacpp/connection.js +73 -0
- package/dist/src/model-gateway/providers/llamacpp/diagnostics.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/diagnostics.js +17 -0
- package/dist/src/model-gateway/providers/llamacpp/embeddings.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/embeddings.js +56 -0
- package/dist/src/model-gateway/providers/llamacpp/input-token-count.d.ts +3 -0
- package/dist/src/model-gateway/providers/llamacpp/input-token-count.js +59 -0
- package/dist/src/model-gateway/providers/llamacpp/message-projection.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/message-projection.js +33 -0
- package/dist/src/model-gateway/providers/llamacpp/payload.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/payload.js +44 -0
- package/dist/src/model-gateway/providers/llamacpp/response-lifetime.d.ts +1 -0
- package/dist/src/model-gateway/providers/llamacpp/response-lifetime.js +56 -0
- package/dist/src/model-gateway/providers/llamacpp/schema-format.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/schema-format.js +29 -0
- package/dist/src/model-gateway/providers/llamacpp/settings.d.ts +9 -0
- package/dist/src/model-gateway/providers/llamacpp/settings.js +25 -0
- package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.d.ts +10 -0
- package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.js +85 -0
- package/dist/src/model-gateway/providers/llamacpp/stream.d.ts +9 -0
- package/dist/src/model-gateway/providers/llamacpp/stream.js +33 -0
- package/dist/src/model-gateway/providers/openai/embeddings.js +2 -29
- package/dist/src/model-gateway/providers/openai/sse-data.d.ts +1 -9
- package/dist/src/model-gateway/providers/openai/sse-data.js +1 -67
- package/dist/src/model-gateway/providers/registry.js +2 -0
- package/dist/src/model-gateway/server/input-token-count-handler.js +10 -1
- package/dist/src/model-gateway/types.d.ts +11 -1
- package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.d.ts +4 -0
- package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.js +11 -0
- package/dist/src/runtime/adapters/long-term-memory/onboarding-service.js +28 -1
- package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.js +6 -1
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/contracts.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +2 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +2 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities.js +1 -0
- package/dist/src/runtime/adapters/scheduler-runtime.js +2 -0
- package/dist/src/runtime/automations/agent-step-executor.js +1 -0
- package/dist/src/runtime/automations/catalog.d.ts +3 -0
- package/dist/src/runtime/automations/catalog.js +2 -0
- package/dist/src/runtime/automations/definition-contracts.d.ts +2 -0
- package/dist/src/runtime/automations/definition-input.js +3 -1
- package/dist/src/runtime/automations/draft-mutations.js +5 -1
- package/dist/src/runtime/automations/model-dependency-projection.d.ts +3 -1
- package/dist/src/runtime/automations/model-dependency-projection.js +4 -2
- package/dist/src/runtime/automations/publication-validation.js +7 -0
- package/dist/src/runtime/automations/saved-agent-management.js +1 -0
- package/dist/src/runtime/automations/service.d.ts +3 -0
- package/dist/src/runtime/capabilities/automation-builder/payload-schema.js +7 -5
- package/dist/src/runtime/capabilities/automations/authoring-catalog.d.ts +9 -0
- package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -0
- package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +3 -0
- package/dist/src/runtime/capabilities/automations/tool-contract.js +3 -2
- package/dist/src/runtime/capabilities/automations/tool-module.js +16 -7
- package/dist/src/runtime/capabilities/model-reasoning-controls.d.ts +23 -0
- package/dist/src/runtime/capabilities/model-reasoning-controls.js +56 -0
- package/dist/src/runtime/capabilities/scheduling/create-operations.js +2 -0
- package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +1 -0
- package/dist/src/runtime/capabilities/scheduling/tool-module.js +5 -2
- package/dist/src/runtime/capabilities/scheduling/update-operations.js +2 -0
- package/dist/src/runtime/config/builders.js +6 -0
- package/dist/src/runtime/config/effective-model-config-validation.js +4 -0
- package/dist/src/runtime/config/llamacpp-profile-validation.d.ts +3 -0
- package/dist/src/runtime/config/llamacpp-profile-validation.js +15 -0
- package/dist/src/runtime/config/model-reasoning-schema.d.ts +40 -0
- package/dist/src/runtime/config/model-reasoning-schema.js +38 -0
- package/dist/src/runtime/config/model-reasoning-validation.d.ts +3 -0
- package/dist/src/runtime/config/model-reasoning-validation.js +37 -0
- package/dist/src/runtime/config/runner/step-instructions.d.ts +4 -0
- package/dist/src/runtime/config/runner/step-instructions.js +10 -6
- package/dist/src/runtime/config/schema.js +3 -0
- package/dist/src/runtime/config/validation/model-invocation-config-validation.js +14 -0
- package/dist/src/runtime/context/compacted-capability-result-receipt.d.ts +2 -0
- package/dist/src/runtime/context/compacted-capability-result-receipt.js +8 -7
- package/dist/src/runtime/context/execution-compacted-evidence.d.ts +4 -0
- package/dist/src/runtime/context/execution-compacted-evidence.js +2 -23
- package/dist/src/runtime/context/execution-compaction-checkpoint-selection.d.ts +19 -0
- package/dist/src/runtime/context/execution-compaction-checkpoint-selection.js +104 -0
- package/dist/src/runtime/context/model-step-compaction-inheritance.d.ts +12 -0
- package/dist/src/runtime/context/model-step-compaction-inheritance.js +28 -0
- package/dist/src/runtime/context/model-step-compaction-projection.d.ts +12 -0
- package/dist/src/runtime/context/model-step-compaction-projection.js +322 -0
- package/dist/src/runtime/context/model-step-compaction.d.ts +2 -1
- package/dist/src/runtime/context/model-step-compaction.js +25 -316
- package/dist/src/runtime/context/operation-supervision-compacted-evidence.js +7 -1
- package/dist/src/runtime/context/request-context.d.ts +2 -0
- package/dist/src/runtime/context/request-context.js +16 -0
- package/dist/src/runtime/context/request-tool-results-checkpoint.d.ts +2 -1
- package/dist/src/runtime/context/request-tool-results-checkpoint.js +35 -6
- package/dist/src/runtime/context/request-tool-results.js +3 -1
- package/dist/src/runtime/context/semantic-compaction/checkpoint-message.d.ts +5 -1
- package/dist/src/runtime/context/semantic-compaction/checkpoint-message.js +10 -4
- package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.d.ts +4 -0
- package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.js +38 -0
- package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +3 -1
- package/dist/src/runtime/context/semantic-compaction/generation-input.js +15 -10
- package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.d.ts +8 -0
- package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.js +76 -0
- package/dist/src/runtime/context/semantic-compaction/replacement-budget.js +3 -1
- package/dist/src/runtime/context/semantic-compaction/run.js +6 -12
- package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +1 -1
- package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +20 -2
- package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.js +27 -0
- package/dist/src/runtime/knowledge-skills/catalog.js +2 -0
- package/dist/src/runtime/local-application.d.ts +5 -0
- package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -1
- package/dist/src/runtime/local-host/app-service-dispatch.js +2 -0
- package/dist/src/runtime/local-host/client-services.d.ts +5 -0
- package/dist/src/runtime/local-host/saved-approvals.js +1 -0
- package/dist/src/runtime/long-term-memory/onboarding/configuration.js +5 -7
- package/dist/src/runtime/long-term-memory/onboarding/contracts.d.ts +26 -0
- package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.d.ts +1 -0
- package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.js +8 -0
- package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.d.ts +17 -0
- package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.js +77 -0
- package/dist/src/runtime/long-term-memory/onboarding/service.js +40 -10
- package/dist/src/runtime/model/input-token-count.js +1 -0
- package/dist/src/runtime/model/invoke-step.js +12 -0
- package/dist/src/runtime/model/invoke-structured-step.d.ts +4 -1
- package/dist/src/runtime/model/invoke-structured-step.js +4 -0
- package/dist/src/runtime/model/model-catalog.d.ts +3 -0
- package/dist/src/runtime/model/model-catalog.js +2 -0
- package/dist/src/runtime/model/model-context-budget.d.ts +5 -0
- package/dist/src/runtime/model/model-context-budget.js +2 -0
- package/dist/src/runtime/model/model-step-port.d.ts +7 -0
- package/dist/src/runtime/model/optional-context-admission.d.ts +18 -0
- package/dist/src/runtime/model/optional-context-admission.js +23 -0
- package/dist/src/runtime/ports.d.ts +3 -1
- package/dist/src/runtime/projects/contracts.d.ts +6 -0
- package/dist/src/runtime/projects/registry-format.d.ts +3 -0
- package/dist/src/runtime/projects/registry-format.js +50 -0
- package/dist/src/runtime/projects/repository.d.ts +6 -3
- package/dist/src/runtime/projects/repository.js +26 -19
- package/dist/src/runtime/projects/service.js +11 -0
- package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
- package/dist/src/runtime/request/approval-wait/snapshot.d.ts +1 -1
- package/dist/src/runtime/request/approval-wait/snapshot.js +1 -0
- package/dist/src/runtime/request/contracts.d.ts +5 -1
- package/dist/src/runtime/request/execution-facets.js +2 -0
- package/dist/src/runtime/request/execution-payload-artifact-policy.d.ts +3 -0
- package/dist/src/runtime/request/execution-payload-artifact-policy.js +6 -0
- package/dist/src/runtime/request/execution-payload-compacted-evidence.js +1 -0
- package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
- package/dist/src/runtime/request/execution-scope-surfaces.js +3 -0
- package/dist/src/runtime/request/execution-scope.d.ts +2 -0
- package/dist/src/runtime/request/execution-scope.js +2 -0
- package/dist/src/runtime/request/input.d.ts +1 -0
- package/dist/src/runtime/request/input.js +1 -0
- package/dist/src/runtime/request/prepared-execution.d.ts +1 -0
- package/dist/src/runtime/request/prepared-execution.js +3 -0
- package/dist/src/runtime/request/reasoning-preference.d.ts +10 -0
- package/dist/src/runtime/request/reasoning-preference.js +29 -0
- package/dist/src/runtime/request/root-reference-action.js +3 -3
- package/dist/src/runtime/request/root-skill-read-admission.d.ts +4 -0
- package/dist/src/runtime/request/root-skill-read-admission.js +14 -0
- package/dist/src/runtime/request/root-skill-read.js +13 -5
- package/dist/src/runtime/request/supervisor-skill-selection-window.d.ts +16 -0
- package/dist/src/runtime/request/supervisor-skill-selection-window.js +17 -0
- package/dist/src/runtime/request/worker-capability-composition.js +2 -0
- package/dist/src/runtime/scheduler/contracts.d.ts +7 -1
- package/dist/src/runtime/scheduler/job-management.js +7 -1
- package/dist/src/runtime/scheduler/run-records.js +2 -0
- package/dist/src/runtime/scheduler/schedule-validation.js +2 -0
- package/dist/src/runtime/scheduler/scheduler-engine.js +1 -0
- package/dist/src/runtime/scheduler/snapshot-validation.js +2 -0
- package/dist/src/runtime/steps/auditor-decision/projection.js +2 -0
- package/dist/src/runtime/steps/execution-agent/capability-controls-partition.d.ts +9 -0
- package/dist/src/runtime/steps/execution-agent/capability-controls-partition.js +29 -0
- package/dist/src/runtime/steps/execution-agent/capability-scope.d.ts +17 -0
- package/dist/src/runtime/steps/execution-agent/capability-scope.js +54 -0
- package/dist/src/runtime/steps/execution-agent/compaction.js +22 -6
- package/dist/src/runtime/steps/execution-agent/controls-compacted-evidence.js +2 -0
- package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.d.ts +6 -0
- package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.js +13 -0
- package/dist/src/runtime/steps/execution-agent/format.js +3 -6
- package/dist/src/runtime/steps/execution-agent/input.d.ts +5 -1
- package/dist/src/runtime/steps/execution-agent/input.js +10 -36
- package/dist/src/runtime/steps/execution-agent/observation-guidance.d.ts +11 -0
- package/dist/src/runtime/steps/execution-agent/observation-guidance.js +33 -0
- package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
- package/dist/src/runtime/steps/execution-agent/refinement.d.ts +3 -2
- package/dist/src/runtime/steps/execution-agent/refinement.js +17 -6
- package/dist/src/runtime/steps/execution-agent/run.js +7 -1
- package/dist/src/runtime/steps/skill-read-decision.d.ts +1 -0
- package/dist/src/runtime/steps/skill-read-decision.js +9 -4
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +6 -1
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +15 -0
- package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +1 -1
- package/dist/src/runtime/steps/supervisor-decision/contracts.js +2 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +22 -3
- package/dist/src/runtime/steps/supervisor-decision/delegation-contract.d.ts +9 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-contract.js +82 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-input.d.ts +7 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-input.js +105 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.d.ts +7 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.js +13 -0
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +3 -5
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +5 -21
- package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +4 -1
- package/dist/src/runtime/steps/supervisor-decision/preparation.js +58 -6
- package/dist/src/runtime/steps/supervisor-decision/procedure-entry.d.ts +22 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-entry.js +61 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-gate.d.ts +39 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-gate.js +146 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-memory.d.ts +9 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-memory.js +100 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-recall.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-recall.js +52 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +3 -16
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -2
- package/dist/src/runtime/steps/supervisor-decision/role-guidance.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/role-guidance.js +20 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +50 -7
- package/dist/src/runtime/steps/supervisor-decision/skill-read-state.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-read-state.js +45 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.d.ts +15 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.js +25 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.js +15 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.js +65 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +3 -1
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +20 -22
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +3 -2
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +62 -15
- package/dist/src/runtime/steps/supervisor-response/prompt.js +18 -4
- package/dist/src/shared/model-reasoning-modes.d.ts +5 -0
- package/dist/src/shared/model-reasoning-modes.js +20 -0
- package/dist/src/shared/model-reasoning-schema.d.ts +38 -0
- package/dist/src/shared/model-reasoning-schema.js +29 -0
- package/dist/src/shared/model-reasoning.d.ts +35 -0
- package/dist/src/shared/model-reasoning.js +100 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +13 -0
- package/dist/src/web-ui/app/app-bootstrap.js +9 -12
- package/dist/src/web-ui/app/app-dom.js +6 -1
- package/dist/src/web-ui/app/app-state.js +1 -0
- package/dist/src/web-ui/app/app.js +8 -3
- package/dist/src/web-ui/app/appearance-feature.js +28 -0
- package/dist/src/web-ui/app/automations-feature.js +20 -11
- package/dist/src/web-ui/app/components/appearance-dialog.js +79 -0
- package/dist/src/web-ui/app/components/automations/archive-actions.js +5 -3
- package/dist/src/web-ui/app/components/automations/authoring-entry.js +26 -7
- package/dist/src/web-ui/app/components/automations/confirmation-actions.js +78 -0
- package/dist/src/web-ui/app/components/automations/draft-recovery-actions.js +1 -0
- package/dist/src/web-ui/app/components/automations/node-inspector.js +5 -1
- package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +4 -2
- package/dist/src/web-ui/app/components/automations/timeline.js +2 -2
- package/dist/src/web-ui/app/components/automations/workspace-navigation.js +37 -0
- package/dist/src/web-ui/app/components/automations/workspace.js +31 -46
- package/dist/src/web-ui/app/components/config-workspace/config-model.js +6 -0
- package/dist/src/web-ui/app/components/config-workspace/model-removal.js +4 -2
- package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +8 -16
- package/dist/src/web-ui/app/components/config-workspace/reasoning-budget-edit.js +113 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.d.ts +16 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.js +67 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.d.ts +7 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.js +25 -0
- package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +15 -7
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +32 -12
- package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +1 -1
- package/dist/src/web-ui/app/components/config-workspace.js +2 -1
- package/dist/src/web-ui/app/components/confirmation-dialog.js +88 -0
- package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
- package/dist/src/web-ui/app/components/conversation-activity.js +32 -3
- package/dist/src/web-ui/app/components/conversation-memory-activity.js +31 -0
- package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +2 -0
- package/dist/src/web-ui/app/components/conversation-role-cards.js +14 -11
- package/dist/src/web-ui/app/components/conversation-skill-activity.js +67 -0
- package/dist/src/web-ui/app/components/conversation-tools.js +5 -5
- package/dist/src/web-ui/app/components/conversation-view.js +6 -0
- package/dist/src/web-ui/app/components/dashboard/approvals.js +13 -1
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.d.ts +38 -0
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.js +289 -0
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-feature.js +75 -0
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-rendering.js +31 -0
- package/dist/src/web-ui/app/components/long-term-memory/manager.js +15 -5
- package/dist/src/web-ui/app/components/long-term-memory/saved-embedding-profiles.js +114 -0
- package/dist/src/web-ui/app/components/long-term-memory/setup-rendering.js +55 -0
- package/dist/src/web-ui/app/components/long-term-memory-setup.js +141 -76
- package/dist/src/web-ui/app/components/model-setup/rendering.js +3 -2
- package/dist/src/web-ui/app/components/model-setup/validation.js +6 -2
- package/dist/src/web-ui/app/components/model-setup/wizard.d.ts +1 -0
- package/dist/src/web-ui/app/components/model-setup/wizard.js +28 -5
- package/dist/src/web-ui/app/components/passive-learning/memory.js +12 -5
- package/dist/src/web-ui/app/components/plugins/manager.js +14 -0
- package/dist/src/web-ui/app/components/plugins/removal.js +10 -2
- package/dist/src/web-ui/app/components/project-group-actions.js +35 -0
- package/dist/src/web-ui/app/components/project-session-groups.js +17 -31
- package/dist/src/web-ui/app/components/runtime-setup/commands.js +1 -1
- package/dist/src/web-ui/app/components/runtime-setup/connection-form.d.ts +15 -0
- package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +32 -9
- package/dist/src/web-ui/app/components/runtime-setup/connection-input.js +23 -0
- package/dist/src/web-ui/app/components/runtime-setup/connection-inspection.js +57 -0
- package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +18 -4
- package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.js +3 -0
- package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-options.js +54 -0
- package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-receipt.js +3 -0
- package/dist/src/web-ui/app/components/runtime-setup/embedding-rendering.js +22 -22
- package/dist/src/web-ui/app/components/runtime-setup/embedding.js +60 -16
- package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.d.ts +17 -0
- package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.js +54 -0
- package/dist/src/web-ui/app/components/runtime-setup/validation.js +5 -1
- package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +9 -3
- package/dist/src/web-ui/app/components/runtime-setup-guide.js +20 -29
- package/dist/src/web-ui/app/components/schedules/details.js +2 -2
- package/dist/src/web-ui/app/components/schedules/form.js +12 -5
- package/dist/src/web-ui/app/components/schedules/workspace.js +30 -18
- package/dist/src/web-ui/app/components/session-list-viewport.js +49 -0
- package/dist/src/web-ui/app/components/session-search-disclosure.js +27 -0
- package/dist/src/web-ui/app/components/skills/workspace.js +7 -3
- package/dist/src/web-ui/app/components/spark-chat/panel.js +7 -3
- package/dist/src/web-ui/app/components/spark-chat/settings.js +57 -15
- package/dist/src/web-ui/app/components/tool-approval-card.d.ts +2 -1
- package/dist/src/web-ui/app/components/tool-approval-card.js +10 -2
- package/dist/src/web-ui/app/components/tool-approval-rejection-input.js +116 -0
- package/dist/src/web-ui/app/components/workspace-shell.js +30 -38
- package/dist/src/web-ui/app/components/workspace-transitions.js +42 -0
- package/dist/src/web-ui/app/configuration-feature.js +34 -4
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +45 -29
- package/dist/src/web-ui/app/controllers/appearance-controller.js +105 -0
- package/dist/src/web-ui/app/controllers/automations-controller.js +9 -1
- package/dist/src/web-ui/app/controllers/composer-feature.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/composer-feature.js +10 -3
- package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/composer-queue-controller.js +9 -3
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +8 -2
- package/dist/src/web-ui/app/controllers/dashboard-approvals-controller.js +10 -9
- package/dist/src/web-ui/app/controllers/environment-transition.js +2 -2
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +9 -7
- package/dist/src/web-ui/app/controllers/preference-view-sync.js +35 -0
- package/dist/src/web-ui/app/controllers/projects-controller.d.ts +4 -0
- package/dist/src/web-ui/app/controllers/projects-controller.js +64 -3
- package/dist/src/web-ui/app/controllers/reasoning-budget-controller.d.ts +17 -0
- package/dist/src/web-ui/app/controllers/reasoning-budget-controller.js +80 -0
- package/dist/src/web-ui/app/controllers/reasoning-budget-menu-events.js +45 -0
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +35 -40
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +6 -1
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +16 -3
- package/dist/src/web-ui/app/controllers/session-controller.js +34 -9
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +4 -3
- package/dist/src/web-ui/app/controllers/skills-controller.js +33 -16
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +1 -1
- package/dist/src/web-ui/app/controllers/spark-handoff-navigation.js +7 -1
- package/dist/src/web-ui/app/controllers/tool-approval-controller.d.ts +2 -1
- package/dist/src/web-ui/app/controllers/tool-approval-controller.js +36 -3
- package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +8 -2
- package/dist/src/web-ui/app/controllers/workspace-route-controller.js +41 -10
- package/dist/src/web-ui/app/index.html +38 -32
- package/dist/src/web-ui/app/lib/color-palettes.d.ts +17 -0
- package/dist/src/web-ui/app/lib/color-palettes.js +20 -0
- package/dist/src/web-ui/app/lib/memory-activity-model.d.ts +12 -0
- package/dist/src/web-ui/app/lib/memory-activity-model.js +61 -0
- package/dist/src/web-ui/app/lib/navigation-display.d.ts +8 -0
- package/dist/src/web-ui/app/lib/navigation-display.js +12 -0
- package/dist/src/web-ui/app/lib/reasoning-controls.js +47 -6
- package/dist/src/web-ui/app/lib/reasoning-preference.d.ts +9 -0
- package/dist/src/web-ui/app/lib/reasoning-preference.js +75 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +4 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.js +4 -0
- package/dist/src/web-ui/app/lib/session-project-groups.js +28 -0
- package/dist/src/web-ui/app/lib/session-sidebar-order.js +7 -5
- package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +1 -0
- package/dist/src/web-ui/app/lib/tool-activity-event.js +1 -0
- package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +1 -0
- package/dist/src/web-ui/app/lib/tool-activity-model.js +1 -0
- package/dist/src/web-ui/app/lib/tool-approval-rejection-drafts.js +45 -0
- package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +1 -1
- package/dist/src/web-ui/app/notifications-feature.js +10 -2
- package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
- package/dist/src/web-ui/app/projects-feature.js +40 -10
- package/dist/src/web-ui/app/runtime-onboarding-feature.js +1 -0
- package/dist/src/web-ui/app/schedules-feature.js +28 -5
- package/dist/src/web-ui/app/services/client-preferences.d.ts +4 -1
- package/dist/src/web-ui/app/services/client-preferences.js +2 -0
- package/dist/src/web-ui/app/services/conversation-reasoning-preferences.d.ts +11 -0
- package/dist/src/web-ui/app/services/conversation-reasoning-preferences.js +30 -0
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +6 -4
- package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +5 -0
- package/dist/src/web-ui/app/services/runtime-web-client/memory.js +21 -0
- package/dist/src/web-ui/app/services/runtime-web-client/projects.d.ts +2 -1
- package/dist/src/web-ui/app/services/runtime-web-client/projects.js +4 -0
- package/dist/src/web-ui/app/services/runtime-web-client/tool-approvals.js +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +16 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/services/session-sidebar-preferences.js +33 -13
- package/dist/src/web-ui/app/skills-feature.js +2 -3
- package/dist/src/web-ui/app/spark-chat-conversation.js +29 -3
- package/dist/src/web-ui/app/spark-chat-feature.js +13 -7
- package/dist/src/web-ui/app/styles/01-color-palettes.css +90 -0
- package/dist/src/web-ui/app/styles/11-product-links.css +6 -2
- package/dist/src/web-ui/app/styles/11-workspace-header-width.css +37 -25
- package/dist/src/web-ui/app/styles/12-conversation-sidebar.css +56 -22
- package/dist/src/web-ui/app/styles/13-projects.css +56 -19
- package/dist/src/web-ui/app/styles/19-runtime-setup.css +16 -0
- package/dist/src/web-ui/app/styles/22-reasoning-budget.css +39 -0
- package/dist/src/web-ui/app/styles/27-conversation-memory.css +45 -0
- package/dist/src/web-ui/app/styles/27-conversation-skills.css +96 -0
- package/dist/src/web-ui/app/styles/28-tool-approval-card.css +38 -1
- package/dist/src/web-ui/app/styles/35-embedding-profiles.css +159 -0
- package/dist/src/web-ui/app/styles/54-spark-chat.css +62 -46
- package/dist/src/web-ui/app/styles/65-appearance.css +60 -0
- package/dist/src/web-ui/app/styles/66-navigation-display.css +30 -0
- package/dist/src/web-ui/app/styles/67-confirmation-dialog.css +32 -0
- package/dist/src/web-ui/app/styles.css +8 -0
- package/dist/src/web-ui/client-state/preference-shapes.js +6 -1
- package/dist/src/web-ui/client-state/preferences.js +8 -2
- package/dist/src/web-ui/client-state/reasoning-preference-shape.d.ts +1 -0
- package/dist/src/web-ui/client-state/reasoning-preference-shape.js +18 -0
- package/dist/src/web-ui/local-runtime/api-router.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/api-router.js +11 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.js +22 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.d.ts +20 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.js +47 -0
- package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +32 -0
- package/dist/src/web-ui/local-runtime/model-connection-inspection.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/model-connection-inspection.js +48 -0
- package/dist/src/web-ui/local-runtime/model-setup-catalog.d.ts +2 -1
- package/dist/src/web-ui/local-runtime/model-setup-catalog.js +3 -1
- package/dist/src/web-ui/local-runtime/model-setup-identity.js +1 -1
- package/dist/src/web-ui/local-runtime/model-setup-input.d.ts +5 -2
- package/dist/src/web-ui/local-runtime/model-setup-input.js +29 -6
- package/dist/src/web-ui/local-runtime/model-setup-provider.d.ts +1 -1
- package/dist/src/web-ui/local-runtime/model-setup-provider.js +9 -6
- package/dist/src/web-ui/local-runtime/model-setup-retry.js +4 -1
- package/dist/src/web-ui/local-runtime/model-setup-service.d.ts +2 -1
- package/dist/src/web-ui/local-runtime/pending-tool-approvals.js +4 -1
- package/dist/src/web-ui/local-runtime/project-routes.js +10 -2
- package/dist/src/web-ui/local-runtime/request-execution.js +1 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-auth.d.ts +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-auth.js +20 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +3 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.js +6 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-input.d.ts +3 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-input.js +17 -5
- package/dist/src/web-ui/local-runtime/runtime-setup-provider.d.ts +4 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-provider.js +6 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-routes.d.ts +11 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +11 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.js +3 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-service.d.ts +25 -4
- package/dist/src/web-ui/local-runtime/runtime-setup-service.js +19 -9
- package/dist/src/web-ui/local-runtime/setup-embedding-input.d.ts +3 -1
- package/dist/src/web-ui/local-runtime/setup-embedding-input.js +38 -6
- package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.d.ts +11 -0
- package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.js +53 -0
- package/dist/src/web-ui/local-runtime/setup-embedding-provider.js +23 -9
- package/dist/src/web-ui/local-runtime/setup-embedding-routes.d.ts +7 -2
- package/dist/src/web-ui/local-runtime/setup-embedding-routes.js +5 -3
- package/dist/src/web-ui/local-runtime/setup-embedding-service.d.ts +1 -0
- package/docs/configuration.md +10 -8
- package/docs/installation.md +11 -5
- package/docs/llamacpp.md +248 -0
- package/docs/long-term-memory.md +12 -0
- package/docs/running-locally.md +7 -1
- package/package.json +2 -1
- package/plugins/project-orientation/source/index.ts +2 -3
- package/plugins/project-orientation/source/inspection-failure.ts +1 -1
- package/plugins/project-orientation/source/project-target.ts +29 -0
- package/plugins/project-orientation/src/index.cjs +21 -2
- package/runtime.config.schema.json +140 -0
- package/src/runtime/README.md +50 -4
package/README.md
CHANGED
|
@@ -68,7 +68,7 @@ You need:
|
|
|
68
68
|
|
|
69
69
|
- Node.js `^20.19.0` or `>=22.12.0`; Node.js 21 is not supported
|
|
70
70
|
- npm
|
|
71
|
-
- An OpenAI or
|
|
71
|
+
- An OpenAI, Ollama or llama.cpp model connection
|
|
72
72
|
|
|
73
73
|
Create a directory for your ABot installation:
|
|
74
74
|
|
|
@@ -89,6 +89,10 @@ choosing tools, and optionally enabling semantic memory.
|
|
|
89
89
|
- **Ollama:** install and start Ollama separately, download your chosen model,
|
|
90
90
|
and provide an address reachable from the Runtime.
|
|
91
91
|
|
|
92
|
+
- **llama.cpp:** run llama-server separately and connect its model alias and
|
|
93
|
+
reachable origin. Thinking-capable models can use a token budget. See
|
|
94
|
+
[llama.cpp setup](docs/llamacpp.md).
|
|
95
|
+
|
|
92
96
|
ABot includes the provider adapters. You supply the model and any required
|
|
93
97
|
credentials. Configuration and runtime state are stored in your project.
|
|
94
98
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { mergeRuntimeModelAddition, parseRuntimeModelProfileId, } from "./runtime-model-addition.js";
|
|
2
|
+
import { supportsProviderAddress } from "./runtime-setup-provider-options.js";
|
|
3
|
+
import { parseSetupCommandOptions, requireSetupCommandProviderOptions } from "./runtime-setup-command-options.js";
|
|
2
4
|
import { constants } from "node:fs";
|
|
3
5
|
import { access, mkdir } from "node:fs/promises";
|
|
4
6
|
import { dirname, join, resolve } from "node:path";
|
|
@@ -17,6 +19,8 @@ function requireValue(argv, index, flag) {
|
|
|
17
19
|
return value;
|
|
18
20
|
}
|
|
19
21
|
function parseArgs(argv, commandMode) {
|
|
22
|
+
const shared = parseSetupCommandOptions(argv);
|
|
23
|
+
argv = shared.argv;
|
|
20
24
|
let rootDir = process.cwd();
|
|
21
25
|
let provider;
|
|
22
26
|
let model;
|
|
@@ -91,10 +95,11 @@ function parseArgs(argv, commandMode) {
|
|
|
91
95
|
throw new Error("--model is required");
|
|
92
96
|
if (!profile)
|
|
93
97
|
throw new Error("--profile is required");
|
|
94
|
-
if (baseUrl && provider
|
|
95
|
-
throw new Error("--base-url is supported only with --provider ollama");
|
|
98
|
+
if (baseUrl && !supportsProviderAddress(provider)) {
|
|
99
|
+
throw new Error("--base-url is supported only with --provider ollama or llamacpp");
|
|
96
100
|
}
|
|
97
|
-
|
|
101
|
+
requireSetupCommandProviderOptions(provider, shared);
|
|
102
|
+
return { ...shared, rootDir, provider, model, profile, baseUrl, setDefault };
|
|
98
103
|
}
|
|
99
104
|
function printHelp(commandMode) {
|
|
100
105
|
console.log([
|
|
@@ -165,14 +170,14 @@ export async function runAddRuntimeModel(argv = process.argv.slice(2), runOption
|
|
|
165
170
|
const merged = mergeRuntimeModelAddition(runtimeConfig, {
|
|
166
171
|
profileId: options.profile,
|
|
167
172
|
providerId: options.provider,
|
|
168
|
-
provider: buildProviderConfig(options.provider, options.baseUrl),
|
|
173
|
+
provider: buildProviderConfig(options.provider, options.baseUrl, options.apiKeyEnv),
|
|
169
174
|
profile: { configRef: `./models/${options.profile}.config.json` },
|
|
170
175
|
baseUrl: options.baseUrl,
|
|
171
176
|
});
|
|
172
177
|
const nextRunnerConfig = options.setDefault
|
|
173
178
|
? selectDefaultProfile(runnerConfig, options.profile)
|
|
174
179
|
: runnerConfig;
|
|
175
|
-
const modelConfig = buildModelConfig(modelTemplate, options.provider, options.model);
|
|
180
|
+
const modelConfig = buildModelConfig(modelTemplate, options.provider, options.model, options.contextWindowTokens, options.modelOptions);
|
|
176
181
|
await mkdir(dirname(modelConfigPath), { recursive: true });
|
|
177
182
|
await writeJsonObject(modelConfigPath, modelConfig, { exclusive: true });
|
|
178
183
|
await writeJsonObject(runtimeConfigPath, merged.config);
|
|
@@ -188,6 +193,7 @@ export async function runAddRuntimeModel(argv = process.argv.slice(2), runOption
|
|
|
188
193
|
...(options.provider === "openai"
|
|
189
194
|
? ["credential: set OPENAI_API_KEY in .env"]
|
|
190
195
|
: []),
|
|
196
|
+
...(options.apiKeyEnv ? ["credential: set " + options.apiKeyEnv + " in .env"] : []),
|
|
191
197
|
getRestartInstruction(commandMode),
|
|
192
198
|
].join("\n"));
|
|
193
199
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { supportsProviderAddress } from "./runtime-setup-provider-options.js";
|
|
2
|
+
import { parseSetupCommandOptions, requireSetupCommandProviderOptions } from "./runtime-setup-command-options.js";
|
|
1
3
|
import { constants } from "node:fs";
|
|
2
4
|
import { access, copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
5
|
import { dirname, join, relative, resolve } from "node:path";
|
|
@@ -22,6 +24,8 @@ function requireValue(argv, index, flag) {
|
|
|
22
24
|
return value;
|
|
23
25
|
}
|
|
24
26
|
function parseArgs(argv, commandMode) {
|
|
27
|
+
const shared = parseSetupCommandOptions(argv);
|
|
28
|
+
argv = shared.argv;
|
|
25
29
|
let rootDir = process.cwd();
|
|
26
30
|
let provider;
|
|
27
31
|
let model;
|
|
@@ -88,10 +92,11 @@ function parseArgs(argv, commandMode) {
|
|
|
88
92
|
if (!model) {
|
|
89
93
|
throw new Error("--model is required");
|
|
90
94
|
}
|
|
91
|
-
if (baseUrl && provider
|
|
92
|
-
throw new Error("--base-url is supported only with --provider ollama");
|
|
95
|
+
if (baseUrl && !supportsProviderAddress(provider)) {
|
|
96
|
+
throw new Error("--base-url is supported only with --provider ollama or llamacpp");
|
|
93
97
|
}
|
|
94
|
-
|
|
98
|
+
requireSetupCommandProviderOptions(provider, shared);
|
|
99
|
+
return { ...shared, rootDir, provider, model, baseUrl, force };
|
|
95
100
|
}
|
|
96
101
|
function printHelp(commandMode) {
|
|
97
102
|
console.log([
|
|
@@ -108,7 +113,7 @@ function printHelp(commandMode) {
|
|
|
108
113
|
"- .runtime/prod and .runtime/dev",
|
|
109
114
|
"",
|
|
110
115
|
"Both --provider and --model are required; the runtime has no built-in model choice.",
|
|
111
|
-
"--base-url configures the Ollama
|
|
116
|
+
"--base-url configures the Ollama or llama.cpp origin reachable from the Runtime.",
|
|
112
117
|
].join("\n"));
|
|
113
118
|
}
|
|
114
119
|
async function exists(path) {
|
|
@@ -147,12 +152,12 @@ async function ensureEnvLine(envPath) {
|
|
|
147
152
|
await writeFile(envPath, next, "utf-8");
|
|
148
153
|
return true;
|
|
149
154
|
}
|
|
150
|
-
async function configureRuntimeProvider(configPath, provider, baseUrl) {
|
|
155
|
+
async function configureRuntimeProvider(configPath, provider, baseUrl, apiKeyEnv) {
|
|
151
156
|
const config = await readJsonObject(configPath);
|
|
152
157
|
const models = isRecord(config.models) ? config.models : {};
|
|
153
158
|
const { defaults: _ignoredDefaults, ...modelSettings } = models;
|
|
154
159
|
const providers = {
|
|
155
|
-
[provider]: buildProviderConfig(provider, baseUrl),
|
|
160
|
+
[provider]: buildProviderConfig(provider, baseUrl, apiKeyEnv),
|
|
156
161
|
};
|
|
157
162
|
config.models = {
|
|
158
163
|
...modelSettings,
|
|
@@ -165,9 +170,9 @@ async function configureRuntimeProvider(configPath, provider, baseUrl) {
|
|
|
165
170
|
};
|
|
166
171
|
await writeJsonObject(configPath, config);
|
|
167
172
|
}
|
|
168
|
-
async function configureModelProfile(configPath, provider, model) {
|
|
173
|
+
async function configureModelProfile(configPath, provider, model, options) {
|
|
169
174
|
const config = await readJsonObject(configPath);
|
|
170
|
-
await writeJsonObject(configPath, buildModelConfig(config, provider, model));
|
|
175
|
+
await writeJsonObject(configPath, buildModelConfig(config, provider, model, options.contextWindowTokens, options.modelOptions));
|
|
171
176
|
}
|
|
172
177
|
async function configureRunner(configPath) {
|
|
173
178
|
const config = await readJsonObject(configPath);
|
|
@@ -221,13 +226,13 @@ export async function runInitRuntime(argv = process.argv.slice(2), runOptions =
|
|
|
221
226
|
}),
|
|
222
227
|
})));
|
|
223
228
|
if (configStatus !== "kept") {
|
|
224
|
-
await configureRuntimeProvider(configPath, options.provider, options.baseUrl);
|
|
229
|
+
await configureRuntimeProvider(configPath, options.provider, options.baseUrl, options.apiKeyEnv);
|
|
225
230
|
}
|
|
226
231
|
if (requestRunnerConfigStatus !== "kept") {
|
|
227
232
|
await configureRunner(requestRunnerConfigPath);
|
|
228
233
|
}
|
|
229
234
|
if (modelConfigStatus !== "kept") {
|
|
230
|
-
await configureModelProfile(modelConfigPath, options.provider, options.model);
|
|
235
|
+
await configureModelProfile(modelConfigPath, options.provider, options.model, options);
|
|
231
236
|
}
|
|
232
237
|
const runtimeDirectories = await initializeConfiguredRuntimeDirectories(options.rootDir, configPath);
|
|
233
238
|
console.log([
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { supportsProviderAddress } from "./runtime-setup-provider-options.js";
|
|
1
2
|
import { isRecord } from "./runtime-setup-files.js";
|
|
2
3
|
export function parseRuntimeModelProfileId(value) {
|
|
3
4
|
const profile = value.trim();
|
|
@@ -28,11 +29,15 @@ export function mergeRuntimeModelAddition(runtimeConfig, input) {
|
|
|
28
29
|
existingProvider.type !== input.provider.type) {
|
|
29
30
|
throw new Error(`provider id is already configured with a different adapter: ${input.providerId}; no files were changed`);
|
|
30
31
|
}
|
|
31
|
-
if (input.provider.type
|
|
32
|
+
if (supportsProviderAddress(String(input.provider.type)) &&
|
|
32
33
|
input.baseUrl &&
|
|
33
34
|
existingProvider.baseUrl !== input.baseUrl) {
|
|
34
35
|
throw new Error(`provider ${input.providerId} already uses a different base URL; no files were changed`);
|
|
35
36
|
}
|
|
37
|
+
const changesLlamaCredentialBinding = input.provider.type === "llamacpp" &&
|
|
38
|
+
input.provider.apiKeyEnv !== undefined && input.provider.apiKeyEnv !== existingProvider.apiKeyEnv;
|
|
39
|
+
if (changesLlamaCredentialBinding)
|
|
40
|
+
throw new Error("provider " + input.providerId + " already uses a different credential binding; no files were changed");
|
|
36
41
|
}
|
|
37
42
|
return {
|
|
38
43
|
providerAdded: existingProvider === undefined,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type SetupModelOptions } from "./runtime-setup-model-options.js";
|
|
2
|
+
export type SetupCommandOptions = Readonly<{
|
|
3
|
+
contextWindowTokens?: number;
|
|
4
|
+
apiKeyEnv?: string;
|
|
5
|
+
modelOptions: SetupModelOptions;
|
|
6
|
+
}>;
|
|
7
|
+
/** Reads shared setup flags before the existing command-specific argument parser. */
|
|
8
|
+
export declare function parseSetupCommandOptions(args: string[]): SetupCommandOptions & {
|
|
9
|
+
argv: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare function requireSetupCommandProviderOptions(provider: string, options: SetupCommandOptions): void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { parseContextWindowTokens } from "./runtime-setup-files.js";
|
|
2
|
+
import { parseProviderCredentialEnvironment } from "./runtime-setup-provider-options.js";
|
|
3
|
+
import { parseCliReasoningBudget, parseSetupModelOptions } from "./runtime-setup-model-options.js";
|
|
4
|
+
/** Reads shared setup flags before the existing command-specific argument parser. */
|
|
5
|
+
export function parseSetupCommandOptions(args) {
|
|
6
|
+
const argv = [];
|
|
7
|
+
const options = {};
|
|
8
|
+
let contextWindowTokens;
|
|
9
|
+
let apiKeyEnv;
|
|
10
|
+
const flags = ["--supports-thinking", "--reasoning-budget", "--context-window", "--api-key-env"];
|
|
11
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
12
|
+
const arg = args[index];
|
|
13
|
+
const flag = arg.split("=")[0];
|
|
14
|
+
if (!flags.includes(flag)) {
|
|
15
|
+
argv.push(arg);
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const hasInlineValue = arg.startsWith(flag + "=");
|
|
19
|
+
const value = hasInlineValue ? arg.slice(flag.length + 1) : args[++index];
|
|
20
|
+
if (!value || value.startsWith("--"))
|
|
21
|
+
throw new Error(flag + " requires a value");
|
|
22
|
+
if (flag === "--supports-thinking") {
|
|
23
|
+
if (value !== "true" && value !== "false")
|
|
24
|
+
throw new Error("--supports-thinking must be true or false");
|
|
25
|
+
options.supportsThinking = value === "true";
|
|
26
|
+
}
|
|
27
|
+
if (flag === "--reasoning-budget")
|
|
28
|
+
options.reasoningBudget = parseCliReasoningBudget(value);
|
|
29
|
+
if (flag === "--context-window")
|
|
30
|
+
contextWindowTokens = parseContextWindowTokens(Number(value));
|
|
31
|
+
if (flag === "--api-key-env")
|
|
32
|
+
apiKeyEnv = parseProviderCredentialEnvironment(value);
|
|
33
|
+
}
|
|
34
|
+
return { argv, contextWindowTokens, apiKeyEnv, modelOptions: parseSetupModelOptions(options) };
|
|
35
|
+
}
|
|
36
|
+
export function requireSetupCommandProviderOptions(provider, options) {
|
|
37
|
+
if (options.apiKeyEnv && provider !== "llamacpp")
|
|
38
|
+
throw new Error("--api-key-env is supported only with --provider llamacpp");
|
|
39
|
+
if (options.modelOptions.reasoningBudget && provider !== "llamacpp")
|
|
40
|
+
throw new Error("--reasoning-budget is supported only with --provider llamacpp");
|
|
41
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type SetupModelOptions } from "./runtime-setup-model-options.js";
|
|
1
2
|
export type Provider = string;
|
|
2
3
|
export type JsonObject = Record<string, unknown>;
|
|
3
4
|
export declare const DEFAULT_ROOT_RESPONSE_METHODOLOGY_FILES: readonly string[];
|
|
@@ -9,7 +10,7 @@ export declare function readJsonObject(path: string): Promise<JsonObject>;
|
|
|
9
10
|
export declare function writeJsonObject(path: string, value: JsonObject, options?: Readonly<{
|
|
10
11
|
exclusive?: boolean;
|
|
11
12
|
}>): Promise<void>;
|
|
12
|
-
export declare function buildProviderConfig(provider: Provider, baseUrl?: string): JsonObject;
|
|
13
|
-
export declare function buildModelConfig(template: JsonObject, provider: Provider, model: string, contextWindowTokens?: number): JsonObject;
|
|
13
|
+
export declare function buildProviderConfig(provider: Provider, baseUrl?: string, apiKeyEnv?: string): JsonObject;
|
|
14
|
+
export declare function buildModelConfig(template: JsonObject, provider: Provider, model: string, contextWindowTokens?: number, modelOptions?: SetupModelOptions): JsonObject;
|
|
14
15
|
export declare function parseContextWindowTokens(value: unknown): number | undefined;
|
|
15
16
|
export declare function readDefaultContextWindowTokens(): Promise<number>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { readFile, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { defaultProviderAddress, parseProviderCredentialEnvironment } from "./runtime-setup-provider-options.js";
|
|
5
|
+
import { buildSetupModelReasoning } from "./runtime-setup-model-options.js";
|
|
4
6
|
export const DEFAULT_ROOT_RESPONSE_METHODOLOGY_FILES = Object.freeze([
|
|
5
7
|
"methodologies/response-ux.md",
|
|
6
8
|
"methodologies/memory-informed-response.md",
|
|
@@ -61,7 +63,7 @@ export async function writeJsonObject(path, value, options = {}) {
|
|
|
61
63
|
...(options.exclusive ? { flag: "wx" } : {}),
|
|
62
64
|
});
|
|
63
65
|
}
|
|
64
|
-
export function buildProviderConfig(provider, baseUrl) {
|
|
66
|
+
export function buildProviderConfig(provider, baseUrl, apiKeyEnv) {
|
|
65
67
|
if (provider === "openai") {
|
|
66
68
|
return {
|
|
67
69
|
type: "openai",
|
|
@@ -74,9 +76,17 @@ export function buildProviderConfig(provider, baseUrl) {
|
|
|
74
76
|
baseUrl: baseUrl ?? "http://127.0.0.1:11434",
|
|
75
77
|
};
|
|
76
78
|
}
|
|
79
|
+
if (provider === "llamacpp") {
|
|
80
|
+
const credential = parseProviderCredentialEnvironment(apiKeyEnv);
|
|
81
|
+
return {
|
|
82
|
+
type: "llamacpp",
|
|
83
|
+
baseUrl: baseUrl ?? defaultProviderAddress(provider),
|
|
84
|
+
...(credential ? { apiKeyEnv: credential } : {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
77
87
|
return { type: provider };
|
|
78
88
|
}
|
|
79
|
-
export function buildModelConfig(template, provider, model, contextWindowTokens) {
|
|
89
|
+
export function buildModelConfig(template, provider, model, contextWindowTokens, modelOptions = {}) {
|
|
80
90
|
const context = isRecord(template.context) ? template.context : {};
|
|
81
91
|
const tokenEstimation = isRecord(context.tokenEstimation)
|
|
82
92
|
? context.tokenEstimation
|
|
@@ -86,10 +96,14 @@ export function buildModelConfig(template, provider, model, contextWindowTokens)
|
|
|
86
96
|
? calibration["context.compact"]
|
|
87
97
|
: {};
|
|
88
98
|
const generation = isRecord(compaction.generation) ? compaction.generation : {};
|
|
99
|
+
const rawPayload = isRecord(calibration["toolPayload.raw"])
|
|
100
|
+
? calibration["toolPayload.raw"]
|
|
101
|
+
: {};
|
|
89
102
|
const shouldApplyOllamaSetupCalibration = provider === "ollama";
|
|
90
|
-
const
|
|
103
|
+
const shouldApplyOpenAiStepTimeouts = provider === "openai";
|
|
91
104
|
const modelConfig = {
|
|
92
105
|
...template,
|
|
106
|
+
...buildSetupModelReasoning(provider, isRecord(template.generation) ? template.generation : {}, modelOptions),
|
|
93
107
|
...(shouldApplyOllamaSetupCalibration
|
|
94
108
|
? {
|
|
95
109
|
calibration: {
|
|
@@ -135,13 +149,14 @@ export function buildModelConfig(template, provider, model, contextWindowTokens)
|
|
|
135
149
|
},
|
|
136
150
|
},
|
|
137
151
|
};
|
|
138
|
-
if (!
|
|
152
|
+
if (!shouldApplyOpenAiStepTimeouts)
|
|
139
153
|
return modelConfig;
|
|
140
154
|
return {
|
|
141
155
|
...modelConfig,
|
|
142
156
|
calibration: {
|
|
143
157
|
...calibration,
|
|
144
158
|
"context.compact": { timeoutMs: 300_000, ...compaction },
|
|
159
|
+
"toolPayload.raw": { timeoutMs: 300_000, ...rawPayload },
|
|
145
160
|
},
|
|
146
161
|
};
|
|
147
162
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ModelReasoningBudget } from "../src/shared/model-reasoning.js";
|
|
2
|
+
export type SetupModelOptions = Readonly<{
|
|
3
|
+
supportsThinking?: boolean;
|
|
4
|
+
reasoningBudget?: ModelReasoningBudget;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function parseSetupModelOptions(body: Record<string, unknown>): SetupModelOptions;
|
|
7
|
+
export declare function parseCliReasoningBudget(value: string): ModelReasoningBudget;
|
|
8
|
+
export declare function buildSetupModelReasoning(provider: string, generation: Record<string, unknown>, options: SetupModelOptions): Record<string, unknown>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { parseModelReasoningBudget, } from "../src/shared/model-reasoning.js";
|
|
2
|
+
export function parseSetupModelOptions(body) {
|
|
3
|
+
const supportsThinking = body.supportsThinking;
|
|
4
|
+
if (supportsThinking !== undefined && typeof supportsThinking !== "boolean")
|
|
5
|
+
throw new Error("Supports reasoning must be true or false.");
|
|
6
|
+
const reasoningBudget = parseModelReasoningBudget(body.reasoningBudget);
|
|
7
|
+
if (reasoningBudget !== undefined && supportsThinking !== true)
|
|
8
|
+
throw new Error("Enable reasoning support before configuring its budget.");
|
|
9
|
+
return {
|
|
10
|
+
...(supportsThinking !== undefined ? { supportsThinking } : {}),
|
|
11
|
+
...(reasoningBudget !== undefined ? { reasoningBudget } : {}),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function parseCliReasoningBudget(value) {
|
|
15
|
+
const hasReasoningBudgetInput = value.trim().length > 0;
|
|
16
|
+
if (!hasReasoningBudgetInput)
|
|
17
|
+
throw new Error("A reasoning budget is required.");
|
|
18
|
+
if (value === "server-default")
|
|
19
|
+
return { mode: "server-default" };
|
|
20
|
+
const budget = parseModelReasoningBudget({ mode: "tokens", tokens: Number(value) });
|
|
21
|
+
if (!budget)
|
|
22
|
+
throw new Error("A reasoning budget is required.");
|
|
23
|
+
return budget;
|
|
24
|
+
}
|
|
25
|
+
export function buildSetupModelReasoning(provider, generation, options) {
|
|
26
|
+
const validated = parseSetupModelOptions(options);
|
|
27
|
+
if (validated.reasoningBudget && provider !== "llamacpp")
|
|
28
|
+
throw new Error("A token reasoning budget requires a llama.cpp provider.");
|
|
29
|
+
if (provider !== "llamacpp")
|
|
30
|
+
return validated.supportsThinking === undefined
|
|
31
|
+
? {}
|
|
32
|
+
: { supportsThinking: validated.supportsThinking };
|
|
33
|
+
return {
|
|
34
|
+
supportsThinking: validated.supportsThinking === true,
|
|
35
|
+
capabilities: { inputModalities: ["text"] },
|
|
36
|
+
...(validated.reasoningBudget
|
|
37
|
+
? { generation: { ...generation, reasoningBudget: validated.reasoningBudget } }
|
|
38
|
+
: {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -3,11 +3,11 @@ function commandForMode(mode, sourceCommand, packageCommand) {
|
|
|
3
3
|
}
|
|
4
4
|
export function getInitUsage(mode) {
|
|
5
5
|
const command = commandForMode(mode, "npm run init --", "npx abot init");
|
|
6
|
-
return `Usage: ${command} --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--force] [--root <dir>]`;
|
|
6
|
+
return `Usage: ${command} --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--context-window <tokens>] [--supports-thinking <true|false>] [--reasoning-budget <tokens|server-default>] [--api-key-env <name>] [--force] [--root <dir>]`;
|
|
7
7
|
}
|
|
8
8
|
export function getAddModelUsage(mode) {
|
|
9
9
|
const command = commandForMode(mode, "npm run add-model --", "npx abot add-model");
|
|
10
|
-
return `Usage: ${command} --profile <profile-id> --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--default] [--root <dir>]`;
|
|
10
|
+
return `Usage: ${command} --profile <profile-id> --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--context-window <tokens>] [--supports-thinking <true|false>] [--reasoning-budget <tokens|server-default>] [--api-key-env <name>] [--default] [--root <dir>]`;
|
|
11
11
|
}
|
|
12
12
|
export function getMissingInitializationInstruction(mode) {
|
|
13
13
|
return commandForMode(mode, "run npm run init first", "run npx abot init first");
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function supportsProviderAddress(provider: string): boolean;
|
|
2
|
+
export declare function defaultProviderAddress(provider: string): string | undefined;
|
|
3
|
+
export declare function supportsProviderCredential(provider: string): boolean;
|
|
4
|
+
export declare function parseProviderCredentialEnvironment(value: unknown): string | undefined;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function supportsProviderAddress(provider) {
|
|
2
|
+
return provider === "ollama" || provider === "llamacpp";
|
|
3
|
+
}
|
|
4
|
+
export function defaultProviderAddress(provider) {
|
|
5
|
+
if (provider === "ollama")
|
|
6
|
+
return "http://127.0.0.1:11434";
|
|
7
|
+
if (provider === "llamacpp")
|
|
8
|
+
return "http://127.0.0.1:8080";
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
export function supportsProviderCredential(provider) {
|
|
12
|
+
return provider === "openai" || provider === "llamacpp";
|
|
13
|
+
}
|
|
14
|
+
export function parseProviderCredentialEnvironment(value) {
|
|
15
|
+
if (value === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
if (typeof value === "string" && /^[A-Za-z_][A-Za-z0-9_]*$/u.test(value))
|
|
18
|
+
return value;
|
|
19
|
+
throw new Error("API key environment name must be a valid environment variable name.");
|
|
20
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ModelReasoningPreference } from "../../shared/model-reasoning.js";
|
|
1
2
|
import type { AgentMode, ModelReasoningLevel, ModelStep } from "../../shared/types.js";
|
|
2
3
|
import type { StreamCallbacks } from "../client-stream-parser.js";
|
|
3
4
|
import type { ModelGatewayAttachment, ModelGatewayPolicyConfig, ModelPreference, ModelTokenUsage } from "../types.js";
|
|
@@ -19,6 +20,7 @@ export type InvokeModelGatewayParams = StreamCallbacks & {
|
|
|
19
20
|
modelOverride?: string;
|
|
20
21
|
reasoningOverride?: ModelReasoningLevel;
|
|
21
22
|
modelPreference?: ModelPreference;
|
|
23
|
+
reasoningPreference?: ModelReasoningPreference;
|
|
22
24
|
modelPolicy?: ModelGatewayPolicyConfig;
|
|
23
25
|
abortSignal: AbortSignal;
|
|
24
26
|
debugRequestId?: string;
|
|
@@ -32,6 +34,7 @@ export type InvokeRawModelGatewayParams = {
|
|
|
32
34
|
modelOverride?: string;
|
|
33
35
|
reasoningOverride?: ModelReasoningLevel;
|
|
34
36
|
modelPreference?: ModelPreference;
|
|
37
|
+
reasoningPreference?: ModelReasoningPreference;
|
|
35
38
|
modelPolicy?: ModelGatewayPolicyConfig;
|
|
36
39
|
abortSignal: AbortSignal;
|
|
37
40
|
debugRequestId?: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { traceDebug } from "../../runtime/observability/debug-logger.js";
|
|
3
|
+
import { InputTokenCountDiagnostics } from "../observability/input-token-count-diagnostics.js";
|
|
3
4
|
import { toolMediaSafeMessage } from "../observability/tool-media-privacy.js";
|
|
4
5
|
import { buildChatGatewayRequestBody, resolveRequestMessages, } from "./message-projection.js";
|
|
5
6
|
import { resolveClientOptions } from "./options.js";
|
|
@@ -61,6 +62,10 @@ function updateInputTokenCountCache(cache, cacheKey, result) {
|
|
|
61
62
|
cache.delete(oldestKey);
|
|
62
63
|
}
|
|
63
64
|
}
|
|
65
|
+
// A local llama.cpp server can change its template/tokenizer without changing the request.
|
|
66
|
+
function canCacheProviderInputTokenCount(provider) {
|
|
67
|
+
return provider !== "llamacpp";
|
|
68
|
+
}
|
|
64
69
|
export async function countModelGatewayInputTokensWithOptions(params, options = {}, cache) {
|
|
65
70
|
const clientOptions = resolveClientOptions(options);
|
|
66
71
|
const provider = params.provider.trim();
|
|
@@ -71,7 +76,8 @@ export async function countModelGatewayInputTokensWithOptions(params, options =
|
|
|
71
76
|
const modelPolicy = params.modelPolicy ?? clientOptions.modelPolicy;
|
|
72
77
|
const requestBody = buildChatGatewayRequestBody(params, requestMessages, modelPolicy);
|
|
73
78
|
const cacheKey = createInputTokenCountCacheKey(provider, requestBody);
|
|
74
|
-
const
|
|
79
|
+
const eligibleCache = canCacheProviderInputTokenCount(provider) ? cache : undefined;
|
|
80
|
+
const cached = eligibleCache?.get(cacheKey);
|
|
75
81
|
if (cached) {
|
|
76
82
|
return cached;
|
|
77
83
|
}
|
|
@@ -84,21 +90,35 @@ export async function countModelGatewayInputTokensWithOptions(params, options =
|
|
|
84
90
|
modelStep: params.modelStep,
|
|
85
91
|
messageCount: requestMessages.length,
|
|
86
92
|
});
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
const diagnostics = new InputTokenCountDiagnostics("model-gateway.client", requestBody);
|
|
94
|
+
diagnostics.setProvider(provider);
|
|
95
|
+
let statusCode;
|
|
96
|
+
let result;
|
|
97
|
+
try {
|
|
98
|
+
diagnostics.setPhase("bridge_fetch");
|
|
99
|
+
const response = await fetch(`${clientOptions.baseUrl}/input-tokens`, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
headers: {
|
|
102
|
+
"Content-Type": "application/json",
|
|
103
|
+
},
|
|
104
|
+
signal: params.abortSignal,
|
|
105
|
+
body: JSON.stringify(requestBody),
|
|
106
|
+
});
|
|
107
|
+
statusCode = response.status;
|
|
108
|
+
diagnostics.setPhase("bridge_response");
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
const errorText = await response.text().catch(() => "");
|
|
111
|
+
throw new Error(`bridge_input_token_count_failed:${response.status}:${toolMediaSafeMessage(errorText || "empty error body", requestMessages)}`);
|
|
112
|
+
}
|
|
113
|
+
diagnostics.setPhase("bridge_parse");
|
|
114
|
+
result = parseInputTokenCountResult(await response.json().catch(() => undefined));
|
|
115
|
+
if (result.provider !== provider) {
|
|
116
|
+
throw new Error("model_gateway_input_token_count_provider_mismatch");
|
|
117
|
+
}
|
|
98
118
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
throw
|
|
119
|
+
catch (error) {
|
|
120
|
+
diagnostics.failed({ kind: "exception", error, statusCode, aborted: params.abortSignal.aborted });
|
|
121
|
+
throw error;
|
|
102
122
|
}
|
|
103
123
|
traceDebug("model-gateway.client", "input_tokens.request.completed", {
|
|
104
124
|
requestId,
|
|
@@ -108,6 +128,6 @@ export async function countModelGatewayInputTokensWithOptions(params, options =
|
|
|
108
128
|
inputTokens: result.inputTokens,
|
|
109
129
|
durationMs: Date.now() - startedAt,
|
|
110
130
|
});
|
|
111
|
-
updateInputTokenCountCache(
|
|
131
|
+
updateInputTokenCountCache(eligibleCache, cacheKey, result);
|
|
112
132
|
return result;
|
|
113
133
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ModelReasoningPreference } from "../../shared/model-reasoning.js";
|
|
1
2
|
import type { AgentMode, ModelReasoningLevel, ModelStep } from "../../shared/types.js";
|
|
2
3
|
import type { ChatMessage, ModelGatewayPolicyConfig, ModelPreference } from "../types.js";
|
|
3
4
|
import type { ModelMetricMessage } from "./contracts.js";
|
|
@@ -14,6 +15,7 @@ export declare function buildChatGatewayRequestBody(params: Readonly<{
|
|
|
14
15
|
modelOverride?: string;
|
|
15
16
|
reasoningOverride?: ModelReasoningLevel;
|
|
16
17
|
modelPreference?: ModelPreference;
|
|
18
|
+
reasoningPreference?: ModelReasoningPreference;
|
|
17
19
|
debugRequestId?: string;
|
|
18
20
|
format?: "json" | Record<string, unknown>;
|
|
19
21
|
}>, messages: readonly ChatMessage[], modelPolicy: ModelGatewayPolicyConfig | undefined): Record<string, unknown>;
|
|
@@ -145,6 +145,7 @@ export function buildChatGatewayRequestBody(params, messages, modelPolicy) {
|
|
|
145
145
|
...(params.reasoningOverride
|
|
146
146
|
? { reasoningOverride: params.reasoningOverride }
|
|
147
147
|
: {}),
|
|
148
|
+
...(params.reasoningPreference ? { reasoningPreference: params.reasoningPreference } : {}),
|
|
148
149
|
...(params.modelPreference
|
|
149
150
|
? { modelPreference: params.modelPreference }
|
|
150
151
|
: {}),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DEFAULT_MODEL_GATEWAY_URL } from "../../shared/constants.js";
|
|
2
2
|
const DEFAULT_STREAM_INACTIVITY_TIMEOUT_MS = 90_000;
|
|
3
|
-
const DEFAULT_INPUT_TOKEN_COUNT_PROVIDERS = Object.freeze(["openai"]);
|
|
3
|
+
const DEFAULT_INPUT_TOKEN_COUNT_PROVIDERS = Object.freeze(["openai", "llamacpp"]);
|
|
4
4
|
function readPositiveInt(name, fallback) {
|
|
5
5
|
const raw = Number(process.env[name]);
|
|
6
6
|
return Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : fallback;
|
|
@@ -43,6 +43,7 @@ export async function invokeRawModelGatewayWithOptions(params, options = {}) {
|
|
|
43
43
|
...(params.reasoningOverride
|
|
44
44
|
? { reasoningOverride: params.reasoningOverride }
|
|
45
45
|
: {}),
|
|
46
|
+
...(params.reasoningPreference ? { reasoningPreference: params.reasoningPreference } : {}),
|
|
46
47
|
...(params.modelPreference
|
|
47
48
|
? { modelPreference: params.modelPreference }
|
|
48
49
|
: {}),
|
|
@@ -2,4 +2,4 @@ export { createModelProviderAdapterRegistry, ModelProviderAdapterResolutionError
|
|
|
2
2
|
export { createChatHandler, createEmbeddingHandler, createInputTokenCountHandler, createModelGatewayServer, createRawHandler, type GatewayFetch, type GatewayResponse, type ModelGatewayHandlerOptions, } from "./server.js";
|
|
3
3
|
export { EmbeddingProviderRequestError, executeEmbeddingRequest, } from "./embeddings/execution.js";
|
|
4
4
|
export { discoverEmbeddingModels } from "./embeddings/discovery.js";
|
|
5
|
-
export type { ModelContextConfig, ModelFormatTokenAccountingConfig, ModelGatewayPolicyConfig, ModelGatewayProviderConfig, ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult, ModelGatewayEmbeddingParams, ModelGatewayEmbeddingProfileConfig, ModelGatewayEmbeddingRequest, ModelGatewayEmbeddingResult, ModelGatewayRequest, ModelProfile, ResolvedModelInvocation, } from "./types.js";
|
|
5
|
+
export type { ModelContextConfig, ModelFormatTokenAccountingConfig, ModelGatewayPolicyConfig, ModelGatewayProviderConfig, ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult, ModelGatewayEmbeddingParams, ModelGatewayEmbeddingProfileConfig, ModelGatewayEmbeddingRequest, ModelGatewayEmbeddingResult, ModelGatewayRequest, ModelReasoningBudget, ModelReasoningBudgetByMode, ModelReasoningPreference, ModelProfile, ResolvedModelInvocation, } from "./types.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ModelGatewayRequest, ResolvedModelInvocation } from "../types.js";
|
|
2
|
+
type CountPhase = "prepare" | "resolve" | "provider_count" | "measurement_record" | "response_write" | "bridge_fetch" | "bridge_response" | "bridge_parse";
|
|
3
|
+
type CountFailureKind = "exception" | "provider_result";
|
|
4
|
+
/** Request-local metadata only. It never reads response bodies or alters failures. */
|
|
5
|
+
export declare class InputTokenCountDiagnostics {
|
|
6
|
+
private readonly scope;
|
|
7
|
+
private readonly requestBody;
|
|
8
|
+
private readonly startedAt;
|
|
9
|
+
private readonly diagnosticId;
|
|
10
|
+
private phase;
|
|
11
|
+
private invocation?;
|
|
12
|
+
private provider?;
|
|
13
|
+
private upstream;
|
|
14
|
+
constructor(scope: "model-gateway.client" | "model-gateway.server", requestBody: ModelGatewayRequest);
|
|
15
|
+
setPhase(phase: CountPhase): void;
|
|
16
|
+
setProvider(provider: string): void;
|
|
17
|
+
bindInvocation(invocation: ResolvedModelInvocation): void;
|
|
18
|
+
observeFetch(fetchImpl: typeof fetch): typeof fetch;
|
|
19
|
+
failed(params: {
|
|
20
|
+
kind: CountFailureKind;
|
|
21
|
+
aborted: boolean;
|
|
22
|
+
statusCode?: number;
|
|
23
|
+
error?: unknown;
|
|
24
|
+
}): void;
|
|
25
|
+
}
|
|
26
|
+
export {};
|