* group add
* make button not wide
* make single and batch add to folder use the same style popup
* prevent stuck UI, allow scrolling, prevent ::after conflicts
* extremely large commit, beware
* clear everything after performing bulk actions
* Unify bulk selection design language
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* Add gpt-5.3-chat-latest model support
- Add to OpenAI model dropdown (index.html)
- Add to captioning multimodal model list (caption/settings.html)
- Add to OPENAI_REASONING_EFFORT_MODELS (constants.js)
- Add OPENAI_FIXED_REASONING_EFFORT map to clamp effort to 'medium' (the only value this model accepts)
- Apply fixed effort override in both Azure and general OpenAI request paths (chat-completions.js)
- Update frontend gpt-5.x regex for parameter handling (openai.js)
* Update public/scripts/openai.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
System messages in the OpenRouter messages array were being counted
toward depth and could receive cache_control breakpoints. Since
OpenRouter hoists system messages into Claude's separate system
parameter, this misplaced breakpoints and could prevent caching
entirely if the hoisted content fell below minimum cache size.
Closes#5227
77 tests covering 24 pure functions: keyToEnv, getBasicAuthHeader,
getHexString, normalizeZipEntryPath, deepMerge, uuidv4,
humanizedDateTime, tryParse, clientRelativePath, getUniqueName,
removeFileExtension, removeColorFormatting, getSeparator, isValidUrl,
urlHostnameToIPv6, toBoolean, stringToBool, trimV1, trimTrailingSlash,
mutateJsonString, isPathUnderParent, isFileURL, getRequestURL, and
formatBytes (via getBasicAuthHeader pattern).
These are all deterministic, side-effect-free functions tested without
any mocking. Placed in a separate file from the existing util.test.js
to keep concerns separated.
* Use Ollama /api/embed endpoint for vector embeddings
The deprecated /api/embeddings endpoint does not properly support the
truncate parameter, causing "input length exceeds context length" errors
when vectorizing files. Migrate to /api/embed which correctly handles
truncation and supports native batch input.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Wrap single Ollama vector calculation into batch
Fixes https://github.com/SillyTavern/SillyTavern/pull/5221/changes#r2850052729
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* backend, frontend, bugfixes
* Mobile button and sizing
* lint
* clear folder thumbnailFile on delete, rename thumbnailFile on rename
* use filteredImages when changing sort option
* Address all the review comments
* Fix friendly title generation to handle empty strings
* Move add folder button to the header
* instead of search filtering the backgrounds in a folder and showing the folder if the results > 0, search the folder names.
* Trade button places
* Adjust button text
* feat: restrict folder creation to the Global tab
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* Added filter for OpenRouter models provider selection
Now if a model is selected, only available providers for that model will show. Wanted to do the same for the quants, but I think the API is not returning the quants available for each model at the moment. Used existing API that for some reason was not consumed.
* Added filter for OpenRouter providers
Now if a model is selected, only the providers available show. Wanted to do the same with the quants but it seems the OpenRouter API is not giving the available quants list at the moment for each model.
* gua
* Now it also works on chat completion and only disables options
* detail
* Warning added
* eslint
* Move inline styles to CSS
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* feat(openrouter): disable reasoning if "Request model reasoning" is disabled
* feat(openrouter): map minimum reasoning to none if request reasoning is off
* Add hint how to disable reasoning
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* Initial plan
* feat: preserve image width/height when generating swipe images
Save width and height in ImageGenerationAttachmentProps when creating
MediaAttachment objects, and apply saved dimensions when generating
image swipes. Falls back to current extension settings if not specified.
Co-authored-by: Cohee1207 <18619528+Cohee1207@users.noreply.github.com>
* fix: validate dimension override with Number.isInteger and skip setTypeSpecificDimensions when override is present
Co-authored-by: Cohee1207 <18619528+Cohee1207@users.noreply.github.com>
* fix: call restoreOriginalDimensions when setTypeSpecificDimensions was used
Co-authored-by: Cohee1207 <18619528+Cohee1207@users.noreply.github.com>
* Contain the logic to setTypeSpecificDimensions
* Diff clean-up
* feat: enhance prompt refinement with negative input and saved resolution options
* fix: Only save image dimensions when running from command
* Fix wording in refine prompt dialog
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Cohee1207 <18619528+Cohee1207@users.noreply.github.com>
* fix(openrouter): forward reasoning across active tool-call chains
* feat(reasoning): add tool-chain forwarding toggle and honor edited reasoning
* feat(reasoning): add OpenRouter interleaved forwarding modes
* moved the reasoning forwarding dropdown into a separate line
* feat(reasoning): default tool reasoning forwarding to disabled
* refactor(openrouter): move tool reasoning mode to CC settings
Move OpenRouter tool reasoning forwarding control to response configuration and scope it to OpenRouter.
Store mode in chat completion settings (presettable), remove legacy power_user boolean/fallback, and use constants for mode values.
Preserve OpenRouter Gemini signature forwarding independently from plaintext tool reasoning mode.
* fix(openrouter): tighten active-chain reasoning forwarding
Use trailing contiguous tool-chain boundary for active-chain eligibility.
Also rename the UI control to Interleaved Thinking Forwarding and place selector on its own line.
* fix(openrouter): use adjacent assistant reasoning for tool calls
For interleaved thinking forwarding, source reasoning only from the immediately preceding assistant non-tool message.
Keep mode gating behavior unchanged and avoid history-window reasoning carryover.
* fix(openrouter): skip tool messages for reasoning source
When forwarding interleaved reasoning, ignore intervening tool result messages when resolving the preceding assistant reasoning source.
This keeps only the first tool call in a chain tied to a prior assistant reasoning block unless a later invocation carries its own reasoning.
* fix(openrouter): keep plaintext reasoning with signatures
Do not suppress forwarded tool-call reasoning when thought signatures are present.
* fix(openrouter): split interleaved thinking mode behavior
Restore distinct mode semantics: active_chain uses nearest assistant-text boundary after skipping tool/tool-call messages, while since_last_user scans for latest assistant reasoning since user.
Update UI label to Interleaved Thinking with right-aligned dropdown and explanatory tooltip.
* style(openrouter): align interleaved thinking dropdown row
Match OpenRouter interleaved thinking control layout with existing oneline-dropdown patterns.
Also update reasoning-forwarding inline comment wording for current mode behavior.
* docs(ui): clarify interleaved thinking tooltip
Use explicit API-request wording for OpenRouter interleaved thinking tooltip text.
* i18n(openrouter): localize interleaved thinking UI
Add locale keys for OpenRouter interleaved thinking label, mode options, and inline helper description.
Wire dropdown option text to data-i18n in index.html.
* fixed helper text wrapping
* fix(ui): make interleaved thinking helper text wrap
* i18n(openrouter): translate interleaved thinking labels
Replace placeholder English values for interleaved thinking keys in non-English locale files.
* fix(ui): restore interleaved thinking dropdown alignment
* Remove changes from en.json
* Type fixes
* Reworked the interleaved reasoning provider logic
* Renamed the variables in preparation for potential implementation for other providers
* Gate interleaved tool reasoning on reasoning request setting
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>