3.17.4 Release Notes#

Squirro 3.17.4 was released on October 29, 2026.

Learn more about the Squirro Release Process.

Notes for administrators

  • RPM-based deployments on EL9 need version 9.8 or later of the operating system, for Python 3.14.

  • The platform moves to Python 3.14 and SQLAlchemy 2.0. Check custom pipelets, data loader plugins, Studio plugins, and GenAI plugins before upgrading.

  • This release introduces important changes that may require adjustments to your existing setup. Learn more

Release summary

Squirro Neo projects can be set up to hand work to several agents that run in parallel, while users keep writing and follow the progress of each agent in the conversation.

Neo answers can include interactive widgets, such as tables and charts, that users can copy or export, and every answer is labeled as AI generated.

Neo has a redesigned message box, and users can quote passages from earlier answers, pin conversations, filter search results by date and number ranges, and import saved memories.

The platform moves to Python 3.14 with updated libraries, and to a new version of the document conversion engine.

Some customers need to update their operating system before the upgrade, and customers with custom code, machine learning models, document conversion settings, or Neo configurations need to update them as part of the upgrade.

What’s New#

  • Agents in Neo conversations

    In projects set to the correspondence delegation model, Neo can hand work to agents that run in parallel. Each agent appears as a card with its status, the conversation lists its agents in the right sidebar, and the transcript of each agent opens in the side panel. Users can mention an agent with @, stop one agent or all of them, keep writing while agents work, and answer their approval requests on cards above the message box.

  • Interactive widgets in Neo answers

    Neo answers can show widgets such as tables, charts, and comparisons. Each widget has a text fallback, used when an answer is copied or exported, and most widgets have an export menu with Copy as image, Download PNG, and Download PDF. Custom Neo bundles can add their own widgets.

  • Python 3.14

    The platform runs on Python 3.14, in RPM-based deployments on EL8 and EL9 and in containerized deployments, with updated dependencies such as NumPy 2, pandas 2.3, scikit-learn 1.7, spaCy 3.8, and Pydantic 2.12. AutoML is experimental on Python 3.14.

Improvements#

Neo Tasks#

  • Neo task approval cards showing what a change would save, including each changed field before and after, and the next runs.

  • Messages sent while a Neo scheduled task runs held until the run ends, and task turns read-only.

Neo Interface#

  • Redesigned Neo message box, with one menu for uploading files and choosing templates, capabilities, knowledge graphs, and connectors.

  • Assistants shown as cards on the new chat screen of Neo.

  • Quote action in the Neo text selection menu, sending a passage with an optional instruction, or adding it to the message box.

  • Up to 20 quotes per Neo message, shown as tiles in the message box and in sent messages, and editable when a question is edited.

  • Pinned Neo conversations, with Pin and Unpin in the conversation menus and a collapsible Pinned group in the sidebar.

  • Chat bar above Neo conversations on desktop, showing the conversation title with options to pin, rename, export, or delete the conversation.

  • Neo settings grouped into Account and This project sections, with a section switcher on phones and a full-screen option.

  • API access section in Neo settings, showing, copying, and renewing the personal token for the Neo CLI and SDK.

  • Memory import in Neo settings, from a file exported from Neo, listing the entries that could not be imported.

  • Collapsible Tasks group in the Neo sidebar, with a badge counting tasks with unread or failed runs while collapsed.

  • Recent group of the Neo sidebar renamed Recent chats, with the Chats header removed and Delete all kept in the Chat data settings.

  • Date range and number range filters in Neo search, for date, integer, and float labels, with geo-point labels no longer offered as filters.

  • Finished groups of Neo steps folded into a one-line summary, with compact step rows and a live status while steps run.

  • AI generated label on every Neo answer, replacing the Response details icon, and in the Explain and Translate panels.

  • AI-generated marking in the document properties of Neo tables exported to Excel.

  • Progress indicator and Cancel option for Export all chats in Neo settings.

  • Export as JSON in the Neo conversation menu offered only to project administrators with admin debug tools turned on.

  • Export all chats limited to the questions, answers, and provenance of each conversation, except for project administrators with admin debug tools turned on.

  • Copy answer keeping the Markdown formatting of Neo answers.

  • Formatted headings, lists, and tables for HTML documents in the Neo side panel and full-screen viewer, and wrapped plain-text documents.

  • Interrupted Neo answer streams resuming where they stopped.

  • Regenerate offered on finished Neo answers, including answers that stopped short or were written from the reports of agents.

  • Reason shown when a Neo turn or agent ends short, such as running out of steps or time, or an approval that nobody gave.

  • Answer duration in the Response details of Neo covering the work of the agents.

  • landing option in the nav field of a Neo bundle manifest, choosing the page Neo opens on.

  • REDIS_AUTH setting for the Neo session store, using an IAM role for Amazon ElastiCache or, experimentally, Microsoft Entra ID for Azure Cache for Redis.

  • Security hardening of sign-in, session, and CSRF handling in the Neo web client server.

  • Security hardening of how Neo displays source links and conversation titles.

  • Startup warning when Neo single sign-on is set up without FE_URL or SSO_DOMAINS, or with SSO_DOMAINS not listing the FE_URL host.

