mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 12:25:20 +00:00
enh: images openai api params
This commit is contained in:
parent
7762fa5ddf
commit
bbd48b3638
4 changed files with 72 additions and 18 deletions
|
|
@ -1232,19 +1232,23 @@ USER_PERMISSIONS_WORKSPACE_TOOLS_ACCESS = (
|
||||||
)
|
)
|
||||||
|
|
||||||
USER_PERMISSIONS_WORKSPACE_MODELS_IMPORT = (
|
USER_PERMISSIONS_WORKSPACE_MODELS_IMPORT = (
|
||||||
os.environ.get("USER_PERMISSIONS_WORKSPACE_MODELS_IMPORT", "False").lower() == "true"
|
os.environ.get("USER_PERMISSIONS_WORKSPACE_MODELS_IMPORT", "False").lower()
|
||||||
|
== "true"
|
||||||
)
|
)
|
||||||
|
|
||||||
USER_PERMISSIONS_WORKSPACE_MODELS_EXPORT = (
|
USER_PERMISSIONS_WORKSPACE_MODELS_EXPORT = (
|
||||||
os.environ.get("USER_PERMISSIONS_WORKSPACE_MODELS_EXPORT", "False").lower() == "true"
|
os.environ.get("USER_PERMISSIONS_WORKSPACE_MODELS_EXPORT", "False").lower()
|
||||||
|
== "true"
|
||||||
)
|
)
|
||||||
|
|
||||||
USER_PERMISSIONS_WORKSPACE_PROMPTS_IMPORT = (
|
USER_PERMISSIONS_WORKSPACE_PROMPTS_IMPORT = (
|
||||||
os.environ.get("USER_PERMISSIONS_WORKSPACE_PROMPTS_IMPORT", "False").lower() == "true"
|
os.environ.get("USER_PERMISSIONS_WORKSPACE_PROMPTS_IMPORT", "False").lower()
|
||||||
|
== "true"
|
||||||
)
|
)
|
||||||
|
|
||||||
USER_PERMISSIONS_WORKSPACE_PROMPTS_EXPORT = (
|
USER_PERMISSIONS_WORKSPACE_PROMPTS_EXPORT = (
|
||||||
os.environ.get("USER_PERMISSIONS_WORKSPACE_PROMPTS_EXPORT", "False").lower() == "true"
|
os.environ.get("USER_PERMISSIONS_WORKSPACE_PROMPTS_EXPORT", "False").lower()
|
||||||
|
== "true"
|
||||||
)
|
)
|
||||||
|
|
||||||
USER_PERMISSIONS_WORKSPACE_TOOLS_IMPORT = (
|
USER_PERMISSIONS_WORKSPACE_TOOLS_IMPORT = (
|
||||||
|
|
@ -2149,14 +2153,9 @@ PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH = int(
|
||||||
os.environ.get("PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH", "1536")
|
os.environ.get("PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH", "1536")
|
||||||
)
|
)
|
||||||
|
|
||||||
PGVECTOR_USE_HALFVEC = (
|
PGVECTOR_USE_HALFVEC = os.getenv("PGVECTOR_USE_HALFVEC", "false").lower() == "true"
|
||||||
os.getenv("PGVECTOR_USE_HALFVEC", "false").lower() == "true"
|
|
||||||
)
|
|
||||||
|
|
||||||
if (
|
if PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH > 2000 and not PGVECTOR_USE_HALFVEC:
|
||||||
PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH > 2000
|
|
||||||
and not PGVECTOR_USE_HALFVEC
|
|
||||||
):
|
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH is set to "
|
"PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH is set to "
|
||||||
f"{PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH}, which exceeds the 2000 dimension limit of the "
|
f"{PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH}, which exceeds the 2000 dimension limit of the "
|
||||||
|
|
@ -3449,6 +3448,18 @@ IMAGES_OPENAI_API_KEY = PersistentConfig(
|
||||||
os.getenv("IMAGES_OPENAI_API_KEY", OPENAI_API_KEY),
|
os.getenv("IMAGES_OPENAI_API_KEY", OPENAI_API_KEY),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
images_openai_params = os.getenv("IMAGES_OPENAI_PARAMS", "")
|
||||||
|
try:
|
||||||
|
images_openai_params = json.loads(images_openai_params)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
images_openai_params = {}
|
||||||
|
|
||||||
|
|
||||||
|
IMAGES_OPENAI_API_PARAMS = PersistentConfig(
|
||||||
|
"IMAGES_OPENAI_API_PARAMS", "image_generation.openai.params", images_openai_params
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
IMAGES_GEMINI_API_BASE_URL = PersistentConfig(
|
IMAGES_GEMINI_API_BASE_URL = PersistentConfig(
|
||||||
"IMAGES_GEMINI_API_BASE_URL",
|
"IMAGES_GEMINI_API_BASE_URL",
|
||||||
"image_generation.gemini.api_base_url",
|
"image_generation.gemini.api_base_url",
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,7 @@ from open_webui.config import (
|
||||||
IMAGES_OPENAI_API_BASE_URL,
|
IMAGES_OPENAI_API_BASE_URL,
|
||||||
IMAGES_OPENAI_API_VERSION,
|
IMAGES_OPENAI_API_VERSION,
|
||||||
IMAGES_OPENAI_API_KEY,
|
IMAGES_OPENAI_API_KEY,
|
||||||
|
IMAGES_OPENAI_API_PARAMS,
|
||||||
IMAGES_GEMINI_API_BASE_URL,
|
IMAGES_GEMINI_API_BASE_URL,
|
||||||
IMAGES_GEMINI_API_KEY,
|
IMAGES_GEMINI_API_KEY,
|
||||||
IMAGES_GEMINI_ENDPOINT_METHOD,
|
IMAGES_GEMINI_ENDPOINT_METHOD,
|
||||||
|
|
@ -1094,6 +1095,7 @@ app.state.config.IMAGE_STEPS = IMAGE_STEPS
|
||||||
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_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_OPENAI_API_PARAMS = IMAGES_OPENAI_API_PARAMS
|
||||||
|
|
||||||
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
|
||||||
app.state.config.IMAGES_GEMINI_API_KEY = IMAGES_GEMINI_API_KEY
|
app.state.config.IMAGES_GEMINI_API_KEY = IMAGES_GEMINI_API_KEY
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,7 @@ class ImagesConfig(BaseModel):
|
||||||
IMAGES_OPENAI_API_BASE_URL: str
|
IMAGES_OPENAI_API_BASE_URL: str
|
||||||
IMAGES_OPENAI_API_KEY: str
|
IMAGES_OPENAI_API_KEY: str
|
||||||
IMAGES_OPENAI_API_VERSION: str
|
IMAGES_OPENAI_API_VERSION: str
|
||||||
|
IMAGES_OPENAI_API_PARAMS: Optional[dict | str]
|
||||||
|
|
||||||
AUTOMATIC1111_BASE_URL: str
|
AUTOMATIC1111_BASE_URL: str
|
||||||
AUTOMATIC1111_API_AUTH: Optional[dict | str]
|
AUTOMATIC1111_API_AUTH: Optional[dict | str]
|
||||||
|
|
@ -152,6 +153,7 @@ async def get_config(request: Request, user=Depends(get_admin_user)):
|
||||||
"IMAGES_OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
"IMAGES_OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
||||||
"IMAGES_OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
"IMAGES_OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
||||||
"IMAGES_OPENAI_API_VERSION": request.app.state.config.IMAGES_OPENAI_API_VERSION,
|
"IMAGES_OPENAI_API_VERSION": request.app.state.config.IMAGES_OPENAI_API_VERSION,
|
||||||
|
"IMAGES_OPENAI_API_PARAMS": request.app.state.config.IMAGES_OPENAI_API_PARAMS,
|
||||||
"AUTOMATIC1111_BASE_URL": request.app.state.config.AUTOMATIC1111_BASE_URL,
|
"AUTOMATIC1111_BASE_URL": request.app.state.config.AUTOMATIC1111_BASE_URL,
|
||||||
"AUTOMATIC1111_API_AUTH": request.app.state.config.AUTOMATIC1111_API_AUTH,
|
"AUTOMATIC1111_API_AUTH": request.app.state.config.AUTOMATIC1111_API_AUTH,
|
||||||
"AUTOMATIC1111_PARAMS": request.app.state.config.AUTOMATIC1111_PARAMS,
|
"AUTOMATIC1111_PARAMS": request.app.state.config.AUTOMATIC1111_PARAMS,
|
||||||
|
|
@ -229,6 +231,9 @@ async def update_config(
|
||||||
request.app.state.config.IMAGES_OPENAI_API_VERSION = (
|
request.app.state.config.IMAGES_OPENAI_API_VERSION = (
|
||||||
form_data.IMAGES_OPENAI_API_VERSION
|
form_data.IMAGES_OPENAI_API_VERSION
|
||||||
)
|
)
|
||||||
|
request.app.state.config.IMAGES_OPENAI_API_PARAMS = (
|
||||||
|
form_data.IMAGES_OPENAI_API_PARAMS
|
||||||
|
)
|
||||||
|
|
||||||
request.app.state.config.AUTOMATIC1111_BASE_URL = form_data.AUTOMATIC1111_BASE_URL
|
request.app.state.config.AUTOMATIC1111_BASE_URL = form_data.AUTOMATIC1111_BASE_URL
|
||||||
request.app.state.config.AUTOMATIC1111_API_AUTH = form_data.AUTOMATIC1111_API_AUTH
|
request.app.state.config.AUTOMATIC1111_API_AUTH = form_data.AUTOMATIC1111_API_AUTH
|
||||||
|
|
@ -292,6 +297,7 @@ async def update_config(
|
||||||
"IMAGES_OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
"IMAGES_OPENAI_API_BASE_URL": request.app.state.config.IMAGES_OPENAI_API_BASE_URL,
|
||||||
"IMAGES_OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
"IMAGES_OPENAI_API_KEY": request.app.state.config.IMAGES_OPENAI_API_KEY,
|
||||||
"IMAGES_OPENAI_API_VERSION": request.app.state.config.IMAGES_OPENAI_API_VERSION,
|
"IMAGES_OPENAI_API_VERSION": request.app.state.config.IMAGES_OPENAI_API_VERSION,
|
||||||
|
"IMAGES_OPENAI_API_PARAMS": request.app.state.config.IMAGES_OPENAI_API_PARAMS,
|
||||||
"AUTOMATIC1111_BASE_URL": request.app.state.config.AUTOMATIC1111_BASE_URL,
|
"AUTOMATIC1111_BASE_URL": request.app.state.config.AUTOMATIC1111_BASE_URL,
|
||||||
"AUTOMATIC1111_API_AUTH": request.app.state.config.AUTOMATIC1111_API_AUTH,
|
"AUTOMATIC1111_API_AUTH": request.app.state.config.AUTOMATIC1111_API_AUTH,
|
||||||
"AUTOMATIC1111_PARAMS": request.app.state.config.AUTOMATIC1111_PARAMS,
|
"AUTOMATIC1111_PARAMS": request.app.state.config.AUTOMATIC1111_PARAMS,
|
||||||
|
|
@ -539,6 +545,12 @@ async def image_generations(
|
||||||
if ENABLE_FORWARD_USER_INFO_HEADERS:
|
if ENABLE_FORWARD_USER_INFO_HEADERS:
|
||||||
headers = include_user_info_headers(headers, user)
|
headers = include_user_info_headers(headers, user)
|
||||||
|
|
||||||
|
url = (
|
||||||
|
f"{request.app.state.config.IMAGES_OPENAI_API_BASE_URL}/images/generations",
|
||||||
|
)
|
||||||
|
if request.app.state.config.IMAGES_OPENAI_API_VERSION:
|
||||||
|
url = f"{url}?api-version={request.app.state.config.IMAGES_OPENAI_API_VERSION}"
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"model": model,
|
"model": model,
|
||||||
"prompt": form_data.prompt,
|
"prompt": form_data.prompt,
|
||||||
|
|
@ -553,18 +565,17 @@ async def image_generations(
|
||||||
if "gpt-image-1" in request.app.state.config.IMAGE_GENERATION_MODEL
|
if "gpt-image-1" in request.app.state.config.IMAGE_GENERATION_MODEL
|
||||||
else {"response_format": "b64_json"}
|
else {"response_format": "b64_json"}
|
||||||
),
|
),
|
||||||
|
**(
|
||||||
|
{}
|
||||||
|
if not request.app.state.config.IMAGES_OPENAI_API_PARAMS
|
||||||
|
else request.app.state.config.IMAGES_OPENAI_API_PARAMS
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
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{api_version_query_param}",
|
url=url,
|
||||||
json=data,
|
json=data,
|
||||||
headers=headers,
|
headers=headers,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,11 @@
|
||||||
AUTOMATIC1111_PARAMS:
|
AUTOMATIC1111_PARAMS:
|
||||||
typeof config.AUTOMATIC1111_PARAMS === 'string' && config.AUTOMATIC1111_PARAMS.trim() !== ''
|
typeof config.AUTOMATIC1111_PARAMS === 'string' && config.AUTOMATIC1111_PARAMS.trim() !== ''
|
||||||
? JSON.parse(config.AUTOMATIC1111_PARAMS)
|
? JSON.parse(config.AUTOMATIC1111_PARAMS)
|
||||||
|
: {},
|
||||||
|
IMAGES_OPENAI_API_PARAMS:
|
||||||
|
typeof config.IMAGES_OPENAI_API_PARAMS === 'string' &&
|
||||||
|
config.IMAGES_OPENAI_API_PARAMS.trim() !== ''
|
||||||
|
? JSON.parse(config.IMAGES_OPENAI_API_PARAMS)
|
||||||
: {}
|
: {}
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
toast.error(`${error}`);
|
toast.error(`${error}`);
|
||||||
|
|
@ -249,6 +254,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.IMAGES_OPENAI_API_PARAMS =
|
||||||
|
typeof config.IMAGES_OPENAI_API_PARAMS === 'object'
|
||||||
|
? JSON.stringify(config.IMAGES_OPENAI_API_PARAMS ?? {}, null, 2)
|
||||||
|
: config.IMAGES_OPENAI_API_PARAMS;
|
||||||
|
|
||||||
config.AUTOMATIC1111_PARAMS =
|
config.AUTOMATIC1111_PARAMS =
|
||||||
typeof config.AUTOMATIC1111_PARAMS === 'object'
|
typeof config.AUTOMATIC1111_PARAMS === 'object'
|
||||||
? JSON.stringify(config.AUTOMATIC1111_PARAMS ?? {}, null, 2)
|
? JSON.stringify(config.AUTOMATIC1111_PARAMS ?? {}, null, 2)
|
||||||
|
|
@ -465,6 +475,26 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-2.5">
|
||||||
|
<div class="flex w-full justify-between items-center">
|
||||||
|
<div class="text-xs pr-2 shrink-0">
|
||||||
|
<div class="">
|
||||||
|
{$i18n.t('Additional Parameters')}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-1.5 flex w-full">
|
||||||
|
<div class="flex-1 mr-2">
|
||||||
|
<Textarea
|
||||||
|
className="rounded-lg w-full py-2 px-3 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
|
bind:value={config.IMAGES_OPENAI_API_PARAMS}
|
||||||
|
placeholder={$i18n.t('Enter additional parameters in JSON format')}
|
||||||
|
minSize={100}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{:else if (config?.IMAGE_GENERATION_ENGINE ?? 'automatic1111') === 'automatic1111'}
|
{:else if (config?.IMAGE_GENERATION_ENGINE ?? 'automatic1111') === 'automatic1111'}
|
||||||
<div class="mb-2.5">
|
<div class="mb-2.5">
|
||||||
<div class="flex w-full justify-between items-center">
|
<div class="flex w-full justify-between items-center">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue