{"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 type { ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { logger } from 'genkit/logging';\nimport { toDisplayPath } from 'genkit/tracing';\nimport { type Telemetry } from '../metrics.js';\nimport {\n  createCommonLogAttributes,\n  extractOuterFeatureNameFromPath,\n  truncate,\n  truncatePath,\n} from '../utils.js';\n\nclass ActionTelemetry implements Telemetry {\n  tick(\n    span: ReadableSpan,\n    logInputAndOutput: boolean,\n    projectId?: string\n  ): void {\n    if (!logInputAndOutput) {\n      return;\n    }\n    const attributes = span.attributes;\n    const actionName = (attributes['genkit:name'] as string) || '<unknown>';\n    const subtype = attributes['genkit:metadata:subtype'] as string;\n\n    if (subtype === 'tool' || actionName === 'generate') {\n      const path = (attributes['genkit:path'] as string) || '<unknown>';\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      let featureName = extractOuterFeatureNameFromPath(path);\n      if (!featureName || featureName === '<unknown>') {\n        featureName = actionName;\n      }\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 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":"AAiBA,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAE9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,gBAAqC;AAAA,EACzC,KACE,MACA,mBACA,WACM;AACN,QAAI,CAAC,mBAAmB;AACtB;AAAA,IACF;AACA,UAAM,aAAa,KAAK;AACxB,UAAM,aAAc,WAAW,aAAa,KAAgB;AAC5D,UAAM,UAAU,WAAW,yBAAyB;AAEpD,QAAI,YAAY,UAAU,eAAe,YAAY;AACnD,YAAM,OAAQ,WAAW,aAAa,KAAgB;AACtD,YAAM,QAAQ,SAAS,WAAW,cAAc,CAAW;AAC3D,YAAM,SAAS,SAAS,WAAW,eAAe,CAAW;AAC7D,YAAM,YAAY,WAAW,kBAAkB;AAC/C,YAAM,aAAa,WAAW,mBAAmB;AACjD,UAAI,cAAc,gCAAgC,IAAI;AACtD,UAAI,CAAC,eAAe,gBAAgB,aAAa;AAC/C,sBAAc;AAAA,MAChB;AAEA,UAAI,OAAO;AACT,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,UAAI,QAAQ;AACV,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,SACN,MACA,KACA,aACA,eACA,SACA,WACA,WACA,YACA;AACA,UAAM,OAAO,aAAa,cAAc,aAAa,CAAC;AACtD,UAAM,iBAAiB;AAAA,MACrB,GAAG,0BAA0B,MAAM,SAAS;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO,cAAc,GAAG,GAAG,IAAI,IAAI,KAAK,WAAW,KAAK;AAAA,MACtD,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,MAAM,kBAAkB,IAAI,gBAAgB;","names":[]}