Neo Agent Configuration#

  • Per-graph switches for Neo knowledge graphs, source.knowledge_graph.graphs.<id>.enabled, scoping a conversation to particular graphs.

  • Default Neo knowledge graph following what is in scope, falling back to the next default when the preferred graph is switched off.

  • studio_mcp.tools rules on Neo projects and agents, controlling which Studio plugin tools an agent sees and refusing calls to the others.

  • Neo configuration deployable before its secrets exist, with a deploy warning for each missing auth.secret handle and credential_missing on the affected model’s turns.

  • Keyless Microsoft Entra ID authentication for Neo Azure models, with auth: {type: entra_id}.

  • genai lint warnings for knowledge graphs locked out of scope and unworkable Studio tool rules, and notes for models or knowledge graphs without auth.

  • Lint advisories printed by genai deploy before it deploys.

  • --as-delegate option of genai explain, showing an agent as it runs when delegated to.

  • in use: line in genai explain, naming the default knowledge graph a turn actually uses.

Neo Core Library#

  • locale and strings options on ExportDocument, and Arabic support in exportAsPDF and exportAsDocx of @squirro/neo-core/export.

  • CommonMark backslash escapes resolved by the DOCX converter in @squirro/neo-core/export/markdown-to-docx.

  • Behavior changes of the chat components recorded in the CHANGELOG.md of @squirro/neo-core.

  • onCloseAutoFocus option on ConfirmationDialog, and tooltipSide option on TruncatedText.

Neo SDK#

  • @squirro/neo-sdk published on npm, with a chat proxy that runs on plain Node.js.

  • Neo SDK reference split into pages shipped with the package, with a short README as the npm landing page.

  • Security hardening of token renewal in the Neo SDK proxy.

Squirro Interface#

  • Embedded dashboards on deployments without single sign-on authenticating with a short-lived access token handed over by the parent page, with ?token= embeds unchanged.

