@bolt-foundry/gambit 0.8.3 → 0.8.5-rc.10
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 +74 -2
- package/README.md +87 -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 +11454 -4639
- 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 +810 -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 +317 -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 +3314 -659
- 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 +873 -0
- package/esm/src/server_types.d.ts +110 -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 +136 -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 +76 -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 +11454 -4639
- 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 +850 -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 +317 -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 +3321 -666
- 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 +910 -0
- package/script/src/server_types.d.ts +110 -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 +173 -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 +84 -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;AA2yBF,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;
|
|
@@ -180,20 +228,45 @@ function appendSyntheticTools(tools, input) {
|
|
|
180
228
|
function mapToolChoice(toolChoice) {
|
|
181
229
|
if (!toolChoice)
|
|
182
230
|
return undefined;
|
|
183
|
-
if (toolChoice === "
|
|
231
|
+
if (toolChoice === "none" || toolChoice === "auto" ||
|
|
232
|
+
toolChoice === "required") {
|
|
184
233
|
return toolChoice;
|
|
234
|
+
}
|
|
235
|
+
if (toolChoice.type === "allowed_tools") {
|
|
236
|
+
return {
|
|
237
|
+
type: "allowed_tools",
|
|
238
|
+
tools: toolChoice.tools,
|
|
239
|
+
mode: toolChoice.mode ?? "auto",
|
|
240
|
+
};
|
|
241
|
+
}
|
|
185
242
|
return { type: "function", name: toolChoice.function.name };
|
|
186
243
|
}
|
|
244
|
+
function mapResponseContentPart(part) {
|
|
245
|
+
if (!part || typeof part !== "object")
|
|
246
|
+
return null;
|
|
247
|
+
if (typeof part.text !== "string")
|
|
248
|
+
return null;
|
|
249
|
+
if (part.type === "output_text") {
|
|
250
|
+
return { type: "output_text", text: part.text };
|
|
251
|
+
}
|
|
252
|
+
if (part.type === "summary_text") {
|
|
253
|
+
return { type: "summary_text", text: part.text };
|
|
254
|
+
}
|
|
255
|
+
if (part.type === "reasoning_text") {
|
|
256
|
+
return { type: "reasoning_text", text: part.text };
|
|
257
|
+
}
|
|
258
|
+
if (part.type === "input_text") {
|
|
259
|
+
return { type: "input_text", text: part.text };
|
|
260
|
+
}
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
187
263
|
function mapOpenAIOutputItem(item) {
|
|
188
264
|
const itemType = item.type;
|
|
189
265
|
if (itemType === "message") {
|
|
190
266
|
const message = item;
|
|
191
|
-
const content = []
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
content.push({ type: "output_text", text: part.text });
|
|
195
|
-
}
|
|
196
|
-
}
|
|
267
|
+
const content = (message.content ?? [])
|
|
268
|
+
.map((part) => mapResponseContentPart(part))
|
|
269
|
+
.filter((part) => Boolean(part));
|
|
197
270
|
if (content.length === 0)
|
|
198
271
|
return null;
|
|
199
272
|
return {
|
|
@@ -213,6 +286,48 @@ function mapOpenAIOutputItem(item) {
|
|
|
213
286
|
id: call.id,
|
|
214
287
|
};
|
|
215
288
|
}
|
|
289
|
+
if (itemType === "reasoning") {
|
|
290
|
+
const reasoning = item;
|
|
291
|
+
const content = (reasoning.content ?? [])
|
|
292
|
+
.map((part) => mapResponseContentPart(part))
|
|
293
|
+
.filter((part) => Boolean(part));
|
|
294
|
+
const summary = (reasoning.summary ?? [])
|
|
295
|
+
.map((part) => mapResponseContentPart(part))
|
|
296
|
+
.filter((part) => Boolean(part));
|
|
297
|
+
return {
|
|
298
|
+
type: "reasoning",
|
|
299
|
+
id: reasoning.id,
|
|
300
|
+
content: content.length > 0 ? content : undefined,
|
|
301
|
+
summary,
|
|
302
|
+
encrypted_content: reasoning.encrypted_content,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
if (typeof itemType === "string" && itemType.includes(":")) {
|
|
306
|
+
const raw = item;
|
|
307
|
+
const payloadEntries = Object.entries(raw).filter(([key, value]) => {
|
|
308
|
+
if (key === "type" || key === "id")
|
|
309
|
+
return false;
|
|
310
|
+
if (value === undefined)
|
|
311
|
+
return false;
|
|
312
|
+
return true;
|
|
313
|
+
});
|
|
314
|
+
let data;
|
|
315
|
+
if (payloadEntries.length === 1 && payloadEntries[0][0] === "data") {
|
|
316
|
+
data = toJsonValue(payloadEntries[0][1]);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
const payloadObject = {};
|
|
320
|
+
for (const [key, value] of payloadEntries) {
|
|
321
|
+
payloadObject[key] = toJsonValue(value);
|
|
322
|
+
}
|
|
323
|
+
data = payloadObject;
|
|
324
|
+
}
|
|
325
|
+
return {
|
|
326
|
+
type: itemType,
|
|
327
|
+
id: typeof raw.id === "string" ? raw.id : undefined,
|
|
328
|
+
data,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
216
331
|
return null;
|
|
217
332
|
}
|
|
218
333
|
function normalizeOpenAIResponse(response) {
|
|
@@ -223,11 +338,23 @@ function normalizeOpenAIResponse(response) {
|
|
|
223
338
|
id: response.id,
|
|
224
339
|
object: "response",
|
|
225
340
|
model: response.model,
|
|
341
|
+
created_at: response.created_at,
|
|
226
342
|
created: response.created_at,
|
|
343
|
+
completed_at: response.completed_at ??
|
|
344
|
+
null,
|
|
345
|
+
previous_response_id: response.previous_response_id ?? null,
|
|
346
|
+
instructions: response.instructions ?? null,
|
|
347
|
+
reasoning: response
|
|
348
|
+
.reasoning ?? null,
|
|
227
349
|
status: mapStatus(response.status ?? undefined),
|
|
228
350
|
output: outputItems,
|
|
229
351
|
usage: mapUsage(response.usage),
|
|
230
|
-
error: mapError(response.error),
|
|
352
|
+
error: mapError(response.error) ?? null,
|
|
353
|
+
metadata: response.metadata,
|
|
354
|
+
max_output_tokens: response.max_output_tokens ?? null,
|
|
355
|
+
max_tool_calls: response.max_tool_calls ?? null,
|
|
356
|
+
parallel_tool_calls: response.parallel_tool_calls,
|
|
357
|
+
store: response.store,
|
|
231
358
|
};
|
|
232
359
|
}
|
|
233
360
|
function toOpenAIInputItems(items) {
|
|
@@ -249,6 +376,18 @@ function toOpenAIInputItems(items) {
|
|
|
249
376
|
text: part.text,
|
|
250
377
|
};
|
|
251
378
|
}
|
|
379
|
+
if (part.type === "summary_text") {
|
|
380
|
+
return {
|
|
381
|
+
type: "summary_text",
|
|
382
|
+
text: part.text,
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
if (part.type === "reasoning_text") {
|
|
386
|
+
return {
|
|
387
|
+
type: "reasoning_text",
|
|
388
|
+
text: part.text,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
252
391
|
return null;
|
|
253
392
|
})
|
|
254
393
|
.filter((part) => Boolean(part));
|
|
@@ -279,6 +418,29 @@ function toOpenAIInputItems(items) {
|
|
|
279
418
|
output: item.output,
|
|
280
419
|
id: item.id,
|
|
281
420
|
});
|
|
421
|
+
continue;
|
|
422
|
+
}
|
|
423
|
+
if (item.type === "reasoning") {
|
|
424
|
+
mapped.push({
|
|
425
|
+
type: "reasoning",
|
|
426
|
+
id: item.id,
|
|
427
|
+
content: (item.content ?? []).map((part) => ({
|
|
428
|
+
type: part.type,
|
|
429
|
+
text: part.text,
|
|
430
|
+
})),
|
|
431
|
+
summary: item.summary.map((part) => ({
|
|
432
|
+
type: part.type,
|
|
433
|
+
text: part.text,
|
|
434
|
+
})),
|
|
435
|
+
encrypted_content: item.encrypted_content ?? null,
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
if (isExtensionResponseItem(item)) {
|
|
439
|
+
mapped.push({
|
|
440
|
+
type: item.type,
|
|
441
|
+
id: item.id,
|
|
442
|
+
data: item.data,
|
|
443
|
+
});
|
|
282
444
|
}
|
|
283
445
|
}
|
|
284
446
|
return mapped;
|
|
@@ -363,13 +525,31 @@ function responseItemsToChat(items) {
|
|
|
363
525
|
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
364
526
|
};
|
|
365
527
|
}
|
|
366
|
-
async function createResponse(client, request, onStreamEvent) {
|
|
528
|
+
async function createResponse(client, request, signal, onStreamEvent) {
|
|
367
529
|
const baseParams = {
|
|
368
530
|
model: normalizeOpenRouterModel(request.model),
|
|
369
531
|
input: toOpenAIInputItems(request.input),
|
|
370
532
|
instructions: request.instructions,
|
|
371
533
|
tools: undefined,
|
|
372
534
|
tool_choice: mapToolChoice(request.tool_choice),
|
|
535
|
+
previous_response_id: request.previous_response_id,
|
|
536
|
+
reasoning: mapReasoning(request.reasoning),
|
|
537
|
+
parallel_tool_calls: request.parallel_tool_calls,
|
|
538
|
+
max_tool_calls: request.max_tool_calls,
|
|
539
|
+
store: request.store,
|
|
540
|
+
include: request.include,
|
|
541
|
+
text: request.text,
|
|
542
|
+
stream_options: request.stream_options,
|
|
543
|
+
background: request.background,
|
|
544
|
+
truncation: request.truncation,
|
|
545
|
+
service_tier: request.service_tier,
|
|
546
|
+
top_logprobs: request.top_logprobs,
|
|
547
|
+
safety_identifier: request.safety_identifier,
|
|
548
|
+
prompt_cache_key: request.prompt_cache_key,
|
|
549
|
+
temperature: request.temperature,
|
|
550
|
+
top_p: request.top_p,
|
|
551
|
+
frequency_penalty: request.frequency_penalty,
|
|
552
|
+
presence_penalty: request.presence_penalty,
|
|
373
553
|
stream: request.stream,
|
|
374
554
|
max_output_tokens: request.max_output_tokens,
|
|
375
555
|
metadata: request.metadata,
|
|
@@ -379,11 +559,11 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
379
559
|
if (mappedTools.length > 0) {
|
|
380
560
|
baseParams.tools = mappedTools;
|
|
381
561
|
}
|
|
382
|
-
const params = { ...(request.params ?? {}), ...baseParams };
|
|
562
|
+
const params = { ...(request.params ?? {}), ...stripUndefined(baseParams) };
|
|
383
563
|
const debugResponses = dntShim.Deno.env.get("GAMBIT_DEBUG_RESPONSES") === "1";
|
|
384
564
|
let responseOrStream;
|
|
385
565
|
try {
|
|
386
|
-
responseOrStream = await client.responses.create(params);
|
|
566
|
+
responseOrStream = await client.responses.create(params, signal ? { signal } : undefined);
|
|
387
567
|
}
|
|
388
568
|
catch (err) {
|
|
389
569
|
if (debugResponses) {
|
|
@@ -407,7 +587,12 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
407
587
|
switch (event.type) {
|
|
408
588
|
case "response.created": {
|
|
409
589
|
const mapped = normalizeOpenAIResponse(event.response);
|
|
410
|
-
onStreamEvent?.({
|
|
590
|
+
onStreamEvent?.({
|
|
591
|
+
type: "response.created",
|
|
592
|
+
response: mapped,
|
|
593
|
+
sequence_number: event
|
|
594
|
+
.sequence_number,
|
|
595
|
+
});
|
|
411
596
|
break;
|
|
412
597
|
}
|
|
413
598
|
case "response.output_text.delta":
|
|
@@ -416,6 +601,10 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
416
601
|
output_index: event.output_index,
|
|
417
602
|
delta: event.delta,
|
|
418
603
|
item_id: event.item_id,
|
|
604
|
+
content_index: event.content_index,
|
|
605
|
+
sequence_number: event
|
|
606
|
+
.sequence_number,
|
|
607
|
+
logprobs: event.logprobs,
|
|
419
608
|
});
|
|
420
609
|
break;
|
|
421
610
|
case "response.output_text.done":
|
|
@@ -424,6 +613,9 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
424
613
|
output_index: event.output_index,
|
|
425
614
|
text: event.text,
|
|
426
615
|
item_id: event.item_id,
|
|
616
|
+
content_index: event.content_index,
|
|
617
|
+
sequence_number: event
|
|
618
|
+
.sequence_number,
|
|
427
619
|
});
|
|
428
620
|
break;
|
|
429
621
|
case "response.output_item.added": {
|
|
@@ -433,6 +625,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
433
625
|
type: "response.output_item.added",
|
|
434
626
|
output_index: event.output_index,
|
|
435
627
|
item,
|
|
628
|
+
sequence_number: event
|
|
629
|
+
.sequence_number,
|
|
436
630
|
});
|
|
437
631
|
}
|
|
438
632
|
break;
|
|
@@ -444,13 +638,102 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
444
638
|
type: "response.output_item.done",
|
|
445
639
|
output_index: event.output_index,
|
|
446
640
|
item,
|
|
641
|
+
sequence_number: event
|
|
642
|
+
.sequence_number,
|
|
447
643
|
});
|
|
448
644
|
}
|
|
449
645
|
break;
|
|
450
646
|
}
|
|
647
|
+
case "response.reasoning.delta":
|
|
648
|
+
if (typeof event.delta === "string") {
|
|
649
|
+
onStreamEvent?.({
|
|
650
|
+
type: "response.reasoning.delta",
|
|
651
|
+
output_index: event.output_index,
|
|
652
|
+
item_id: event.item_id,
|
|
653
|
+
content_index: event.content_index,
|
|
654
|
+
delta: event.delta,
|
|
655
|
+
sequence_number: event
|
|
656
|
+
.sequence_number,
|
|
657
|
+
obfuscation: event.obfuscation,
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
break;
|
|
661
|
+
case "response.reasoning.done":
|
|
662
|
+
onStreamEvent?.({
|
|
663
|
+
type: "response.reasoning.done",
|
|
664
|
+
output_index: event.output_index,
|
|
665
|
+
item_id: event.item_id,
|
|
666
|
+
content_index: event.content_index,
|
|
667
|
+
text: event.text,
|
|
668
|
+
sequence_number: event
|
|
669
|
+
.sequence_number,
|
|
670
|
+
});
|
|
671
|
+
break;
|
|
672
|
+
case "response.reasoning_summary_text.delta":
|
|
673
|
+
if (typeof event.delta === "string") {
|
|
674
|
+
onStreamEvent?.({
|
|
675
|
+
type: "response.reasoning_summary_text.delta",
|
|
676
|
+
output_index: event.output_index,
|
|
677
|
+
item_id: event.item_id,
|
|
678
|
+
summary_index: event.summary_index,
|
|
679
|
+
delta: event.delta,
|
|
680
|
+
sequence_number: event
|
|
681
|
+
.sequence_number,
|
|
682
|
+
obfuscation: event.obfuscation,
|
|
683
|
+
});
|
|
684
|
+
}
|
|
685
|
+
break;
|
|
686
|
+
case "response.reasoning_summary_text.done":
|
|
687
|
+
onStreamEvent?.({
|
|
688
|
+
type: "response.reasoning_summary_text.done",
|
|
689
|
+
output_index: event.output_index,
|
|
690
|
+
item_id: event.item_id,
|
|
691
|
+
summary_index: event.summary_index,
|
|
692
|
+
text: event.text,
|
|
693
|
+
sequence_number: event
|
|
694
|
+
.sequence_number,
|
|
695
|
+
});
|
|
696
|
+
break;
|
|
697
|
+
case "response.reasoning_summary_part.added":
|
|
698
|
+
if (event.part && typeof event.part === "object" &&
|
|
699
|
+
"type" in event.part &&
|
|
700
|
+
"text" in event.part &&
|
|
701
|
+
typeof event.part.text === "string") {
|
|
702
|
+
onStreamEvent?.({
|
|
703
|
+
type: "response.reasoning_summary_part.added",
|
|
704
|
+
output_index: event.output_index,
|
|
705
|
+
item_id: event.item_id,
|
|
706
|
+
summary_index: event.summary_index,
|
|
707
|
+
part: event.part,
|
|
708
|
+
sequence_number: event
|
|
709
|
+
.sequence_number,
|
|
710
|
+
});
|
|
711
|
+
}
|
|
712
|
+
break;
|
|
713
|
+
case "response.reasoning_summary_part.done":
|
|
714
|
+
if (event.part && typeof event.part === "object" &&
|
|
715
|
+
"type" in event.part &&
|
|
716
|
+
"text" in event.part &&
|
|
717
|
+
typeof event.part.text === "string") {
|
|
718
|
+
onStreamEvent?.({
|
|
719
|
+
type: "response.reasoning_summary_part.done",
|
|
720
|
+
output_index: event.output_index,
|
|
721
|
+
item_id: event.item_id,
|
|
722
|
+
summary_index: event.summary_index,
|
|
723
|
+
part: event.part,
|
|
724
|
+
sequence_number: event
|
|
725
|
+
.sequence_number,
|
|
726
|
+
});
|
|
727
|
+
}
|
|
728
|
+
break;
|
|
451
729
|
case "response.completed": {
|
|
452
730
|
completed = normalizeOpenAIResponse(event.response);
|
|
453
|
-
onStreamEvent?.({
|
|
731
|
+
onStreamEvent?.({
|
|
732
|
+
type: "response.completed",
|
|
733
|
+
response: completed,
|
|
734
|
+
sequence_number: event
|
|
735
|
+
.sequence_number,
|
|
736
|
+
});
|
|
454
737
|
break;
|
|
455
738
|
}
|
|
456
739
|
case "response.failed": {
|
|
@@ -458,6 +741,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
458
741
|
onStreamEvent?.({
|
|
459
742
|
type: "response.failed",
|
|
460
743
|
error: error ?? {},
|
|
744
|
+
sequence_number: event
|
|
745
|
+
.sequence_number,
|
|
461
746
|
});
|
|
462
747
|
break;
|
|
463
748
|
}
|
|
@@ -484,7 +769,7 @@ function createOpenRouterProvider(opts) {
|
|
|
484
769
|
}));
|
|
485
770
|
return {
|
|
486
771
|
async responses(input) {
|
|
487
|
-
return await createResponse(client, input.request, input.onStreamEvent);
|
|
772
|
+
return await createResponse(client, input.request, input.signal, input.onStreamEvent);
|
|
488
773
|
},
|
|
489
774
|
async chat(input) {
|
|
490
775
|
const params = input.params ?? {};
|
|
@@ -495,7 +780,7 @@ function createOpenRouterProvider(opts) {
|
|
|
495
780
|
tools: input.tools,
|
|
496
781
|
stream: input.stream,
|
|
497
782
|
params,
|
|
498
|
-
}, (event) => {
|
|
783
|
+
}, input.signal, (event) => {
|
|
499
784
|
if (event.type === "response.output_text.delta") {
|
|
500
785
|
input.onStreamText?.(event.delta);
|
|
501
786
|
}
|
|
@@ -521,7 +806,7 @@ function createOpenRouterProvider(opts) {
|
|
|
521
806
|
tool_choice: "auto",
|
|
522
807
|
stream: true,
|
|
523
808
|
...params,
|
|
524
|
-
});
|
|
809
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
525
810
|
let finishReason = null;
|
|
526
811
|
const contentParts = [];
|
|
527
812
|
const toolCallMap = new Map();
|
|
@@ -606,7 +891,7 @@ function createOpenRouterProvider(opts) {
|
|
|
606
891
|
tool_choice: "auto",
|
|
607
892
|
stream: false,
|
|
608
893
|
...params,
|
|
609
|
-
});
|
|
894
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
610
895
|
const choice = response.choices[0];
|
|
611
896
|
const message = choice.message;
|
|
612
897
|
const normalizedMessage = normalizeMessage(message);
|
|
@@ -620,11 +905,20 @@ function createOpenRouterProvider(opts) {
|
|
|
620
905
|
finishReason: (choice.finish_reason ?? "stop"),
|
|
621
906
|
toolCalls,
|
|
622
907
|
usage: response.usage
|
|
623
|
-
? {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
908
|
+
? (() => {
|
|
909
|
+
const usage = {
|
|
910
|
+
promptTokens: response.usage.prompt_tokens ?? 0,
|
|
911
|
+
completionTokens: response.usage.completion_tokens ?? 0,
|
|
912
|
+
totalTokens: response.usage.total_tokens ?? 0,
|
|
913
|
+
};
|
|
914
|
+
const details = response.usage;
|
|
915
|
+
const value = details.completion_tokens_details
|
|
916
|
+
?.reasoning_tokens ??
|
|
917
|
+
details.output_tokens_details?.reasoning_tokens;
|
|
918
|
+
return typeof value === "number"
|
|
919
|
+
? { ...usage, reasoningTokens: value }
|
|
920
|
+
: usage;
|
|
921
|
+
})()
|
|
628
922
|
: undefined,
|
|
629
923
|
};
|
|
630
924
|
},
|
|
@@ -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;AA0hCnC;;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,CA4lKxC"}
|