UNPKG

firebase-tools

Version:
73 lines (72 loc) 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.callCloudAICompanion = exports.cloudAICompationClient = void 0; const apiv2_1 = require("../apiv2"); const api_1 = require("../api"); const CLOUD_AI_COMPANION_VERSION = "v1"; const CLIENT_CONTEXT_NAME_IDENTIFIER = "firebase_vscode"; const FIREBASE_CHAT_REQUEST_CONTEXT_TYPE_NAME = "type.googleapis.com/google.cloud.cloudaicompanion.v1main.FirebaseChatRequestContext"; const FDC_SCHEMA_EXPERIENCE_CONTEXT = "/appeco/firebase/fdc-schema-generator"; const FDC_OPERATION_EXPERIENCE_CONTEXT = "/appeco/firebase/fdc-query-generator"; const USER_AUTHOR = "USER"; function cloudAICompationClient() { return new apiv2_1.Client({ urlPrefix: (0, api_1.cloudAiCompanionOrigin)(), apiVersion: CLOUD_AI_COMPANION_VERSION, auth: true, }); } exports.cloudAICompationClient = cloudAICompationClient; async function callCloudAICompanion(client, vscodeRequest, type) { const request = buildRequest(vscodeRequest, type); const { projectId } = getServiceParts(vscodeRequest.servicePath); const instance = toChatResourceName(projectId); try { const res = await client.post(`${instance}:completeTask`, request); return res.body; } catch (error) { return { output: { messages: [] }, error: error }; } } exports.callCloudAICompanion = callCloudAICompanion; function buildRequest({ servicePath, naturalLanguageQuery, chatHistory }, type) { const { serviceId } = getServiceParts(servicePath); const input = { messages: [ ...chatHistory, { author: USER_AUTHOR, content: naturalLanguageQuery, }, ], }; const clientContext = { name: CLIENT_CONTEXT_NAME_IDENTIFIER, additionalContext: { "@type": FIREBASE_CHAT_REQUEST_CONTEXT_TYPE_NAME, fdcInfo: { serviceId, fdcServiceName: servicePath, requiresQuery: true, }, }, }; return { input, clientContext, experienceContext: { experience: type === "schema" ? FDC_SCHEMA_EXPERIENCE_CONTEXT : FDC_OPERATION_EXPERIENCE_CONTEXT, }, }; } function toChatResourceName(projectId) { return `projects/${projectId}/locations/global/instances/default`; } function getServiceParts(name) { const match = name.match(/projects\/([^/]*)\/locations\/([^/]*)\/services\/([^/]*)/); if (!match) { throw new Error(`Invalid service name: ${name}`); } return { projectId: match[1], locationId: match[2], serviceId: match[3] }; }