feat: advanced custom channel (#5590)

This commit is contained in:
Seefs
2026-06-18 18:00:27 +08:00
committed by GitHub
parent 21d4d18dfc
commit 3f2c0aeda7
26 changed files with 3012 additions and 62 deletions
+72 -4
View File
@@ -193,6 +193,7 @@
"Add Provider": "Add Provider",
"Add Quota": "Add Quota",
"Add ratio override": "Add ratio override",
"Add route": "Add route",
"Add Row": "Add Row",
"Add Rule": "Add Rule",
"Add rule group": "Add rule group",
@@ -228,6 +229,10 @@
"Administrator username": "Administrator username",
"Advanced": "Advanced",
"Advanced Configuration": "Advanced Configuration",
"Advanced Custom": "Advanced Custom",
"Advanced custom configuration is required": "Advanced custom configuration is required",
"Advanced custom configuration requires at least one route or fallback": "Advanced custom configuration requires at least one route or fallback",
"Advanced Custom Routes": "Advanced Custom Routes",
"Advanced options": "Advanced options",
"Advanced Options": "Advanced Options",
"Advanced platform configuration.": "Advanced platform configuration.",
@@ -340,6 +345,7 @@
"Answer": "Answer",
"Answers for common access and billing questions": "Answers for common access and billing questions",
"Anthropic": "Anthropic",
"Anthropic Messages to OpenAI Chat": "Anthropic Messages to OpenAI Chat",
"Any Match (OR)": "Any Match (OR)",
"API": "API",
"API Access": "API Access",
@@ -442,8 +448,14 @@
"Audio Preview": "Audio Preview",
"Audio ratio": "Audio ratio",
"Audio Tokens": "Audio Tokens",
"Auth": "Auth",
"Auth configured": "Auth configured",
"Auth name": "Auth name",
"Auth name is required": "Auth name is required",
"Auth Style": "Auth Style",
"Auth type is invalid": "Auth type is invalid",
"Auth value": "Auth value",
"Auth value is required": "Auth value is required",
"auth.resetPasswordConfirm.backToLogin": "Return to login",
"auth.resetPasswordConfirm.confirm": "Confirm reset password",
"auth.resetPasswordConfirm.description": "Confirm the reset request to generate a new password.",
@@ -529,6 +541,8 @@
"Base rate limit windows for this account.": "Base rate limit windows for this account.",
"Base URL": "Base URL",
"Base URL is required for this channel type": "Base URL is required for this channel type",
"Base URL is required when an advanced route uses an upstream path": "Base URL is required when an advanced route uses an upstream path",
"Base URL is required when fallback is enabled": "Base URL is required when fallback is enabled",
"Base URL of your Uptime Kuma instance": "Base URL of your Uptime Kuma instance",
"Basic Authentication": "Basic Authentication",
"Basic Configuration": "Basic Configuration",
@@ -667,6 +681,8 @@
"Changes are written to the settings draft on save.": "Changes are written to the settings draft on save.",
"Changing...": "Changing...",
"Channel": "Channel",
"Channel {{name}}": "Channel {{name}}",
"Channel {{name}} model {{model}}": "Channel {{name}} model {{model}}",
"Channel Affinity": "Channel Affinity",
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.",
"Channel Affinity: Upstream Cache Hit": "Channel Affinity: Upstream Cache Hit",
@@ -680,8 +696,6 @@
"Channel key": "Channel key",
"Channel key unlocked": "Channel key unlocked",
"Channel models": "Channel models",
"Channel {{name}}": "Channel {{name}}",
"Channel {{name}} model {{model}}": "Channel {{name}} model {{model}}",
"Channel name is required": "Channel name is required",
"Channel test completed": "Channel test completed",
"Channel type is required": "Channel type is required",
@@ -741,6 +755,7 @@
"Classic (Legacy Frontend)": "Classic (Legacy Frontend)",
"Claude": "Claude",
"Claude CLI Header Passthrough": "Claude CLI Header Passthrough",
"Claude Messages": "Claude Messages",
"Clean": "Clean",
"Clean history logs": "Clean history logs",
"Clean logs": "Clean logs",
@@ -884,6 +899,7 @@
"Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.": "Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.",
"Configure pricing ratios for a specific model.": "Configure pricing ratios for a specific model.",
"Configure rate limiting rules for a specific user group.": "Configure rate limiting rules for a specific user group.",
"Configure routes": "Configure routes",
"Configure the ratio for this group.": "Configure the ratio for this group.",
"Configure upstream providers and routing.": "Configure upstream providers and routing.",
"Configure Waffo Pancake hosted checkout integration for USD-priced top-ups": "Configure Waffo Pancake hosted checkout integration for USD-priced top-ups",
@@ -962,6 +978,9 @@
"Convert reasoning_content to <think> tag in content": "Convert reasoning_content to <think> tag in content",
"Convert string to lowercase": "Convert string to lowercase",
"Convert string to uppercase": "Convert string to uppercase",
"Converter": "Converter",
"Converter does not match incoming path": "Converter does not match incoming path",
"Converter is not registered": "Converter is not registered",
"Copied": "Copied",
"Copied {{count}} key(s)": "Copied {{count}} key(s)",
"Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})": "Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})",
@@ -1145,6 +1164,7 @@
"Default / range": "Default / range",
"Default API Version *": "Default API Version *",
"Default API version for this channel": "Default API version for this channel",
"Default Bearer": "Default Bearer",
"Default Collapse Sidebar": "Default Collapse Sidebar",
"Default consumption chart": "Default consumption chart",
"Default Max Tokens": "Default Max Tokens",
@@ -1754,6 +1774,9 @@
"Failed to update user": "Failed to update user",
"Failure keywords": "Failure keywords",
"Fair": "Fair",
"Fallback": "Fallback",
"Fallback base URL": "Fallback base URL",
"Fallback routing": "Fallback routing",
"Fallback tier": "Fallback tier",
"FAQ": "FAQ",
"FAQ added. Click \"Save Settings\" to apply.": "FAQ added. Click \"Save Settings\" to apply.",
@@ -1893,6 +1916,10 @@
"GC executed": "GC executed",
"GC execution failed": "GC execution failed",
"Gemini": "Gemini",
"Gemini Batch Embed Contents": "Gemini Batch Embed Contents",
"Gemini Embed Content": "Gemini Embed Content",
"Gemini Generate Content": "Gemini Generate Content",
"Gemini Generate Content to OpenAI Chat": "Gemini Generate Content to OpenAI Chat",
"Gemini Image 4K": "Gemini Image 4K",
"Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.": "Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.",
"General": "General",
@@ -2095,6 +2122,12 @@
"Include Rule Name": "Include Rule Name",
"Includes request rules": "Includes request rules",
"Including failed requests, 0 = unlimited": "Including failed requests, 0 = unlimited",
"Incoming path": "Incoming path",
"Incoming path is required": "Incoming path is required",
"Incoming path must be unique": "Incoming path must be unique",
"Incoming path must not include query": "Incoming path must not include query",
"Incoming path must start with /": "Incoming path must start with /",
"Incomplete": "Incomplete",
"Increased user quota by {{quota}}": "Increased user quota by {{quota}}",
"Index": "Index",
"Initial quota given to new users": "Initial quota given to new users",
@@ -2408,6 +2441,7 @@
"Mode": "Mode",
"model": "model",
"Model": "Model",
"Model {{model}}": "Model {{model}}",
"Model Access": "Model Access",
"Model Analytics": "Model Analytics",
"Model Analytics Defaults": "Model Analytics Defaults",
@@ -2432,7 +2466,6 @@
"Model mapping must be a JSON object with string values": "Model mapping must be a JSON object with string values",
"Model mapping must be valid JSON": "Model mapping must be valid JSON",
"Model mapping values must be strings": "Model mapping values must be strings",
"Model {{model}}": "Model {{model}}",
"Model name": "Model name",
"Model Name": "Model Name",
"Model Name *": "Model Name *",
@@ -2471,6 +2504,7 @@
"Models climbing the leaderboard fastest": "Models climbing the leaderboard fastest",
"Models directory": "Models directory",
"Models Directory": "Models Directory",
"Models exposed by this channel": "Models exposed by this channel",
"Models fetched successfully": "Models fetched successfully",
"Models filled to form": "Models filled to form",
"Models listed here will not automatically append or remove -thinking / -nothinking suffixes.": "Models listed here will not automatically append or remove -thinking / -nothinking suffixes.",
@@ -2551,6 +2585,7 @@
"Name, provider type, and availability.": "Name, provider type, and availability.",
"name@example.com": "name@example.com",
"Native format": "Native format",
"Native forwarding": "Native forwarding",
"Need a redemption code?": "Need a redemption code?",
"Needs API key": "Needs API key",
"Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.": "Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.",
@@ -2593,6 +2628,7 @@
"No API routes configured": "No API routes configured",
"No app usage data available for this model.": "No app usage data available for this model.",
"No apps match the selected filters": "No apps match the selected filters",
"No Auth": "No Auth",
"No available models": "No available models",
"No available Web chat links": "No available Web chat links",
"No backup": "No backup",
@@ -2767,7 +2803,14 @@
"of 3:": "of 3:",
"off": "off",
"Official": "Official",
"Official Claude Messages": "Official Claude Messages",
"Official documentation": "Official documentation",
"Official Gemini from OpenAI Chat": "Official Gemini from OpenAI Chat",
"Official Gemini Native": "Official Gemini Native",
"Official OpenAI Chat": "Official OpenAI Chat",
"Official OpenAI Embeddings": "Official OpenAI Embeddings",
"Official OpenAI Images": "Official OpenAI Images",
"Official OpenAI Responses": "Official OpenAI Responses",
"Official Repository": "Official Repository",
"Official Sync": "Official Sync",
"OhMyGPT": "OhMyGPT",
@@ -2814,9 +2857,24 @@
"Open theme settings": "Open theme settings",
"Open weights": "Open weights",
"OpenAI": "OpenAI",
"OpenAI Audio Speech": "OpenAI Audio Speech",
"OpenAI Audio Transcriptions": "OpenAI Audio Transcriptions",
"OpenAI Audio Translations": "OpenAI Audio Translations",
"OpenAI Chat Completions": "OpenAI Chat Completions",
"OpenAI Chat to Anthropic Messages": "OpenAI Chat to Anthropic Messages",
"OpenAI Chat to Gemini Generate Content": "OpenAI Chat to Gemini Generate Content",
"OpenAI Chat to OpenAI Responses": "OpenAI Chat to OpenAI Responses",
"OpenAI Completions": "OpenAI Completions",
"OpenAI Compatible": "OpenAI Compatible",
"OpenAI Embeddings": "OpenAI Embeddings",
"OpenAI Image Edits": "OpenAI Image Edits",
"OpenAI Image Generations": "OpenAI Image Generations",
"OpenAI Organization": "OpenAI Organization",
"OpenAI Organization ID (optional)": "OpenAI Organization ID (optional)",
"OpenAI Realtime": "OpenAI Realtime",
"OpenAI Rerank": "OpenAI Rerank",
"OpenAI Responses": "OpenAI Responses",
"OpenAI Responses Compact": "OpenAI Responses Compact",
"OpenAI, Anthropic, etc.": "OpenAI, Anthropic, etc.",
"OpenAI, Anthropic, Google, etc.": "OpenAI, Anthropic, Google, etc.",
"OpenAIMax": "OpenAIMax",
@@ -3217,6 +3275,7 @@
"QR code is not configured. Please contact support.": "QR code is not configured. Please contact support.",
"Quantity": "Quantity",
"QuantumNous": "QuantumNous",
"Query": "Query",
"Query Balance": "Query Balance",
"Query Param": "Query Param",
"Querying...": "Querying...",
@@ -3454,8 +3513,8 @@
"Resolve Conflicts": "Resolve Conflicts",
"Resource Configuration": "Resource Configuration",
"Response": "Response",
"Response time: {{duration}}": "Response time: {{duration}}",
"Response Time": "Response Time",
"Response time: {{duration}}": "Response time: {{duration}}",
"Responses API Version": "Responses API Version",
"Restore defaults": "Restore defaults",
"Restrict user model request frequency (may impact high concurrency performance)": "Restrict user model request frequency (may impact high concurrency performance)",
@@ -3493,6 +3552,7 @@
"Route Description": "Route Description",
"Route is required": "Route is required",
"Route, auth, and balance check in one place": "Route, auth, and balance check in one place",
"Routes": "Routes",
"Routing & Overrides": "Routing & Overrides",
"Routing Strategy": "Routing Strategy",
"Rows per page": "Rows per page",
@@ -4349,12 +4409,17 @@
"Upstream Model Updates": "Upstream Model Updates",
"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models": "Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models",
"Upstream price sync": "Upstream price sync",
"Upstream path": "Upstream path",
"Upstream path is required": "Upstream path is required",
"Upstream path must be a full URL or a path starting with /": "Upstream path must be a full URL or a path starting with /",
"Upstream prices fetched successfully": "Upstream prices fetched successfully",
"Upstream ratios fetched successfully": "Upstream ratios fetched successfully",
"Upstream Request ID": "Upstream Request ID",
"Upstream Response": "Upstream Response",
"upstream services integrated": "upstream services integrated",
"Upstream Updates": "Upstream Updates",
"Upstream URL": "Upstream URL",
"Upstream URL must be a full URL": "Upstream URL must be a full URL",
"uptime": "uptime",
"Uptime": "Uptime",
"Uptime (30d)": "Uptime (30d)",
@@ -4378,6 +4443,7 @@
"USD price per 1M input tokens.": "USD price per 1M input tokens.",
"USD price per 1M tokens.": "USD price per 1M tokens.",
"Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.": "Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.",
"Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.": "Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.",
"Use a compatible browser or device with biometric authentication or a security key to register a Passkey.": "Use a compatible browser or device with biometric authentication or a security key to register a Passkey.",
"Use authenticator code": "Use authenticator code",
"Use backup code": "Use backup code",
@@ -4396,6 +4462,7 @@
"Used": "Used",
"Used / Remaining": "Used / Remaining",
"Used as SuccessURL on the new product. You'll be prompted to confirm if left blank.": "Used as SuccessURL on the new product. You'll be prompted to confirm if left blank.",
"Used by route auth templates": "Used by route auth templates",
"Used for load balancing. Higher weight = more requests": "Used for load balancing. Higher weight = more requests",
"Used in URLs and API routes": "Used in URLs and API routes",
"Used Quota": "Used Quota",
@@ -4590,6 +4657,7 @@
"When enabled, Midjourney callbacks are accepted (reveals server IP).": "When enabled, Midjourney callbacks are accepted (reveals server IP).",
"When enabled, newly created tokens start in the first auto group.": "When enabled, newly created tokens start in the first auto group.",
"When enabled, prompts are scanned before reaching upstream models.": "When enabled, prompts are scanned before reaching upstream models.",
"When enabled, requests that do not match any advanced route are forwarded to the channel base URL. When disabled, unmatched requests return an error.": "When enabled, requests that do not match any advanced route are forwarded to the channel base URL. When disabled, unmatched requests return an error.",
"When enabled, the store field will be blocked": "When enabled, the store field will be blocked",
"When enabled, users can pick this group when creating tokens.": "When enabled, users can pick this group when creating tokens.",
"When enabled, violation requests will incur additional charges.": "When enabled, violation requests will incur additional charges.",