mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 12:25:20 +00:00
Merge pull request #17147 from anfuerer/dev
feat: Azure OpenAI image generation support
This commit is contained in:
commit
357a53eb6f
4 changed files with 55 additions and 13 deletions
|
|
@ -3100,6 +3100,12 @@ IMAGES_OPENAI_API_BASE_URL = PersistentConfig(
|
||||||
"image_generation.openai.api_base_url",
|
"image_generation.openai.api_base_url",
|
||||||
os.getenv("IMAGES_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL),
|
os.getenv("IMAGES_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL),
|
||||||
)
|
)
|
||||||
|
IMAGES_OPENAI_API_VERSION = PersistentConfig(
|
||||||
|
"IMAGES_OPENAI_API_VERSION",
|
||||||
|
"image_generation.openai.api_version",
|
||||||
|
os.getenv("IMAGES_OPENAI_API_VERSION", ""),
|
||||||
|
)
|
||||||
|
|
||||||
IMAGES_OPENAI_API_KEY = PersistentConfig(
|
IMAGES_OPENAI_API_KEY = PersistentConfig(
|
||||||
"IMAGES_OPENAI_API_KEY",
|
"IMAGES_OPENAI_API_KEY",
|
||||||
"image_generation.openai.api_key",
|
"image_generation.openai.api_key",
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,7 @@ from open_webui.config import (
|
||||||
IMAGE_SIZE,
|
IMAGE_SIZE,
|
||||||
IMAGE_STEPS,
|
IMAGE_STEPS,
|
||||||
IMAGES_OPENAI_API_BASE_URL,
|
IMAGES_OPENAI_API_BASE_URL,
|
||||||
|
IMAGES_OPENAI_API_VERSION,
|
||||||
IMAGES_OPENAI_API_KEY,
|
IMAGES_OPENAI_API_KEY,
|
||||||
IMAGES_GEMINI_API_BASE_URL,
|
IMAGES_GEMINI_API_BASE_URL,
|
||||||
IMAGES_GEMINI_API_KEY,
|
IMAGES_GEMINI_API_KEY,
|
||||||
|
|
@ -1019,6 +1020,7 @@ app.state.config.ENABLE_IMAGE_GENERATION = ENABLE_IMAGE_GENERATION
|
||||||
app.state.config.ENABLE_IMAGE_PROMPT_GENERATION = ENABLE_IMAGE_PROMPT_GENERATION
|
app.state.config.ENABLE_IMAGE_PROMPT_GENERATION = ENABLE_IMAGE_PROMPT_GENERATION
|
||||||
|
|
||||||
app.state.config.IMAGES_OPENAI_API_BASE_URL = IMAGES_OPENAI_API_BASE_URL
|
app.state.config.IMAGES_OPENAI_API_BASE_URL = IMAGES_OPENAI_API_BASE_URL
|
||||||
|
app.state.config.IMAGES_OPENAI_API_VERSION = IMAGES_OPENAI_API_VERSION
|
||||||
app.state.config.IMAGES_OPENAI_API_KEY = IMAGES_OPENAI_API_KEY
|
app.state.config.IMAGES_OPENAI_API_KEY = IMAGES_OPENAI_API_KEY
|
||||||
|
|
||||||
app.state.config.IMAGES_GEMINI_API_BASE_URL = IMAGES_GEMINI_API_BASE_URL
|
app.state.config.IMAGES_GEMINI_API_BASE_URL = IMAGES_GEMINI_API_BASE_URL
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ async def get_config(request: Request, user=Depends(get_admin_user)):
|
||||||
"prompt_generation": request.app.state.config.ENABLE_IMAGE_PROMPT_GENERATION,
|
"prompt_generation": request.app.state.config.ENABLE_IMAGE_PROMPT_GENERATION,
|
||||||
"openai": {
|
"openai": {
|
||||||
"OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
"OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
||||||
|
"OPENAI_API_VERSION": request.app.state.config.IMAGES_OPENAI_API_VERSION,
|
||||||
"OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
"OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
||||||
},
|
},
|
||||||
"automatic1111": {
|
"automatic1111": {
|
||||||
|
|
@ -72,6 +73,7 @@ async def get_config(request: Request, user=Depends(get_admin_user)):
|
||||||
|
|
||||||
class OpenAIConfigForm(BaseModel):
|
class OpenAIConfigForm(BaseModel):
|
||||||
OPENAI_API_BASE_URL: str
|
OPENAI_API_BASE_URL: str
|
||||||
|
OPENAI_API_VERSION: str
|
||||||
OPENAI_API_KEY: str
|
OPENAI_API_KEY: str
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -119,6 +121,9 @@ async def update_config(
|
||||||
request.app.state.config.IMAGES_OPENAI_API_BASE_URL = (
|
request.app.state.config.IMAGES_OPENAI_API_BASE_URL = (
|
||||||
form_data.openai.OPENAI_API_BASE_URL
|
form_data.openai.OPENAI_API_BASE_URL
|
||||||
)
|
)
|
||||||
|
request.app.state.config.IMAGES_OPENAI_API_VERSION = (
|
||||||
|
form_data.openai.OPENAI_API_VERSION
|
||||||
|
)
|
||||||
request.app.state.config.IMAGES_OPENAI_API_KEY = form_data.openai.OPENAI_API_KEY
|
request.app.state.config.IMAGES_OPENAI_API_KEY = form_data.openai.OPENAI_API_KEY
|
||||||
|
|
||||||
request.app.state.config.IMAGES_GEMINI_API_BASE_URL = (
|
request.app.state.config.IMAGES_GEMINI_API_BASE_URL = (
|
||||||
|
|
@ -165,6 +170,7 @@ async def update_config(
|
||||||
"prompt_generation": request.app.state.config.ENABLE_IMAGE_PROMPT_GENERATION,
|
"prompt_generation": request.app.state.config.ENABLE_IMAGE_PROMPT_GENERATION,
|
||||||
"openai": {
|
"openai": {
|
||||||
"OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
"OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
||||||
|
"OPENAI_API_VERSION": request.app.state.config.IMAGES_OPENAI_API_VERSION,
|
||||||
"OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
"OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
||||||
},
|
},
|
||||||
"automatic1111": {
|
"automatic1111": {
|
||||||
|
|
@ -544,10 +550,16 @@ async def image_generations(
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
api_version_query_param = ""
|
||||||
|
if request.app.state.config.IMAGES_OPENAI_API_VERSION:
|
||||||
|
api_version_query_param = (
|
||||||
|
f"?api-version={request.app.state.config.IMAGES_OPENAI_API_VERSION}"
|
||||||
|
)
|
||||||
|
|
||||||
# Use asyncio.to_thread for the requests.post call
|
# Use asyncio.to_thread for the requests.post call
|
||||||
r = await asyncio.to_thread(
|
r = await asyncio.to_thread(
|
||||||
requests.post,
|
requests.post,
|
||||||
url=f"{request.app.state.config.IMAGES_OPENAI_API_BASE_URL}/images/generations",
|
url=f"{request.app.state.config.IMAGES_OPENAI_API_BASE_URL}/images/generations{api_version_query_param}",
|
||||||
json=data,
|
json=data,
|
||||||
headers=headers,
|
headers=headers,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -599,22 +599,44 @@
|
||||||
{/if}
|
{/if}
|
||||||
{:else if config?.engine === 'openai'}
|
{:else if config?.engine === 'openai'}
|
||||||
<div>
|
<div>
|
||||||
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('OpenAI API Config')}</div>
|
<div class=" mb-2 text-sm font-medium">{$i18n.t('OpenAI API Config')}</div>
|
||||||
|
<div class="flex w-full">
|
||||||
<div class="flex gap-2 mb-1">
|
<div class="flex-1 mr-2">
|
||||||
<input
|
<input
|
||||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
placeholder={$i18n.t('API Base URL')}
|
placeholder={$i18n.t('API Base URL')}
|
||||||
bind:value={config.openai.OPENAI_API_BASE_URL}
|
bind:value={config.openai.OPENAI_API_BASE_URL}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class=" mb-2 text-sm font-medium">{$i18n.t('API Key')}</div>
|
||||||
|
<div class="flex w-full">
|
||||||
|
<div class="flex-1 mr-2">
|
||||||
<SensitiveInput
|
<SensitiveInput
|
||||||
placeholder={$i18n.t('API Key')}
|
placeholder={$i18n.t('API Key')}
|
||||||
bind:value={config.openai.OPENAI_API_KEY}
|
bind:value={config.openai.OPENAI_API_KEY}
|
||||||
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class=" mb-2 text-sm font-medium">{$i18n.t('API Version')}</div>
|
||||||
|
<div class="flex w-full">
|
||||||
|
<div class="flex-1 mr-2">
|
||||||
|
<input
|
||||||
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
|
placeholder={$i18n.t('API Version')}
|
||||||
|
bind:value={config.openai.OPENAI_API_VERSION}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{:else if config?.engine === 'gemini'}
|
{:else if config?.engine === 'gemini'}
|
||||||
<div>
|
<div>
|
||||||
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Gemini API Config')}</div>
|
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Gemini API Config')}</div>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue