@genkit-ai/google-cloud
Version:
Genkit AI framework plugin for Google Cloud Platform including Firestore trace/state store and deployment helpers for Cloud Functions for Firebase.
1 lines • 7.54 kB
Source Map (JSON)
{"version":3,"sources":["../../src/telemetry/action.ts"],"sourcesContent":["/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ValueType } from '@opentelemetry/api';\nimport { hrTimeDuration, hrTimeToMilliseconds } from '@opentelemetry/core';\nimport { ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { GENKIT_VERSION } from 'genkit';\nimport { logger } from 'genkit/logging';\nimport { PathMetadata, toDisplayPath } from 'genkit/tracing';\nimport {\n MetricCounter,\n MetricHistogram,\n Telemetry,\n internalMetricNamespaceWrap,\n} from '../metrics.js';\nimport {\n createCommonLogAttributes,\n extractErrorName,\n extractOuterFeatureNameFromPath,\n truncate,\n truncatePath,\n} from '../utils.js';\n\nclass ActionTelemetry implements Telemetry {\n /**\n * Wraps the declared metrics in a Genkit-specific, internal namespace.\n */\n private _N = internalMetricNamespaceWrap.bind(null, 'action');\n\n private actionCounter = new MetricCounter(this._N('requests'), {\n description: 'Counts calls to genkit actions.',\n valueType: ValueType.INT,\n });\n\n private actionLatencies = new MetricHistogram(this._N('latency'), {\n description: 'Latencies when calling Genkit actions.',\n valueType: ValueType.DOUBLE,\n unit: 'ms',\n });\n\n tick(\n span: ReadableSpan,\n paths: Set<PathMetadata>,\n logInputAndOutput: boolean,\n projectId?: string\n ): void {\n const attributes = span.attributes;\n\n const actionName = (attributes['genkit:name'] as string) || '<unknown>';\n const subtype = attributes['genkit:metadata:subtype'] as string;\n const path = (attributes['genkit:path'] as string) || '<unknown>';\n let featureName = extractOuterFeatureNameFromPath(path);\n if (!featureName || featureName === '<unknown>') {\n featureName = actionName;\n }\n const state = attributes['genkit:state'] || 'success';\n const latencyMs = hrTimeToMilliseconds(\n hrTimeDuration(span.startTime, span.endTime)\n );\n const errorName = extractErrorName(span.events);\n\n if (state === 'success') {\n this.writeSuccess(actionName, featureName, path, latencyMs);\n } else if (state === 'error') {\n this.writeFailure(actionName, featureName, path, latencyMs, errorName);\n } else {\n logger.warn(`Unknown action state; ${state}`);\n }\n\n if (subtype === 'tool' && logInputAndOutput) {\n const input = truncate(attributes['genkit:input'] as string);\n const output = truncate(attributes['genkit:output'] as string);\n const sessionId = attributes['genkit:sessionId'] as string;\n const threadName = attributes['genkit:threadName'] as string;\n\n if (input) {\n this.writeLog(\n span,\n 'Input',\n featureName,\n path,\n input,\n projectId,\n sessionId,\n threadName\n );\n }\n if (output) {\n this.writeLog(\n span,\n 'Output',\n featureName,\n path,\n output,\n projectId,\n sessionId,\n threadName\n );\n }\n }\n }\n\n private writeSuccess(\n actionName: string,\n featureName: string,\n path: string,\n latencyMs: number\n ) {\n const dimensions = {\n name: actionName,\n featureName,\n path,\n status: 'success',\n source: 'ts',\n sourceVersion: GENKIT_VERSION,\n };\n this.actionCounter.add(1, dimensions);\n this.actionLatencies.record(latencyMs, dimensions);\n }\n\n private writeFailure(\n actionName: string,\n featureName: string,\n path: string,\n latencyMs: number,\n errorName?: string\n ) {\n const dimensions = {\n name: actionName,\n featureName,\n path,\n source: 'ts',\n sourceVersion: GENKIT_VERSION,\n status: 'failure',\n error: errorName,\n };\n this.actionCounter.add(1, dimensions);\n this.actionLatencies.record(latencyMs, dimensions);\n }\n\n private writeLog(\n span: ReadableSpan,\n tag: string,\n featureName: string,\n qualifiedPath: string,\n content: string,\n projectId?: string,\n sessionId?: string,\n threadName?: string\n ) {\n const path = truncatePath(toDisplayPath(qualifiedPath));\n const sharedMetadata = {\n ...createCommonLogAttributes(span, projectId),\n path,\n qualifiedPath,\n featureName,\n sessionId,\n threadName,\n };\n logger.logStructured(`${tag}[${path}, ${featureName}]`, {\n ...sharedMetadata,\n content,\n });\n }\n}\n\nconst actionTelemetry = new ActionTelemetry();\nexport { actionTelemetry };\n"],"mappings":"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","names":[]}