"maxOutputTokensDescription":"Budget for one reply, shared by thinking and the diagram XML. Raise it if the AI keeps thinking and no diagram appears. Leave empty for the default.",
"storageUpdateFailed":"Chat cleared but browser storage could not be updated",
"sessionSaveFailed":"Could not save this chat. Browser storage may be full: delete old chats from history and try again.",
"sessionSaveFailedLeave":"Could not save this chat. Browser storage may be full. You can go on without saving it, then delete old chats from the list in the new chat.",
"continueWithoutSaving":"Continue without saving",
"llm":{
"invalid_api_key":"The provider rejected the API key. Check it in model settings.",
"forbidden":"The provider refused the request. The key may not have access to this model or region.",
"model_not_found":"The provider does not know this model. Check the model ID in model settings.",
"insufficient_quota":"The provider account has no credit or quota left.",
"rate_limited":"The provider is limiting requests. Wait a moment and try again.",
"context_too_long":"The conversation is too long for this model. Start a new chat or pick a model with a larger context.",
"images_unsupported":"This model doesn't support image input.",
"tools_unsupported":"This model doesn't support tool calls, which drawing needs. Pick another model.",
"output_truncated":"The output was cut off before the diagram was complete. Try a simpler request or raise the output limit in settings.",
"provider_unavailable":"The provider is having problems. Try again later.",
"cannot_connect":"Could not reach the provider. Check the base URL and your network.",
"messageApi":"Looks like you've reached today's demo limit. We're thrilled you're enjoying it, and while ByteDance Doubao generously sponsors this demo, we've had to set a few boundaries to keep things fair for everyone.",
"messageToken":"Looks like you've reached today's token limit. We're thrilled you're enjoying it, and while ByteDance Doubao generously sponsors this demo, we've had to set a few boundaries to keep things fair for everyone.",
"reset":"Your limit resets tomorrow. Thanks for understanding.",
"doubaoSponsorship":"<a href=\"{link}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"underline hover:text-foreground\">Register here</a> to get 500K free tokens per model (including Doubao, DeepSeek and Kimi), then configure your API key in model settings.",
"mimoBaseUrlHint":"Default works with pay-as-you-go keys (sk-...). Token Plan subscribers (tp-... keys) must set https://token-plan-cn.xiaomimimo.com/v1",
"notWritable":"The settings file is not writable on this deployment (serverless platforms have no persistent disk). Settings are shown read-only — configure via environment variables instead.",
"saveFailed":"Save failed. Check your connection and try again.",
"invalidSettings":"Some settings are invalid.",
"discard":"Discard",
"saveChanges":"Save Changes",
"saving":"Saving…",
"sourceSaved":"Saved",
"sourceEnv":"Env",
"sourceSavedTitle":"Set in the admin settings file",
"sourceEnvTitle":"Set by an environment variable",
"restartRequired":"Restart Required",
"modified":"Modified",
"notSet":"Not set",
"savedReplace":"Saved ({hint}) — type to replace",
"showValue":"Show value",
"hideValue":"Hide value",
"removeValue":"Remove value",
"removeValueTitle":"Remove the stored value",
"resetToDefault":"Reset to default",
"models":"Models",
"modelsDescription":"Server-side providers and models available to all users — no personal API key needed. The default provider's first model is used when users don't pick one.",
"addProviderHint":"Add a provider to offer server-side models to all users.",
"selectProviderHint":"Select or add a provider to configure its credentials and models.",
"addProviderToOfferModels":"Add at least one model to expose this provider to users.",
"managedViaEnv":"(managed via env)",
"envReadOnly":"Defined in AI_MODELS_CONFIG / ai-models.json — read-only here. Edit the environment configuration to change it.",
"defaultModel":"Default Model",
"noModelsConfigured":"No models configured",
"modelCount":"{count} model",
"modelCountPlural":"{count} models",
"default":"Default",
"setAsDefault":"Set as default provider",
"defaultProvider":"Default provider",
"modelIdPlaceholder":"Model ID…",
"addModel":"Add model",
"suggested":"Suggested",
"test":"Test",
"testOk":"OK ({ms}ms)",
"testFailed":"Failed",
"removeModel":"Remove {model}",
"deleteProviderTitle":"Delete {name}?",
"deleteProviderDesc":"Its credentials and models will be removed from the server after you save.",
"cancel":"Cancel",
"delete":"Delete",
"groups":{
"generation":{
"title":"Generation",
"description":"Output parameters applied to all chat requests."
},
"access":{
"title":"Access Control",
"description":"Restrict who can use this deployment."
},
"features":{
"title":"Features",
"description":"Optional features and security toggles."
},
"observability":{
"title":"Observability",
"description":"Langfuse tracing for LLM calls."
},
"quota":{
"title":"Quota & Rate Limits",
"description":"Per-IP usage limits. Enforcement requires a DynamoDB table."
}
},
"settings":{
"TEMPERATURE":{
"label":"Temperature",
"description":"Leave unset for reasoning models that reject temperature."
},
"MAX_OUTPUT_TOKENS":{
"label":"Max Output Tokens"
},
"ACCESS_CODE_LIST":{
"label":"Access Codes",
"description":"Comma-separated list. Users must enter one to chat. Empty = open access."
},
"ENABLE_VLM_VALIDATION":{
"label":"VLM Diagram Validation",
"description":"Visually validate generated diagrams with a vision model."
},
"VALIDATION_MODEL":{
"label":"Validation Model",
"description":"Falls back to the default AI model when empty."
},
"VALIDATION_TIMEOUT":{
"label":"Validation Timeout (ms)"
},
"ENABLE_HISTORY_XML_REPLACE":{
"label":"History XML Compression",
"description":"Replace old diagram XML in history with placeholders."
},
"ALLOW_PRIVATE_URLS":{
"label":"Allow Private URLs",
"description":"Turn off to block requests to private IPs and internal hostnames (SSRF protection)."
},
"LANGFUSE_PUBLIC_KEY":{
"label":"Langfuse Public Key"
},
"LANGFUSE_SECRET_KEY":{
"label":"Langfuse Secret Key"
},
"LANGFUSE_BASEURL":{
"label":"Langfuse Base URL"
},
"DAILY_REQUEST_LIMIT":{
"label":"Daily Request Limit",
"description":"Per IP per day."
},
"DAILY_TOKEN_LIMIT":{
"label":"Daily Token Limit",
"description":"Per IP per day."
},
"TPM_LIMIT":{
"label":"Tokens Per Minute"
},
"DYNAMODB_QUOTA_TABLE":{
"label":"DynamoDB Table",
"description":"Quota enforcement is disabled when empty."
},
"DYNAMODB_REGION":{
"label":"DynamoDB Region"
},
"QUOTA_TIMEZONE":{
"label":"Quota Timezone",
"description":"Timezone for the daily reset boundary."