Conversation
The panel rendered a provider's parameter list in the order the definitions happen to arrive in, so it asked about temperature, then reasoning, then whether to resend files, with nothing to say which belonged together. The keys are filed under six headings now, with a count beside each of what this conversation has changed inside it, which is what the owner scans for before reaching for Reset. A key this map has never heard of, which is what a deployment's own customParams look like, keeps its place in the last section instead of being guessed at or dropped. Every parameter stays on screen. A settings panel is read as much as it is edited, and a disclosure trades seeing the current state at a glance for vertical space that costs nothing to find elsewhere: the headings are captions rather than buttons, a control is measured against the row it sits in rather than padded to a fixed block, and only free text takes the full width. A number, a toggle or a choice says the same thing in half of a 300px panel, so two sit side by side and the narrow ones in a section come first, leaving one ragged edge at the bottom instead of a gap beside every full-width field. Reset and Save As Preset share the closing row. Fifteen parameters occupy 954px where the same fifteen took 1243px with four of the six sections shut. Grouping alone would still show controls that do nothing. A definition can now declare what it rides along with: OpenAI's reasoning summary, mode and context travel inside the reasoning object the Responses API takes and are dropped by the server without it; a thinking budget is read only while thinking is enabled; a cache lifetime only while the cache is being written. Those five declare it, the panel judges each one on the companion's effective value, and a section left with nothing live disappears rather than standing empty. The rule lives on the definition rather than in the panel so a deployment defining its own parameters can state one too. The custom instructions field caps its own rows. It is sized by a shadow copy of itself, measured as the panel mounts and before the sidebar has settled on a width, and that measurement can come back as one word per line; a CSS max-height was hiding the wrong answer rather than correcting it. No parameter changes what it sends. This drops controls for values the server was already discarding.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
โน๏ธ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with ๐ while any review is running, comments if it has suggestions, and reacts with ๐ once all reviews finish with no findings. |
There was a problem hiding this comment.
๐ก Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 370783eac1
โน๏ธ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with ๐.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| export interface SettingDefinition { | ||
| key: string; | ||
| /** Conditions that must all hold, or this parameter does nothing and is not shown. */ | ||
| dependsOn?: SettingDependency[]; |
There was a problem hiding this comment.
Accept dependsOn in the endpoint config schema
When an operator declares dependsOn in customParams.paramDefinitions, endpointSchema parses the entry through paramDefinitionSchema, which does not include this new property, so Zod strips it before the configuration reaches the client. Consequently, the advertised dependency support silently works only for built-in definitions; add a corresponding nested field to paramDefinitionSchema so it can be configured in librechat.yaml.
AGENTS.md reference: AGENTS.md:L66-L68
Useful? React with ๐ย / ๐.
| }, | ||
| reasoning_summary: { | ||
| key: 'reasoning_summary', | ||
| dependsOn: [{ key: 'useResponsesApi', equals: true }], |
There was a problem hiding this comment.
Preserve reasoning controls for reasoning-object endpoints
For a custom OpenAI-compatible endpoint configured with reasoningFormat: reasoningObject, applyReasoningConfig deliberately sends reasoning_summary, reasoning_mode, and reasoning_context through modelKwargs.reasoning without requiring useResponsesApi; these unconditional dependencies now hide controls that previously worked unless the user enables a transport mode the gateway may not support. Availability needs to account for the endpoint's reasoning format rather than treating useResponsesApi as the sole capability signal.
AGENTS.md reference: AGENTS.md:L31-L34
Useful? React with ๐ย / ๐.
Summary
Part 5 of 6 of the quieter-layout stack, based on #16246 (
berry-13/chat-filter-menu).The parameters panel rendered a provider's parameters in the order the definitions arrived, with nothing to say which belonged together. Keys are now filed under six headings, each with a count of what this conversation has changed in it. A key the map does not know, such as a deployment's own
customParams, keeps its place in the last section. Every parameter stays visible: narrow controls sit two to a row and only free text takes the full width. Fifteen parameters now take 954px, down from 1243px.A definition can now declare the companion it depends on. OpenAI's reasoning summary, mode and context need the reasoning object; a thinking budget needs thinking enabled; a cache lifetime needs cache writes. The panel hides a control while its companion is off, and a section left empty disappears. No parameter changes what it sends; this only hides controls whose values the server was already discarding.
Type of change
Testing
Tested environments/configuration:
canaryAutomated tests:
npx tsc --noEmitinclientandpackages/clientnpx eslinton every changed file, including theshadcn/*design rulesnpx jest --findRelatedTestsover the changed client files: 437 suites, 5,437 tests passing at the top of the stackScreenshots / recordings
Before is
canary; after is the top of this stack, so an image can also show changes from later PRs in the chain. Chromium, 1440x900 desktop and 390x844 mobile.Risk / compatibility
The new field on parameter definitions is optional, so existing and custom definitions behave as before.
Checklist