@calliopelabs/cli 0.8.20 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/agent-config-loader.d.ts +60 -0
- package/dist/agents/agent-config-loader.d.ts.map +1 -0
- package/dist/agents/agent-config-loader.js +402 -0
- package/dist/agents/agent-config-loader.js.map +1 -0
- package/dist/agents/agent-config-presets.d.ts +10 -0
- package/dist/agents/agent-config-presets.d.ts.map +1 -0
- package/dist/agents/agent-config-presets.js +940 -0
- package/dist/agents/agent-config-presets.js.map +1 -0
- package/dist/agents/agent-config-types.d.ts +145 -0
- package/dist/agents/agent-config-types.d.ts.map +1 -0
- package/dist/agents/agent-config-types.js +12 -0
- package/dist/agents/agent-config-types.js.map +1 -0
- package/dist/{agterm → agents}/agent-detection.d.ts +1 -1
- package/dist/{agterm → agents}/agent-detection.d.ts.map +1 -1
- package/dist/{agterm → agents}/agent-detection.js +21 -5
- package/dist/agents/agent-detection.js.map +1 -0
- package/dist/agents/aggregator.d.ts +19 -0
- package/dist/agents/aggregator.d.ts.map +1 -0
- package/dist/agents/aggregator.js +141 -0
- package/dist/agents/aggregator.js.map +1 -0
- package/dist/{agterm → agents}/cli-backend.d.ts +1 -1
- package/dist/{agterm → agents}/cli-backend.d.ts.map +1 -1
- package/dist/{agterm → agents}/cli-backend.js +90 -12
- package/dist/agents/cli-backend.js.map +1 -0
- package/dist/agents/council-types.d.ts +113 -0
- package/dist/agents/council-types.d.ts.map +1 -0
- package/dist/agents/council-types.js +81 -0
- package/dist/agents/council-types.js.map +1 -0
- package/dist/agents/council.d.ts +107 -0
- package/dist/agents/council.d.ts.map +1 -0
- package/dist/agents/council.js +586 -0
- package/dist/agents/council.js.map +1 -0
- package/dist/agents/decomposer.d.ts +33 -0
- package/dist/agents/decomposer.d.ts.map +1 -0
- package/dist/agents/decomposer.js +138 -0
- package/dist/agents/decomposer.js.map +1 -0
- package/dist/agents/dynamic-tools.d.ts +52 -0
- package/dist/agents/dynamic-tools.d.ts.map +1 -0
- package/dist/agents/dynamic-tools.js +395 -0
- package/dist/agents/dynamic-tools.js.map +1 -0
- package/dist/agents/index.d.ts +29 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +29 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/installer.d.ts +39 -0
- package/dist/agents/installer.d.ts.map +1 -0
- package/dist/agents/installer.js +205 -0
- package/dist/agents/installer.js.map +1 -0
- package/dist/{agterm → agents}/orchestrator.d.ts +7 -2
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/{agterm → agents}/orchestrator.js +22 -2
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/sdk-backend.d.ts +63 -0
- package/dist/agents/sdk-backend.d.ts.map +1 -0
- package/dist/agents/sdk-backend.js +489 -0
- package/dist/agents/sdk-backend.js.map +1 -0
- package/dist/agents/swarm-types.d.ts +83 -0
- package/dist/agents/swarm-types.d.ts.map +1 -0
- package/dist/agents/swarm-types.js +20 -0
- package/dist/agents/swarm-types.js.map +1 -0
- package/dist/agents/swarm.d.ts +74 -0
- package/dist/agents/swarm.d.ts.map +1 -0
- package/dist/agents/swarm.js +307 -0
- package/dist/agents/swarm.js.map +1 -0
- package/dist/{agterm → agents}/tools.d.ts +7 -5
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +776 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/{agterm → agents}/types.d.ts +14 -2
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/{agterm → agents}/types.js +2 -2
- package/dist/agents/types.js.map +1 -0
- package/dist/api-server.d.ts +26 -0
- package/dist/api-server.d.ts.map +1 -0
- package/dist/api-server.js +230 -0
- package/dist/api-server.js.map +1 -0
- package/dist/auto-checkpoint.d.ts +35 -0
- package/dist/auto-checkpoint.d.ts.map +1 -0
- package/dist/auto-checkpoint.js +143 -0
- package/dist/auto-checkpoint.js.map +1 -0
- package/dist/auto-compressor.d.ts +44 -0
- package/dist/auto-compressor.d.ts.map +1 -0
- package/dist/auto-compressor.js +145 -0
- package/dist/auto-compressor.js.map +1 -0
- package/dist/background-jobs.d.ts +45 -0
- package/dist/background-jobs.d.ts.map +1 -0
- package/dist/background-jobs.js +122 -0
- package/dist/background-jobs.js.map +1 -0
- package/dist/bin.d.ts +6 -2
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +127 -24
- package/dist/bin.js.map +1 -1
- package/dist/checkpoint.d.ts +49 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +219 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/circuit-breaker/breaker.d.ts +80 -0
- package/dist/circuit-breaker/breaker.d.ts.map +1 -0
- package/dist/circuit-breaker/breaker.js +408 -0
- package/dist/circuit-breaker/breaker.js.map +1 -0
- package/dist/circuit-breaker/defaults.d.ts +8 -0
- package/dist/circuit-breaker/defaults.d.ts.map +1 -0
- package/dist/circuit-breaker/defaults.js +35 -0
- package/dist/circuit-breaker/defaults.js.map +1 -0
- package/dist/circuit-breaker/index.d.ts +9 -0
- package/dist/circuit-breaker/index.d.ts.map +1 -0
- package/dist/circuit-breaker/index.js +8 -0
- package/dist/circuit-breaker/index.js.map +1 -0
- package/dist/circuit-breaker/types.d.ts +77 -0
- package/dist/circuit-breaker/types.d.ts.map +1 -0
- package/dist/circuit-breaker/types.js +8 -0
- package/dist/circuit-breaker/types.js.map +1 -0
- package/dist/circuit-breaker.d.ts +8 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +7 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/cli/agent.d.ts +9 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +262 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/commands.d.ts +12 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/{cli.js → cli/commands.js} +285 -422
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +222 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/types.d.ts +30 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +20 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/companions.d.ts +54 -0
- package/dist/companions.d.ts.map +1 -0
- package/dist/companions.js +440 -0
- package/dist/companions.js.map +1 -0
- package/dist/config.d.ts +23 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +95 -22
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +27 -0
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +415 -10
- package/dist/diff.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -11
- package/dist/errors.js.map +1 -1
- package/dist/git-status.d.ts +23 -0
- package/dist/git-status.d.ts.map +1 -0
- package/dist/git-status.js +92 -0
- package/dist/git-status.js.map +1 -0
- package/dist/headless.d.ts +25 -0
- package/dist/headless.d.ts.map +1 -0
- package/dist/headless.js +182 -0
- package/dist/headless.js.map +1 -0
- package/dist/hud/api.d.ts +35 -0
- package/dist/hud/api.d.ts.map +1 -0
- package/dist/hud/api.js +448 -0
- package/dist/hud/api.js.map +1 -0
- package/dist/hud/palettes.d.ts +9 -0
- package/dist/hud/palettes.d.ts.map +1 -0
- package/dist/hud/palettes.js +280 -0
- package/dist/hud/palettes.js.map +1 -0
- package/dist/hud/skins.d.ts +12 -0
- package/dist/hud/skins.d.ts.map +1 -0
- package/dist/hud/skins.js +365 -0
- package/dist/hud/skins.js.map +1 -0
- package/dist/hud/theme-packs/api.d.ts +51 -0
- package/dist/hud/theme-packs/api.d.ts.map +1 -0
- package/dist/hud/theme-packs/api.js +145 -0
- package/dist/hud/theme-packs/api.js.map +1 -0
- package/dist/hud/theme-packs/index.d.ts +18 -0
- package/dist/hud/theme-packs/index.d.ts.map +1 -0
- package/dist/hud/theme-packs/index.js +38 -0
- package/dist/hud/theme-packs/index.js.map +1 -0
- package/dist/hud/theme-packs/types.d.ts +29 -0
- package/dist/hud/theme-packs/types.d.ts.map +1 -0
- package/dist/hud/theme-packs/types.js +9 -0
- package/dist/hud/theme-packs/types.js.map +1 -0
- package/dist/hud/types.d.ts +182 -0
- package/dist/hud/types.d.ts.map +1 -0
- package/dist/hud/types.js +7 -0
- package/dist/hud/types.js.map +1 -0
- package/dist/idle-eviction.d.ts +34 -0
- package/dist/idle-eviction.d.ts.map +1 -0
- package/dist/idle-eviction.js +78 -0
- package/dist/idle-eviction.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/iteration-ledger.d.ts +105 -0
- package/dist/iteration-ledger.d.ts.map +1 -0
- package/dist/iteration-ledger.js +237 -0
- package/dist/iteration-ledger.js.map +1 -0
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +1 -27
- package/dist/markdown.js.map +1 -1
- package/dist/mcp.d.ts +35 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +291 -7
- package/dist/mcp.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +12 -2
- package/dist/memory.js.map +1 -1
- package/dist/model-detection.d.ts +5 -0
- package/dist/model-detection.d.ts.map +1 -1
- package/dist/model-detection.js +278 -10
- package/dist/model-detection.js.map +1 -1
- package/dist/model-router.d.ts.map +1 -1
- package/dist/model-router.js +33 -11
- package/dist/model-router.js.map +1 -1
- package/dist/plugins.d.ts +8 -0
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +97 -6
- package/dist/plugins.js.map +1 -1
- package/dist/providers/anthropic.d.ts +10 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +221 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +17 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +574 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/compat.d.ts +13 -0
- package/dist/providers/compat.d.ts.map +1 -0
- package/dist/providers/compat.js +202 -0
- package/dist/providers/compat.js.map +1 -0
- package/dist/providers/google.d.ts +10 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +203 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +23 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +145 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama.d.ts +17 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +289 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +121 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +485 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +63 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +164 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/sandbox-native.d.ts +59 -0
- package/dist/sandbox-native.d.ts.map +1 -0
- package/dist/sandbox-native.js +292 -0
- package/dist/sandbox-native.js.map +1 -0
- package/dist/sandbox.d.ts +2 -2
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +59 -13
- package/dist/sandbox.js.map +1 -1
- package/dist/scope.d.ts +3 -1
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js +13 -1
- package/dist/scope.js.map +1 -1
- package/dist/session-timeout.d.ts +31 -0
- package/dist/session-timeout.d.ts.map +1 -0
- package/dist/session-timeout.js +100 -0
- package/dist/session-timeout.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +29 -17
- package/dist/setup.js.map +1 -1
- package/dist/smart-router.d.ts +73 -0
- package/dist/smart-router.d.ts.map +1 -0
- package/dist/smart-router.js +332 -0
- package/dist/smart-router.js.map +1 -0
- package/dist/storage.d.ts +19 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +164 -1
- package/dist/storage.js.map +1 -1
- package/dist/streaming.d.ts +4 -0
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +12 -0
- package/dist/streaming.js.map +1 -1
- package/dist/styles.d.ts +32 -0
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +91 -0
- package/dist/styles.js.map +1 -1
- package/dist/summarization.d.ts +1 -1
- package/dist/summarization.js +4 -4
- package/dist/summarization.js.map +1 -1
- package/dist/terminal-image.d.ts +115 -0
- package/dist/terminal-image.d.ts.map +1 -0
- package/dist/terminal-image.js +766 -0
- package/dist/terminal-image.js.map +1 -0
- package/dist/terminal-recording.d.ts +55 -0
- package/dist/terminal-recording.d.ts.map +1 -0
- package/dist/terminal-recording.js +182 -0
- package/dist/terminal-recording.js.map +1 -0
- package/dist/themes.d.ts +19 -35
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +101 -210
- package/dist/themes.js.map +1 -1
- package/dist/tmux.d.ts +35 -0
- package/dist/tmux.d.ts.map +1 -0
- package/dist/tmux.js +106 -0
- package/dist/tmux.js.map +1 -0
- package/dist/tools.d.ts +3 -3
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +587 -45
- package/dist/tools.js.map +1 -1
- package/dist/trust.d.ts +53 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +154 -0
- package/dist/trust.js.map +1 -0
- package/dist/types.d.ts +7 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +70 -32
- package/dist/types.js.map +1 -1
- package/dist/ui/agent.d.ts +61 -0
- package/dist/ui/agent.d.ts.map +1 -0
- package/dist/ui/agent.js +768 -0
- package/dist/ui/agent.js.map +1 -0
- package/dist/ui/chat-input.d.ts +32 -0
- package/dist/ui/chat-input.d.ts.map +1 -0
- package/dist/ui/chat-input.js +355 -0
- package/dist/ui/chat-input.js.map +1 -0
- package/dist/ui/commands.d.ts +92 -0
- package/dist/ui/commands.d.ts.map +1 -0
- package/dist/ui/commands.js +3006 -0
- package/dist/ui/commands.js.map +1 -0
- package/dist/ui/completions.d.ts +22 -0
- package/dist/ui/completions.d.ts.map +1 -0
- package/dist/ui/completions.js +215 -0
- package/dist/ui/completions.js.map +1 -0
- package/dist/ui/components.d.ts +38 -0
- package/dist/ui/components.d.ts.map +1 -0
- package/dist/ui/components.js +422 -0
- package/dist/ui/components.js.map +1 -0
- package/dist/ui/context.d.ts +12 -0
- package/dist/ui/context.d.ts.map +1 -0
- package/dist/ui/context.js +102 -0
- package/dist/ui/context.js.map +1 -0
- package/dist/ui/error-boundary.d.ts +33 -0
- package/dist/ui/error-boundary.d.ts.map +1 -0
- package/dist/ui/error-boundary.js +94 -0
- package/dist/ui/error-boundary.js.map +1 -0
- package/dist/ui/frame.d.ts +13 -0
- package/dist/ui/frame.d.ts.map +1 -0
- package/dist/ui/frame.js +89 -0
- package/dist/ui/frame.js.map +1 -0
- package/dist/ui/index.d.ts +12 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +928 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/messages.d.ts +19 -0
- package/dist/ui/messages.d.ts.map +1 -0
- package/dist/ui/messages.js +181 -0
- package/dist/ui/messages.js.map +1 -0
- package/dist/ui/modals.d.ts +52 -0
- package/dist/ui/modals.d.ts.map +1 -0
- package/dist/ui/modals.js +204 -0
- package/dist/ui/modals.js.map +1 -0
- package/dist/ui/pack-picker.d.ts +12 -0
- package/dist/ui/pack-picker.d.ts.map +1 -0
- package/dist/ui/pack-picker.js +101 -0
- package/dist/ui/pack-picker.js.map +1 -0
- package/dist/ui/status-bar.d.ts +20 -0
- package/dist/ui/status-bar.d.ts.map +1 -0
- package/dist/ui/status-bar.js +41 -0
- package/dist/ui/status-bar.js.map +1 -0
- package/dist/ui/theme-picker.d.ts +24 -0
- package/dist/ui/theme-picker.d.ts.map +1 -0
- package/dist/ui/theme-picker.js +190 -0
- package/dist/ui/theme-picker.js.map +1 -0
- package/dist/ui/types.d.ts +62 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +7 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +1 -9
- package/dist/version-check.js.map +1 -1
- package/package.json +8 -3
- package/dist/agterm/agent-detection.js.map +0 -1
- package/dist/agterm/cli-backend.js.map +0 -1
- package/dist/agterm/index.d.ts +0 -12
- package/dist/agterm/index.d.ts.map +0 -1
- package/dist/agterm/index.js +0 -15
- package/dist/agterm/index.js.map +0 -1
- package/dist/agterm/orchestrator.d.ts.map +0 -1
- package/dist/agterm/orchestrator.js.map +0 -1
- package/dist/agterm/tools.d.ts.map +0 -1
- package/dist/agterm/tools.js +0 -278
- package/dist/agterm/tools.js.map +0 -1
- package/dist/agterm/types.d.ts.map +0 -1
- package/dist/agterm/types.js.map +0 -1
- package/dist/cli.d.ts +0 -14
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/providers.d.ts +0 -51
- package/dist/providers.d.ts.map +0 -1
- package/dist/providers.js +0 -1146
- package/dist/providers.js.map +0 -1
- package/dist/ui-cli.d.ts +0 -17
- package/dist/ui-cli.d.ts.map +0 -1
- package/dist/ui-cli.js +0 -3730
- package/dist/ui-cli.js.map +0 -1
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Provider (Chat Completions + Responses API)
|
|
3
|
+
*
|
|
4
|
+
* Handles both the standard Chat Completions API and the newer Responses API
|
|
5
|
+
* for reasoning models (o3, o4-mini, gpt-5, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Also exports shared OpenAI format converters used by the compat provider.
|
|
8
|
+
*/
|
|
9
|
+
import OpenAI from 'openai';
|
|
10
|
+
import * as config from '../config.js';
|
|
11
|
+
import { calculateMaxTokens, debugLog } from './types.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Shared OpenAI Format Converters (also used by compat provider)
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Convert MessageContent to OpenAI content format
|
|
17
|
+
*/
|
|
18
|
+
export function toOpenAIContent(content) {
|
|
19
|
+
if (typeof content === 'string') {
|
|
20
|
+
return content;
|
|
21
|
+
}
|
|
22
|
+
return content.map(block => {
|
|
23
|
+
if (block.type === 'text') {
|
|
24
|
+
return { type: 'text', text: block.text };
|
|
25
|
+
}
|
|
26
|
+
else if (block.type === 'image') {
|
|
27
|
+
return {
|
|
28
|
+
type: 'image_url',
|
|
29
|
+
image_url: {
|
|
30
|
+
url: `data:${block.mediaType};base64,${block.data}`,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return { type: 'text', text: '' };
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Convert messages to OpenAI format
|
|
39
|
+
*/
|
|
40
|
+
export function toOpenAIMessages(messages) {
|
|
41
|
+
return messages.map(m => {
|
|
42
|
+
if (m.role === 'tool') {
|
|
43
|
+
return {
|
|
44
|
+
role: 'tool',
|
|
45
|
+
tool_call_id: m.toolCallId || '',
|
|
46
|
+
content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (m.toolCalls && m.toolCalls.length > 0) {
|
|
50
|
+
return {
|
|
51
|
+
role: 'assistant',
|
|
52
|
+
content: typeof m.content === 'string' ? m.content : (m.content ? JSON.stringify(m.content) : null),
|
|
53
|
+
tool_calls: m.toolCalls.map(tc => ({
|
|
54
|
+
id: tc.id,
|
|
55
|
+
type: 'function',
|
|
56
|
+
function: {
|
|
57
|
+
name: tc.name,
|
|
58
|
+
arguments: JSON.stringify(tc.arguments),
|
|
59
|
+
},
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Handle multi-modal content for user messages
|
|
64
|
+
if (m.role === 'user' && Array.isArray(m.content)) {
|
|
65
|
+
return {
|
|
66
|
+
role: 'user',
|
|
67
|
+
content: toOpenAIContent(m.content),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
role: m.role,
|
|
72
|
+
content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Convert tools to OpenAI format
|
|
78
|
+
*/
|
|
79
|
+
export function toOpenAITools(tools) {
|
|
80
|
+
return tools.map(t => ({
|
|
81
|
+
type: 'function',
|
|
82
|
+
function: {
|
|
83
|
+
name: t.name,
|
|
84
|
+
description: t.description,
|
|
85
|
+
parameters: t.parameters,
|
|
86
|
+
},
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Parse tool calls from OpenAI response
|
|
91
|
+
*/
|
|
92
|
+
export function parseOpenAIToolCalls(toolCalls) {
|
|
93
|
+
if (!toolCalls)
|
|
94
|
+
return [];
|
|
95
|
+
const result = [];
|
|
96
|
+
for (const tc of toolCalls) {
|
|
97
|
+
let parsedArgs = {};
|
|
98
|
+
try {
|
|
99
|
+
parsedArgs = JSON.parse(tc.function.arguments);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const parseError = error instanceof SyntaxError ? error.message : 'Unknown parse error';
|
|
103
|
+
throw new Error(`Invalid tool arguments from LLM: ${parseError}. Raw: ${tc.function.arguments.substring(0, 200)}`);
|
|
104
|
+
}
|
|
105
|
+
result.push({
|
|
106
|
+
id: tc.id,
|
|
107
|
+
name: tc.function.name,
|
|
108
|
+
arguments: parsedArgs,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Responses API Helpers
|
|
115
|
+
// ============================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Models that require the Responses API instead of Chat Completions
|
|
118
|
+
* These are OpenAI's newer reasoning models that only work with /v1/responses
|
|
119
|
+
*/
|
|
120
|
+
const RESPONSES_API_MODELS = [
|
|
121
|
+
'o3',
|
|
122
|
+
'o3-mini',
|
|
123
|
+
'o3-pro',
|
|
124
|
+
'o4-mini',
|
|
125
|
+
'gpt-5',
|
|
126
|
+
];
|
|
127
|
+
/**
|
|
128
|
+
* Check if a model requires the Responses API
|
|
129
|
+
*/
|
|
130
|
+
export function requiresResponsesAPI(model) {
|
|
131
|
+
return RESPONSES_API_MODELS.some(m => model.startsWith(m));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Convert messages to Responses API input format
|
|
135
|
+
*/
|
|
136
|
+
export function toResponsesInput(messages) {
|
|
137
|
+
const input = [];
|
|
138
|
+
for (const m of messages) {
|
|
139
|
+
if (m.role === 'system') {
|
|
140
|
+
// System messages become developer messages in Responses API
|
|
141
|
+
input.push({
|
|
142
|
+
role: 'developer',
|
|
143
|
+
content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else if (m.role === 'tool') {
|
|
147
|
+
// Tool results become function_call_output items
|
|
148
|
+
input.push({
|
|
149
|
+
type: 'function_call_output',
|
|
150
|
+
call_id: m.toolCallId || '',
|
|
151
|
+
output: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else if (m.role === 'assistant') {
|
|
155
|
+
// Assistant messages with tool calls
|
|
156
|
+
if (m.toolCalls && m.toolCalls.length > 0) {
|
|
157
|
+
// First add any text content as a message
|
|
158
|
+
const textContent = typeof m.content === 'string' ? m.content :
|
|
159
|
+
(Array.isArray(m.content) ? m.content.filter(b => b.type === 'text').map(b => b.text).join('\n') : '');
|
|
160
|
+
if (textContent) {
|
|
161
|
+
input.push({
|
|
162
|
+
role: 'assistant',
|
|
163
|
+
content: textContent,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
// Then add each tool call as a function_call item
|
|
167
|
+
for (const tc of m.toolCalls) {
|
|
168
|
+
input.push({
|
|
169
|
+
type: 'function_call',
|
|
170
|
+
call_id: tc.id,
|
|
171
|
+
name: tc.name,
|
|
172
|
+
arguments: JSON.stringify(tc.arguments),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
input.push({
|
|
178
|
+
role: 'assistant',
|
|
179
|
+
content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else if (m.role === 'user') {
|
|
184
|
+
// Handle multi-modal content for user messages
|
|
185
|
+
if (Array.isArray(m.content)) {
|
|
186
|
+
const parts = [];
|
|
187
|
+
for (const block of m.content) {
|
|
188
|
+
if (block.type === 'text') {
|
|
189
|
+
parts.push({ type: 'input_text', text: block.text });
|
|
190
|
+
}
|
|
191
|
+
else if (block.type === 'image') {
|
|
192
|
+
parts.push({
|
|
193
|
+
type: 'input_image',
|
|
194
|
+
image_url: { url: `data:${block.mediaType};base64,${block.data}` },
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
input.push({ role: 'user', content: parts });
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
input.push({
|
|
202
|
+
role: 'user',
|
|
203
|
+
content: m.content,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return input;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Convert tools to Responses API format
|
|
212
|
+
*/
|
|
213
|
+
export function toResponsesTools(tools) {
|
|
214
|
+
return tools.map(t => ({
|
|
215
|
+
type: 'function',
|
|
216
|
+
name: t.name,
|
|
217
|
+
description: t.description,
|
|
218
|
+
parameters: t.parameters,
|
|
219
|
+
strict: false,
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
// Type guards for Responses API events
|
|
223
|
+
function isTextDeltaEvent(event) {
|
|
224
|
+
return event.type === 'response.output_text.delta';
|
|
225
|
+
}
|
|
226
|
+
function isFunctionCallDoneEvent(event) {
|
|
227
|
+
return event.type === 'response.function_call_arguments.done';
|
|
228
|
+
}
|
|
229
|
+
function isCompletedEvent(event) {
|
|
230
|
+
return event.type === 'response.completed';
|
|
231
|
+
}
|
|
232
|
+
function isFunctionCallOutput(item) {
|
|
233
|
+
return item.type === 'function_call';
|
|
234
|
+
}
|
|
235
|
+
// ============================================================================
|
|
236
|
+
// Provider Implementations
|
|
237
|
+
// ============================================================================
|
|
238
|
+
/**
|
|
239
|
+
* Chat with OpenAI using the Responses API (for o3, o4-mini, etc.)
|
|
240
|
+
*/
|
|
241
|
+
async function chatOpenAIResponses(messages, tools, model, onToken) {
|
|
242
|
+
const apiKey = config.getApiKey('openai');
|
|
243
|
+
if (!apiKey)
|
|
244
|
+
throw new Error('OpenAI API key not configured');
|
|
245
|
+
const client = new OpenAI({ apiKey });
|
|
246
|
+
const responsesInput = toResponsesInput(messages);
|
|
247
|
+
const responsesTools = toResponsesTools(tools);
|
|
248
|
+
// Calculate dynamic max_tokens based on available context space
|
|
249
|
+
const dynamicMaxTokens = calculateMaxTokens('openai', model, messages, tools);
|
|
250
|
+
debugLog(`OpenAI Responses API request: model=${model}, max_tokens=${dynamicMaxTokens}`);
|
|
251
|
+
// Use streaming if callback provided
|
|
252
|
+
if (onToken) {
|
|
253
|
+
let content = '';
|
|
254
|
+
const toolCalls = [];
|
|
255
|
+
let finishReason = 'stop';
|
|
256
|
+
let inputTokens = 0;
|
|
257
|
+
let outputTokens = 0;
|
|
258
|
+
try {
|
|
259
|
+
// Note: OpenAI SDK types don't fully match Responses API yet
|
|
260
|
+
// We use our own type definitions and cast through unknown for SDK interop
|
|
261
|
+
const streamParams = {
|
|
262
|
+
model,
|
|
263
|
+
input: responsesInput,
|
|
264
|
+
tools: responsesTools.length > 0 ? responsesTools : undefined,
|
|
265
|
+
max_output_tokens: dynamicMaxTokens,
|
|
266
|
+
};
|
|
267
|
+
const stream = client.responses.stream(streamParams);
|
|
268
|
+
for await (const event of stream) {
|
|
269
|
+
const typedEvent = event;
|
|
270
|
+
if (isTextDeltaEvent(typedEvent)) {
|
|
271
|
+
content += typedEvent.delta;
|
|
272
|
+
onToken(typedEvent.delta);
|
|
273
|
+
}
|
|
274
|
+
else if (isFunctionCallDoneEvent(typedEvent)) {
|
|
275
|
+
let parsedArgs = {};
|
|
276
|
+
try {
|
|
277
|
+
parsedArgs = JSON.parse(typedEvent.arguments || '{}');
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
debugLog(`Failed to parse Responses API tool call arguments for ${typedEvent.name}: ${typedEvent.arguments?.substring(0, 200)}`);
|
|
281
|
+
}
|
|
282
|
+
toolCalls.push({
|
|
283
|
+
id: typedEvent.call_id || `call_${Date.now()}`,
|
|
284
|
+
name: typedEvent.name,
|
|
285
|
+
arguments: parsedArgs,
|
|
286
|
+
});
|
|
287
|
+
finishReason = 'tool_use';
|
|
288
|
+
}
|
|
289
|
+
else if (isCompletedEvent(typedEvent)) {
|
|
290
|
+
const response = typedEvent.response;
|
|
291
|
+
if (response?.usage) {
|
|
292
|
+
inputTokens = response.usage.input_tokens || 0;
|
|
293
|
+
outputTokens = response.usage.output_tokens || 0;
|
|
294
|
+
}
|
|
295
|
+
if (response?.status === 'incomplete') {
|
|
296
|
+
finishReason = 'length';
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
content,
|
|
302
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
303
|
+
finishReason,
|
|
304
|
+
usage: { inputTokens, outputTokens },
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
catch (streamError) {
|
|
308
|
+
// Surface the streaming failure and re-throw so withRetry handles it
|
|
309
|
+
const errMsg = streamError instanceof Error ? streamError.message : String(streamError);
|
|
310
|
+
debugLog('OpenAI Responses API streaming failed:', errMsg);
|
|
311
|
+
onToken(`\n[Streaming error: ${errMsg}]\n`);
|
|
312
|
+
throw streamError;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// Non-streaming request
|
|
316
|
+
const createParams = {
|
|
317
|
+
model,
|
|
318
|
+
input: responsesInput,
|
|
319
|
+
tools: responsesTools.length > 0 ? responsesTools : undefined,
|
|
320
|
+
max_output_tokens: dynamicMaxTokens,
|
|
321
|
+
};
|
|
322
|
+
const response = await client.responses.create(createParams);
|
|
323
|
+
// Extract content and tool calls from response
|
|
324
|
+
let content = response.output_text || '';
|
|
325
|
+
const toolCalls = [];
|
|
326
|
+
// Process output items for tool calls
|
|
327
|
+
for (const item of response.output) {
|
|
328
|
+
if (isFunctionCallOutput(item)) {
|
|
329
|
+
toolCalls.push({
|
|
330
|
+
id: item.call_id || item.id || `call_${Date.now()}`,
|
|
331
|
+
name: item.name,
|
|
332
|
+
arguments: typeof item.arguments === 'string'
|
|
333
|
+
? JSON.parse(item.arguments)
|
|
334
|
+
: item.arguments,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// Determine finish reason
|
|
339
|
+
let finishReason = 'stop';
|
|
340
|
+
if (toolCalls.length > 0) {
|
|
341
|
+
finishReason = 'tool_use';
|
|
342
|
+
}
|
|
343
|
+
else if (response.status === 'incomplete') {
|
|
344
|
+
finishReason = 'length';
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
content,
|
|
348
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
349
|
+
finishReason,
|
|
350
|
+
usage: response.usage ? {
|
|
351
|
+
inputTokens: response.usage.input_tokens,
|
|
352
|
+
outputTokens: response.usage.output_tokens,
|
|
353
|
+
} : undefined,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Chat with OpenAI
|
|
358
|
+
*/
|
|
359
|
+
export async function chatOpenAI(messages, tools, model, onToken) {
|
|
360
|
+
// Route to Responses API for models that require it (o3, o4-mini, etc.)
|
|
361
|
+
if (requiresResponsesAPI(model)) {
|
|
362
|
+
return chatOpenAIResponses(messages, tools, model, onToken);
|
|
363
|
+
}
|
|
364
|
+
const apiKey = config.getApiKey('openai');
|
|
365
|
+
if (!apiKey)
|
|
366
|
+
throw new Error('OpenAI API key not configured');
|
|
367
|
+
const client = new OpenAI({ apiKey });
|
|
368
|
+
const openaiMessages = toOpenAIMessages(messages);
|
|
369
|
+
const openaiTools = toOpenAITools(tools);
|
|
370
|
+
// Calculate dynamic max_tokens based on available context space
|
|
371
|
+
const dynamicMaxTokens = calculateMaxTokens('openai', model, messages, tools);
|
|
372
|
+
debugLog(`OpenAI request: model=${model}, max_tokens=${dynamicMaxTokens}`);
|
|
373
|
+
// Use streaming if callback provided
|
|
374
|
+
// Stream text content while collecting tool calls
|
|
375
|
+
if (onToken) {
|
|
376
|
+
let content = '';
|
|
377
|
+
let toolCallDeltas = {};
|
|
378
|
+
let finishReason = 'stop';
|
|
379
|
+
try {
|
|
380
|
+
const stream = await client.chat.completions.create({
|
|
381
|
+
model,
|
|
382
|
+
messages: openaiMessages,
|
|
383
|
+
tools: openaiTools.length > 0 ? openaiTools : undefined,
|
|
384
|
+
max_tokens: dynamicMaxTokens,
|
|
385
|
+
stream: true,
|
|
386
|
+
});
|
|
387
|
+
for await (const chunk of stream) {
|
|
388
|
+
const choice = chunk.choices[0];
|
|
389
|
+
if (!choice)
|
|
390
|
+
continue;
|
|
391
|
+
// Handle text content
|
|
392
|
+
const textDelta = choice.delta?.content;
|
|
393
|
+
if (textDelta) {
|
|
394
|
+
content += textDelta;
|
|
395
|
+
onToken(textDelta);
|
|
396
|
+
}
|
|
397
|
+
// Handle tool calls (collect deltas)
|
|
398
|
+
const toolCallDelta = choice.delta?.tool_calls;
|
|
399
|
+
if (toolCallDelta) {
|
|
400
|
+
for (const tc of toolCallDelta) {
|
|
401
|
+
if (!toolCallDeltas[tc.index]) {
|
|
402
|
+
toolCallDeltas[tc.index] = { id: '', name: '', arguments: '' };
|
|
403
|
+
}
|
|
404
|
+
if (tc.id)
|
|
405
|
+
toolCallDeltas[tc.index].id = tc.id;
|
|
406
|
+
if (tc.function?.name)
|
|
407
|
+
toolCallDeltas[tc.index].name = tc.function.name;
|
|
408
|
+
if (tc.function?.arguments)
|
|
409
|
+
toolCallDeltas[tc.index].arguments += tc.function.arguments;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// Track finish reason
|
|
413
|
+
if (choice.finish_reason === 'tool_calls') {
|
|
414
|
+
finishReason = 'tool_use';
|
|
415
|
+
}
|
|
416
|
+
else if (choice.finish_reason === 'length') {
|
|
417
|
+
finishReason = 'length';
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
// Convert tool call deltas to tool calls
|
|
421
|
+
const toolCalls = Object.values(toolCallDeltas)
|
|
422
|
+
.filter(tc => tc.id && tc.name)
|
|
423
|
+
.map(tc => {
|
|
424
|
+
let parsedArgs = {};
|
|
425
|
+
try {
|
|
426
|
+
parsedArgs = JSON.parse(tc.arguments || '{}');
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
debugLog(`Failed to parse streaming tool call arguments for ${tc.name}: ${tc.arguments?.substring(0, 200)}`);
|
|
430
|
+
}
|
|
431
|
+
return {
|
|
432
|
+
id: tc.id,
|
|
433
|
+
name: tc.name,
|
|
434
|
+
arguments: parsedArgs,
|
|
435
|
+
};
|
|
436
|
+
});
|
|
437
|
+
if (toolCalls.length > 0) {
|
|
438
|
+
finishReason = 'tool_use';
|
|
439
|
+
}
|
|
440
|
+
return {
|
|
441
|
+
content,
|
|
442
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
443
|
+
finishReason,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
catch (streamError) {
|
|
447
|
+
// Surface the streaming failure and re-throw so withRetry handles it
|
|
448
|
+
const errMsg = streamError instanceof Error ? streamError.message : String(streamError);
|
|
449
|
+
debugLog('OpenAI streaming failed:', errMsg);
|
|
450
|
+
onToken(`\n[Streaming error: ${errMsg}]\n`);
|
|
451
|
+
throw streamError;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// Non-streaming request
|
|
455
|
+
const response = await client.chat.completions.create({
|
|
456
|
+
model,
|
|
457
|
+
messages: openaiMessages,
|
|
458
|
+
tools: openaiTools.length > 0 ? openaiTools : undefined,
|
|
459
|
+
max_tokens: dynamicMaxTokens,
|
|
460
|
+
});
|
|
461
|
+
if (!response.choices || response.choices.length === 0) {
|
|
462
|
+
throw new Error('Empty response from OpenAI API');
|
|
463
|
+
}
|
|
464
|
+
const choice = response.choices[0];
|
|
465
|
+
const message = choice.message;
|
|
466
|
+
const toolCalls = parseOpenAIToolCalls(message.tool_calls);
|
|
467
|
+
// Map OpenAI finish reasons
|
|
468
|
+
let finishReason = 'stop';
|
|
469
|
+
if (choice.finish_reason === 'tool_calls') {
|
|
470
|
+
finishReason = 'tool_use';
|
|
471
|
+
}
|
|
472
|
+
else if (choice.finish_reason === 'length') {
|
|
473
|
+
finishReason = 'length';
|
|
474
|
+
}
|
|
475
|
+
return {
|
|
476
|
+
content: message.content || '',
|
|
477
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
478
|
+
finishReason,
|
|
479
|
+
usage: response.usage ? {
|
|
480
|
+
inputTokens: response.usage.prompt_tokens,
|
|
481
|
+
outputTokens: response.usage.completion_tokens,
|
|
482
|
+
} : undefined,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Shared Types & Utilities
|
|
3
|
+
*
|
|
4
|
+
* Constants, token estimation, context health, validation, and shared helpers.
|
|
5
|
+
*/
|
|
6
|
+
import type { Message, Tool, LLMResponse, LLMProvider } from '../types.js';
|
|
7
|
+
export declare const MAX_TOKENS = 8192;
|
|
8
|
+
export declare const MIN_OUTPUT_TOKENS = 1024;
|
|
9
|
+
export declare const CONTEXT_BUFFER_PERCENT = 0.08;
|
|
10
|
+
export declare const CONTEXT_BUFFER_MIN = 1024;
|
|
11
|
+
/** Maximum allowed content length (1MB) to prevent memory issues */
|
|
12
|
+
export declare const MAX_CONTENT_LENGTH: number;
|
|
13
|
+
export declare function debugLog(message: string, ...args: unknown[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* Streaming callback type
|
|
16
|
+
*/
|
|
17
|
+
export type StreamCallback = (token: string) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Retry callback type for UI updates
|
|
20
|
+
*/
|
|
21
|
+
export type RetryCallback = (attempt: number, error: Error, delayMs: number) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Extract text from MessageContent
|
|
24
|
+
*/
|
|
25
|
+
export declare function getTextContent(content: Message['content']): string;
|
|
26
|
+
/**
|
|
27
|
+
* Estimate tokens from messages (conservative: ~3 chars per token)
|
|
28
|
+
* Uses conservative estimation to avoid context overflow
|
|
29
|
+
*/
|
|
30
|
+
export declare function estimateInputTokens(messages: Message[], tools: Tool[]): number;
|
|
31
|
+
/**
|
|
32
|
+
* Calculate dynamic max_tokens based on available context space
|
|
33
|
+
*/
|
|
34
|
+
export declare function calculateMaxTokens(provider: LLMProvider, model: string, messages: Message[], tools: Tool[]): number;
|
|
35
|
+
/**
|
|
36
|
+
* Check if context needs summarization based on actual token usage
|
|
37
|
+
* Call this with the input_tokens from the last API response
|
|
38
|
+
*/
|
|
39
|
+
export declare function needsSummarization(provider: LLMProvider, model: string, actualInputTokens: number): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Get context health info
|
|
42
|
+
*/
|
|
43
|
+
export declare function getContextHealth(provider: LLMProvider, model: string, actualInputTokens: number): {
|
|
44
|
+
limit: number;
|
|
45
|
+
used: number;
|
|
46
|
+
percent: number;
|
|
47
|
+
needsSummarization: boolean;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Estimate context usage before making a request (for pre-request summarization)
|
|
51
|
+
* Uses conservative estimation since we don't have actual token counts yet
|
|
52
|
+
*/
|
|
53
|
+
export declare function estimateContextUsage(provider: LLMProvider, model: string, messages: Message[], tools: Tool[]): {
|
|
54
|
+
estimated: number;
|
|
55
|
+
limit: number;
|
|
56
|
+
percent: number;
|
|
57
|
+
needsSummarization: boolean;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Validate and sanitize LLM response
|
|
61
|
+
*/
|
|
62
|
+
export declare function validateLLMResponse(response: LLMResponse): LLMResponse;
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAGxF,eAAO,MAAM,UAAU,OAAO,CAAC;AAC/B,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,QAAc,CAAC;AAI9C,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAErF;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAQlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAiC9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,GACZ,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAIT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,GACxB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,CAS/E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,GACZ;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,CAUpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,CA0CtE"}
|