{"version":3,"file":"store-generation.mjs","names":[],"sources":["../../../../src/services/ai/storage/store-generation.ts"],"sourcesContent":["import type { AiGenerationStatus } from \"../../../libs/db/types.js\";\nimport type { CmsAiGenerateCompletedData } from \"../../../libs/lucid-remote/services/generate-cms-ai.js\";\nimport { AiGenerationsRepository } from \"../../../libs/repositories/index.js\";\nimport type { ServiceFn } from \"../../../utils/services/types.js\";\nimport getRequestDurationMs from \"../helpers/get-request-duration-ms.js\";\n\nconst storeGeneration: ServiceFn<\n\t[\n\t\t{\n\t\t\tuserId: number;\n\t\t\tresponse: CmsAiGenerateCompletedData;\n\t\t\ttargetType: string;\n\t\t\ttarget: Record<string, unknown>;\n\t\t\trequestStartedAt: number;\n\t\t\tstatus?: AiGenerationStatus;\n\t\t\terrorMessage?: string | null;\n\t\t},\n\t],\n\tundefined\n> = async (context, props) => {\n\tconst AiGenerations = new AiGenerationsRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\n\tconst existingRes = await AiGenerations.selectSingleByRequestId({\n\t\trequestId: props.response.requestId,\n\t\tselect: [\"id\"],\n\t\ttenantKey: context.request.tenantKey,\n\t});\n\tif (existingRes.error) return existingRes;\n\n\tif (existingRes.data) {\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst createRes = await AiGenerations.createSingle({\n\t\tdata: {\n\t\t\trequest_id: props.response.requestId,\n\t\t\tprovider_request_id: props.response.usage.providerRequestId ?? null,\n\t\t\tfeature_key: props.response.feature.key,\n\t\t\tfeature_version: props.response.feature.version,\n\t\t\ttenant_key: context.request.tenantKey ?? null,\n\t\t\tuser_id: props.userId,\n\t\t\ttarget_type: props.targetType,\n\t\t\ttarget: props.target,\n\t\t\toutput: props.response.output as Record<string, unknown>,\n\t\t\tusage: props.response.usage,\n\t\t\tmodel: props.response.usage.model,\n\t\t\tcost_currency: props.response.usage.cost.currency,\n\t\t\tcost_total_minor: props.response.usage.cost.totalCostMinor,\n\t\t\tduration_ms: getRequestDurationMs(props.requestStartedAt),\n\t\t\tstatus: props.status ?? \"success\",\n\t\t\terror_message: props.errorMessage ?? null,\n\t\t},\n\t\treturning: [\"id\"],\n\t});\n\tif (createRes.error) return createRes;\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: undefined,\n\t};\n};\n\nexport default storeGeneration;\n"],"mappings":"mHAMA,MAAM,EAaF,MAAO,EAAS,IAAU,CAC7B,IAAM,EAAgB,IAAI,EACzB,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EAEM,EAAc,MAAM,EAAc,wBAAwB,CAC/D,UAAW,EAAM,SAAS,UAC1B,OAAQ,CAAC,IAAI,EACb,UAAW,EAAQ,QAAQ,SAC5B,CAAC,EACD,GAAI,EAAY,MAAO,OAAO,EAE9B,GAAI,EAAY,KACf,MAAO,CACN,MAAO,IAAA,GACP,KAAM,IAAA,EACP,EAGD,IAAM,EAAY,MAAM,EAAc,aAAa,CAClD,KAAM,CACL,WAAY,EAAM,SAAS,UAC3B,oBAAqB,EAAM,SAAS,MAAM,mBAAqB,KAC/D,YAAa,EAAM,SAAS,QAAQ,IACpC,gBAAiB,EAAM,SAAS,QAAQ,QACxC,WAAY,EAAQ,QAAQ,WAAa,KACzC,QAAS,EAAM,OACf,YAAa,EAAM,WACnB,OAAQ,EAAM,OACd,OAAQ,EAAM,SAAS,OACvB,MAAO,EAAM,SAAS,MACtB,MAAO,EAAM,SAAS,MAAM,MAC5B,cAAe,EAAM,SAAS,MAAM,KAAK,SACzC,iBAAkB,EAAM,SAAS,MAAM,KAAK,eAC5C,YAAa,EAAqB,EAAM,gBAAgB,EACxD,OAAQ,EAAM,QAAU,UACxB,cAAe,EAAM,cAAgB,IACtC,EACA,UAAW,CAAC,IAAI,CACjB,CAAC,EAGD,OAFI,EAAU,MAAc,EAErB,CACN,MAAO,IAAA,GACP,KAAM,IAAA,EACP,CACD"}