Add declarative Sakana AI provider for the OpenAI-compatible Fugu API - #10357
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cc2240f4c7
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
jamadeo
left a comment
There was a problem hiding this comment.
double check the name field but otherwise LGTM
cc2240f to
37bb1c0
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 37bb1c007c
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| @@ -0,0 +1,31 @@ | |||
| { | |||
| "name": "sakana", | |||
| "engine": "openai", | |||
There was a problem hiding this comment.
Add Sakana's catalog provider id
Please set catalog_provider_id to sakana for this fixed provider. I checked declarative_inventory_identity, and when an OpenAI-compatible declarative config omits this field it records the inventory provider_family as openai, so the static fugu/fugu-ultra entries are enriched against the OpenAI catalog instead of the existing sakana/* canonical models; desktop model selection then gets reasoning: null from acpListProviderModels and hides thinking controls for these reasoning-capable models.
Useful? React with 👍 / 👎.
37bb1c0 to
d13eeeb
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d13eeebd55
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| } | ||
| ], | ||
| "headers": null, | ||
| "timeout_seconds": null, |
There was a problem hiding this comment.
Raise the Sakana request timeout
When a user runs fugu-ultra on long or complex tasks, leaving timeout_seconds as null falls back to the declarative OpenAI default of 600 seconds in from_declarative_config, and ApiClient::with_timeout_and_tls applies that as a reqwest request timeout. Sakana's own get-started guide warns that complex fugu-ultra tasks may need increased client-side timeouts and their Codex provider example hardens streams for up to 2h, so this bundled provider can abort valid long-running Fugu turns at 10 minutes unless it sets a much larger timeout.
Useful? React with 👍 / 👎.
| "headers": null, | ||
| "timeout_seconds": null, | ||
| "model_doc_link": "https://console.sakana.ai/models", | ||
| "preserves_thinking": true, |
There was a problem hiding this comment.
Map Sakana thinking effort into requests
Setting preserves_thinking only keeps returned thinking blocks in conversation history; it does not send Sakana's reasoning.effort. The OpenAI request builders only attach reasoning fields for model names matched by is_openai_responses_model (o*/gpt-5*) or explicit provider-specific mapping, so GOOSE_THINKING_EFFORT/model-picker choices for fugu and fugu-ultra are silently dropped even though Sakana documents only high and xhigh as supported effort levels for both models.
Useful? React with 👍 / 👎.
d13eeeb to
3b2e325
Compare
3b2e325 to
6b750f8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6b750f8c7f
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| "display_name": "Sakana AI", | ||
| "description": "Sakana Fugu multi-agent system delivered as one OpenAI-compatible model API", | ||
| "api_key_env": "SAKANA_API_KEY", | ||
| "base_url": "https://api.sakana.ai/v1", |
There was a problem hiding this comment.
Route Sakana requests through Responses
With this base_url and no explicit base_path, openai::from_declarative_config derives v1/chat/completions, and should_use_responses_api_for_provider will not switch for fugu/fugu-ultra because they are not OpenAI responses-model names. In Goose sessions that use tools or images, Sakana then runs over Chat Completions even though its model docs recommend /v1/responses for tool use, multimodal input, and reasoning/function-call management (https://console.sakana.ai/models); add a base_path of v1/responses or provider-specific routing so Fugu uses the recommended agent wire shape.
Useful? React with 👍 / 👎.
* origin/main: (24 commits) fix(session): create inventory tables atomically with schema version (#10586) fix(providers): rewrite oneOf to anyOf in tool schemas for OpenAI-compatible backends (#10571) fix(evals): report cache-aware Harbor costs (#10430) fix(acp): allow custom model as default for non-local providers (#10438) fix(config): require absolute goose path roots (#10454) chore(deps): bump astral-sh/setup-uv from 8.2.0 to 8.3.2 (#10541) fix(permissions): scope smart approval by request (#10457) fix(summon): preserve fixed subrecipe values (#10452) chore(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /documentation (#10506) fix(flatpak): bundle git so hermit can clone its package registry (#10511) feat(hooks): pass working_dir to the Stop hook context (#10296) chore(deps): bump actions/setup-java from 5.5.0 to 5.6.0 (#10540) chore(deps): bump actions/setup-node from 6 to 7 (#10539) chore(deps): bump EmbarkStudios/cargo-deny-action from 2.0.20 to 2.1.1 (#10542) chore(deps): bump gradle/actions/setup-gradle from 4.4.3 to 6.2.0 (#10543) Add declarative Sakana AI provider for the OpenAI-compatible Fugu API (#10357) fix(developer): expose AGENT_SESSION_ID to shell commands (#10428) Clean up stale documentation audit findings (#10114) Restore model interactions viewer (#10205) fix(acp): forward image content chunks to client during live session (#10485) ... # Conflicts: # crates/goose/src/session/session_manager.rs
Summary
Simple one. Adds https://sakana.ai which is one I have been testing out, as a declarative provider.
Testing
Manual test
Related Issues
N/A
Screenshots/Demos (for UX changes)