presenton/servers/fastapi/utils/get_env.py
Christopher Quenneville f2703ec003 feat: add Open WebUI as image generation provider
Add native support for Open WebUI's image generation API as a new
image provider option. Open WebUI exposes an OpenAI-like
/v1/images/generations endpoint but with key differences that
require special handling:

- Response is a bare JSON array instead of {"data": [...]}
- Image URLs are relative paths (e.g. /api/v1/files/.../content)
- File downloads require the same Bearer auth token

The implementation uses raw HTTP calls via aiohttp rather than the
OpenAI SDK to handle these differences. No model parameter is sent
since Open WebUI manages the image model in its own admin settings.

Backend changes:
- New OPEN_WEBUI enum value in ImageProvider
- generate_image_open_webui() method in ImageGenerationService
- Environment getters/setters for OPEN_WEBUI_IMAGE_URL and
  OPEN_WEBUI_IMAGE_API_KEY
- UserConfig model and config loading/saving pipeline updated

Frontend changes:
- New "Open WebUI" option in image provider dropdown
- Settings UI with URL and optional API key fields
- Validation, field mappings, and config persistence

Docker:
- OPEN_WEBUI_IMAGE_URL and OPEN_WEBUI_IMAGE_API_KEY added to all
  docker-compose service definitions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 12:27:45 -05:00

153 lines
2.8 KiB
Python

import os
def get_can_change_keys_env():
return os.getenv("CAN_CHANGE_KEYS")
def get_database_url_env():
return os.getenv("DATABASE_URL")
def get_app_data_directory_env():
return os.getenv("APP_DATA_DIRECTORY")
def get_temp_directory_env():
return os.getenv("TEMP_DIRECTORY")
def get_user_config_path_env():
return os.getenv("USER_CONFIG_PATH")
def get_llm_provider_env():
return os.getenv("LLM")
def get_anthropic_api_key_env():
return os.getenv("ANTHROPIC_API_KEY")
def get_anthropic_model_env():
return os.getenv("ANTHROPIC_MODEL")
def get_ollama_url_env():
return os.getenv("OLLAMA_URL")
def get_custom_llm_url_env():
return os.getenv("CUSTOM_LLM_URL")
def get_openai_api_key_env():
return os.getenv("OPENAI_API_KEY")
def get_openai_model_env():
return os.getenv("OPENAI_MODEL")
def get_google_api_key_env():
return os.getenv("GOOGLE_API_KEY")
def get_google_model_env():
return os.getenv("GOOGLE_MODEL")
def get_custom_llm_api_key_env():
return os.getenv("CUSTOM_LLM_API_KEY")
def get_ollama_model_env():
return os.getenv("OLLAMA_MODEL")
def get_custom_model_env():
return os.getenv("CUSTOM_MODEL")
def get_pexels_api_key_env():
return os.getenv("PEXELS_API_KEY")
def get_disable_image_generation_env():
return os.getenv("DISABLE_IMAGE_GENERATION")
def get_image_provider_env():
return os.getenv("IMAGE_PROVIDER")
def get_pixabay_api_key_env():
return os.getenv("PIXABAY_API_KEY")
def get_tool_calls_env():
return os.getenv("TOOL_CALLS")
def get_disable_thinking_env():
return os.getenv("DISABLE_THINKING")
def get_extended_reasoning_env():
return os.getenv("EXTENDED_REASONING")
def get_web_grounding_env():
return os.getenv("WEB_GROUNDING")
def get_comfyui_url_env():
return os.getenv("COMFYUI_URL")
def get_comfyui_workflow_env():
return os.getenv("COMFYUI_WORKFLOW")
# Dalle 3 Quality
def get_dall_e_3_quality_env():
return os.getenv("DALL_E_3_QUALITY")
# Gpt Image 1.5 Quality
def get_gpt_image_1_5_quality_env():
return os.getenv("GPT_IMAGE_1_5_QUALITY")
# Codex OAuth
def get_codex_access_token_env():
return os.getenv("CODEX_ACCESS_TOKEN")
def get_codex_refresh_token_env():
return os.getenv("CODEX_REFRESH_TOKEN")
def get_codex_token_expires_env():
return os.getenv("CODEX_TOKEN_EXPIRES")
def get_codex_account_id_env():
return os.getenv("CODEX_ACCOUNT_ID")
def get_codex_model_env():
return os.getenv("CODEX_MODEL")
def get_migrate_database_on_startup_env():
return os.getenv("MIGRATE_DATABASE_ON_STARTUP")
# Open WebUI Image Provider
def get_open_webui_image_url_env():
return os.getenv("OPEN_WEBUI_IMAGE_URL")
def get_open_webui_image_api_key_env():
return os.getenv("OPEN_WEBUI_IMAGE_API_KEY")