Platform#

  • Neo assistant starting work without writing a todo list first, and no longer streaming output_block.todo_list@v1 blocks.

  • Stronger protection of the Neo assistant against prompt injection through the content it reads.

  • quoted_selections on POST /chat of the Neo API, with up to 20 quoted passages per message, each with an optional instruction.

  • too_many_quotes, prompt_too_long, and empty_message errors on the Neo chat API, with prompts limited to 100,000 characters including quoted passages.

  • _import endpoint of the Neo memory API, reading back a file from _export and listing each entry it could not import.

  • Per-user pinning of Neo conversations, with pinned on the conversation PATCH request and as a filter of the conversation list.

  • histogram aggregation for integer and float labels in the items query, with a numeric interval.

  • SQ_GENAI_V1_BUNDLED_MODELS_PATH setting, replacing the bundled Neo models with the Model resources of a directory, for projects seeded or reseeded after it is set.

  • entra_client_id option in the [db] and [redis] sections, authenticating to PostgreSQL and Redis as a user-assigned Microsoft Entra identity.

  • Warning in the service logs, naming both IDs, when the Redis username is not the object ID of the Microsoft Entra identity.

  • Authorization: Bearer access tokens accepted by the frontend and Studio plugins, without creating a session.

  • Machine-readable code in 401 and 403 responses of the frontend, and a 503 error when the user service is unreachable.

  • Apache Tika 4.1.0 for content conversion, replacing Tika 3.2.3.

  • SQLAlchemy 2.0 across the platform, the data loader, and the containers.

  • Pipelet code compiled once per upload, speeding up pipelet runs.

  • [pipeline] pdf_ocr_temp_directory setting, giving the PDF OCR step a dedicated temporary storage location.

  • ignore_ocr_errors option of the PDF OCR step, reporting OCR failures as item errors when set to false.

  • Interrupted one-time data source loads retried after 30 minutes, within the consecutive error limit.

  • Next retry time of failed or interrupted data source loads reported in the service logs.

  • Empty ingestion batches, and damaged batches without items, moved to the failed directory unchanged, listed with the reason, and not retried.

  • hide_all_on_error option of the Microsoft and RheinInsights ACL filters, on by default, returning no documents when the sources cannot be looked up.

  • Stronger Privacy Layer masking, covering every detected character and merging overlapping detections.

  • Security updates of bundled libraries, including PyMuPDF, Pillow, certifi, and cryptography.

  • Security hardening of machine learning workflow uploads.

Containerized Deployments#

  • Technical Preview - Neo web client image of containerized deployments based on Amazon Linux 2023.

Bug Fixes#

Neo Tasks#

  • Neo task instructions of only whitespace accepted, then failing every run.

  • Tasks page showing “Run in progress” in place of the transcript after each turn of a running task.

  • Neo task created offline saved to another project after reconnecting.

  • Neo task runs stopped by a user shown as failures.

Neo Interface#

  • Neo Stop failing without a message when the answer could not be stopped.

  • Skip on Neo approval cards rejecting the tool call without saying so.

  • Neo approval answered on another tab or device staying on screen.

  • Neo answer resumed after an approval opening empty, or losing its steps after a reload.

  • Step that failed before a Neo tool approval shown as completed after the resume, and failed agents shown as complete.

  • Steps of a reloaded Neo conversation all shown as ending when the page loaded.

  • Neo answer that could not be streamed whole shown as an empty finished answer.

  • Follow-up sent while scrolled up in a long Neo conversation staying off screen.

  • Draft typed in a new Neo chat cleared when the conversation list finished loading.

  • Neo project selector retrying forever, with no error, when the project list failed to load.

  • Enter in the search field of the Neo project picker selecting the current project.

  • Tasks, files, saved searches, filters, and chat data staying on the previous project after a deep link or a project switch in Neo.

  • Neo memory actions and exports acting on another project after a project switch, and memory errors showing developer text.

  • Neo template saved while offline landing in another project after reconnecting, and partly saved template imports reported as successful.

  • Failed or offline template deletes in Neo looking successful.

  • Deleting conversations or disconnecting an MCP server while offline in Neo spinning forever, then running without notice on reconnect.

  • Neo requests failing once after the CSRF token of the session expired.

  • First incognito message in Neo staying on the welcome screen until the conversation appeared.

  • Text selection and the scroll position of code blocks and tables lost while a Neo answer streamed.

  • Pasting a screenshot over selected text in the Neo message box deleting that text.

  • Neo turn-failure messages always in English, failed resumes showing no reason until a reload, and setup failures leaving an empty, frozen answer.

  • Neo agent cards reading “Processing subagent…” or an untranslated “Processing…”.

  • Plain-text emails losing their line breaks in the Neo side panel, &amp; shown in search snippets, and search highlights hard to see in dark mode.

  • Long source links in Neo answers running past the edge of the message.

  • Neo search results stopping at a false end of the list after the window regained focus or the connection returned.

  • Superseded Neo searches running to the end.

  • Neo opening on a page hidden from the sidebar, or on a landing page the user cannot see.

  • Date picker in Neo, including the task schedule, not showing the selected day.

  • Escape in the Categories suggestions of the Neo template form closing the form and discarding the input.

  • Neo template form validation errors always shown in English.

  • Arabic text unreadable in Neo PDF exports and laid out left to right in Word exports.

  • Lines of Neo PDF exports garbled by a single character the PDF font cannot print.

  • Tables in Neo PDF exports overlapping the following line or the page footer, and Word export table columns squeezed in macOS Quick Look.

  • DOCX exports of Neo conversations containing links with internal item IDs and cited passages.

  • Keyboard, screen reader, and theming issues in Neo, including focus not moving into the phone navigation menu and unannounced template form errors.

