Release notes
SimpleChat release notes index with latest updates and links to archived release pages.
Release notes
For feature-focused and fix-focused drill-downs by version, see Features by Version and Fixes by Version.
This page includes the latest release notes inline. Older release sections are split into smaller pages by minor series.
Version index
Latest release notes
(v0.261.061)
New Features
- Opt-In Tabular Model HTTP-Attempt Diagnostics
- Added opt-in environment-variable diagnostics (
SIMPLECHAT_TABULAR_HTTP_DIAGNOSTICS,SIMPLECHAT_TABULAR_HTTP_BUDGET_SECONDS,SIMPLECHAT_TABULAR_HTTP_MAX_RETRIES, andSIMPLECHAT_TABULAR_HTTP_TIMEOUT_SECONDS) for tabular Azure OpenAI calls. - Records structured
[TABULAR_MODEL_HTTP]telemetry covering request attempts, retries, elapsed durations, correlation headers, and pre-header transport failures without logging prompts, completions, or credentials. - (Ref:
functions_tabular_model_diagnostics.py,functions_model_endpoint_runtime.py,route_backend_chats.py,docs/admin/operations.md)
- Added opt-in environment-variable diagnostics (
Bug Fixes
- Workflow Instruction Drafting Uses the Selected Metadata Endpoint
- The Draft Workflow Instructions button now resolves its client and request model through the same metadata extraction model endpoint resolver used by document metadata extraction.
- Workflows and agent instruction drafts no longer send the selected metadata extraction deployment to the legacy global GPT or APIM endpoint when the model is hosted on a configured AI Foundry or multi-endpoint connection.
- (Ref:
resolve_metadata_extraction_client(),route_backend_agents.py,route_backend_workflows.py, Workflow Instruction Model Endpoint Fix)
- Tabular Analysis Required-Tool Choice Continuation Fix
- Tabular analysis rounds now switch tool-choice behavior from
requiredtoautoafter the initial tool invocation while preserving function allowlists and invocation limits, allowing the model to either request follow-up tools or return its final answer. - (Ref:
allow_tabular_completion_after_initial_tools(),route_backend_chats.py,test_tabular_tool_error_retry_and_thoughts.py)
- Tabular analysis rounds now switch tool-choice behavior from
(v0.261.060)
Bug Fixes
- Safety Violation Date and User Metadata
- Safety violation list and card views now show created dates and target user names, reducing the need to open each violation to identify when it occurred and who it affected.
- CSV exports now include a user name column and populate created, last updated, and archived timestamps using existing safety log metadata when older records are missing explicit date fields.
- (Ref:
route_backend_safety.py,admin-safety-violations.js, Safety Violation Metadata Display Fix)
(v0.261.059)
New Features
- Configurable Content Safety Prompt Category Thresholds
- Administrators can now set Azure AI Content Safety prompt thresholds separately for Violence, Hate, Sexual, and Self-harm.
- Each category supports Low (
2), Medium (4), and High (6), with Medium as the default to preserve previous behavior. - Higher threshold levels do not override model deployment guardrails.
- (Ref: Content Safety admin settings,
content_safety_category_thresholds, Content Safety Block Threshold)
User Interface Enhancements
- Admin Settings Slider Contrast
- Admin Settings range sliders now use the same gray tone as an off toggle switch in dark mode, making slider tracks visible against the admin page background.
- This includes the Content Safety prompt category threshold sliders, Main Page Logo Size, and document action capability sliders.
- (Ref:
content-safety.html,branding.html,actions.html,styles.css, Admin Settings)
(v0.261.054)
Bug Fixes
- Default System Prompt Remains Active When Files or Images Are Uploaded in Chat
- Uploading an image, XML file, or other file directly in the chat UI no longer suppresses the configured
default_system_promptin standard or streaming chat turns. - Previously, chat-uploaded image and file context messages (
role: 'image'androle: 'file'converted intorole: 'system'entries inconversation_history_for_api) were mistaken for an existing general system prompt, causingdefault_system_promptto be skipped. has_general_system_promptnow checks whetherdefault_system_promptitself is already present inconversation_history_for_api.- (Ref:
route_backend_chats.py, Default System Prompt Preservation With Chat Uploads Fix, #1855)
- Uploading an image, XML file, or other file directly in the chat UI no longer suppresses the configured
(v0.261.053)
Bug Fixes
- Search Results Refresh After a Background Metadata Sync
- When the background search sync finishes merging a tag or metadata change, it now clears cached search results for the document’s workspace and for every user or group with an approved share.
- Previously, a chat or search that ran while the sync was still in progress could cache the old values and keep returning them for up to the search cache lifetime (5 minutes by default) after the sync completed.
- (Ref:
run_document_search_metadata_sync(),utils_cache.py, Document Search Metadata Sync Fix, #1657)
(v0.261.052)
Bug Fixes
- Metadata and Tag Saves on Large Documents Finish Immediately
- Saving tags, titles, authors, or classification on a document no longer waits for every search chunk to update. The save returns immediately, and a background sync merges the change into the search index. Group and public workspace saves no longer time out with “invalid JSON” errors, and the personal workspace dialog sends a single request again.
- Bulk tagging, tag rename, and tag delete no longer update every chunk twice inside one request, so they finish quickly in large workspaces.
- The search index update sends only the changed fields instead of re-downloading and re-uploading every chunk with its embedding. A 10,000-chunk document now takes about 40 Azure AI Search calls instead of about 20,000, with far fewer Cosmos write-fence operations, which sharply reduces Search and Cosmos load.
- Failed or interrupted updates retry automatically with backoff until every chunk matches the document, so chat tag filters and citation titles and classifications converge instead of staying partially stale. A brief notice tells users when the search index is still updating.
- (Ref:
functions_documents.py,background_tasks.py, document metadata routes, Document Search Metadata Sync Fix, #1657)
- Group Document Sharing Changes Reach Search
- Approving, removing, or revoking a group share now updates the search index before the change is saved. Previously these changes never reached the search chunks, so approved shares might not be searchable, and a revoked group could keep search access to chunks rebuilt after an earlier approval.
- Personal share approvals now also update the search index before they are saved, so a failed update can simply be retried instead of reporting “Already approved”.
- When the search index cannot apply a sharing change, the change is not saved and users get a clear, retryable error.
- Group shares approved before this update become searchable the next time that document’s sharing changes.
- (Ref:
update_document(),project_document_acl_to_chunks(), group and personal sharing routes, #1657)
(v0.261.051)
Bug Fixes
- Large Document Metadata Saves Continue Across Batches
- Saving tags or other metadata for large uploaded documents now synchronizes search chunk metadata in bounded batches instead of holding one long request until every chunk is updated.
- The workspace metadata dialog continues the save through short JSON PATCH requests until the chunk sync is complete, avoiding timeout HTML responses that previously appeared in the browser as invalid JSON errors.
- Tag saves no longer run duplicate full-document search chunk propagation, while blob metadata tag updates are still preserved.
- (Ref: document metadata updates, tag propagation,
functions_documents.py,route_backend_documents.py,workspace-documents.js, Document Metadata Chunk Sync Batching Fix)
(v0.261.050)
Bug Fixes
- Maps From Agents Load Their Tiles Again
- Tool results are redacted before they are stored with a reply, and the redaction treated the Azure Maps tile proxy token as a secret. Every stored map lost its token, so maps drew their markers and paths on blank tiles.
- The token in SimpleChat’s own tile template is now kept. It is encrypted with the app’s secret key, expires, and only works on SimpleChat’s signed-in tile proxy. Every other
token=value and every other secret in a tool result is still redacted. - Maps stored before this fix keep the redacted token and still show no tiles. Run the request again to get a map with tiles.
- (Ref:
plugin_invocation_logger.py, Azure Maps Tile Token Redaction Fix)
(v0.261.049)
Bug Fixes
- Inline Map Attribution Shown as Text and Tiles Kept on the Tile Proxy
- Inline maps in the chat now show a tool result’s tile attribution as plain text. OpenLayers renders attribution strings as HTML, so the text is escaped first.
- A tool result is drawn as a map only when its tile template points at SimpleChat’s Azure Maps tile proxy (
/api/azure-maps/tile). Maps from the Azure Maps action are unchanged. - (Ref:
chat-inline-maps.js, Inline Map Attribution Text Fix)
(v0.261.048)
Bug Fixes
- Agent Model Picker Respects Governance Policies
- Fixed the persona workspace agent setup modal so its model dropdown now follows the same endpoint governance policies as the chat window model selector.
- Users no longer see restricted global, personal, or group model endpoints when creating or editing agents, and governed multi-endpoint responses no longer fall back to legacy global model lists.
- (Ref: agent model picker, endpoint governance,
route_backend_agents.py,agents_common.js, Agent Model Governance Filtering Fix)
(v0.261.047)
Bug Fixes
- Images Without OCR Text Are Now Indexed From Their Vision Description
- Fixed text-free images, such as a photo of an empty room, ending with no search chunk, no title, and nothing chat could use, even though the AI vision model had described them. When OCR finds no text, the vision description is now indexed as the image’s chunk, so the image is searchable and final metadata extraction runs as usual.
- Document Intelligence Layout output that is only page-number or page-break annotations, such as a stray
<!-- PageNumber="J" -->read from floor tape, no longer counts as image text. Header and footer text still does. Failed or empty vision analyses are never indexed. - Image chunks are now embedded from the same text that is stored, including the vision description, instead of from the OCR text alone. Images with real OCR text keep their existing chunk.
- With Enhanced extraction, a standalone image that the Content Understanding document analyzer returns nothing for is now described by the Content Understanding image analyzer before falling back to Document Intelligence Layout. This applies to workspace uploads and to images uploaded straight into a chat. The image analyzer’s
Summaryfield is now read, which also replaces theplaceholder that images embedded in DOCX and PPTX files were indexed with. - The multi-modal vision model is now called through the AI connection that hosts it when multi-endpoint models are enabled, instead of always using the legacy GPT connection, which returned 404 for models deployed on another connection. The Test Vision Analysis button now uses the same connection as ingestion.
- (Ref: #1583,
functions_documents.py,functions_content.py,functions_content_understanding.py,functions_model_endpoint_types.py,route_backend_settings.py,route_frontend_chats.py, Image Description Indexing Without OCR Text Fix)
- Image Generation Uses The gpt-image API Version By Default
- The default Azure OpenAI image generation API version is now
2025-04-01-preview, the newest dated Azure OpenAI API version and the one documented for gpt-image-1, gpt-image-1.5, and gpt-image-2. The previous2024-12-01-previewdefault predates gpt-image support. - Existing deployments still storing the previous default, or a blank value, are upgraded automatically when settings load. Any other saved version is kept, and the APIM image generation API version is never changed because the gateway defines it.
- (Ref:
functions_settings.py,azure_openai_image_gen_api_version, Image Generation API Version Default Fix)
- The default Azure OpenAI image generation API version is now
- Deployers Grant The App Identity Key Vault Secrets Officer
- Fixed credential saves failing with
ForbiddenByRbacwhen Key Vault secret storage is enabled on deployments created by the Bicep, Terraform, or Azure CLI deployers. The deployers gave the application identities Key Vault Secrets User, which can read secrets but cannot create, update, or delete the ones SimpleChat writes. Test Key Vault connection only lists secrets, so it passed and hid the problem. - The Bicep (container and native Python), Terraform, and Azure CLI deployers now grant Key Vault Secrets Officer at vault scope. On vaults that use access policies, the Azure CLI deployer adds get, list, set, and delete secret permissions instead. Existing Secrets User assignments are left in place, and Terraform stops tracking its old assignment without deleting it.
- Existing environments pick up the new role on their next
azd provision, Terraform apply, or Azure CLI deployer run;azd deploydoes not change role assignments. Included in deployer version 1.0.32 as a backport of the deployer portion of PR #1511. - (Ref: PR #1587,
setPermissions.bicep,setNativeWebAppPermissions.bicep,deployers/terraform/main.tf,deploy-simplechat.ps1,test_deployer_key_vault_secret_permissions.py)
- Fixed credential saves failing with
(v0.261.046)
Bug Fixes
- Chat Upload File Access Errors Avoid Browser-Realm Checks
- Hardened chat upload recovery messaging so rejected browser upload requests no longer depend on a realm-specific
TypeErrorcheck. - Fetch preparation and transport failures now consistently identify the selected file and show the same recovery guidance for locked files, cloud-placeholder files, and interrupted local upload requests.
- Also removed unsafe HTML-string construction from the retry modal’s model-option cloning and reasoning-level controls.
- (Ref: chat upload file access handling, retry modal rendering,
chat-input-actions.js,chat-retry.js,test_chat_clipboard_paste_upload_support.py)
- Hardened chat upload recovery messaging so rejected browser upload requests no longer depend on a realm-specific