본문으로 건너뛰기

Google Vertex AI

Gemini Developer API에는 리전 엔드포인트가 없습니다. EU 데이터 레지던시, CMEK 또는 VPC-SC가 필요하면 Vertex AI에서 Gemini를 실행해야 합니다.

@tanstack/ai-vertex가 그 방법을 제공합니다. 기존 Gemini 어댑터를 Vertex 인증과 함께 구성합니다. 요청 매핑, 도구, 스트리밍은 동일하게 유지됩니다.

Vertex의 Claude는 다른 패키지입니다. Anthropic Vertex를 참조하세요.

설치​

npm install @tanstack/ai-vertex

기본 사용법​

import { chat } from "@tanstack/ai";
import { vertexText } from "@tanstack/ai-vertex";

const stream = chat({
adapter: vertexText("gemini-3.7-flash", {
project: "my-project",
location: "europe-west1",
}),
messages: [{ role: "user", content: "Hello!" }],
});

모든 팩토리에서 하나의 인증 객체를 재사용합니다.

import { vertexImage, vertexText } from "@tanstack/ai-vertex";

const auth = {
project: "my-project",
location: "europe-west1",
};

const text = vertexText("gemini-3.7-flash", auth);
const image = vertexImage("gemini-3.1-flash-image", auth);

인증​

Vertex 팩토리는 @google/genai가 허용하는 모든 인증 옵션을 허용합니다. GEMINI_API_KEY 또는 GOOGLE_API_KEY는 읽지 않습니다. 이러한 키는 Vertex가 아니라 AI Studio용입니다.

애플리케이션 기본 자격 증명​

일반적인 Google Cloud 경로입니다. gcloud auth application-default login으로 로그인하거나 GOOGLE_APPLICATION_CREDENTIALS를 서비스 계정 JSON 파일로 설정합니다.

팩토리에서 project와 location을 전달하거나 다음과 같이 설정합니다.

GOOGLE_CLOUD_PROJECT=my-project
GOOGLE_CLOUD_LOCATION=europe-west1

GOOGLE_VERTEX_PROJECT와 GOOGLE_VERTEX_LOCATION도 허용됩니다.

import { vertexText } from "@tanstack/ai-vertex";

const adapter = vertexText("gemini-3.7-flash", {
project: "my-project",
location: "europe-west1",
});

서비스 계정 필드​

import { vertexText } from "@tanstack/ai-vertex";

const adapter = vertexText("gemini-3.7-flash", {
project: "my-project",
location: "europe-west1",
googleAuthOptions: {
credentials: {
client_email: "sa@my-project.iam.gserviceaccount.com",
private_key: "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
},
},
});

Express API 키​

Vertex Express 모드는 API 키를 사용하며 project나 location이 필요하지 않습니다.

import { vertexText } from "@tanstack/ai-vertex";

const adapter = vertexText("gemini-3.7-flash", {
apiKey: "vertex-express-key",
});

또는 GOOGLE_VERTEX_API_KEY를 설정합니다.

예제: 서버와 클라이언트​

Vertex 자격 증명은 서버에 보관합니다. 브라우저는 라우트와만 통신합니다.

서버:

import { chat, toServerSentEventsResponse } from "@tanstack/ai";
import { vertexText } from "@tanstack/ai-vertex";

export async function POST(request: Request) {
const { messages } = await request.json();

const stream = chat({
adapter: vertexText("gemini-3.7-flash", {
project: "my-project",
location: "europe-west1",
}),
messages,
});

return toServerSentEventsResponse(stream);
}

클라이언트:

import { useChat, fetchServerSentEvents } from "@tanstack/ai-react";

export function Chat() {
const { messages, sendMessage } = useChat({
connection: fetchServerSentEvents("/api/chat"),
});

return (
<form
onSubmit={(event) => {
event.preventDefault();
const form = event.currentTarget;
const input = new FormData(form).get("text");
if (typeof input === "string" && input.trim()) {
sendMessage(input);
form.reset();
}
}}
>
{messages.map((message) => (
<div key={message.id}>
{message.role}:{" "}
{message.parts
.filter((part) => part.type === "text")
.map((part) => part.content)
.join("")}
</div>
))}
<input name="text" />
<button type="submit">Send</button>
</form>
);
}