Neo Agent Configuration#

  • MCP and TraitDimension IDs with hyphens or uppercase letters refused in Neo configuration.

  • Switches turned off for a Neo turn coming back for the agents it delegates to.

  • Knowledge graph retrieval switched off for a Neo turn still running when the knowledge graph skill was loaded earlier in the conversation.

  • Per-turn values of the wrong type getting past a locked Neo setting.

  • Neo configuration values of the wrong shape crashing a deploy or a turn with a 500 error.

  • Locked Neo settings not shown as locked in the setting pickers.

  • Bundled Neo configuration override that fails to read or deploy taking seeded projects down.

  • Refused genai reseed not saying why, and the genai CLI printing a Pydantic warning about model_name at every start.

Neo UI CLI#

  • @squirro/neo-ui releases depending on the previous @squirro/neo-core release.

  • neo-ui dev proxy failing with a 502 error when SQUIRRO_API_URL is an IPv6 address.

Neo Core Library#

  • buildFacetFilter searching the value as text instead of filtering on the field.

  • luceneTerm producing broken queries for empty values, values ending in a backslash, and values containing braces.

  • createItemsDataSource ignoring the filters and sort of ItemsQuery.

  • ItemsList ignoring onExternalLinkClick.

  • useMessageBlocks looping with “Maximum update depth exceeded” for a message outside the selected conversation.

Neo SDK#

  • Neo SDK package missing the license notices of bundled third-party code.

  • Neo SDK chat proxy reporting a stalled connection to an IPv6 squirroUrl as a DNS timeout.

Squirro Interface#

  • App staying blank when opened over plain HTTP from an address other than localhost.

  • Clicking the source hostname on an item card also opening Document Details.

  • Boolean operator dropdown in search not closing when clicking outside it.

  • Widgets that need the current user, such as the results list, failing in embedded dashboards.

  • Storage URLs for PDFs and downloads carrying ?token=, breaking presigned S3 URLs.

  • Excel export link in embedded dashboards exposing a link without credentials to right-click and middle-click.

Squirro Chat Widget#

  • Stopping a Chat answer replacing the text already streamed with “(interrupted)”.

  • First message in embedded chat after an idle period failing because the access token had expired.

