diff --git a/ui/litellm-dashboard/src/components/CostTrackingSettings/pricing_calculator/multi_cost_results.tsx b/ui/litellm-dashboard/src/components/CostTrackingSettings/pricing_calculator/multi_cost_results.tsx index 21d82a41fcf..872ea8c1df0 100644 --- a/ui/litellm-dashboard/src/components/CostTrackingSettings/pricing_calculator/multi_cost_results.tsx +++ b/ui/litellm-dashboard/src/components/CostTrackingSettings/pricing_calculator/multi_cost_results.tsx @@ -51,7 +51,9 @@ const SingleModelBreakdown: React.FC<{
Click or drag files to this area to upload
-Support for single or bulk upload. Supported formats: PDF, TXT, DOCX, MD
+{t("vectorStoreManagement.createVectorStore.draggerText")}
+{t("vectorStoreManagement.createVectorStore.draggerHint")}
- Vector Store ID: {ingestResults[0]?.vector_store_id} + {t("vectorStoreManagement.createVectorStore.vectorStoreIdLabel")}{" "} + {ingestResults[0]?.vector_store_id}
- Documents Ingested: {ingestResults.length} + {t("vectorStoreManagement.createVectorStore.documentsIngestedLabel")}{" "} + {ingestResults.length}
AWS S3 Vectors allows you to store and query vector embeddings directly in S3:
+{t("vectorStoreManagement.s3VectorsConfig.alertDescription")}
To use Vertex AI Search (Discovery Engine):
+{t("vectorStoreManagement.vectorStoreForm.vertexSearchAlertDescription")}
No vector stores found
+{t("vectorStoreManagement.vectorStoreTable.noVectorStores")}
Authorization header to your guardrail endpoint. This allows your guardrail to authenticate model calls using the original caller's credentials.",
+ "staticHeadersDesc": "Sent with every request to the guardrail.",
+ "removeHeader": "Remove {{name}}",
+ "headerNamePlaceholder": "Header name (e.g. X-API-Key)",
+ "headerValuePlaceholder": "Value",
+ "forwardClientHeaders": "Forward client headers",
+ "forwardClientHeadersDesc": "Allowed header names to forward from the client request to the guardrail (e.g. x-request-id).",
+ "noForwardClientHeaders": "No forward client headers configured.",
+ "extraHeaderPlaceholder": "e.g. x-request-id",
+ "equivalentConfig": "Equivalent config",
+ "guardrailInfoNote": "This guardrail runs on a separate instance. It receives the user request and forwards the result to the next step in the pipeline. See /v1/realtime.",
+ "callTypeLabel": "Call type",
+ "callTypePlaceholder": "Select a call type",
+ "moreCallTypesSoon": "More call types coming soon.",
+ "realtimeSettingsTitle": "/v1/realtime settings",
+ "endSessionLabel": "End session after X violations",
+ "endSessionDesc": "Automatically close the session after this many guardrail violations. Leave empty to never auto-close.",
+ "onViolationLabel": "On violation",
+ "violationWarn": "Warn",
+ "violationEndSession": "End session",
+ "violationWarnDesc": "Bot speaks the message, session continues",
+ "violationEndSessionDesc": "Bot speaks the message, connection closes immediately",
+ "violationMessageLabel": "Message the user hears",
+ "violationMessageDesc": "What the bot says aloud when this guardrail fires. Falls back to the default violation message if empty.",
+ "violationMessagePlaceholder": "e.g. I'm not able to continue this conversation. Please contact us at 1-800-774-2678.",
+ "failedToLoadConfig": "Failed to load guardrail configuration",
+ "selectAtLeastOnePii": "Please select at least one PII entity to continue",
+ "configureAtLeastOneFilter": "Please configure at least one content filter setting (category, pattern, keyword, or competitor intent)",
+ "invalidJsonConfig": "Invalid JSON in configuration",
+ "addAtLeastOneCriterion": "Add at least one evaluation criterion",
+ "weightsMustSum100": "Criterion weights must sum to 100% (currently {{weightTotal}}%)",
+ "addAtLeastOneRule": "Add at least one tool permission rule",
+ "createSuccess": "Guardrail created successfully",
+ "createFailed": "Failed to create guardrail: {{error}}"
+ },
+ "guardrailOptionalParams": {
+ "title": "Optional Parameters",
+ "defaultDescription": "Configure additional settings for this guardrail provider",
+ "enterValue": "Enter {{key}} value",
+ "selectValue": "Select {{key}} value",
+ "selectCategoryPlaceholder": "Select category to configure",
+ "selectCategoryHint": "Select a category to add threshold configuration",
+ "fieldRequired": "{{fieldKey}} is required"
+ },
+ "guardrailProviderFields": {
+ "loadFailed": "Failed to load provider parameters",
+ "loadingTip": "Loading provider parameters...",
+ "noFields": "No configuration fields available for this provider.",
+ "fieldRequired": "{{fieldKey}} is required"
+ },
+ "guardrailTable": {
+ "colGuardrailId": "Guardrail ID",
+ "colName": "Name",
+ "colProvider": "Provider",
+ "colMode": "Mode",
+ "colDefaultOn": "Default On",
+ "defaultOn": "Default On",
+ "defaultOff": "Default Off",
+ "deleteTooltip": "Delete guardrail",
+ "configDeleteTooltip": "Config guardrail cannot be deleted on the dashboard. Please delete it from the config file.",
+ "configDeleteAriaLabel": "Delete guardrail (config)",
+ "unnamedGuardrail": "Unnamed Guardrail",
+ "noGuardrails": "No guardrails found"
+ },
+ "lLMJudgeFields": {
+ "description": "After each LLM response, the Judge Model scores it 0–100 against your criteria. If the weighted average falls below the threshold, the response is blocked (or logged).",
+ "judgeModelLabel": "Judge Model",
+ "judgeModelTooltip": "The LLM that reads each response and grades it. Pick a capable model — it never sees end-user data beyond what the LLM returned.",
+ "judgeModelRequired": "Select a judge model",
+ "judgeModelPlaceholder": "Select a model",
+ "minScoreLabel": "Minimum Score to Pass",
+ "minScoreTooltip": "0–100. If the weighted average of criterion scores falls below this, the guardrail triggers. 80 is a good default.",
+ "onFailureLabel": "On Failure",
+ "onFailureTooltip": "Block: return HTTP 422 when the score is too low. Log: record the result but let the response through.",
+ "onFailureBlock": "Block (return 422)",
+ "onFailureLog": "Log only",
+ "criteriaLabel": "Evaluation Criteria",
+ "criteriaTooltip": "Each criterion is something the judge checks. Weights must add up to 100%.",
+ "criterionNameRequired": "Enter criterion name",
+ "criterionNamePlaceholder": "Criterion name (e.g. Policy accuracy)",
+ "weightLabel": "Weight",
+ "weightTooltip": "How much this criterion counts toward the final score. All weights must add up to 100%.",
+ "weightRequired": "Enter weight",
+ "criterionDescRequired": "Describe what to check",
+ "criterionDescPlaceholder": "What should the judge check for this criterion?",
+ "addCriterion": "Add Criterion",
+ "weightsTotal": "Weights total: {{weightTotal}}%",
+ "weightsMustSum": "must add up to 100%"
+ },
+ "piiComponents": {
+ "filterByCategory": "Filter by category",
+ "selectCategoriesPlaceholder": "Select categories to filter by",
+ "quickActions": "Quick Actions",
+ "quickActionsTooltip": "Apply action to all PII types at once",
+ "unselectAll": "Unselect All",
+ "selectAllMask": "Select All & Mask",
+ "selectAllBlock": "Select All & Block",
+ "piiTypeHeader": "PII Type",
+ "actionHeader": "Action",
+ "noMatch": "No PII types match your filter criteria"
+ },
+ "piiConfiguration": {
+ "title": "Configure PII Protection",
+ "itemsSelected_one": "{{count}} item selected",
+ "itemsSelected_other": "{{count}} items selected"
+ },
+ "toolPermissionRulesEditor": {
+ "title": "LiteLLM Tool Permission Guardrail",
+ "subtitle": "Provide regex patterns (e.g., ^mcp__github_.*$) for tool names or types and optionally constrain payload fields.",
+ "addRule": "Add Rule",
+ "noRules": "No tool rules added yet",
+ "ruleLabel": "Rule {{index}}",
+ "ruleId": "Rule ID",
+ "toolName": "Tool Name (optional)",
+ "toolType": "Tool Type (optional)",
+ "decision": "Decision",
+ "allow": "Allow",
+ "deny": "Deny",
+ "restrictArgs": "+ Restrict tool arguments (optional)",
+ "argConstraints": "Argument constraints (dot or array paths)",
+ "addConstraint": "+ Add another constraint",
+ "defaultAction": "Default action",
+ "onDisallowedAction": "On disallowed action",
+ "onDisallowedTooltip": "Block returns an error when a forbidden tool is invoked. Rewrite strips the tool call but lets the rest of the response continue.",
+ "block": "Block",
+ "rewrite": "Rewrite",
+ "violationMessage": "Violation message (optional)",
+ "violationMessagePlaceholder": "This violates our org policy..."
}
},
"keyValueInput": {
@@ -2662,7 +2914,113 @@
"collapseRow": "Collapse row",
"hideJson": "Hide JSON",
"showJson": "Show JSON",
- "copied": "Copied!"
+ "copied": "Copied!",
+ "colAction": "Action",
+ "colChangedBy": "Changed By"
+ },
+ "auditLogDrawer": {
+ "tableKeys": "Keys",
+ "tableTeams": "Teams",
+ "tableUsers": "Users",
+ "tableOrganizations": "Organizations",
+ "tableModels": "Models",
+ "copyJson": "Copy JSON",
+ "noDifferingFields": "No differing fields detected",
+ "tokenLabel": "Token:",
+ "spendLabel": "Spend:",
+ "maxBudgetLabel": "Max Budget:",
+ "before": "Before",
+ "after": "After",
+ "labelTable": "Table",
+ "labelObjectId": "Object ID",
+ "labelChangedBy": "Changed By",
+ "labelApiKeyHash": "API Key (Hash)"
+ },
+ "configInfoMessage": {
+ "title": "Request/Response Data Not Available",
+ "description": "To view request and response details, enable prompt storage in your LiteLLM configuration by adding the following to your list_repos and get_file from a GitHub MCP server — preventing agents from making writes.",
+ "toolsetsCreatingTitle": "Creating toolsets:",
+ "toolsetsCreatingDesc": "Admins can create and manage toolsets from the MCP page → Toolsets tab. Toolsets can then be assigned to keys and teams to scope their tool access."
+ },
+ "codeInterpreterOutput": {
+ "pythonCodeExecuted": "Python Code Executed",
+ "loadingImage": "Loading image...",
+ "generatedChart": "Generated chart",
+ "imageNotAvailable": "Image not available"
+ },
+ "codeInterpreterTool": {
+ "title": "Code Interpreter",
+ "tooltipDesc": "Run Python code to generate files, charts, and analyze data. Container is created automatically.",
+ "onlyOpenAIWarning": "Code Interpreter is only available for OpenAI models",
+ "onlyOpenAINotice": "Code Interpreter is currently only supported for OpenAI models.",
+ "requestSupportLink": "Request support for other providers"
+ },
+ "filePreviewCard": {
+ "uploadPreview": "Upload preview",
+ "pdf": "PDF",
+ "image": "Image"
+ },
+ "mcpEventsDisplay": {
+ "listTools": "List tools",
+ "toolCall": "Tool call",
+ "request": "Request",
+ "approved": "Approved",
+ "response": "Response"
+ },
+ "realtimePlayground": {
+ "title": "Realtime Voice Chat",
+ "selectModelFirst": "Please select a model first",
+ "connectedToApi": "Connected to realtime API",
+ "wsError": "Error: {{error}}",
+ "websocketError": "WebSocket error",
+ "disconnected": "Disconnected",
+ "connectionFailed": "Connection failed: {{error}}",
+ "listening": "🎙️ Listening...",
+ "microphoneError": "Microphone error: {{error}}",
+ "connected": "Connected",
+ "connecting": "Connecting...",
+ "disconnectedStatus": "Disconnected",
+ "connect": "Connect",
+ "disconnect": "Disconnect",
+ "emptyTitle": "Realtime Voice Playground",
+ "emptyHint": "Click Connect to start a realtime session. You can speak using your microphone or type messages. The AI will respond with voice and text.",
+ "you": "You",
+ "ai": "AI",
+ "stopRecording": "Stop recording",
+ "startRecording": "Start recording",
+ "inputPlaceholder": "Type a message or use the mic...",
+ "listeningHint": "Listening — speak into your microphone. Server VAD will detect when you stop."
+ },
+ "responseMetrics": {
+ "timeToFirstToken": "Time to first token",
+ "totalLatency": "Total latency",
+ "promptTokens": "Prompt tokens",
+ "completionTokens": "Completion tokens",
+ "reasoningTokens": "Reasoning tokens",
+ "totalTokens": "Total tokens",
+ "cost": "Cost",
+ "toolUsed": "Tool used",
+ "ttft": "TTFT: {{value}}s",
+ "totalLatencyValue": "Total Latency: {{value}}s",
+ "in": "In: {{count}}",
+ "out": "Out: {{count}}",
+ "reasoning": "Reasoning: {{count}}",
+ "total": "Total: {{count}}",
+ "toolName": "Tool: {{name}}"
+ },
+ "searchResultsDisplay": {
+ "hideSources": "Hide sources",
+ "showSources": "Show sources ({{count}})",
+ "query": "Query:",
+ "resultCount_one": "{{count}} result",
+ "resultCount_other": "{{count}} results",
+ "metadata": "Metadata:"
+ },
+ "sessionManagement": {
+ "title": "Session Management",
+ "toggleTooltip": "Choose between LiteLLM API session management (using previous_response_id) or UI-based session management (using chat history)",
+ "copiedToClipboard": "Response ID copied to clipboard!",
+ "apiSessionReady": "API Session: Ready",
+ "uiSessionReady": "UI Session: Ready",
+ "responseIdPrefix": "Response ID",
+ "uiSessionPrefix": "UI Session",
+ "apiSessionReadyDesc": "LiteLLM will manage session using previous_response_id",
+ "uiSessionReadyDesc": "UI will manage session using chat history",
+ "apiSessionActiveDesc": "LiteLLM API session active - context maintained server-side",
+ "uiSessionActiveDesc": "UI session active - context maintained client-side",
+ "copyTooltipTitle": "Copy response ID to continue session:"
}
},
"settingsPages": {
@@ -4365,6 +5014,7 @@
"categories": "Categories",
"showingCount": "Showing {{filtered}} of {{total}} templates",
"noTemplatesMatch": "No templates match the selected filters.",
+ "clearAll": "Clear all",
"clearAllFilters": "Clear all filters",
"complexityLabel": "{{complexity}} Complexity",
"inheritsFrom": "Inherits from:",
@@ -4773,6 +5423,7 @@
"colPerRequest": "Per Request",
"colMarginFee": "Margin Fee",
"totalPerRequest": "Total Per Request",
+ "breakdownTotalPerRequest": "Total/Request",
"totalPeriod": "Total {{periodLabel}}",
"marginFeePerRequest": "Margin Fee/Request",
"periodMarginFeeTotal": "{{periodLabel}} Margin Fee",
@@ -5052,5 +5703,178 @@
"tableView": "Table",
"chartView": "Chart"
}
+ },
+ "vectorStoreProviders": {
+ "pgVector": {
+ "apiBaseLabel": "API Base",
+ "apiBaseTooltip": "Enter the base URL of your deployed litellm-pgvector server (e.g., http://your-server:8000)",
+ "apiKeyLabel": "API Key",
+ "apiKeyTooltip": "Enter the API key from your deployed litellm-pgvector server"
+ },
+ "vertexAiSearch": {
+ "vertexProjectLabel": "Vertex Project",
+ "vertexProjectTooltip": "Google Cloud project ID that hosts the Vertex AI Search data store.",
+ "vertexLocationLabel": "Vertex Location",
+ "vertexLocationTooltip": "Vertex AI Search data store location. Must be one of global, us, or eu.",
+ "vertexCollectionIdLabel": "Collection ID (optional)",
+ "vertexCollectionIdTooltip": "Discovery Engine collection ID. Leave blank to use the default collection.",
+ "vertexEngineIdLabel": "Engine ID (optional)",
+ "vertexEngineIdTooltip": "Search app (engine) ID. Required for website, healthcare, and connector-based data stores (Workspace, Slack, Jira, etc.) because these sources route search through an engine. Leave blank to query the data store directly."
+ },
+ "openai": {
+ "apiKeyLabel": "API Key",
+ "apiKeyTooltip": "Enter your OpenAI API key"
+ },
+ "azure": {
+ "apiKeyLabel": "API Key",
+ "apiKeyTooltip": "Enter your Azure OpenAI API key",
+ "apiBaseLabel": "API Base",
+ "apiBaseTooltip": "Enter your Azure OpenAI endpoint (e.g., https://your-resource.openai.azure.com/)"
+ },
+ "milvus": {
+ "apiKeyLabel": "API Key",
+ "apiKeyTooltip": "To obtain a token, you should use a colon (:) to concatenate the username and password that you use to access your Milvus instance (e.g., username:password)",
+ "apiBaseLabel": "API Base",
+ "apiBaseTooltip": "Enter your Milvus endpoint (e.g., https://your-milvus-endpoint.com/)",
+ "embeddingModelLabel": "Embedding Model",
+ "embeddingModelTooltip": "Select the embedding model to use"
+ },
+ "s3Vectors": {
+ "vectorBucketNameLabel": "Vector Bucket Name",
+ "vectorBucketNameTooltip": "S3 bucket name for vector storage (will be auto-created if it doesn't exist)",
+ "indexNameLabel": "Index Name",
+ "indexNameTooltip": "Name for the vector index (optional, will be auto-generated if not provided)",
+ "awsRegionLabel": "AWS Region",
+ "awsRegionTooltip": "AWS region where the S3 bucket is located (e.g., us-west-2)",
+ "embeddingModelLabel": "Embedding Model",
+ "embeddingModelTooltip": "Select the embedding model to use for vector generation"
+ }
+ },
+ "vectorStoreManagement": {
+ "createVectorStore": {
+ "pageTitle": "Create Vector Store",
+ "pageSubtitle": "Upload documents and select a provider to create a new vector store with embedded content.",
+ "step1Title": "Step 1: Upload Documents",
+ "step1Subtitle": "Upload one or more documents (PDF, TXT, DOCX, MD). Maximum file size: 50MB per file.",
+ "draggerText": "Click or drag files to this area to upload",
+ "draggerHint": "Support for single or bulk upload. Supported formats: PDF, TXT, DOCX, MD",
+ "uploadedDocuments": "Uploaded Documents ({{count}})",
+ "step2Title": "Step 2: Configure Vector Store",
+ "step2Subtitle": "Choose the provider and optionally provide a name and description for your vector store.",
+ "vectorStoreNameLabel": "Vector Store Name",
+ "vectorStoreNameTooltip": "Optional: Give your vector store a meaningful name",
+ "vectorStoreNamePlaceholder": "e.g., Product Documentation, Customer Support KB",
+ "descriptionTooltip": "Optional: Describe what this vector store contains",
+ "descriptionPlaceholder": "e.g., Contains all product documentation and user guides",
+ "providerLabel": "Provider",
+ "providerTooltip": "Select the provider for embedding and vector store operations",
+ "unsupportedFileType": "{{name}} is not a supported file type. Please upload PDF, TXT, DOCX, or MD files.",
+ "fileTooLarge": "{{name}} must be smaller than 50MB!",
+ "uploadAtLeastOne": "Please upload at least one document",
+ "selectProvider": "Please select a provider",
+ "provideField": "Please provide {{label}}",
+ "bucketNameMinLength": "Vector bucket name must be at least 3 characters",
+ "indexNameMinLength": "Index name must be at least 3 characters if provided",
+ "createSuccess": "Successfully created vector store with {{count}} document(s). Vector Store ID: {{vectorStoreId}}",
+ "createFailed": "Failed to create vector store: {{error}}",
+ "creating": "Creating Vector Store...",
+ "createButton": "Create Vector Store",
+ "successMessage": "Vector Store Created Successfully",
+ "vectorStoreIdLabel": "Vector Store ID:",
+ "documentsIngestedLabel": "Documents Ingested:"
+ },
+ "documentsTable": {
+ "idCopied": "Document ID copied to clipboard",
+ "statusUploading": "Uploading",
+ "statusReady": "Ready",
+ "statusRemoved": "Removed",
+ "viewDetails": "View details",
+ "copyId": "Copy ID",
+ "emptyText": "No documents uploaded yet. Upload documents above to get started."
+ },
+ "s3VectorsConfig": {
+ "alertTitle": "AWS S3 Vectors Setup",
+ "alertDescription": "AWS S3 Vectors allows you to store and query vector embeddings directly in S3:",
+ "alertItem1": "Vector buckets and indexes will be automatically created if they don't exist",
+ "alertItem2": "Vector dimensions are auto-detected from your selected embedding model",
+ "alertItem3": "Ensure your AWS credentials have permissions for S3 Vectors operations",
+ "alertItem4Prefix": "Learn more:",
+ "alertItem4Link": "AWS S3 Vectors Documentation",
+ "vectorBucketNameLabel": "Vector Bucket Name",
+ "vectorBucketNameTooltip": "S3 bucket name for vector storage (must be at least 3 characters, lowercase letters, numbers, hyphens, and periods only)",
+ "vectorBucketNamePlaceholder": "my-vector-bucket (min 3 chars)",
+ "bucketNameHelp": "Bucket name must be at least 3 characters",
+ "indexNameLabel": "Index Name",
+ "indexNameTooltip": "Name for the vector index (optional, will be auto-generated if not provided). If provided, must be at least 3 characters.",
+ "indexNamePlaceholder": "my-vector-index (optional, min 3 chars)",
+ "indexNameHelp": "Index name must be at least 3 characters if provided",
+ "awsRegionLabel": "AWS Region",
+ "awsRegionTooltip": "AWS region where the S3 bucket is located (e.g., us-west-2)",
+ "embeddingModelLabel": "Embedding Model",
+ "embeddingModelTooltip": "Select the embedding model to use for vector generation",
+ "embeddingModelPlaceholder": "Select an embedding model"
+ },
+ "testVectorStoreTab": {
+ "accessTokenRequired": "Access token is required to test vector stores.",
+ "noVectorStores": "No vector stores available. Create one first to test it.",
+ "selectTitle": "Select Vector Store",
+ "selectSubtitle": "Choose a vector store to test search queries against",
+ "selectPlaceholder": "Select a vector store"
+ },
+ "vectorStoreForm": {
+ "modalTitle": "Add New Vector Store",
+ "providerLabel": "Provider",
+ "providerTooltip": "Select the provider for this vector store",
+ "providerRequired": "Please select a provider",
+ "pgVectorAlertTitle": "PG Vector Setup Required",
+ "pgVectorAlertDescription": "LiteLLM provides a server to connect to PG Vector. To use this provider:",
+ "pgVectorStep1": "Deploy the litellm-pgvector server from:",
+ "pgVectorStep2": "Configure your PostgreSQL database with pgvector extension",
+ "pgVectorStep3": "Start the server and note the API base URL and API key",
+ "pgVectorStep4": "Enter those details in the fields below",
+ "vertexRagAlertTitle": "Vertex AI RAG Engine Setup",
+ "vertexRagAlertDescription": "To use Vertex AI RAG Engine:",
+ "vertexRagStep1": "Set up your Vertex AI RAG Engine corpus following the guide:",
+ "vertexRagStep1Link": "Vertex AI RAG Engine Overview",
+ "vertexRagStep2": "Create a corpus in your Google Cloud project",
+ "vertexRagStep3": "Note the corpus ID from the Vertex AI console",
+ "vertexRagStep4": "Enter the corpus ID in the Vector Store ID field below",
+ "vertexSearchAlertTitle": "Vertex AI Search Setup",
+ "vertexSearchAlertDescription": "To use Vertex AI Search (Discovery Engine):",
+ "vertexSearchStep1": "Enable the Discovery Engine API on your Google Cloud project and create a data store following the guide:",
+ "vertexSearchStep1Link": "Create a Vertex AI Search data store",
+ "vertexSearchStep2": "Pick a supported location: global, us, or eu",
+ "vertexSearchStep3": "For most data store types (Cloud Storage, BigQuery, Media): copy the data store ID and enter it in the Vector Store ID field below.",
+ "vertexSearchStep4": "For website, healthcare, and connector-based sources (Drive, Gmail, Slack, Jira, etc.): create a search app on top of the data store, then copy the Engine ID and enter it in the Engine ID field. The Vector Store ID is still required as the LiteLLM-side name for this record, but it isn't used in the GCP URL when Engine ID is set.",
+ "vectorStoreIdLabel": "Vector Store ID",
+ "vectorStoreIdTooltip": "Enter the vector store ID from your api provider",
+ "vectorStoreIdRequired": "Please input the vector store ID from your api provider",
+ "vectorStoreIdPlaceholderVertexRag": "6917529027641081856 (Get corpus ID from Vertex AI console)",
+ "vectorStoreIdPlaceholderVertexSearch": "my-datastore_1234567890 (Get data store ID from Vertex AI Search console)",
+ "vectorStoreIdPlaceholderVertexSearchEngine": "Any identifier you'll use to reference this in LiteLLM",
+ "vectorStoreIdPlaceholderDefault": "Enter vector store ID from your provider",
+ "fieldSelectRequired": "Please select the {{label}}",
+ "fieldInputRequired": "Please input the {{label}}",
+ "vectorStoreNameLabel": "Vector Store Name",
+ "vectorStoreNameTooltip": "Custom name you want to give to the vector store, this name will be rendered on the LiteLLM UI",
+ "existingCredentialsLabel": "Existing Credentials",
+ "existingCredentialsTooltip": "Optionally select API provider credentials for this vector store eg. Bedrock API KEY",
+ "existingCredentialsPlaceholder": "Select or search for existing credentials",
+ "metadataLabel": "Metadata",
+ "metadataTooltip": "JSON metadata for the vector store (optional)",
+ "invalidMetadataJson": "Invalid JSON in metadata field",
+ "createSuccess": "Vector store created successfully",
+ "createFailed": "Error creating vector store: {{error}}"
+ },
+ "vectorStoreTable": {
+ "colVectorStoreId": "Vector Store ID",
+ "colFiles": "Files",
+ "colProvider": "Provider",
+ "oneFile": "1 file",
+ "nFiles": "{{count}} files",
+ "editTooltip": "Edit vector store",
+ "deleteTooltip": "Delete vector store",
+ "noVectorStores": "No vector stores found"
+ }
}
}
diff --git a/ui/litellm-dashboard/src/locales/zh-CN.json b/ui/litellm-dashboard/src/locales/zh-CN.json
index 110a88b8272..04c0bb10299 100644
--- a/ui/litellm-dashboard/src/locales/zh-CN.json
+++ b/ui/litellm-dashboard/src/locales/zh-CN.json
@@ -1590,6 +1590,258 @@
"updateSuccess": "护栏已成功更新",
"updateFailed": "更新护栏失败",
"notFound": "未找到护栏"
+ },
+ "teamGuardrailsTab": {
+ "statusActive": "已激活",
+ "statusPendingReview": "待审核",
+ "statusRejected": "已拒绝",
+ "teamLabel": "团队:{{team}}",
+ "modelLabel": "模型:",
+ "submittedLabel": "提交时间:",
+ "forwardApiKey": "转发 API 密钥",
+ "review": "审阅",
+ "approve": "批准",
+ "reject": "拒绝",
+ "staticHeaders": "静态请求头",
+ "noStaticHeaders": "未配置静态请求头。",
+ "submittedBy": "由 {{by}} 于 {{at}} 提交",
+ "closeDetailPanel": "关闭详情面板",
+ "endpoint": "端点",
+ "method": "方法",
+ "forwardLiteLLMApiKey": "转发 LiteLLM API 密钥",
+ "forwardKeyDesc": "启用后,调用方的 LiteLLM API 密钥将作为 Authorization 请求头转发到您的护栏端点,使护栏能够使用原始调用方凭据验证模型调用。",
+ "staticHeadersDesc": "随每次护栏请求一同发送。",
+ "removeHeader": "移除 {{name}}",
+ "headerNamePlaceholder": "请求头名称(如 X-API-Key)",
+ "headerValuePlaceholder": "值",
+ "forwardClientHeaders": "转发客户端请求头",
+ "forwardClientHeadersDesc": "允许从客户端请求转发到护栏的请求头名称(如 x-request-id)。",
+ "noForwardClientHeaders": "未配置转发客户端请求头。",
+ "extraHeaderPlaceholder": "如 x-request-id",
+ "equivalentConfig": "等效配置",
+ "guardrailInfoNote": "此护栏运行在独立实例上,接收用户请求并将结果转发到流水线下一步。请参阅 /v1/realtime),否则请跳过。",
+ "callTypeLabel": "调用类型",
+ "callTypePlaceholder": "选择调用类型",
+ "moreCallTypesSoon": "更多调用类型即将推出。",
+ "realtimeSettingsTitle": "/v1/realtime 设置",
+ "endSessionLabel": "在 X 次违规后结束会话",
+ "endSessionDesc": "在达到指定护栏违规次数后自动关闭会话。留空则永不自动关闭。",
+ "onViolationLabel": "违规时",
+ "violationWarn": "警告",
+ "violationEndSession": "结束会话",
+ "violationWarnDesc": "机器人播报消息,会话继续",
+ "violationEndSessionDesc": "机器人播报消息,连接立即关闭",
+ "violationMessageLabel": "用户听到的消息",
+ "violationMessageDesc": "护栏触发时机器人播报的内容。若留空则回退到默认违规消息。",
+ "violationMessagePlaceholder": "例如:我无法继续此对话。请拨打 1-800-774-2678 联系我们。",
+ "failedToLoadConfig": "加载护栏配置失败",
+ "selectAtLeastOnePii": "请至少选择一个 PII 实体后继续",
+ "configureAtLeastOneFilter": "请至少配置一项内容过滤设置(类别、模式、关键词或竞争对手意图)",
+ "invalidJsonConfig": "配置中的 JSON 格式无效",
+ "addAtLeastOneCriterion": "请至少添加一条评估标准",
+ "weightsMustSum100": "标准权重之和必须为 100%(当前为 {{weightTotal}}%)",
+ "addAtLeastOneRule": "请至少添加一条工具权限规则",
+ "createSuccess": "护栏创建成功",
+ "createFailed": "创建护栏失败:{{error}}"
+ },
+ "guardrailOptionalParams": {
+ "title": "可选参数",
+ "defaultDescription": "为此护栏提供商配置附加设置",
+ "enterValue": "输入 {{key}} 的值",
+ "selectValue": "选择 {{key}} 的值",
+ "selectCategoryPlaceholder": "选择要配置的类别",
+ "selectCategoryHint": "选择类别以添加阈值配置",
+ "fieldRequired": "{{fieldKey}} 为必填项"
+ },
+ "guardrailProviderFields": {
+ "loadFailed": "加载提供商参数失败",
+ "loadingTip": "正在加载提供商参数...",
+ "noFields": "此提供商暂无可配置字段。",
+ "fieldRequired": "{{fieldKey}} 为必填项"
+ },
+ "guardrailTable": {
+ "colGuardrailId": "护栏 ID",
+ "colName": "名称",
+ "colProvider": "提供商",
+ "colMode": "模式",
+ "colDefaultOn": "默认启用",
+ "defaultOn": "默认启用",
+ "defaultOff": "默认关闭",
+ "deleteTooltip": "删除护栏",
+ "configDeleteTooltip": "配置文件中的护栏无法在仪表盘上删除,请从配置文件中删除。",
+ "configDeleteAriaLabel": "删除护栏(配置文件)",
+ "unnamedGuardrail": "未命名护栏",
+ "noGuardrails": "未找到护栏"
+ },
+ "lLMJudgeFields": {
+ "description": "每次 LLM 响应后,Judge Model 会根据您的标准对其评分(0–100)。若加权平均分低于阈值,响应将被拦截(或记录)。",
+ "judgeModelLabel": "Judge Model",
+ "judgeModelTooltip": "读取每条响应并评分的 LLM。请选择能力较强的模型——它仅能看到 LLM 返回的内容,不会接触最终用户数据。",
+ "judgeModelRequired": "请选择 Judge Model",
+ "judgeModelPlaceholder": "选择模型",
+ "minScoreLabel": "最低通过分数",
+ "minScoreTooltip": "0–100。若标准分数的加权平均值低于此值,护栏将触发。建议默认值为 80。",
+ "onFailureLabel": "失败时的处理",
+ "onFailureTooltip": "拦截:分数过低时返回 HTTP 422。仅记录:记录结果但允许响应通过。",
+ "onFailureBlock": "拦截(返回 422)",
+ "onFailureLog": "仅记录",
+ "criteriaLabel": "评估标准",
+ "criteriaTooltip": "每个标准是 Judge 需要检查的一项内容,权重之和必须为 100%。",
+ "criterionNameRequired": "请输入标准名称",
+ "criterionNamePlaceholder": "标准名称(例如:策略准确性)",
+ "weightLabel": "权重",
+ "weightTooltip": "此标准在最终分数中所占的比重,所有权重之和必须为 100%。",
+ "weightRequired": "请输入权重",
+ "criterionDescRequired": "请描述要检查的内容",
+ "criterionDescPlaceholder": "Judge 应针对此标准检查什么?",
+ "addCriterion": "添加标准",
+ "weightsTotal": "权重合计:{{weightTotal}}%",
+ "weightsMustSum": "必须合计为 100%"
+ },
+ "piiComponents": {
+ "filterByCategory": "按类别筛选",
+ "selectCategoriesPlaceholder": "选择要筛选的类别",
+ "quickActions": "快速操作",
+ "quickActionsTooltip": "一次性对所有 PII 类型应用操作",
+ "unselectAll": "取消全选",
+ "selectAllMask": "全选并脱敏",
+ "selectAllBlock": "全选并拦截",
+ "piiTypeHeader": "PII 类型",
+ "actionHeader": "操作",
+ "noMatch": "没有 PII 类型匹配您的筛选条件"
+ },
+ "piiConfiguration": {
+ "title": "配置 PII 保护",
+ "itemsSelected_one": "已选择 {{count}} 项",
+ "itemsSelected_other": "已选择 {{count}} 项"
+ },
+ "toolPermissionRulesEditor": {
+ "title": "LiteLLM 工具权限护栏",
+ "subtitle": "为工具名称或类型提供正则表达式模式(例如 ^mcp__github_.*$),并可选择性地约束载荷字段。",
+ "addRule": "添加规则",
+ "noRules": "尚未添加工具规则",
+ "ruleLabel": "规则 {{index}}",
+ "ruleId": "规则 ID",
+ "toolName": "工具名称(可选)",
+ "toolType": "工具类型(可选)",
+ "decision": "决策",
+ "allow": "允许",
+ "deny": "拒绝",
+ "restrictArgs": "+ 限制工具参数(可选)",
+ "argConstraints": "参数约束(点路径或数组路径)",
+ "addConstraint": "+ 添加另一个约束",
+ "defaultAction": "默认动作",
+ "onDisallowedAction": "禁止时的处理",
+ "onDisallowedTooltip": "拦截:调用被禁止工具时返回错误。改写:去除工具调用但允许响应的其余部分继续。",
+ "block": "拦截",
+ "rewrite": "改写",
+ "violationMessage": "违规消息(可选)",
+ "violationMessagePlaceholder": "这违反了我们的组织策略..."
}
},
"keyValueInput": {
@@ -2662,7 +2914,113 @@
"collapseRow": "折叠行",
"hideJson": "隐藏 JSON",
"showJson": "显示 JSON",
- "copied": "已复制!"
+ "copied": "已复制!",
+ "colAction": "操作",
+ "colChangedBy": "变更人"
+ },
+ "auditLogDrawer": {
+ "tableKeys": "密钥",
+ "tableTeams": "团队",
+ "tableUsers": "用户",
+ "tableOrganizations": "组织",
+ "tableModels": "模型",
+ "copyJson": "复制 JSON",
+ "noDifferingFields": "未检测到差异字段",
+ "tokenLabel": "Token:",
+ "spendLabel": "花费:",
+ "maxBudgetLabel": "最大预算:",
+ "before": "变更前",
+ "after": "变更后",
+ "labelTable": "表",
+ "labelObjectId": "对象 ID",
+ "labelChangedBy": "操作人",
+ "labelApiKeyHash": "API 密钥(哈希)"
+ },
+ "configInfoMessage": {
+ "title": "请求/响应数据不可用",
+ "description": "要查看请求和响应详情,请在您的 LiteLLM 配置中启用提示词存储,方法是在 list_repos 和 get_file——防止 Agent 进行写操作。",
+ "toolsetsCreatingTitle": "创建工具集:",
+ "toolsetsCreatingDesc": "管理员可以从 MCP 页面 → 工具集标签页创建和管理工具集。工具集随后可分配给密钥和团队以限定其工具访问范围。"
+ },
+ "codeInterpreterOutput": {
+ "pythonCodeExecuted": "已执行的 Python 代码",
+ "loadingImage": "图片加载中...",
+ "generatedChart": "生成的图表",
+ "imageNotAvailable": "图片不可用"
+ },
+ "codeInterpreterTool": {
+ "title": "代码解释器",
+ "tooltipDesc": "运行 Python 代码以生成文件、图表并分析数据。容器将自动创建。",
+ "onlyOpenAIWarning": "代码解释器仅适用于 OpenAI 模型",
+ "onlyOpenAINotice": "代码解释器目前仅支持 OpenAI 模型。",
+ "requestSupportLink": "申请支持其他提供商"
+ },
+ "filePreviewCard": {
+ "uploadPreview": "上传预览",
+ "pdf": "PDF",
+ "image": "图片"
+ },
+ "mcpEventsDisplay": {
+ "listTools": "列出工具",
+ "toolCall": "工具调用",
+ "request": "请求",
+ "approved": "已批准",
+ "response": "响应"
+ },
+ "realtimePlayground": {
+ "title": "实时语音对话",
+ "selectModelFirst": "请先选择一个模型",
+ "connectedToApi": "已连接到实时 API",
+ "wsError": "错误:{{error}}",
+ "websocketError": "WebSocket 错误",
+ "disconnected": "已断开",
+ "connectionFailed": "连接失败:{{error}}",
+ "listening": "🎙️ 正在监听...",
+ "microphoneError": "麦克风错误:{{error}}",
+ "connected": "已连接",
+ "connecting": "连接中...",
+ "disconnectedStatus": "已断开",
+ "connect": "连接",
+ "disconnect": "断开",
+ "emptyTitle": "实时语音 Playground",
+ "emptyHint": "点击「连接」开始实时会话。您可以使用麦克风说话或输入文字,AI 将以语音和文字回复。",
+ "you": "您",
+ "ai": "AI",
+ "stopRecording": "停止录音",
+ "startRecording": "开始录音",
+ "inputPlaceholder": "输入消息或使用麦克风...",
+ "listeningHint": "正在监听 — 请对麦克风说话,服务器 VAD 将检测您何时停止说话。"
+ },
+ "responseMetrics": {
+ "timeToFirstToken": "首 Token 时间",
+ "totalLatency": "总延迟",
+ "promptTokens": "提示词 Token",
+ "completionTokens": "补全 Token",
+ "reasoningTokens": "推理 Token",
+ "totalTokens": "总 Token",
+ "cost": "费用",
+ "toolUsed": "使用的工具",
+ "ttft": "TTFT:{{value}}s",
+ "totalLatencyValue": "总延迟:{{value}}s",
+ "in": "输入:{{count}}",
+ "out": "输出:{{count}}",
+ "reasoning": "推理:{{count}}",
+ "total": "总计:{{count}}",
+ "toolName": "工具:{{name}}"
+ },
+ "searchResultsDisplay": {
+ "hideSources": "隐藏来源",
+ "showSources": "显示来源({{count}})",
+ "query": "查询:",
+ "resultCount_one": "{{count}} 条结果",
+ "resultCount_other": "{{count}} 条结果",
+ "metadata": "元数据:"
+ },
+ "sessionManagement": {
+ "title": "会话管理",
+ "toggleTooltip": "在 LiteLLM API 会话管理(使用 previous_response_id)和基于 UI 的会话管理(使用聊天历史)之间选择",
+ "copiedToClipboard": "响应 ID 已复制到剪贴板!",
+ "apiSessionReady": "API 会话:就绪",
+ "uiSessionReady": "UI 会话:就绪",
+ "responseIdPrefix": "响应 ID",
+ "uiSessionPrefix": "UI 会话",
+ "apiSessionReadyDesc": "LiteLLM 将使用 previous_response_id 管理会话",
+ "uiSessionReadyDesc": "UI 将使用聊天历史管理会话",
+ "apiSessionActiveDesc": "LiteLLM API 会话活跃 - 上下文在服务端维护",
+ "uiSessionActiveDesc": "UI 会话活跃 - 上下文在客户端维护",
+ "copyTooltipTitle": "复制响应 ID 以继续会话:"
}
},
"settingsPages": {
@@ -4365,6 +5014,7 @@
"categories": "分类",
"showingCount": "显示 {{filtered}} / {{total}} 个模板",
"noTemplatesMatch": "没有模板匹配所选筛选条件。",
+ "clearAll": "清除全部",
"clearAllFilters": "清除所有筛选",
"complexityLabel": "{{complexity}} 复杂度",
"inheritsFrom": "继承自:",
@@ -4773,6 +5423,7 @@
"colPerRequest": "每次请求",
"colMarginFee": "利润率费用",
"totalPerRequest": "每次请求总计",
+ "breakdownTotalPerRequest": "总计/请求",
"totalPeriod": "{{periodLabel}}总计",
"marginFeePerRequest": "利润率费用/请求",
"periodMarginFeeTotal": "{{periodLabel}}利润率费用",
@@ -5052,5 +5703,178 @@
"tableView": "表格",
"chartView": "图表"
}
+ },
+ "vectorStoreProviders": {
+ "pgVector": {
+ "apiBaseLabel": "API 基础 URL",
+ "apiBaseTooltip": "输入您部署的 litellm-pgvector 服务器的基础 URL(例如:http://your-server:8000)",
+ "apiKeyLabel": "API 密钥",
+ "apiKeyTooltip": "输入您部署的 litellm-pgvector 服务器的 API 密钥"
+ },
+ "vertexAiSearch": {
+ "vertexProjectLabel": "Vertex 项目",
+ "vertexProjectTooltip": "托管 Vertex AI Search 数据存储的 Google Cloud 项目 ID。",
+ "vertexLocationLabel": "Vertex 位置",
+ "vertexLocationTooltip": "Vertex AI Search 数据存储位置,必须为 global、us 或 eu 之一。",
+ "vertexCollectionIdLabel": "集合 ID(可选)",
+ "vertexCollectionIdTooltip": "Discovery Engine 集合 ID。留空则使用默认集合。",
+ "vertexEngineIdLabel": "引擎 ID(可选)",
+ "vertexEngineIdTooltip": "搜索应用(引擎)ID。对于网站、医疗和基于连接器的数据存储(Workspace、Slack、Jira 等)为必填,因为这些来源通过引擎路由搜索。留空则直接查询数据存储。"
+ },
+ "openai": {
+ "apiKeyLabel": "API 密钥",
+ "apiKeyTooltip": "输入您的 OpenAI API 密钥"
+ },
+ "azure": {
+ "apiKeyLabel": "API 密钥",
+ "apiKeyTooltip": "输入您的 Azure OpenAI API 密钥",
+ "apiBaseLabel": "API 基础 URL",
+ "apiBaseTooltip": "输入您的 Azure OpenAI 端点(例如:https://your-resource.openai.azure.com/)"
+ },
+ "milvus": {
+ "apiKeyLabel": "API 密钥",
+ "apiKeyTooltip": "获取 Token 时,请使用冒号(:)连接您访问 Milvus 实例的用户名和密码(例如:username:password)",
+ "apiBaseLabel": "API 基础 URL",
+ "apiBaseTooltip": "输入您的 Milvus 端点(例如:https://your-milvus-endpoint.com/)",
+ "embeddingModelLabel": "嵌入模型",
+ "embeddingModelTooltip": "选择要使用的嵌入模型"
+ },
+ "s3Vectors": {
+ "vectorBucketNameLabel": "向量存储桶名称",
+ "vectorBucketNameTooltip": "用于向量存储的 S3 存储桶名称(若不存在则自动创建)",
+ "indexNameLabel": "索引名称",
+ "indexNameTooltip": "向量索引的名称(可选,若未提供则自动生成)",
+ "awsRegionLabel": "AWS 区域",
+ "awsRegionTooltip": "S3 存储桶所在的 AWS 区域(例如:us-west-2)",
+ "embeddingModelLabel": "嵌入模型",
+ "embeddingModelTooltip": "选择用于向量生成的嵌入模型"
+ }
+ },
+ "vectorStoreManagement": {
+ "createVectorStore": {
+ "pageTitle": "创建向量存储",
+ "pageSubtitle": "上传文档并选择提供商,以创建包含嵌入内容的新向量存储。",
+ "step1Title": "第 1 步:上传文档",
+ "step1Subtitle": "上传一个或多个文档(PDF、TXT、DOCX、MD)。每个文件最大 50MB。",
+ "draggerText": "点击或将文件拖拽到此区域以上传",
+ "draggerHint": "支持单个或批量上传。支持格式:PDF、TXT、DOCX、MD",
+ "uploadedDocuments": "已上传文档({{count}})",
+ "step2Title": "第 2 步:配置向量存储",
+ "step2Subtitle": "选择提供商,并可选填向量存储的名称和描述。",
+ "vectorStoreNameLabel": "向量存储名称",
+ "vectorStoreNameTooltip": "可选:为您的向量存储起一个有意义的名称",
+ "vectorStoreNamePlaceholder": "例如:产品文档、客户支持知识库",
+ "descriptionTooltip": "可选:描述此向量存储包含的内容",
+ "descriptionPlaceholder": "例如:包含所有产品文档和用户指南",
+ "providerLabel": "提供商",
+ "providerTooltip": "选择用于嵌入和向量存储操作的提供商",
+ "unsupportedFileType": "{{name}} 不是受支持的文件类型。请上传 PDF、TXT、DOCX 或 MD 文件。",
+ "fileTooLarge": "{{name}} 必须小于 50MB!",
+ "uploadAtLeastOne": "请至少上传一个文档",
+ "selectProvider": "请选择一个提供商",
+ "provideField": "请填写 {{label}}",
+ "bucketNameMinLength": "向量存储桶名称至少需要 3 个字符",
+ "indexNameMinLength": "若提供索引名称,至少需要 3 个字符",
+ "createSuccess": "成功创建向量存储,已包含 {{count}} 个文档。向量存储 ID:{{vectorStoreId}}",
+ "createFailed": "创建向量存储失败:{{error}}",
+ "creating": "正在创建向量存储...",
+ "createButton": "创建向量存储",
+ "successMessage": "向量存储创建成功",
+ "vectorStoreIdLabel": "向量存储 ID:",
+ "documentsIngestedLabel": "已摄入文档:"
+ },
+ "documentsTable": {
+ "idCopied": "文档 ID 已复制到剪贴板",
+ "statusUploading": "上传中",
+ "statusReady": "就绪",
+ "statusRemoved": "已移除",
+ "viewDetails": "查看详情",
+ "copyId": "复制 ID",
+ "emptyText": "尚未上传文档。请在上方上传文档以开始使用。"
+ },
+ "s3VectorsConfig": {
+ "alertTitle": "AWS S3 向量存储配置",
+ "alertDescription": "AWS S3 Vectors 允许您直接在 S3 中存储和查询向量嵌入:",
+ "alertItem1": "若向量存储桶和索引不存在,将自动创建",
+ "alertItem2": "向量维度会根据所选嵌入模型自动检测",
+ "alertItem3": "确保您的 AWS 凭据具有 S3 Vectors 操作权限",
+ "alertItem4Prefix": "了解更多:",
+ "alertItem4Link": "AWS S3 Vectors 文档",
+ "vectorBucketNameLabel": "向量存储桶名称",
+ "vectorBucketNameTooltip": "用于向量存储的 S3 存储桶名称(至少 3 个字符,仅限小写字母、数字、连字符和句点)",
+ "vectorBucketNamePlaceholder": "my-vector-bucket(最少 3 个字符)",
+ "bucketNameHelp": "存储桶名称至少需要 3 个字符",
+ "indexNameLabel": "索引名称",
+ "indexNameTooltip": "向量索引的名称(可选,若未提供则自动生成)。若提供,至少需要 3 个字符。",
+ "indexNamePlaceholder": "my-vector-index(可选,最少 3 个字符)",
+ "indexNameHelp": "若提供索引名称,至少需要 3 个字符",
+ "awsRegionLabel": "AWS 区域",
+ "awsRegionTooltip": "S3 存储桶所在的 AWS 区域(例如:us-west-2)",
+ "embeddingModelLabel": "嵌入模型",
+ "embeddingModelTooltip": "选择用于向量生成的嵌入模型",
+ "embeddingModelPlaceholder": "选择嵌入模型"
+ },
+ "testVectorStoreTab": {
+ "accessTokenRequired": "测试向量存储需要访问令牌。",
+ "noVectorStores": "暂无可用向量存储。请先创建一个再进行测试。",
+ "selectTitle": "选择向量存储",
+ "selectSubtitle": "选择一个向量存储以测试搜索查询",
+ "selectPlaceholder": "选择向量存储"
+ },
+ "vectorStoreForm": {
+ "modalTitle": "添加新向量存储",
+ "providerLabel": "提供商",
+ "providerTooltip": "为此向量存储选择提供商",
+ "providerRequired": "请选择一个提供商",
+ "pgVectorAlertTitle": "PG Vector 配置必需",
+ "pgVectorAlertDescription": "LiteLLM 提供了一个连接 PG Vector 的服务器。使用此提供商前:",
+ "pgVectorStep1": "从以下地址部署 litellm-pgvector 服务器:",
+ "pgVectorStep2": "为您的 PostgreSQL 数据库配置 pgvector 扩展",
+ "pgVectorStep3": "启动服务器并记录 API 基础 URL 和 API 密钥",
+ "pgVectorStep4": "在下方字段中输入这些详细信息",
+ "vertexRagAlertTitle": "Vertex AI RAG 引擎配置",
+ "vertexRagAlertDescription": "使用 Vertex AI RAG 引擎:",
+ "vertexRagStep1": "按照指南配置您的 Vertex AI RAG 引擎语料库:",
+ "vertexRagStep1Link": "Vertex AI RAG 引擎概述",
+ "vertexRagStep2": "在您的 Google Cloud 项目中创建语料库",
+ "vertexRagStep3": "从 Vertex AI 控制台记录语料库 ID",
+ "vertexRagStep4": "在下方的向量存储 ID 字段中输入语料库 ID",
+ "vertexSearchAlertTitle": "Vertex AI Search 配置",
+ "vertexSearchAlertDescription": "使用 Vertex AI Search(Discovery Engine):",
+ "vertexSearchStep1": "在您的 Google Cloud 项目上启用 Discovery Engine API 并按照指南创建数据存储:",
+ "vertexSearchStep1Link": "创建 Vertex AI Search 数据存储",
+ "vertexSearchStep2": "选择支持的位置:global、us 或 eu",
+ "vertexSearchStep3": "对于大多数数据存储类型(Cloud Storage、BigQuery、媒体):复制数据存储 ID 并在下方的向量存储 ID 字段中输入。",
+ "vertexSearchStep4": "对于网站、医疗和基于连接器的来源(Drive、Gmail、Slack、Jira 等):在数据存储之上创建搜索应用,然后复制引擎 ID 并在引擎 ID 字段中输入。此时向量存储 ID 仍为必填(作为 LiteLLM 侧的记录名称),但设置引擎 ID 后不会用于 GCP URL。",
+ "vectorStoreIdLabel": "向量存储 ID",
+ "vectorStoreIdTooltip": "输入您 API 提供商的向量存储 ID",
+ "vectorStoreIdRequired": "请输入您 API 提供商的向量存储 ID",
+ "vectorStoreIdPlaceholderVertexRag": "6917529027641081856(从 Vertex AI 控制台获取语料库 ID)",
+ "vectorStoreIdPlaceholderVertexSearch": "my-datastore_1234567890(从 Vertex AI Search 控制台获取数据存储 ID)",
+ "vectorStoreIdPlaceholderVertexSearchEngine": "您在 LiteLLM 中引用此记录的任意标识符",
+ "vectorStoreIdPlaceholderDefault": "输入提供商的向量存储 ID",
+ "fieldSelectRequired": "请选择 {{label}}",
+ "fieldInputRequired": "请输入 {{label}}",
+ "vectorStoreNameLabel": "向量存储名称",
+ "vectorStoreNameTooltip": "您要为向量存储起的自定义名称,此名称将在 LiteLLM 界面上显示",
+ "existingCredentialsLabel": "现有凭据",
+ "existingCredentialsTooltip": "可选:为此向量存储选择 API 提供商凭据,例如 Bedrock API 密钥",
+ "existingCredentialsPlaceholder": "选择或搜索现有凭据",
+ "metadataLabel": "元数据",
+ "metadataTooltip": "向量存储的 JSON 元数据(可选)",
+ "invalidMetadataJson": "元数据字段中的 JSON 无效",
+ "createSuccess": "向量存储创建成功",
+ "createFailed": "创建向量存储失败:{{error}}"
+ },
+ "vectorStoreTable": {
+ "colVectorStoreId": "向量存储 ID",
+ "colFiles": "文件",
+ "colProvider": "提供商",
+ "oneFile": "1 个文件",
+ "nFiles": "{{count}} 个文件",
+ "editTooltip": "编辑向量存储",
+ "deleteTooltip": "删除向量存储",
+ "noVectorStores": "未找到向量存储"
+ }
}
}