Merge pull request #1392 from eonghk/feature/vertex-credentials-auth

Add credentials auth for Google vertex
This commit is contained in:
Matt Rubens 2025-03-06 16:45:45 -05:00 committed by GitHub
commit 70a88aee4d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 82 additions and 9 deletions

View file

@ -0,0 +1,5 @@
---
"roo-cline": patch
---
Add credentials auth for Google vertex

View file

@ -11,6 +11,7 @@ import { BaseProvider } from "./base-provider"
import { ANTHROPIC_DEFAULT_MAX_TOKENS } from "./constants"
import { getModelParams, SingleCompletionHandler } from "../"
import { GoogleAuth } from "google-auth-library"
// Types for Vertex SDK
@ -120,16 +121,56 @@ export class VertexHandler extends BaseProvider implements SingleCompletionHandl
throw new Error(`Unknown model ID: ${this.options.apiModelId}`)
}
this.anthropicClient = new AnthropicVertex({
projectId: this.options.vertexProjectId ?? "not-provided",
// https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-claude#regions
region: this.options.vertexRegion ?? "us-east5",
})
if (this.options.vertexJsonCredentials) {
this.anthropicClient = new AnthropicVertex({
projectId: this.options.vertexProjectId ?? "not-provided",
// https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-claude#regions
region: this.options.vertexRegion ?? "us-east5",
googleAuth: new GoogleAuth({
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
credentials: JSON.parse(this.options.vertexJsonCredentials),
}),
})
} else if (this.options.vertexKeyFile) {
this.anthropicClient = new AnthropicVertex({
projectId: this.options.vertexProjectId ?? "not-provided",
// https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-claude#regions
region: this.options.vertexRegion ?? "us-east5",
googleAuth: new GoogleAuth({
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
keyFile: this.options.vertexKeyFile,
}),
})
} else {
this.anthropicClient = new AnthropicVertex({
projectId: this.options.vertexProjectId ?? "not-provided",
// https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-claude#regions
region: this.options.vertexRegion ?? "us-east5",
})
}
this.geminiClient = new VertexAI({
project: this.options.vertexProjectId ?? "not-provided",
location: this.options.vertexRegion ?? "us-east5",
})
if (this.options.vertexJsonCredentials) {
this.geminiClient = new VertexAI({
project: this.options.vertexProjectId ?? "not-provided",
location: this.options.vertexRegion ?? "us-east5",
googleAuthOptions: {
credentials: JSON.parse(this.options.vertexJsonCredentials),
},
})
} else if (this.options.vertexKeyFile) {
this.geminiClient = new VertexAI({
project: this.options.vertexProjectId ?? "not-provided",
location: this.options.vertexRegion ?? "us-east5",
googleAuthOptions: {
keyFile: this.options.vertexKeyFile,
},
})
} else {
this.geminiClient = new VertexAI({
project: this.options.vertexProjectId ?? "not-provided",
location: this.options.vertexRegion ?? "us-east5",
})
}
}
private formatMessageForCache(message: Anthropic.Messages.MessageParam, shouldCache: boolean): VertexMessage {

View file

@ -39,6 +39,8 @@ export interface ApiHandlerOptions {
awspromptCacheId?: string
awsProfile?: string
awsUseProfile?: boolean
vertexKeyFile?: string
vertexJsonCredentials?: string
vertexProjectId?: string
vertexRegion?: string
openAiBaseUrl?: string
@ -97,6 +99,8 @@ export const API_CONFIG_KEYS: GlobalStateKey[] = [
// "awspromptCacheId", // NOT exist on GlobalStateKey
"awsProfile",
"awsUseProfile",
"vertexKeyFile",
"vertexJsonCredentials",
"vertexProjectId",
"vertexRegion",
"openAiBaseUrl",

View file

@ -28,6 +28,8 @@ export const GLOBAL_STATE_KEYS = [
"awsUseCrossRegionInference",
"awsProfile",
"awsUseProfile",
"vertexKeyFile",
"vertexJsonCredentials",
"vertexProjectId",
"vertexRegion",
"lastShownAnnouncementId",

View file

@ -565,7 +565,28 @@ const ApiOptions = ({
2. Install the Google Cloud CLI & configure application default credentials.
</VSCodeLink>
</div>
<div>
<VSCodeLink
href="https://developers.google.com/workspace/guides/create-credentials?hl=en#service-account"
className="text-sm">
3. Or create a service account with credentials.
</VSCodeLink>
</div>
</div>
<VSCodeTextField
value={apiConfiguration?.vertexJsonCredentials || ""}
style={{ width: "100%" }}
onInput={handleInputChange("vertexJsonCredentials")}
placeholder="Enter Credentials JSON...">
<span className="font-medium">Google Cloud Credentials</span>
</VSCodeTextField>
<VSCodeTextField
value={apiConfiguration?.vertexKeyFile || ""}
style={{ width: "100%" }}
onInput={handleInputChange("vertexKeyFile")}
placeholder="Enter Key File Path...">
<span className="font-medium">Google Cloud Key File Path</span>
</VSCodeTextField>
<VSCodeTextField
value={apiConfiguration?.vertexProjectId || ""}
onInput={handleInputChange("vertexProjectId")}