Platform#

  • Neo conversations whose turn history loops back on itself hanging when opened, shared, regenerated, or switched to another branch.

  • Neo messages sent with attachments and no text missing from the conversation, and edits of them dropping the previous turn.

  • Neo turns failing during setup losing their question, quotes, and attachments.

  • Neo memory treating quoted passages as the words of the user.

  • Tool calls after the first step of a Neo answer shown only once their step ended, and tool calls with unparsable arguments staying pending.

  • Restoring several hundred removed Neo memories at once failing with a 500 error.

  • Moving an inferred or imported Neo memory to another category making it rank like a stated one.

  • Neo conversation PATCH response reporting wrong is_shared and status values.

  • /catalog and the MCP sign-in route of an unseedable Neo project returning a 422 error with the deploy failures, instead of a 503 error.

  • Google MCP connectors for Gmail, Calendar, and Drive disconnecting after an hour.

  • GenAI plugin that fails to load preventing the other GenAI plugins from loading.

  • Microsoft ACL filter not applying the ACLs of SharePoint Azure VM and SharePoint App-Only sources.

  • Microsoft ACL filter ignoring the acl_es_index_prefix of a source.

  • SharePoint and RheinInsights documents shown to users outside their ACL in some cases.

  • Deleting a SharePoint App-Only data source leaving its ACL index behind.

  • New RheinInsights data sources indexing items without their link.

  • RheinInsights data sources storing different connector and source IDs from the ones their wizard configured.

  • Cached access tokens of OAuth data loader plugins, such as SharePoint and Gmail, getting the wrong expiry after a restart on non-UTC hosts.

  • SharePoint sources losing a rotated refresh token when the ACL crawl failed.

  • SharePoint Managed Identity sources failing on every run after the first with a datetime comparison error.

  • Interrupted data source loads staying in progress for up to 30 minutes before being shown as failed.

  • Data source connector credentials written to service logs when the source reached its error limit.

  • Data source completion, failure, and stop updates failing when the saved pipeline workflow was missing.

  • Ingestion batches with a damaged header retried without end, and failed-batch retries losing the first item or requeueing a batch with its old retry state.

  • Wrong item counts for ingestion batches in the backlog, in retries, and in batches where only some items failed.

  • Failed-batch listings breaking on an unreadable batch, or showing “No batch history” for a batch that has one.

  • Rerunning processed batches writing an invalid header when an item contains bytes that are not valid text.

  • Items whose file is given as an HTTP or HTTPS URL dropped during ingestion when the file is a PDF or another binary file.

  • Hyphen-dense documents, such as minified code, base64 data, or long URLs, silently not indexed.

  • Search for a term joined by an apostrophe or a dot, such as O’Neil’s, matching documents containing only its last part, on new indices.

  • Reset index searched with the field mappings of the index it replaced.

  • Models created from the Logistic Regression Classifier AI Studio template failing to train.

  • JPEG profile pictures failing to upload when the image begins with a color profile or other metadata.

  • Pipelet uploads logging a misleading error when the pipelet storage directory is not writable.

  • Configuration service leaving a database connection idle in a transaction after its startup migration.

  • Services returning mixed-up responses and 500 errors after a worker restarted following a timeout.

  • Privacy Layer unmasking failing when the LLM dropped the trailing zero of a token.

  • Responses streamed through the Privacy Layer leaking PII tokens split across chunks, or repeating their last words.

  • Summarization endpoint not unmasking PII in its response, and tool-calling models failing behind the Privacy Layer.

  • Technical Preview - OpenSearch hybrid search returning different hits and scores from Elasticsearch, or none when the query words matched nothing.

  • Technical Preview - OpenSearch paragraph embedding fields using a different similarity and index options than on Elasticsearch, with existing fields fixed by a reindex.

  • Technical Preview - OpenSearch scoring lexical matches lower than Elasticsearch, changing hybrid search, rescoring, and min_score results.

  • Technical Preview - OpenSearch storing byte embeddings at 4 bytes per dimension, with existing fields fixed only by a reindex.

  • Technical Preview - Semantic highlighting and paragraph thumbnails not working on OpenSearch, and highlighted phrases split at HTML tags.

Containerized Deployments#

  • Technical Preview - Asset initialization container of containerized deployments failing to run as a non-root user.

Breaking Changes#

Neo Interface#

  • Neo web client deployments that set none of LEGACY_API_URL, FE_URL, or a USER_SERVICE_ENDPOINT ending in /api/user get a 503 error on /api/v0 requests and a startup warning. RPM, deploy.sh, and containerized deployments are unaffected. On other deployments, such as Kubernetes, set LEGACY_API_URL to the URL at which the Neo web client reaches the Squirro platform.

  • Neo single sign-on takes its host from FE_URL, or else from the Host header, and checks that host against SSO_DOMAINS. Behind a reverse proxy that rewrites the Host header, set FE_URL to the public Neo URL and list its host in SSO_DOMAINS, on RPM installations in /etc/squirro/webclient.d/docker-override.env.

