UNPKG

firebase-functions

Version:
198 lines (196 loc) 6.67 kB
const require_logger_index = require('../../../logger/index.js'); const require_runtime_manifest = require('../../../runtime/manifest.js'); const require_common_onInit = require('../../../common/onInit.js'); const require_common_providers_https = require('../../../common/providers/https.js'); const require_v2_trace = require('../../trace.js'); const require_v2_options = require('../../options.js'); require('../https.js'); const require_v2_providers_ai_types_vertex_v1beta1_index = require('./types/vertex/v1beta1/index.js'); const require_v2_providers_ai_types_gemini_v1beta_index = require('./types/gemini/v1beta/index.js'); //#region src/v2/providers/ai/index.ts const rpcCodeMap = { ok: 0, cancelled: 1, unknown: 2, "invalid-argument": 3, "deadline-exceeded": 4, "not-found": 5, "already-exists": 6, "permission-denied": 7, unauthenticated: 16, "resource-exhausted": 8, "failed-precondition": 9, aborted: 10, "out-of-range": 11, unimplemented: 12, internal: 13, unavailable: 14, "data-loss": 15 }; const beforeGenerateEventType = "google.firebase.ailogic.v1.beforeGenerate"; const afterGenerateEventType = "google.firebase.ailogic.v1.afterGenerate"; const geminiV1Beta = "google.ai.generativelanguage.v1beta"; const vertexV1Beta1 = "google.cloud.aiplatform.v1beta1"; function beforeGenerateContent(optsOrCb, cb) { let opts; let handler; if (arguments.length === 1) { opts = {}; handler = optsOrCb; } else { opts = optsOrCb; handler = cb; } let func = async (req, res) => { try { let event = req.body; if (Buffer.isBuffer(event)) { try { event = JSON.parse(event.toString("utf-8")); } catch (e) { require_logger_index.error("Invalid JSON body (Buffer):", e); throw new require_common_providers_https.HttpsError("invalid-argument", "Invalid JSON body", e); } } else if (typeof event === "string") { try { event = JSON.parse(event); } catch (e) { require_logger_index.error("Invalid JSON body (String):", e); throw new require_common_providers_https.HttpsError("invalid-argument", "Invalid JSON body", e); } } const parsedEvent = event; const result = await handler(parsedEvent); const responseBody = result || {}; if (typeof responseBody === "object") { const api = parsedEvent.data?.api; if (api === geminiV1Beta) { responseBody["@type"] = require_v2_providers_ai_types_gemini_v1beta_index.requestTypeName; } else if (api === vertexV1Beta1) { responseBody["@type"] = require_v2_providers_ai_types_vertex_v1beta1_index.requestTypeName; } } res.status(200).send(responseBody); } catch (err) { require_logger_index.error("Unhandled error:", err); if (err instanceof require_common_providers_https.HttpsError) { res.status(500).send({ code: rpcCodeMap[err.code] || 13, message: err.message }); } else { res.status(500).send({ code: 13, message: "Internal error." }); } } }; func.run = handler; func = require_v2_trace.wrapTraceContext(require_common_onInit.withInit(func)); const baseOpts = require_v2_options.optionsToEndpoint(require_v2_options.getGlobalOptions()); const specificOpts = require_v2_options.optionsToEndpoint(opts); func.__endpoint = { ...require_runtime_manifest.initV2Endpoint(require_v2_options.getGlobalOptions(), opts), platform: "gcfv2", ...baseOpts, ...specificOpts, labels: { ...baseOpts?.labels, ...specificOpts?.labels }, blockingTrigger: { eventType: beforeGenerateEventType, options: { regionalWebhook: opts.regionalWebhook } } }; return func; } function afterGenerateContent(optsOrCb, cb) { let opts; let handler; if (arguments.length === 1) { opts = {}; handler = optsOrCb; } else { opts = optsOrCb; handler = cb; } let func = async (req, res) => { try { let event = req.body; if (Buffer.isBuffer(event)) { try { event = JSON.parse(event.toString("utf-8")); } catch (e) { require_logger_index.error("Invalid JSON body (Buffer):", e); throw new require_common_providers_https.HttpsError("invalid-argument", "Invalid JSON body", e); } } else if (typeof event === "string") { try { event = JSON.parse(event); } catch (e) { require_logger_index.error("Invalid JSON body (String):", e); throw new require_common_providers_https.HttpsError("invalid-argument", "Invalid JSON body", e); } } const parsedEvent = event; const result = await handler(parsedEvent); const responseBody = result || {}; if (typeof responseBody === "object") { const api = parsedEvent.data?.api; if (api === geminiV1Beta) { responseBody["@type"] = require_v2_providers_ai_types_gemini_v1beta_index.responseTypeName; } else if (api === vertexV1Beta1) { responseBody["@type"] = require_v2_providers_ai_types_vertex_v1beta1_index.responseTypeName; } } res.status(200).send(responseBody); } catch (err) { require_logger_index.error("Unhandled error:", err); if (err instanceof require_common_providers_https.HttpsError) { res.status(500).send({ code: rpcCodeMap[err.code] || 13, message: err.message }); } else { res.status(500).send({ code: 13, message: "Internal error." }); } } }; func.run = handler; func = require_v2_trace.wrapTraceContext(require_common_onInit.withInit(func)); const baseOpts = require_v2_options.optionsToEndpoint(require_v2_options.getGlobalOptions()); const specificOpts = require_v2_options.optionsToEndpoint(opts); func.__endpoint = { ...require_runtime_manifest.initV2Endpoint(require_v2_options.getGlobalOptions(), opts), platform: "gcfv2", ...baseOpts, ...specificOpts, labels: { ...baseOpts?.labels, ...specificOpts?.labels }, blockingTrigger: { eventType: afterGenerateEventType, options: { regionalWebhook: opts.regionalWebhook } } }; return func; } //#endregion exports.GeminiV1BetaGenerateContentRequest = GeminiV1BetaGenerateContentRequest; exports.GeminiV1BetaGenerateContentResponse = GeminiV1BetaGenerateContentResponse; exports.HttpsError = require_common_providers_https.HttpsError; exports.VertexV1Beta1GenerateContentRequest = VertexV1Beta1GenerateContentRequest; exports.VertexV1Beta1GenerateContentResponse = VertexV1Beta1GenerateContentResponse; exports.afterGenerateContent = afterGenerateContent; exports.afterGenerateEventType = afterGenerateEventType; exports.beforeGenerateContent = beforeGenerateContent; exports.beforeGenerateEventType = beforeGenerateEventType; exports.geminiV1Beta = geminiV1Beta; exports.rpcCodeMap = rpcCodeMap; exports.vertexV1Beta1 = vertexV1Beta1;