UNPKG

@genkit-ai/firebase

Version:

Genkit AI framework plugin for Firebase including Firestore trace/state store and deployment helpers for Cloud Functions for Firebase.

1 lines 5.17 kB
{"version":3,"sources":["../src/user-engagement.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 { z } from 'genkit';\nimport { SPAN_TYPE_ATTR, appendSpan } from 'genkit/tracing';\n\n/** Explicit user sentiment of response. */\nexport enum FirebaseUserFeedbackEnum {\n /** The user reacted positively to the response. */\n POSITIVE = 'positive',\n /** The user reacted negatively to the response. */\n NEGATIVE = 'negative',\n}\n\n/** Implicit user acceptance of response. */\nexport enum FirebaseUserAcceptanceEnum {\n /** The user took the desired action. */\n ACCEPTED = 'accepted',\n /** The user did not take the desired action. */\n REJECTED = 'rejected',\n}\n\n/** Explicit user feedback on response. */\nexport const FirebaseUserFeedbackSchema = z.object({\n /** User sentiment of response. */\n value: z.nativeEnum(FirebaseUserFeedbackEnum),\n /** Optional free text feedback to supplement score. */\n text: z.optional(z.string()),\n});\n\n/** Implicit user acceptance of response. */\nexport const FirebaseUserAcceptanceSchema = z.object({\n /** Whether the user took the desired action based on the response. */\n value: z.nativeEnum(FirebaseUserAcceptanceEnum),\n});\n\n/** Schema for providing user engagement metadata. One or both of feedback and acceptance should be provided. */\nexport const FirebaseUserEngagementSchema = z.object({\n /** Flow or feature name. */\n name: z.string(),\n /**\n * The trace ID of the execution for which we've received user engagement data.\n */\n traceId: z.string(),\n /** The root span ID of the execution for which we've received user engagement data. */\n spanId: z.string(),\n /** Explicit user feedback on response. */\n feedback: z.optional(FirebaseUserFeedbackSchema),\n /** Implicit user acceptance of response. */\n acceptance: z.optional(FirebaseUserAcceptanceSchema),\n});\nexport type FirebaseUserEngagement = z.infer<\n typeof FirebaseUserEngagementSchema\n>;\n\n/** Associates user engagement metadata with the specified flow execution. */\nexport async function collectUserEngagement(\n userEngagement: FirebaseUserEngagement\n) {\n // Collect user feedback, if provided\n if (userEngagement.feedback?.value) {\n const metadata = {\n feedbackValue: userEngagement.feedback.value,\n subtype: 'userFeedback',\n };\n if (userEngagement.feedback.text) {\n metadata['textFeedback'] = userEngagement.feedback.text;\n }\n\n await appendSpan(\n userEngagement.traceId,\n userEngagement.spanId,\n {\n name: 'user-feedback',\n path: `/{${userEngagement.name}}`,\n metadata: metadata,\n },\n {\n [SPAN_TYPE_ATTR]: 'userEngagement',\n }\n );\n }\n\n // Collect user acceptance, if provided\n if (userEngagement.acceptance?.value) {\n await appendSpan(\n userEngagement.traceId,\n userEngagement.spanId,\n {\n name: 'user-acceptance',\n path: `/{${userEngagement.name}}`,\n metadata: {\n acceptanceValue: userEngagement.acceptance.value,\n subtype: 'userAcceptance',\n },\n },\n {\n [SPAN_TYPE_ATTR]: 'userEngagement',\n }\n );\n }\n}\n"],"mappings":"AAgBA,SAAS,SAAS;AAClB,SAAS,gBAAgB,kBAAkB;AAGpC,IAAK,2BAAL,kBAAKA,8BAAL;AAEL,EAAAA,0BAAA,cAAW;AAEX,EAAAA,0BAAA,cAAW;AAJD,SAAAA;AAAA,GAAA;AAQL,IAAK,6BAAL,kBAAKC,gCAAL;AAEL,EAAAA,4BAAA,cAAW;AAEX,EAAAA,4BAAA,cAAW;AAJD,SAAAA;AAAA,GAAA;AAQL,MAAM,6BAA6B,EAAE,OAAO;AAAA;AAAA,EAEjD,OAAO,EAAE,WAAW,wBAAwB;AAAA;AAAA,EAE5C,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AAC7B,CAAC;AAGM,MAAM,+BAA+B,EAAE,OAAO;AAAA;AAAA,EAEnD,OAAO,EAAE,WAAW,0BAA0B;AAChD,CAAC;AAGM,MAAM,+BAA+B,EAAE,OAAO;AAAA;AAAA,EAEnD,MAAM,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAIf,SAAS,EAAE,OAAO;AAAA;AAAA,EAElB,QAAQ,EAAE,OAAO;AAAA;AAAA,EAEjB,UAAU,EAAE,SAAS,0BAA0B;AAAA;AAAA,EAE/C,YAAY,EAAE,SAAS,4BAA4B;AACrD,CAAC;AAMD,eAAsB,sBACpB,gBACA;AAEA,MAAI,eAAe,UAAU,OAAO;AAClC,UAAM,WAAW;AAAA,MACf,eAAe,eAAe,SAAS;AAAA,MACvC,SAAS;AAAA,IACX;AACA,QAAI,eAAe,SAAS,MAAM;AAChC,eAAS,cAAc,IAAI,eAAe,SAAS;AAAA,IACrD;AAEA,UAAM;AAAA,MACJ,eAAe;AAAA,MACf,eAAe;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,eAAe,IAAI;AAAA,QAC9B;AAAA,MACF;AAAA,MACA;AAAA,QACE,CAAC,cAAc,GAAG;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,eAAe,YAAY,OAAO;AACpC,UAAM;AAAA,MACJ,eAAe;AAAA,MACf,eAAe;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,eAAe,IAAI;AAAA,QAC9B,UAAU;AAAA,UACR,iBAAiB,eAAe,WAAW;AAAA,UAC3C,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA;AAAA,QACE,CAAC,cAAc,GAAG;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;","names":["FirebaseUserFeedbackEnum","FirebaseUserAcceptanceEnum"]}