Просмотр исходного кода

feat: Global Inference for Bedrock models (#8750) (#8940)

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <[email protected]>
Hannes Rudolph 1 месяц назад
Родитель
Сommit
65230f1f5c

+ 1 - 0
packages/types/src/provider-settings.ts

@@ -220,6 +220,7 @@ const bedrockSchema = apiModelIdProviderModelSchema.extend({
 	awsSessionToken: z.string().optional(),
 	awsSessionToken: z.string().optional(),
 	awsRegion: z.string().optional(),
 	awsRegion: z.string().optional(),
 	awsUseCrossRegionInference: z.boolean().optional(),
 	awsUseCrossRegionInference: z.boolean().optional(),
+	awsUseGlobalInference: z.boolean().optional(), // Enable Global Inference profile routing when supported
 	awsUsePromptCache: z.boolean().optional(),
 	awsUsePromptCache: z.boolean().optional(),
 	awsProfile: z.string().optional(),
 	awsProfile: z.string().optional(),
 	awsUseProfile: z.boolean().optional(),
 	awsUseProfile: z.boolean().optional(),

+ 22 - 6
packages/types/src/providers/bedrock.ts

@@ -401,17 +401,22 @@ export const BEDROCK_DEFAULT_CONTEXT = 128_000
 // https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html
 // https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html
 // This mapping is pre-ordered by pattern length (descending) to ensure more specific patterns match first
 // This mapping is pre-ordered by pattern length (descending) to ensure more specific patterns match first
 export const AWS_INFERENCE_PROFILE_MAPPING: Array<[string, string]> = [
 export const AWS_INFERENCE_PROFILE_MAPPING: Array<[string, string]> = [
-	// US Government Cloud → ug. inference profile (most specific prefix first)
+	// Australia regions (Sydney and Melbourne) → au. inference profile (most specific - 14 chars)
+	["ap-southeast-2", "au."],
+	["ap-southeast-4", "au."],
+	// Japan regions (Tokyo and Osaka) → jp. inference profile (13 chars)
+	["ap-northeast-", "jp."],
+	// US Government Cloud → ug. inference profile (7 chars)
 	["us-gov-", "ug."],
 	["us-gov-", "ug."],
-	// Americas regions → us. inference profile
+	// Americas regions → us. inference profile (3 chars)
 	["us-", "us."],
 	["us-", "us."],
-	// Europe regions → eu. inference profile
+	// Europe regions → eu. inference profile (3 chars)
 	["eu-", "eu."],
 	["eu-", "eu."],
-	// Asia Pacific regions → apac. inference profile
+	// Asia Pacific regions → apac. inference profile (3 chars)
 	["ap-", "apac."],
 	["ap-", "apac."],
-	// Canada regions → ca. inference profile
+	// Canada regions → ca. inference profile (3 chars)
 	["ca-", "ca."],
 	["ca-", "ca."],
-	// South America regions → sa. inference profile
+	// South America regions → sa. inference profile (3 chars)
 	["sa-", "sa."],
 	["sa-", "sa."],
 ]
 ]
 
 
@@ -448,3 +453,14 @@ export const BEDROCK_1M_CONTEXT_MODEL_IDS = [
 	"anthropic.claude-sonnet-4-20250514-v1:0",
 	"anthropic.claude-sonnet-4-20250514-v1:0",
 	"anthropic.claude-sonnet-4-5-20250929-v1:0",
 	"anthropic.claude-sonnet-4-5-20250929-v1:0",
 ] as const
 ] as const
+
+// Amazon Bedrock models that support Global Inference profiles
+// As of Oct 2025, AWS supports Global Inference for:
+// - Claude Sonnet 4
+// - Claude Sonnet 4.5
+// - Claude Haiku 4.5
+export const BEDROCK_GLOBAL_INFERENCE_MODEL_IDS = [
+	"anthropic.claude-sonnet-4-20250514-v1:0",
+	"anthropic.claude-sonnet-4-5-20250929-v1:0",
+	"anthropic.claude-haiku-4-5-20251001-v1:0",
+] as const

+ 11 - 2
src/api/providers/__tests__/bedrock-inference-profiles.spec.ts

@@ -30,6 +30,9 @@ describe("Amazon Bedrock Inference Profiles", () => {
 	describe("AWS_INFERENCE_PROFILE_MAPPING constant", () => {
 	describe("AWS_INFERENCE_PROFILE_MAPPING constant", () => {
 		it("should contain all expected region mappings", () => {
 		it("should contain all expected region mappings", () => {
 			expect(AWS_INFERENCE_PROFILE_MAPPING).toEqual([
 			expect(AWS_INFERENCE_PROFILE_MAPPING).toEqual([
+				["ap-southeast-2", "au."],
+				["ap-southeast-4", "au."],
+				["ap-northeast-", "jp."],
 				["us-gov-", "ug."],
 				["us-gov-", "ug."],
 				["us-", "us."],
 				["us-", "us."],
 				["eu-", "eu."],
 				["eu-", "eu."],
@@ -47,7 +50,7 @@ describe("Amazon Bedrock Inference Profiles", () => {
 
 
 		it("should have valid inference profile prefixes", () => {
 		it("should have valid inference profile prefixes", () => {
 			AWS_INFERENCE_PROFILE_MAPPING.forEach(([regionPattern, inferenceProfile]) => {
 			AWS_INFERENCE_PROFILE_MAPPING.forEach(([regionPattern, inferenceProfile]) => {
-				expect(regionPattern).toMatch(/^[a-z-]+$/)
+				expect(regionPattern).toMatch(/^[a-z0-9-]+$/)
 				expect(inferenceProfile).toMatch(/^[a-z]+\.$/)
 				expect(inferenceProfile).toMatch(/^[a-z]+\.$/)
 			})
 			})
 		})
 		})
@@ -77,8 +80,14 @@ describe("Amazon Bedrock Inference Profiles", () => {
 
 
 		it("should return correct prefix for Asia Pacific regions", () => {
 		it("should return correct prefix for Asia Pacific regions", () => {
 			const handler = createHandler()
 			const handler = createHandler()
+			// Australia regions (Sydney and Melbourne) get au. prefix
+			expect((handler as any).constructor.getPrefixForRegion("ap-southeast-2")).toBe("au.")
+			expect((handler as any).constructor.getPrefixForRegion("ap-southeast-4")).toBe("au.")
+			// Japan regions (Tokyo and Osaka) get jp. prefix
+			expect((handler as any).constructor.getPrefixForRegion("ap-northeast-1")).toBe("jp.")
+			expect((handler as any).constructor.getPrefixForRegion("ap-northeast-3")).toBe("jp.")
+			// Other APAC regions get apac. prefix
 			expect((handler as any).constructor.getPrefixForRegion("ap-southeast-1")).toBe("apac.")
 			expect((handler as any).constructor.getPrefixForRegion("ap-southeast-1")).toBe("apac.")
-			expect((handler as any).constructor.getPrefixForRegion("ap-northeast-1")).toBe("apac.")
 			expect((handler as any).constructor.getPrefixForRegion("ap-south-1")).toBe("apac.")
 			expect((handler as any).constructor.getPrefixForRegion("ap-south-1")).toBe("apac.")
 			expect((handler as any).constructor.getPrefixForRegion("ap-east-1")).toBe("apac.")
 			expect((handler as any).constructor.getPrefixForRegion("ap-east-1")).toBe("apac.")
 		})
 		})

+ 7 - 1
src/api/providers/__tests__/bedrock.spec.ts

@@ -114,8 +114,14 @@ describe("AwsBedrockHandler", () => {
 			it("should return correct prefix for APAC regions", () => {
 			it("should return correct prefix for APAC regions", () => {
 				const getPrefixForRegion = (AwsBedrockHandler as any).getPrefixForRegion
 				const getPrefixForRegion = (AwsBedrockHandler as any).getPrefixForRegion
 
 
+				// Australia regions (Sydney and Melbourne) get au. prefix
+				expect(getPrefixForRegion("ap-southeast-2")).toBe("au.")
+				expect(getPrefixForRegion("ap-southeast-4")).toBe("au.")
+				// Japan regions (Tokyo and Osaka) get jp. prefix
+				expect(getPrefixForRegion("ap-northeast-1")).toBe("jp.")
+				expect(getPrefixForRegion("ap-northeast-3")).toBe("jp.")
+				// Other APAC regions get apac. prefix
 				expect(getPrefixForRegion("ap-southeast-1")).toBe("apac.")
 				expect(getPrefixForRegion("ap-southeast-1")).toBe("apac.")
-				expect(getPrefixForRegion("ap-northeast-1")).toBe("apac.")
 				expect(getPrefixForRegion("ap-south-1")).toBe("apac.")
 				expect(getPrefixForRegion("ap-south-1")).toBe("apac.")
 			})
 			})
 
 

+ 16 - 2
src/api/providers/bedrock.ts

@@ -22,6 +22,7 @@ import {
 	BEDROCK_DEFAULT_CONTEXT,
 	BEDROCK_DEFAULT_CONTEXT,
 	AWS_INFERENCE_PROFILE_MAPPING,
 	AWS_INFERENCE_PROFILE_MAPPING,
 	BEDROCK_1M_CONTEXT_MODEL_IDS,
 	BEDROCK_1M_CONTEXT_MODEL_IDS,
+	BEDROCK_GLOBAL_INFERENCE_MODEL_IDS,
 } from "@roo-code/types"
 } from "@roo-code/types"
 
 
 import { ApiStream } from "../transform/stream"
 import { ApiStream } from "../transform/stream"
@@ -887,6 +888,11 @@ export class AwsBedrockHandler extends BaseProvider implements SingleCompletionH
 			}
 			}
 		}
 		}
 
 
+		// Also strip Global Inference profile prefix if present
+		if (modelId.startsWith("global.")) {
+			return modelId.substring("global.".length)
+		}
+
 		// Return the model ID as-is for all other cases
 		// Return the model ID as-is for all other cases
 		return modelId
 		return modelId
 	}
 	}
@@ -964,8 +970,16 @@ export class AwsBedrockHandler extends BaseProvider implements SingleCompletionH
 			//a model was selected from the drop down
 			//a model was selected from the drop down
 			modelConfig = this.getModelById(this.options.apiModelId as string)
 			modelConfig = this.getModelById(this.options.apiModelId as string)
 
 
-			// Add cross-region inference prefix if enabled
-			if (this.options.awsUseCrossRegionInference && this.options.awsRegion) {
+			// Apply Global Inference prefix if enabled and supported (takes precedence over cross-region)
+			const baseIdForGlobal = this.parseBaseModelId(modelConfig.id)
+			if (
+				this.options.awsUseGlobalInference &&
+				BEDROCK_GLOBAL_INFERENCE_MODEL_IDS.includes(baseIdForGlobal as any)
+			) {
+				modelConfig.id = `global.${baseIdForGlobal}`
+			}
+			// Otherwise, add cross-region inference prefix if enabled
+			else if (this.options.awsUseCrossRegionInference && this.options.awsRegion) {
 				const prefix = AwsBedrockHandler.getPrefixForRegion(this.options.awsRegion)
 				const prefix = AwsBedrockHandler.getPrefixForRegion(this.options.awsRegion)
 				if (prefix) {
 				if (prefix) {
 					modelConfig.id = `${prefix}${modelConfig.id}`
 					modelConfig.id = `${prefix}${modelConfig.id}`

+ 29 - 2
webview-ui/src/components/settings/providers/Bedrock.tsx

@@ -2,7 +2,13 @@ import { useCallback, useState, useEffect } from "react"
 import { Checkbox } from "vscrui"
 import { Checkbox } from "vscrui"
 import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
 import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
 
 
-import { type ProviderSettings, type ModelInfo, BEDROCK_REGIONS, BEDROCK_1M_CONTEXT_MODEL_IDS } from "@roo-code/types"
+import {
+	type ProviderSettings,
+	type ModelInfo,
+	BEDROCK_REGIONS,
+	BEDROCK_1M_CONTEXT_MODEL_IDS,
+	BEDROCK_GLOBAL_INFERENCE_MODEL_IDS,
+} from "@roo-code/types"
 
 
 import { useAppTranslation } from "@src/i18n/TranslationContext"
 import { useAppTranslation } from "@src/i18n/TranslationContext"
 import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, StandardTooltip } from "@src/components/ui"
 import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, StandardTooltip } from "@src/components/ui"
@@ -23,6 +29,11 @@ export const Bedrock = ({ apiConfiguration, setApiConfigurationField, selectedMo
 	const supports1MContextBeta =
 	const supports1MContextBeta =
 		!!apiConfiguration?.apiModelId && BEDROCK_1M_CONTEXT_MODEL_IDS.includes(apiConfiguration.apiModelId as any)
 		!!apiConfiguration?.apiModelId && BEDROCK_1M_CONTEXT_MODEL_IDS.includes(apiConfiguration.apiModelId as any)
 
 
+	// Check if the selected model supports Global Inference profile routing
+	const supportsGlobalInference =
+		!!apiConfiguration?.apiModelId &&
+		BEDROCK_GLOBAL_INFERENCE_MODEL_IDS.includes(apiConfiguration.apiModelId as any)
+
 	// Update the endpoint enabled state when the configuration changes
 	// Update the endpoint enabled state when the configuration changes
 	useEffect(() => {
 	useEffect(() => {
 		setAwsEndpointSelected(!!apiConfiguration?.awsBedrockEndpointEnabled)
 		setAwsEndpointSelected(!!apiConfiguration?.awsBedrockEndpointEnabled)
@@ -138,9 +149,25 @@ export const Bedrock = ({ apiConfiguration, setApiConfigurationField, selectedMo
 					</SelectContent>
 					</SelectContent>
 				</Select>
 				</Select>
 			</div>
 			</div>
+			{supportsGlobalInference && (
+				<Checkbox
+					checked={apiConfiguration?.awsUseGlobalInference || false}
+					disabled={apiConfiguration?.awsUseCrossRegionInference || false}
+					onChange={(checked: boolean) => {
+						// Enabling Global Inference should disable cross-region inference
+						setApiConfigurationField("awsUseGlobalInference", checked)
+						if (checked) setApiConfigurationField("awsUseCrossRegionInference", false)
+					}}>
+					{t("settings:providers.awsGlobalInference")}
+				</Checkbox>
+			)}
 			<Checkbox
 			<Checkbox
 				checked={apiConfiguration?.awsUseCrossRegionInference || false}
 				checked={apiConfiguration?.awsUseCrossRegionInference || false}
-				onChange={handleInputChange("awsUseCrossRegionInference", noTransform)}>
+				disabled={apiConfiguration?.awsUseGlobalInference || false}
+				onChange={(checked: boolean) => {
+					setApiConfigurationField("awsUseCrossRegionInference", checked)
+					if (checked) setApiConfigurationField("awsUseGlobalInference", false)
+				}}>
 				{t("settings:providers.awsCrossRegion")}
 				{t("settings:providers.awsCrossRegion")}
 			</Checkbox>
 			</Checkbox>
 			{selectedModelInfo?.supportsPromptCache && (
 			{selectedModelInfo?.supportsPromptCache && (

+ 1 - 0
webview-ui/src/i18n/locales/ca/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "Token de sessió d'AWS",
 		"awsSessionToken": "Token de sessió d'AWS",
 		"awsRegion": "Regió d'AWS",
 		"awsRegion": "Regió d'AWS",
 		"awsCrossRegion": "Utilitzar inferència entre regions",
 		"awsCrossRegion": "Utilitzar inferència entre regions",
+		"awsGlobalInference": "Utilitzar la inferència global (selecció automàtica de la regió òptima d'AWS)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Utilitzar punt final VPC personalitzat",
 			"useCustomVpcEndpoint": "Utilitzar punt final VPC personalitzat",
 			"vpcEndpointUrlPlaceholder": "Introduïu l'URL del punt final VPC (opcional)",
 			"vpcEndpointUrlPlaceholder": "Introduïu l'URL del punt final VPC (opcional)",

+ 1 - 0
webview-ui/src/i18n/locales/de/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS Sitzungstoken",
 		"awsSessionToken": "AWS Sitzungstoken",
 		"awsRegion": "AWS Region",
 		"awsRegion": "AWS Region",
 		"awsCrossRegion": "Regionsübergreifende Inferenz verwenden",
 		"awsCrossRegion": "Regionsübergreifende Inferenz verwenden",
+		"awsGlobalInference": "Globale Inferenz verwenden (optimale AWS-Region automatisch auswählen)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Benutzerdefinierten VPC-Endpunkt verwenden",
 			"useCustomVpcEndpoint": "Benutzerdefinierten VPC-Endpunkt verwenden",
 			"vpcEndpointUrlPlaceholder": "VPC-Endpunkt-URL eingeben (optional)",
 			"vpcEndpointUrlPlaceholder": "VPC-Endpunkt-URL eingeben (optional)",

+ 1 - 0
webview-ui/src/i18n/locales/en/settings.json

@@ -349,6 +349,7 @@
 		"awsSessionToken": "AWS Session Token",
 		"awsSessionToken": "AWS Session Token",
 		"awsRegion": "AWS Region",
 		"awsRegion": "AWS Region",
 		"awsCrossRegion": "Use cross-region inference",
 		"awsCrossRegion": "Use cross-region inference",
+		"awsGlobalInference": "Use Global inference (auto-select optimal AWS Region)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Use custom VPC endpoint",
 			"useCustomVpcEndpoint": "Use custom VPC endpoint",
 			"vpcEndpointUrlPlaceholder": "Enter VPC Endpoint URL (optional)",
 			"vpcEndpointUrlPlaceholder": "Enter VPC Endpoint URL (optional)",

+ 1 - 0
webview-ui/src/i18n/locales/es/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "Token de sesión de AWS",
 		"awsSessionToken": "Token de sesión de AWS",
 		"awsRegion": "Región de AWS",
 		"awsRegion": "Región de AWS",
 		"awsCrossRegion": "Usar inferencia entre regiones",
 		"awsCrossRegion": "Usar inferencia entre regiones",
+		"awsGlobalInference": "Usar inferencia global (selección automática de la región óptima de AWS)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Usar punto de conexión VPC personalizado",
 			"useCustomVpcEndpoint": "Usar punto de conexión VPC personalizado",
 			"vpcEndpointUrlPlaceholder": "Ingrese URL del punto de conexión VPC (opcional)",
 			"vpcEndpointUrlPlaceholder": "Ingrese URL del punto de conexión VPC (opcional)",

+ 1 - 0
webview-ui/src/i18n/locales/fr/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "Jeton de session AWS",
 		"awsSessionToken": "Jeton de session AWS",
 		"awsRegion": "Région AWS",
 		"awsRegion": "Région AWS",
 		"awsCrossRegion": "Utiliser l'inférence inter-régions",
 		"awsCrossRegion": "Utiliser l'inférence inter-régions",
+		"awsGlobalInference": "Utiliser l'inférence globale (sélection automatique de la région AWS optimale)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Utiliser un point de terminaison VPC personnalisé",
 			"useCustomVpcEndpoint": "Utiliser un point de terminaison VPC personnalisé",
 			"vpcEndpointUrlPlaceholder": "Entrer l'URL du point de terminaison VPC (optionnel)",
 			"vpcEndpointUrlPlaceholder": "Entrer l'URL du point de terminaison VPC (optionnel)",

+ 1 - 0
webview-ui/src/i18n/locales/hi/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS सत्र टोकन",
 		"awsSessionToken": "AWS सत्र टोकन",
 		"awsRegion": "AWS क्षेत्र",
 		"awsRegion": "AWS क्षेत्र",
 		"awsCrossRegion": "क्रॉस-क्षेत्र अनुमान का उपयोग करें",
 		"awsCrossRegion": "क्रॉस-क्षेत्र अनुमान का उपयोग करें",
+		"awsGlobalInference": "वैश्विक अनुमान का उपयोग करें (स्वचालित रूप से श्रेष्ठ AWS क्षेत्र चुनें)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "कस्टम VPC एंडपॉइंट का उपयोग करें",
 			"useCustomVpcEndpoint": "कस्टम VPC एंडपॉइंट का उपयोग करें",
 			"vpcEndpointUrlPlaceholder": "VPC एंडपॉइंट URL दर्ज करें (वैकल्पिक)",
 			"vpcEndpointUrlPlaceholder": "VPC एंडपॉइंट URL दर्ज करें (वैकल्पिक)",

+ 1 - 0
webview-ui/src/i18n/locales/id/settings.json

@@ -348,6 +348,7 @@
 		"awsSessionToken": "AWS Session Token",
 		"awsSessionToken": "AWS Session Token",
 		"awsRegion": "AWS Region",
 		"awsRegion": "AWS Region",
 		"awsCrossRegion": "Gunakan cross-region inference",
 		"awsCrossRegion": "Gunakan cross-region inference",
+		"awsGlobalInference": "Gunakan inferensi Global (pilih Wilayah AWS optimal secara otomatis)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Gunakan VPC endpoint kustom",
 			"useCustomVpcEndpoint": "Gunakan VPC endpoint kustom",
 			"vpcEndpointUrlPlaceholder": "Masukkan VPC Endpoint URL (opsional)",
 			"vpcEndpointUrlPlaceholder": "Masukkan VPC Endpoint URL (opsional)",

+ 1 - 0
webview-ui/src/i18n/locales/it/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "Token di sessione AWS",
 		"awsSessionToken": "Token di sessione AWS",
 		"awsRegion": "Regione AWS",
 		"awsRegion": "Regione AWS",
 		"awsCrossRegion": "Usa inferenza cross-regione",
 		"awsCrossRegion": "Usa inferenza cross-regione",
+		"awsGlobalInference": "Usa l'inferenza globale (selezione automatica della regione AWS ottimale)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Usa endpoint VPC personalizzato",
 			"useCustomVpcEndpoint": "Usa endpoint VPC personalizzato",
 			"vpcEndpointUrlPlaceholder": "Inserisci URL endpoint VPC (opzionale)",
 			"vpcEndpointUrlPlaceholder": "Inserisci URL endpoint VPC (opzionale)",

+ 1 - 0
webview-ui/src/i18n/locales/ja/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWSセッショントークン",
 		"awsSessionToken": "AWSセッショントークン",
 		"awsRegion": "AWSリージョン",
 		"awsRegion": "AWSリージョン",
 		"awsCrossRegion": "クロスリージョン推論を使用",
 		"awsCrossRegion": "クロスリージョン推論を使用",
+		"awsGlobalInference": "グローバル推論を使用する(最適なAWSリージョンを自動選択)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "カスタムVPCエンドポイントを使用",
 			"useCustomVpcEndpoint": "カスタムVPCエンドポイントを使用",
 			"vpcEndpointUrlPlaceholder": "VPCエンドポイントURLを入力(任意)",
 			"vpcEndpointUrlPlaceholder": "VPCエンドポイントURLを入力(任意)",

+ 1 - 0
webview-ui/src/i18n/locales/ko/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS 세션 토큰",
 		"awsSessionToken": "AWS 세션 토큰",
 		"awsRegion": "AWS 리전",
 		"awsRegion": "AWS 리전",
 		"awsCrossRegion": "교차 리전 추론 사용",
 		"awsCrossRegion": "교차 리전 추론 사용",
+		"awsGlobalInference": "글로벌 추론 사용(최적의 AWS 리전 자동 선택)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "사용자 지정 VPC 엔드포인트 사용",
 			"useCustomVpcEndpoint": "사용자 지정 VPC 엔드포인트 사용",
 			"vpcEndpointUrlPlaceholder": "VPC 엔드포인트 URL 입력 (선택사항)",
 			"vpcEndpointUrlPlaceholder": "VPC 엔드포인트 URL 입력 (선택사항)",

+ 1 - 0
webview-ui/src/i18n/locales/nl/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS-sessietoken",
 		"awsSessionToken": "AWS-sessietoken",
 		"awsRegion": "AWS-regio",
 		"awsRegion": "AWS-regio",
 		"awsCrossRegion": "Gebruik cross-region inference",
 		"awsCrossRegion": "Gebruik cross-region inference",
+		"awsGlobalInference": "Gebruik wereldwijde inferentie (automatische selectie van optimale AWS-regio)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Aangepast VPC-eindpunt gebruiken",
 			"useCustomVpcEndpoint": "Aangepast VPC-eindpunt gebruiken",
 			"vpcEndpointUrlPlaceholder": "Voer VPC-eindpunt URL in (optioneel)",
 			"vpcEndpointUrlPlaceholder": "Voer VPC-eindpunt URL in (optioneel)",

+ 1 - 0
webview-ui/src/i18n/locales/pl/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "Token sesji AWS",
 		"awsSessionToken": "Token sesji AWS",
 		"awsRegion": "Region AWS",
 		"awsRegion": "Region AWS",
 		"awsCrossRegion": "Użyj wnioskowania międzyregionalnego",
 		"awsCrossRegion": "Użyj wnioskowania międzyregionalnego",
+		"awsGlobalInference": "Użyj globalnej inferencji (automatyczny wybór optymalnego regionu AWS)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Użyj niestandardowego punktu końcowego VPC",
 			"useCustomVpcEndpoint": "Użyj niestandardowego punktu końcowego VPC",
 			"vpcEndpointUrlPlaceholder": "Wprowadź URL punktu końcowego VPC (opcjonalnie)",
 			"vpcEndpointUrlPlaceholder": "Wprowadź URL punktu końcowego VPC (opcjonalnie)",

+ 1 - 0
webview-ui/src/i18n/locales/pt-BR/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "Token de Sessão AWS",
 		"awsSessionToken": "Token de Sessão AWS",
 		"awsRegion": "Região AWS",
 		"awsRegion": "Região AWS",
 		"awsCrossRegion": "Usar inferência entre regiões",
 		"awsCrossRegion": "Usar inferência entre regiões",
+		"awsGlobalInference": "Usar inferência global (selecionar automaticamente a região ideal da AWS)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Usar endpoint VPC personalizado",
 			"useCustomVpcEndpoint": "Usar endpoint VPC personalizado",
 			"vpcEndpointUrlPlaceholder": "Digite a URL do endpoint VPC (opcional)",
 			"vpcEndpointUrlPlaceholder": "Digite a URL do endpoint VPC (opcional)",

+ 1 - 0
webview-ui/src/i18n/locales/ru/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS Session Token",
 		"awsSessionToken": "AWS Session Token",
 		"awsRegion": "Регион AWS",
 		"awsRegion": "Регион AWS",
 		"awsCrossRegion": "Использовать кросс-региональный вывод",
 		"awsCrossRegion": "Использовать кросс-региональный вывод",
+		"awsGlobalInference": "Использовать глобальный вывод (автоматический выбор оптимального региона AWS)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Использовать пользовательскую конечную точку VPC",
 			"useCustomVpcEndpoint": "Использовать пользовательскую конечную точку VPC",
 			"vpcEndpointUrlPlaceholder": "Введите URL конечной точки VPC (опционально)",
 			"vpcEndpointUrlPlaceholder": "Введите URL конечной точки VPC (опционально)",

+ 1 - 0
webview-ui/src/i18n/locales/tr/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS Oturum Belirteci",
 		"awsSessionToken": "AWS Oturum Belirteci",
 		"awsRegion": "AWS Bölgesi",
 		"awsRegion": "AWS Bölgesi",
 		"awsCrossRegion": "Bölgeler arası çıkarım kullan",
 		"awsCrossRegion": "Bölgeler arası çıkarım kullan",
+		"awsGlobalInference": "Genel çıkarımı kullan (en uygun AWS Bölgesini otomatik seç)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Özel VPC uç noktası kullan",
 			"useCustomVpcEndpoint": "Özel VPC uç noktası kullan",
 			"vpcEndpointUrlPlaceholder": "VPC uç noktası URL'sini girin (isteğe bağlı)",
 			"vpcEndpointUrlPlaceholder": "VPC uç noktası URL'sini girin (isteğe bağlı)",

+ 1 - 0
webview-ui/src/i18n/locales/vi/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "Token phiên AWS",
 		"awsSessionToken": "Token phiên AWS",
 		"awsRegion": "Vùng AWS",
 		"awsRegion": "Vùng AWS",
 		"awsCrossRegion": "Sử dụng suy luận liên vùng",
 		"awsCrossRegion": "Sử dụng suy luận liên vùng",
+		"awsGlobalInference": "Sử dụng suy luận toàn cầu (tự động chọn Khu vực AWS tối ưu)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "Sử dụng điểm cuối VPC tùy chỉnh",
 			"useCustomVpcEndpoint": "Sử dụng điểm cuối VPC tùy chỉnh",
 			"vpcEndpointUrlPlaceholder": "Nhập URL điểm cuối VPC (tùy chọn)",
 			"vpcEndpointUrlPlaceholder": "Nhập URL điểm cuối VPC (tùy chọn)",

+ 1 - 0
webview-ui/src/i18n/locales/zh-CN/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS 会话Token",
 		"awsSessionToken": "AWS 会话Token",
 		"awsRegion": "AWS 区域",
 		"awsRegion": "AWS 区域",
 		"awsCrossRegion": "使用跨区域推理",
 		"awsCrossRegion": "使用跨区域推理",
+		"awsGlobalInference": "使用全局推理(自动选择最佳 AWS 区域)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "使用自定义 VPC 端点",
 			"useCustomVpcEndpoint": "使用自定义 VPC 端点",
 			"vpcEndpointUrlPlaceholder": "输入 VPC 端点 URL(可选)",
 			"vpcEndpointUrlPlaceholder": "输入 VPC 端点 URL(可选)",

+ 1 - 0
webview-ui/src/i18n/locales/zh-TW/settings.json

@@ -344,6 +344,7 @@
 		"awsSessionToken": "AWS 工作階段權杖",
 		"awsSessionToken": "AWS 工作階段權杖",
 		"awsRegion": "AWS 區域",
 		"awsRegion": "AWS 區域",
 		"awsCrossRegion": "使用跨區域推論",
 		"awsCrossRegion": "使用跨區域推論",
+		"awsGlobalInference": "使用全域推論 (自動選取最佳 AWS 區域)",
 		"awsBedrockVpc": {
 		"awsBedrockVpc": {
 			"useCustomVpcEndpoint": "使用自訂 VPC 端點",
 			"useCustomVpcEndpoint": "使用自訂 VPC 端點",
 			"vpcEndpointUrlPlaceholder": "輸入 VPC 端點 URL(選填)",
 			"vpcEndpointUrlPlaceholder": "輸入 VPC 端點 URL(選填)",