useChat은 이것이 Vertex인지 알지 못합니다. 서버의 SSE 스트림만 소비합니다.

기타 Gemini 활동​

모든 팩토리는 동일한 인증 객체를 사용합니다.

import {
vertexAudio,
vertexEmbedding,
vertexImage,
vertexSpeech,
vertexSummarize,
vertexText,
vertexVideo,
} from "@tanstack/ai-vertex";

const auth = { project: "my-project", location: "europe-west1" };

vertexText("gemini-3.7-flash", auth);
vertexSummarize("gemini-3.7-flash", auth);
vertexImage("gemini-3.1-flash-image", auth);
vertexEmbedding("gemini-embedding-001", auth);
vertexSpeech("gemini-3.1-flash-tts-preview", auth);
vertexAudio("lyria-3-pro-preview", auth);
vertexVideo("veo-3.1-generate-preview", auth);

모델 ID와 provider 옵션은 @tanstack/ai-gemini와 동일합니다. Vertex 전용 이미지 옵션(예: 9:21)은 이 릴리스에서 활성화되지 않습니다.

환경 변수​

변수용도
GOOGLE_CLOUD_PROJECTGCP 프로젝트 ID
GOOGLE_VERTEX_PROJECT프로젝트 ID의 별칭
GOOGLE_CLOUD_LOCATION리전(예: europe-west1)
GOOGLE_VERTEX_LOCATION리전의 별칭
GOOGLE_VERTEX_API_KEYVertex Express API 키
GOOGLE_APPLICATION_CREDENTIALS서비스 계정 JSON 파일 경로

API 레퍼런스​

vertexText(model, config?)​

Vertex에서 Gemini 채팅 어댑터를 생성합니다.

vertexSummarize(model, config?)​

Vertex에서 Gemini 요약 어댑터를 생성합니다.

vertexImage(model, config?)​

Vertex에서 Gemini 이미지 어댑터를 생성합니다.

vertexEmbedding(model, config?)​

Vertex에서 Gemini 임베딩 어댑터를 생성합니다.

vertexSpeech(model, config?)​

Vertex에서 Gemini 텍스트 음성 변환 어댑터를 생성합니다. 실험적 기능입니다.

vertexAudio(model, config?)​

Vertex에서 Gemini Lyria 오디오 어댑터를 생성합니다. 실험적 기능입니다.

vertexVideo(model, config?)​

Vertex에서 Gemini 동영상 어댑터를 생성합니다. 실험적 기능입니다. config.allowUrlFetch는 Gemini 동영상 어댑터와 동일한 옵트인 설정입니다.

config는 project, location, apiKey, googleAuthOptions, httpOptions 및 기타 @google/genai 클라이언트 필드를 허용합니다. 팩토리는 항상 vertexai: true를 설정합니다.

Vertex의 Claude​

@tanstack/ai-anthropic/vertex에서 anthropicVertexText를 사용합니다.

Vertex의 Grok​

@tanstack/ai-grok/vertex에서 grokVertexText를 사용합니다. Vertex Grok은 OpenAI 호환 Responses 엔드포인트를 사용합니다. 요약에는 같은 진입점의 grokVertexSummarize를 사용합니다. 팩토리는 Vertex 카탈로그의 Grok 채팅 모델(grok-4.3, grok-4.20-reasoning, grok-4.20-non-reasoning, grok-4.1-fast-reasoning, grok-4.1-fast-non-reasoning)만 허용합니다.

Vertex의 Mistral​

@tanstack/ai-mistral/vertex에서 mistralVertexText를 사용합니다. Vertex Mistral은 publisher rawPredict 경로를 사용합니다. 리전 전용이며(us-central1 또는 europe-west4), 팩토리는 Vertex 카탈로그의 Mistral 채팅 모델(mistral-medium-3, mistral-small-2503, codestral-2)만 허용합니다.