@bolt-foundry/gambit 0.8.3 → 0.8.5-rc.11
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/CHANGELOG.md +95 -2
- package/README.md +95 -23
- package/esm/_dnt.polyfills.d.ts +17 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +123 -0
- package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts +322 -0
- package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.js +105 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts +14 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.js +34 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts +13 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.js +18 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts +10 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.js +17 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts +12 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.js +25 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts +9 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.js +13 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/copy.d.ts +117 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/copy.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/copy.js +313 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts +48 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.js +87 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts +49 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.js +102 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts +47 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.js +90 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts +49 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.js +61 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts +70 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.js +156 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/eol.d.ts +52 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/eol.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/eol.js +67 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/exists.d.ts +218 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/exists.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/exists.js +271 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts +267 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.js +442 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/mod.d.ts +29 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/mod.js +29 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/move.d.ts +86 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/move.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/move.js +142 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/walk.d.ts +777 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/walk.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/walk.js +846 -0
- package/esm/deps/jsr.io/@std/json/1.0.3/types.d.ts +7 -0
- package/esm/deps/jsr.io/@std/json/1.0.3/types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/json/1.0.3/types.js +3 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.js +21 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.js +320 -0
- package/esm/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +753 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/mod.js +110 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/parse.js +25 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.js +283 -0
- package/esm/gambit/simulator-ui/dist/bundle.js +13788 -5157
- package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
- package/esm/mod.d.ts +13 -3
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +8 -2
- package/esm/src/cli_utils.d.ts +1 -0
- package/esm/src/cli_utils.d.ts.map +1 -1
- package/esm/src/cli_utils.js +13 -1
- package/esm/src/default_runtime.d.ts +46 -0
- package/esm/src/default_runtime.d.ts.map +1 -0
- package/esm/src/default_runtime.js +415 -0
- package/esm/src/durable_streams.js +26 -1
- package/esm/src/model_matchers.d.ts +10 -0
- package/esm/src/model_matchers.d.ts.map +1 -0
- package/esm/src/model_matchers.js +26 -0
- package/esm/src/openai_compat.d.ts +12 -1
- package/esm/src/openai_compat.d.ts.map +1 -1
- package/esm/src/openai_compat.js +53 -1
- package/esm/src/project_config.d.ts +47 -0
- package/esm/src/project_config.d.ts.map +1 -0
- package/esm/src/project_config.js +134 -0
- package/esm/src/providers/codex.d.ts +37 -0
- package/esm/src/providers/codex.d.ts.map +1 -0
- package/esm/src/providers/codex.js +809 -0
- package/esm/src/providers/google.d.ts +3 -1
- package/esm/src/providers/google.d.ts.map +1 -1
- package/esm/src/providers/google.js +82 -6
- package/esm/src/providers/ollama.d.ts +3 -1
- package/esm/src/providers/ollama.d.ts.map +1 -1
- package/esm/src/providers/ollama.js +295 -15
- package/esm/src/providers/openrouter.d.ts +6 -2
- package/esm/src/providers/openrouter.d.ts.map +1 -1
- package/esm/src/providers/openrouter.js +334 -23
- package/esm/src/providers/router.d.ts +19 -0
- package/esm/src/providers/router.d.ts.map +1 -0
- package/esm/src/providers/router.js +93 -0
- package/esm/src/server.d.ts +9 -0
- package/esm/src/server.d.ts.map +1 -1
- package/esm/src/server.js +3361 -670
- package/esm/src/server_feedback_grading_routes.d.ts +32 -0
- package/esm/src/server_feedback_grading_routes.d.ts.map +1 -0
- package/esm/src/server_feedback_grading_routes.js +305 -0
- package/esm/src/server_helpers.d.ts +4 -0
- package/esm/src/server_helpers.d.ts.map +1 -0
- package/esm/src/server_helpers.js +46 -0
- package/esm/src/server_session_store.d.ts +87 -0
- package/esm/src/server_session_store.d.ts.map +1 -0
- package/esm/src/server_session_store.js +876 -0
- package/esm/src/server_types.d.ts +111 -0
- package/esm/src/server_types.d.ts.map +1 -0
- package/esm/src/server_types.js +1 -0
- package/esm/src/server_ui_routes.d.ts +33 -0
- package/esm/src/server_ui_routes.d.ts.map +1 -0
- package/esm/src/server_ui_routes.js +139 -0
- package/esm/src/session_artifacts.d.ts +22 -0
- package/esm/src/session_artifacts.d.ts.map +1 -0
- package/esm/src/session_artifacts.js +243 -0
- package/esm/src/trace.d.ts.map +1 -1
- package/esm/src/trace.js +6 -3
- package/esm/src/workspace.d.ts +19 -0
- package/esm/src/workspace.d.ts.map +1 -0
- package/esm/src/workspace.js +162 -0
- package/esm/src/workspace_contract.d.ts +78 -0
- package/esm/src/workspace_contract.d.ts.map +1 -0
- package/esm/src/workspace_contract.js +77 -0
- package/package.json +2 -2
- package/script/_dnt.polyfills.d.ts +17 -0
- package/script/_dnt.polyfills.d.ts.map +1 -1
- package/script/_dnt.polyfills.js +123 -0
- package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts +322 -0
- package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.js +108 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts +14 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.js +71 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts +13 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.js +21 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts +10 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.js +20 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts +12 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.js +28 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts +9 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.js +16 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts +117 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/copy.js +350 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts +48 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.js +124 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts +49 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.js +139 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts +47 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.js +127 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts +49 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.js +98 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts +70 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.js +193 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts +52 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/eol.js +105 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts +218 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/exists.js +308 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts +267 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.js +479 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts +29 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/mod.js +45 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts +86 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/move.js +179 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts +777 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/walk.js +883 -0
- package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts +7 -0
- package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/json/1.0.3/types.js +4 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.js +37 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.js +323 -0
- package/script/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +781 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/mod.js +126 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/parse.js +28 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/stringify.js +286 -0
- package/script/gambit/simulator-ui/dist/bundle.js +13788 -5157
- package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
- package/script/mod.d.ts +13 -3
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +14 -5
- package/script/src/cli_utils.d.ts +1 -0
- package/script/src/cli_utils.d.ts.map +1 -1
- package/script/src/cli_utils.js +14 -1
- package/script/src/default_runtime.d.ts +46 -0
- package/script/src/default_runtime.d.ts.map +1 -0
- package/script/src/default_runtime.js +452 -0
- package/script/src/durable_streams.js +26 -1
- package/script/src/model_matchers.d.ts +10 -0
- package/script/src/model_matchers.d.ts.map +1 -0
- package/script/src/model_matchers.js +29 -0
- package/script/src/openai_compat.d.ts +12 -1
- package/script/src/openai_compat.d.ts.map +1 -1
- package/script/src/openai_compat.js +85 -0
- package/script/src/project_config.d.ts +47 -0
- package/script/src/project_config.d.ts.map +1 -0
- package/script/src/project_config.js +173 -0
- package/script/src/providers/codex.d.ts +37 -0
- package/script/src/providers/codex.d.ts.map +1 -0
- package/script/src/providers/codex.js +849 -0
- package/script/src/providers/google.d.ts +3 -1
- package/script/src/providers/google.d.ts.map +1 -1
- package/script/src/providers/google.js +82 -6
- package/script/src/providers/ollama.d.ts +3 -1
- package/script/src/providers/ollama.d.ts.map +1 -1
- package/script/src/providers/ollama.js +295 -15
- package/script/src/providers/openrouter.d.ts +6 -2
- package/script/src/providers/openrouter.d.ts.map +1 -1
- package/script/src/providers/openrouter.js +334 -23
- package/script/src/providers/router.d.ts +19 -0
- package/script/src/providers/router.d.ts.map +1 -0
- package/script/src/providers/router.js +96 -0
- package/script/src/server.d.ts +9 -0
- package/script/src/server.d.ts.map +1 -1
- package/script/src/server.js +3368 -677
- package/script/src/server_feedback_grading_routes.d.ts +32 -0
- package/script/src/server_feedback_grading_routes.d.ts.map +1 -0
- package/script/src/server_feedback_grading_routes.js +343 -0
- package/script/src/server_helpers.d.ts +4 -0
- package/script/src/server_helpers.d.ts.map +1 -0
- package/script/src/server_helpers.js +84 -0
- package/script/src/server_session_store.d.ts +87 -0
- package/script/src/server_session_store.d.ts.map +1 -0
- package/script/src/server_session_store.js +913 -0
- package/script/src/server_types.d.ts +111 -0
- package/script/src/server_types.d.ts.map +1 -0
- package/script/src/server_types.js +2 -0
- package/script/src/server_ui_routes.d.ts +33 -0
- package/script/src/server_ui_routes.d.ts.map +1 -0
- package/script/src/server_ui_routes.js +176 -0
- package/script/src/session_artifacts.d.ts +22 -0
- package/script/src/session_artifacts.d.ts.map +1 -0
- package/script/src/session_artifacts.js +279 -0
- package/script/src/trace.d.ts.map +1 -1
- package/script/src/trace.js +6 -3
- package/script/src/workspace.d.ts +19 -0
- package/script/src/workspace.d.ts.map +1 -0
- package/script/src/workspace.js +199 -0
- package/script/src/workspace_contract.d.ts +78 -0
- package/script/src/workspace_contract.d.ts.map +1 -0
- package/script/src/workspace_contract.js +85 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/src/providers/openrouter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,aAAa,EAOd,MAAM,2BAA2B,CAAC;AAOnC,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/src/providers/openrouter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,aAAa,EAOd,MAAM,2BAA2B,CAAC;AAOnC,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;gBAAE,MAAM,CAAC,EAAE,WAAW,CAAA;aAAE,KAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;SACvB,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,KAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB,CAAC;CACH,CAAC;AA6zBF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GAAG,aAAa,CAwOhB"}
|
|
@@ -77,6 +77,30 @@ function safeJson(input) {
|
|
|
77
77
|
}
|
|
78
78
|
return {};
|
|
79
79
|
}
|
|
80
|
+
function toJsonValue(value) {
|
|
81
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
if (typeof value === "number") {
|
|
85
|
+
return Number.isFinite(value) ? value : String(value);
|
|
86
|
+
}
|
|
87
|
+
if (Array.isArray(value)) {
|
|
88
|
+
return value.map((entry) => toJsonValue(entry));
|
|
89
|
+
}
|
|
90
|
+
if (value && typeof value === "object") {
|
|
91
|
+
const out = {};
|
|
92
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
93
|
+
if (entry === undefined)
|
|
94
|
+
continue;
|
|
95
|
+
out[key] = toJsonValue(entry);
|
|
96
|
+
}
|
|
97
|
+
return out;
|
|
98
|
+
}
|
|
99
|
+
return String(value);
|
|
100
|
+
}
|
|
101
|
+
function isExtensionResponseItem(item) {
|
|
102
|
+
return item.type.includes(":");
|
|
103
|
+
}
|
|
80
104
|
function isAsyncIterable(value) {
|
|
81
105
|
return Boolean(value &&
|
|
82
106
|
typeof value === "object" &&
|
|
@@ -85,11 +109,16 @@ function isAsyncIterable(value) {
|
|
|
85
109
|
function mapUsage(usage) {
|
|
86
110
|
if (!usage)
|
|
87
111
|
return undefined;
|
|
88
|
-
|
|
112
|
+
const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? undefined;
|
|
113
|
+
const out = {
|
|
89
114
|
promptTokens: usage.input_tokens ?? 0,
|
|
90
115
|
completionTokens: usage.output_tokens ?? 0,
|
|
91
116
|
totalTokens: usage.total_tokens ?? 0,
|
|
92
117
|
};
|
|
118
|
+
if (typeof reasoningTokens === "number") {
|
|
119
|
+
out.reasoningTokens = reasoningTokens;
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
93
122
|
}
|
|
94
123
|
function mapStatus(status) {
|
|
95
124
|
if (!status)
|
|
@@ -100,6 +129,25 @@ function mapStatus(status) {
|
|
|
100
129
|
return "in_progress";
|
|
101
130
|
return "failed";
|
|
102
131
|
}
|
|
132
|
+
function mapReasoning(reasoning) {
|
|
133
|
+
if (!reasoning)
|
|
134
|
+
return undefined;
|
|
135
|
+
const out = {};
|
|
136
|
+
if (reasoning.effort !== undefined)
|
|
137
|
+
out.effort = reasoning.effort;
|
|
138
|
+
if (reasoning.summary !== undefined)
|
|
139
|
+
out.summary = reasoning.summary;
|
|
140
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
141
|
+
}
|
|
142
|
+
function stripUndefined(input) {
|
|
143
|
+
const out = { ...input };
|
|
144
|
+
for (const [key, value] of Object.entries(out)) {
|
|
145
|
+
if (value === undefined) {
|
|
146
|
+
delete out[key];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return out;
|
|
150
|
+
}
|
|
103
151
|
function mapError(error) {
|
|
104
152
|
if (!error)
|
|
105
153
|
return undefined;
|
|
@@ -177,23 +225,65 @@ function appendSyntheticTools(tools, input) {
|
|
|
177
225
|
});
|
|
178
226
|
}
|
|
179
227
|
}
|
|
228
|
+
function mapText(text) {
|
|
229
|
+
if (!text)
|
|
230
|
+
return undefined;
|
|
231
|
+
const format = text.format;
|
|
232
|
+
if (!format || typeof format !== "object" || format.type !== "json_schema") {
|
|
233
|
+
return text;
|
|
234
|
+
}
|
|
235
|
+
if (format.strict === false)
|
|
236
|
+
return text;
|
|
237
|
+
return {
|
|
238
|
+
...text,
|
|
239
|
+
format: {
|
|
240
|
+
...format,
|
|
241
|
+
strict: false,
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
180
245
|
function mapToolChoice(toolChoice) {
|
|
181
246
|
if (!toolChoice)
|
|
182
247
|
return undefined;
|
|
183
|
-
if (toolChoice === "
|
|
248
|
+
if (toolChoice === "none" || toolChoice === "auto" ||
|
|
249
|
+
toolChoice === "required") {
|
|
184
250
|
return toolChoice;
|
|
251
|
+
}
|
|
252
|
+
if (toolChoice.type === "allowed_tools") {
|
|
253
|
+
return {
|
|
254
|
+
type: "allowed_tools",
|
|
255
|
+
tools: toolChoice.tools,
|
|
256
|
+
mode: toolChoice.mode ?? "auto",
|
|
257
|
+
};
|
|
258
|
+
}
|
|
185
259
|
return { type: "function", name: toolChoice.function.name };
|
|
186
260
|
}
|
|
261
|
+
function mapResponseContentPart(part) {
|
|
262
|
+
if (!part || typeof part !== "object")
|
|
263
|
+
return null;
|
|
264
|
+
if (typeof part.text !== "string")
|
|
265
|
+
return null;
|
|
266
|
+
if (part.type === "output_text") {
|
|
267
|
+
return { type: "output_text", text: part.text };
|
|
268
|
+
}
|
|
269
|
+
if (part.type === "summary_text") {
|
|
270
|
+
return { type: "summary_text", text: part.text };
|
|
271
|
+
}
|
|
272
|
+
if (part.type === "reasoning_text") {
|
|
273
|
+
return { type: "reasoning_text", text: part.text };
|
|
274
|
+
}
|
|
275
|
+
if (part.type === "input_text") {
|
|
276
|
+
return { type: "input_text", text: part.text };
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
187
280
|
function mapOpenAIOutputItem(item) {
|
|
188
281
|
const itemType = item.type;
|
|
189
282
|
if (itemType === "message") {
|
|
190
283
|
const message = item;
|
|
191
|
-
const content = []
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
content.push({ type: "output_text", text: part.text });
|
|
195
|
-
}
|
|
196
|
-
}
|
|
284
|
+
const content = (message.content ?? [])
|
|
285
|
+
.map((part) => mapResponseContentPart(part))
|
|
286
|
+
.filter((part) => Boolean(part));
|
|
197
287
|
if (content.length === 0)
|
|
198
288
|
return null;
|
|
199
289
|
return {
|
|
@@ -213,6 +303,48 @@ function mapOpenAIOutputItem(item) {
|
|
|
213
303
|
id: call.id,
|
|
214
304
|
};
|
|
215
305
|
}
|
|
306
|
+
if (itemType === "reasoning") {
|
|
307
|
+
const reasoning = item;
|
|
308
|
+
const content = (reasoning.content ?? [])
|
|
309
|
+
.map((part) => mapResponseContentPart(part))
|
|
310
|
+
.filter((part) => Boolean(part));
|
|
311
|
+
const summary = (reasoning.summary ?? [])
|
|
312
|
+
.map((part) => mapResponseContentPart(part))
|
|
313
|
+
.filter((part) => Boolean(part));
|
|
314
|
+
return {
|
|
315
|
+
type: "reasoning",
|
|
316
|
+
id: reasoning.id,
|
|
317
|
+
content: content.length > 0 ? content : undefined,
|
|
318
|
+
summary,
|
|
319
|
+
encrypted_content: reasoning.encrypted_content,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
if (typeof itemType === "string" && itemType.includes(":")) {
|
|
323
|
+
const raw = item;
|
|
324
|
+
const payloadEntries = Object.entries(raw).filter(([key, value]) => {
|
|
325
|
+
if (key === "type" || key === "id")
|
|
326
|
+
return false;
|
|
327
|
+
if (value === undefined)
|
|
328
|
+
return false;
|
|
329
|
+
return true;
|
|
330
|
+
});
|
|
331
|
+
let data;
|
|
332
|
+
if (payloadEntries.length === 1 && payloadEntries[0][0] === "data") {
|
|
333
|
+
data = toJsonValue(payloadEntries[0][1]);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
const payloadObject = {};
|
|
337
|
+
for (const [key, value] of payloadEntries) {
|
|
338
|
+
payloadObject[key] = toJsonValue(value);
|
|
339
|
+
}
|
|
340
|
+
data = payloadObject;
|
|
341
|
+
}
|
|
342
|
+
return {
|
|
343
|
+
type: itemType,
|
|
344
|
+
id: typeof raw.id === "string" ? raw.id : undefined,
|
|
345
|
+
data,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
216
348
|
return null;
|
|
217
349
|
}
|
|
218
350
|
function normalizeOpenAIResponse(response) {
|
|
@@ -223,11 +355,23 @@ function normalizeOpenAIResponse(response) {
|
|
|
223
355
|
id: response.id,
|
|
224
356
|
object: "response",
|
|
225
357
|
model: response.model,
|
|
358
|
+
created_at: response.created_at,
|
|
226
359
|
created: response.created_at,
|
|
360
|
+
completed_at: response.completed_at ??
|
|
361
|
+
null,
|
|
362
|
+
previous_response_id: response.previous_response_id ?? null,
|
|
363
|
+
instructions: response.instructions ?? null,
|
|
364
|
+
reasoning: response
|
|
365
|
+
.reasoning ?? null,
|
|
227
366
|
status: mapStatus(response.status ?? undefined),
|
|
228
367
|
output: outputItems,
|
|
229
368
|
usage: mapUsage(response.usage),
|
|
230
|
-
error: mapError(response.error),
|
|
369
|
+
error: mapError(response.error) ?? null,
|
|
370
|
+
metadata: response.metadata,
|
|
371
|
+
max_output_tokens: response.max_output_tokens ?? null,
|
|
372
|
+
max_tool_calls: response.max_tool_calls ?? null,
|
|
373
|
+
parallel_tool_calls: response.parallel_tool_calls,
|
|
374
|
+
store: response.store,
|
|
231
375
|
};
|
|
232
376
|
}
|
|
233
377
|
function toOpenAIInputItems(items) {
|
|
@@ -249,6 +393,18 @@ function toOpenAIInputItems(items) {
|
|
|
249
393
|
text: part.text,
|
|
250
394
|
};
|
|
251
395
|
}
|
|
396
|
+
if (part.type === "summary_text") {
|
|
397
|
+
return {
|
|
398
|
+
type: "summary_text",
|
|
399
|
+
text: part.text,
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
if (part.type === "reasoning_text") {
|
|
403
|
+
return {
|
|
404
|
+
type: "reasoning_text",
|
|
405
|
+
text: part.text,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
252
408
|
return null;
|
|
253
409
|
})
|
|
254
410
|
.filter((part) => Boolean(part));
|
|
@@ -279,6 +435,29 @@ function toOpenAIInputItems(items) {
|
|
|
279
435
|
output: item.output,
|
|
280
436
|
id: item.id,
|
|
281
437
|
});
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
if (item.type === "reasoning") {
|
|
441
|
+
mapped.push({
|
|
442
|
+
type: "reasoning",
|
|
443
|
+
id: item.id,
|
|
444
|
+
content: (item.content ?? []).map((part) => ({
|
|
445
|
+
type: part.type,
|
|
446
|
+
text: part.text,
|
|
447
|
+
})),
|
|
448
|
+
summary: item.summary.map((part) => ({
|
|
449
|
+
type: part.type,
|
|
450
|
+
text: part.text,
|
|
451
|
+
})),
|
|
452
|
+
encrypted_content: item.encrypted_content ?? null,
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
if (isExtensionResponseItem(item)) {
|
|
456
|
+
mapped.push({
|
|
457
|
+
type: item.type,
|
|
458
|
+
id: item.id,
|
|
459
|
+
data: item.data,
|
|
460
|
+
});
|
|
282
461
|
}
|
|
283
462
|
}
|
|
284
463
|
return mapped;
|
|
@@ -363,13 +542,31 @@ function responseItemsToChat(items) {
|
|
|
363
542
|
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
364
543
|
};
|
|
365
544
|
}
|
|
366
|
-
async function createResponse(client, request, onStreamEvent) {
|
|
545
|
+
async function createResponse(client, request, signal, onStreamEvent) {
|
|
367
546
|
const baseParams = {
|
|
368
547
|
model: normalizeOpenRouterModel(request.model),
|
|
369
548
|
input: toOpenAIInputItems(request.input),
|
|
370
549
|
instructions: request.instructions,
|
|
371
550
|
tools: undefined,
|
|
372
551
|
tool_choice: mapToolChoice(request.tool_choice),
|
|
552
|
+
previous_response_id: request.previous_response_id,
|
|
553
|
+
reasoning: mapReasoning(request.reasoning),
|
|
554
|
+
parallel_tool_calls: request.parallel_tool_calls,
|
|
555
|
+
max_tool_calls: request.max_tool_calls,
|
|
556
|
+
store: request.store,
|
|
557
|
+
include: request.include,
|
|
558
|
+
text: mapText(request.text),
|
|
559
|
+
stream_options: request.stream_options,
|
|
560
|
+
background: request.background,
|
|
561
|
+
truncation: request.truncation,
|
|
562
|
+
service_tier: request.service_tier,
|
|
563
|
+
top_logprobs: request.top_logprobs,
|
|
564
|
+
safety_identifier: request.safety_identifier,
|
|
565
|
+
prompt_cache_key: request.prompt_cache_key,
|
|
566
|
+
temperature: request.temperature,
|
|
567
|
+
top_p: request.top_p,
|
|
568
|
+
frequency_penalty: request.frequency_penalty,
|
|
569
|
+
presence_penalty: request.presence_penalty,
|
|
373
570
|
stream: request.stream,
|
|
374
571
|
max_output_tokens: request.max_output_tokens,
|
|
375
572
|
metadata: request.metadata,
|
|
@@ -379,11 +576,11 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
379
576
|
if (mappedTools.length > 0) {
|
|
380
577
|
baseParams.tools = mappedTools;
|
|
381
578
|
}
|
|
382
|
-
const params = { ...(request.params ?? {}), ...baseParams };
|
|
579
|
+
const params = { ...(request.params ?? {}), ...stripUndefined(baseParams) };
|
|
383
580
|
const debugResponses = dntShim.Deno.env.get("GAMBIT_DEBUG_RESPONSES") === "1";
|
|
384
581
|
let responseOrStream;
|
|
385
582
|
try {
|
|
386
|
-
responseOrStream = await client.responses.create(params);
|
|
583
|
+
responseOrStream = await client.responses.create(params, signal ? { signal } : undefined);
|
|
387
584
|
}
|
|
388
585
|
catch (err) {
|
|
389
586
|
if (debugResponses) {
|
|
@@ -407,7 +604,12 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
407
604
|
switch (event.type) {
|
|
408
605
|
case "response.created": {
|
|
409
606
|
const mapped = normalizeOpenAIResponse(event.response);
|
|
410
|
-
onStreamEvent?.({
|
|
607
|
+
onStreamEvent?.({
|
|
608
|
+
type: "response.created",
|
|
609
|
+
response: mapped,
|
|
610
|
+
sequence_number: event
|
|
611
|
+
.sequence_number,
|
|
612
|
+
});
|
|
411
613
|
break;
|
|
412
614
|
}
|
|
413
615
|
case "response.output_text.delta":
|
|
@@ -416,6 +618,10 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
416
618
|
output_index: event.output_index,
|
|
417
619
|
delta: event.delta,
|
|
418
620
|
item_id: event.item_id,
|
|
621
|
+
content_index: event.content_index,
|
|
622
|
+
sequence_number: event
|
|
623
|
+
.sequence_number,
|
|
624
|
+
logprobs: event.logprobs,
|
|
419
625
|
});
|
|
420
626
|
break;
|
|
421
627
|
case "response.output_text.done":
|
|
@@ -424,6 +630,9 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
424
630
|
output_index: event.output_index,
|
|
425
631
|
text: event.text,
|
|
426
632
|
item_id: event.item_id,
|
|
633
|
+
content_index: event.content_index,
|
|
634
|
+
sequence_number: event
|
|
635
|
+
.sequence_number,
|
|
427
636
|
});
|
|
428
637
|
break;
|
|
429
638
|
case "response.output_item.added": {
|
|
@@ -433,6 +642,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
433
642
|
type: "response.output_item.added",
|
|
434
643
|
output_index: event.output_index,
|
|
435
644
|
item,
|
|
645
|
+
sequence_number: event
|
|
646
|
+
.sequence_number,
|
|
436
647
|
});
|
|
437
648
|
}
|
|
438
649
|
break;
|
|
@@ -444,13 +655,102 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
444
655
|
type: "response.output_item.done",
|
|
445
656
|
output_index: event.output_index,
|
|
446
657
|
item,
|
|
658
|
+
sequence_number: event
|
|
659
|
+
.sequence_number,
|
|
447
660
|
});
|
|
448
661
|
}
|
|
449
662
|
break;
|
|
450
663
|
}
|
|
664
|
+
case "response.reasoning.delta":
|
|
665
|
+
if (typeof event.delta === "string") {
|
|
666
|
+
onStreamEvent?.({
|
|
667
|
+
type: "response.reasoning.delta",
|
|
668
|
+
output_index: event.output_index,
|
|
669
|
+
item_id: event.item_id,
|
|
670
|
+
content_index: event.content_index,
|
|
671
|
+
delta: event.delta,
|
|
672
|
+
sequence_number: event
|
|
673
|
+
.sequence_number,
|
|
674
|
+
obfuscation: event.obfuscation,
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
break;
|
|
678
|
+
case "response.reasoning.done":
|
|
679
|
+
onStreamEvent?.({
|
|
680
|
+
type: "response.reasoning.done",
|
|
681
|
+
output_index: event.output_index,
|
|
682
|
+
item_id: event.item_id,
|
|
683
|
+
content_index: event.content_index,
|
|
684
|
+
text: event.text,
|
|
685
|
+
sequence_number: event
|
|
686
|
+
.sequence_number,
|
|
687
|
+
});
|
|
688
|
+
break;
|
|
689
|
+
case "response.reasoning_summary_text.delta":
|
|
690
|
+
if (typeof event.delta === "string") {
|
|
691
|
+
onStreamEvent?.({
|
|
692
|
+
type: "response.reasoning_summary_text.delta",
|
|
693
|
+
output_index: event.output_index,
|
|
694
|
+
item_id: event.item_id,
|
|
695
|
+
summary_index: event.summary_index,
|
|
696
|
+
delta: event.delta,
|
|
697
|
+
sequence_number: event
|
|
698
|
+
.sequence_number,
|
|
699
|
+
obfuscation: event.obfuscation,
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
break;
|
|
703
|
+
case "response.reasoning_summary_text.done":
|
|
704
|
+
onStreamEvent?.({
|
|
705
|
+
type: "response.reasoning_summary_text.done",
|
|
706
|
+
output_index: event.output_index,
|
|
707
|
+
item_id: event.item_id,
|
|
708
|
+
summary_index: event.summary_index,
|
|
709
|
+
text: event.text,
|
|
710
|
+
sequence_number: event
|
|
711
|
+
.sequence_number,
|
|
712
|
+
});
|
|
713
|
+
break;
|
|
714
|
+
case "response.reasoning_summary_part.added":
|
|
715
|
+
if (event.part && typeof event.part === "object" &&
|
|
716
|
+
"type" in event.part &&
|
|
717
|
+
"text" in event.part &&
|
|
718
|
+
typeof event.part.text === "string") {
|
|
719
|
+
onStreamEvent?.({
|
|
720
|
+
type: "response.reasoning_summary_part.added",
|
|
721
|
+
output_index: event.output_index,
|
|
722
|
+
item_id: event.item_id,
|
|
723
|
+
summary_index: event.summary_index,
|
|
724
|
+
part: event.part,
|
|
725
|
+
sequence_number: event
|
|
726
|
+
.sequence_number,
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
break;
|
|
730
|
+
case "response.reasoning_summary_part.done":
|
|
731
|
+
if (event.part && typeof event.part === "object" &&
|
|
732
|
+
"type" in event.part &&
|
|
733
|
+
"text" in event.part &&
|
|
734
|
+
typeof event.part.text === "string") {
|
|
735
|
+
onStreamEvent?.({
|
|
736
|
+
type: "response.reasoning_summary_part.done",
|
|
737
|
+
output_index: event.output_index,
|
|
738
|
+
item_id: event.item_id,
|
|
739
|
+
summary_index: event.summary_index,
|
|
740
|
+
part: event.part,
|
|
741
|
+
sequence_number: event
|
|
742
|
+
.sequence_number,
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
break;
|
|
451
746
|
case "response.completed": {
|
|
452
747
|
completed = normalizeOpenAIResponse(event.response);
|
|
453
|
-
onStreamEvent?.({
|
|
748
|
+
onStreamEvent?.({
|
|
749
|
+
type: "response.completed",
|
|
750
|
+
response: completed,
|
|
751
|
+
sequence_number: event
|
|
752
|
+
.sequence_number,
|
|
753
|
+
});
|
|
454
754
|
break;
|
|
455
755
|
}
|
|
456
756
|
case "response.failed": {
|
|
@@ -458,6 +758,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
458
758
|
onStreamEvent?.({
|
|
459
759
|
type: "response.failed",
|
|
460
760
|
error: error ?? {},
|
|
761
|
+
sequence_number: event
|
|
762
|
+
.sequence_number,
|
|
461
763
|
});
|
|
462
764
|
break;
|
|
463
765
|
}
|
|
@@ -484,7 +786,7 @@ function createOpenRouterProvider(opts) {
|
|
|
484
786
|
}));
|
|
485
787
|
return {
|
|
486
788
|
async responses(input) {
|
|
487
|
-
return await createResponse(client, input.request, input.onStreamEvent);
|
|
789
|
+
return await createResponse(client, input.request, input.signal, input.onStreamEvent);
|
|
488
790
|
},
|
|
489
791
|
async chat(input) {
|
|
490
792
|
const params = input.params ?? {};
|
|
@@ -495,7 +797,7 @@ function createOpenRouterProvider(opts) {
|
|
|
495
797
|
tools: input.tools,
|
|
496
798
|
stream: input.stream,
|
|
497
799
|
params,
|
|
498
|
-
}, (event) => {
|
|
800
|
+
}, input.signal, (event) => {
|
|
499
801
|
if (event.type === "response.output_text.delta") {
|
|
500
802
|
input.onStreamText?.(event.delta);
|
|
501
803
|
}
|
|
@@ -521,7 +823,7 @@ function createOpenRouterProvider(opts) {
|
|
|
521
823
|
tool_choice: "auto",
|
|
522
824
|
stream: true,
|
|
523
825
|
...params,
|
|
524
|
-
});
|
|
826
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
525
827
|
let finishReason = null;
|
|
526
828
|
const contentParts = [];
|
|
527
829
|
const toolCallMap = new Map();
|
|
@@ -606,7 +908,7 @@ function createOpenRouterProvider(opts) {
|
|
|
606
908
|
tool_choice: "auto",
|
|
607
909
|
stream: false,
|
|
608
910
|
...params,
|
|
609
|
-
});
|
|
911
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
610
912
|
const choice = response.choices[0];
|
|
611
913
|
const message = choice.message;
|
|
612
914
|
const normalizedMessage = normalizeMessage(message);
|
|
@@ -620,11 +922,20 @@ function createOpenRouterProvider(opts) {
|
|
|
620
922
|
finishReason: (choice.finish_reason ?? "stop"),
|
|
621
923
|
toolCalls,
|
|
622
924
|
usage: response.usage
|
|
623
|
-
? {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
925
|
+
? (() => {
|
|
926
|
+
const usage = {
|
|
927
|
+
promptTokens: response.usage.prompt_tokens ?? 0,
|
|
928
|
+
completionTokens: response.usage.completion_tokens ?? 0,
|
|
929
|
+
totalTokens: response.usage.total_tokens ?? 0,
|
|
930
|
+
};
|
|
931
|
+
const details = response.usage;
|
|
932
|
+
const value = details.completion_tokens_details
|
|
933
|
+
?.reasoning_tokens ??
|
|
934
|
+
details.output_tokens_details?.reasoning_tokens;
|
|
935
|
+
return typeof value === "number"
|
|
936
|
+
? { ...usage, reasoningTokens: value }
|
|
937
|
+
: usage;
|
|
938
|
+
})()
|
|
628
939
|
: undefined,
|
|
629
940
|
};
|
|
630
941
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ModelProvider } from "@bolt-foundry/gambit-core";
|
|
2
|
+
export type ProviderKey = "openrouter" | "ollama" | "google" | "codex-cli";
|
|
3
|
+
export type ProviderRouter = {
|
|
4
|
+
resolve: (input: {
|
|
5
|
+
model: string;
|
|
6
|
+
}) => {
|
|
7
|
+
providerKey: ProviderKey;
|
|
8
|
+
provider: ModelProvider;
|
|
9
|
+
model: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
type ProviderSet = Partial<Record<ProviderKey, ModelProvider | null>>;
|
|
13
|
+
export declare function createProviderRouter(opts: {
|
|
14
|
+
providers: ProviderSet;
|
|
15
|
+
defaultProvider?: ProviderKey | null;
|
|
16
|
+
fallbackToDefaultOnMissing?: Array<ProviderKey>;
|
|
17
|
+
}): ProviderRouter;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/src/providers/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK;QACrC,WAAW,EAAE,WAAW,CAAC;QACzB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,KAAK,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;AAsDtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,0BAA0B,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CACjD,GAAG,cAAc,CA8DjB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createProviderRouter = createProviderRouter;
|
|
4
|
+
const PROVIDER_PREFIXES = {
|
|
5
|
+
openrouter: "openrouter/",
|
|
6
|
+
ollama: "ollama/",
|
|
7
|
+
google: "google/",
|
|
8
|
+
"codex-cli": "codex-cli/",
|
|
9
|
+
};
|
|
10
|
+
function parsePrefixedModel(model) {
|
|
11
|
+
if (model.trim() === "codex-cli") {
|
|
12
|
+
return {
|
|
13
|
+
providerKey: "codex-cli",
|
|
14
|
+
strippedModel: "default",
|
|
15
|
+
rawModel: model,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
for (const [providerKey, prefix] of Object.entries(PROVIDER_PREFIXES)) {
|
|
19
|
+
if (model.startsWith(prefix)) {
|
|
20
|
+
return {
|
|
21
|
+
providerKey: providerKey,
|
|
22
|
+
strippedModel: model.slice(prefix.length),
|
|
23
|
+
rawModel: model,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (model === "codex" || model.startsWith("codex/")) {
|
|
28
|
+
return {
|
|
29
|
+
strippedModel: model,
|
|
30
|
+
rawModel: model,
|
|
31
|
+
legacyCodex: true,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return { strippedModel: model, rawModel: model };
|
|
35
|
+
}
|
|
36
|
+
function missingProviderMessage(providerKey) {
|
|
37
|
+
switch (providerKey) {
|
|
38
|
+
case "openrouter":
|
|
39
|
+
return "OPENROUTER_API_KEY is required for openrouter/ models.";
|
|
40
|
+
case "ollama":
|
|
41
|
+
return "Ollama provider is not configured. Set OLLAMA_BASE_URL or OLLAMA_API_KEY.";
|
|
42
|
+
case "google":
|
|
43
|
+
return "Google provider is not configured. Set GOOGLE_API_KEY or GEMINI_API_KEY.";
|
|
44
|
+
case "codex-cli":
|
|
45
|
+
return "Codex CLI provider is not configured.";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function createProviderRouter(opts) {
|
|
49
|
+
const defaultProvider = opts.defaultProvider === null
|
|
50
|
+
? null
|
|
51
|
+
: (opts.defaultProvider ?? "openrouter");
|
|
52
|
+
const fallbackOnMissing = new Set(opts.fallbackToDefaultOnMissing ?? ["google"]);
|
|
53
|
+
return {
|
|
54
|
+
resolve({ model }) {
|
|
55
|
+
const { providerKey, strippedModel, rawModel, legacyCodex } = parsePrefixedModel(model);
|
|
56
|
+
if (legacyCodex) {
|
|
57
|
+
throw new Error('Legacy Codex model prefix "codex" is no longer supported. Use "codex-cli/default" or "codex-cli/<model>".');
|
|
58
|
+
}
|
|
59
|
+
if (providerKey) {
|
|
60
|
+
const provider = opts.providers[providerKey];
|
|
61
|
+
if (!provider) {
|
|
62
|
+
if (fallbackOnMissing.has(providerKey) &&
|
|
63
|
+
defaultProvider !== null &&
|
|
64
|
+
defaultProvider !== providerKey) {
|
|
65
|
+
const fallbackProvider = opts.providers[defaultProvider];
|
|
66
|
+
if (fallbackProvider) {
|
|
67
|
+
return {
|
|
68
|
+
providerKey: defaultProvider,
|
|
69
|
+
provider: fallbackProvider,
|
|
70
|
+
model: rawModel,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
throw new Error(missingProviderMessage(providerKey));
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
providerKey,
|
|
78
|
+
provider,
|
|
79
|
+
model: strippedModel,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (defaultProvider === null) {
|
|
83
|
+
throw new Error("No fallback provider configured. Use a provider prefix or set providers.fallback in gambit.toml.");
|
|
84
|
+
}
|
|
85
|
+
const provider = opts.providers[defaultProvider];
|
|
86
|
+
if (!provider) {
|
|
87
|
+
throw new Error("OPENROUTER_API_KEY is required when no provider prefix is specified.");
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
providerKey: defaultProvider,
|
|
91
|
+
provider,
|
|
92
|
+
model,
|
|
93
|
+
};
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
package/script/src/server.d.ts
CHANGED
|
@@ -14,10 +14,19 @@ export declare function startWebSocketSimulator(opts: {
|
|
|
14
14
|
verbose?: boolean;
|
|
15
15
|
signal?: AbortSignal;
|
|
16
16
|
sessionDir?: string;
|
|
17
|
+
workspace?: {
|
|
18
|
+
id: string;
|
|
19
|
+
rootDeckPath: string;
|
|
20
|
+
rootDir: string;
|
|
21
|
+
onboarding?: boolean;
|
|
22
|
+
scaffoldEnabled?: boolean;
|
|
23
|
+
scaffoldRoot?: string;
|
|
24
|
+
};
|
|
17
25
|
autoBundle?: boolean;
|
|
18
26
|
forceBundle?: boolean;
|
|
19
27
|
sourceMap?: boolean;
|
|
20
28
|
bundlePlatform?: "deno" | "browser";
|
|
21
29
|
responsesMode?: boolean;
|
|
30
|
+
workerSandbox?: boolean;
|
|
22
31
|
}): ReturnType<typeof dntShim.Deno.serve>;
|
|
23
32
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAmD5C,OAAO,KAAK,EAMV,aAAa,EAOd,MAAM,2BAA2B,CAAC;AAsiCnC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAsmKxC"}
|