diff options
Diffstat (limited to 'packages/core/src')
| -rw-r--r-- | packages/core/src/code_assist/codeAssist.ts | 4 | ||||
| -rw-r--r-- | packages/core/src/code_assist/converter.test.ts | 62 | ||||
| -rw-r--r-- | packages/core/src/code_assist/converter.ts | 32 | ||||
| -rw-r--r-- | packages/core/src/code_assist/server.ts (renamed from packages/core/src/code_assist/ccpaServer.ts) | 29 | ||||
| -rw-r--r-- | packages/core/src/code_assist/setup.ts | 10 | ||||
| -rw-r--r-- | packages/core/src/code_assist/types.ts | 4 |
6 files changed, 78 insertions, 63 deletions
diff --git a/packages/core/src/code_assist/codeAssist.ts b/packages/core/src/code_assist/codeAssist.ts index 6467b416..5922cb41 100644 --- a/packages/core/src/code_assist/codeAssist.ts +++ b/packages/core/src/code_assist/codeAssist.ts @@ -7,7 +7,7 @@ import { ContentGenerator } from '../core/contentGenerator.js'; import { getOauthClient } from './oauth2.js'; import { setupUser } from './setup.js'; -import { CcpaServer } from './ccpaServer.js'; +import { CodeAssistServer } from './server.js'; export async function createCodeAssistContentGenerator(): Promise<ContentGenerator> { const oauth2Client = await getOauthClient(); @@ -15,5 +15,5 @@ export async function createCodeAssistContentGenerator(): Promise<ContentGenerat oauth2Client, process.env.GOOGLE_CLOUD_PROJECT, ); - return new CcpaServer(oauth2Client, projectId); + return new CodeAssistServer(oauth2Client, projectId); } diff --git a/packages/core/src/code_assist/converter.test.ts b/packages/core/src/code_assist/converter.test.ts index 4536d65f..d0c05015 100644 --- a/packages/core/src/code_assist/converter.test.ts +++ b/packages/core/src/code_assist/converter.test.ts @@ -5,7 +5,11 @@ */ import { describe, it, expect } from 'vitest'; -import { toCcpaRequest, fromCcpaResponse, CcpaResponse } from './converter.js'; +import { + toCodeAssistRequest, + fromCodeAsistResponse, + CodeAssistResponse, +} from './converter.js'; import { GenerateContentParameters, GenerateContentResponse, @@ -14,14 +18,14 @@ import { } from '@google/genai'; describe('converter', () => { - describe('toCcpaRequest', () => { + describe('toCodeAssistRequest', () => { it('should convert a simple request with project', () => { const genaiReq: GenerateContentParameters = { model: 'gemini-pro', contents: [{ role: 'user', parts: [{ text: 'Hello' }] }], }; - const ccpaReq = toCcpaRequest(genaiReq, 'my-project'); - expect(ccpaReq).toEqual({ + const codeAssistReq = toCodeAssistRequest(genaiReq, 'my-project'); + expect(codeAssistReq).toEqual({ model: 'gemini-pro', project: 'my-project', request: { @@ -42,8 +46,8 @@ describe('converter', () => { model: 'gemini-pro', contents: [{ role: 'user', parts: [{ text: 'Hello' }] }], }; - const ccpaReq = toCcpaRequest(genaiReq); - expect(ccpaReq).toEqual({ + const codeAssistReq = toCodeAssistRequest(genaiReq); + expect(codeAssistReq).toEqual({ model: 'gemini-pro', project: undefined, request: { @@ -64,8 +68,8 @@ describe('converter', () => { model: 'gemini-pro', contents: 'Hello', }; - const ccpaReq = toCcpaRequest(genaiReq); - expect(ccpaReq.request.contents).toEqual([ + const codeAssistReq = toCodeAssistRequest(genaiReq); + expect(codeAssistReq.request.contents).toEqual([ { role: 'user', parts: [{ text: 'Hello' }] }, ]); }); @@ -75,8 +79,8 @@ describe('converter', () => { model: 'gemini-pro', contents: [{ text: 'Hello' }, { text: 'World' }], }; - const ccpaReq = toCcpaRequest(genaiReq); - expect(ccpaReq.request.contents).toEqual([ + const codeAssistReq = toCodeAssistRequest(genaiReq); + expect(codeAssistReq.request.contents).toEqual([ { role: 'user', parts: [{ text: 'Hello' }] }, { role: 'user', parts: [{ text: 'World' }] }, ]); @@ -90,8 +94,8 @@ describe('converter', () => { systemInstruction: 'You are a helpful assistant.', }, }; - const ccpaReq = toCcpaRequest(genaiReq); - expect(ccpaReq.request.systemInstruction).toEqual({ + const codeAssistReq = toCodeAssistRequest(genaiReq); + expect(codeAssistReq.request.systemInstruction).toEqual({ role: 'user', parts: [{ text: 'You are a helpful assistant.' }], }); @@ -106,8 +110,8 @@ describe('converter', () => { topK: 40, }, }; - const ccpaReq = toCcpaRequest(genaiReq); - expect(ccpaReq.request.generationConfig).toEqual({ + const codeAssistReq = toCodeAssistRequest(genaiReq); + expect(codeAssistReq.request.generationConfig).toEqual({ temperature: 0.8, topK: 40, }); @@ -132,8 +136,8 @@ describe('converter', () => { responseMimeType: 'application/json', }, }; - const ccpaReq = toCcpaRequest(genaiReq); - expect(ccpaReq.request.generationConfig).toEqual({ + const codeAssistReq = toCodeAssistRequest(genaiReq); + expect(codeAssistReq.request.generationConfig).toEqual({ temperature: 0.1, topP: 0.2, topK: 3, @@ -150,9 +154,9 @@ describe('converter', () => { }); }); - describe('fromCcpaResponse', () => { + describe('fromCodeAssistResponse', () => { it('should convert a simple response', () => { - const ccpaRes: CcpaResponse = { + const codeAssistRes: CodeAssistResponse = { response: { candidates: [ { @@ -167,13 +171,13 @@ describe('converter', () => { ], }, }; - const genaiRes = fromCcpaResponse(ccpaRes); + const genaiRes = fromCodeAsistResponse(codeAssistRes); expect(genaiRes).toBeInstanceOf(GenerateContentResponse); - expect(genaiRes.candidates).toEqual(ccpaRes.response.candidates); + expect(genaiRes.candidates).toEqual(codeAssistRes.response.candidates); }); it('should handle prompt feedback and usage metadata', () => { - const ccpaRes: CcpaResponse = { + const codeAssistRes: CodeAssistResponse = { response: { candidates: [], promptFeedback: { @@ -187,13 +191,17 @@ describe('converter', () => { }, }, }; - const genaiRes = fromCcpaResponse(ccpaRes); - expect(genaiRes.promptFeedback).toEqual(ccpaRes.response.promptFeedback); - expect(genaiRes.usageMetadata).toEqual(ccpaRes.response.usageMetadata); + const genaiRes = fromCodeAsistResponse(codeAssistRes); + expect(genaiRes.promptFeedback).toEqual( + codeAssistRes.response.promptFeedback, + ); + expect(genaiRes.usageMetadata).toEqual( + codeAssistRes.response.usageMetadata, + ); }); it('should handle automatic function calling history', () => { - const ccpaRes: CcpaResponse = { + const codeAssistRes: CodeAssistResponse = { response: { candidates: [], automaticFunctionCallingHistory: [ @@ -213,9 +221,9 @@ describe('converter', () => { ], }, }; - const genaiRes = fromCcpaResponse(ccpaRes); + const genaiRes = fromCodeAsistResponse(codeAssistRes); expect(genaiRes.automaticFunctionCallingHistory).toEqual( - ccpaRes.response.automaticFunctionCallingHistory, + codeAssistRes.response.automaticFunctionCallingHistory, ); }); }); diff --git a/packages/core/src/code_assist/converter.ts b/packages/core/src/code_assist/converter.ts index c7b0e7c7..495cbfae 100644 --- a/packages/core/src/code_assist/converter.ts +++ b/packages/core/src/code_assist/converter.ts @@ -27,13 +27,13 @@ import { ToolConfig, } from '@google/genai'; -export interface CcpaRequest { +export interface CodeAssistRequest { model: string; project?: string; - request: CcpaGenerateContentRequest; + request: CodeAssistGenerateContentRequest; } -interface CcpaGenerateContentRequest { +interface CodeAssistGenerateContentRequest { contents: Content[]; systemInstruction?: Content; cachedContent?: string; @@ -41,10 +41,10 @@ interface CcpaGenerateContentRequest { toolConfig?: ToolConfig; labels?: Record<string, string>; safetySettings?: SafetySetting[]; - generationConfig?: CcpaGenerationConfig; + generationConfig?: CodeAssistGenerationConfig; } -interface CcpaGenerationConfig { +interface CodeAssistGenerationConfig { temperature?: number; topP?: number; topK?: number; @@ -67,7 +67,7 @@ interface CcpaGenerationConfig { thinkingConfig?: ThinkingConfig; } -export interface CcpaResponse { +export interface CodeAssistResponse { response: VertexResponse; } @@ -78,18 +78,20 @@ interface VertexResponse { usageMetadata?: GenerateContentResponseUsageMetadata; } -export function toCcpaRequest( +export function toCodeAssistRequest( req: GenerateContentParameters, project?: string, -): CcpaRequest { +): CodeAssistRequest { return { model: req.model, project, - request: toCcpaGenerateContentRequest(req), + request: toCodeAssistGenerateContentRequest(req), }; } -export function fromCcpaResponse(res: CcpaResponse): GenerateContentResponse { +export function fromCodeAsistResponse( + res: CodeAssistResponse, +): GenerateContentResponse { const inres = res.response; const out = new GenerateContentResponse(); out.candidates = inres.candidates; @@ -99,9 +101,9 @@ export function fromCcpaResponse(res: CcpaResponse): GenerateContentResponse { return out; } -function toCcpaGenerateContentRequest( +function toCodeAssistGenerateContentRequest( req: GenerateContentParameters, -): CcpaGenerateContentRequest { +): CodeAssistGenerateContentRequest { return { contents: toContents(req.contents), systemInstruction: maybeToContent(req.config?.systemInstruction), @@ -110,7 +112,7 @@ function toCcpaGenerateContentRequest( toolConfig: req.config?.toolConfig, labels: req.config?.labels, safetySettings: req.config?.safetySettings, - generationConfig: toCcpaGenerationConfig(req.config), + generationConfig: toCodeAssistGenerationConfig(req.config), }; } @@ -168,9 +170,9 @@ function toPart(part: PartUnion): Part { return part; } -function toCcpaGenerationConfig( +function toCodeAssistGenerationConfig( config?: GenerateContentConfig, -): CcpaGenerationConfig | undefined { +): CodeAssistGenerationConfig | undefined { if (!config) { return undefined; } diff --git a/packages/core/src/code_assist/ccpaServer.ts b/packages/core/src/code_assist/server.ts index 3ef8b084..680b66ac 100644 --- a/packages/core/src/code_assist/ccpaServer.ts +++ b/packages/core/src/code_assist/server.ts @@ -21,15 +21,20 @@ import { } from '@google/genai'; import * as readline from 'readline'; import { ContentGenerator } from '../core/contentGenerator.js'; -import { CcpaResponse, toCcpaRequest, fromCcpaResponse } from './converter.js'; +import { + CodeAssistResponse, + toCodeAssistRequest, + fromCodeAsistResponse, +} from './converter.js'; import { PassThrough } from 'node:stream'; // TODO: Use production endpoint once it supports our methods. -export const CCPA_ENDPOINT = +export const CODE_ASSIST_ENDPOINT = + process.env.CODE_ASSIST_ENDPOINT ?? 'https://staging-cloudcode-pa.sandbox.googleapis.com'; -export const CCPA_API_VERSION = 'v1internal'; +export const CODE_ASSIST_API_VERSION = 'v1internal'; -export class CcpaServer implements ContentGenerator { +export class CodeAssistServer implements ContentGenerator { constructor( readonly auth: OAuth2Client, readonly projectId?: string, @@ -38,13 +43,13 @@ export class CcpaServer implements ContentGenerator { async generateContentStream( req: GenerateContentParameters, ): Promise<AsyncGenerator<GenerateContentResponse>> { - const resps = await this.streamEndpoint<CcpaResponse>( + const resps = await this.streamEndpoint<CodeAssistResponse>( 'streamGenerateContent', - toCcpaRequest(req, this.projectId), + toCodeAssistRequest(req, this.projectId), ); return (async function* (): AsyncGenerator<GenerateContentResponse> { for await (const resp of resps) { - yield fromCcpaResponse(resp); + yield fromCodeAsistResponse(resp); } })(); } @@ -52,11 +57,11 @@ export class CcpaServer implements ContentGenerator { async generateContent( req: GenerateContentParameters, ): Promise<GenerateContentResponse> { - const resp = await this.callEndpoint<CcpaResponse>( + const resp = await this.callEndpoint<CodeAssistResponse>( 'generateContent', - toCcpaRequest(req, this.projectId), + toCodeAssistRequest(req, this.projectId), ); - return fromCcpaResponse(resp); + return fromCodeAsistResponse(resp); } async onboardUser( @@ -89,7 +94,7 @@ export class CcpaServer implements ContentGenerator { async callEndpoint<T>(method: string, req: object): Promise<T> { const res = await this.auth.request({ - url: `${CCPA_ENDPOINT}/${CCPA_API_VERSION}:${method}`, + url: `${CODE_ASSIST_ENDPOINT}/${CODE_ASSIST_API_VERSION}:${method}`, method: 'POST', headers: { 'Content-Type': 'application/json', @@ -106,7 +111,7 @@ export class CcpaServer implements ContentGenerator { req: object, ): Promise<AsyncGenerator<T>> { const res = await this.auth.request({ - url: `${CCPA_ENDPOINT}/${CCPA_API_VERSION}:${method}`, + url: `${CODE_ASSIST_ENDPOINT}/${CODE_ASSIST_API_VERSION}:${method}`, method: 'POST', params: { alt: 'sse', diff --git a/packages/core/src/code_assist/setup.ts b/packages/core/src/code_assist/setup.ts index 0efe5f0c..6ff61523 100644 --- a/packages/core/src/code_assist/setup.ts +++ b/packages/core/src/code_assist/setup.ts @@ -5,7 +5,7 @@ */ import { ClientMetadata, OnboardUserRequest } from './types.js'; -import { CcpaServer } from './ccpaServer.js'; +import { CodeAssistServer } from './server.js'; import { OAuth2Client } from 'google-auth-library'; import { GaxiosError } from 'gaxios'; import { clearCachedCredentials } from './oauth2.js'; @@ -19,7 +19,7 @@ export async function setupUser( oAuth2Client: OAuth2Client, projectId?: string, ): Promise<string> { - const ccpaServer: CcpaServer = new CcpaServer(oAuth2Client, projectId); + const caServer = new CodeAssistServer(oAuth2Client, projectId); const clientMetadata: ClientMetadata = { ideType: 'IDE_UNSPECIFIED', platform: 'PLATFORM_UNSPECIFIED', @@ -30,7 +30,7 @@ export async function setupUser( } // TODO: Support Free Tier user without projectId. - const loadRes = await ccpaServer.loadCodeAssist({ + const loadRes = await caServer.loadCodeAssist({ cloudaicompanionProject: process.env.GOOGLE_CLOUD_PROJECT, metadata: clientMetadata, }); @@ -42,10 +42,10 @@ export async function setupUser( }; try { // Poll onboardUser until long running operation is complete. - let lroRes = await ccpaServer.onboardUser(onboardReq); + let lroRes = await caServer.onboardUser(onboardReq); while (!lroRes.done) { await new Promise((f) => setTimeout(f, 5000)); - lroRes = await ccpaServer.onboardUser(onboardReq); + lroRes = await caServer.onboardUser(onboardReq); } return lroRes.response?.cloudaicompanionProject?.id || ''; diff --git a/packages/core/src/code_assist/types.ts b/packages/core/src/code_assist/types.ts index 733780e9..0bcc2b79 100644 --- a/packages/core/src/code_assist/types.ts +++ b/packages/core/src/code_assist/types.ts @@ -53,7 +53,7 @@ export interface LoadCodeAssistResponse { } /** - * GeminiUserTier reflects the structure received from the CCPA when calling LoadCodeAssist. + * GeminiUserTier reflects the structure received from the CodeAssist when calling LoadCodeAssist. */ export interface GeminiUserTier { id: UserTierId; @@ -109,7 +109,7 @@ export enum UserTierId { } /** - * PrivacyNotice reflects the structure received from the CCPA in regards to a tier + * PrivacyNotice reflects the structure received from the CodeAssist in regards to a tier * privacy notice. */ export interface PrivacyNotice { |
