| @@ -5,8 +5,9 @@ | ||
| 5 | 5 | class Constants |
| 6 | 6 | { |
| 7 | 7 | const AATXT_PLUGIN_SLUG = 'auto-alt-text'; |
| 8 | 8 | const AATXT_AZURE_DEFAULT_LANGUAGE = 'en'; |
| 9 | + const AATXT_AZURE_COMPUTER_VISION_API_VERSION = '2024-02-01'; | |
| 9 | 10 | const AATXT_PLUGIN_OPTIONS_PAGE_SLUG = 'auto-alt-text-options'; |
| 10 | 11 | const AATXT_PLUGIN_OPTION_LOG_PAGE_SLUG = 'auto-alt-text-log'; |
| 11 | 12 | const AATXT_PLUGIN_ASSETS_HANDLE = 'aatxt-auto-alt-text-options'; |
| 12 | 13 | const AATXT_PLUGIN_MEDIA_LIBRARY_HANDLE = 'aatxt-auto-alt-text-media-library'; |
| @@ -14,16 +15,47 @@ | ||
| 14 | 15 | const AATXT_OPTION_FIELD_MODEL_OPENAI = 'aatxt_model_openai'; |
| 15 | 16 | |
| 16 | 17 | const AATXT_GPT4O = 'gpt-4o'; |
| 17 | 18 | const AATXT_GPT4O_MINI = 'gpt-4o-mini'; |
| 18 | - const AATXT_O1_MINI = 'o1-mini'; | |
| 19 | + const AATXT_GPT5 = 'gpt-5'; | |
| 20 | + const AATXT_GPT5_MINI = 'gpt-5-mini'; | |
| 21 | + const AATXT_GPT5_NANO = 'gpt-5-nano'; | |
| 22 | + const AATXT_OPENAI_FALLBACK_MODEL = self::AATXT_GPT5_NANO; | |
| 19 | 23 | const AATXT_OPTION_FIELD_MODEL_OPENAI_OPTIONS = [ |
| 20 | 24 | self::AATXT_GPT4O => 'GPT-4o', |
| 21 | 25 | self::AATXT_GPT4O_MINI => 'GPT-4o Mini', |
| 22 | - self::AATXT_O1_MINI => 'o1 Mini', | |
| 26 | + self::AATXT_GPT5 => 'GPT-5', | |
| 27 | + self::AATXT_GPT5_MINI => 'GPT-5 Mini', | |
| 28 | + self::AATXT_GPT5_NANO => 'GPT-5 Nano', | |
| 23 | 29 | ]; |
| 30 | + | |
| 24 | 31 | const AATXT_OPTION_FIELD_PROMPT_OPENAI = 'aatxt_prompt_openai'; |
| 25 | 32 | const AATXT_OPTION_FIELD_API_KEY_OPENAI = 'aatxt_api_key_openai'; |
| 33 | + const AATXT_OPTION_FIELD_API_KEY_ANTHROPIC = 'aatxt_api_key_anthropic'; | |
| 34 | + const AATXT_OPTION_FIELD_MODEL_ANTHROPIC = 'aatxt_model_anthropic'; | |
| 35 | + const AATXT_CLAUDE_SONNET_4 = 'claude-sonnet-4-20250514'; | |
| 36 | + const AATXT_CLAUDE_HAIKU_3_5 = 'claude-3-5-haiku-20241022'; | |
| 37 | + const AATXT_CLAUDE_FALLBACK_MODEL = 'claude-haiku-4-5'; | |
| 38 | + | |
| 39 | + const AATXT_OPTION_FIELD_MODEL_ANTHROPIC_OPTIONS = [ | |
| 40 | + self::AATXT_CLAUDE_HAIKU_3_5 => 'Claude 3.5 Haiku', | |
| 41 | + self::AATXT_CLAUDE_SONNET_4 => 'Claude Sonnet 4', | |
| 42 | + ]; | |
| 43 | + const AATXT_API_VERSION = '2023-06-01'; | |
| 44 | + const AATXT_OPTION_FIELD_PROMPT_ANTHROPIC = 'aatxt_prompt_anthropic'; | |
| 45 | + const AATXT_OPTION_FIELD_API_KEY_GEMINI = 'aatxt_api_key_gemini'; | |
| 46 | + const AATXT_OPTION_FIELD_MODEL_GEMINI = 'aatxt_model_gemini'; | |
| 47 | + const AATXT_OPTION_FIELD_PROMPT_GEMINI = 'aatxt_prompt_gemini'; | |
| 48 | + const AATXT_GEMINI_FLASH_3_6 = 'gemini-3.6-flash'; | |
| 49 | + const AATXT_GEMINI_FLASH_3_5 = 'gemini-3.5-flash'; | |
| 50 | + const AATXT_GEMINI_FLASH_2_5 = 'gemini-2.5-flash'; | |
| 51 | + const AATXT_GEMINI_FALLBACK_MODEL = self::AATXT_GEMINI_FLASH_3_6; | |
| 52 | + | |
| 53 | + const AATXT_OPTION_FIELD_MODEL_GEMINI_OPTIONS = [ | |
| 54 | + self::AATXT_GEMINI_FLASH_3_6 => 'Gemini 3.6 Flash', | |
| 55 | + self::AATXT_GEMINI_FLASH_3_5 => 'Gemini 3.5 Flash', | |
| 56 | + self::AATXT_GEMINI_FLASH_2_5 => 'Gemini 2.5 Flash', | |
| 57 | + ]; | |
| 26 | 58 | const AATXT_OPTION_FIELD_API_KEY_AZURE_COMPUTER_VISION = 'aatxt_api_key_azure_computer_vision'; |
| 27 | 59 | const AATXT_OPTION_FIELD_API_KEY_AZURE_TRANSLATE_INSTANCE = 'aatxt_api_key_azure_translate_instance'; |
| 28 | 60 | const AATXT_OPTION_TYPOLOGY_CHOICE_ARTICLE_TITLE = 'article-title'; |
| 29 | 61 | const AATXT_OPTION_TYPOLOGY_CHOICE_ATTACHMENT_TITLE = 'attachment-title'; |
| @@ -28,8 +60,10 @@ | ||
| 28 | 60 | const AATXT_OPTION_TYPOLOGY_CHOICE_ARTICLE_TITLE = 'article-title'; |
| 29 | 61 | const AATXT_OPTION_TYPOLOGY_CHOICE_ATTACHMENT_TITLE = 'attachment-title'; |
| 30 | 62 | const AATXT_OPTION_TYPOLOGY_CHOICE_OPENAI = 'openai'; |
| 31 | 63 | const AATXT_OPTION_TYPOLOGY_CHOICE_AZURE = 'azure'; |
| 64 | + const AATXT_OPTION_TYPOLOGY_CHOICE_ANTHROPIC = 'anthropic'; | |
| 65 | + const AATXT_OPTION_TYPOLOGY_CHOICE_GEMINI = 'gemini'; | |
| 32 | 66 | const AATXT_OPTION_TYPOLOGY_DEACTIVATED = 'deactivated'; |
| 33 | 67 | const AATXT_OPTION_FIELD_ENDPOINT_AZURE_COMPUTER_VISION = 'aatxt_endpoint-azure-computer-vision'; |
| 34 | 68 | const AATXT_OPTION_FIELD_ENDPOINT_AZURE_TRANSLATE_INSTANCE = 'aatxt_endpoint-azure-translate-instance'; |
| 35 | 69 | const AATXT_OPTION_FIELD_REGION_AZURE_TRANSLATE_INSTANCE = 'aatxt_region_azure_translate_instance'; |
| @@ -34,15 +68,17 @@ | ||
| 34 | 68 | const AATXT_OPTION_FIELD_ENDPOINT_AZURE_TRANSLATE_INSTANCE = 'aatxt_endpoint-azure-translate-instance'; |
| 35 | 69 | const AATXT_OPTION_FIELD_REGION_AZURE_TRANSLATE_INSTANCE = 'aatxt_region_azure_translate_instance'; |
| 36 | 70 | const AATXT_OPTION_FIELD_LANGUAGE_AZURE_TRANSLATE_INSTANCE = 'aatxt_language_azure_translate_instance'; |
| 37 | 71 | const AATXT_OPTION_FIELD_PRESERVE_EXISTING_ALT_TEXT = 'aatxt_preserve_existing_alt_text'; |
| 72 | + const AATXT_OPTION_FIELD_AUTO_RENDER_ALT_TEXT = 'aatxt_auto_render_alt_text'; | |
| 73 | + const AATXT_LEGACY_ENCRYPTION_MIGRATION_DONE = 'aatxt_legacy_encryption_migration_done'; | |
| 38 | 74 | const AATXT_IMAGE_URL_TAG = '%imageUrl%'; |
| 39 | 75 | const AATXT_OPENAI_DEFAULT_PROMPT = "Act like an SEO expert and write an English alt text of up to 125 characters for this image."; |
| 40 | - const AATXT_OPENAI_VISION_MODEL = 'gpt-4o'; | |
| 41 | - const AATXT_OPENAI_FALLBACK_MODEL = 'gpt-4o-mini'; | |
| 42 | - const AATXT_OPENAI_MAX_TOKENS = 70; | |
| 43 | - const AATXT_OPENAI_CHAT_COMPLETION_ENDPOINT = 'https://api.openai.com/v1/chat/completions'; | |
| 44 | - const AATXT_AJAX_GENERATE_ALT_TEXT_NONCE = 'generate_alt_text_nonce'; | |
| 76 | + const AATXT_OPENAI_RESPONSES_API_ENDPOINT = 'https://api.openai.com/v1/responses'; | |
| 77 | + const AATXT_OPENAI_MODELS_ENDPOINT = 'https://api.openai.com/v1/models'; | |
| 78 | + const AATXT_OPENAI_MODELS_CACHE_KEY = 'aatxt_openai_models_cache'; | |
| 79 | + const AATXT_REST_NAMESPACE = 'auto-alt-text/v1'; | |
| 80 | + const AATXT_REST_ROUTE_GENERATE_ALT_TEXT = '/generate-alt-text'; | |
| 45 | 81 | const AATXT_OPENAI_ALLOWED_MIME_TYPES = [ |
| 46 | 82 | 'image/png', |
| 47 | 83 | 'image/jpeg', |
| 48 | 84 | 'image/gif', |
| @@ -53,5 +89,29 @@ | ||
| 53 | 89 | 'image/jpeg', |
| 54 | 90 | 'image/gif', |
| 55 | 91 | 'image/webp', |
| 56 | 92 | ]; |
| 93 | + | |
| 94 | + const AATXT_ANTHROPIC_ALLOWED_MIME_TYPES = [ | |
| 95 | + 'image/png', | |
| 96 | + 'image/jpeg', | |
| 97 | + 'image/gif', | |
| 98 | + 'image/webp', | |
| 99 | + ]; | |
| 100 | + | |
| 101 | + const AATXT_ANTHROPIC_ENDPOINT = 'https://api.anthropic.com/v1/messages'; | |
| 102 | + const AATXT_ANTHROPIC_MODELS_ENDPOINT = 'https://api.anthropic.com/v1/models'; | |
| 103 | + const AATXT_ANTHROPIC_MODELS_CACHE_KEY = 'aatxt_anthropic_models_cache'; | |
| 104 | + | |
| 105 | + // Google Gemini does not support GIF images (only PNG, JPEG, WEBP, HEIC, HEIF) | |
| 106 | + const AATXT_GEMINI_ALLOWED_MIME_TYPES = [ | |
| 107 | + 'image/png', | |
| 108 | + 'image/jpeg', | |
| 109 | + 'image/webp', | |
| 110 | + 'image/heic', | |
| 111 | + 'image/heif', | |
| 112 | + ]; | |
| 113 | + | |
| 114 | + const AATXT_GEMINI_INTERACTIONS_ENDPOINT = 'https://generativelanguage.googleapis.com/v1beta/interactions'; | |
| 115 | + const AATXT_GEMINI_MODELS_ENDPOINT = 'https://generativelanguage.googleapis.com/v1beta/models'; | |
| 116 | + const AATXT_GEMINI_MODELS_CACHE_KEY = 'aatxt_gemini_models_cache'; | |
| 57 | 117 | } |