Neo Agent Configuration#

  • genai deploy succeeds with a warning when a secret that the configuration names is missing. Until the secret is provided, turns on that model fail, that MCP server cannot be used, and calls to that knowledge graph go out unauthenticated. An older genai CLI does not print the warning. Upgrade the genai CLI together with the Squirro server, and provide every secret that the warning names.

  • Neo deploys refuse more invalid configurations: a source.knowledge_graph.default naming an unpublished graph, a toggle constrain that admits "auto", a restriction that resolution cannot honor on its own, a constrain operand of the wrong kind, an undeclared or mistyped preference path, and studio_mcp.tools rules that can never match. Fix each path the deploy names, for example by writing not_in: [true, "auto"] instead of not_in: [true] and giving the project false in prefers, or by pinning the path to false.

  • A Neo project not yet seeded cannot start from a bundled override that this release refuses. Before upgrading, run genai lint from the genai CLI of this release on the directory that SQ_GENAI_V1_BUNDLED_CONFIG_PATH names, and fix the override. An older CLI does not report these refusals.

  • Neo setting resolution no longer returns a value that the restrictions of the project exclude, an agent matches constrain no longer widens the one of the project, and 0 on capability.memory.enabled turns memory off in conversations too. Projects deployed before the upgrade keep their behavior until redeployed, except for matches and for 0 on capability.memory.enabled, which apply at once. Check agents that relied on the wider behavior, write false instead of 0, then redeploy.

  • Do not roll back a Neo project that uses per-graph switches, or MCP, trait, or per-server IDs with hyphens or uppercase letters: an earlier release ignores these settings or fails every turn. After a rollback, redeploy the pre-upgrade workspace with genai deploy, or run genai reseed --force for a bundled-seed project.

Neo Core Library#

  • Hosts that switch exhaustively over IOutputBlock, ChatSidePanelPayload, or TurnOutcome in @squirro/neo-core/chat must handle the new members, such as output_block.ui, output_block.forwarded_message, agent-transcript, and out_of_time. Add these cases to custom code.

  • ChatStrings gains required keys, including answerAiGenerated, selectionTargetLanguage, errorStopFailed, errorTaskRunOpen, and messageHeldForTaskRun, and strings for refused delegations and the reports of agents. It also loses keys, such as welcomeTagline, filesAddContent, catalogAbilities, and catalogEnableGraph. Add the new keys to a custom Neo interface that builds the set in full, or pass a partial set instead, and remove overrides of the removed keys.

  • An approval card rendered directly with InterruptResolutionUI or InterruptChoiceDialog and wired without onCancelTurn no longer shows a dismiss control, and interruptSkip and interruptHintSkip in ChatStrings no longer have any effect. Wire onCancelTurn to show a dismiss control, which ends the turn instead of rejecting the action.

  • COMPOSER_TEXTAREA_ID, INCOGNITO_DISCLAIMER_ID, and INCOGNITO_FILES_CLAUSE_ID are removed from @squirro/neo-core/chat, because chat element IDs are unique per chat. Use COMPOSER_FIELD_ATTRIBUTE to find the message field.

  • createItemsDataSource rejects a filter on a full-text field, such as $title or $body. Search these fields through ItemsQuery.text.

  • Squirro item citations give the host an empty url. Open these citations by itemId in custom code.

  • quoted_selection is replaced by the quoted_selections array on IConversationMessage, ITreeNode, and StreamingChatRequest, and QuestionCardProps.quotedSelection is removed. Read quoted_selections, and pass the third onSubmit argument of InputField on to startStreamingChat, or quotes are dropped without an error.

  • The renderTemplates slot of InputField renders inside the message box menu, and InputFieldTemplateSlotHelpers loses compact. Return menu items from the slot, and stop reading compact.

  • The delete methods and disconnectExternalMcp of ChatDataSource reject when the browser is offline or the request fails. Handle the rejection in custom code.

Neo SDK#

  • Abstracts returned by sdk.items.search(), sdk.items.getItem(), and onOpenItem are decoded text instead of HTML-escaped. Insert them with textContent instead of innerHTML.

