unsloth/studio/backend
Daniel Han 9807cdf039 Studio: surface per-call web_search sources, full shell command, exit_code, transparent image overlay
Backend (external_provider.py):
- Request `include=[web_search_call.action.sources, web_search_call.results]`
  so each web_search card has its consulted URLs and (for reasoning
  models) the search-result snippets attached. Format them as the
  Title/URL/Snippet blocks the frontend's source-pill parser already
  understands, so every search card now surfaces real sources instead
  of repeating the trigger label.
- _format_shell_output now always emits exit_code (not just non-zero),
  reads stdout from `stdout`/`text`/`content` for tolerance across
  shell_call_output revisions, and dumps the raw entry dict as a
  fallback when no recognised text fields are present so the user
  still sees what OpenAI sent. Drops the literal "(no output)" string
  in favour of an empty result; the frontend renders a friendlier
  placeholder.

Frontend:
- tool-ui-code-execution.tsx: expanded card now renders the full
  untruncated command in its own labelled block above the output, so
  long heredocs clipped in the trigger are reachable. Empty output is
  rendered as italic "Command completed with no output." instead of
  showing nothing.
- tool-ui-web-search.tsx: removed the <pre> fallback that just echoed
  the trigger label back; non-search cards now link to the page URL
  when no sources are present.
- thread.tsx: image overlay container is now transparent (no muted
  background, no border ring); the image itself carries the rounded
  corners and the buttons float over its top-right corner so no
  yellow frame appears around narrow images.

Tests: 2 new web_search source-formatting tests; 66/66 pass.
2026-05-26 12:53:58 +00:00
..
assets Add Qwen3.6 inference defaults for Studio (#5065) 2026-04-16 11:42:42 -07:00
auth studio: security and hardening pass (auth rate-limit, sandbox, path containment, schema validation, headers) (#5375) 2026-05-13 06:12:18 -07:00
core Studio: surface per-call web_search sources, full shell command, exit_code, transparent image overlay 2026-05-26 12:53:58 +00:00
loggers Studio: stop truncating long log lines as suspected base64 (#5335) 2026-05-08 13:07:18 +04:00
models Recipe Studio local model selector (#5769) 2026-05-26 02:37:24 -07:00
plugins fix(gh_client): fail fast on 401/403 auth errors instead of retrying forever (#5325) (#5329) 2026-05-08 21:57:41 +04:00
requirements ci: broaden Linux + narrow Windows llama.cpp runtime patterns + trim #5741 comments (#5746) 2026-05-23 21:48:12 -07:00
routes Recipe Studio local model selector (#5769) 2026-05-26 02:37:24 -07:00
state unsloth run: add --enable-tools/--disable-tools server-side tool policy (#5277) 2026-05-05 12:45:15 +04:00
storage Studio: persist chat history in backend storage (#5272) 2026-05-22 06:18:05 -07:00
tests Studio: surface per-call web_search sources, full shell command, exit_code, transparent image overlay 2026-05-26 12:53:58 +00:00
utils Studio: tools, thinking blocks, code execution and web search for safetensors (#5520) 2026-05-19 06:30:17 -07:00
__init__.py Final cleanup 2026-03-12 18:28:04 +00:00
_platform_compat.py Fix Studio crash on Anaconda/conda-forge Python (#4484) 2026-03-22 05:36:55 -07:00
colab.py Fix/studio colab button message: Add fallback message for Colab Studio button when proxy URL fails (#4866) 2026-04-05 21:57:45 -07:00
main.py Studio: stop seeded admin to cross-origin callers (#5739) 2026-05-25 23:36:51 -07:00
run.py Studio: stop hint, Uvicorn log rename, reachability check + Mac UI CI retry hardening (#5503) 2026-05-17 07:44:06 -07:00
startup_banner.py Studio: stop hint, Uvicorn log rename, reachability check + Mac UI CI retry hardening (#5503) 2026-05-17 07:44:06 -07:00