aws-genai-llm-chatbot
69 строк · 1.7 Кб
1import {
2BatchProcessor,
3EventType,
4processPartialResponse,
5} from "@aws-lambda-powertools/batch";
6import { Logger } from "@aws-lambda-powertools/logger";
7import type {
8SQSEvent,
9SQSRecord,
10Context,
11SQSBatchResponse,
12} from "aws-lambda";
13import { graphQlQuery } from "./graphql";
14
15const processor = new BatchProcessor(EventType.SQS);
16const logger = new Logger();
17
18const recordHandler = async (record: SQSRecord): Promise<void> => {
19const payload = record.body;
20if (payload) {
21const item = JSON.parse(payload);
22
23const req = JSON.parse(item.Message);
24logger.debug("Processed message", req);
25/***
26* Payload format
27*
28payload: str = record.body
29message: dict = json.loads(payload)
30detail: dict = json.loads(message["Message"])
31logger.info(detail)
32user_id = detail["userId"]
33*/
34
35const query = /* GraphQL */ `
36mutation Mutation {
37publishResponse (data: ${JSON.stringify(item.Message)}, sessionId: "${
38req.data.sessionId
39}", userId: "${req.userId}") {
40data
41sessionId
42userId
43}
44}
45`;
46//logger.info(query);
47const resp = await graphQlQuery(query);
48//logger.info(resp);
49}
50};
51
52export const handler = async (
53event: SQSEvent,
54context: Context
55): Promise<SQSBatchResponse> => {
56logger.debug("Event", { event });
57event.Records = event.Records.sort((a, b) => {
58try {
59const x: number = JSON.parse(a.body).Message.data?.token?.sequenceNumber;
60const y: number = JSON.parse(b.body).Message.data?.token?.sequenceNumber;
61return x - y;
62} catch {
63return 0;
64}
65});
66return processPartialResponse(event, recordHandler, processor, {
67context,
68});
69};
70