Commit History
-
Add dataset uploads to Hub (#255)
Unverified signature* Add dataset uploads to Hub Co-authored-by: OpenAI Codex <codex@openai.com> * Address dataset upload review items Co-authored-by: OpenAI Codex <codex@openai.com> * Show dataset upload progress Co-authored-by: OpenAI Codex <codex@openai.com> * Move dataset upload button to composer corner Co-authored-by: OpenAI Codex <codex@openai.com> * Fix dataset upload file handoff Co-authored-by: OpenAI Codex <codex@openai.com> * Show upload alerts below composer Co-authored-by: OpenAI Codex <codex@openai.com> * Improve dataset upload errors and chips Co-authored-by: OpenAI Codex <codex@openai.com> * Link dataset chips to repo Co-authored-by: OpenAI Codex <codex@openai.com> * Expose dataset uploads as configs Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>2b4c539
-
Fix stale tool error badges (#247)
Unverified signature* Fix GPU sandbox hardware OAuth failure Co-authored-by: OpenAI Codex <codex@openai.com> * Address sandbox sleep-time review Co-authored-by: OpenAI Codex <codex@openai.com> * Fix stale tool error badges Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>beb0c92
-
Fix Pro entitlement checks (#239)
Unverified signature* Fix Pro entitlement checks Normalize HF Pro and paid org plan detection, allow premium model selection with quota enforcement, and clarify HF Jobs credit billing copy. Co-authored-by: OpenAI Codex <codex@openai.com> * Limit premium quota to personal Pro Ignore org membership for premium-model quota so users need personal HF Pro for the higher cap, while dev mode uses the Pro tier for local testing. Co-authored-by: OpenAI Codex <codex@openai.com> * Scope model switch errors to model picker Show model switch failures through local ChatInput state instead of rendering the shared agent error field globally. Co-authored-by: OpenAI Codex <codex@openai.com> * Restrict premium quota detection to Pro accounts Co-authored-by: OpenAI Codex <codex@openai.com> * Use boolean Pro signal for premium quota Co-authored-by: OpenAI Codex <codex@openai.com> * Use documented isPro field for quota tier Co-authored-by: OpenAI Codex <codex@openai.com> * Remove dead global chat error state Co-…d7637ba
-
Fallback to free model for gated defaults (#208)
Unverified signature* Fallback to free model for gated defaults Co-authored-by: OpenAI Codex <codex@openai.com> * Cover explicit gated model access for HF users Co-authored-by: OpenAI Codex <codex@openai.com> * Seed model picker from created session Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>092f909 -
Auto-start CPU sandboxes for sessions (#200)
Unverified signature* Auto-start CPU sandboxes for sessions Co-authored-by: Codex <codex@openai.com> * Retry sandbox runtime visibility checks Co-authored-by: Codex <codex@openai.com> * Stabilize auto CPU sandbox creation Co-authored-by: OpenAI Codex <codex@openai.com> * Address sandbox PR review comments Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: Codex <codex@openai.com>8615c28 -
Add session YOLO auto-approval budget (#201)
Unverified signature* Add session YOLO auto-approval budget Co-authored-by: Codex <codex@openai.com> * Address YOLO approval review feedback Co-authored-by: Codex <codex@openai.com> --------- Co-authored-by: Codex <codex@openai.com>77324b8
-
Add DeepSeek V4 Pro model option (#189)
Unverified signature* Add DeepSeek V4 Pro model option Co-authored-by: Codex <codex@openai.com> * Remove DeepSeek feature tests Co-authored-by: Codex <codex@openai.com> --------- Co-authored-by: Codex <codex@openai.com>1b922dd -
Make sandboxes private (#195)
Unverified signature* Make sandbox Spaces private Co-authored-by: Codex <codex@openai.com> * Remove legacy sandbox auth fallback Co-authored-by: Codex <codex@openai.com> * Address sandbox privacy review comments Co-authored-by: Codex <codex@openai.com> --------- Co-authored-by: Codex <codex@openai.com>15d6506 -
Expose OpenAI models in the UI & make Claude model picker configurable (#183)
Unverified signature* Add agent dev server notes * Make frontend model configurable * Support env-selected frontend models * Use Claude-specific model env var * Add GPT-5.5 to web model picker * Gate GPT-5.5 as a premium model * Avoid duplicate session model fetch * Remove legacy Claude quota aliases * Document GitHub CLI PR body workflow * Gate only deployed paid model IDs * Nits5db99fa
-
Replace orange JobsUpgradeDialog with sleek full-pane billing screen (#175)
Aksel Joonas ReediUnverified signature- Drop the HF-orange gradient bar, orange icon chip, and orange button. Card now uses --panel/--border with a single high-contrast --text/--bg primary button and a ghost secondary, matching the rest of the UI. - Render as a full-pane fixed overlay rather than a small Dialog so the chat is genuinely blocked while billing is required — the agent's previous turn already ended on `tool_state_change(billing_required)`, so the screen acts as the explicit "paused, waiting on you" state. - Always show both actions side-by-side: "Add credits" (opens the HF billing tab + arms the visibility-change auto-retry in ChatInput) and "I've added credits" (calls the existing onRetry → resume message). Removes the Topped-up? mode-flip; the visibility-change handler in ChatInput continues to fire on tab refocus, unchanged. - Keep the component name and props so ChatInput needs no changes.c4ac4e6 -
Bill HF Jobs by namespace credits, drop Pro and org-join gating (#172)
Aksel Joonas ReediUnverified signature* Bill HF Jobs by namespace credits, drop Pro and org-join gating - Drop the Pro/Team subscription pre-check on hf_jobs. Any namespace the caller belongs to is eligible; HF returns a billing error at job creation time if the wallet is empty, which the agent surfaces as a "top up to launch" dialog pointing at /settings/billing. - Remove the "Join ML Agent Explorers" onboarding step. The org-join hook, /auth/org-membership endpoint, and the OAuth orgIds suggestion are gone. - Rework JobsUpgradeDialog: namespace picker shows all eligible accounts/orgs with avatars + select rings; billing mode opens the HF billing page; "Skip this tool call" stays available for both. - Backend pre-flight only forces the picker when the caller has multiple eligible namespaces; single-namespace users default to their personal account silently. - jobs_tool now catches HfHubHTTPError, detects billing failures by pattern + 402 status, emits a tool_state_change(state=billing_required) so t…bed4e38 -
Persist Space sessions in MongoDB (#170)
Aksel Joonas ReediUnverified signature* Persist Space sessions across backend restarts The hosted Space lost active conversations because sessions, approval state, event streams, and Claude quotas only lived in process memory. This adds a shared optional Mongo store for frontend sessions while keeping local and CLI runs on the no-op/local path when Mongo is absent. Constraint: Space deployment needs durable state without making PyPI/local CLI users configure Mongo. Constraint: Frontend deletes must hide sessions with a visibility tag, not erase traces needed for recovery or SFT export. Rejected: Restore every active session at startup | large user counts would create a thundering herd after deploys. Rejected: Store one giant session document | Mongo document limits make per-message snapshot docs safer. Confidence: medium Scope-risk: broad Directive: Keep session_messages as compactable runtime snapshots and session_trace_messages/session_events as append-only raw traces; do not collapse them into one collection wit…d9d9785
-
Make onboarding screen scroll when it overflows the viewport (#165)
Aksel Joonas ReediUnverified signature* Make onboarding screen scroll when it overflows the viewport The welcome screen used a flex column with justify-content: center and no overflow handling, so on short viewports (1366×768 Chrome was the reported case) the bottom of the checklist — including the "Start session" CTA — got clipped with no way for the user to scroll to it. Wrap the children in an inner Box and use the margin: auto pattern: the outer container scrolls, the inner box centers when the viewport has room and top-aligns when it doesn't. Reported in smolagents/ml-intern Space discussion #19. * Reindent welcome screen children under inner Box21aa9ca -
Remember the chosen jobs namespace and clean up the picker dialog (#162)
Aksel Joonas ReediUnverified signatureWhen a user has paid orgs but no Pro subscription, hf_jobs needs an explicit namespace. The picker fired on every tool call — even after the user already chose one. Persist the selection in localStorage and auto-attach it to subsequent hf_jobs approvals; if the saved namespace becomes invalid (e.g. left the org), backend 400 surfaces a typed error that clears the preference and reopens the picker. UI is rewritten to match ClaudeCapDialog: tighter copy, single dropdown without the redundant "Eligible namespaces" panel, "Continue" + "Skip this tool call" actions.25d8236 -
Embed trackio dashboard in chat for jobs and sandboxes (#161)
Aksel Joonas ReediUnverified signature* Embed trackio dashboard in chat for jobs and sandboxes Wires `trackio_space_id` / `trackio_project` through hf_jobs and sandbox_create as optional tool args, then renders the resulting dashboard inline as an embedded iframe in the chat. The plumbing turned out to need four pieces, not two: 1. Inject TRACKIO_SPACE_ID / TRACKIO_PROJECT into job + sandbox env. 2. Surface the values in tool_state_change so the frontend can render the embed when the tool call is in flight. 3. Pre-seed the Space with our own README/requirements/app.py — without this, trackio's init() against an existing empty Space leaves the iframe stuck on the default Gradio template. We omit `hf_oauth: true` from the seeded README so the embed renders without a sign-in click; per-user privacy comes from HF namespace ownership. 4. Mount the metrics bucket on the dashboard Space at /data and set TRACKIO_DIR / TRACKIO_BUCKET_ID. trackio.init() in the job creates the bucket but o…6131fc8 -
feat: add support to open links in new tab (#76)
Darshan Thakare +1: Aksel Joonas ReediUnverified signatureCo-authored-by: Aksel Joonas Reedi <125026660+akseljoonas@users.noreply.github.com>bce8a45
-
Run jobs under user or org accounts with upgrade / org-pick UX (#132)
Aksel Joonas ReediUnverified signature* agent/core/agent_loop.py: jobs access rewiring * agent/core/telemetry.py: jobs access rewiring * agent/tools/jobs_tool.py: jobs access rewiring * backend/dependencies.py: jobs access rewiring * backend/models.py: jobs access rewiring * backend/routes/agent.py: jobs access rewiring * frontend/src/components/Chat/ChatInput.tsx: jobs access rewiring * frontend/src/components/ClaudeCapDialog.tsx: jobs access rewiring * frontend/src/components/SessionChat.tsx: jobs access rewiring * frontend/src/hooks/useAgentChat.ts: jobs access rewiring * frontend/src/lib/sse-chat-transport.ts: jobs access rewiring * frontend/src/store/agentStore.ts: jobs access rewiring * frontend/src/types/agent.ts: jobs access rewiring * scripts/build_kpis.py: jobs access rewiring * tests/unit/test_build_kpis.py: jobs access rewiring * agent/core/hf_access.py: jobs access rewiring * frontend/src/components/JobsUpgradeDialog.tsx: jobs access rewiring * tests/unit/test_hf_access.py: jobs access rewirin…ff8c636
-
Fix CLI rendering corruption and split CLI/frontend model defaults (#121)
Aksel Joonas ReediUnverified signature* Stabilize CLI rendering and make surface defaults explicit The interactive CLI was interleaving live sub-agent redraws with streamed markdown output, which corrupted ANSI rendering and leaked raw control sequences into the terminal. The CLI and web app also shared one default model config even though they need different Anthropic routing defaults. Constraint: CLI default must use direct Anthropic credentials while web sessions must default to Bedrock Anthropic Constraint: Interactive terminal output must remain readable while sub-agent progress is live Rejected: Single shared config file with runtime overrides | keeps ownership of defaults implicit across surfaces Rejected: Keep background redraw ticker | concurrent terminal writers still corrupt streamed output Confidence: high Scope-risk: moderate Reversibility: clean Directive: Keep CLI and frontend default models in separate config files unless both surfaces intentionally converge again Tested: python -m compileall agent backen…3eec386
-
feat(observability)
Aksel Joonas ReediUnverified signature2a2e170
-
feat(quota): daily Opus cap + HF-org gate + cap dialog (#72)
Aksel Joonas ReediUnverified signature540437a
-
Restore expired sessions via summary-based catch-up (#52)
Aksel Joonas ReediUnverified signatureWhen the backend loses a session (typically: HF Space restarted), the chat now shows a small inline banner instead of silently erroring: Where were we? Let me skim the conversation so far and pick up right where we left off — or we can start something new. [ Catch me up ] [ Start fresh ] Flow, in one pass: * Frontend stashes the raw backend messages in localStorage on every mount-hydrate and turn_complete. When the backend 404s for the session id, the SSE transport and the mount effect both fire onSessionDead → the session is flagged `expired` in sessionStore; the sidebar marks it "needs a catch-up". * Catch me up → POST /api/session/restore-summary with the cached messages. Backend creates a fresh session, runs the existing summarizer (factored into summarize_messages() and shared with in-session compaction) with a restore-specific prompt that preserves the tool-call trail, and seeds the new session with that summary wrapped in a [SYS…962191f -
Fix parallel-research display: per-call stats in CLI and web UI (#49)
Aksel Joonas Reedi +1: lee101 Unverified signatureWhen multiple research sub-agents ran concurrently, the CLI collapsed them into a single flickering slot and every web-UI tool card showed the aggregate across all agents — so 3 parallel calls looked like 1. CLI (agent/utils/terminal_display.py): - Replace the global SubAgentDisplay singleton with SubAgentDisplayManager that tracks each agent by agent_id and renders one block per agent with independent (tool count · tokens · elapsed). - 4 rolling tool-call lines per agent (was 2). - When 2+ agents are live, switch to a compact one-line-per-agent layout (label + stats + most-recent tool). Detailed 4-line rolling view only when a single agent is active. Keeps the live region small enough to fit on one terminal page so cursor-up/erase doesn't drift when content would otherwise scroll into scrollback. - Clip every live-region line to terminal width (ANSI-aware) so a wrapped line can't corrupt the cursor-up math on narrow terminals. - On completion, erase the live block and f…5ab7c4e -
Scope model selection per session instead of globally
Sessions now clone the config on creation, so switching model in one tab only affects that tab. SessionInfo carries a `model` field the selector reads on session change; writes go to a new POST /api/session/{id}/model endpoint. The global /api/config/model route still controls the default for new sessions. Unblocks running Claude in one chat and GLM 5.1 in another concurrently.bf564b6 -
Drop 'Via' prefix from provider subtitles
f0db8ab -
Show default provider under each HF-routed model in selector
Matches the 'Via Fireworks / Via Novita' convention the selector already had before the bare-id switch. Providers taken from the router's current :fastest ordering (live, tool-capable): Novita for MiniMax M2.7 and Kimi K2.6, Together for GLM 5.1.4c14bc5 -
Use model maker as subtitle in selector, not routing mechanic
'HF auto-routed' read as a plumbing detail. Matching the Claude row's 'Anthropic' convention, show who built the model — MiniMax, Moonshot AI, Z.ai — which is what users actually recognize.84d6f33 -
Route HF inference through /v1 auto-router + add reasoning_effort knob
Users paste bare HF model ids (MiniMaxAI/MiniMax-M2.7, moonshotai/Kimi-K2.6) with an optional :fastest|cheapest|preferred|<provider> suffix; the router picks a provider and handles failover. /model does a live preflight against /v1/models and prints providers, pricing, context, tool support — warn-and- allow for unknowns with fuzzy suggestions. Friendly messages replace LiteLLM's raw traceback for model/provider mismatches, and the noisy 'Give Feedback' banner is suppressed. Adds a reasoning_effort config + /effort command (default high). OpenAI and Anthropic get the top-level param natively; HF router gets it via extra_body with minimal->low normalization for models like MiniMax M2 that require reasoning. Frontend + backend model selectors updated to the bare-id format.0a9e96d
-
Rename CLI entry and Space assets from ml-agent to ml-intern
ae4a534
-
Rename product to ML Intern in frontend
Update page title, app header, welcome screen title, and the iframe 'Open' step labels from ML Agent to ML Intern.658b046 -
Rebrand frontend to ML Agent
Replace HF Agent branding and Hugging Face logo with ML Agent and the smolagents icon across the welcome screen, app header, favicon, and page title. Refresh the welcome screen tagline.a67b60f
-
4 steps shown
fdc5e27
-
Fix stuck 'Waiting for approval' spinner and improve table rendering
Clear waiting-approval activity status immediately when user approves, instead of waiting for the backend's tool_state_change event over SSE. Improve markdown table styles: horizontal overflow scroll, header background, better padding, and alternating row striping.70d2074 -
Bump dependency minimum versions to fix security vulnerabilities
- litellm >=1.83.0 (was >=1.0.0) - fastmcp >=3.2.0 (was >=2.4.0) - requests >=2.33.0 (was >=2.32.5) - npm audit fix for frontend transitive deps0bdb50e
-
Fix build: remove unused isRunning variable
d3076e4
-
Show fun running messages for all tools including research
10a7aa2 -
Fix missing detail in research step labels for truncated args
Add truncated JSON value extraction fallback so paper search queries that get cut at 80 chars still show detail text. Add missing operation labels: citation_graph, snippet_search, recommend.424559b -
Persist research subtool steps across page refresh
Save research steps and stats to localStorage on every update, restore atomically with isProcessing on mount so the rolling display survives page refresh during active research.ccfb504 -
Add Semantic Scholar integration: citation graph, filtered search, snippet search, recommendations
Extends hf_papers with S2 backend: - citation_graph: references + citations with influence flags and intents - Smart search routing: date/category/citation filters via S2 bulk search - snippet_search: semantic full-text passage search across 12M+ papers - recommend: single/multi-paper recommendations with pos/neg examples - paper_details enriched with citation count, TL;DR, fields of study - Rate-limited S2 client with 2 retries on 429/5xx - Research prompt: paper analysis checklist, new tool guidance - Frontend shimmer labels for new operationsd81613f -
Better deletion flow (#12)
- Better deletion flow (7390833c6455aef38a9c9abd7f36d754efbfc066)210a259 -
Show 4 rolling subtool steps in research display
d2636b9 -
Latest ui fixes (#11)
- Latest ui fixes (d9566205a4e89e9ebb3b7e498c11f4af642106cb)219e6a7 -
Add delete confirmation dialog and sidebar spacing tweaks
Show a confirmation dialog before deleting a conversation. Add spacing between sidebar chat items and below the section header. Show fun placeholder in output panel for running tools.bdefe29 -
Fix stale approval dialog reappearing after page refresh
The message persist effect only triggered on message count changes, so approval state updates (which modify tool state within existing messages) were never saved to localStorage. On refresh, stale approval-requested state was restored. Now saves messages immediately after approval submission.9b1773a -
Show fun placeholder instead of raw args for running tools
When clicking a tool that's still executing, the output panel was showing the tool's input arguments as JSON. Now shows a random playful message while the tool runs.f856047 -
Fix message disappearing and duplicate rendering bugs (#10)
- Fix message disappearing and duplicate rendering bugs (d95f6ccfe4ac3073e3064070e9b5e7097d435d35)0b311bb -
Restore localStorage org detection for iframe onboarding
Iframe users have no auth cookie, so backend polling can't check org membership. Restores visibilitychange + localStorage tracking for the iframe path while keeping backend polling for direct access.85274e0 -
Replace multi-screen onboarding with single checklist view
Replaces the 4 separate onboarding screens with a unified checklist showing all steps (sign in, join org, start session) with live status. Adds org membership polling via new GET /auth/org-membership endpoint that reuses existing check_org_membership(). Join link opens as popup and auto-closes when membership is detected.6d7f53f -
Add message edit and regenerate from any point in conversation
Backend: add truncate_to_user_message() on ContextManager, POST /api/truncate/{session_id} endpoint, and session_manager.truncate() helper to slice conversation history to before a given user message. Frontend: add editAndRegenerate callback in useAgentChat that truncates backend + frontend messages then resubmits via existing chat flow. UserMessage gains an inline edit mode with pencil icon on hover, TextField for editing, Enter/Escape to confirm/cancel.0611031 -
Redesign research subagent display with live stats and rolling steps
- Add researchStats (toolCount, tokenCount, elapsed) to session state - Parse tokens:/tools: log events into stats instead of step list - Show live stats in chip (running · N tools · Xk tokens · Ys) - Rolling 2-line window of sub-tool calls, hidden on completion - Format step labels with specifics (dataset name, paper query, etc.) - Handle truncated JSON args from backend via regex fallback - Fix stale tool spinners on page reload (coerce to completed) - Clean activity status bar labels for research tool logs901a405 -
Fix session title only updating on the very first user message
2e60856