aws-genai-llm-chatbot
123 строки · 4.7 Кб
1import * as dynamodb from "aws-cdk-lib/aws-dynamodb";2import * as s3 from "aws-cdk-lib/aws-s3";3import * as iam from "aws-cdk-lib/aws-iam";4import * as sfn from "aws-cdk-lib/aws-stepfunctions";5import { Construct } from "constructs";6import { Shared } from "../shared";7import { SystemConfig } from "../shared/types";8import { AuroraPgVector } from "./aurora-pgvector";9import { DataImport } from "./data-import";10import { KendraRetrieval } from "./kendra-retrieval";11import { OpenSearchVector } from "./opensearch-vector";12import { RagDynamoDBTables } from "./rag-dynamodb-tables";13import { SageMakerRagModels } from "./sagemaker-rag-models";14import { Workspaces } from "./workspaces";15
16export interface RagEnginesProps {17readonly config: SystemConfig;18readonly shared: Shared;19}
20
21export class RagEngines extends Construct {22public readonly auroraPgVector: AuroraPgVector | null;23public readonly openSearchVector: OpenSearchVector | null;24public readonly kendraRetrieval: KendraRetrieval | null;25public readonly sageMakerRagModels: SageMakerRagModels | null;26public readonly uploadBucket: s3.Bucket;27public readonly processingBucket: s3.Bucket;28public readonly documentsTable: dynamodb.Table;29public readonly workspacesTable: dynamodb.Table;30public readonly workspacesByObjectTypeIndexName: string;31public readonly documentsByCompountKeyIndexName: string;32public readonly documentsByStatusIndexName: string;33public readonly fileImportWorkflow?: sfn.StateMachine;34public readonly websiteCrawlingWorkflow?: sfn.StateMachine;35public readonly deleteWorkspaceWorkflow?: sfn.StateMachine;36public readonly dataImport: DataImport;37
38constructor(scope: Construct, id: string, props: RagEnginesProps) {39super(scope, id);40
41const tables = new RagDynamoDBTables(this, "RagDynamoDBTables");42
43let sageMakerRagModels: SageMakerRagModels | null = null;44if (45props.config.rag.engines.aurora.enabled ||46props.config.rag.engines.opensearch.enabled47) {48sageMakerRagModels = new SageMakerRagModels(this, "SageMaker", {49shared: props.shared,50config: props.config,51});52}53
54let auroraPgVector: AuroraPgVector | null = null;55if (props.config.rag.engines.aurora.enabled) {56auroraPgVector = new AuroraPgVector(this, "AuroraPgVector", {57shared: props.shared,58config: props.config,59ragDynamoDBTables: tables,60});61}62
63let openSearchVector: OpenSearchVector | null = null;64if (props.config.rag.engines.opensearch.enabled) {65openSearchVector = new OpenSearchVector(this, "OpenSearchVector", {66shared: props.shared,67config: props.config,68ragDynamoDBTables: tables,69});70}71
72let kendraRetrieval: KendraRetrieval | null = null;73if (props.config.rag.engines.kendra.enabled) {74kendraRetrieval = new KendraRetrieval(this, "KendraRetrieval", {75shared: props.shared,76config: props.config,77ragDynamoDBTables: tables,78});79}80
81const dataImport = new DataImport(this, "DataImport", {82shared: props.shared,83config: props.config,84auroraDatabase: auroraPgVector?.database,85sageMakerRagModels: sageMakerRagModels ?? undefined,86workspacesTable: tables.workspacesTable,87documentsTable: tables.documentsTable,88ragDynamoDBTables: tables,89workspacesByObjectTypeIndexName: tables.workspacesByObjectTypeIndexName,90documentsByCompoundKeyIndexName: tables.documentsByCompoundKeyIndexName,91openSearchVector: openSearchVector ?? undefined,92kendraRetrieval: kendraRetrieval ?? undefined,93});94
95const workspaces = new Workspaces(this, "Workspaces", {96shared: props.shared,97config: props.config,98dataImport,99ragDynamoDBTables: tables,100auroraPgVector: auroraPgVector ?? undefined,101openSearchVector: openSearchVector ?? undefined,102kendraRetrieval: kendraRetrieval ?? undefined,103});104
105this.auroraPgVector = auroraPgVector;106this.openSearchVector = openSearchVector;107this.kendraRetrieval = kendraRetrieval;108this.sageMakerRagModels = sageMakerRagModels;109this.uploadBucket = dataImport.uploadBucket;110this.processingBucket = dataImport.processingBucket;111this.workspacesTable = tables.workspacesTable;112this.documentsTable = tables.documentsTable;113this.workspacesByObjectTypeIndexName =114tables.workspacesByObjectTypeIndexName;115this.documentsByCompountKeyIndexName =116tables.documentsByCompoundKeyIndexName;117this.documentsByStatusIndexName = tables.documentsByStatusIndexName;118this.fileImportWorkflow = dataImport.fileImportWorkflow;119this.websiteCrawlingWorkflow = dataImport.websiteCrawlingWorkflow;120this.deleteWorkspaceWorkflow = workspaces.deleteWorkspaceWorkflow;121this.dataImport = dataImport;122}123}
124