@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"}
|
|
@@ -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;
|
|
@@ -140,20 +188,45 @@ function appendSyntheticTools(tools, input) {
|
|
|
140
188
|
function mapToolChoice(toolChoice) {
|
|
141
189
|
if (!toolChoice)
|
|
142
190
|
return undefined;
|
|
143
|
-
if (toolChoice === "
|
|
191
|
+
if (toolChoice === "none" || toolChoice === "auto" ||
|
|
192
|
+
toolChoice === "required") {
|
|
144
193
|
return toolChoice;
|
|
194
|
+
}
|
|
195
|
+
if (toolChoice.type === "allowed_tools") {
|
|
196
|
+
return {
|
|
197
|
+
type: "allowed_tools",
|
|
198
|
+
tools: toolChoice.tools,
|
|
199
|
+
mode: toolChoice.mode ?? "auto",
|
|
200
|
+
};
|
|
201
|
+
}
|
|
145
202
|
return { type: "function", name: toolChoice.function.name };
|
|
146
203
|
}
|
|
204
|
+
function mapResponseContentPart(part) {
|
|
205
|
+
if (!part || typeof part !== "object")
|
|
206
|
+
return null;
|
|
207
|
+
if (typeof part.text !== "string")
|
|
208
|
+
return null;
|
|
209
|
+
if (part.type === "output_text") {
|
|
210
|
+
return { type: "output_text", text: part.text };
|
|
211
|
+
}
|
|
212
|
+
if (part.type === "summary_text") {
|
|
213
|
+
return { type: "summary_text", text: part.text };
|
|
214
|
+
}
|
|
215
|
+
if (part.type === "reasoning_text") {
|
|
216
|
+
return { type: "reasoning_text", text: part.text };
|
|
217
|
+
}
|
|
218
|
+
if (part.type === "input_text") {
|
|
219
|
+
return { type: "input_text", text: part.text };
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
147
223
|
function mapOpenAIOutputItem(item) {
|
|
148
224
|
const itemType = item.type;
|
|
149
225
|
if (itemType === "message") {
|
|
150
226
|
const message = item;
|
|
151
|
-
const content = []
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
content.push({ type: "output_text", text: part.text });
|
|
155
|
-
}
|
|
156
|
-
}
|
|
227
|
+
const content = (message.content ?? [])
|
|
228
|
+
.map((part) => mapResponseContentPart(part))
|
|
229
|
+
.filter((part) => Boolean(part));
|
|
157
230
|
if (content.length === 0)
|
|
158
231
|
return null;
|
|
159
232
|
return {
|
|
@@ -173,6 +246,48 @@ function mapOpenAIOutputItem(item) {
|
|
|
173
246
|
id: call.id,
|
|
174
247
|
};
|
|
175
248
|
}
|
|
249
|
+
if (itemType === "reasoning") {
|
|
250
|
+
const reasoning = item;
|
|
251
|
+
const content = (reasoning.content ?? [])
|
|
252
|
+
.map((part) => mapResponseContentPart(part))
|
|
253
|
+
.filter((part) => Boolean(part));
|
|
254
|
+
const summary = (reasoning.summary ?? [])
|
|
255
|
+
.map((part) => mapResponseContentPart(part))
|
|
256
|
+
.filter((part) => Boolean(part));
|
|
257
|
+
return {
|
|
258
|
+
type: "reasoning",
|
|
259
|
+
id: reasoning.id,
|
|
260
|
+
content: content.length > 0 ? content : undefined,
|
|
261
|
+
summary,
|
|
262
|
+
encrypted_content: reasoning.encrypted_content,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
if (typeof itemType === "string" && itemType.includes(":")) {
|
|
266
|
+
const raw = item;
|
|
267
|
+
const payloadEntries = Object.entries(raw).filter(([key, value]) => {
|
|
268
|
+
if (key === "type" || key === "id")
|
|
269
|
+
return false;
|
|
270
|
+
if (value === undefined)
|
|
271
|
+
return false;
|
|
272
|
+
return true;
|
|
273
|
+
});
|
|
274
|
+
let data;
|
|
275
|
+
if (payloadEntries.length === 1 && payloadEntries[0][0] === "data") {
|
|
276
|
+
data = toJsonValue(payloadEntries[0][1]);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
const payloadObject = {};
|
|
280
|
+
for (const [key, value] of payloadEntries) {
|
|
281
|
+
payloadObject[key] = toJsonValue(value);
|
|
282
|
+
}
|
|
283
|
+
data = payloadObject;
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
type: itemType,
|
|
287
|
+
id: typeof raw.id === "string" ? raw.id : undefined,
|
|
288
|
+
data,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
176
291
|
return null;
|
|
177
292
|
}
|
|
178
293
|
function normalizeOpenAIResponse(response) {
|
|
@@ -183,11 +298,23 @@ function normalizeOpenAIResponse(response) {
|
|
|
183
298
|
id: response.id,
|
|
184
299
|
object: "response",
|
|
185
300
|
model: response.model,
|
|
301
|
+
created_at: response.created_at,
|
|
186
302
|
created: response.created_at,
|
|
303
|
+
completed_at: response.completed_at ??
|
|
304
|
+
null,
|
|
305
|
+
previous_response_id: response.previous_response_id ?? null,
|
|
306
|
+
instructions: response.instructions ?? null,
|
|
307
|
+
reasoning: response
|
|
308
|
+
.reasoning ?? null,
|
|
187
309
|
status: mapStatus(response.status ?? undefined),
|
|
188
310
|
output: outputItems,
|
|
189
311
|
usage: mapUsage(response.usage),
|
|
190
|
-
error: mapError(response.error),
|
|
312
|
+
error: mapError(response.error) ?? null,
|
|
313
|
+
metadata: response.metadata,
|
|
314
|
+
max_output_tokens: response.max_output_tokens ?? null,
|
|
315
|
+
max_tool_calls: response.max_tool_calls ?? null,
|
|
316
|
+
parallel_tool_calls: response.parallel_tool_calls,
|
|
317
|
+
store: response.store,
|
|
191
318
|
};
|
|
192
319
|
}
|
|
193
320
|
function toOpenAIInputItems(items) {
|
|
@@ -209,6 +336,18 @@ function toOpenAIInputItems(items) {
|
|
|
209
336
|
text: part.text,
|
|
210
337
|
};
|
|
211
338
|
}
|
|
339
|
+
if (part.type === "summary_text") {
|
|
340
|
+
return {
|
|
341
|
+
type: "summary_text",
|
|
342
|
+
text: part.text,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
if (part.type === "reasoning_text") {
|
|
346
|
+
return {
|
|
347
|
+
type: "reasoning_text",
|
|
348
|
+
text: part.text,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
212
351
|
return null;
|
|
213
352
|
})
|
|
214
353
|
.filter((part) => Boolean(part));
|
|
@@ -239,6 +378,29 @@ function toOpenAIInputItems(items) {
|
|
|
239
378
|
output: item.output,
|
|
240
379
|
id: item.id,
|
|
241
380
|
});
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
if (item.type === "reasoning") {
|
|
384
|
+
mapped.push({
|
|
385
|
+
type: "reasoning",
|
|
386
|
+
id: item.id,
|
|
387
|
+
content: (item.content ?? []).map((part) => ({
|
|
388
|
+
type: part.type,
|
|
389
|
+
text: part.text,
|
|
390
|
+
})),
|
|
391
|
+
summary: item.summary.map((part) => ({
|
|
392
|
+
type: part.type,
|
|
393
|
+
text: part.text,
|
|
394
|
+
})),
|
|
395
|
+
encrypted_content: item.encrypted_content ?? null,
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
if (isExtensionResponseItem(item)) {
|
|
399
|
+
mapped.push({
|
|
400
|
+
type: item.type,
|
|
401
|
+
id: item.id,
|
|
402
|
+
data: item.data,
|
|
403
|
+
});
|
|
242
404
|
}
|
|
243
405
|
}
|
|
244
406
|
return mapped;
|
|
@@ -323,13 +485,31 @@ function responseItemsToChat(items) {
|
|
|
323
485
|
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
324
486
|
};
|
|
325
487
|
}
|
|
326
|
-
async function createResponse(client, request, onStreamEvent) {
|
|
488
|
+
async function createResponse(client, request, signal, onStreamEvent) {
|
|
327
489
|
const baseParams = {
|
|
328
490
|
model: normalizeOpenRouterModel(request.model),
|
|
329
491
|
input: toOpenAIInputItems(request.input),
|
|
330
492
|
instructions: request.instructions,
|
|
331
493
|
tools: undefined,
|
|
332
494
|
tool_choice: mapToolChoice(request.tool_choice),
|
|
495
|
+
previous_response_id: request.previous_response_id,
|
|
496
|
+
reasoning: mapReasoning(request.reasoning),
|
|
497
|
+
parallel_tool_calls: request.parallel_tool_calls,
|
|
498
|
+
max_tool_calls: request.max_tool_calls,
|
|
499
|
+
store: request.store,
|
|
500
|
+
include: request.include,
|
|
501
|
+
text: request.text,
|
|
502
|
+
stream_options: request.stream_options,
|
|
503
|
+
background: request.background,
|
|
504
|
+
truncation: request.truncation,
|
|
505
|
+
service_tier: request.service_tier,
|
|
506
|
+
top_logprobs: request.top_logprobs,
|
|
507
|
+
safety_identifier: request.safety_identifier,
|
|
508
|
+
prompt_cache_key: request.prompt_cache_key,
|
|
509
|
+
temperature: request.temperature,
|
|
510
|
+
top_p: request.top_p,
|
|
511
|
+
frequency_penalty: request.frequency_penalty,
|
|
512
|
+
presence_penalty: request.presence_penalty,
|
|
333
513
|
stream: request.stream,
|
|
334
514
|
max_output_tokens: request.max_output_tokens,
|
|
335
515
|
metadata: request.metadata,
|
|
@@ -339,11 +519,11 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
339
519
|
if (mappedTools.length > 0) {
|
|
340
520
|
baseParams.tools = mappedTools;
|
|
341
521
|
}
|
|
342
|
-
const params = { ...(request.params ?? {}), ...baseParams };
|
|
522
|
+
const params = { ...(request.params ?? {}), ...stripUndefined(baseParams) };
|
|
343
523
|
const debugResponses = dntShim.Deno.env.get("GAMBIT_DEBUG_RESPONSES") === "1";
|
|
344
524
|
let responseOrStream;
|
|
345
525
|
try {
|
|
346
|
-
responseOrStream = await client.responses.create(params);
|
|
526
|
+
responseOrStream = await client.responses.create(params, signal ? { signal } : undefined);
|
|
347
527
|
}
|
|
348
528
|
catch (err) {
|
|
349
529
|
if (debugResponses) {
|
|
@@ -367,7 +547,12 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
367
547
|
switch (event.type) {
|
|
368
548
|
case "response.created": {
|
|
369
549
|
const mapped = normalizeOpenAIResponse(event.response);
|
|
370
|
-
onStreamEvent?.({
|
|
550
|
+
onStreamEvent?.({
|
|
551
|
+
type: "response.created",
|
|
552
|
+
response: mapped,
|
|
553
|
+
sequence_number: event
|
|
554
|
+
.sequence_number,
|
|
555
|
+
});
|
|
371
556
|
break;
|
|
372
557
|
}
|
|
373
558
|
case "response.output_text.delta":
|
|
@@ -376,6 +561,10 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
376
561
|
output_index: event.output_index,
|
|
377
562
|
delta: event.delta,
|
|
378
563
|
item_id: event.item_id,
|
|
564
|
+
content_index: event.content_index,
|
|
565
|
+
sequence_number: event
|
|
566
|
+
.sequence_number,
|
|
567
|
+
logprobs: event.logprobs,
|
|
379
568
|
});
|
|
380
569
|
break;
|
|
381
570
|
case "response.output_text.done":
|
|
@@ -384,6 +573,9 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
384
573
|
output_index: event.output_index,
|
|
385
574
|
text: event.text,
|
|
386
575
|
item_id: event.item_id,
|
|
576
|
+
content_index: event.content_index,
|
|
577
|
+
sequence_number: event
|
|
578
|
+
.sequence_number,
|
|
387
579
|
});
|
|
388
580
|
break;
|
|
389
581
|
case "response.output_item.added": {
|
|
@@ -393,6 +585,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
393
585
|
type: "response.output_item.added",
|
|
394
586
|
output_index: event.output_index,
|
|
395
587
|
item,
|
|
588
|
+
sequence_number: event
|
|
589
|
+
.sequence_number,
|
|
396
590
|
});
|
|
397
591
|
}
|
|
398
592
|
break;
|
|
@@ -404,13 +598,102 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
404
598
|
type: "response.output_item.done",
|
|
405
599
|
output_index: event.output_index,
|
|
406
600
|
item,
|
|
601
|
+
sequence_number: event
|
|
602
|
+
.sequence_number,
|
|
407
603
|
});
|
|
408
604
|
}
|
|
409
605
|
break;
|
|
410
606
|
}
|
|
607
|
+
case "response.reasoning.delta":
|
|
608
|
+
if (typeof event.delta === "string") {
|
|
609
|
+
onStreamEvent?.({
|
|
610
|
+
type: "response.reasoning.delta",
|
|
611
|
+
output_index: event.output_index,
|
|
612
|
+
item_id: event.item_id,
|
|
613
|
+
content_index: event.content_index,
|
|
614
|
+
delta: event.delta,
|
|
615
|
+
sequence_number: event
|
|
616
|
+
.sequence_number,
|
|
617
|
+
obfuscation: event.obfuscation,
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
break;
|
|
621
|
+
case "response.reasoning.done":
|
|
622
|
+
onStreamEvent?.({
|
|
623
|
+
type: "response.reasoning.done",
|
|
624
|
+
output_index: event.output_index,
|
|
625
|
+
item_id: event.item_id,
|
|
626
|
+
content_index: event.content_index,
|
|
627
|
+
text: event.text,
|
|
628
|
+
sequence_number: event
|
|
629
|
+
.sequence_number,
|
|
630
|
+
});
|
|
631
|
+
break;
|
|
632
|
+
case "response.reasoning_summary_text.delta":
|
|
633
|
+
if (typeof event.delta === "string") {
|
|
634
|
+
onStreamEvent?.({
|
|
635
|
+
type: "response.reasoning_summary_text.delta",
|
|
636
|
+
output_index: event.output_index,
|
|
637
|
+
item_id: event.item_id,
|
|
638
|
+
summary_index: event.summary_index,
|
|
639
|
+
delta: event.delta,
|
|
640
|
+
sequence_number: event
|
|
641
|
+
.sequence_number,
|
|
642
|
+
obfuscation: event.obfuscation,
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
break;
|
|
646
|
+
case "response.reasoning_summary_text.done":
|
|
647
|
+
onStreamEvent?.({
|
|
648
|
+
type: "response.reasoning_summary_text.done",
|
|
649
|
+
output_index: event.output_index,
|
|
650
|
+
item_id: event.item_id,
|
|
651
|
+
summary_index: event.summary_index,
|
|
652
|
+
text: event.text,
|
|
653
|
+
sequence_number: event
|
|
654
|
+
.sequence_number,
|
|
655
|
+
});
|
|
656
|
+
break;
|
|
657
|
+
case "response.reasoning_summary_part.added":
|
|
658
|
+
if (event.part && typeof event.part === "object" &&
|
|
659
|
+
"type" in event.part &&
|
|
660
|
+
"text" in event.part &&
|
|
661
|
+
typeof event.part.text === "string") {
|
|
662
|
+
onStreamEvent?.({
|
|
663
|
+
type: "response.reasoning_summary_part.added",
|
|
664
|
+
output_index: event.output_index,
|
|
665
|
+
item_id: event.item_id,
|
|
666
|
+
summary_index: event.summary_index,
|
|
667
|
+
part: event.part,
|
|
668
|
+
sequence_number: event
|
|
669
|
+
.sequence_number,
|
|
670
|
+
});
|
|
671
|
+
}
|
|
672
|
+
break;
|
|
673
|
+
case "response.reasoning_summary_part.done":
|
|
674
|
+
if (event.part && typeof event.part === "object" &&
|
|
675
|
+
"type" in event.part &&
|
|
676
|
+
"text" in event.part &&
|
|
677
|
+
typeof event.part.text === "string") {
|
|
678
|
+
onStreamEvent?.({
|
|
679
|
+
type: "response.reasoning_summary_part.done",
|
|
680
|
+
output_index: event.output_index,
|
|
681
|
+
item_id: event.item_id,
|
|
682
|
+
summary_index: event.summary_index,
|
|
683
|
+
part: event.part,
|
|
684
|
+
sequence_number: event
|
|
685
|
+
.sequence_number,
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
break;
|
|
411
689
|
case "response.completed": {
|
|
412
690
|
completed = normalizeOpenAIResponse(event.response);
|
|
413
|
-
onStreamEvent?.({
|
|
691
|
+
onStreamEvent?.({
|
|
692
|
+
type: "response.completed",
|
|
693
|
+
response: completed,
|
|
694
|
+
sequence_number: event
|
|
695
|
+
.sequence_number,
|
|
696
|
+
});
|
|
414
697
|
break;
|
|
415
698
|
}
|
|
416
699
|
case "response.failed": {
|
|
@@ -418,6 +701,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
418
701
|
onStreamEvent?.({
|
|
419
702
|
type: "response.failed",
|
|
420
703
|
error: error ?? {},
|
|
704
|
+
sequence_number: event
|
|
705
|
+
.sequence_number,
|
|
421
706
|
});
|
|
422
707
|
break;
|
|
423
708
|
}
|
|
@@ -444,7 +729,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
444
729
|
}));
|
|
445
730
|
return {
|
|
446
731
|
async responses(input) {
|
|
447
|
-
return await createResponse(client, input.request, input.onStreamEvent);
|
|
732
|
+
return await createResponse(client, input.request, input.signal, input.onStreamEvent);
|
|
448
733
|
},
|
|
449
734
|
async chat(input) {
|
|
450
735
|
const params = input.params ?? {};
|
|
@@ -455,7 +740,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
455
740
|
tools: input.tools,
|
|
456
741
|
stream: input.stream,
|
|
457
742
|
params,
|
|
458
|
-
}, (event) => {
|
|
743
|
+
}, input.signal, (event) => {
|
|
459
744
|
if (event.type === "response.output_text.delta") {
|
|
460
745
|
input.onStreamText?.(event.delta);
|
|
461
746
|
}
|
|
@@ -481,7 +766,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
481
766
|
tool_choice: "auto",
|
|
482
767
|
stream: true,
|
|
483
768
|
...params,
|
|
484
|
-
});
|
|
769
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
485
770
|
let finishReason = null;
|
|
486
771
|
const contentParts = [];
|
|
487
772
|
const toolCallMap = new Map();
|
|
@@ -566,7 +851,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
566
851
|
tool_choice: "auto",
|
|
567
852
|
stream: false,
|
|
568
853
|
...params,
|
|
569
|
-
});
|
|
854
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
570
855
|
const choice = response.choices[0];
|
|
571
856
|
const message = choice.message;
|
|
572
857
|
const normalizedMessage = normalizeMessage(message);
|
|
@@ -580,11 +865,20 @@ export function createOpenRouterProvider(opts) {
|
|
|
580
865
|
finishReason: (choice.finish_reason ?? "stop"),
|
|
581
866
|
toolCalls,
|
|
582
867
|
usage: response.usage
|
|
583
|
-
? {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
868
|
+
? (() => {
|
|
869
|
+
const usage = {
|
|
870
|
+
promptTokens: response.usage.prompt_tokens ?? 0,
|
|
871
|
+
completionTokens: response.usage.completion_tokens ?? 0,
|
|
872
|
+
totalTokens: response.usage.total_tokens ?? 0,
|
|
873
|
+
};
|
|
874
|
+
const details = response.usage;
|
|
875
|
+
const value = details.completion_tokens_details
|
|
876
|
+
?.reasoning_tokens ??
|
|
877
|
+
details.output_tokens_details?.reasoning_tokens;
|
|
878
|
+
return typeof value === "number"
|
|
879
|
+
? { ...usage, reasoningTokens: value }
|
|
880
|
+
: usage;
|
|
881
|
+
})()
|
|
588
882
|
: undefined,
|
|
589
883
|
};
|
|
590
884
|
},
|
|
@@ -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;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"}
|