aws-genai-llm-chatbot

Форк
0
123 строки · 4.7 Кб
1
import * as dynamodb from "aws-cdk-lib/aws-dynamodb";
2
import * as s3 from "aws-cdk-lib/aws-s3";
3
import * as iam from "aws-cdk-lib/aws-iam";
4
import * as sfn from "aws-cdk-lib/aws-stepfunctions";
5
import { Construct } from "constructs";
6
import { Shared } from "../shared";
7
import { SystemConfig } from "../shared/types";
8
import { AuroraPgVector } from "./aurora-pgvector";
9
import { DataImport } from "./data-import";
10
import { KendraRetrieval } from "./kendra-retrieval";
11
import { OpenSearchVector } from "./opensearch-vector";
12
import { RagDynamoDBTables } from "./rag-dynamodb-tables";
13
import { SageMakerRagModels } from "./sagemaker-rag-models";
14
import { Workspaces } from "./workspaces";
15

16
export interface RagEnginesProps {
17
  readonly config: SystemConfig;
18
  readonly shared: Shared;
19
}
20

21
export class RagEngines extends Construct {
22
  public readonly auroraPgVector: AuroraPgVector | null;
23
  public readonly openSearchVector: OpenSearchVector | null;
24
  public readonly kendraRetrieval: KendraRetrieval | null;
25
  public readonly sageMakerRagModels: SageMakerRagModels | null;
26
  public readonly uploadBucket: s3.Bucket;
27
  public readonly processingBucket: s3.Bucket;
28
  public readonly documentsTable: dynamodb.Table;
29
  public readonly workspacesTable: dynamodb.Table;
30
  public readonly workspacesByObjectTypeIndexName: string;
31
  public readonly documentsByCompountKeyIndexName: string;
32
  public readonly documentsByStatusIndexName: string;
33
  public readonly fileImportWorkflow?: sfn.StateMachine;
34
  public readonly websiteCrawlingWorkflow?: sfn.StateMachine;
35
  public readonly deleteWorkspaceWorkflow?: sfn.StateMachine;
36
  public readonly dataImport: DataImport;
37

38
  constructor(scope: Construct, id: string, props: RagEnginesProps) {
39
    super(scope, id);
40

41
    const tables = new RagDynamoDBTables(this, "RagDynamoDBTables");
42

43
    let sageMakerRagModels: SageMakerRagModels | null = null;
44
    if (
45
      props.config.rag.engines.aurora.enabled ||
46
      props.config.rag.engines.opensearch.enabled
47
    ) {
48
      sageMakerRagModels = new SageMakerRagModels(this, "SageMaker", {
49
        shared: props.shared,
50
        config: props.config,
51
      });
52
    }
53

54
    let auroraPgVector: AuroraPgVector | null = null;
55
    if (props.config.rag.engines.aurora.enabled) {
56
      auroraPgVector = new AuroraPgVector(this, "AuroraPgVector", {
57
        shared: props.shared,
58
        config: props.config,
59
        ragDynamoDBTables: tables,
60
      });
61
    }
62

63
    let openSearchVector: OpenSearchVector | null = null;
64
    if (props.config.rag.engines.opensearch.enabled) {
65
      openSearchVector = new OpenSearchVector(this, "OpenSearchVector", {
66
        shared: props.shared,
67
        config: props.config,
68
        ragDynamoDBTables: tables,
69
      });
70
    }
71

72
    let kendraRetrieval: KendraRetrieval | null = null;
73
    if (props.config.rag.engines.kendra.enabled) {
74
      kendraRetrieval = new KendraRetrieval(this, "KendraRetrieval", {
75
        shared: props.shared,
76
        config: props.config,
77
        ragDynamoDBTables: tables,
78
      });
79
    }
80

81
    const dataImport = new DataImport(this, "DataImport", {
82
      shared: props.shared,
83
      config: props.config,
84
      auroraDatabase: auroraPgVector?.database,
85
      sageMakerRagModels: sageMakerRagModels ?? undefined,
86
      workspacesTable: tables.workspacesTable,
87
      documentsTable: tables.documentsTable,
88
      ragDynamoDBTables: tables,
89
      workspacesByObjectTypeIndexName: tables.workspacesByObjectTypeIndexName,
90
      documentsByCompoundKeyIndexName: tables.documentsByCompoundKeyIndexName,
91
      openSearchVector: openSearchVector ?? undefined,
92
      kendraRetrieval: kendraRetrieval ?? undefined,
93
    });
94

95
    const workspaces = new Workspaces(this, "Workspaces", {
96
      shared: props.shared,
97
      config: props.config,
98
      dataImport,
99
      ragDynamoDBTables: tables,
100
      auroraPgVector: auroraPgVector ?? undefined,
101
      openSearchVector: openSearchVector ?? undefined,
102
      kendraRetrieval: kendraRetrieval ?? undefined,
103
    });
104

105
    this.auroraPgVector = auroraPgVector;
106
    this.openSearchVector = openSearchVector;
107
    this.kendraRetrieval = kendraRetrieval;
108
    this.sageMakerRagModels = sageMakerRagModels;
109
    this.uploadBucket = dataImport.uploadBucket;
110
    this.processingBucket = dataImport.processingBucket;
111
    this.workspacesTable = tables.workspacesTable;
112
    this.documentsTable = tables.documentsTable;
113
    this.workspacesByObjectTypeIndexName =
114
      tables.workspacesByObjectTypeIndexName;
115
    this.documentsByCompountKeyIndexName =
116
      tables.documentsByCompoundKeyIndexName;
117
    this.documentsByStatusIndexName = tables.documentsByStatusIndexName;
118
    this.fileImportWorkflow = dataImport.fileImportWorkflow;
119
    this.websiteCrawlingWorkflow = dataImport.websiteCrawlingWorkflow;
120
    this.deleteWorkspaceWorkflow = workspaces.deleteWorkspaceWorkflow;
121
    this.dataImport = dataImport;
122
  }
123
}
124

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.