Platform#

  • RPM-based deployments on EL9 need version 9.8 or later of Red Hat Enterprise Linux or Rocky Linux, whose AppStream repository provides Python 3.14. On EL8, Python 3.14 comes from the Squirro repository. Before upgrading, update EL9 hosts, and add python3.14, python3.14-libs, and python3.14-pip-wheel to your own mirror of the Squirro repository for EL8.

  • Python 3.14 checks TLS certificates strictly, and refuses a private or TLS-inspecting CA certificate that lacks an Authority Key Identifier or whose Basic Constraints extension is not critical. Reissue such CA certificates before upgrading.

  • Squirro moves from /opt/squirro/virtualenv311 to /opt/squirro/virtualenv314, and the upgrade leaves virtualenv311 in place. Update scripts, crontabs, systemd units, nginx files, and settings that name virtualenv311, and reinstall packages installed into it by hand. Once nothing uses it, run dnf remove 'squirro-python311-*' python3.11 python3.11-libs and delete /opt/squirro/virtualenv311.

  • The platform services run on Python 3.14, which removes standard library modules such as asyncore, imp, distutils, and telnetlib, and makes forkserver the default start method of multiprocessing on Linux. Make custom pipelets, data loader plugins, Studio plugins, and GenAI plugins compatible with Python 3.14, and make everything they pass to a new process picklable.

  • Models built on the Pydantic version 1 API (pydantic.v1) in custom code lose their fields on Python 3.14 without raising an error, and LangChain tools built on them lose their arguments. Add from __future__ import annotations to each module that defines such models, or move them to Pydantic 2.

  • Data loader plugins and GenAI plugins that list dependencies in a requirements.txt file can fail to load until they are uploaded again. Upload these plugins again after the upgrade.

  • SQLAlchemy moves from 1.4 to 2.0: writes persist only after an explicit commit or inside engine.begin(), parameters are passed to execute() as a dict, and engine.execute(), select([...]), MetaData(bind=...), and string-key row access are gone. Update custom pipelets, data loader plugins, and Studio plugins that use SQLAlchemy from the platform, as described on the SQLAlchemy 2.0 migration website.

  • AutoML models trained before the upgrade no longer load, and AutoML is experimental on Python 3.14. scikit-learn classifiers, projectors, and TF-IDF embedders load with a warning. Retrain AutoML models, and retrain the scikit-learn models as recommended.

  • Google Universal Sentence Encoder is no longer available. Edit, save, and retrain models created from the Cosine Similarity Classifier and Logistic Regression Classifier AI Studio templates, and switch machine learning workflows that use the tensorflow transformer of the embedder step to sentence_transformer, then retrain them. Publish the models again if they were published.

  • The semantic_term_expander query processing step is removed. Remove it from query processing workflows.

  • Content conversion needs more memory, with a default vmargs in convert.ini of -Xmx1g,-Xms64M,-XX:+ExitOnOutOfMemoryError. Raise an explicit vmargs setting to -Xmx1g with -XX:+ExitOnOutOfMemoryError, and give containers with tight memory limits more memory.

  • Installations whose tika-url in convert.ini points at their own Tika server need Tika 4 with the metadata key names of Tika 3, or every conversion fails. Upgrade that server to Tika 4.1.0, and start it with the settings of the tika-config.json file that ships with Squirro, which include legacy-key-migration-filter.

  • The Tika server configuration moves from /etc/tika-config.xml to /etc/tika-config.json, and an upgrade replaces a locally edited tika.service unit, keeping the edit as tika.service.rpmsave. Re-apply XML customizations in the JSON file, and move unit changes to a systemd drop-in. If a drop-in overrides ExecStart, replace its command with the one in the new tika.service, or Tika does not start.

  • Some metadata keys of Office and HTML documents change with the new Tika version. Check metadata mappings that use Tika key names.

  • For HTTP and HTTPS URLs, open() and download() of the storage handler (get_injected("storage")) always return bytes. Decode the result in custom pipelets that use it as text.

  • The database data loader plugin opens its source connection in autocommit mode, so writes made by its configured SQL, such as stored procedure calls, commit where earlier releases rolled them back. Check SQL that writes to the source database before upgrading.

  • Users can see fewer SharePoint and RheinInsights documents: the Microsoft and RheinInsights ACL filters apply the ACLs of more sources, and return no documents when the sources cannot be looked up, with hide_all_on_error on by default. Check the ACL indexes of these sources after the upgrade.

Containerized Deployments#

  • Technical Preview - The GPU image of the containerized NLP services needs a driver for CUDA 12.8 or newer. Update the GPU driver of the host before upgrading.

Installation and Upgrade#

For new installations, find step-by-step instructions on the Install and Manage Squirro with Ansible page (recommended) and Installing Squirro on Linux pages.

To upgrade an existing installation, see the Upgrading Squirro page.