Releases: ultralytics/llm
v0.1.8 - Add tables (#72)
🌟 Summary
Ultralytics Chat v0.1.8 makes AI responses much easier to read by adding proper Markdown list and table rendering, plus polished styling for structured content 🧾✨
📊 Key Changes
-
📝 Better list formatting in chat messages
- Adds consistent spacing and indentation for unordered and ordered lists (
ul,ol,li). - Makes bullet and numbered lists render cleanly inside the chat UI.
- Adds consistent spacing and indentation for unordered and ordered lists (
-
📋 Full Markdown table support
- Extends the
renderMarkdown()parser to detect Markdown-style rows like| col1 | col2 |. - Ignores separator lines such as
|---|---|so only real data is rendered. - Automatically wraps tables in a scrollable container (
.ult-table-wrap) for wide content.
- Extends the
-
🎨 Table-specific styling for readability
- Restores native table element behavior (
all: revert) to avoid conflicts with global CSS resets. - Adds borders, padding, and font sizing to table headers and cells.
- Ensures tables remain usable on smaller screens via horizontal scrolling when needed.
- Restores native table element behavior (
-
♻️ Updated bundled script
- Regenerates
js/chat.min.jsso all new list and table parsing/styling logic is included in the production widget.
- Regenerates
🎯 Purpose & Impact
-
✅ Clearer, more structured answers
- Technical content—like parameter summaries, comparison lists, or configuration steps—now appears as clean bullets or numbered lists, improving scan-ability.
-
📚 Better documentation-style responses
- Tables (for model comparisons, settings, benchmarks, etc.) now render correctly, making complex information easier to understand at a glance.
-
📱 Improved UX across devices
- Scrollable table wrappers prevent layout breaks on narrow screens while keeping all data accessible.
-
🧩 More robust embeddable widget
- By handling lists and tables in the core Markdown pipeline and CSS, sites embedding Ultralytics Chat get consistent, professional formatting with no extra setup.
What's Changed
- Add tables by @glenn-jocher in #72
Full Changelog: v0.1.7...v0.1.8
v0.1.7 - Isolate chat widget styles from host page CSS (#71)
🌟 Summary
v0.1.7 makes Ultralytics Chat embeds look consistent and professional across all host websites by isolating widget styles and improving Markdown heading rendering ✨💬
📊 Key Changes
-
🧼 Isolated chat widget CSS from host pages
- Added
all: initialand a defaultfont-familyto.ult-chat-modalso external site CSS (e.g. Webflow, custom themes) no longer overrides the chat UI.
- Added
-
📝 Improved Markdown heading styling in messages
- Added explicit styles for
.ult-message h1,h2, andh3(font size, weight, spacing, line-height, colors). - Ensures headings at the start of a message display with correct margins.
- Added explicit styles for
-
🔧 Minor internal cleanup
- Tidied up the
updateFooter()implementation. - Regenerated the minified bundle
js/chat.min.jsto include these changes.
- Tidied up the
🎯 Purpose & Impact
-
🎨 Consistent appearance on any site
- Prevents host-page CSS from breaking or distorting the chat modal (fonts, spacing, colors), leading to a stable, predictable UI when embedding Ultralytics Chat.
-
📖 More readable answers
- Structured replies with headings now look clear and well‑hierarchized, improving scanability for longer, documentation-style answers.
-
🧩 Easier embeddability for developers
- Reduces the need for workaround CSS when integrating Ultralytics Chat into complex websites or CMS platforms, saving integration and debugging time.
What's Changed
- Isolate chat widget styles from host page CSS by @glenn-jocher in #71
Full Changelog: v0.1.6...v0.1.7
v0.1.6 - Fix session persistence (#70)
🌟 Summary
v0.1.6 refines Ultralytics Chat sessions and footer stats so conversations behave more predictably and message counts are clearer and more meaningful. ✨
📊 Key Changes
-
🧵 Simplified session handling
- Session IDs are no longer stored in
localStorage. - Each page load now gets a fresh session ID from the server.
clearSession()only resets the in-memory session (no more browser storage handling).
- Session IDs are no longer stored in
-
📈 Clearer footer message stats
- Replaces old footer fields:
serverMessageCount➜ now tracked astotalUserMessages.contextOptimized➜ removed in favor of a clearer, count-based view.
- New counters:
totalUserMessages: total number of user messages in the session.activeUserMessages: number of user messages still “active” in the context after pruning/summarization.
- Footer now shows:
"11 messages"when nothing is pruned, or"51 messages (11 active)"when older messages have been pruned.
- Removes the
"· optimized"label and related styling.
- Replaces old footer fields:
-
🧠 New server headers for accurate counts
- Client now reads:
X-Total-User-MessagesX-Active-User-Messages
- These values drive the footer display so it matches what the server is actually using.
- Client now reads:
🎯 Purpose & Impact
-
✅ More reliable sessions
- Avoids stale or broken sessions caused by old IDs sticking around in
localStorage. - Each load starts “clean” while still letting the backend manage session continuity as needed.
- Avoids stale or broken sessions caused by old IDs sticking around in
-
👀 Stats that actually reflect your conversation
- Users see how many of their messages exist in the session and how many are still active, making pruning behavior more transparent.
- The footer is less “magic” and more informative, especially for long chats.
-
🧩 Cleaner, easier-to-maintain client code
- Removing local storage logic and the
contextOptimizedflag reduces complexity and potential bugs. - Relying on explicit server headers (
X-Total-User-Messages,X-Active-User-Messages) creates a clearer contract between frontend and backend.
- Removing local storage logic and the
What's Changed
- Fix session persistence by @glenn-jocher in #70
Full Changelog: v0.1.5...v0.1.6
v0.1.5 - Summarize long sessions (#69)
🌟 Summary
v0.1.5 makes Ultralytics Chat feel smarter and more polished: you now see live conversation stats for long chats, plus a refreshed, unified visual theme and smoother, more accessible interactions. 💬✨
📊 Key Changes
-
Live conversation stats & long‑session awareness 💡
- New footer indicators show:
- How many messages are in the current conversation (
X messages). - Whether older context has been summarized/optimized (
· optimizedbadge).
- How many messages are in the current conversation (
- Tracks server‑side message count (
serverMessageCount) and optimization status (contextOptimized) so the UI stays in sync with backend session handling.
- New footer indicators show:
-
Smarter chat footer behavior 🦶
- Footer now dynamically updates:
- On every new response.
- When a session is cleared (stats reset to zero).
- Always includes “Powered by Ultralytics Chat” with a link to the GitHub repo.
- Footer now dynamically updates:
-
Unified, theme‑aware color system 🎨
- New centralized CSS variables (
--ult-*) control:- Backgrounds, borders, text, success colors.
- Pill + modal styling, tool badges, code blocks, and hover states.
- Light/dark mode is now driven mostly by variables instead of duplicated CSS blocks.
- New centralized CSS variables (
-
Cleaner, safer HTML rendering & links 🔒
- More consistent use of
escapeHtml()for dynamic content (titles, URLs, snippets, etc.). - Auto‑linked URLs now escape quotes to prevent malformed attributes.
- More consistent use of
-
Improved UX, accessibility & keyboard support ♿⌨️
Cmd+K(macOS) andCtrl+K(Windows/Linux) can open the chat, with properpreventDefault().:focus-visiblestyling for pill, icon buttons, and example buttons improves keyboard navigation.- Smooth scroll behavior in the messages panel and simplified scroll tracking logic.
-
Widget internals & code cleanup 🧼
- Event listeners now remember options (e.g.,
{ passive: true }) and clean up correctly on destroy. - Tooltip timers and copy‑button timers simplified with consistent
clearTimeoutusage. - Retry logic for “Try again” uses modern
findLastIndexlogic, making it more robust. - Unified color palette removed large, redundant dark‑mode CSS blocks.
- Event listeners now remember options (e.g.,
🎯 Purpose & Impact
-
Better visibility into long chats 📏
- The message counter and “optimized” badge make it clear when your conversation is getting long and when the system has summarized older messages to stay efficient.
- This builds trust: users can see that context is being managed, not mysteriously truncated.
-
More professional, brand‑ready UI 🖼️
- Centralized color variables make it easier for teams to:
- Match branding across sites.
- Tweak light/dark behavior in one place.
- The widget will look more consistent across themes and devices with fewer edge‑case styling bugs.
- Centralized color variables make it easier for teams to:
-
Smoother, more accessible interactions 🌍
- Keyboard users benefit from clear focus rings and reliable shortcuts.
- Mobile users see refined behavior (e.g., better modal behavior, smoother scrolling).
- Cleaner event handling and DOM management reduce the risk of memory leaks or odd UI glitches when embedding the widget on complex pages.
-
Safer and more robust embedding in production sites 🛡️
- Stricter HTML escaping and URL handling reduce the risk of broken markup or security issues when the model outputs rich text and links.
- Improved footer + state synchronization keeps UI and server session state aligned, which is especially important for high‑traffic or long‑running chat sessions.
What's Changed
- Simplify code by @glenn-jocher in #67
- Unified color palette by @glenn-jocher in #68
- Summarize long sessions by @glenn-jocher in #69
Full Changelog: v0.1.4...v0.1.5
v0.1.4 - Use AnimationFrame (#66)
🌟 Summary
v0.1.4 makes the Ultralytics Chat widget feel smoother and more polished, especially on mobile devices and during streaming AI responses. 🚀
📊 Key Changes
-
📱 Mobile chat modal CSS cleanup
- Merged duplicate
.ult-chat-modal.openrules into a single, consistent declaration. - Ensures that opacity, transform, display, flex layout, and overflow are applied together for the mobile chat modal.
- Merged duplicate
-
⚡ Streaming render optimization with
requestAnimationFrame- Swapped out
setTimeout(..., 30)forrequestAnimationFrame(...)when updating streaming assistant messages. - Replaced
clearTimeoutwithcancelAnimationFrameto correctly cancel pending frame updates. - Updated both
chat.jsandchat.min.jsso the optimized behavior is consistent in production builds.
- Swapped out
🎯 Purpose & Impact
-
📲 More reliable and consistent mobile experience
- The chat modal now opens using a single CSS rule on small screens, reducing layout glitches and making open/close transitions more predictable on phones and tablets.
-
🧵 Smoother, more responsive streaming messages
- Using
requestAnimationFramealigns message updates with the browser’s paint cycle, reducing jank and improving perceived responsiveness while the assistant is typing. - Proper cancellation of animation frames prevents unnecessary work and potential flicker if the stream stops or the UI changes mid-update.
- Using
-
🛠️ Cleaner, easier-to-maintain code
- Consolidated styles and unified render logic make future tweaks to the chat widget’s behavior (especially on mobile) less error-prone for developers.
What's Changed
- Use AnimationFrame by @glenn-jocher in #66
Full Changelog: v0.1.3...v0.1.4
v0.1.3 - Refactor (#64)
🌟 Summary
v0.1.3 modernizes the Ultralytics Chat web demo 🌐 with system-aware dark mode, smarter code highlighting, configurable tools, and a more robust, polished chat experience. ✨
📊 Key Changes
-
🌙 System dark mode (no more
data-theme)- The demo and embedded widget now follow the browser’s
prefers-color-schemeinstead of a customdata-themeattribute. - All dark styles are driven via media queries, making it easier to drop the widget into any site without theme wiring.
- FAQ updated to explain that dark mode now follows system settings and your CSS variables automatically.
- The demo and embedded widget now follow the browser’s
-
💡 Improved code highlighting with
highlight.js- Safer loader: prevents duplicate script injection and configures
highlight.jsonce. - Uses two separate themes:
- Light: GitHub style.
- Dark: GitHub Dark style.
- Themes are automatically selected via
prefers-color-scheme, so code blocks match your system theme out of the box.
- Safer loader: prevents duplicate script injection and configures
-
🧰 Configurable tools system (no hardcoded tools)
- Tools like
searchandgithubare now defined through atoolsconfiguration array instead of being hardcoded in the widget. - Tool dropdown and badges dynamically render based on this config, including names and icons.
- Safer logic guards against invalid tool IDs and keeps UI in sync when tools are added/removed.
- Tools like
-
🧭 Cleaner, more reliable UI behavior
- Reusable helpers for:
- Tooltips (
positionTooltip,hideTooltip) - Input focus & caret placement (
focusInput) - Auto-resizing textarea (
resizeInput,setInputValue) - Editable user messages toggling (
setUserMessagesEditable)
- Tooltips (
- Reduced DOM assumptions and added many
nullchecks to avoid errors when elements are missing. - Tooltip behavior unified across buttons, tool badges, and message actions, reducing code duplication.
- Reusable helpers for:
-
📱 Styling refactor & dark-mode CSS consolidation
- Theme CSS variables are scoped more precisely to the chat elements (pill + modal) instead of global
:root. - Dark-mode styles for desktop and mobile are consolidated, easier to reason about, and rely entirely on media queries.
- Mobile-specific dark adjustments (borders, backgrounds) are handled in a dedicated
@media (prefers-color-scheme: dark) and (max-width:768px)block.
- Theme CSS variables are scoped more precisely to the chat elements (pill + modal) instead of global
-
🧹 Internal code cleanup & robustness
- Many functions now early-return if refs are missing (
refs.send,refs.toolsDropdown,refs.toolBadges, etc.), preventing runtime errors. - Streamlined message-edit lifecycle:
- While streaming: user messages are not editable.
- After streaming: they become editable again via a single helper.
- Centralized scrolling, markdown rendering, and highlight calls for more predictable rendering.
- Many functions now early-return if refs are missing (
🎯 Purpose & Impact
-
✅ Easier integration into any website
- Because dark mode and syntax themes now follow system settings, you don’t need to manage
data-themeor custom theme sync logic. - The widget becomes more “drop-in ready” for docs, blogs, and dashboards with existing dark/light modes.
- Because dark mode and syntax themes now follow system settings, you don’t need to manage
-
🎨 More consistent and readable code blocks
- Dual light/dark
highlight.jsthemes ensure code samples are always legible and on-brand with common GitHub-like styling. - Avoiding duplicate script and stylesheet loads makes the widget safer to embed on complex pages.
- Dual light/dark
-
🧩 More flexible tooling for product teams
- The new
toolsconfig allows you (or Ultralytics) to:- Enable/disable tools per deployment.
- Add new tools in the future without rewriting core UI logic.
- This paves the way for richer integrations (e.g., docs search, GitHub, future custom tools).
- The new
-
🛡️ More robust user experience
- Fewer edge-case crashes from missing elements or race conditions around tool badges and tooltips.
- Cleaner handling of input resizing and focus improves usability, especially on mobile and during long conversations.
-
🚀 Foundation for future features
- The refactor by @glenn-jocher sets up a clearer structure for adding new tools, themes, and behaviors, making future releases faster and less error-prone.
What's Changed
- Refactor by @glenn-jocher in #64
Full Changelog: v0.1.2...v0.1.3
v0.1.2 - Add tool use (#63)
🌟 Summary
v0.1.2 turns Ultralytics Chat into a tool-aware assistant 🧰🤖, adding a visual tools picker (Search, GitHub) and wiring the selected tools into the chat API for smarter, context-driven replies.
📊 Key Changes
-
🧩 New “Tools” picker in the chat bar
- Replaces the old plain input+send row with a wrapped composer that includes:
- A
+Add tools button - A context-aware send button (hidden until needed)
- Areas for a tools dropdown and removable tool badges.
- A
- Replaces the old plain input+send row with a wrapped composer that includes:
-
🌐 Built-in tools: Search & GitHub
- A dropdown above the input lets you pick:
- Search (globe icon) – for documentation / web-style lookups
- GitHub (GitHub icon) – for code/repo-related help
- Selected tools are kept in
this.selectedToolsand shown as badges.
- A dropdown above the input lets you pick:
-
🏷️ Interactive tool badges under the input
- Each picked tool appears as a badge below the input:
- Shows its icon and name (e.g., Search, GitHub).
- On hover, the icon switches to an X with a “Remove” tooltip for quick removal.
- Smooth show/hide animations and deferred clearing avoid flicker.
- Each picked tool appears as a badge below the input:
-
📤 Tools now flow through to the backend
- When sending a message, if any tools are selected:
- The chat request body includes
tools: ["search", "github", ...].
- The chat request body includes
- This allows the backend to conditionally invoke search, GitHub, or other tools based on user selection.
- When sending a message, if any tools are selected:
-
🎛️ Smarter send button behavior
- Hidden by default when there is no text and no streaming.
- While:
- Streaming → shows a stop icon (square).
- User has typed text → shows a send icon (arrowUp).
- Improves clarity on when you can send or stop a response.
-
🌓 Updated input layout & styling (desktop + mobile)
- New
.ult-chat-input-wrapperwith unified background and radius. - Dark mode and mobile styles updated to match the new layout.
- The textarea now grows smoothly up to a capped height.
- New
🎯 Purpose & Impact
-
🧠 More controllable, tool-augmented AI
- Users can explicitly tell the assistant which tools it may use (Search, GitHub).
- Enables safer, more predictable behavior for future, more powerful tool integrations.
-
💬 Cleaner, less noisy composer
- Hiding the send button when it’s not usable makes the UI feel more focused and modern.
- The redesigned input area better supports future expansions (more tools, options, etc.).
-
🚀 Backend-ready for richer actions
- By sending
toolsin the request body, the release lays the groundwork for:- Smarter routing (e.g., use Search for docs questions, GitHub for repo questions).
- Future tools (e.g., HUB, issues, examples) without redesigning the UI again.
- By sending
-
🧑🤝🧑 Better UX for both new and power users
- New users get a simple, guided way to “add capabilities” to the chat.
- Power users can toggle tools quickly and understand at a glance which ones are active thanks to the badges and icons.
Overall, v0.1.2 is a foundational tools update: it doesn’t change core model behavior directly, but it unlocks tool-based workflows and significantly improves the chat input experience. ✨
What's Changed
- Add tool use by @glenn-jocher in #63
Full Changelog: v0.1.1...v0.1.2
v0.1.1 - Next.js compatibility (#62)
🌟 Summary
v0.1.1 makes UltralyticsChat easier to use in modern JavaScript apps by exporting it on globalThis, improving compatibility with frameworks like Next.js and various bundlers. 🚀
📊 Key Changes
- 🌍 Global export for UltralyticsChat
- Updated
js/chat.jsandjs/chat.min.jsto attach theUltralyticsChatclass toglobalThis.UltralyticsChatwhen available and not already defined:if (typeof globalThis !== "undefined" && !globalThis.UltralyticsChat) { globalThis.UltralyticsChat = UltralyticsChat; }
- Updated
- 🧱 No UI or behavior changes
- All chat UI, styling, and streaming behavior remain the same; only the exposure of the class in different environments changed.
🎯 Purpose & Impact
-
💻 Next.js & SSR-friendly
- By using
globalThisinstead of relying onwindow,UltralyticsChatcan be safely imported and used in frameworks that do server-side rendering (like Next.js), reducing runtime errors in non-browser contexts.
- By using
-
📦 Better bundler compatibility
- Works more smoothly with modern bundlers (Webpack, Vite, Rollup, etc.), since
globalThisis the standard cross-environment global object. This makes it easier to embed the chat widget in diverse JS setups.
- Works more smoothly with modern bundlers (Webpack, Vite, Rollup, etc.), since
-
🤝 Simpler integration for developers
- You can now reliably access the class as
globalThis.UltralyticsChatacross environments, which:- Reduces the need for custom shims or environment checks.
- Makes it easier to wrap or extend Ultralytics Chat within your own components and libraries.
- You can now reliably access the class as
-
🛡️ Safer global pollution
- The code only sets
globalThis.UltralyticsChatif it isn’t already defined, avoiding accidental overwrites in apps that already manage or wrap the chat object.
- The code only sets
What's Changed
- Next.js compatibility by @glenn-jocher in #62
Full Changelog: v0.1.0...v0.1.1
v0.1.0 - Fix biome errors (#61)
🌟 Summary
v0.1.0 is a polishing release for Ultralytics Chat’s web integration 🧠💬, focusing on safer JavaScript, cleaner markdown rendering, and better tooling/docs—without changing how the chat feels for end users.
📊 Key Changes
-
🧩 Safer chat frontend logic (PR #61 – prioritized)
- Replaces many
forEachcalls with explicitfor...ofand indexedforloops injs/chat.js. - Applies the same changes to the production build
js/chat.min.js. - Refactors markdown parsing to use clearly named match variables (like
unorderedListMatch,orderedListMatch,h1Match, etc.) instead of one reused variable.
- Replaces many
-
🧼 Biome linting & formatting setup (PR #58 + #60 + #61)
- Adds a
biome.jsonconfiguration to standardize JavaScript/TypeScript style (indentation, quotes, semicolons, lint rules). - Updates the GitHub formatting workflow to document Biome support (
biome: falsetoggle). - Cleans up JS code to satisfy Biome: template literals instead of string concatenation, improved
replacecallbacks, and consistent style.
- Adds a
-
🧪 More robust markdown & UI behavior in chat.js (PR #60 & #61)
- Uses template literals for layout values (e.g., tooltip positions, textarea heights, search snippets) for clearer code.
- Improves markdown rendering:
- Safer handling of inline code placeholders.
- Separate variables for different markdown structures (lists, headings, etc.).
- Refines tooltip and event listener management to be more explicit and predictable.
-
♿ Reduced-motion & UI tweaks in the web demo (PR #60)
- Eases the
prefers-reduced-motionCSS by removing!importantfrom animation/transition overrides. - Keeps button hover transforms disabled for reduced-motion users, but in a more standards-friendly way.
- Eases the
-
🧭 Public demo API naming adjustment (PR #60)
- Renames global helper functions in
examples/web/demo.htmlfromopenChat/openSearchto_openChat/_openSearchto avoid collisions with site code.
- Renames global helper functions in
-
📚 Documentation/example path fixes (PR #59)
- Updates README and API docs to point to the current browser demo file
examples/web/demo.htmlinstead of the oldexamples/js/chat.html. - Clarifies the example as a “Browser integration demo”.
- Updates README and API docs to point to the current browser demo file
🎯 Purpose & Impact
-
✅ More reliable, browser-friendly chat widget
- Explicit loops and clearer control flow make the frontend less prone to subtle iteration bugs and more compatible across different browsers and environments.
- Safer markdown parsing (separate match variables, improved callbacks) reduces the chance of malformed messages or broken formatting.
-
🧹 Cleaner, maintainable codebase for contributors
- Biome configuration plus style cleanups give a single source of truth for JS formatting and linting.
- Future changes to
chat.jsand the demo become easier to review, reason about, and keep consistent.
-
🧑💻 Smoother integrations for web developers
- Renamed globals (
_openChat,_openSearch) lower the risk of name clashes when embedding Ultralytics Chat into existing sites. - Updated demo paths in README/API docs help developers jump straight into a working browser example, reducing confusion.
- Renamed globals (
-
🌍 Better experience for accessibility & reduced-motion users
- The refined
prefers-reduced-motionrules remain respectful of motion preferences while avoiding heavy-handed!importantoverrides, making it easier to integrate with existing site styles.
- The refined
-
📦 No breaking changes for end users
- All modifications are internal or tooling-related—behavior and UX of the chat widget should remain the same, just more robust and future-proof.
What's Changed
- Fix broken example paths in documentation by @fcakyon in #59
- Biome format by @pderrenger in #60
- Create biome.json by @glenn-jocher in #58
- Fix biome errors by @pderrenger in #61
New Contributors
- @fcakyon made their first contribution in #59
- @pderrenger made their first contribution in #60
Full Changelog: v0.0.9...v0.1.0
v0.0.9 - Minify JS (#57)
🌟 Summary
v0.0.9 upgrades the Ultralytics Chat widget with real server-side feedback, smoother open/close animations with no visual flash, and an improved auto‑minified JS build, while keeping CI up to date. ✨
📊 Key Changes
-
🤖 Server-side feedback for chat quality (PR #57, #56)
- Adds a new
feedbackUrlderived fromapiUrl(defaults to a/feedbackendpoint next to/chat), configurable via widget options. - Like 👍 and dislike 👎 buttons now send real async
POSTrequests containing:session_idquery_index(last user message index)vote(true for up, false for down).
- Basic error handling: feedback is skipped if there are no user messages, and network issues are logged as warnings.
- Adds a new
-
💬 Functional thumbs up/down UI (PR #56, #57)
- The existing reaction buttons now:
- Trigger the new
feedback()method. - Show a visual “success” state so users know their vote was recorded.
- Trigger the new
- The existing reaction buttons now:
-
🎛️ Improved modal open/close behavior & no initial flash (PR #55, #57)
- Modal and backdrop are now initially created with
display: noneand only shown when actually opened. toggle()logic:- Avoids redundant state changes when the requested state equals the current one.
- Plays CSS transitions for open/close, then hides elements after transitions or a short timeout.
- Extra safeguard (
hideModalFlash()from earlier PR) ensures the chat modal does not briefly appear on docs page loads or client-side navigations.
- Modal and backdrop are now initially created with
-
🧱 Minified chat JavaScript with safer workflow (PR #57)
js/chat.jschanges are automatically built into a compressedjs/chat.min.js.- GitHub Actions
minify.yml:- Now only runs for safe events (push, workflow_dispatch, or PRs from the same repo).
- Uses
actions/checkout@v6and a more robustrefselection (github.head_ref || github.ref).
-
🧪 CI maintenance: updated GitHub Actions (PR #54, #57)
- Bumps
actions/checkoutfrom v5 to v6 in all workflows (ci.yml,minify.yml,tag.yml). - Keeps CI compatible with newer GitHub Actions environments and Node.js support.
- Bumps
🎯 Purpose & Impact
-
📈 Better product quality insights
- Real feedback endpoints let maintainers analyze which answers are helpful or not, guiding model tuning, prompt updates, and UX improvements over time.
-
😀 More trustworthy and responsive UI
- Users see clear confirmation that their likes/dislikes are sent, increasing confidence in the system and encouraging more engagement.
- Cleaner modal transitions (no flash on load, smoother open/close) make the chat feel more polished and professional.
-
🛡️ Safer and more reliable automation
- The minify workflow is restricted to safe event sources, reducing the risk of unintended code modifications from forked PRs.
- Updated
actions/checkout@v6keeps the CI pipeline aligned with the latest GitHub infrastructure and security practices.
-
🚀 Ready for broader embedding
- With minimized JS, smooth animations, and feedback wiring in place, the Ultralytics Chat widget is lighter, more robust, and better suited for integration across docs sites, dashboards, and external properties.
What's Changed
- Bump actions/checkout from 5 to 6 in /.github/workflows by @dependabot[bot] in #54
- Add thumbs up or down feedback by @glenn-jocher in #56
- fixed the chatbot appear glitch on pageloads in docs pages by @kayselmecnun in #55
- Minify JS by @glenn-jocher in #57
New Contributors
- @kayselmecnun made their first contribution in #55
Full Changelog: v0.0.8...v0.0.9