diff --git a/src/app/(dashboard)/dashboard/agents/page.tsx b/src/app/(dashboard)/dashboard/agents/page.tsx index 4bc021f94d..84dfc56d57 100644 --- a/src/app/(dashboard)/dashboard/agents/page.tsx +++ b/src/app/(dashboard)/dashboard/agents/page.tsx @@ -451,14 +451,14 @@ export default function AgentsPage() {
{tool.description}
++ {translateOrFallback("customCliBuilderTitle", "OpenAI-compatible CLI builder")} +
++ {translateOrFallback( + "customCliBuilderDescription", + "Generate env vars and JSON snippets for any CLI or SDK that accepts an OpenAI-compatible base URL, API key, and model ID." + )} +
++ {translateOrFallback("noActiveProviders", "No active providers")} +
++ {translateOrFallback( + "customCliNoModels", + "Connect at least one provider to populate the model selectors." + )} +
++ {translateOrFallback( + "customCliDefaultModelHelp", + "Use any OmniRoute model ID or combo. Most OpenAI-compatible CLIs only need the /v1 base URL plus a model string." + )} +
++ {translateOrFallback( + "customCliKeyHelper", + "For local installs OmniRoute can use sk_omniroute. In cloud mode, pick one of your management API keys." + )} +
++ {translateOrFallback( + "customCliAliasMappingsHelp", + "Optional helper aliases for wrapper scripts or config files that want stable shorthand names." + )} +
++ {translateOrFallback("customCliEndpointHintLabel", "How to wire the endpoint")} +
++ {translateOrFallback( + "customCliEndpointHint", + "Point any OpenAI-compatible client to the OmniRoute /v1 base URL. The raw chat completions endpoint is {endpoint}. Use the JSON block when the tool wants a provider object, or the env script when it reads OPENAI_* variables.", + { endpoint: chatCompletionsEndpoint } + )} +
+{envScript}
+ {jsonConfig}
+ {t("overviewDescription")}
+{label}
+{loading ? "…" : value}
+ {subValue ?{subValue}
: null} +{label}
+{value}
+{t("pageDescription")}
+- CLIProxyAPI is configured as an upstream proxy layer, not as a direct provider - connection. Manage the binary/runtime in CLI Tools and enable proxy routing on each - provider via the provider proxy controls. -
+{t("upstreamProxyManagedDescription")}
- {t("searchProviderDesc") || - "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected."} -
+{t("searchProviderDesc")}
{providerId === "perplexity-search" && (- Uses the same API key as Perplexity (chat provider). If you already - have Perplexity configured, no additional setup is needed. -
+{t("perplexitySearchSharedKeyInfo")}
- Google Programmable Search requires two values: your API key and the Search Engine - ID (cx) from the Programmable Search Engine dashboard. -
+{t("googlePseInfo")}
- SearXNG is self-hosted. Configure the instance base URL here. API key is optional
- and can be left blank for public or unauthenticated instances. Local/private URL
- validation requires{" "}
-
- OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true
-
- .
-
{t("searxngInfo")}
{isCcCompatible
- ? "Validation uses the strict Claude Code-compatible bridge request for this provider."
+ ? t("ccCompatibleValidationHint")
: isAnthropic
? t("validationChecksAnthropicCompatible", {
provider: providerName || t("anthropicCompatibleName"),
@@ -5762,25 +5737,25 @@ function AddApiKeyModal({
className="flex flex-col gap-3 pl-2 border-l-2 border-border"
>
setFormData({ ...formData, customUserAgent: e.target.value })}
placeholder="my-app/1.0"
- hint="Optional override sent upstream as the User-Agent header for this connection"
+ hint={t("customUserAgentHint")}
/>
setFormData({ ...formData, routingTags: e.target.value })}
- placeholder="fast, cheap, eu-region"
- hint="Comma-separated tags matched against request metadata.tags for tag-based routing"
+ placeholder={t("routingTagsPlaceholder")}
+ hint={t("routingTagsHint")}
/>
setFormData({ ...formData, excludedModels: e.target.value })}
- placeholder="gpt-5*, claude-opus-*, gemini-*-pro*"
- hint="Comma-separated wildcard patterns. This connection will never serve matching models."
+ placeholder={t("excludedModelsPlaceholder")}
+ hint={t("excludedModelsHint")}
/>
- Select the endpoint region for API access and quota tracking. -
+{t("apiRegionHint")}
- Select the endpoint region for API access and quota tracking. -
+{t("apiRegionHint")}
- {extraApiKeys.length + 1} keys total — rotating round-robin on each request. + {t("totalKeysRotating", { count: extraApiKeys.length + 1 })}
)}{t("modelPricingDesc")}
{t("pricingSyncDescription")}
+{label}
+{value}
+