@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"}
|
|
@@ -37,6 +37,30 @@ function safeJson(input) {
|
|
|
37
37
|
}
|
|
38
38
|
return {};
|
|
39
39
|
}
|
|
40
|
+
function toJsonValue(value) {
|
|
41
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === "number") {
|
|
45
|
+
return Number.isFinite(value) ? value : String(value);
|
|
46
|
+
}
|
|
47
|
+
if (Array.isArray(value)) {
|
|
48
|
+
return value.map((entry) => toJsonValue(entry));
|
|
49
|
+
}
|
|
50
|
+
if (value && typeof value === "object") {
|
|
51
|
+
const out = {};
|
|
52
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
53
|
+
if (entry === undefined)
|
|
54
|
+
continue;
|
|
55
|
+
out[key] = toJsonValue(entry);
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
return String(value);
|
|
60
|
+
}
|
|
61
|
+
function isExtensionResponseItem(item) {
|
|
62
|
+
return item.type.includes(":");
|
|
63
|
+
}
|
|
40
64
|
function isAsyncIterable(value) {
|
|
41
65
|
return Boolean(value &&
|
|
42
66
|
typeof value === "object" &&
|
|
@@ -45,11 +69,16 @@ function isAsyncIterable(value) {
|
|
|
45
69
|
function mapUsage(usage) {
|
|
46
70
|
if (!usage)
|
|
47
71
|
return undefined;
|
|
48
|
-
|
|
72
|
+
const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? undefined;
|
|
73
|
+
const out = {
|
|
49
74
|
promptTokens: usage.input_tokens ?? 0,
|
|
50
75
|
completionTokens: usage.output_tokens ?? 0,
|
|
51
76
|
totalTokens: usage.total_tokens ?? 0,
|
|
52
77
|
};
|
|
78
|
+
if (typeof reasoningTokens === "number") {
|
|
79
|
+
out.reasoningTokens = reasoningTokens;
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
53
82
|
}
|
|
54
83
|
function mapStatus(status) {
|
|
55
84
|
if (!status)
|
|
@@ -60,6 +89,25 @@ function mapStatus(status) {
|
|
|
60
89
|
return "in_progress";
|
|
61
90
|
return "failed";
|
|
62
91
|
}
|
|
92
|
+
function mapReasoning(reasoning) {
|
|
93
|
+
if (!reasoning)
|
|
94
|
+
return undefined;
|
|
95
|
+
const out = {};
|
|
96
|
+
if (reasoning.effort !== undefined)
|
|
97
|
+
out.effort = reasoning.effort;
|
|
98
|
+
if (reasoning.summary !== undefined)
|
|
99
|
+
out.summary = reasoning.summary;
|
|
100
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
101
|
+
}
|
|
102
|
+
function stripUndefined(input) {
|
|
103
|
+
const out = { ...input };
|
|
104
|
+
for (const [key, value] of Object.entries(out)) {
|
|
105
|
+
if (value === undefined) {
|
|
106
|
+
delete out[key];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
63
111
|
function mapError(error) {
|
|
64
112
|
if (!error)
|
|
65
113
|
return undefined;
|
|
@@ -137,23 +185,65 @@ function appendSyntheticTools(tools, input) {
|
|
|
137
185
|
});
|
|
138
186
|
}
|
|
139
187
|
}
|
|
188
|
+
function mapText(text) {
|
|
189
|
+
if (!text)
|
|
190
|
+
return undefined;
|
|
191
|
+
const format = text.format;
|
|
192
|
+
if (!format || typeof format !== "object" || format.type !== "json_schema") {
|
|
193
|
+
return text;
|
|
194
|
+
}
|
|
195
|
+
if (format.strict === false)
|
|
196
|
+
return text;
|
|
197
|
+
return {
|
|
198
|
+
...text,
|
|
199
|
+
format: {
|
|
200
|
+
...format,
|
|
201
|
+
strict: false,
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
140
205
|
function mapToolChoice(toolChoice) {
|
|
141
206
|
if (!toolChoice)
|
|
142
207
|
return undefined;
|
|
143
|
-
if (toolChoice === "
|
|
208
|
+
if (toolChoice === "none" || toolChoice === "auto" ||
|
|
209
|
+
toolChoice === "required") {
|
|
144
210
|
return toolChoice;
|
|
211
|
+
}
|
|
212
|
+
if (toolChoice.type === "allowed_tools") {
|
|
213
|
+
return {
|
|
214
|
+
type: "allowed_tools",
|
|
215
|
+
tools: toolChoice.tools,
|
|
216
|
+
mode: toolChoice.mode ?? "auto",
|
|
217
|
+
};
|
|
218
|
+
}
|
|
145
219
|
return { type: "function", name: toolChoice.function.name };
|
|
146
220
|
}
|
|
221
|
+
function mapResponseContentPart(part) {
|
|
222
|
+
if (!part || typeof part !== "object")
|
|
223
|
+
return null;
|
|
224
|
+
if (typeof part.text !== "string")
|
|
225
|
+
return null;
|
|
226
|
+
if (part.type === "output_text") {
|
|
227
|
+
return { type: "output_text", text: part.text };
|
|
228
|
+
}
|
|
229
|
+
if (part.type === "summary_text") {
|
|
230
|
+
return { type: "summary_text", text: part.text };
|
|
231
|
+
}
|
|
232
|
+
if (part.type === "reasoning_text") {
|
|
233
|
+
return { type: "reasoning_text", text: part.text };
|
|
234
|
+
}
|
|
235
|
+
if (part.type === "input_text") {
|
|
236
|
+
return { type: "input_text", text: part.text };
|
|
237
|
+
}
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
147
240
|
function mapOpenAIOutputItem(item) {
|
|
148
241
|
const itemType = item.type;
|
|
149
242
|
if (itemType === "message") {
|
|
150
243
|
const message = item;
|
|
151
|
-
const content = []
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
content.push({ type: "output_text", text: part.text });
|
|
155
|
-
}
|
|
156
|
-
}
|
|
244
|
+
const content = (message.content ?? [])
|
|
245
|
+
.map((part) => mapResponseContentPart(part))
|
|
246
|
+
.filter((part) => Boolean(part));
|
|
157
247
|
if (content.length === 0)
|
|
158
248
|
return null;
|
|
159
249
|
return {
|
|
@@ -173,6 +263,48 @@ function mapOpenAIOutputItem(item) {
|
|
|
173
263
|
id: call.id,
|
|
174
264
|
};
|
|
175
265
|
}
|
|
266
|
+
if (itemType === "reasoning") {
|
|
267
|
+
const reasoning = item;
|
|
268
|
+
const content = (reasoning.content ?? [])
|
|
269
|
+
.map((part) => mapResponseContentPart(part))
|
|
270
|
+
.filter((part) => Boolean(part));
|
|
271
|
+
const summary = (reasoning.summary ?? [])
|
|
272
|
+
.map((part) => mapResponseContentPart(part))
|
|
273
|
+
.filter((part) => Boolean(part));
|
|
274
|
+
return {
|
|
275
|
+
type: "reasoning",
|
|
276
|
+
id: reasoning.id,
|
|
277
|
+
content: content.length > 0 ? content : undefined,
|
|
278
|
+
summary,
|
|
279
|
+
encrypted_content: reasoning.encrypted_content,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
if (typeof itemType === "string" && itemType.includes(":")) {
|
|
283
|
+
const raw = item;
|
|
284
|
+
const payloadEntries = Object.entries(raw).filter(([key, value]) => {
|
|
285
|
+
if (key === "type" || key === "id")
|
|
286
|
+
return false;
|
|
287
|
+
if (value === undefined)
|
|
288
|
+
return false;
|
|
289
|
+
return true;
|
|
290
|
+
});
|
|
291
|
+
let data;
|
|
292
|
+
if (payloadEntries.length === 1 && payloadEntries[0][0] === "data") {
|
|
293
|
+
data = toJsonValue(payloadEntries[0][1]);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
const payloadObject = {};
|
|
297
|
+
for (const [key, value] of payloadEntries) {
|
|
298
|
+
payloadObject[key] = toJsonValue(value);
|
|
299
|
+
}
|
|
300
|
+
data = payloadObject;
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
type: itemType,
|
|
304
|
+
id: typeof raw.id === "string" ? raw.id : undefined,
|
|
305
|
+
data,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
176
308
|
return null;
|
|
177
309
|
}
|
|
178
310
|
function normalizeOpenAIResponse(response) {
|
|
@@ -183,11 +315,23 @@ function normalizeOpenAIResponse(response) {
|
|
|
183
315
|
id: response.id,
|
|
184
316
|
object: "response",
|
|
185
317
|
model: response.model,
|
|
318
|
+
created_at: response.created_at,
|
|
186
319
|
created: response.created_at,
|
|
320
|
+
completed_at: response.completed_at ??
|
|
321
|
+
null,
|
|
322
|
+
previous_response_id: response.previous_response_id ?? null,
|
|
323
|
+
instructions: response.instructions ?? null,
|
|
324
|
+
reasoning: response
|
|
325
|
+
.reasoning ?? null,
|
|
187
326
|
status: mapStatus(response.status ?? undefined),
|
|
188
327
|
output: outputItems,
|
|
189
328
|
usage: mapUsage(response.usage),
|
|
190
|
-
error: mapError(response.error),
|
|
329
|
+
error: mapError(response.error) ?? null,
|
|
330
|
+
metadata: response.metadata,
|
|
331
|
+
max_output_tokens: response.max_output_tokens ?? null,
|
|
332
|
+
max_tool_calls: response.max_tool_calls ?? null,
|
|
333
|
+
parallel_tool_calls: response.parallel_tool_calls,
|
|
334
|
+
store: response.store,
|
|
191
335
|
};
|
|
192
336
|
}
|
|
193
337
|
function toOpenAIInputItems(items) {
|
|
@@ -209,6 +353,18 @@ function toOpenAIInputItems(items) {
|
|
|
209
353
|
text: part.text,
|
|
210
354
|
};
|
|
211
355
|
}
|
|
356
|
+
if (part.type === "summary_text") {
|
|
357
|
+
return {
|
|
358
|
+
type: "summary_text",
|
|
359
|
+
text: part.text,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
if (part.type === "reasoning_text") {
|
|
363
|
+
return {
|
|
364
|
+
type: "reasoning_text",
|
|
365
|
+
text: part.text,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
212
368
|
return null;
|
|
213
369
|
})
|
|
214
370
|
.filter((part) => Boolean(part));
|
|
@@ -239,6 +395,29 @@ function toOpenAIInputItems(items) {
|
|
|
239
395
|
output: item.output,
|
|
240
396
|
id: item.id,
|
|
241
397
|
});
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
if (item.type === "reasoning") {
|
|
401
|
+
mapped.push({
|
|
402
|
+
type: "reasoning",
|
|
403
|
+
id: item.id,
|
|
404
|
+
content: (item.content ?? []).map((part) => ({
|
|
405
|
+
type: part.type,
|
|
406
|
+
text: part.text,
|
|
407
|
+
})),
|
|
408
|
+
summary: item.summary.map((part) => ({
|
|
409
|
+
type: part.type,
|
|
410
|
+
text: part.text,
|
|
411
|
+
})),
|
|
412
|
+
encrypted_content: item.encrypted_content ?? null,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
if (isExtensionResponseItem(item)) {
|
|
416
|
+
mapped.push({
|
|
417
|
+
type: item.type,
|
|
418
|
+
id: item.id,
|
|
419
|
+
data: item.data,
|
|
420
|
+
});
|
|
242
421
|
}
|
|
243
422
|
}
|
|
244
423
|
return mapped;
|
|
@@ -323,13 +502,31 @@ function responseItemsToChat(items) {
|
|
|
323
502
|
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
324
503
|
};
|
|
325
504
|
}
|
|
326
|
-
async function createResponse(client, request, onStreamEvent) {
|
|
505
|
+
async function createResponse(client, request, signal, onStreamEvent) {
|
|
327
506
|
const baseParams = {
|
|
328
507
|
model: normalizeOpenRouterModel(request.model),
|
|
329
508
|
input: toOpenAIInputItems(request.input),
|
|
330
509
|
instructions: request.instructions,
|
|
331
510
|
tools: undefined,
|
|
332
511
|
tool_choice: mapToolChoice(request.tool_choice),
|
|
512
|
+
previous_response_id: request.previous_response_id,
|
|
513
|
+
reasoning: mapReasoning(request.reasoning),
|
|
514
|
+
parallel_tool_calls: request.parallel_tool_calls,
|
|
515
|
+
max_tool_calls: request.max_tool_calls,
|
|
516
|
+
store: request.store,
|
|
517
|
+
include: request.include,
|
|
518
|
+
text: mapText(request.text),
|
|
519
|
+
stream_options: request.stream_options,
|
|
520
|
+
background: request.background,
|
|
521
|
+
truncation: request.truncation,
|
|
522
|
+
service_tier: request.service_tier,
|
|
523
|
+
top_logprobs: request.top_logprobs,
|
|
524
|
+
safety_identifier: request.safety_identifier,
|
|
525
|
+
prompt_cache_key: request.prompt_cache_key,
|
|
526
|
+
temperature: request.temperature,
|
|
527
|
+
top_p: request.top_p,
|
|
528
|
+
frequency_penalty: request.frequency_penalty,
|
|
529
|
+
presence_penalty: request.presence_penalty,
|
|
333
530
|
stream: request.stream,
|
|
334
531
|
max_output_tokens: request.max_output_tokens,
|
|
335
532
|
metadata: request.metadata,
|
|
@@ -339,11 +536,11 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
339
536
|
if (mappedTools.length > 0) {
|
|
340
537
|
baseParams.tools = mappedTools;
|
|
341
538
|
}
|
|
342
|
-
const params = { ...(request.params ?? {}), ...baseParams };
|
|
539
|
+
const params = { ...(request.params ?? {}), ...stripUndefined(baseParams) };
|
|
343
540
|
const debugResponses = dntShim.Deno.env.get("GAMBIT_DEBUG_RESPONSES") === "1";
|
|
344
541
|
let responseOrStream;
|
|
345
542
|
try {
|
|
346
|
-
responseOrStream = await client.responses.create(params);
|
|
543
|
+
responseOrStream = await client.responses.create(params, signal ? { signal } : undefined);
|
|
347
544
|
}
|
|
348
545
|
catch (err) {
|
|
349
546
|
if (debugResponses) {
|
|
@@ -367,7 +564,12 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
367
564
|
switch (event.type) {
|
|
368
565
|
case "response.created": {
|
|
369
566
|
const mapped = normalizeOpenAIResponse(event.response);
|
|
370
|
-
onStreamEvent?.({
|
|
567
|
+
onStreamEvent?.({
|
|
568
|
+
type: "response.created",
|
|
569
|
+
response: mapped,
|
|
570
|
+
sequence_number: event
|
|
571
|
+
.sequence_number,
|
|
572
|
+
});
|
|
371
573
|
break;
|
|
372
574
|
}
|
|
373
575
|
case "response.output_text.delta":
|
|
@@ -376,6 +578,10 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
376
578
|
output_index: event.output_index,
|
|
377
579
|
delta: event.delta,
|
|
378
580
|
item_id: event.item_id,
|
|
581
|
+
content_index: event.content_index,
|
|
582
|
+
sequence_number: event
|
|
583
|
+
.sequence_number,
|
|
584
|
+
logprobs: event.logprobs,
|
|
379
585
|
});
|
|
380
586
|
break;
|
|
381
587
|
case "response.output_text.done":
|
|
@@ -384,6 +590,9 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
384
590
|
output_index: event.output_index,
|
|
385
591
|
text: event.text,
|
|
386
592
|
item_id: event.item_id,
|
|
593
|
+
content_index: event.content_index,
|
|
594
|
+
sequence_number: event
|
|
595
|
+
.sequence_number,
|
|
387
596
|
});
|
|
388
597
|
break;
|
|
389
598
|
case "response.output_item.added": {
|
|
@@ -393,6 +602,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
393
602
|
type: "response.output_item.added",
|
|
394
603
|
output_index: event.output_index,
|
|
395
604
|
item,
|
|
605
|
+
sequence_number: event
|
|
606
|
+
.sequence_number,
|
|
396
607
|
});
|
|
397
608
|
}
|
|
398
609
|
break;
|
|
@@ -404,13 +615,102 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
404
615
|
type: "response.output_item.done",
|
|
405
616
|
output_index: event.output_index,
|
|
406
617
|
item,
|
|
618
|
+
sequence_number: event
|
|
619
|
+
.sequence_number,
|
|
407
620
|
});
|
|
408
621
|
}
|
|
409
622
|
break;
|
|
410
623
|
}
|
|
624
|
+
case "response.reasoning.delta":
|
|
625
|
+
if (typeof event.delta === "string") {
|
|
626
|
+
onStreamEvent?.({
|
|
627
|
+
type: "response.reasoning.delta",
|
|
628
|
+
output_index: event.output_index,
|
|
629
|
+
item_id: event.item_id,
|
|
630
|
+
content_index: event.content_index,
|
|
631
|
+
delta: event.delta,
|
|
632
|
+
sequence_number: event
|
|
633
|
+
.sequence_number,
|
|
634
|
+
obfuscation: event.obfuscation,
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
break;
|
|
638
|
+
case "response.reasoning.done":
|
|
639
|
+
onStreamEvent?.({
|
|
640
|
+
type: "response.reasoning.done",
|
|
641
|
+
output_index: event.output_index,
|
|
642
|
+
item_id: event.item_id,
|
|
643
|
+
content_index: event.content_index,
|
|
644
|
+
text: event.text,
|
|
645
|
+
sequence_number: event
|
|
646
|
+
.sequence_number,
|
|
647
|
+
});
|
|
648
|
+
break;
|
|
649
|
+
case "response.reasoning_summary_text.delta":
|
|
650
|
+
if (typeof event.delta === "string") {
|
|
651
|
+
onStreamEvent?.({
|
|
652
|
+
type: "response.reasoning_summary_text.delta",
|
|
653
|
+
output_index: event.output_index,
|
|
654
|
+
item_id: event.item_id,
|
|
655
|
+
summary_index: event.summary_index,
|
|
656
|
+
delta: event.delta,
|
|
657
|
+
sequence_number: event
|
|
658
|
+
.sequence_number,
|
|
659
|
+
obfuscation: event.obfuscation,
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
break;
|
|
663
|
+
case "response.reasoning_summary_text.done":
|
|
664
|
+
onStreamEvent?.({
|
|
665
|
+
type: "response.reasoning_summary_text.done",
|
|
666
|
+
output_index: event.output_index,
|
|
667
|
+
item_id: event.item_id,
|
|
668
|
+
summary_index: event.summary_index,
|
|
669
|
+
text: event.text,
|
|
670
|
+
sequence_number: event
|
|
671
|
+
.sequence_number,
|
|
672
|
+
});
|
|
673
|
+
break;
|
|
674
|
+
case "response.reasoning_summary_part.added":
|
|
675
|
+
if (event.part && typeof event.part === "object" &&
|
|
676
|
+
"type" in event.part &&
|
|
677
|
+
"text" in event.part &&
|
|
678
|
+
typeof event.part.text === "string") {
|
|
679
|
+
onStreamEvent?.({
|
|
680
|
+
type: "response.reasoning_summary_part.added",
|
|
681
|
+
output_index: event.output_index,
|
|
682
|
+
item_id: event.item_id,
|
|
683
|
+
summary_index: event.summary_index,
|
|
684
|
+
part: event.part,
|
|
685
|
+
sequence_number: event
|
|
686
|
+
.sequence_number,
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
break;
|
|
690
|
+
case "response.reasoning_summary_part.done":
|
|
691
|
+
if (event.part && typeof event.part === "object" &&
|
|
692
|
+
"type" in event.part &&
|
|
693
|
+
"text" in event.part &&
|
|
694
|
+
typeof event.part.text === "string") {
|
|
695
|
+
onStreamEvent?.({
|
|
696
|
+
type: "response.reasoning_summary_part.done",
|
|
697
|
+
output_index: event.output_index,
|
|
698
|
+
item_id: event.item_id,
|
|
699
|
+
summary_index: event.summary_index,
|
|
700
|
+
part: event.part,
|
|
701
|
+
sequence_number: event
|
|
702
|
+
.sequence_number,
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
break;
|
|
411
706
|
case "response.completed": {
|
|
412
707
|
completed = normalizeOpenAIResponse(event.response);
|
|
413
|
-
onStreamEvent?.({
|
|
708
|
+
onStreamEvent?.({
|
|
709
|
+
type: "response.completed",
|
|
710
|
+
response: completed,
|
|
711
|
+
sequence_number: event
|
|
712
|
+
.sequence_number,
|
|
713
|
+
});
|
|
414
714
|
break;
|
|
415
715
|
}
|
|
416
716
|
case "response.failed": {
|
|
@@ -418,6 +718,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
418
718
|
onStreamEvent?.({
|
|
419
719
|
type: "response.failed",
|
|
420
720
|
error: error ?? {},
|
|
721
|
+
sequence_number: event
|
|
722
|
+
.sequence_number,
|
|
421
723
|
});
|
|
422
724
|
break;
|
|
423
725
|
}
|
|
@@ -444,7 +746,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
444
746
|
}));
|
|
445
747
|
return {
|
|
446
748
|
async responses(input) {
|
|
447
|
-
return await createResponse(client, input.request, input.onStreamEvent);
|
|
749
|
+
return await createResponse(client, input.request, input.signal, input.onStreamEvent);
|
|
448
750
|
},
|
|
449
751
|
async chat(input) {
|
|
450
752
|
const params = input.params ?? {};
|
|
@@ -455,7 +757,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
455
757
|
tools: input.tools,
|
|
456
758
|
stream: input.stream,
|
|
457
759
|
params,
|
|
458
|
-
}, (event) => {
|
|
760
|
+
}, input.signal, (event) => {
|
|
459
761
|
if (event.type === "response.output_text.delta") {
|
|
460
762
|
input.onStreamText?.(event.delta);
|
|
461
763
|
}
|
|
@@ -481,7 +783,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
481
783
|
tool_choice: "auto",
|
|
482
784
|
stream: true,
|
|
483
785
|
...params,
|
|
484
|
-
});
|
|
786
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
485
787
|
let finishReason = null;
|
|
486
788
|
const contentParts = [];
|
|
487
789
|
const toolCallMap = new Map();
|
|
@@ -566,7 +868,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
566
868
|
tool_choice: "auto",
|
|
567
869
|
stream: false,
|
|
568
870
|
...params,
|
|
569
|
-
});
|
|
871
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
570
872
|
const choice = response.choices[0];
|
|
571
873
|
const message = choice.message;
|
|
572
874
|
const normalizedMessage = normalizeMessage(message);
|
|
@@ -580,11 +882,20 @@ export function createOpenRouterProvider(opts) {
|
|
|
580
882
|
finishReason: (choice.finish_reason ?? "stop"),
|
|
581
883
|
toolCalls,
|
|
582
884
|
usage: response.usage
|
|
583
|
-
? {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
885
|
+
? (() => {
|
|
886
|
+
const usage = {
|
|
887
|
+
promptTokens: response.usage.prompt_tokens ?? 0,
|
|
888
|
+
completionTokens: response.usage.completion_tokens ?? 0,
|
|
889
|
+
totalTokens: response.usage.total_tokens ?? 0,
|
|
890
|
+
};
|
|
891
|
+
const details = response.usage;
|
|
892
|
+
const value = details.completion_tokens_details
|
|
893
|
+
?.reasoning_tokens ??
|
|
894
|
+
details.output_tokens_details?.reasoning_tokens;
|
|
895
|
+
return typeof value === "number"
|
|
896
|
+
? { ...usage, reasoningTokens: value }
|
|
897
|
+
: usage;
|
|
898
|
+
})()
|
|
588
899
|
: undefined,
|
|
589
900
|
};
|
|
590
901
|
},
|
|
@@ -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,93 @@
|
|
|
1
|
+
const PROVIDER_PREFIXES = {
|
|
2
|
+
openrouter: "openrouter/",
|
|
3
|
+
ollama: "ollama/",
|
|
4
|
+
google: "google/",
|
|
5
|
+
"codex-cli": "codex-cli/",
|
|
6
|
+
};
|
|
7
|
+
function parsePrefixedModel(model) {
|
|
8
|
+
if (model.trim() === "codex-cli") {
|
|
9
|
+
return {
|
|
10
|
+
providerKey: "codex-cli",
|
|
11
|
+
strippedModel: "default",
|
|
12
|
+
rawModel: model,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
for (const [providerKey, prefix] of Object.entries(PROVIDER_PREFIXES)) {
|
|
16
|
+
if (model.startsWith(prefix)) {
|
|
17
|
+
return {
|
|
18
|
+
providerKey: providerKey,
|
|
19
|
+
strippedModel: model.slice(prefix.length),
|
|
20
|
+
rawModel: model,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (model === "codex" || model.startsWith("codex/")) {
|
|
25
|
+
return {
|
|
26
|
+
strippedModel: model,
|
|
27
|
+
rawModel: model,
|
|
28
|
+
legacyCodex: true,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { strippedModel: model, rawModel: model };
|
|
32
|
+
}
|
|
33
|
+
function missingProviderMessage(providerKey) {
|
|
34
|
+
switch (providerKey) {
|
|
35
|
+
case "openrouter":
|
|
36
|
+
return "OPENROUTER_API_KEY is required for openrouter/ models.";
|
|
37
|
+
case "ollama":
|
|
38
|
+
return "Ollama provider is not configured. Set OLLAMA_BASE_URL or OLLAMA_API_KEY.";
|
|
39
|
+
case "google":
|
|
40
|
+
return "Google provider is not configured. Set GOOGLE_API_KEY or GEMINI_API_KEY.";
|
|
41
|
+
case "codex-cli":
|
|
42
|
+
return "Codex CLI provider is not configured.";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function createProviderRouter(opts) {
|
|
46
|
+
const defaultProvider = opts.defaultProvider === null
|
|
47
|
+
? null
|
|
48
|
+
: (opts.defaultProvider ?? "openrouter");
|
|
49
|
+
const fallbackOnMissing = new Set(opts.fallbackToDefaultOnMissing ?? ["google"]);
|
|
50
|
+
return {
|
|
51
|
+
resolve({ model }) {
|
|
52
|
+
const { providerKey, strippedModel, rawModel, legacyCodex } = parsePrefixedModel(model);
|
|
53
|
+
if (legacyCodex) {
|
|
54
|
+
throw new Error('Legacy Codex model prefix "codex" is no longer supported. Use "codex-cli/default" or "codex-cli/<model>".');
|
|
55
|
+
}
|
|
56
|
+
if (providerKey) {
|
|
57
|
+
const provider = opts.providers[providerKey];
|
|
58
|
+
if (!provider) {
|
|
59
|
+
if (fallbackOnMissing.has(providerKey) &&
|
|
60
|
+
defaultProvider !== null &&
|
|
61
|
+
defaultProvider !== providerKey) {
|
|
62
|
+
const fallbackProvider = opts.providers[defaultProvider];
|
|
63
|
+
if (fallbackProvider) {
|
|
64
|
+
return {
|
|
65
|
+
providerKey: defaultProvider,
|
|
66
|
+
provider: fallbackProvider,
|
|
67
|
+
model: rawModel,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw new Error(missingProviderMessage(providerKey));
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
providerKey,
|
|
75
|
+
provider,
|
|
76
|
+
model: strippedModel,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (defaultProvider === null) {
|
|
80
|
+
throw new Error("No fallback provider configured. Use a provider prefix or set providers.fallback in gambit.toml.");
|
|
81
|
+
}
|
|
82
|
+
const provider = opts.providers[defaultProvider];
|
|
83
|
+
if (!provider) {
|
|
84
|
+
throw new Error("OPENROUTER_API_KEY is required when no provider prefix is specified.");
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
providerKey: defaultProvider,
|
|
88
|
+
provider,
|
|
89
|
+
model,
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
package/esm/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
|
package/esm/src/server.d.ts.map
CHANGED
|
@@ -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"}
|