Skip to content

Conversation

@lukasdotcom
Copy link
Member

@lukasdotcom lukasdotcom commented Dec 15, 2025

Simple Overview
Adds hidden menus for override in the ui. When you select a different context you can specify settings for that context otherwise the default will be used.
image

Description

  • Creates preferences that allow for an override for all the connection settings for image, tts, and stt. These are used whenever the url is set for one of them. You'll see all the setters and getters for that in the OpenAiSettingsService. Also made sure to use the correct information in the OpenAiAPIService and do caching for each separate context for getModels.
  • Allow in the admin settings to set an override for image, tts, stt. The settings are hidden in 3 different submenus that use the new ServiceOverridePanel Component. Then changed the getModels endpoint to store the model list in 3 separate lists models, imageModels, sttModels, and ttsModels. Also added a lot of computed values for each of the settings that can be different depending on the context.

@lukasdotcom lukasdotcom marked this pull request as draft December 15, 2025 17:10
@lukasdotcom lukasdotcom force-pushed the feat/multiple-providers branch 6 times, most recently from 0a16060 to ec9f3f6 Compare December 17, 2025 14:42
@lukasdotcom lukasdotcom marked this pull request as ready for review December 17, 2025 14:42
Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
@lukasdotcom lukasdotcom force-pushed the feat/multiple-providers branch from ec9f3f6 to 87aaffa Compare January 7, 2026 15:25
Copy link
Member

@julien-nc julien-nc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Could you describe more what the change actually is? It would make it easier to navigate in the diff.
  • After switching to this branch and reloading the settings, i get
image Is it expected?
  • It is not clear what is specific to the selected context and what is global. It might help to group what is context-specific or add an indicator next to each of those fields.
  • Maybe it's more explicit or easy to follow for the users if there are 4 "service" blocks: a global one, one for image gen, one for tts, one for stt. Each block would be placed in the related section.

Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
@lukasdotcom
Copy link
Member Author

  • Could you describe more what the change actually is? It would make it easier to navigate in the diff.

    • After switching to this branch and reloading the settings, i get

image Is it expected?

* It is not clear what is specific to the selected context and what is global. It might help to group what is context-specific or add an indicator next to each of those fields.

* Maybe it's more explicit or easy to follow for the users if there are 4 "service" blocks: a global one, one for image gen, one for tts, one for stt. Each block would be placed in the related section.
  • I updated the description with some more detailed information.
  • The screenshot shows a bug that got through it shouldn't show that. I pushed a fix for that.
  • The settings that are specific to each selected context are everything until you reach Text Generation.
  • Having 4 service blocks was the other option I had been debating, but the settings are already long and I didn't want to make them even larger specifically because there are probably a lot of users that wouldn't touch all of the settings. I do think there should definitely be some indication on what settings change based on context though.

@kyteinsky
Copy link
Contributor

kyteinsky commented Jan 8, 2026

Agree with Julien, it doesn't come naturally how the settings would be affected after the dropdown is changed.
maybe it would be better to make the other sections disappear. When the dropdown is for images for example, the text2text, text2speech and speech2text sections are hidden.
Julien's solution might still be more convenient to reason about when there is a global setting and each block has an override option to add the specific api url and auth for that service, they could be collapsibles too so the settings don't look too long.
although unfortunately we don't have a collapsible widget yet in the nc/vue library afaict.
in app_api, there is a similar component, which is just a button that toggles the v-if of the div below.
image
image

Copy link
Member

@julien-nc julien-nc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we still need to clarify what is impacted by switching contexts. Either a visual clue of an explanation text in a note card.
We should mention that text generation is necessarily configured with the default context.

} else {
$serviceName = $this->openAiSettingsService->getServiceName();
if ($serviceType === 'image' && $this->openAiSettingsService->imageOverrideEnabled()) {
$serviceName = $this->openAiSettingsService->getImageServiceName();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's an override (the override URL is defined) it does not mean the service name is defined. We should probably fall back to the default one. Wdyt?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure. It does fallback to LocalAI if a service name isn't defined and I think that is a better default than the service name of the text processing provider.

@lukasdotcom lukasdotcom force-pushed the feat/multiple-providers branch from 646c2e0 to dba53a3 Compare January 9, 2026 18:25
Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
@lukasdotcom lukasdotcom force-pushed the feat/multiple-providers branch from dba53a3 to 826cbbf Compare January 9, 2026 18:29
@lukasdotcom
Copy link
Member Author

Agree with Julien, it doesn't come naturally how the settings would be affected after the dropdown is changed. maybe it would be better to make the other sections disappear. When the dropdown is for images for example, the text2text, text2speech and speech2text sections are hidden. Julien's solution might still be more convenient to reason about when there is a global setting and each block has an override option to add the specific api url and auth for that service, they could be collapsibles too so the settings don't look too long. although unfortunately we don't have a collapsible widget yet in the nc/vue library afaict. in app_api, there is a similar component, which is just a button that toggles the v-if of the div below. image image

I like the collapsible idea and made an implementation using that. There are now collapsible portions that contain the settings for each. Here is what it looks like for the image portion. I also added an outline to make it clear what settings are changed by this like Julien had said.
image

Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants