diff --git a/.github/.wordlist.txt b/.github/.wordlist.txt index a77ed500..945d1c8e 100644 --- a/.github/.wordlist.txt +++ b/.github/.wordlist.txt @@ -18,41 +18,61 @@ Auth backend Backend bgd +bordershadow bugfix CarImage cd centric +cephfs Chase +ChatGPT ChatOps Chris +claimdb CLI cls CMD +config Config courseware cpu CreateNamespace +dailyrun dataset +datasets defaultPolicy det dev Dev +DevOps dex +diag dir dotenv +drawio +ds +DS +DSP +dvh eCommerce elyra Elyra +eng env EOF +EQ Erwan eslint Eventing EXAMPLEs +FastAPI +ffdrf +fi formatter fromarray frontend Frontend +GiB gitea Gitea GITEA @@ -68,13 +88,18 @@ Guidera Guillaume Guillaume's highlightjs +hoc Hoc +hourlyrun html http https +huggingface +ibm ic imagesdir img +imgsz Immage InfluxDB Inlining @@ -82,6 +107,11 @@ insecureEdgeTerminationPolicy io ipynb js +json +jsonpath +jupyter +Jupyter +JupyterLab kubectl kubernetes linter @@ -89,39 +119,62 @@ llm LLM LLMs localhost +lr +lrf Lundberg +LWBS +mAP md minio Minio +mistralai +mn +mockups modelmesh ModelMesh +modelresults Moutier namespace +namespaces nav Nodejs npm oc +ocs +ods ojsonpath +ok onnx +opencv +OpenCV openshift OpenShift openShiftOAuth +OpenSift opentlc OpenVINO patternfly Patternfly PatternFly +PersistantStorageClaims +PersistentVolumeClaim +PersistentVolumeClaims +pipelineserver Pipfile pn png Podman podname +Postgres PostgreSql Prasanth +pre Productization productname +proj proto PRs +pvc py pytorch Pytorch @@ -133,44 +186,63 @@ redhat repo repoURL RespectIgnoreDifferences +RestUrl rh +rhoai RHOAI +rhods rhpds rhs Robert roboflow Roboflow +RoboFlow rollout +runtime +RWX selfHeal Serverless src sso +StorageClass +storagecluster stylePaths stylesheet +subfolder +subfolders summarization Summarization svc +svg SVG SVG's syncOptions syncPolicy targetRevision TBD +Tekton TGI tls TODO txt TypeScript +UAT UI un unopinionated url userX venv +vscode +VSCode +wb webpack Webpack +www yaml YAML yolo YOLO +yolov +YOLOv YOLOV \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ee746ce6..43f3f145 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,7 +1,7 @@ name: Publish to GitHub Pages on: push: - branches: [dev] + branches: [main] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: concurrency: diff --git a/.gitignore b/.gitignore index 49c6db4f..0d4985f9 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,8 @@ logs # build www www-cache +app/backend/public/* +!app/backend/public/.folder_keep # cache __pycache__ @@ -38,3 +40,13 @@ package-lock.json # local python env .venv + +# notebook checkpoints +*/*/.ipynb_checkpoints/* +*/*/*/.ipynb_checkpoints/* + + +# training stuff +lab-materials/04/datasets/* +lab-materials/04/runs/* + diff --git a/README.md b/README.md index f5c9200f..e0929f3f 100644 --- a/README.md +++ b/README.md @@ -67,4 +67,56 @@ From the main folder, launch `npm run dev`. This will launch both backend and fr - Frontend is accessible at `http://localhost:9000` - Backend is accessible at `http://localhost:5000`, with Swagger API doc at `http://localhost:5000/docs` +```bash +#!/bin/bash + +# Script to restart all showroom pods - You must be logged in as a cluster admin to run this script + +# Get all namespaces +namespaces=$(oc get namespaces -o jsonpath='{.items[*].metadata.name}' \ + | tr ' ' '\n' \ + | grep '^showroom') + +# Stop all the pods +for namespace in $namespaces; do + # Check if the deployment "showroom" exists in the namespace + if oc -n $namespace get deployment showroom &> /dev/null; then + # If it exists, restart the rollout + # oc -n $namespace rollout restart deployment/showroom + oc -n $namespace scale deploy showroom --replicas=0 + fi +done + + +# wait for them all to fully stop +# start all the pods +for namespace in $namespaces; do + # Check if the deployment "showroom" exists in the namespace + if oc -n $namespace get deployment showroom &> /dev/null; then + # If it exists, restart the rollout + # oc -n $namespace rollout restart deployment/showroom + oc -n $namespace scale deploy showroom --replicas=1 + fi +done + + +``` + +## How to graduate code from dev to main + +- From `dev`, create a new branch, like `feature/prepare-for-main-merge`. +- Modify the following files to make their relevant content point to `main`: + - `bootstrap/applicationset/applicationset-bootstrap.yaml` + - `content/antora.yml` + - `content/modules/ROOT/pages/05-03-web-app-deploy-application.adoc` +- Make a pull request from this branch to `main`, review and merge + + + +
+ Links for RH1 event environment assignment + +- URL for all labs: [https://one.demo.redhat.com/](https://one.demo.redhat.com/) +- Search for `insurance` +
diff --git a/app/Containerfile b/app/Containerfile new file mode 100644 index 00000000..3831b3cc --- /dev/null +++ b/app/Containerfile @@ -0,0 +1,21 @@ +FROM registry.access.redhat.com/ubi9/nodejs-18 as stage + +USER root + +WORKDIR /tmp + +RUN git clone https://github.com/rh-aiservices-bu/insurance-claim-processing.git + +FROM registry.access.redhat.com/ubi9/nodejs-18 + +USER root + +COPY --from=stage /tmp/insurance-claim-processing/app/ /tmp/src + +RUN chown -R 1001:0 /tmp/src + +USER 1001 + +RUN /usr/libexec/s2i/assemble + +CMD /usr/libexec/s2i/run diff --git a/app/backend/Pipfile b/app/backend/Pipfile index 7f16dfc9..17669823 100644 --- a/app/backend/Pipfile +++ b/app/backend/Pipfile @@ -3,11 +3,6 @@ url = "https://pypi.org/simple" verify_ssl = true name = "pypi" -[[source]] -url = "https://download.pytorch.org/whl/cu118/" -verify_ssl = false -name = "pytorch" - [packages] boto3 = "~=1.28.0" fastapi = "~=0.104.0" diff --git a/app/claimdb/03-claims_table_creation.sql b/app/claimdb/03-claims_table_creation.sql index 36cf0fa5..a755fa74 100644 --- a/app/claimdb/03-claims_table_creation.sql +++ b/app/claimdb/03-claims_table_creation.sql @@ -26,6 +26,7 @@ CREATE TABLE IF NOT EXISTS claims.claims summary text COLLATE pg_catalog."default", location text COLLATE pg_catalog."default", "time" text COLLATE pg_catalog."default", + sentiment text COLLATE pg_catalog."default", CONSTRAINT claims_pkey PRIMARY KEY (id) ) WITH ( diff --git a/app/frontend/src/app/components/ClaimDetail/ClaimDetail.tsx b/app/frontend/src/app/components/ClaimDetail/ClaimDetail.tsx index 73597aab..45539873 100644 --- a/app/frontend/src/app/components/ClaimDetail/ClaimDetail.tsx +++ b/app/frontend/src/app/components/ClaimDetail/ClaimDetail.tsx @@ -96,7 +96,7 @@ const ClaimDetail: React.FunctionComponent = () => { Body:
{claim.body}
Attached images: - {claim && claim.original_images && } + {claim && claim.original_images && } diff --git a/app/frontend/src/app/routes.tsx b/app/frontend/src/app/routes.tsx index ec7f7ac7..2f773395 100644 --- a/app/frontend/src/app/routes.tsx +++ b/app/frontend/src/app/routes.tsx @@ -35,16 +35,16 @@ const routes: AppRouteConfig[] = [ path: '/', title: 'Original App', }, - { +/* { component: NewApp, exact: true, path: '/newapp', title: 'NewApp', - }, + }, */ { component: ClaimsList, exact: true, - label: 'Claims List (New App)', + label: 'New App', path: '/ClaimsList', title: 'Claims List', }, diff --git a/bootstrap/ic-rhoai-configuration/images-puller.yaml b/bootstrap/ic-rhoai-configuration/images-puller.yaml index 63285cbd..af290b1e 100644 --- a/bootstrap/ic-rhoai-configuration/images-puller.yaml +++ b/bootstrap/ic-rhoai-configuration/images-puller.yaml @@ -18,7 +18,7 @@ spec: name: image-puller spec: containers: - - name: image-puller + - name: ic-workbench image: image-registry.openshift-image-registry.svc:5000/redhat-ods-applications/ic-workbench:1.2 command: ["tail"] args: ["-f", "/dev/null"] @@ -28,6 +28,16 @@ spec: requests: cpu: 10m memory: 10Mi + - name: vscode + image: image-registry.openshift-image-registry.svc:5000/redhat-ods-applications/ic-workbench-vscode:2023c + command: ["tail"] + args: ["-f", "/dev/null"] + resources: + limits: + memory: 20Mi + requests: + cpu: 10m + memory: 10Mi --- apiVersion: apps/v1 kind: DaemonSet diff --git a/bootstrap/ic-rhoai-configuration/kustomization.yaml b/bootstrap/ic-rhoai-configuration/kustomization.yaml index 8ff38a0a..04407b77 100644 --- a/bootstrap/ic-rhoai-configuration/kustomization.yaml +++ b/bootstrap/ic-rhoai-configuration/kustomization.yaml @@ -11,6 +11,7 @@ resources: - ceph-rbd-set-default.yaml # wave 1 - workbench-imagestream.yaml +- workbench-vscode-is.yaml - odhdashboardconfig.yaml - accelerator-profile.yaml # wave 2 diff --git a/bootstrap/ic-rhoai-configuration/workbench-imagestream.yaml b/bootstrap/ic-rhoai-configuration/workbench-imagestream.yaml index bc4dc780..56153a03 100644 --- a/bootstrap/ic-rhoai-configuration/workbench-imagestream.yaml +++ b/bootstrap/ic-rhoai-configuration/workbench-imagestream.yaml @@ -7,11 +7,11 @@ metadata: https://github.com/rh-aiservices-bu/insurance-claim-processing/tree/main/bootstrap/workbench-image internal.config.kubernetes.io/previousNamespaces: default internal.config.kubernetes.io/previousKinds: ImageStream - opendatahub.io/notebook-image-name: Insurance Claim Processing Lab Workbench - internal.config.kubernetes.io/previousNames: Insurance Claim Processing Lab Workbench + opendatahub.io/notebook-image-name: CUSTOM - Insurance Claim Processing Lab Workbench + internal.config.kubernetes.io/previousNames: CUSTOM - Insurance Claim Processing Lab Workbench opendatahub.io/recommended-accelerators: '["nvidia.com/gpu"]' opendatahub.io/notebook-image-desc: >- - Jupyter notebook image with all the libraries needed for the OpenShit AI Insurance Claim Lab. + Jupyter notebook image with all the libraries needed for the OpenShift AI Insurance Claim Lab. argocd.argoproj.io/sync-wave: "1" name: ic-workbench namespace: redhat-ods-applications @@ -25,21 +25,6 @@ spec: lookupPolicy: local: true tags: - - name: '1.1' - annotations: - opendatahub.io/notebook-python-dependencies: >- - [{"name":"PyTorch","version":"2.1.2"},{"name":"Langchain","version":"0.0.353"},{"name":"Ultralytics","version":"8.0.232"},] - opendatahub.io/notebook-software: >- - [{"name":"CUDA","version":"12.1"},{"name":"Python","version":"v3.11"}] - openshift.io/imported-from: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-workbench - from: - kind: DockerImage - name: >- - quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-workbench:1.1 - importPolicy: - importMode: Legacy - referencePolicy: - type: Source - name: '1.2' annotations: opendatahub.io/notebook-python-dependencies: >- diff --git a/bootstrap/ic-rhoai-configuration/workbench-vscode-is.yaml b/bootstrap/ic-rhoai-configuration/workbench-vscode-is.yaml new file mode 100644 index 00000000..e633c784 --- /dev/null +++ b/bootstrap/ic-rhoai-configuration/workbench-vscode-is.yaml @@ -0,0 +1,40 @@ +kind: ImageStream +apiVersion: image.openshift.io/v1 +metadata: + annotations: + opendatahub.io/notebook-image-order: '02' + opendatahub.io/notebook-image-url: >- + https://github.com/opendatahub-io-contrib/workbench-images + internal.config.kubernetes.io/previousNamespaces: default + internal.config.kubernetes.io/previousKinds: ImageStream + opendatahub.io/notebook-image-name: CUSTOM - VSCode for Insurance Claim Processing Lab + internal.config.kubernetes.io/previousNames: CUSTOM - VSCode for Insurance Claim Processing Lab + opendatahub.io/recommended-accelerators: '["nvidia.com/gpu"]' + opendatahub.io/notebook-image-desc: >- + VSCode image for the OpenShift AI Insurance Claim Lab. + argocd.argoproj.io/sync-wave: "1" + name: ic-workbench-vscode + namespace: redhat-ods-applications + labels: + app.kubernetes.io/part-of: workbenches + app.opendatahub.io/workbenches: 'true' + component.opendatahub.io/name: notebooks + opendatahub.io/component: 'true' + opendatahub.io/notebook-image: 'true' +spec: + lookupPolicy: + local: true + tags: + - name: '2023c' + annotations: + opendatahub.io/notebook-software: >- + [{"name":"VSCode","version":"4.16.1"},{"name":"Python","version":"v3.11"}] + openshift.io/imported-from: quay.io/opendatahub-contrib/workbench-images + from: + kind: DockerImage + name: >- + quay.io/opendatahub-contrib/workbench-images:vscode-datascience-c9s-py311_2023c_latest + importPolicy: + importMode: Legacy + referencePolicy: + type: Source diff --git a/bootstrap/ic-shared-database/db-init-job.yaml b/bootstrap/ic-shared-database/db-init-job.yaml new file mode 100644 index 00000000..eecd8fa4 --- /dev/null +++ b/bootstrap/ic-shared-database/db-init-job.yaml @@ -0,0 +1,51 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: db-init-job + annotations: + argocd.argoproj.io/sync-wave: "2" +spec: + template: + spec: + initContainers: + - name: wait-for-db + image: busybox:1.28 + command: ['sh', '-c', 'until nc -z -v -w30 $POSTGRESQL_DATABASE 5432; do echo "Waiting for database connection..."; sleep 2; done;'] + env: + - name: POSTGRESQL_DATABASE + value: claimdb.ic-shared-db.svc.cluster.local + containers: + - name: postgresql + image: registry.redhat.io/rhel9/postgresql-13:latest + env: + - name: POSTGRESQL_DATABASE + valueFrom: + secretKeyRef: + name: claimdb + key: database-name + - name: POSTGRESQL_USER + valueFrom: + secretKeyRef: + name: claimdb + key: database-user + - name: PGPASSWORD + valueFrom: + secretKeyRef: + name: claimdb + key: database-password + - name: POSTGRESQL_DATABASE_HOST + value: claimdb.ic-shared-db.svc.cluster.local + command: ["/bin/bash", "-c"] + args: + - | + echo "Running SQL script" + psql -h $POSTGRESQL_DATABASE_HOST -p 5432 -U $POSTGRESQL_USER -d $POSTGRESQL_DATABASE -f /sql-script/script.sql + volumeMounts: + - name: sql-script-volume + mountPath: /sql-script + restartPolicy: Never + volumes: + - name: sql-script-volume + configMap: + name: sql-script-configmap + backoffLimit: 4 \ No newline at end of file diff --git a/bootstrap/ic-shared-database/images/original_images/car0.jpg b/bootstrap/ic-shared-database/images/original_images/car0.jpg new file mode 100644 index 00000000..2ca93f59 Binary files /dev/null and b/bootstrap/ic-shared-database/images/original_images/car0.jpg differ diff --git a/bootstrap/ic-shared-database/images/original_images/car1.jpg b/bootstrap/ic-shared-database/images/original_images/car1.jpg new file mode 100644 index 00000000..4977f446 Binary files /dev/null and b/bootstrap/ic-shared-database/images/original_images/car1.jpg differ diff --git a/bootstrap/ic-shared-database/images/original_images/car2.jpg b/bootstrap/ic-shared-database/images/original_images/car2.jpg new file mode 100644 index 00000000..5a417e46 Binary files /dev/null and b/bootstrap/ic-shared-database/images/original_images/car2.jpg differ diff --git a/lab-materials/05/test_image.jpg b/bootstrap/ic-shared-database/images/original_images/car3.jpg similarity index 100% rename from lab-materials/05/test_image.jpg rename to bootstrap/ic-shared-database/images/original_images/car3.jpg diff --git a/bootstrap/ic-shared-database/images/original_images/car5.jpg b/bootstrap/ic-shared-database/images/original_images/car5.jpg new file mode 100644 index 00000000..f2e8e654 Binary files /dev/null and b/bootstrap/ic-shared-database/images/original_images/car5.jpg differ diff --git a/bootstrap/ic-shared-database/images/original_images/car6.jpg b/bootstrap/ic-shared-database/images/original_images/car6.jpg new file mode 100644 index 00000000..105f3a4b Binary files /dev/null and b/bootstrap/ic-shared-database/images/original_images/car6.jpg differ diff --git a/bootstrap/ic-shared-database/images/processed_images/car0-processed.jpg b/bootstrap/ic-shared-database/images/processed_images/car0-processed.jpg new file mode 100644 index 00000000..bc552388 Binary files /dev/null and b/bootstrap/ic-shared-database/images/processed_images/car0-processed.jpg differ diff --git a/bootstrap/ic-shared-database/images/processed_images/car1-processed.jpg b/bootstrap/ic-shared-database/images/processed_images/car1-processed.jpg new file mode 100644 index 00000000..ef7f7d55 Binary files /dev/null and b/bootstrap/ic-shared-database/images/processed_images/car1-processed.jpg differ diff --git a/bootstrap/ic-shared-database/images/processed_images/car2-processed.jpg b/bootstrap/ic-shared-database/images/processed_images/car2-processed.jpg new file mode 100644 index 00000000..95ec0be5 Binary files /dev/null and b/bootstrap/ic-shared-database/images/processed_images/car2-processed.jpg differ diff --git a/bootstrap/ic-shared-database/images/processed_images/car3-processed.jpg b/bootstrap/ic-shared-database/images/processed_images/car3-processed.jpg new file mode 100644 index 00000000..cb98603f Binary files /dev/null and b/bootstrap/ic-shared-database/images/processed_images/car3-processed.jpg differ diff --git a/bootstrap/ic-shared-database/images/processed_images/car5-processed.jpg b/bootstrap/ic-shared-database/images/processed_images/car5-processed.jpg new file mode 100644 index 00000000..7cf0c4f2 Binary files /dev/null and b/bootstrap/ic-shared-database/images/processed_images/car5-processed.jpg differ diff --git a/bootstrap/ic-shared-database/images/processed_images/car6-processed.jpg b/bootstrap/ic-shared-database/images/processed_images/car6-processed.jpg new file mode 100644 index 00000000..50a2fbc7 Binary files /dev/null and b/bootstrap/ic-shared-database/images/processed_images/car6-processed.jpg differ diff --git a/bootstrap/ic-shared-database/kustomization.yaml b/bootstrap/ic-shared-database/kustomization.yaml index 0bacb2ee..31539b16 100644 --- a/bootstrap/ic-shared-database/kustomization.yaml +++ b/bootstrap/ic-shared-database/kustomization.yaml @@ -13,6 +13,10 @@ resources: # wave 1 - pvc.yaml - secret.yaml +- secret-minio.yaml - deployment.yaml - service.yaml +- sql-script-configmap.yaml # wave 2 +- db-init-job.yaml +- populate-images.yaml diff --git a/bootstrap/ic-shared-database/populate-images.yaml b/bootstrap/ic-shared-database/populate-images.yaml new file mode 100644 index 00000000..96393e50 --- /dev/null +++ b/bootstrap/ic-shared-database/populate-images.yaml @@ -0,0 +1,59 @@ +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: populate-images + annotations: + argocd.argoproj.io/sync-wave: "2" +spec: + backoffLimit: 4 + template: + spec: + initContainers: + - name: wait-for-minio + image: busybox:1.28 + command: ['sh', '-c', 'until nc -z -v -w30 $MINIO_ENDPOINT 9000; do echo "Waiting for Minio connection..."; sleep 2; done;'] + env: + - name: MINIO_ENDPOINT + value: minio.ic-shared-minio.svc.cluster.local + containers: + - name: add-images-to-bucket + image: image-registry.openshift-image-registry.svc:5000/redhat-ods-applications/s2i-generic-data-science-notebook:1.2 + imagePullPolicy: IfNotPresent + command: ["/bin/bash"] + args: + - -ec + - |- + git clone https://github.com/rh-aiservices-bu/insurance-claim-processing.git + + cat << 'EOF' | python3 + import boto3, os, botocore + + s3 = boto3.client("s3", + endpoint_url=os.getenv("AWS_S3_ENDPOINT"), + aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"), + aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY")) + + # Create image bucket + bucket_name = "claim-images" + try: + s3.head_bucket(Bucket=bucket_name) + except botocore.exceptions.ClientError as e: + if e.response['Error']['Code'] == '404': + s3.create_bucket(Bucket=bucket_name) + + # Upload original images to minio + for filename in os.listdir("insurance-claim-processing/bootstrap/ic-shared-database/images/original_images"): + with open(f"insurance-claim-processing/bootstrap/ic-shared-database/images/original_images/{filename}", "rb") as f: + s3.upload_fileobj(f, bucket_name, f"original_images/{filename}") + + # Upload processed images to minio + for filename in os.listdir("insurance-claim-processing/bootstrap/ic-shared-database/images/processed_images"): + with open(f"insurance-claim-processing/bootstrap/ic-shared-database/images/processed_images/{filename}", "rb") as f: + s3.upload_fileobj(f, bucket_name, f"processed_images/{filename}") + + EOF + envFrom: + - secretRef: + name: secret-minio + restartPolicy: Never diff --git a/bootstrap/ic-shared-database/secret-minio.yaml b/bootstrap/ic-shared-database/secret-minio.yaml new file mode 100644 index 00000000..8558f9fb --- /dev/null +++ b/bootstrap/ic-shared-database/secret-minio.yaml @@ -0,0 +1,14 @@ +kind: Secret +apiVersion: v1 +metadata: + name: secret-minio + namespace: ic-shared-db + labels: + app: ic-shared-db + annotations: + argocd.argoproj.io/sync-wave: "1" +stringData: + AWS_S3_ENDPOINT: http://minio.ic-shared-minio.svc.cluster.local:9000 + AWS_ACCESS_KEY_ID: minio + AWS_SECRET_ACCESS_KEY: minio123 +type: Opaque \ No newline at end of file diff --git a/bootstrap/ic-shared-database/sql-script-configmap.yaml b/bootstrap/ic-shared-database/sql-script-configmap.yaml new file mode 100644 index 00000000..7d7943b7 --- /dev/null +++ b/bootstrap/ic-shared-database/sql-script-configmap.yaml @@ -0,0 +1,243 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: sql-script-configmap + annotations: + argocd.argoproj.io/sync-wave: "1" +data: + script.sql: | + CREATE SCHEMA IF NOT EXISTS claims + AUTHORIZATION claimdb; + + DROP TABLE IF EXISTS claims.claims CASCADE; + DROP TABLE IF EXISTS claims.original_images CASCADE; + DROP TABLE IF EXISTS claims.processed_images CASCADE; + DROP SEQUENCE IF EXISTS claims.claims_id_seq CASCADE; + DROP SEQUENCE IF EXISTS claims.original_images_id_seq CASCADE; + DROP SEQUENCE IF EXISTS claims.processed_images_id_seq CASCADE; + + -- SEQUENCE: claims.claims_id_seq + + CREATE SEQUENCE IF NOT EXISTS claims.claims_id_seq + INCREMENT 1 + START 1 + MINVALUE 1 + MAXVALUE 2147483647 + CACHE 1; + + -- Table: claims.claims + + CREATE TABLE IF NOT EXISTS claims.claims + ( + id integer NOT NULL DEFAULT nextval('claims.claims_id_seq'::regclass), + subject text COLLATE pg_catalog."default", + body text COLLATE pg_catalog."default", + summary text COLLATE pg_catalog."default", + location text COLLATE pg_catalog."default", + "time" text COLLATE pg_catalog."default", + sentiment text COLLATE pg_catalog."default", + CONSTRAINT claims_pkey PRIMARY KEY (id) + ) + WITH ( + OIDS = FALSE + ) + TABLESPACE pg_default; + + -- Link Table to Sequence + + ALTER SEQUENCE claims.claims_id_seq + OWNED BY claims.claims.id; + + -- SEQUENCE: claims.original_images_id_seq + + CREATE SEQUENCE IF NOT EXISTS claims.original_images_id_seq + INCREMENT 1 + START 1 + MINVALUE 1 + MAXVALUE 2147483647 + CACHE 1; + + -- Table: claims.original_images + + CREATE TABLE IF NOT EXISTS claims.original_images + ( + id integer NOT NULL DEFAULT nextval('claims.original_images_id_seq'::regclass), + image_name text COLLATE pg_catalog."default" NOT NULL, + image_key text COLLATE pg_catalog."default" NOT NULL, + claim_id integer NOT NULL, + CONSTRAINT original_images_pkey PRIMARY KEY (id), + CONSTRAINT fk_claim_id FOREIGN KEY (claim_id) + REFERENCES claims.claims (id) MATCH SIMPLE + ON UPDATE CASCADE + ON DELETE CASCADE + ) + WITH ( + OIDS = FALSE + ) + TABLESPACE pg_default; + + -- Link Table to Sequence + + ALTER SEQUENCE claims.original_images_id_seq + OWNED BY claims.original_images.id; + + -- SEQUENCE: claims.processed_images_id_seq + + CREATE SEQUENCE IF NOT EXISTS claims.processed_images_id_seq + INCREMENT 1 + START 1 + MINVALUE 1 + MAXVALUE 2147483647 + CACHE 1; + + -- Table: claims.processed_images + + CREATE TABLE IF NOT EXISTS claims.processed_images + ( + id integer NOT NULL DEFAULT nextval('claims.processed_images_id_seq'::regclass), + image_name text COLLATE pg_catalog."default" NOT NULL, + image_key text COLLATE pg_catalog."default" NOT NULL, + claim_id integer NOT NULL, + CONSTRAINT processed_images_pkey PRIMARY KEY (id), + CONSTRAINT fk_claim_id FOREIGN KEY (claim_id) + REFERENCES claims.claims (id) MATCH SIMPLE + ON UPDATE CASCADE + ON DELETE CASCADE + ) + WITH ( + OIDS = FALSE + ) + TABLESPACE pg_default; + + -- Link Table to Sequence + + ALTER SEQUENCE claims.processed_images_id_seq + OWNED BY claims.processed_images.id; + + ----- + -- INSERTS + ----- + -- CLAIM1 + + INSERT INTO claims.claims (subject, body, summary, location, time, sentiment) VALUES ('Claim for Recent Car Accident - Policy Number: AC-987654321', ' + Dear Pacific Shield Insurance, + + I hope this email finds you well. My name is Sarah Turner, and I am writing to file a claim for a recent car accident that occurred on January 2nd, 2024, at approximately 3:30 PM. My policy number is AC-987654321. + + The accident took place at the intersection of Birch Street and Willow Avenue in the city of Evergreen. I was driving my vehicle, a black Toyota Camry with license plate number DEF-456, heading south on Birch Street. At the intersection, the traffic signal was green, and I proceeded through the intersection. + + At the same time, another vehicle, a blue Chevrolet Traverse with license plate number GHI-789, was traveling west on Willow Avenue. Unfortunately, the driver failed to stop at the red traffic signal, resulting in a collision with the front passenger side of my vehicle. + + The impact caused significant damage to both vehicles. The front bumper and right headlight of my Toyota Camry are extensively damaged, and there are also damages to the front driver''s side of the Chevrolet Traverse. Fortunately, no injuries were sustained during the accident, and both drivers were able to move their vehicles to the side of the road. + + I promptly exchanged information with the other driver, Mr. Daniel Reynolds, including our names, phone numbers, insurance details, and a brief description of the accident. Additionally, I took photos of the accident scene, including the damages to both vehicles and the position of the traffic signal. + + I have attached the necessary documents to this email, including the photos, a copy of the police report filed at the Evergreen Police Department, and the estimate for the repair costs from Evergreen Auto Repair, where I have taken my vehicle for assessment. + + I kindly request your prompt attention to this matter and would appreciate any guidance on the next steps in the claims process. If you require any additional information or documentation, please do not hesitate to contact me at (555) 123-4567 or sarah.turner@email.com. + + Thank you for your assistance, and I look forward to a swift resolution of this claim. + + Sincerely, + + Sarah Turner + 123 Oak Street + Evergreen, CA 98765 + (555) 123-4567 + sarah.turner@email.com + ', + ' + On January 2, 2024, at around 3:30 PM, a car accident occurred at the intersection of Birch Street and Willow Avenue in Evergreen. The involved parties were Sarah Turner, driving a black Toyota Camry (DEF-456), and Daniel Reynolds in a blue Chevrolet Traverse (GHI-789). + + Sarah was heading south on Birch Street when Daniel failed to stop at the red traffic signal on Willow Avenue, causing a collision with Sarah''s vehicle. Both drivers exchanged information and took photos of the accident scene, which included damages to the front passenger side of Sarah''s Toyota Camry and the front driver''s side of Daniel''s Chevrolet Traverse. No injuries were reported. + + Sarah has attached necessary documents, such as photos, a police report, and an estimate for repair costs, to her email. She requests prompt attention to the claim and is available at (555) 123-4567 or sarah.turner@email.com for any additional information or documentation needed. + ', + 'Intersection of Birch Street and Willow Avenue in the city of Evergreen', + 'January 2nd, 2024, at approximately 3:30 PM', + 'The sender, Sarah Turner, expresses a polite and professional tone in her email. She is respectful and detailed in her description of the car accident and the subsequent steps she took to file a claim. She requests prompt attention to the matter and provides all necessary documentation. Overall, her sentiment is one of being proactive and cooperative in the claims process.' + ); + + -- CLAIM2 + + INSERT INTO claims.claims (subject, body, summary, location, time, sentiment) VALUES ('Urgent: Unacceptable Delay and Lack of Communication Regarding Claim #XYZ789', ' + Dear Prestige Insurances, + + I am writing to express my extreme dissatisfaction with the appalling service I have received concerning my recent claim, reference number #XYZ789. The lack of communication and delayed response from your company is utterly unacceptable, and I demand immediate attention to rectify this matter. + + The accident occurred on January 15, 2024, at approximately 3:45 PM, near the intersection of Maple Street and Oak Avenue in Rivertown. My vehicle, a Silver Hawk GT, was struck by another driver, identified as Samantha Reynolds, who ran a red light at the aforementioned intersection. This incident resulted in substantial damage to the front end of my car, including severe structural damage and airbag deployment. + + I reported the claim immediately after the accident, providing all necessary details, witness information, and a detailed description of the events leading up to the collision. However, the response—or lack thereof—from your company has been absolutely deplorable. I have yet to receive any updates on the status of my claim, and my attempts to contact your claims department have been met with prolonged hold times and unhelpful representatives. + + I insist on a thorough investigation into this matter and demand an explanation for the unreasonable delay. It is my right as a policyholder to receive timely updates on the progress of my claim and to be treated with the respect and urgency that this situation demands. + + Furthermore, the lack of transparency and communication from your company is not only unprofessional but also exacerbates the stress and inconvenience caused by the accident itself. I expect immediate action to be taken to expedite the processing of my claim and provide me with the information I am entitled to as a paying customer. + + I am appalled at the disregard for customer satisfaction and the apparent negligence displayed by your company in handling my claim. If my concerns are not addressed promptly and to my satisfaction, I will have no choice but to escalate this matter to the appropriate regulatory authorities and consider legal action. + + I demand a comprehensive update on the status of my claim within the next 48 hours. Failing to meet this deadline will only reinforce my belief that your company values its bottom line over the well-being of its customers. + + I trust that you will treat this matter with the urgency and seriousness it deserves. + + Sincerely, + John T. Anderson + Policy Number: PT567890 + ', + ' + The text is a letter of complaint from John T. Anderson to Prestige Insurances regarding an unresolved car insurance claim, #XYZ789. The incident occurred on January 15, 2024, when Anderson''s vehicle was hit by another driver, Samantha Reynolds, who ran a red light. The accident caused significant damage to Anderson''s car, and he reported the claim immediately, providing all necessary details. However, he has experienced poor communication and a delayed response from Prestige Insurances. Anderson demands an explanation for the delay, transparency, and urgency in handling his claim. He threatens to escalate the matter to regulatory authorities and consider legal action if his concerns are not addressed promptly. Anderson requests a comprehensive update on the status of his claim within the next 48 hours. + ', + 'Near the intersection of Maple Street and Oak Avenue in Rivertown', + 'January 15, 2024, at approximately 3:45 PM', + 'The sender of this claim is expressing extreme dissatisfaction with the handling of their insurance claim by Prestige Insurances. They are frustrated with the lack of communication and the significant delay in processing their claim. The tone of the message is demanding and assertive, with the sender threatening to escalate the matter if their concerns are not addressed promptly.' + ); + + -- CLAIM3 + + INSERT INTO claims.claims (subject, body, summary, location, time, sentiment) VALUES ('Urgent: Car Accident Claim Assistance Needed', ' + Dear AssuranceCare Inc., + + I hope this email finds you well. I''m writing to, uh, inform you about, well, something that happened recently. It''s, um, about a car accident, and I''m not really sure how to, you know, go about all this. I''m kinda anxious and confused, to be honest. + + So, the accident, uh, occurred on January 15, 2024, at around 3:30 PM. I was driving, or, um, attempting to drive, my car at the intersection of Maple Street and Elm Avenue. It''s kinda close to, um, a gas station and a, uh, coffee shop called Brew Haven? I''m not sure if that matters, but, yeah. + + So, I was just, you know, driving along, and suddenly, out of nowhere, another car, a Blue Crest Sedan, crashed into the, uh, driver''s side of my car. It was like, whoa, what just happened, you know? There was this screeching noise and, uh, some honking from other cars, and I just felt really, uh, overwhelmed. + + The weather was, um, kinda cloudy that day, but I don''t think it was raining. I mean, I can''t really remember. Sorry if that''s important. Anyway, the road, or, well, maybe the intersection, was kinda busy, with cars going in different directions. I guess that''s, you know, a detail you might need? + + As for damages, my car has, uh, significant damage on the driver''s side. The front door is all dented, and the side mirror is, like, hanging by a thread. It''s not really drivable in its current, uh, state. The Blue Crest Sedan also had some damage, but I''m not exactly sure what because, you know, everything happened so fast. + + I did manage to exchange information with the other driver. Their name is Sarah Johnson, and I got their phone number (555-1234), license plate number (ABC123), and insurance information. So, yeah, I hope that''s helpful. + + I''m not sure what, um, steps I should take now. Do I need to go to a specific, uh, repair shop? Should I get a quote for the repairs? And, uh, how do I, you know, proceed with the insurance claim? I''m kinda lost here, and any guidance or assistance you can provide would be really, um, appreciated. + + Sorry if this email is a bit all over the place. I''m just really, uh, anxious about the whole situation. Thank you for your understanding. + + Sincerely, + + Jane Doe + Policy Number: AC987654 + ', + ' + On January 15, 2024, at approximately 3:30 PM, Jane Doe was involved in a car accident at the intersection of Maple Street and Elm Avenue, near a gas station and a coffee shop called Brew Haven. A Blue Crest Sedan crashed into the driver''s side of her car, causing significant damage to the driver''s side, including a dented front door and a hanging side mirror. The weather was cloudy, but it''s unclear if it was raining. The accident occurred in a busy intersection with multiple cars. Jane exchanged information with the other driver, Sarah Johnson, who provided her phone number (555-1234), license plate number (ABC123), and insurance information. Jane is unsure of the next steps to take, including whether she needs to go to a specific repair shop or get a quote for the repairs, and how to proceed with the insurance claim. She is seeking guidance and assistance from AssuranceCare Inc. + ', + 'Intersection of Maple Street and Elm Avenue', + 'January 15, 2024, at around 3:30 PM', + 'The person sending the claim, Jane Doe, expresses feelings of anxiety and confusion regarding the car accident she was involved in. She is seeking guidance and assistance from AssuranceCare Inc. to help her navigate the process of filing an insurance claim and getting her vehicle repaired.' + ); + + -- IMAGES + + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car0.jpg', 'original_images/car0.jpg', 1); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car1.jpg', 'original_images/car1.jpg', 1); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car2.jpg', 'original_images/car2.jpg', 2); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car3.jpg', 'original_images/car3.jpg', 3); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car5.jpg', 'original_images/car5.jpg', 3); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car6.jpg', 'original_images/car6.jpg', 3); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car0-processed.jpg', 'processed_images/car0-processed.jpg', 1); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car1-processed.jpg', 'processed_images/car1-processed.jpg', 1); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car2-processed.jpg', 'processed_images/car2-processed.jpg', 2); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car3-processed.jpg', 'processed_images/car3-processed.jpg', 3); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car5-processed.jpg', 'processed_images/car5-processed.jpg', 3); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car6-processed.jpg', 'processed_images/car6-processed.jpg', 3); + + diff --git a/bootstrap/ic-shared-img-det/pinger.yaml b/bootstrap/ic-shared-img-det/pinger.yaml index f4c3b870..2745534a 100644 --- a/bootstrap/ic-shared-img-det/pinger.yaml +++ b/bootstrap/ic-shared-img-det/pinger.yaml @@ -23,7 +23,7 @@ spec: spec: containers: - name: pinger - image: quay.io/rlundber/sds-small:1.8 + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-small-datascience:1.0 command: - python - -u diff --git a/bootstrap/ic-shared-minio/create-buckets.yaml b/bootstrap/ic-shared-minio/create-buckets.yaml index b3a05b0d..4b18d2ad 100644 --- a/bootstrap/ic-shared-minio/create-buckets.yaml +++ b/bootstrap/ic-shared-minio/create-buckets.yaml @@ -46,7 +46,7 @@ spec: aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY")) # Create user buckets - for i in range(1, 51): + for i in range(1, 61): bucket_name = f"user{i}" if bucket_name not in [bu["Name"] for bu in s3.list_buckets()["Buckets"]]: s3.create_bucket(Bucket=bucket_name) diff --git a/bootstrap/workbench-image/Containerfile b/bootstrap/workbench-image/Containerfile index a9ebad68..33a32a56 100644 --- a/bootstrap/workbench-image/Containerfile +++ b/bootstrap/workbench-image/Containerfile @@ -153,7 +153,7 @@ RUN echo "Installing softwares and packages" && \ sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ # Remove default Elyra runtime-images \ rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \ - # Fix permissions to support pip in Openshift environments \ + # Fix permissions to support pip in OpenShift environments \ chmod -R g+w /opt/app-root/lib/python3.11/site-packages && \ fix-permissions /opt/app-root -P diff --git a/content/antora.yml b/content/antora.yml index 04b92d1c..9ee39cc8 100644 --- a/content/antora.yml +++ b/content/antora.yml @@ -24,7 +24,7 @@ asciidoc: user: userX password: openshift openshift_console_url: https://PLACEHOLDER-URL.com/ - openshift_cluster_ingress_domain: URL.com + openshift_cluster_ingress_domain: PLACEHOLDER-URL.com rhoai_dashboard_url: https://rhods-dashboard-redhat-ods-applications.{openshift_cluster_ingress_domain}/ login_command: oc login --insecure-skip-tls-verify=false -u userX -p openshift https://api.MYCLUSTER.com:6443" diff --git a/content/modules/ROOT/assets/images/01/proto-claims-processing-app.png b/content/modules/ROOT/assets/images/01/proto-claims-processing-app.png index 86c18ea7..94fa9111 100644 Binary files a/content/modules/ROOT/assets/images/01/proto-claims-processing-app.png and b/content/modules/ROOT/assets/images/01/proto-claims-processing-app.png differ diff --git a/content/modules/ROOT/assets/images/02/02-01-login-scary.png b/content/modules/ROOT/assets/images/02/02-01-login-scary.png new file mode 100644 index 00000000..befddaae Binary files /dev/null and b/content/modules/ROOT/assets/images/02/02-01-login-scary.png differ diff --git a/content/modules/ROOT/assets/images/02/02-01-rhoai-front-page.png b/content/modules/ROOT/assets/images/02/02-01-rhoai-front-page.png index dbb1d306..3ed49033 100644 Binary files a/content/modules/ROOT/assets/images/02/02-01-rhoai-front-page.png and b/content/modules/ROOT/assets/images/02/02-01-rhoai-front-page.png differ diff --git a/content/modules/ROOT/assets/images/02/02-02-add-dc.png b/content/modules/ROOT/assets/images/02/02-02-add-dc.png new file mode 100644 index 00000000..9375152c Binary files /dev/null and b/content/modules/ROOT/assets/images/02/02-02-add-dc.png differ diff --git a/content/modules/ROOT/assets/images/02/02-02-jupyter.png b/content/modules/ROOT/assets/images/02/02-02-jupyter.png index 4fe188ec..5a9fd244 100644 Binary files a/content/modules/ROOT/assets/images/02/02-02-jupyter.png and b/content/modules/ROOT/assets/images/02/02-02-jupyter.png differ diff --git a/content/modules/ROOT/assets/images/02/02-02-launch-workbench-01.png b/content/modules/ROOT/assets/images/02/02-02-launch-workbench-01.png index 411f0d1e..6c7b696c 100644 Binary files a/content/modules/ROOT/assets/images/02/02-02-launch-workbench-01.png and b/content/modules/ROOT/assets/images/02/02-02-launch-workbench-01.png differ diff --git a/content/modules/ROOT/assets/images/02/02-03-create-wb.png b/content/modules/ROOT/assets/images/02/02-03-create-wb.png new file mode 100644 index 00000000..18d2e9ff Binary files /dev/null and b/content/modules/ROOT/assets/images/02/02-03-create-wb.png differ diff --git a/content/modules/ROOT/assets/images/02/02-03-open-link.png b/content/modules/ROOT/assets/images/02/02-03-open-link.png new file mode 100644 index 00000000..f67bbbce Binary files /dev/null and b/content/modules/ROOT/assets/images/02/02-03-open-link.png differ diff --git a/content/modules/ROOT/assets/images/02/02-04-restart-and-run.png b/content/modules/ROOT/assets/images/02/02-04-restart-and-run.png new file mode 100644 index 00000000..527b9e46 Binary files /dev/null and b/content/modules/ROOT/assets/images/02/02-04-restart-and-run.png differ diff --git a/content/modules/ROOT/assets/images/02/02-04-restart-kernel.png b/content/modules/ROOT/assets/images/02/02-04-restart-kernel.png new file mode 100644 index 00000000..08ec6587 Binary files /dev/null and b/content/modules/ROOT/assets/images/02/02-04-restart-kernel.png differ diff --git a/content/modules/ROOT/assets/images/03/03-06-dailyrun.png b/content/modules/ROOT/assets/images/03/03-06-dailyrun.png new file mode 100644 index 00000000..3e92db7a Binary files /dev/null and b/content/modules/ROOT/assets/images/03/03-06-dailyrun.png differ diff --git a/content/modules/ROOT/assets/images/03/03-07-hourlyrun.png b/content/modules/ROOT/assets/images/03/03-07-hourlyrun.png deleted file mode 100644 index dae224e7..00000000 Binary files a/content/modules/ROOT/assets/images/03/03-07-hourlyrun.png and /dev/null differ diff --git a/content/modules/ROOT/assets/images/04/add-model-server-config.png b/content/modules/ROOT/assets/images/04/add-model-server-config.png new file mode 100644 index 00000000..05735572 Binary files /dev/null and b/content/modules/ROOT/assets/images/04/add-model-server-config.png differ diff --git a/content/modules/ROOT/assets/images/04/add-model-server2.png b/content/modules/ROOT/assets/images/04/add-model-server2.png deleted file mode 100644 index 6b76fd95..00000000 Binary files a/content/modules/ROOT/assets/images/04/add-model-server2.png and /dev/null differ diff --git a/content/modules/ROOT/assets/images/04/inference-url.png b/content/modules/ROOT/assets/images/04/inference-url.png new file mode 100644 index 00000000..bb5e6d05 Binary files /dev/null and b/content/modules/ROOT/assets/images/04/inference-url.png differ diff --git a/content/modules/ROOT/assets/images/04/model-retraining-summary.png b/content/modules/ROOT/assets/images/04/model-retraining-summary.png index 80fdfabc..95269c7a 100644 Binary files a/content/modules/ROOT/assets/images/04/model-retraining-summary.png and b/content/modules/ROOT/assets/images/04/model-retraining-summary.png differ diff --git a/content/modules/ROOT/assets/images/05/01-oc-login.png b/content/modules/ROOT/assets/images/05/01-oc-login.png index 08d31f86..38a0c434 100644 Binary files a/content/modules/ROOT/assets/images/05/01-oc-login.png and b/content/modules/ROOT/assets/images/05/01-oc-login.png differ diff --git a/content/modules/ROOT/assets/images/05/01-openshift-console.png b/content/modules/ROOT/assets/images/05/01-openshift-console.png index c45d9c1c..f37bd408 100644 Binary files a/content/modules/ROOT/assets/images/05/01-openshift-console.png and b/content/modules/ROOT/assets/images/05/01-openshift-console.png differ diff --git a/content/modules/ROOT/assets/images/05/05-PVC-settings.png b/content/modules/ROOT/assets/images/05/05-PVC-settings.png new file mode 100644 index 00000000..1ab5883a Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-PVC-settings.png differ diff --git a/content/modules/ROOT/assets/images/05/05-PVC.png b/content/modules/ROOT/assets/images/05/05-PVC.png new file mode 100644 index 00000000..05c9d854 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-PVC.png differ diff --git a/content/modules/ROOT/assets/images/05/05-create-pvc.png b/content/modules/ROOT/assets/images/05/05-create-pvc.png new file mode 100644 index 00000000..478f13cb Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-create-pvc.png differ diff --git a/content/modules/ROOT/assets/images/05/05-create-run.png b/content/modules/ROOT/assets/images/05/05-create-run.png new file mode 100644 index 00000000..e4b979b6 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-create-run.png differ diff --git a/content/modules/ROOT/assets/images/05/05-import-pipeline-button.png b/content/modules/ROOT/assets/images/05/05-import-pipeline-button.png new file mode 100644 index 00000000..fc48efc2 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-import-pipeline-button.png differ diff --git a/content/modules/ROOT/assets/images/05/05-imported-pipeline.png b/content/modules/ROOT/assets/images/05/05-imported-pipeline.png new file mode 100644 index 00000000..d878cc26 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-imported-pipeline.png differ diff --git a/content/modules/ROOT/assets/images/05/05-object-detection-endpoint.png b/content/modules/ROOT/assets/images/05/05-object-detection-endpoint.png new file mode 100644 index 00000000..45701b2a Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-object-detection-endpoint.png differ diff --git a/content/modules/ROOT/assets/images/05/05-open-pipeline-properties.png b/content/modules/ROOT/assets/images/05/05-open-pipeline-properties.png new file mode 100644 index 00000000..07390b6c Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-open-pipeline-properties.png differ diff --git a/content/modules/ROOT/assets/images/05/05-run-details.png b/content/modules/ROOT/assets/images/05/05-run-details.png new file mode 100644 index 00000000..acf94a7e Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-run-details.png differ diff --git a/content/modules/ROOT/assets/images/05/05-run-settings-create-pipeline.png b/content/modules/ROOT/assets/images/05/05-run-settings-create-pipeline.png new file mode 100644 index 00000000..c1146f1d Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-run-settings-create-pipeline.png differ diff --git a/content/modules/ROOT/assets/images/05/05-run-settings.png b/content/modules/ROOT/assets/images/05/05-run-settings.png new file mode 100644 index 00000000..812fe8a9 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/05-run-settings.png differ diff --git a/content/modules/ROOT/assets/images/05/app-code.png b/content/modules/ROOT/assets/images/05/app-code.png new file mode 100644 index 00000000..c86d3001 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/app-code.png differ diff --git a/content/modules/ROOT/assets/images/05/application-architecture.drawio.svg b/content/modules/ROOT/assets/images/05/application-architecture.drawio.svg new file mode 100644 index 00000000..fe47832d --- /dev/null +++ b/content/modules/ROOT/assets/images/05/application-architecture.drawio.svg @@ -0,0 +1,127 @@ + + + + + + + + + +
+
+
+ LLM Server +
+
+
+
+ + LLM Server + +
+
+ + + + + +
+
+
+ Claims Database +
+ (PostgreSQL) +
+
+
+
+ + Claims Database... + +
+
+ + + + + +
+
+
+ Application Backend +
+ (Python) +
+
+
+
+ + Application Backend... + +
+
+ + + + + + + + +
+
+
+ Application Frontend +
+ (React) +
+
+
+
+ + Application Frontend... + +
+
+ + + + + +
+
+
+ Claims Images +
+ (S3 Storage) +
+
+
+
+ + Claims Images... + +
+
+ + + + + + + + + + + + +
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file diff --git a/content/modules/ROOT/assets/images/05/argocd-rollout.png b/content/modules/ROOT/assets/images/05/argocd-rollout.png new file mode 100644 index 00000000..be2d575c Binary files /dev/null and b/content/modules/ROOT/assets/images/05/argocd-rollout.png differ diff --git a/content/modules/ROOT/assets/images/05/argocd-route.png b/content/modules/ROOT/assets/images/05/argocd-route.png new file mode 100644 index 00000000..a8ca7717 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/argocd-route.png differ diff --git a/content/modules/ROOT/assets/images/05/jobs-completed.png b/content/modules/ROOT/assets/images/05/jobs-completed.png new file mode 100644 index 00000000..94c21761 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/jobs-completed.png differ diff --git a/content/modules/ROOT/assets/images/05/new-app-1.png b/content/modules/ROOT/assets/images/05/new-app-1.png new file mode 100644 index 00000000..dd7e12e3 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/new-app-1.png differ diff --git a/content/modules/ROOT/assets/images/05/original-app-1.png b/content/modules/ROOT/assets/images/05/original-app-1.png new file mode 100644 index 00000000..f7125268 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/original-app-1.png differ diff --git a/content/modules/ROOT/assets/images/05/original-app-2.png b/content/modules/ROOT/assets/images/05/original-app-2.png new file mode 100644 index 00000000..34e04592 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/original-app-2.png differ diff --git a/content/modules/ROOT/assets/images/05/stop-workbench.png b/content/modules/ROOT/assets/images/05/stop-workbench.png new file mode 100644 index 00000000..847d2300 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/stop-workbench.png differ diff --git a/content/modules/ROOT/assets/images/05/trust-vscode.png b/content/modules/ROOT/assets/images/05/trust-vscode.png new file mode 100644 index 00000000..a863b61f Binary files /dev/null and b/content/modules/ROOT/assets/images/05/trust-vscode.png differ diff --git a/content/modules/ROOT/assets/images/05/update-workbench.png b/content/modules/ROOT/assets/images/05/update-workbench.png new file mode 100644 index 00000000..340924ac Binary files /dev/null and b/content/modules/ROOT/assets/images/05/update-workbench.png differ diff --git a/content/modules/ROOT/assets/images/05/vscode-image.png b/content/modules/ROOT/assets/images/05/vscode-image.png new file mode 100644 index 00000000..8cdd3042 Binary files /dev/null and b/content/modules/ROOT/assets/images/05/vscode-image.png differ diff --git a/content/modules/ROOT/nav.adoc b/content/modules/ROOT/nav.adoc index dc440891..3108a968 100644 --- a/content/modules/ROOT/nav.adoc +++ b/content/modules/ROOT/nav.adoc @@ -7,15 +7,16 @@ * 2. Connection and Setup ({user}) ** xref:02-01-getting-connected.adoc[2.1 Getting connected] -** xref:02-02-creating-project.adoc[2.2 Creating your project] -** xref:02-03-validating-env.adoc[2.3 Validating the environment] +** xref:02-02-creating-project.adoc[2.2 Creating your project and pipeline server] +** xref:02-03-creating-workbench.adoc[2.3 Creating your workbench] +** xref:02-04-validating-env.adoc[2.4 Validating the environment] * 3. Working with an LLM ** xref:03-01-notebook-based-llm.adoc[3.1 Notebook-Based LLM Example] ** xref:03-02-summarization.adoc[3.2 Text Summarization] -** xref:03-03-information-extractions.adoc[3.4 Information Extraction] +** xref:03-03-information-extractions.adoc[3.3 Information Extraction] ** xref:03-04-comparing-models.adoc[3.4 Comparing Models Accuracy] -** xref:03-05-prompt-engineering.adoc[3.5 Prompt Engineering Exercise] +** xref:03-05-prompt-engineering.adoc[3.5 Prompt Engineering Exercise (Optional)] ** xref:03-06-sanity-check.adoc[3.6 Sanity-check pipeline] * 4. Image Processing @@ -23,14 +24,14 @@ ** xref:04-02-car-recog.adoc[4.2 Car recognition] ** xref:04-03-model-retraining.adoc[4.3 Model retraining] ** xref:04-04-accident-recog.adoc[4.4 Accident/Damage recognition] -** xref:04-05-serving-manual.adoc[4.5 Model Serving (Manual)] -** xref:04-06-serving-automated.adoc[4.6 Model Serving (Automated)] +** xref:04-05-model-serving.adoc[4.5 Model Serving] * 5. Web App Deployment -** xref:05-01-web-app-deploy-manual.adoc[5.1 Deploying your Web App manually] -** xref:05-02-web-app-deploy-gitops.adoc[5.2 Deploying your Web App via GitOps] -** xref:05-03-web-app-update.adoc[5.3 Updating your Web App via GitOps] -** xref:05-04-web-app-validating.adoc[5.4 Validating Claims processing] +** xref:05-01-application.adoc[5.1 Application overview] +** xref:05-02-openshift-terminal.adoc[5.2 OpenShift Terminal] +** xref:05-03-web-app-deploy-application.adoc[5.3 Deploying the application via GitOps] +** xref:05-04-web-app-validating.adoc[5.4 Validating the application] +** xref:05-05-process-claims.adoc[5.5 Process claims with a pipeline] * 6. Productization and Extrapolations ** xref:06-01-potential-imp-ref.adoc[6.1 Potential improvements and refinements] diff --git a/content/modules/ROOT/pages/00-agenda.adoc b/content/modules/ROOT/pages/00-agenda.adoc deleted file mode 100644 index 7a4941b3..00000000 --- a/content/modules/ROOT/pages/00-agenda.adoc +++ /dev/null @@ -1,13 +0,0 @@ -:icons: font - -= AI Based Smart Retail: Event-Driven Ansible & ChatOps - - -== Introduction -TBD - -== Hands-On Session -TBD - -== Challenge Lab -TBD diff --git a/content/modules/ROOT/pages/01-01-setting-stage.adoc b/content/modules/ROOT/pages/01-01-setting-stage.adoc index 4f866d5c..b39d2b92 100644 --- a/content/modules/ROOT/pages/01-01-setting-stage.adoc +++ b/content/modules/ROOT/pages/01-01-setting-stage.adoc @@ -14,6 +14,6 @@ In order to make this lab seem more realistic, we will be describing this imagin ** provide advice on potential improvements * That team is currently very small (about 4 people) ** Findings will be presented to the board -** If they are convincing, we'll be granted the resources to implement the recommendations -* The next slides are the materials that were presented to the board +** If they are convincing, the team will be granted the resources to implement the recommendations +* The next sections in this chapter are the materials that were presented to the board diff --git a/content/modules/ROOT/pages/01-03-proposed-improvements.adoc b/content/modules/ROOT/pages/01-03-proposed-improvements.adoc index 2758ae5a..32f4cc33 100644 --- a/content/modules/ROOT/pages/01-03-proposed-improvements.adoc +++ b/content/modules/ROOT/pages/01-03-proposed-improvements.adoc @@ -16,5 +16,5 @@ include::_attributes.adoc[] ** improve fraud detection by 25% * Requirements ** More precise measurements of performance -** at baseline -** after every change/improvement +**** at baseline +**** after every change/improvement diff --git a/content/modules/ROOT/pages/01-04-examples-from-prototype.adoc b/content/modules/ROOT/pages/01-04-examples-from-prototype.adoc index 0ac4c44e..2a2f9d61 100644 --- a/content/modules/ROOT/pages/01-04-examples-from-prototype.adoc +++ b/content/modules/ROOT/pages/01-04-examples-from-prototype.adoc @@ -2,46 +2,45 @@ include::_attributes.adoc[] The examples below are what we hope to achieve through our prototype version of the improved process. -Some are mockups, and some are screenshots from the prototype application. == Using an LLM for text summarization * Allows for faster reading by the claims adjuster - ++ [.bordershadow] image::01/proto-summary.png[test image] == Using an LLM for information extraction * Extract key pieces of information for better population of database - ++ [.bordershadow] image::01/proto-info-extract.png[ info extraction] == Using an LLM for sentiment analysis * Detect tone of text, and potentially act on it. - ++ [.bordershadow] image::01/proto-sentiment-analysis.png[] == Using image recognition to frame vehicle(s) in pictures * Analyse images provided by customer - ++ [.bordershadow] image::01/proto-car-recog.png[] == Using image recognition to detect damage * Assessment of damage based on picture - ++ [.bordershadow] image::01/proto-accident-grading.png[] == Web Application to review/process claims * Have an application that ties in these tools together and enables users to process the incoming claims more efficiently - ++ [.bordershadow] image::01/proto-claims-processing-app.png[] diff --git a/content/modules/ROOT/pages/01-05-results.adoc b/content/modules/ROOT/pages/01-05-results.adoc index f3dca4d2..11cf62cc 100644 --- a/content/modules/ROOT/pages/01-05-results.adoc +++ b/content/modules/ROOT/pages/01-05-results.adoc @@ -10,7 +10,8 @@ include::_attributes.adoc[] == Next steps -We know that you all have various background and responsibilities. (Coders, IT, DevOps, Data Scientists, etc..) +We know that you all have various background and responsibilities (Coders, IT, DevOps, Data Scientists, etc..). + But before you start working in your narrow area of specialization, we want you all to have a decent understanding of all the work that was done during the prototype phase. -The next 75 minutes is your official training session, for you to ramp up and gain an understanding for the various technologies involved during the prototype phase. +The next 75 minutes is your official training session, for you to ramp up and gain an understanding of the various technologies involved during the prototype phase. diff --git a/content/modules/ROOT/pages/02-01-getting-connected.adoc b/content/modules/ROOT/pages/02-01-getting-connected.adoc index 8fb37821..e3a772dc 100644 --- a/content/modules/ROOT/pages/02-01-getting-connected.adoc +++ b/content/modules/ROOT/pages/02-01-getting-connected.adoc @@ -14,44 +14,37 @@ If you are using the customized version of the instructions, the information bel In a new window or tab, open the following URL and log in: -* OpenShift Console URL: {openshift_console_url}[{openshift_console_url},window=_blank] +* The Red Hat OpenShift AI Dashboard URL for our shared environment: +** https://rhods-dashboard-redhat-ods-applications.{openshift_cluster_ingress_domain}/[https://rhods-dashboard-redhat-ods-applications.{openshift_cluster_ingress_domain}/,window=_blank] +* Enter your credentials (as detailed above) * The result should look like: + - [.bordershadow] -image::02/02-01-login1.png[] - -* and after that: -+ -image::02/02-01-login2.png[] +image::02/02-01-login1.png[width=50%] -Now, open the OpenShift AI URL, and log in with the same credentials: - -* The RHOAI URL: https://rhods-dashboard-redhat-ods-applications.{openshift_cluster_ingress_domain}/[https://rhods-dashboard-redhat-ods-applications.{openshift_cluster_ingress_domain}/,window=_blank] - -* Alternatively, you can access Red Hat OpenShift AI from the OpenShift Console by clicking on: +* Because the password is so simple (`{password}`), your browser might display a scary message such as: + [.bordershadow] -image::02/02-01-access-rhoai.png[] +image::02/02-01-login-scary.png[] +* It is safe here to ignore this message when it pops up. * After you authenticate, the result should look like: + [.bordershadow] image::02/02-01-rhoai-front-page.png[] -If you got this far and saw all that, congratulations, you got properly connected to the environment! - -// * The `oc login` command: -// [.lines_space] -// [.console-input] -// [source, text] -// [subs=attributes+] -// {login_command} +If you got this far and saw all that, congratulations, you properly connected to the OpenShift AI Dashboard Application! -// == Other credentials and URLs: +We are now ready to start the lab. -// TODO? +== Getting Support during RH1 In-Person Labs -// * ArgoCD view -// * Gitea -// * Database +* In the room +** Some very kind colleagues will be walking around in the room, to help and/or answer questions. +** If you run into a particular issue, call out to one of them and quietly explain what the issue is. +** If they are unsure or if it's likely to be a long explanation, they might ask you to "post the question in slack" instead. (see below) +* Over slack +** We have a dedicated Slack Channel where more colleagues (who kindly agreed to stay up late) will try to answer questions. +** Head over to the slack channel called https://redhat.enterprise.slack.com/archives/C066EQ8LWBS[#rh1-insurance-claims-lab,window=_blank] +** Post a message such as `I am userX and I have an issue with exercise number 2.4` +** Use the https://slack.com/help/articles/115000769927-Use-threads-to-organize-discussions-[threads,window=_blank] feature in slack to then post a screenshot of a description of the issue, in-thread. diff --git a/content/modules/ROOT/pages/02-02-creating-project.adoc b/content/modules/ROOT/pages/02-02-creating-project.adoc index dece0ef8..a6aba725 100644 --- a/content/modules/ROOT/pages/02-02-creating-project.adoc +++ b/content/modules/ROOT/pages/02-02-creating-project.adoc @@ -1,55 +1,56 @@ -= Creating your playpen project += Creating your project and pipeline server include::_attributes.adoc[] As a preliminary step, each of you is going to . Create a Data Science project +** this will help keep your things together . Create a Data Connection +** we need that for the pipeline server to store its artifacts . Deploy a Data Science Pipeline Server +** we will need one, and it's better to create it from the start . Launch a Workbench +** we will use it to review content and notebooks . Clone the git repo into your Workbench +** this contains all the code from the prototype The instructions below will guide you through these steps. Follow them carefully. -== Unique user ID - -* If you are using instructions that have been customized for you, here are your details: -** User id: `{user}` -** Password: `{password}` -** OpenShift Console URL: {openshift_console_url} - == Create a project -* First, navigate to the Data Science Project menu on the left: +* First, in the OpenShift AI Dashboard application, navigate to the Data Science Projects menu on the left: + [.bordershadow] image::02/02-02-ds-proj-nav.png[] -* Create a project with the **same name** as your user id. +* Create a project with the **same name** as your user id ** You have been assigned a unique user ID: `{user}` ** You need to now create a project with the exact same name: `{user}` - ++ IMPORTANT: Your assigned user is {user}. Don't mess that up or things will break later on * Leave the resource name unchanged -* Enter your first and last name in the description of the project. - -It should look like this: - +* Optionally, enter your first and last name in the description of the project. +* It should look like this: ++ [.bordershadow] image::02/02-02-create-project.png[] - -IMPORTANT: But it should NOT be `userX` like in the screenshot. (for you, `X` should be a number instead) ++ +IMPORTANT: It should **NOT** be `userX` like in the screenshot. (for you, `X` should be a number instead) == Create a Data Connection for the pipeline server * We have deployed an instance of Minio in the cluster to act as a simple Object Storage for our purposes. -* We will create a **Data Connection** to it. -* Here is the info you need to enter: +* You will need to **Add data connection** that points to it. ++ +[.bordershadow] +image::02/02-02-add-dc.png[] + +* Here is the information you need to enter: ** Name: [.lines_space] [.console-input] @@ -86,11 +87,11 @@ none [source, text] [subs=attributes+] {user} - ++ IMPORTANT: Once again, the bucket you will use has to match with the user ID you were provided -The result should look like: - +* The result should look like: ++ [.bordershadow] image::02/data-connection.png[] @@ -98,12 +99,12 @@ image::02/data-connection.png[] It is highly recommended to create your pipeline server before creating a workbench. So let's do that now! -* In your DS project, click on **Create a pipeline Server** +* In your Data Science Project (DSP), click on **Create a pipeline Server** + [.bordershadow] image::02/02-02-pipelineserver01.png[] -* Select the Data Connection created earlier (**Shared Minio - pipelines**) and click the **configure** button: +* Select the Data Connection created earlier (**Shared Minio - pipelines**) and click the **Configure** button: + [.bordershadow] image::02/02-02-pipelineserver02.png[] @@ -115,73 +116,5 @@ image::02/02-02-pipelineserver03.png[] At this point, your pipeline server is ready and deployed. -== Launch a Workbench - -Once the Data Connection and Pipeline Server are created, Create a workbench with the following characteristics: - -* Choose a name for it, like: `My Workbench` -* Image Selection: `Insurance Claim Processing Lab Workbench` -* Container Size: Standard -* Accelerator: None - -[.bordershadow] -image::02/02-02-launch-workbench-01.png[] - -* Wait for your workbench to be fully started -* Once it is, click the **Open** Link to connect to it. -* Authenticate with the same credentials as earlier -* You will be asked to accept these settings: -+ -[.bordershadow] -image::02/02-02-accept.png[] - -* Do so. -* You should now see this: -+ -[.bordershadow] -image::02/02-02-jupyter.png[] - -== Git-Clone the common repo - -There are 2 potential ways of cloning the git repo into your workbench. Choose the one you are most comfortable with. - -[tabs] -==== -Using the Git UI:: -+ --- -If you want to use the git UI in Jupyter: - -[.bordershadow] -image::02/git-clone-1.png[] +IMPORTANT: You need to **wait** until that screen is ready. If it's still spinning, wait for it to complete. If you continue and create your workbench **before** the pipeline server is ready, your workbench will not be able to submit pipelines to it. -Enter the URL of the Git repo: - -[.console-input] -[source,adoc] -[subs=attributes+] ----- -{git-clone-repo-url} ----- - -[.bordershadow] -image::02/git-clone-2.png[] - --- -Using the Git CLI:: -+ --- -If you prefer using the `git` CLI, open a a terminal in JupyterLab, and paste this code: - -[.console-input] -[source,adoc] -[subs=attributes+] ----- -git clone {git-clone-repo-url} -cd insurance-claim-processing/ -git checkout {git-clone-repo-branch} ----- --- -==== - -At this point, your project is ready for the work we want to do in it. diff --git a/content/modules/ROOT/pages/02-03-creating-workbench.adoc b/content/modules/ROOT/pages/02-03-creating-workbench.adoc new file mode 100644 index 00000000..fb4554f9 --- /dev/null +++ b/content/modules/ROOT/pages/02-03-creating-workbench.adoc @@ -0,0 +1,61 @@ += Creating a workbench +include::_attributes.adoc[] + +== Launch a Workbench + +* Once the Data Connection and Pipeline Server are fully created +* Create a workbench ++ +[.bordershadow] +image::02/02-03-create-wb.png[] +* Make sure it has the following characteristics: +** Choose a name for it, like: `My Workbench` +** Image Selection: `CUSTOM - Insurance Claim Processing Lab Workbench` +** Container Size: `Standard` +** Accelerator: `None` +* That should look like: ++ +[.bordershadow] +image::02/02-02-launch-workbench-01.png[] +* You should not need to modify any other Workbench settings (such as Storage) +* Wait for your workbench to be fully started +* Once it is, click the **Open** Link to connect to it. ++ +[.bordershadow] +image::02/02-03-open-link.png[] + +* Authenticate with the same credentials as earlier +* You will be asked to accept the following settings: ++ +[.bordershadow] +image::02/02-02-accept.png[] + +* Do so +* You should now see this: ++ +[.bordershadow] +image::02/02-02-jupyter.png[] + +== Git-Clone the common repo + +We will clone the content of our Git repo so that you can access all the materials that were created as part of our prototyping exercise. + +* Using the Git UI: +** Open the Git UI in Jupyter: ++ +[.bordershadow] +image::02/git-clone-1.png[] ++ +** Enter the URL of the Git repo: ++ +[.console-input] +[source,adoc] +[subs=attributes+] +---- +{git-clone-repo-url} +---- ++ +[.bordershadow] +image::02/git-clone-2.png[] + +At this point, your project is ready for the work we want to do in it. diff --git a/content/modules/ROOT/pages/02-03-validating-env.adoc b/content/modules/ROOT/pages/02-03-validating-env.adoc deleted file mode 100644 index 218efde2..00000000 --- a/content/modules/ROOT/pages/02-03-validating-env.adoc +++ /dev/null @@ -1,21 +0,0 @@ -= Validating the environment -include::_attributes.adoc[] - -Now that you are connected to your workbench, let's make sure that all the expected services are responding properly in the cluster. - -In your workbench: - -. In the left hand navigation menu, navigate to the folder called: `insurance-claim-processing/lab-materials/02` - -. Open the notebook called `02-03-validating.ipynb` - -. Running these cells will confirm that all the lab-required services are responding. - -If the output of this notebook looks suspicious, please inform the people leading the lab. - -== Overall view - -This is a summarized visualization of how the environment is laid out. - -[.bordershadow] -image::02/ic-eng-diag.drawio.svg[] diff --git a/content/modules/ROOT/pages/02-04-validating-env.adoc b/content/modules/ROOT/pages/02-04-validating-env.adoc new file mode 100644 index 00000000..e2b15ac1 --- /dev/null +++ b/content/modules/ROOT/pages/02-04-validating-env.adoc @@ -0,0 +1,43 @@ += Validating the environment +include::_attributes.adoc[] + +Now that you are connected to your workbench, let's make sure that all the expected services are responding properly in the cluster. + +In your workbench: + +. In the left hand navigation menu, navigate to the folder called: `insurance-claim-processing/lab-materials/02` + +. Open the notebook called `02-04-validating.ipynb` + +. If you have never executed Cells in a Jupyter Notebook before, here is what you need to do: + +.. Click on the **Restart kernel and Run all Cells** link: ++ +[.bordershadow] +image::02/02-04-restart-and-run.png[] +.. Click **Restart** : ++ +[.bordershadow] +image::02/02-04-restart-kernel.png[] ++ +. Running these cells will confirm that all the lab-required services are responding. + +The output should look as follows: + +[source,console] +---- +Success: Minio is reachable on minio.ic-shared-minio.svc.cluster.local:9000 +Success: Gitea is reachable on gitea.gitea.svc.cluster.local:3000 +Success: Postgres Database is reachable on claimdb.ic-shared-db.svc.cluster.local:5432 +Success: LLM Service is reachable on llm.ic-shared-llm.svc.cluster.local:3000 +Success: ModelMesh is reachable on modelmesh-serving.ic-shared-img-det.svc.cluster.local:8033 +---- + +If the output of this notebook looks suspicious, please inform the people leading the lab. + +== Overall view + +This is a summarized visualization of how the environment is laid out. + +[.bordershadow] +image::02/ic-eng-diag.drawio.svg[] diff --git a/content/modules/ROOT/pages/03-01-notebook-based-llm.adoc b/content/modules/ROOT/pages/03-01-notebook-based-llm.adoc index 96d8277c..031e84e6 100644 --- a/content/modules/ROOT/pages/03-01-notebook-based-llm.adoc +++ b/content/modules/ROOT/pages/03-01-notebook-based-llm.adoc @@ -3,6 +3,6 @@ include::_attributes.adoc[] In this exercise, we will use a notebook to investigate how LLMs can be used. -From the `lab-materials/03` folder, please open the notebook called `03-01-nb-llm-example.ipynb` and follow the instructions. +From the `insurance-claim-processing/lab-materials/03` folder, please open the notebook called `03-01-nb-llm-example.ipynb` and follow the instructions. -When done, you can close the notebook and head for the next page. +When done, you can close the notebook and head to the next page. diff --git a/content/modules/ROOT/pages/03-02-summarization.adoc b/content/modules/ROOT/pages/03-02-summarization.adoc index ad0ac1ec..6fe5c35b 100644 --- a/content/modules/ROOT/pages/03-02-summarization.adoc +++ b/content/modules/ROOT/pages/03-02-summarization.adoc @@ -3,6 +3,6 @@ include::_attributes.adoc[] As part of our claim processing, we want to summarize the text of a claim. In the next notebook we will investigate how the LLM can be used to do this task. -From the `lab-materials/03` folder, please open the notebook called `03-02-summarization.ipynb` and follow the instructions. +From the `insurance-claim-processing/lab-materials/03` folder, please open the notebook called `03-02-summarization.ipynb` and follow the instructions. -When done, you can close the notebook and head for the next page. +When done, you can close the notebook and head to the next page. diff --git a/content/modules/ROOT/pages/03-03-information-extractions.adoc b/content/modules/ROOT/pages/03-03-information-extractions.adoc index a6feb7cd..60e65537 100644 --- a/content/modules/ROOT/pages/03-03-information-extractions.adoc +++ b/content/modules/ROOT/pages/03-03-information-extractions.adoc @@ -3,6 +3,6 @@ include::_attributes.adoc[] As part of our claim processing, we want to extract some information from the text of a claim. In the next notebook we will investigate how the LLM can be used to do this task. -From the `lab-materials/03` folder, please open the notebook called `03-03-information-extraction.ipynb` and follow the instructions. +From the `insurance-claim-processing/lab-materials/03` folder, please open the notebook called `03-03-information-extraction.ipynb` and follow the instructions. -When done, you can close the notebook and head for the next page. +When done, you can close the notebook and head to the next page. diff --git a/content/modules/ROOT/pages/03-04-comparing-models.adoc b/content/modules/ROOT/pages/03-04-comparing-models.adoc index 172c48b6..24469054 100644 --- a/content/modules/ROOT/pages/03-04-comparing-models.adoc +++ b/content/modules/ROOT/pages/03-04-comparing-models.adoc @@ -1,8 +1,11 @@ = Comparing Models include::_attributes.adoc[] -So far, for this workshop, we have used the model https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2[Mistral-7B Instruct v2]. Although lighter than other models, it is still quite heavy and we need a large GPU to run it. Would we get as good results with a smaller model? Let's try! +So far, for this lab, we have used the model https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2[Mistral-7B Instruct v2,window=_blank]. Although lighter than other models, it is still quite heavy and we need a large GPU to run it. Would we get as good results with a smaller model? Let's try! -From the `lab-materials/03` folder, please open the notebook called `03-04-comparing-models.ipynb` and follow the instructions. +In this exercise, we'll pitch it against a much smaller LLM called https://huggingface.co/google/flan-t5-small[flan-t5-small,window=_blank]. -When done, you can close the notebook and head for the next page. + +From the `insurance-claim-processing/lab-materials/03` folder, please open the notebook called `03-04-comparing-models.ipynb` and follow the instructions. + +When done, you can close the notebook and head to the next page. diff --git a/content/modules/ROOT/pages/03-05-prompt-engineering.adoc b/content/modules/ROOT/pages/03-05-prompt-engineering.adoc index ab6cd222..e9a02141 100644 --- a/content/modules/ROOT/pages/03-05-prompt-engineering.adoc +++ b/content/modules/ROOT/pages/03-05-prompt-engineering.adoc @@ -1,28 +1,32 @@ -= Prompt Engineering exercise += Prompt Engineering exercise (optional) include::_attributes.adoc[] +NOTE: This part of the lab is marked as optional. It can therefore be skipped without effect on the other parts of the lab. You can always come back to it later at the end of the lab if you have time to spare. + +IMPORTANT: When you interact with ChatGPT or other commercial services, a lot of guardrails are in place to prevent you from getting unwanted or not suitable for work results. In our Lab exercises, we are using a model that is not protected by those guardrails, and we will be modifying its settings. Therefore, it is your responsibility to do it in a safe way, and to make sure that the results you get are suitable for you and/or your audience. The authors of this Lab cannot be held responsible for any inappropriate results you may get. + As you have seen in the previous sections, there are different factors that will influence the results you can get from your model: the model parameters, the prompt, the query, and of course the data itself... Let's see how we can adjust those different factors to get the best results. == Modifying the settings -Go back to the notebook `03-01-nb-llm-example.ipynb` and try to change the following to see how it impacts the results: +Go back to the notebook `03-01-nb-llm-example.ipynb` and try changing: -- The llm parameters, like the `temperature`, to make the model more creative. +- The llm parameters, like the `temperature`, to make the model more creative - The `prompt template`, to make the model behave differently, like giving the answer in the form of a poem. Or more useful in an enterprise context, give answers like it was addressing different types of audience: for example 5 years old children, or people without technical knowledge, or the opposite... -- The `query` itself which you can use to override certain aspects of the prompt. This will show you why it's important to have guardrails in place against "prompt injection", like pre-filtering user queries. +- The `query` itself which you can use to override certain aspects of the prompt. This will show you why it's important to have guardrails in place against "prompt injection", like pre-filtering user queries == Modifying the data -Go back to the notebook `03-02-summarization.ipynb` and try to change the following to see how it impacts the results: +Go back to the notebook `03-02-summarization.ipynb` and try changing: - Edit or create new claims, making them harder to understand. (Note: to edit the json file in Jupyter, right click on it and select "Open With > Editor") -- Experiment with different languages. +- Experiment with different languages == Modifying the prompt -Go back to the notebook `03-03-information-extraction.ipynb` and try to change the following to see how it impacts the results: +Go back to the notebook `03-03-information-extraction.ipynb` and try changing: -- Edit or create new claims, making them harder to understand. -- Try to have the model more precise and concise in date and time extraction, like making it respect a specific format. +- Edit or create new claims, making them harder to understand +- Try to have the model more precise and concise in date and time extraction, like making it respect a specific format diff --git a/content/modules/ROOT/pages/03-06-sanity-check.adoc b/content/modules/ROOT/pages/03-06-sanity-check.adoc index 5c747aed..69a82427 100644 --- a/content/modules/ROOT/pages/03-06-sanity-check.adoc +++ b/content/modules/ROOT/pages/03-06-sanity-check.adoc @@ -2,21 +2,19 @@ include::_attributes.adoc[] == What will the pipeline do? -To make sure that everything works as we would expect it, and that the LLM model has not been tampered with, we need to create a sanity-check pipeline that tests the model through its endpoint. + -We will test the response time, the response quality, and that the model hash has not changed. - -== Deploy a pipeline Server in your project - -This step was already done as part of the project setup. +To make sure that everything works as we would expect it to, and that the model has not been tampered with, we will create a sanity-check pipeline that tests the model through its endpoint. + +We will test the response time, the response quality, and that the model hash has not changed. + +And to make sure it stays the same over time, we'll schedule that pipeline. == Deploy a sanity-check pipeline -In the `lab-materials/03/06` folder there are two pipeline files, one *sanity_check.pipeline* and one *sanity_check.yaml* file. +In the `insurance-claim-processing/lab-materials/03/06` folder there are two pipeline files, one `sanity_check.pipeline` and one `sanity_check.yaml` file. -The `.pipeline` file can be opened in Elyra to be visually modified and executed, while the `.yaml` file can be imported into the pipeline server through the dashboard. + +The `.pipeline` file can be opened in Elyra to be visually modified and executed, while the `.yaml` file can be imported into the pipeline server through the RHOAI Dashboard. + Here we will be running the pipeline through Elyra. == Ad-Hoc execution + Running it through Elyra is the same as doing an ad-hoc execution of the pipeline, as opposed to importing the pipeline which won't automatically execute it. . Start by going to your running workbench @@ -27,7 +25,7 @@ Running it through Elyra is the same as doing an ad-hoc execution of the pipelin .. response time check .. security check . Feel free to peek into each of the python files by double clicking on the nodes to see what they do. + -. After the tests have been ran, we have a final function that will summarize the results and log them. +. After the tests have been run, we have a final function that will summarize the results and log them. . To run the pipeline, press the Play button in the menu bar. + [.bordershadow] @@ -41,7 +39,7 @@ image::03/03-07-run-pipeline-ok.png[] == Schedule execution -We can also **schedule** an execution so that the sanity check is ran at regular intervals. + +We can also **schedule** an execution so that the sanity check is executed at regular intervals. + To do that: . Go back to the OpenShift AI Data Science Project @@ -51,10 +49,10 @@ To do that: [.bordershadow] image::03/07-create-run.png[create run] -. On the next screen, choose a name, select **Hourly** and click **Create**: +. On the next screen, choose a name, select a Periodic run to trigger every **Day** and click **Create**: + [.bordershadow] -image::03/03-07-hourlyrun.png[] +image::03/03-06-dailyrun.png[] . We can now leave the sanity-check pipeline alone. -. It will run hourly, and will inform us if anything goes wrong with our LLM model. \ No newline at end of file +. It will run daily, and will inform us if anything goes wrong with our LLM. \ No newline at end of file diff --git a/content/modules/ROOT/pages/04-01-over-approach.adoc b/content/modules/ROOT/pages/04-01-over-approach.adoc index 776a5eac..0acb9043 100644 --- a/content/modules/ROOT/pages/04-01-over-approach.adoc +++ b/content/modules/ROOT/pages/04-01-over-approach.adoc @@ -1,21 +1,19 @@ = Overall Approach include::_attributes.adoc[] -As part of this prototype, we investigated the use of the YOLOV8 model. +As part of this prototype, we investigated the use of the YOLOv8 model. This model can be found online at https://www.yolov8.com[yolov8,window=_blank] and downloaded. -We will first review its out-of-the-box capabilities. We will then fine-tune it to allow it to do more specialized work for us. Once we have a new, customized version of the model, we will deploy it in ModelMesh. Once that is done, we will send queries to it. +We will first review its out-of-the-box capabilities. We will then fine-tune it to allow it to do more specialized work for us. Once we have a new, customized version of the model, we will deploy it in OpenShift AI Model Serving. Once that is done, we will send queries to it. -Let's start by looking at a yolov8 model and explore how it works on static car images. +Let's start by looking at a YOLOv8 model and explore how it works on static car images. [.bordershadow] image::04/sample-car-image.png[car image] -In your running pytorch workbench, navigate to the folder `lab-materials/04`. - -. Look for (and open) the notebook called `04-01-over-approach.ipynb` - -. Execute the cells of the notebook, and ensure you understand what is happening +- In your running workbench, navigate to the folder `insurance-claim-processing/lab-materials/04`. +- Look for (and open) the notebook called `04-01-over-approach.ipynb` +- Execute the cells of the notebook, and ensure you understand what is happening diff --git a/content/modules/ROOT/pages/04-02-car-recog.adoc b/content/modules/ROOT/pages/04-02-car-recog.adoc index 0bcc3d79..6454cce9 100644 --- a/content/modules/ROOT/pages/04-02-car-recog.adoc +++ b/content/modules/ROOT/pages/04-02-car-recog.adoc @@ -1,12 +1,12 @@ = Car recognition include::_attributes.adoc[] -In our last notebook we confirmed that the YOLO model could identify cars in a photograph. +In our last notebook we confirmed that the YOLO model could identify cars in a photograph. [.bordershadow] image::04/sample-car-image.png[car image] -We also confirmed that while a YOLO model can identify multiple 'cars' in an image, humans may have a difficult time verifying the identified cars. +We discovered that YOLO is able to detect multiple cars in an image. However, we did not see which cars were identified. [.bordershadow] image::04/multiple-car-images.png[multiple cars] @@ -14,18 +14,15 @@ image::04/multiple-car-images.png[multiple cars] [.bordershadow] image::04/model-prediction-results.png[predict cars] -In the above image, the yolo model identified 17 cars and 1 truck. Which cars ,in the above image, were identified? +In the above image, the yolo model identified 17 cars and 1 truck. -Therefore we need to write some code that will place 'boxes' around the 'cars' identified by the YOLO model. +Therefore we need to write some code that will draw boxes around the cars identified by the YOLO model. [.bordershadow] image::04/box-identified-cars.png[identify cars] - -. In your running pytorch workbench, navigate to the folder `lab-materials/04`. - -. Look for (and open) the notebook called `04-02-car-recognition.ipynb` - -. Execute the cells of the notebook, and ensure you understand what is happening +- In your running workbench, navigate to the folder `insurance-claim-processing/lab-materials/04`. +- Look for (and open) the notebook called `04-02-car-recognition.ipynb` +- Execute the cells of the notebook, and ensure you understand what is happening diff --git a/content/modules/ROOT/pages/04-03-model-retraining.adoc b/content/modules/ROOT/pages/04-03-model-retraining.adoc index 9032cf2b..afdaf749 100644 --- a/content/modules/ROOT/pages/04-03-model-retraining.adoc +++ b/content/modules/ROOT/pages/04-03-model-retraining.adoc @@ -1,7 +1,7 @@ = Model Retraining include::_attributes.adoc[] -To retrain the YOLO model we need a prepared dataset of car images with moderate and severe accident labels. We have such a dataset (from https://universe.roboflow.com/accident-detection-ffdrf/accident-detection-8dvh5/dataset/1[RoboFlow,window=_blank] ) that has annotated images and has split them into training and validation datasets. We will use this training set to retrain our currentl YOLO model. +To retrain the YOLO model we need a prepared dataset of car images with moderate and severe accident labels. We have such a dataset (from https://universe.roboflow.com/accident-detection-ffdrf/accident-detection-8dvh5/dataset/1[RoboFlow,window=_blank] ) that has annotated images and has split them into training and validation datasets. We will use this training set to retrain our current YOLO model. [.bordershadow] image::04/roboflow-test-images.png[roboflow images] @@ -15,52 +15,42 @@ image::04/roboflow-test-images.png[roboflow images] 3. Each image has an annotation text file in the 'labels' subfolder. The annotation text files have the same names as the image files. ==== -We have provided the following 2 training data sets, available as 'zip files', and located in an S3 bucket: - -1. accident-full.zip - to be used to fully re-train the model. -2. accident-sample.zip - to be used to partially re-train the model when we don't have the time to fully re-train the model. - -Your instructor will let you know which data set 'zip file' you will be using in your workshop. - -Once the images and associated annotations are ready, we create a dataset descriptor YAML file (data.yaml) that points to the created datasets and describes the object classes in them. This YAML file is passed to the 'train' method of the model to start the training process. - -[.bordershadow] -image::04/yaml-file.png[yaml file] - -. In your running pytorch workbench, navigate to the folder `lab-materials/04`. - -. Look for (and open) the notebook called `04-03-model-retraining.ipynb` - -. Execute the cells of the notebook. But note that the actual training step would take way too long on CPU. Stop/terminate the kernel, to free up resources. - - +We have provided the following training data set, available as a zip file, and located in an S3 bucket: `accident-sample.zip` (as we don,t have time in this Lab to fully retrain the model, we will use a sample of the training data set). +- In your running workbench, navigate to the folder `insurance-claim-processing/lab-materials/04`. +- Look for (and open) the notebook called `04-03-model-retraining.ipynb` +- Execute the cells of the notebook. == Interpreting the Model re-Training Results [%collapsible] ==== +The following training run shows the results for the full dataset. + Let's start by understanding what an 'epoch' is. Machine learning models are trained with specific datasets passed through the algorithm. Each time a dataset passes through an algorithm, it is said to have completed an epoch. Therefore, epoch, in machine learning, refers to the one entire passing of training data through the algorithm -In the training run below you would see 'n' number of epochs based on the number of epoch training runs you set in the following code snippet: -results = model.train(data='data.yaml', epochs=1, imgsz=640) +In the training run below you can see a training run of 7 epochs with a batch size of 32 (meaning 32 images were analyzed simultaneously), that were set through the following code snippet: +results = model.train(data='./datasets/accident-full/data.yaml', epochs=7, imgsz=640, batch=32) -In your training run, each epoch will show a summary for both the training and validation phases: lines 1 and 2 show results of the training phase and lines 3 and 4 show the results of the validation phase for each epoch. +In the training run, each epoch shows a summary for both the training and validation phases: lines 1 and 2 show results of the training phase and lines 3 and 4 show the results of the validation phase for each epoch. image::04/model-retraining-summary.png[retraining summary] -The training phase includes a calculation of the amount of error in a loss function, so the most valuable metrics here are box_loss and cls_loss. +The training phase includes a calculation of the amount of error in a loss function, so the most valuable metrics here are box_loss and cls_loss: + +* box_loss shows the amount of errors in detected bounding boxes. +* cls_loss shows the amount of errors in detected object classes. -box_loss shows the amount of error in detected bounding boxes. -cls_loss shows the amount of error in detected object classes. +If the model really learns something from the data, we should see that these values decrease from epoch to epoch. + +In the previous screenshot the box_loss decreased from 1.219 on the first epoch to 0.8386 in the last, and the cls_loss decreased from 1.875 to 0.9001. -If the model really learns something from the data, then you should see that these values decrease from epoch to epoch. -In a previous screenshot the box_loss decreased: 1.271, 1.113, 0.8679 and the cls_loss decreased too: 1.893, 1.404, 0.9703. +The other valuable quality metric is mAP50-95, which is Mean Average Precision. If the model learns and improves, the precision should grow from epoch to epoch. + +In the previous screenshot mAP50-95 increased from 0.423 (epoch1) to 0.755 (epoch7). -The most valuable quality metric is mAP50-95, which is Mean Average Precision. If the model learns and improves, the precision should grow from epoch to epoch. In a previous screenshot mAP50-95 increased: 0.314 (epoch1), 0.663 (epoch4), 0.882 (epoch7) +We can also see that throughout the training, the GPU was used, with a memory consumption of a little bit more than 13GB. If after the last epoch you did not get acceptable precision, you can increase the number of epochs and run the training again. Also, you can tune other parameters like batch, lr0, lrf or change the optimizer you're using. During training we export the trained model, after each epoch, to the /runs/detect/train/weights/last.pt file and the model with the highest precision to the /runs/detect/train/weights/best.pt file. So, after training is finished, you can get the best.pt file to use in production. -Note: In real world problems, you need to run much more epochs (then we have shown here) and be prepared to wait hours or days (like we did!) until training finishes. +Note: In real world problems, you need to run many more epochs than we have shown here, and be prepared to wait hours or days until training finishes, and not a mere 16 minutes as we did in this example. ==== \ No newline at end of file diff --git a/content/modules/ROOT/pages/04-04-accident-recog.adoc b/content/modules/ROOT/pages/04-04-accident-recog.adoc index 4d66cf5c..df2e0816 100644 --- a/content/modules/ROOT/pages/04-04-accident-recog.adoc +++ b/content/modules/ROOT/pages/04-04-accident-recog.adoc @@ -3,18 +3,15 @@ include::_attributes.adoc[] Now that we have retrained our model we can test it against some sample images. -We have converted our model to onnx format and placed a copy within an amazon s3 bucket. We will test this version against some sample test images. +We have converted our model to onnx format and placed a copy within an S3 bucket. We will test this version against some sample test images. - -Using the re-trained model, on the below image, we see that the model is able to identify a 'severe' car crash with '88%' probability. +Using the re-trained model, we will see that we are able to identify a severe car crash with 88% certainty, like in the below picture. [.bordershadow] image::04/retrained-model-results.png[retrained modelresults] +To test the model yourself: - -. In your running pytorch workbench, navigate to the folder `lab-materials/04`. - -. Look for (and open) the notebook called `04-04-accident-recog.ipynb` - -. Execute the cells of the notebook. +- In your workbench, navigate to the folder `insurance-claim-processing/lab-materials/04`. +- Look for (and open) the notebook called `04-04-accident-recog.ipynb` +- Execute the cells of the notebook. diff --git a/content/modules/ROOT/pages/04-05-serving-manual.adoc b/content/modules/ROOT/pages/04-05-model-serving.adoc similarity index 57% rename from content/modules/ROOT/pages/04-05-serving-manual.adoc rename to content/modules/ROOT/pages/04-05-model-serving.adoc index 159df200..e7075386 100644 --- a/content/modules/ROOT/pages/04-05-serving-manual.adoc +++ b/content/modules/ROOT/pages/04-05-model-serving.adoc @@ -1,14 +1,14 @@ -= Model Serving (Manual) += Model Serving include::_attributes.adoc[] . At this point, we need to deploy the model into RHOAI model serving. -. Look at the information used to create the Data Connection that was used for the pipeline server. - -. Re-create another data connection, with identical information, but change the bucket name from `userX` to 'models' +. We will create another data connection... +.. with almost identical information +.. but we will change the bucket name from `userX` to `models` == Create a Data Connection -* In your project, create a data connection that maps to the shared minio. +* In your Data Science project, create a data connection that refers to the shared minio. * Here is the info you need to enter: ** Name: [.lines_space] @@ -56,12 +56,13 @@ image::04/model-data-connection.png[model connection] In your project create a model server. -* Click 'Add server' +* Click **Add model server** + [.bordershadow] image::04/add-model-server.png[] * Here is the info you need to enter: + ** Model server name: [.lines_space] [.console-input] @@ -85,7 +86,13 @@ OpenVINO Model Server [.console-input] [source, text] [subs=attributes+] -standard +Standard +** Accelerator +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +None ** Model route [.lines_space] [.console-input] @@ -100,16 +107,18 @@ unchecked unchecked -The result should look like: +* The result should look like: + [.bordershadow] -image::04/add-model-server2.png[] +image::04/add-model-server-config.png[] + +* You can click on **Add** to create the model server. == Deploy the Model -In your project, under 'Models and model servers' select 'Deploy model'. +In your project, under **Models and model servers** select **Deploy model**. -* Click 'Deploy model' +* Click **Deploy model** + [.bordershadow] image::04/select-deploy-model.png[] @@ -145,30 +154,37 @@ Shared Minio - model [.console-input] [source, text] [subs=attributes+] -http://modelmesh-serving.user1:8008/v2/models/my-first-model/accident_detect.onnx +accident/ -The result should look like: +* The result should look like: + [.bordershadow] image::04/deploy-a-model.png[] - -If the model is successfully deployed you will see its status as green. +* Click on **Deploy**. +* If the model is successfully deployed you will see its status as green after 15 to 30 seconds. + [.bordershadow] image::04/model-deployed-success.png[] -Now confirm that the model is working! +We will now confirm that the model is indeed working by querying it! -== Confirm the Model is working -Once the model has been deployed, we need to confirm that the model is working in model mesh. +== Querying the served Model +Once the model is served, we can use it as an endpoint that can be queried. We'll send a request to it, and get a result. And unlike our earlier notebook-based version, this applies to anyone working within our cluster. This could either be colleagues, or applications. -. In your running pytorch workbench, navigate to the folder `lab-materials/04`. - -. Look for (and open) the notebook called `04-05-serving-mannual.ipynb`. +* First, we need to get the URL of the model server. +* To do this, click on the **Internal Service** link under the **Inference endpoint** column. +* In the popup, you will see a few URLs for our model server. ++ +[.bordershadow] +image::04/inference-url.png[] -. Execute the cells of the notebook, and ensure you understand what is happening. +* Note or copy the **RestUrl**, which should be something like `\http://modelmesh-serving.{user}:8008` +We will now use this URL to query the model. +- In your running workbench, navigate to the folder `insurance-claim-processing/lab-materials/04`. +- Look for (and open) the notebook called `04-05-model-serving.ipynb`. +- Execute the cells of the notebook, and ensure you understand what is happening. diff --git a/content/modules/ROOT/pages/04-06-serving-automated.adoc b/content/modules/ROOT/pages/04-06-serving-automated.adoc deleted file mode 100644 index 317d3435..00000000 --- a/content/modules/ROOT/pages/04-06-serving-automated.adoc +++ /dev/null @@ -1,22 +0,0 @@ -= Model Serving (Automated) -include::_attributes.adoc[] - -OPTIONAL. Skip for now, you can come back if you have some time at the end. - -== Get an OpenShift Token - - -== Deploy your own gitops server in your namespace - -[.lines_space] -[.console-input] -[source, text] -[subs=attributes+] -oc apply ... something here - - -== Create a gitops app defining your model server and model - - -== Updating your model deployment via git - diff --git a/content/modules/ROOT/pages/05-01-application.adoc b/content/modules/ROOT/pages/05-01-application.adoc new file mode 100644 index 00000000..baea214a --- /dev/null +++ b/content/modules/ROOT/pages/05-01-application.adoc @@ -0,0 +1,65 @@ += Application Overview +include::_attributes.adoc[] + +== Architecture + +Here is a simplified architecture diagram of the application: + +[.bordershadow] +image::05/application-architecture.drawio.svg[] + + +The different components are: + +- The **frontend**: the application itself, developed using the Patternfly framework (React, Typescript), running in the browser of the user. +- The **backend**: a Python FastAPI application, running in a container on OpenShift. It handles the communication with the database, the LLM, and the Object storage. It handles the communication with the frontend by exposing a REST API. +- The **database**: a PostgreSQL database, running in a container on OpenShift. It stores the claims. +- The **LLM**: the language model used to summarize and extract information from the claims. It is consumed by the backend through its API. +- The **Object storage**: an S3-compatible object storage. It stores the claim images. + +== Application Code + +If you want to have a look at the code of the application, you can do it directly from OpenShift AI! + +- Close the different Jupyter tabs that may still be opened in your browser. +- Go back to the OpenShift AI dashboard. +- Stop your Workbench by using the toggle. +-- You should probably give it 5 or 10 seconds to fully stop. +- Edit the Workbench configuration by clicking on the menu item at the left, then **Edit workbench** button. ++ +[.bordershadow] +image::05/stop-workbench.png[] + +- In the image section, change the image to `CUSTOM - VSCode for Insurance Claim Processsing Lab`: ++ +[.bordershadow] +image::05/vscode-image.png[] +- Note that this is a Custom-built image added in this particular lab to illustrate the flexibility of the OpenShift AI platform. Not everyone wants to use Jupyter Notebooks for everything. + +- Then click on `Update workbench` at the bottom of the page: ++ +[.bordershadow] +image::05/update-workbench.png[] + +- You can now start your Workbench again by using the toggle. +- Once the Workbench is started, click on the **Open** Link. +- You will be redirected to the VSCode IDE. +- After logging in and accepting the authorization, VSCode will open. +- The first time you connect to it, you must indicate that you trust the workspace. +- Click on the **Yes, I trust the authors** button. ++ +[.bordershadow] +image::05/trust-vscode.png[] + +* You can also close the Welcome tab, and you are in a familiar VSCode environment. +* Your Persistent Volume has been automatically reconnected to this new environment. +** Therefore, all the data you created in the Jupyter environment is still available +** You can see more files because VSCode displays hidden files by default, which Jupyter does not do. +* If you want, you can now explore the code of the application, in the `app` folder: ++ +[.bordershadow] +image::05/app-code.png[] + +Of course, this is a complete VSCode environment, so you can configure it in the same way as you would do for a local VSCode installation. You can install extensions that will be persisted when you stop and restart the Workbench, you can configure your own keybindings, etc. + +The application has already been built as a container image that we are now ready to deploy using GitOps. You can head to the next section. \ No newline at end of file diff --git a/content/modules/ROOT/pages/05-01-web-app-deploy-manual.adoc b/content/modules/ROOT/pages/05-01-web-app-deploy-manual.adoc deleted file mode 100644 index 19035b4f..00000000 --- a/content/modules/ROOT/pages/05-01-web-app-deploy-manual.adoc +++ /dev/null @@ -1,37 +0,0 @@ -= Deploying your Web App manually -include::_attributes.adoc[] - -== Opening the OpenShift Console - -Access the OpenShift Console via this link: - -[.bordershadow] -image::05/01-openshift-console.png[] - -When prompted, enter your credentials. - -== Obtain a login token - -[.bordershadow] -image::05/01-copy-login-command.png[] - -* authenticate - -* Click Display Token - -* Copy the `oc login ...` command: - -[.bordershadow] -image::05/01-oc-login.png[] - -== Open a Web Terminal - -Click on the Web Terminal icon in the top right corner: - -[.bordershadow] -image::05/web-term-1.png[] - -Then, choose your existing project and click start: - -[.bordershadow] -image::05/web-term-2.png[] diff --git a/content/modules/ROOT/pages/05-02-openshift-terminal.adoc b/content/modules/ROOT/pages/05-02-openshift-terminal.adoc new file mode 100644 index 00000000..72547e04 --- /dev/null +++ b/content/modules/ROOT/pages/05-02-openshift-terminal.adoc @@ -0,0 +1,29 @@ += Working with the OpenShift Terminal +include::_attributes.adoc[] + +To deploy the application, you will use the OpenShift Web Terminal. + +This is a web-based terminal that allows you to execute commands on the OpenShift cluster from the OpenShift Console. + +== Opening the OpenShift Console + +- Access the OpenShift Console via this link: ++ +[.bordershadow] +image::05/01-openshift-console.png[] + +- When prompted, enter your credentials. + +== Open a Web Terminal + +- On the OpenShift Console, click on the Web Terminal icon in the top right corner: ++ +[.bordershadow] +image::05/web-term-1.png[] + +- Then, choose your existing project and click start: ++ +[.bordershadow] +image::05/web-term-2.png[] + +- After a few seconds, a Terminal interface will open. +- This is where you will execute the commands in the next steps. diff --git a/content/modules/ROOT/pages/05-02-web-app-deploy-gitops.adoc b/content/modules/ROOT/pages/05-02-web-app-deploy-gitops.adoc deleted file mode 100644 index 00540b0c..00000000 --- a/content/modules/ROOT/pages/05-02-web-app-deploy-gitops.adoc +++ /dev/null @@ -1,130 +0,0 @@ -= Deploying application via GitOps -include::_attributes.adoc[] - -== Deploy your instance of ArgoCD - -[.lines_space] -[.console-input] -[source, text] -cat < PersistentVolumeClaims. + +[.bordershadow] +image::05/05-PVC.png[go to PVC] + +Make sure you are in the right project (your username) and then press `Create PersistentVolumeClaim`. + +[.bordershadow] +image::05/05-create-pvc.png[Create PVC] + +* Use these settings: +** StorageClass: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +ocs-storagecluster-cephfs +** PersistentVolumeClaim name: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +processing-pipeline-storage +** Access mode: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +Shared access (RWX) +** Size: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +1 GiB + +[.bordershadow] +image::05/05-PVC-settings.png[PVC settings] + +Then press `Create`. + == Run the pipeline +To run the pipeline, start by downloading the `process_claims.yaml` file locally. + +Then go to your Data Science project and press Import Pipeline. + +[.bordershadow] +image::05/05-import-pipeline-button.png[import pipeline] + +Now upload process_claims.yaml file, either by drag-and-dropping or using the Upload button. Then make sure to give your pipeline a good name like `Process Claims Pipeline`. + +It should look something like this afterwards: + +[.bordershadow] +image::05/05-imported-pipeline.png[imported pipeline] + +Press `Import Pipeline` and you should see it pop up under your pipelines. + +Now go into the settings at the right side and press Create Run to create a new run of the pipeline you just added. + +[.bordershadow] +image::05/05-create-run.png[create run] + +* Use these settings: +** Name: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +Process Claim Run +** Run type: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +Run once immediately after creation +** claim_id: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +3 +** detection_endpoint: +[.lines_space] +[.console-input] +[source, text] +[subs=attributes+] +http://modelmesh-serving.{user}:8008 + +This is the same route to the object detection endpoint that was used earlier in the workshop. + +When done it should look something like this: + +[.bordershadow] +image::05/05-run-settings-create-pipeline.png[run settings] + +Note that by changing claim_id you can change which claim to process. If you set it to 0 it will process all unprocessed claims. + +Press `Create` and watch it go. -== Check the results \ No newline at end of file +== Check the results +After the pipeline has finished running, you can go to the app and take a look at the claims. + +Instead of just a long body, you will now see a summary, a location field, an accident time field, and a sentiment field. + +You can also see that we have new image(s) which have bounding boxes where the damage is. \ No newline at end of file diff --git a/content/modules/ROOT/pages/06-01-potential-imp-ref.adoc b/content/modules/ROOT/pages/06-01-potential-imp-ref.adoc index 50786737..5303e421 100644 --- a/content/modules/ROOT/pages/06-01-potential-imp-ref.adoc +++ b/content/modules/ROOT/pages/06-01-potential-imp-ref.adoc @@ -3,18 +3,18 @@ include::_attributes.adoc[] == To the lab materials -Although we welcome feedback, critique, we prefer https://github.com/rh-aiservices-bu/insurance-claim-processing/issues[Issues,window=_blank] and https://github.com/rh-aiservices-bu/insurance-claim-processing/pulls[Pull Requests,window=_blank]. +If you have any feedback regarding this Lab, please use https://github.com/rh-aiservices-bu/insurance-claim-processing/issues[Issues,window=_blank] and https://github.com/rh-aiservices-bu/insurance-claim-processing/pulls[Pull Requests,window=_blank]. But this section of the lab is not meant for Improvements and Refinements **to the lab**. Instead it is about... == To the presented prototype -What we have showed in this lab is a very rough prototype, put together very quickly, in order to demonstrate: +What we have shown in this lab is a very rough prototype, put together very quickly, in order to demonstrate: -* what could be done -* that it was do-able at all +* which improvements could be done +* how long it would take to do them -In such a situation, it's common to go fast and make short term decisions since there is no guarantee that this will become a real project. +In such a situation, it is common to go fast and make short-term decisions since there is no guarantee that this will become a real project. Therefore, now, we need to review what was done, and make suggestions along these axes. @@ -22,9 +22,30 @@ Therefore, now, we need to review what was done, and make suggestions along thes * Is our current application robust enough? Describe what scenarios might make it harder to use? -* How efficiently are we going to be able to make updates to its components if we need to? Is there a chance that making a change to the LLM model, the YOLOV8 model, the database, the application, we introduce breaking changes? +* How efficiently are we going to be able to make updates to its components if we need to? Is there a chance that making a change to the LLM model, the YOLOV8 model, the database, the application, will introduce breaking changes? -* If that is the case, what would we want to do to avoid those possibilities? +* If that is the case, what would we want to do to avoid those risks? * Which parts seem to still be manual and time-consuming, and how could we automate them better, to avoid human errors if we can. +**Think about these questions first** + +If you want to read what **we** thought could be improved, read below! (responses are not exhaustive) +[%collapsible] +==== + +* We could have something that analyzes the images and checks for discrepancies with the customer data, such as: +** not the same make or color car as what is on file +** mismatch in license plate, if visible in the picture +* We've only scratched the surface with gitops and pipelines here +** There was no performance testing done. If too many users connect at the same time, it might overwhelm either the app, the database, the LLM, etc... +* Currently, most simple changes would probably end up breaking the application. And the person who, for example decides to change Mistral7B for Flan-T5-Small would not necessarily realize that. +** It would be critical to have multiple instances (Dev/Test/UAT/Prod) of the application +** It would also be required to have integration pipelines run in these environments to confirm that changes made do not break the overall application. +* We could ask the LLM to start writing a response to the customer. +** It could be just to ask for missing details. +** or it could be to let them know whether the claim is accepted or denied +* However, to do this, the LLM would have to be aware of the policies that the insurance company uses to make those determinations. +** This could be an interesting use-case for the https://research.ibm.com/blog/retrieval-augmented-generation-RAG[RAG,window=_blank] approach. + +==== diff --git a/content/modules/ROOT/pages/07-01-end-of-lab.adoc b/content/modules/ROOT/pages/07-01-end-of-lab.adoc index ab17aa21..e12c0fe7 100644 --- a/content/modules/ROOT/pages/07-01-end-of-lab.adoc +++ b/content/modules/ROOT/pages/07-01-end-of-lab.adoc @@ -5,6 +5,8 @@ We hope that the materials we used during this time together were useful and gav If you notice https://github.com/rh-aiservices-bu/insurance-claim-processing/issues[issues,window=_blank] with the content and/or want to send us a https://github.com/rh-aiservices-bu/insurance-claim-processing/pulls[pull request,window=_blank], we'll appreciate it very much. +The instructions of this lab are always available at https://rh-aiservices-bu.github.io/insurance-claim-processing/[https://rh-aiservices-bu.github.io/insurance-claim-processing/,window=_blank]. Make note of this URL as it will be updated with new content as we continue to improve the lab. + == Acknowledgements Here is a list of people who have participated, directly or indirectly, to the creation and delivery of this lab. diff --git a/content/modules/ROOT/pages/index.adoc b/content/modules/ROOT/pages/index.adoc index f85d81ed..07b80891 100644 --- a/content/modules/ROOT/pages/index.adoc +++ b/content/modules/ROOT/pages/index.adoc @@ -7,6 +7,14 @@ This lab will illustrate how the use of various AI/ML technologies can be combin The information, code, models and techniques it contains are illustrations of what a first prototype could look like. It is not the definitive way of addressing the stated requirements. +== Disclaimer + +This lab is an example of what a customer could build using OpenShift AI. OpenShift AI has no specific feature related to Insurance Claim Processing. + +This lab makes use of large language models (LLM) and image processing models. These models are not included in the OpenShift AI product. They are provided as a convenience for this lab. + +The quality of these models is enough for a prototype. Choosing the right model to use in a production environment is a complex task that requires a lot of experimentation and tuning. This lab does not cover this aspect. + == Timetable This is a tentative timetable for the materials that will be presented today. @@ -35,13 +43,13 @@ a|- summarization check |Image Processing |20 | Hands-On a|- car recognition checks - re-training exercise -- model deployment (automated) +- model deployment |Web App |20 | Hands-On a|- deployment - update -|Productization |15 | Presentation + discussion +|Productization |5 | Presentation + discussion a|- What else could we add that would have value? - What else could we do following the same patterns? @@ -50,4 +58,4 @@ a|- What else could we add that would have value? == Contributing -If you are interested in contributing to this project, consult this GitHub Repo: https://github.com/rh-aiservices-bu/insurance-claim-processing/[https://github.com/rh-aiservices-bu/insurance-claim-processing/,window=_blank] \ No newline at end of file +If you are interested in contributing to this project, consult this GitHub Repo: https://github.com/rh-aiservices-bu/insurance-claim-processing/[https://github.com/rh-aiservices-bu/insurance-claim-processing/,window=_blank] diff --git a/lab-materials/02/02-03-validating.ipynb b/lab-materials/02/02-04-validating.ipynb similarity index 96% rename from lab-materials/02/02-03-validating.ipynb rename to lab-materials/02/02-04-validating.ipynb index ca0adde3..56f39820 100644 --- a/lab-materials/02/02-03-validating.ipynb +++ b/lab-materials/02/02-04-validating.ipynb @@ -69,7 +69,7 @@ " (\"gitea.gitea.svc.cluster.local\", 3000, \"Gitea\"),\n", " (\"claimdb.ic-shared-db.svc.cluster.local\", 5432, \"Postgres Database\"),\n", " (\"llm.ic-shared-llm.svc.cluster.local\", 3000, \"LLM Service\"),\n", - " # (\"modelmesh-serving.ic-shared-img-det.svc.cluster.local\", 8033, \"ModelMesh\"),\n", + " (\"modelmesh-serving.ic-shared-img-det.svc.cluster.local\", 8033, \"ModelMesh\"),\n", " # Add more services as needed\n", " ]\n", "\n", diff --git a/lab-materials/03/03-01-nb-llm-example.ipynb b/lab-materials/03/03-01-nb-llm-example.ipynb index f83b86eb..23b4302f 100644 --- a/lab-materials/03/03-01-nb-llm-example.ipynb +++ b/lab-materials/03/03-01-nb-llm-example.ipynb @@ -52,7 +52,7 @@ "source": [ "### Langchain\n", "\n", - "Langchain (https://www.langchain.com/) is a framework for developing applications powered by language models. It will take care for us of all the boiling plate code we would have to manually write to properly query an LLM.\n", + "Langchain (https://www.langchain.com/) is a framework for developing applications powered by language models. It will take care for us of all the boilerplate code we would have to manually write to properly query an LLM.\n", "\n", "We will start by creating an **llm** instance, defined by the location where the LLM API can be queried and some parameters that will be applied to the model. For example, `max_new_tokens` will instruct the model to answer with a maximum of 512 tokens (words or parts of words). `temperature`, set really low here, will instruct the model to stay truth-grounded, and not try to be too \"creative\". After all, we're not trying to write a fancy poem here!" ] diff --git a/lab-materials/03/03-04-comparing-models.ipynb b/lab-materials/03/03-04-comparing-models.ipynb index dc01e36b..f440f215 100644 --- a/lab-materials/03/03-04-comparing-models.ipynb +++ b/lab-materials/03/03-04-comparing-models.ipynb @@ -234,7 +234,7 @@ "id": "6e28a5b0-6c93-42ba-84dd-42e17746d11d", "metadata": {}, "source": [ - "As you can see, Flan-T5-Small is much faster. After all, it's an 80M parameters model only. It seems to work to some extent, but the results are nowhere near the ones from Mistral-7B.\n", + "As you can see, Flan-T5-Small is much faster. After all, it's an 80 Million parameters model only. It seems to work to some extent, but the results are nowhere near the ones from Mistral-7B, which is a 7 Billion parameter.\n", "\n", "The art of working with LLM is to find the right balance between the performance and accuracy you require, and the resources it takes along with the involved costs.\n", "\n", diff --git a/lab-materials/03/06/llm_usage.py b/lab-materials/03/06/llm_usage.py index b8de1d4c..a4eccac5 100644 --- a/lab-materials/03/06/llm_usage.py +++ b/lab-materials/03/06/llm_usage.py @@ -7,7 +7,7 @@ from langchain.evaluation import load_evaluator from langchain.embeddings import HuggingFaceEmbeddings -INFERENCE_SERVER_URL = os.environ.get("LLM_ENDPOINT") +INFERENCE_SERVER_URL = "http://llm.ic-shared-llm.svc.cluster.local:3000" MAX_NEW_TOKENS = 512 TOP_K = 10 TOP_P = 0.95 @@ -47,4 +47,4 @@ def similarity_metric(predicted_text, reference_text): with open('template.txt') as f: template = f.read() - summarize_with_template(input_text, template) \ No newline at end of file + infer_with_template(input_text, template) \ No newline at end of file diff --git a/lab-materials/03/06/sanity_check.pipeline b/lab-materials/03/06/sanity_check.pipeline index 61f691cc..3326256b 100644 --- a/lab-materials/03/06/sanity_check.pipeline +++ b/lab-materials/03/06/sanity_check.pipeline @@ -30,7 +30,7 @@ "kubernetes_shared_mem_size": {}, "kubernetes_tolerations": [], "mounted_volumes": [], - "runtime_image": "quay.io/rlundber/rh1/sanity_pipeline:1.7", + "runtime_image": "quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-sanity-pipeline:1.0", "filename": "test_response_quality.py" }, "label": "", @@ -278,23 +278,7 @@ "kubernetes_tolerations": [], "kubernetes_pod_annotations": [], "mounted_volumes": [], - "kubernetes_secrets": [ - { - "env_var": "LLM_ENDPOINT", - "name": "llm-info", - "key": "LLM_ENDPOINT" - }, - { - "env_var": "MODEL_SHA", - "name": "llm-info", - "key": "MODEL_SHA" - }, - { - "env_var": "SERVING_SHA", - "name": "llm-info", - "key": "SERVING_SHA" - } - ], + "kubernetes_secrets": [], "env_vars": [], "runtime_image": "quay.io/modh/runtime-images@sha256:7dd23e58291cad7a0ab4a8e04bda06492f2c027eb33b226358380db58dcdd60b" } diff --git a/lab-materials/03/06/sanity_check.yaml b/lab-materials/03/06/sanity_check.yaml index ce777e8a..5fe740cf 100644 --- a/lab-materials/03/06/sanity_check.yaml +++ b/lab-materials/03/06/sanity_check.yaml @@ -46,7 +46,7 @@ spec: sh -c "mkdir -p ./jupyter-work-dir && cd ./jupyter-work-dir" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/bootstrapper.py' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/bootstrapper.py --output bootstrapper.py" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/requirements-elyra.txt' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/requirements-elyra.txt --output requirements-elyra.txt" - sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-1215145442' --cos-dependencies-archive 'test_response_quality-d0510f0c-fc50-42fc-a598-97e26b34ed88.tar.gz' --file 'insurance-claim-processing/lab-materials/03/test_response_quality.py' --outputs 'quality_result.json' " + sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-0109084010' --cos-dependencies-archive 'test_response_quality-d0510f0c-fc50-42fc-a598-97e26b34ed88.tar.gz' --file 'insurance-claim-processing/lab-materials/03/06/test_response_quality.py' --outputs 'quality_result.json' " command: - sh - -c @@ -71,22 +71,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] - - name: LLM_ENDPOINT - valueFrom: - secretKeyRef: - key: LLM_ENDPOINT - name: llm-info - - name: MODEL_SHA - valueFrom: - secretKeyRef: - key: MODEL_SHA - name: llm-info - - name: SERVING_SHA - valueFrom: - secretKeyRef: - key: SERVING_SHA - name: llm-info - image: quay.io/rlundber/rh1/sanity_pipeline:1.7 + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-sanity-pipeline:1.0 stepTemplate: volumeMounts: - name: mlpipeline-metrics @@ -103,11 +88,11 @@ spec: elyra/node-name: test_response_quality pipelines.kubeflow.org/cache_enabled: "true" annotations: - elyra/node-file-name: insurance-claim-processing/lab-materials/03/test_response_quality.py + elyra/node-file-name: insurance-claim-processing/lab-materials/03/06/test_response_quality.py elyra/pipeline-source: sanity_check.pipeline pipelines.kubeflow.org/task_display_name: test_response_quality pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", - "outputs": [], "version": "Run a file@sha256=7e955de34869fba374b1d87fd591922910d2f2490d11e7fdd1312ae0749a0742"}' + "outputs": [], "version": "Run a file@sha256=5358a652664edc3aa96dcbf0002719b8c6b6b4dfa176a48c3c3786c22766358e"}' - name: run-a-file-2 taskSpec: steps: @@ -117,7 +102,7 @@ spec: sh -c "mkdir -p ./jupyter-work-dir && cd ./jupyter-work-dir" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/bootstrapper.py' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/bootstrapper.py --output bootstrapper.py" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/requirements-elyra.txt' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/requirements-elyra.txt --output requirements-elyra.txt" - sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-1215145442' --cos-dependencies-archive 'test_responsetime-c50bb14f-a036-4af1-b5dc-21e48eb80f7f.tar.gz' --file 'insurance-claim-processing/lab-materials/03/test_responsetime.py' --outputs 'responsetime_result.json' " + sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-0109084010' --cos-dependencies-archive 'test_responsetime-c50bb14f-a036-4af1-b5dc-21e48eb80f7f.tar.gz' --file 'insurance-claim-processing/lab-materials/03/06/test_responsetime.py' --outputs 'responsetime_result.json' " command: - sh - -c @@ -142,21 +127,6 @@ spec: valueFrom: fieldRef: fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] - - name: LLM_ENDPOINT - valueFrom: - secretKeyRef: - key: LLM_ENDPOINT - name: llm-info - - name: MODEL_SHA - valueFrom: - secretKeyRef: - key: MODEL_SHA - name: llm-info - - name: SERVING_SHA - valueFrom: - secretKeyRef: - key: SERVING_SHA - name: llm-info image: quay.io/modh/runtime-images@sha256:7dd23e58291cad7a0ab4a8e04bda06492f2c027eb33b226358380db58dcdd60b stepTemplate: volumeMounts: @@ -174,11 +144,11 @@ spec: elyra/node-name: test_responsetime pipelines.kubeflow.org/cache_enabled: "true" annotations: - elyra/node-file-name: insurance-claim-processing/lab-materials/03/test_responsetime.py + elyra/node-file-name: insurance-claim-processing/lab-materials/03/06/test_responsetime.py elyra/pipeline-source: sanity_check.pipeline pipelines.kubeflow.org/task_display_name: test_responsetime pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", - "outputs": [], "version": "Run a file@sha256=afa090f686bb464016ab6640a960b8e31b88c415166d799c2c734f6e9ba58f6a"}' + "outputs": [], "version": "Run a file@sha256=3e58a6283faf2610ead4310f242aa11d207880bb328d65d9b80064eac003274c"}' - name: run-a-file-3 taskSpec: steps: @@ -188,7 +158,7 @@ spec: sh -c "mkdir -p ./jupyter-work-dir && cd ./jupyter-work-dir" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/bootstrapper.py' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/bootstrapper.py --output bootstrapper.py" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/requirements-elyra.txt' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/requirements-elyra.txt --output requirements-elyra.txt" - sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-1215145442' --cos-dependencies-archive 'test_security-6b595dc7-afb8-46bb-bf52-7cd695ddafb8.tar.gz' --file 'insurance-claim-processing/lab-materials/03/test_security.py' --outputs 'security_result.json' " + sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-0109084010' --cos-dependencies-archive 'test_security-6b595dc7-afb8-46bb-bf52-7cd695ddafb8.tar.gz' --file 'insurance-claim-processing/lab-materials/03/06/test_security.py' --outputs 'security_result.json' " command: - sh - -c @@ -213,21 +183,6 @@ spec: valueFrom: fieldRef: fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] - - name: LLM_ENDPOINT - valueFrom: - secretKeyRef: - key: LLM_ENDPOINT - name: llm-info - - name: MODEL_SHA - valueFrom: - secretKeyRef: - key: MODEL_SHA - name: llm-info - - name: SERVING_SHA - valueFrom: - secretKeyRef: - key: SERVING_SHA - name: llm-info image: quay.io/modh/runtime-images@sha256:7dd23e58291cad7a0ab4a8e04bda06492f2c027eb33b226358380db58dcdd60b stepTemplate: volumeMounts: @@ -245,11 +200,11 @@ spec: elyra/node-name: test_security pipelines.kubeflow.org/cache_enabled: "true" annotations: - elyra/node-file-name: insurance-claim-processing/lab-materials/03/test_security.py + elyra/node-file-name: insurance-claim-processing/lab-materials/03/06/test_security.py elyra/pipeline-source: sanity_check.pipeline pipelines.kubeflow.org/task_display_name: test_security pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", - "outputs": [], "version": "Run a file@sha256=a523a1dc72737c6cfaf07342df759a61f68c9b45bf34ab33d3f20cb496ae8083"}' + "outputs": [], "version": "Run a file@sha256=51651082dff4a766733eb7e70c27fa7c33370a3c14f3af453c03a463d0a64dac"}' - name: run-a-file-4 taskSpec: steps: @@ -259,7 +214,7 @@ spec: sh -c "mkdir -p ./jupyter-work-dir && cd ./jupyter-work-dir" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/bootstrapper.py' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/bootstrapper.py --output bootstrapper.py" sh -c "echo 'Downloading file:///opt/app-root/bin/utils/requirements-elyra.txt' && curl --fail -H 'Cache-Control: no-cache' -L file:///opt/app-root/bin/utils/requirements-elyra.txt --output requirements-elyra.txt" - sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-1215145442' --cos-dependencies-archive 'summarize_results-6b99ceae-d124-4758-904a-03e1a49fe56d.tar.gz' --file 'insurance-claim-processing/lab-materials/03/summarize_results.py' --inputs 'security_result.json;responsetime_result.json;quality_result.json' --outputs 'results.json' " + sh -c "python3 -m pip install packaging && python3 -m pip freeze > requirements-current.txt && python3 bootstrapper.py --pipeline-name 'sanity_check' --cos-endpoint 'https://minio-api-robert-serving-test.apps.rhods-internal.61tk.p1.openshiftapps.com' --cos-bucket 'pipeline-bucket' --cos-directory 'sanity_check-0109084010' --cos-dependencies-archive 'summarize_results-6b99ceae-d124-4758-904a-03e1a49fe56d.tar.gz' --file 'insurance-claim-processing/lab-materials/03/06/summarize_results.py' --inputs 'responsetime_result.json;security_result.json;quality_result.json' --outputs 'results.json' " command: - sh - -c @@ -284,21 +239,6 @@ spec: valueFrom: fieldRef: fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] - - name: LLM_ENDPOINT - valueFrom: - secretKeyRef: - key: LLM_ENDPOINT - name: llm-info - - name: MODEL_SHA - valueFrom: - secretKeyRef: - key: MODEL_SHA - name: llm-info - - name: SERVING_SHA - valueFrom: - secretKeyRef: - key: SERVING_SHA - name: llm-info image: quay.io/modh/runtime-images@sha256:7dd23e58291cad7a0ab4a8e04bda06492f2c027eb33b226358380db58dcdd60b stepTemplate: volumeMounts: @@ -316,11 +256,11 @@ spec: elyra/node-name: summarize_results pipelines.kubeflow.org/cache_enabled: "true" annotations: - elyra/node-file-name: insurance-claim-processing/lab-materials/03/summarize_results.py + elyra/node-file-name: insurance-claim-processing/lab-materials/03/06/summarize_results.py elyra/pipeline-source: sanity_check.pipeline pipelines.kubeflow.org/task_display_name: summarize_results pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", - "outputs": [], "version": "Run a file@sha256=9e2cfcee5f1d1f9eb84f47713866930314f31eb4ea3e7f564394dce005843176"}' + "outputs": [], "version": "Run a file@sha256=bfe6fa070a3ebd821fe5801ef8beb2f710d88a1e58380eb85b169a1b44a5b753"}' runAfter: - run-a-file - run-a-file-2 diff --git a/lab-materials/03/06/test_responsetime.py b/lab-materials/03/06/test_responsetime.py index d916fca3..aeb3c1e4 100644 --- a/lab-materials/03/06/test_responsetime.py +++ b/lab-materials/03/06/test_responsetime.py @@ -27,5 +27,5 @@ def test_responsetime(endpoint): }, f) if __name__ == '__main__': - health_endpoint = os.environ.get("LLM_ENDPOINT") + "/health" + health_endpoint = "http://llm.ic-shared-llm.svc.cluster.local:3000" + "/health" test_responsetime(health_endpoint) \ No newline at end of file diff --git a/lab-materials/03/06/test_security.py b/lab-materials/03/06/test_security.py index 537e30c6..c79b82ea 100644 --- a/lab-materials/03/06/test_security.py +++ b/lab-materials/03/06/test_security.py @@ -24,7 +24,7 @@ def test_security(endpoint, expected_model_sha, expected_serving_sha): }, f) if __name__ == '__main__': - info_endpoint = os.environ.get("LLM_ENDPOINT") + "/info" - expected_model_sha = os.environ.get("MODEL_SHA") - expected_serving_sha = os.environ.get("SERVING_SHA") + info_endpoint = "http://llm.ic-shared-llm.svc.cluster.local:3000" + "/info" + expected_model_sha = "b70aa86578567ba3301b21c8a27bea4e8f6d6d61" + expected_serving_sha = "630800eed37b15c4b0c9eb8e6ab47212026720f7" test_security(info_endpoint, expected_model_sha, expected_serving_sha) \ No newline at end of file diff --git a/lab-materials/04/04-01-over-approach.ipynb b/lab-materials/04/04-01-over-approach.ipynb index b85bd0de..96f567a1 100644 --- a/lab-materials/04/04-01-over-approach.ipynb +++ b/lab-materials/04/04-01-over-approach.ipynb @@ -77,7 +77,7 @@ "id": "86e1bd1b-123c-4fac-ab18-da40323cc97e", "metadata": {}, "source": [ - "We see that YOLO has determined that there is '1 car' in the provided photo. This is great news for us. We can test out a few more photos to make certain YOLO is detecting car objects. Then we can write some code to provide 'boxes' around the car YOLO detected for us." + "We see that YOLO has determined that there is '1 car' in the provided photo. This is great news for us. We can test out a few more photos to make certain YOLO is detecting car objects. Then we can write some code to draw boxes around the car YOLO detected for us." ] }, { @@ -90,7 +90,7 @@ "outputs": [], "source": [ "# List all the images in our folder. We can then pick one of those images for our tests.\n", - "!ls -al images " + "!ls -al images" ] }, { @@ -130,7 +130,7 @@ "\n", "However, with so many vehicles displayed in the image, it may now be difficult for us, 'the humans', to accurately count all of the vehicles!\n", "\n", - "Therefore let's write some code that will place 'boxes' around the 'cars' that the yolo model identifies within an image.\n", + "Therefore let's write some code that will draw boxes around the cars that the yolo model identifies within an image.\n", "\n", "**Please open the notebook `04-02-car-recog.ipynb`**." ] diff --git a/lab-materials/04/04-02-car-recognition.ipynb b/lab-materials/04/04-02-car-recognition.ipynb index ca103dfa..ef06aac8 100644 --- a/lab-materials/04/04-02-car-recognition.ipynb +++ b/lab-materials/04/04-02-car-recognition.ipynb @@ -7,7 +7,7 @@ "source": [ "# Detect a car and place bounding boxes around it\n", "\n", - "In this notebook we will learn how to place 'boxes' around the 'car' images that the yolo model detects within a photograph.\n", + "In this notebook we will learn how to draw boxes around the cars that have been detected by the Yolo model.\n", "\n", "To begin, we will import the YOLO package." ] @@ -247,7 +247,7 @@ "source": [ "We can see that the YOLO model did miss some cars that are in the 'far back' of the image. But overall, the model did a great job of identifying multiple cars in this image. And more importantly we can see that the identified cars are surrounded by a 'bounding box'!\n", "\n", - "Now that we are able to place bounding 'boxes' around the car(s) recognized by the yolo model, we can re-train our YOLO model to identify a car 'crash'. \n", + "Now that we are able to place bounding boxes around the car(s) recognized by the yolo model, we can re-train our YOLO model to identify a car 'crash'. \n", "\n", "**Please open the notebook `04-03-model-retraining.ipynb`.**" ] diff --git a/lab-materials/04/04-03-model-retraining.ipynb b/lab-materials/04/04-03-model-retraining.ipynb index 9bdfc5a5..5056255d 100644 --- a/lab-materials/04/04-03-model-retraining.ipynb +++ b/lab-materials/04/04-03-model-retraining.ipynb @@ -157,7 +157,7 @@ "id": "45050c91-fb6c-4f14-a4d1-e72d3a40538f", "metadata": {}, "source": [ - "**Note**: after a standard re-trainin, if we are happy with the results, we could export our model to the ONNX format. \n", + "**Note**: after a standard re-training, if we are happy with the results, we could export our model to the ONNX format. \n", "(you would replace trainX by the traininig session you want to use in the following command)\n", "\n", "`ObjDetOXModel = YOLO(\"runs/detect/trainX/weights/best.pt\").export(format=\"onnx\")`" diff --git a/lab-materials/04/04-04-accident-recog.ipynb b/lab-materials/04/04-04-accident-recog.ipynb index c6ff9043..6efab0d9 100644 --- a/lab-materials/04/04-04-accident-recog.ipynb +++ b/lab-materials/04/04-04-accident-recog.ipynb @@ -55,7 +55,7 @@ "source": [ "# Test the model against a car accident image\n", "\n", - "results = model.predict(\"images/carImage1.jpg\") # We know that Image1 represents a severe accident with over 88% certainty." + "results = model.predict(\"images/carImage3.jpg\") # We know that Image3 represents a severe accident with over 86% certainty." ] }, { @@ -96,11 +96,13 @@ "id": "1784c664-01ea-4787-acd7-631854caa9fd", "metadata": {}, "source": [ - "In examining 'carImage1.jpg' the re-trainined YOLO model correctly predicts a 'car accident' with 88% confidence. A box is then drawn around the car accident and labelled with `severe 0.88`.\n", + "In examining 'carImage3.jpg' the re-trainined YOLO model correctly predicts a 'car accident' with 86% confidence. A box is then drawn around the car accident and labelled with `severe 0.86`.\n", "\n", - "Now that we have a model which can detect accident severity, lets create a predict function and mannually serve our prediction model.\n", + "Now that we have a model which can detect accident severity, let's create a predict function and serve our model with ModelMesh.\n", "\n", - "**Please open the notebook `04-05-serving-manual.ipynb`**." + "**Go back to the Instructions of the Lab, to lear how to do that.**\n", + "\n", + "**DO NOT open notebook `04-05-model-serving.ipynb` yet**." ] } ], diff --git a/lab-materials/04/04-05-model-serving.ipynb b/lab-materials/04/04-05-model-serving.ipynb new file mode 100644 index 00000000..54369552 --- /dev/null +++ b/lab-materials/04/04-05-model-serving.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e4f4dada-51a8-4f06-9618-0f2deda72bee", + "metadata": { + "tags": [] + }, + "source": [ + "# Model Serving \n", + "\n", + "In notebook '04-04-accident-recognition' we were able to use the retrained model to predict a 'severe' or 'moderate' car accident within an image. \n", + "\n", + "Now we will determine if we can query the model directly from the model server we have created. This will be done through an API call.\n", + "\n", + "**Important**: First, enter the inference endpoint URL you got after deploying the model server." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e38338ba-d858-4096-92a1-284d35679005", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Normally, this should be\n", + "# RestURL = 'http://modelmesh-serving.userX:8008' , with userX being replaced by the user you have been assigned.\n", + "# CHANGE the value below, or nothing will work!\n", + "RestURL = 'http://modelmesh-serving.userX:8008'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03c4c9cc-1e3a-43a4-92cf-44af26573030", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# If you did not use the Workbench image designed for this Lab, you can uncomment and run the following line to install the required packages.\n", + "#!pip install --no-cache-dir --no-dependencies -r requirements.txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "930247ab-2e10-4db4-888c-517ca3a4cec8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import cv2\n", + "from matplotlib import pyplot as plt\n", + "from PIL import Image\n", + "## note that to keep the notebook readable, a lot of code was moved into the file remote_infer.py.\n", + "## if you are curious, open it to see the various functions required around this prediction\n", + "from remote_infer import process_image" + ] + }, + { + "cell_type": "markdown", + "id": "c5e84546-979c-4dc2-9fc7-21d997001beb", + "metadata": {}, + "source": [ + "## We will define the inference URL, the model name, the YAML file with your classes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "329ac64a-76a4-4630-8da3-0174fbdf54cd", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "infer_url = f'{RestURL}/v2/models/my-first-model/infer'" + ] + }, + { + "cell_type": "markdown", + "id": "e74d67e4-1933-4957-80fd-c4b143d14279", + "metadata": { + "tags": [] + }, + "source": [ + "## Now we set the parameters for the inference" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31725659-710d-4fdc-b195-4d56b299f419", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# 1. The image you want to analyze\n", + "image_path = 'images/carImage3.jpg' # You can replace this with an image you upload" + ] + }, + { + "cell_type": "markdown", + "id": "326d21db-0f7b-4f89-86bd-84f4c04b7c44", + "metadata": {}, + "source": [ + "## Launch the inference and show the result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c15e0ccd-5c65-4dc7-80bc-2e583223ac59", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Launch the inference by calling the remote model server\n", + "img = process_image(image_path, infer_url)\n", + "\n", + "# Display the result\n", + "img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n", + "fig = plt.gcf()\n", + "fig.set_size_inches(6, 3)\n", + "plt.axis('off')\n", + "plt.imshow(img);" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.11", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/lab-materials/04/04-05-serving-mannual.ipynb b/lab-materials/04/04-05-serving-mannual.ipynb deleted file mode 100644 index 552affc5..00000000 --- a/lab-materials/04/04-05-serving-mannual.ipynb +++ /dev/null @@ -1,224 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "60aa9060-19da-43be-b77b-df5723ceee09", - "metadata": {}, - "source": [ - "# Create a Prediction function \n", - "\n", - "In the previous notebook we were able to use the retrained model to predict a 'severe' or 'moderate' car accident within an image. We can take that code and create a predict function that we can call from any notebook. \n", - "\n", - "Developer note: code for prediction function taken from Prediction2.ipynb. Prediction.ipynb uses Chris's boxes and extraction methods, but doesn't plot full box around car.\n", - "\n", - "Let's install our python and ultralyitcs packages and then create our predict function." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "03c4c9cc-1e3a-43a4-92cf-44af26573030", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ultralytics in /opt/app-root/lib/python3.8/site-packages (8.0.232)\n", - "Requirement already satisfied: numpy>=1.22.2 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (1.23.1)\n", - "Requirement already satisfied: torchvision>=0.9.0 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (0.14.1+cpu)\n", - "Requirement already satisfied: opencv-python>=4.6.0 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (4.7.0.68)\n", - "Requirement already satisfied: pyyaml>=5.3.1 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (6.0)\n", - "Requirement already satisfied: psutil in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (5.9.4)\n", - "Requirement already satisfied: scipy>=1.4.1 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (1.10.0)\n", - "Requirement already satisfied: pandas>=1.1.4 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (1.3.5)\n", - "Requirement already satisfied: thop>=0.1.1 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (0.1.1.post2209072238)\n", - "Requirement already satisfied: torch>=1.8.0 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (1.13.1+cpu)\n", - "Requirement already satisfied: requests>=2.23.0 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (2.27.1)\n", - "Requirement already satisfied: matplotlib>=3.3.0 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (3.5.2)\n", - "Requirement already satisfied: seaborn>=0.11.0 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (0.12.2)\n", - "Requirement already satisfied: tqdm>=4.64.0 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (4.64.1)\n", - "Requirement already satisfied: pillow>=7.1.2 in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (9.4.0)\n", - "Requirement already satisfied: py-cpuinfo in /opt/app-root/lib/python3.8/site-packages (from ultralytics) (9.0.0)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /opt/app-root/lib/python3.8/site-packages (from matplotlib>=3.3.0->ultralytics) (1.4.4)\n", - "Requirement already satisfied: pyparsing>=2.2.1 in /opt/app-root/lib/python3.8/site-packages (from matplotlib>=3.3.0->ultralytics) (2.4.7)\n", - "Requirement already satisfied: cycler>=0.10 in /opt/app-root/lib/python3.8/site-packages (from matplotlib>=3.3.0->ultralytics) (0.11.0)\n", - "Requirement already satisfied: packaging>=20.0 in /opt/app-root/lib/python3.8/site-packages (from matplotlib>=3.3.0->ultralytics) (21.3)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /opt/app-root/lib/python3.8/site-packages (from matplotlib>=3.3.0->ultralytics) (2.8.2)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /opt/app-root/lib/python3.8/site-packages (from matplotlib>=3.3.0->ultralytics) (4.38.0)\n", - "Requirement already satisfied: pytz>=2017.3 in /opt/app-root/lib/python3.8/site-packages (from pandas>=1.1.4->ultralytics) (2022.7.1)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/app-root/lib/python3.8/site-packages (from requests>=2.23.0->ultralytics) (1.26.14)\n", - "Requirement already satisfied: idna<4,>=2.5 in /opt/app-root/lib/python3.8/site-packages (from requests>=2.23.0->ultralytics) (3.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /opt/app-root/lib/python3.8/site-packages (from requests>=2.23.0->ultralytics) (2022.12.7)\n", - "Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/app-root/lib/python3.8/site-packages (from requests>=2.23.0->ultralytics) (2.0.12)\n", - "Requirement already satisfied: typing-extensions in /opt/app-root/lib/python3.8/site-packages (from torch>=1.8.0->ultralytics) (4.5.0)\n", - "Requirement already satisfied: six>=1.5 in /opt/app-root/lib/python3.8/site-packages (from python-dateutil>=2.7->matplotlib>=3.3.0->ultralytics) (1.16.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.3.2\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" - ] - } - ], - "source": [ - "!pip install ultralytics\n", - "from ultralytics import YOLO\n", - "from PIL import Image" - ] - }, - { - "cell_type": "markdown", - "id": "3a8669a4-800e-4663-9a36-339b1032d090", - "metadata": {}, - "source": [ - "## Create a predict function\n", - "\n", - "Create a function that takes in parameters best_model_path and car_image_path. The model's predict function will take in the image and returns an ultralytics.engine.results.Results object with attributes: boxes, keypoints, masks, names, orig_img, orig_shape, path, probs, save_dir and speed. We are only interested in the first attribute 'boxes' which we will return as 'results[0]'" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "68fba1bf-c79d-439c-9421-d771ba81aba5", - "metadata": {}, - "outputs": [], - "source": [ - "#define our predict function and pass the path to our model and car image.\n", - "def predict(best_model_path, car_image_path):\n", - " model = YOLO(best_model_path)\n", - " results = model.predict(car_image_path)\n", - " return results[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "79374798-8dc6-4235-9d4e-dc1c0e397bf5", - "metadata": {}, - "outputs": [], - "source": [ - "#In the photo draw boxes listing name, probability around each car (object type)\n", - "def draw_boxes_image(result):\n", - " print(\"inside draw boxes image\")\n", - " #Image.fromarray(result.plot()[:,:,::-1])" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "844cf130-395f-4007-b03c-fb13db838e37", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "image 1/1 /opt/app-root/src/insurance-claim-processing/lab-materials/04/images/carImage1.jpg: 448x640 1 severe, 209.7ms\n", - "Speed: 1.6ms preprocess, 209.7ms inference, 0.6ms postprocess per image at shape (1, 3, 448, 640)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#call our predict function\n", - "prediction_results = predict(\"models/best.pt\", \"images/carImage1.jpg\")\n", - "Image.fromarray(prediction_results.plot()[:,:,::-1])\n", - "#draw_boxes_image(prediction_results, image)" - ] - }, - { - "cell_type": "markdown", - "id": "2d08737f-8eb2-44b8-81c7-cd197446ff39", - "metadata": {}, - "source": [ - "## Extract the Predict function into a Python file\n", - "Now that we have created a working function, extract the prediction logic into a standalone python file, prediction.py. Also, make sure requirements.txt is updated with any additional packages you have used and need for prediction.\n", - "\n", - "## Test the function from your Python file\n", - "We can make sure the extraction worked properly by loading the function from our prediction.py file and calling it (from our notebook) with the same predict function parameters we used above." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "67fe7cf3-9e59-4070-87b0-9fd1dbf9ebed", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "image 1/1 /opt/app-root/src/insurance-claim-processing/lab-materials/04/images/carImage1.jpg: 448x640 1 severe, 209.6ms\n", - "Speed: 1.7ms preprocess, 209.6ms inference, 0.6ms postprocess per image at shape (1, 3, 448, 640)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#after creating prediction.py, place the predict function inside the file. Then call the predict method from within our notebook\n", - "\n", - "from prediction import predict\n", - "\n", - "#image & model file locations.\n", - "car_image = \"images/carImage1.jpg\"\n", - "model_path = \"models/best.pt\"\n", - "\n", - "#call predict function in prediction.py\n", - "prediction_results = predict(model_path, car_image)\n", - "\n", - "#display image with boxes,class and probability\n", - "Image.fromarray(prediction_results.plot()[:,:,::-1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2b4703d1-89f7-440f-9692-6c647ac0f6f0", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/lab-materials/04/classes.yaml b/lab-materials/04/classes.yaml new file mode 100644 index 00000000..1fc58ee5 --- /dev/null +++ b/lab-materials/04/classes.yaml @@ -0,0 +1,4 @@ +# Classes +names: + 0: moderate + 1: severe diff --git a/lab-materials/04/remote_infer.py b/lab-materials/04/remote_infer.py new file mode 100644 index 00000000..38a981dd --- /dev/null +++ b/lab-materials/04/remote_infer.py @@ -0,0 +1,135 @@ +import requests + +import cv2.dnn +import numpy as np + +CLASSES = { + 0: "moderate", + 1: "severe" +} +colors = np.random.uniform(0, 255, size=(len(CLASSES), 3)) + + +def preprocess(image_path): + original_image: np.ndarray = cv2.imread(image_path) + [height, width, _] = original_image.shape + + # Prepare a square image for inference + length = max((height, width)) + image = np.zeros((length, length, 3), np.uint8) + image[0:height, 0:width] = original_image + + # Calculate scale factor + scale = length / 640 + + # Preprocess the image and prepare blob for model + blob = cv2.dnn.blobFromImage(image, scalefactor=1 / 255, size=(640, 640), swapRB=True) + return blob, scale, original_image + + +def draw_bounding_box(img, class_id, confidence, x, y, x_plus_w, y_plus_h): + """ + Draws bounding boxes on the input image based on the provided arguments. + + Args: + img (numpy.ndarray): The input image to draw the bounding box on. + class_id (int): Class ID of the detected object. + confidence (float): Confidence score of the detected object. + x (int): X-coordinate of the top-left corner of the bounding box. + y (int): Y-coordinate of the top-left corner of the bounding box. + x_plus_w (int): X-coordinate of the bottom-right corner of the bounding box. + y_plus_h (int): Y-coordinate of the bottom-right corner of the bounding box. + """ + font = cv2.FONT_HERSHEY_SIMPLEX, + text_color_bg = colors[class_id] + label = f'{CLASSES[class_id]} {confidence:.2f}' + (label_width, label_height), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1) + cv2.rectangle(img, (x, y), (x_plus_w, y_plus_h), text_color_bg, 2) # Box + cv2.rectangle(img, (x, y-label_height), (x+label_width, y), text_color_bg, cv2.FILLED) # Background label + cv2.putText(img, label, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 1, cv2.LINE_AA) + +def postprocess(response, scale, original_image): + outputs = np.array([cv2.transpose(response[0])]) + rows = outputs.shape[1] + + boxes = [] + scores = [] + class_ids = [] + + # Iterate through output to collect bounding boxes, confidence scores, and class IDs + for i in range(rows): + classes_scores = outputs[0][i][4:] + (minScore, maxScore, minClassLoc, (x, maxClassIndex)) = cv2.minMaxLoc(classes_scores) + if maxScore >= 0.25: + box = [ + outputs[0][i][0] - (0.5 * outputs[0][i][2]), outputs[0][i][1] - (0.5 * outputs[0][i][3]), + outputs[0][i][2], outputs[0][i][3]] + boxes.append(box) + scores.append(maxScore) + class_ids.append(maxClassIndex) + result_boxes = cv2.dnn.NMSBoxes(boxes, scores, 0.25, 0.45, 0.5) + + detections = [] + + # Iterate through NMS results to draw bounding boxes and labels + for i in range(len(result_boxes)): + index = result_boxes[i] + box = boxes[index] + detection = { + 'class_id': class_ids[index], + 'class_name': CLASSES[class_ids[index]], + 'confidence': scores[index], + 'box': box, + 'scale': scale} + detections.append(detection) + draw_bounding_box(original_image, class_ids[index], scores[index], round(box[0] * scale), round(box[1] * scale), + round((box[0] + box[2]) * scale), round((box[1] + box[3]) * scale)) + return original_image + + +def _serialize(image): + payload = { + 'inputs': [ + { + 'name': 'images', + 'shape': [1, 3, 640, 640], + 'datatype': 'FP32', + 'data': image.flatten().tolist(), + }, + ] + } + return payload + + +def _unpack(response_item): + return np.array(response_item['data']).reshape(response_item['shape']) + + +def send_request(image, endpoint): + payload = _serialize(image) + raw_response = requests.post(endpoint, json = payload) + try: + response = raw_response.json() + except: + print(f'Failed to deserialize service response.\n' + f'Status code: {raw_response.status_code}\n' + f'Response body: {raw_response.text}') + raise + + try: + model_output = response['outputs'] + except: + print(f'Failed to extract model output from service response.\n' + f'Service response: {response}') + raise + + unpacked_output = [_unpack(item) for item in model_output] + return unpacked_output + + +def process_image(image_path, endpoint): + preprocessed, scale, original_image = preprocess(image_path) + response = send_request(preprocessed, endpoint) + new_image = postprocess(response[0], scale, original_image) + + return new_image diff --git a/lab-materials/05/05-05/.pipeline-envs b/lab-materials/05/05-05/.pipeline-envs new file mode 100644 index 00000000..16eb72d5 --- /dev/null +++ b/lab-materials/05/05-05/.pipeline-envs @@ -0,0 +1,8 @@ +LLM_ENDPOINT=http://llm.ic-shared-llm.svc.cluster.local:3000 +POSTGRES_DB=claimdb +POSTGRES_USER=claimdb +POSTGRES_PASSWORD=claimdb +POSTGRES_PORT=5432 +DB_S3_ENDPOINT_URL=http://minio.ic-shared-minio.svc.cluster.local:9000 +DB_AWS_ACCESS_KEY_ID=minio +DB_AWS_SECRET_ACCESS_KEY=minio123 \ No newline at end of file diff --git a/lab-materials/05/Dockerfile b/lab-materials/05/05-05/Dockerfile similarity index 100% rename from lab-materials/05/Dockerfile rename to lab-materials/05/05-05/Dockerfile diff --git a/lab-materials/05/db_utils.py b/lab-materials/05/05-05/db_utils.py similarity index 100% rename from lab-materials/05/db_utils.py rename to lab-materials/05/05-05/db_utils.py diff --git a/lab-materials/05/detect_objects.py b/lab-materials/05/05-05/detect_objects.py similarity index 96% rename from lab-materials/05/detect_objects.py rename to lab-materials/05/05-05/detect_objects.py index 24378e64..63e4893a 100644 --- a/lab-materials/05/detect_objects.py +++ b/lab-materials/05/05-05/detect_objects.py @@ -19,6 +19,7 @@ **dotenv_values(".env"), # load shared development variables **dotenv_values(".env.secret"), # load sensitive variables **os.environ, # override loaded values with environment variables + **dotenv_values(".pipeline-envs"), # load pipeline-specific vars } db = db_utils.Database(config, logger) @@ -30,7 +31,7 @@ aws_secret_access_key=config["DB_AWS_SECRET_ACCESS_KEY"], use_ssl=config["LLM_ENDPOINT"].startswith("https"),) -detection_endpoint = os.environ.get("DETECTION_ENDPOINT") +detection_endpoint = os.environ.get("detection_endpoint") def download_images(claim_id): claim_info = db.get_claim_info(claim_id) diff --git a/lab-materials/05/get_accident_time.py b/lab-materials/05/05-05/get_accident_time.py similarity index 94% rename from lab-materials/05/get_accident_time.py rename to lab-materials/05/05-05/get_accident_time.py index b977228c..63a4ab41 100644 --- a/lab-materials/05/get_accident_time.py +++ b/lab-materials/05/05-05/get_accident_time.py @@ -16,6 +16,7 @@ **dotenv_values(".env"), # load shared development variables **dotenv_values(".env.secret"), # load sensitive variables **os.environ, # override loaded values with environment variables + **dotenv_values(".pipeline-envs"), # load pipeline-specific vars } db = db_utils.Database(config, logger) diff --git a/lab-materials/05/get_claims.py b/lab-materials/05/05-05/get_claims.py similarity index 94% rename from lab-materials/05/get_claims.py rename to lab-materials/05/05-05/get_claims.py index f1c1553e..c016a800 100644 --- a/lab-materials/05/get_claims.py +++ b/lab-materials/05/05-05/get_claims.py @@ -15,6 +15,7 @@ **dotenv_values(".env"), # load shared development variables **dotenv_values(".env.secret"), # load sensitive variables **os.environ, # override loaded values with environment variables + **dotenv_values(".pipeline-envs"), # load pipeline-specific vars } db = db_utils.Database(config, logger) diff --git a/lab-materials/05/get_location.py b/lab-materials/05/05-05/get_location.py similarity index 94% rename from lab-materials/05/get_location.py rename to lab-materials/05/05-05/get_location.py index dd562aa9..65648a75 100644 --- a/lab-materials/05/get_location.py +++ b/lab-materials/05/05-05/get_location.py @@ -16,6 +16,7 @@ **dotenv_values(".env"), # load shared development variables **dotenv_values(".env.secret"), # load sensitive variables **os.environ, # override loaded values with environment variables + **dotenv_values(".pipeline-envs"), # load pipeline-specific vars } db = db_utils.Database(config, logger) diff --git a/lab-materials/05/get_sentiment.py b/lab-materials/05/05-05/get_sentiment.py similarity index 94% rename from lab-materials/05/get_sentiment.py rename to lab-materials/05/05-05/get_sentiment.py index 0e625257..892d5605 100644 --- a/lab-materials/05/get_sentiment.py +++ b/lab-materials/05/05-05/get_sentiment.py @@ -16,6 +16,7 @@ **dotenv_values(".env"), # load shared development variables **dotenv_values(".env.secret"), # load sensitive variables **os.environ, # override loaded values with environment variables + **dotenv_values(".pipeline-envs"), # load pipeline-specific vars } db = db_utils.Database(config, logger) diff --git a/lab-materials/05/llm_usage.py b/lab-materials/05/05-05/llm_usage.py similarity index 94% rename from lab-materials/05/llm_usage.py rename to lab-materials/05/05-05/llm_usage.py index 34e3f660..37cdb0e0 100644 --- a/lab-materials/05/llm_usage.py +++ b/lab-materials/05/05-05/llm_usage.py @@ -7,7 +7,7 @@ from langchain.evaluation import load_evaluator from langchain.embeddings import HuggingFaceEmbeddings -INFERENCE_SERVER_URL = os.environ.get("LLM_ENDPOINT") +INFERENCE_SERVER_URL = "http://llm.ic-shared-llm.svc.cluster.local:3000" MAX_NEW_TOKENS = 512 TOP_K = 10 TOP_P = 0.95 diff --git a/lab-materials/05/process_claims.pipeline b/lab-materials/05/05-05/process_claims.pipeline similarity index 72% rename from lab-materials/05/process_claims.pipeline rename to lab-materials/05/05-05/process_claims.pipeline index 68a04b3f..da8c4c13 100644 --- a/lab-materials/05/process_claims.pipeline +++ b/lab-materials/05/05-05/process_claims.pipeline @@ -9,39 +9,37 @@ "id": "primary", "nodes": [ { - "id": "58a00cb2-1bb2-4bba-9ad4-2c9c1964d61b", + "id": "5a1b2fe1-12c3-4c02-a958-706d09245133", "type": "execution_node", "op": "execute-python-node", "app_data": { "component_parameters": { - "pipeline_parameters": [], + "pipeline_parameters": [ + "claim_id" + ], "dependencies": [ - "llm_usage.py", - "templates/summary_template.txt", - "db_utils.py" + "db_utils.py", + ".pipeline-envs" ], "include_subdirectories": false, - "outputs": [], - "env_vars": [ - { - "env_var": "CLAIMS_ENDPOINT" - } + "outputs": [ + "claims.json" ], + "env_vars": [], "kubernetes_pod_annotations": [], "kubernetes_pod_labels": [], "kubernetes_secrets": [], "kubernetes_shared_mem_size": {}, "kubernetes_tolerations": [], "mounted_volumes": [], - "filename": "summarize_text.py", - "runtime_image": "quay.io/rlundber/rh1/processing_pipeline:1.1" + "filename": "get_claims.py" }, "label": "", "ui_data": { - "label": "summarize_text.py", + "label": "get_claims.py", "image": "/notebook/robert-serving-test/pipelinetest/static/elyra/python.svg", - "x_pos": 382, - "y_pos": 307, + "x_pos": 217, + "y_pos": 462, "description": "Run Python script" } }, @@ -56,14 +54,7 @@ }, "label": "Input Port" } - }, - "links": [ - { - "id": "35ed5879-199e-4d24-b3f4-cc1a8afe4709", - "node_id_ref": "ef03ea7c-3353-4350-80a9-4bef5305b081", - "port_id_ref": "outPort" - } - ] + } } ], "outputs": [ @@ -82,24 +73,20 @@ ] }, { - "id": "64e8b587-2a03-494e-95cc-ab9ec564202a", + "id": "e5233ced-99d5-4420-a56b-c3244f268d46", "type": "execution_node", "op": "execute-python-node", "app_data": { "component_parameters": { - "pipeline_parameters": [], "dependencies": [ "llm_usage.py", "templates/time_template.txt", - "db_utils.py" + "db_utils.py", + ".pipeline-envs" ], "include_subdirectories": false, "outputs": [], - "env_vars": [ - { - "env_var": "CLAIMS_ENDPOINT" - } - ], + "env_vars": [], "kubernetes_pod_annotations": [], "kubernetes_pod_labels": [], "kubernetes_secrets": [], @@ -112,8 +99,8 @@ "ui_data": { "label": "get_accident_time.py", "image": "/notebook/robert-serving-test/pipelinetest/static/elyra/python.svg", - "x_pos": 382, - "y_pos": 204, + "x_pos": 555, + "y_pos": 243, "description": "Run Python script" } }, @@ -131,8 +118,8 @@ }, "links": [ { - "id": "87206d57-c2c6-4474-b4da-73171e1983ad", - "node_id_ref": "ef03ea7c-3353-4350-80a9-4bef5305b081", + "id": "ee404821-8605-4bf7-bedf-93f3cf4adb7e", + "node_id_ref": "5a1b2fe1-12c3-4c02-a958-706d09245133", "port_id_ref": "outPort" } ] @@ -154,24 +141,20 @@ ] }, { - "id": "39dd3fcf-0efb-4777-be63-97252d396bcb", + "id": "555e8b99-1b42-41c3-bd84-1d26889a72c9", "type": "execution_node", "op": "execute-python-node", "app_data": { "component_parameters": { - "pipeline_parameters": [], "dependencies": [ "llm_usage.py", "templates/location_template.txt", - "db_utils.py" + "db_utils.py", + ".pipeline-envs" ], "include_subdirectories": false, "outputs": [], - "env_vars": [ - { - "env_var": "CLAIMS_ENDPOINT" - } - ], + "env_vars": [], "kubernetes_pod_annotations": [], "kubernetes_pod_labels": [], "kubernetes_secrets": [], @@ -184,8 +167,8 @@ "ui_data": { "label": "get_location.py", "image": "/notebook/robert-serving-test/pipelinetest/static/elyra/python.svg", - "x_pos": 383, - "y_pos": 110, + "x_pos": 554, + "y_pos": 460, "description": "Run Python script" } }, @@ -203,8 +186,8 @@ }, "links": [ { - "id": "9c8783ce-8070-4341-9db5-bccfda250199", - "node_id_ref": "ef03ea7c-3353-4350-80a9-4bef5305b081", + "id": "d4af0f77-c5bb-4d34-b13e-fedac5f78f7a", + "node_id_ref": "5a1b2fe1-12c3-4c02-a958-706d09245133", "port_id_ref": "outPort" } ] @@ -226,24 +209,20 @@ ] }, { - "id": "e8b3e0f3-af9d-4208-9a44-1adeb22e7eb6", + "id": "81e80566-39c6-4f9b-a427-92bcbc7d5c92", "type": "execution_node", "op": "execute-python-node", "app_data": { "component_parameters": { - "pipeline_parameters": [], "dependencies": [ "llm_usage.py", "templates/sentiment_template.txt", - "db_utils.py" + "db_utils.py", + ".pipeline-envs" ], "include_subdirectories": false, "outputs": [], - "env_vars": [ - { - "env_var": "CLAIMS_ENDPOINT" - } - ], + "env_vars": [], "kubernetes_pod_annotations": [], "kubernetes_pod_labels": [], "kubernetes_secrets": [], @@ -256,8 +235,8 @@ "ui_data": { "label": "get_sentiment.py", "image": "/notebook/robert-serving-test/pipelinetest/static/elyra/python.svg", - "x_pos": 380, - "y_pos": 411, + "x_pos": 555, + "y_pos": 565, "description": "Run Python script" } }, @@ -275,8 +254,8 @@ }, "links": [ { - "id": "f8959d20-0038-48b7-9529-85d18a1dba91", - "node_id_ref": "ef03ea7c-3353-4350-80a9-4bef5305b081", + "id": "2d24c482-bfba-41d5-abe6-5ea9650d6996", + "node_id_ref": "5a1b2fe1-12c3-4c02-a958-706d09245133", "port_id_ref": "outPort" } ] @@ -298,29 +277,22 @@ ] }, { - "id": "b56d5db6-6d78-4976-9d2c-36d45ca2b195", + "id": "2b07dca0-af2c-4973-8cab-328bb18cecbf", "type": "execution_node", "op": "execute-python-node", "app_data": { "component_parameters": { - "pipeline_parameters": [], + "pipeline_parameters": [ + "detection_endpoint" + ], "dependencies": [ "process_image.py", - "db_utils.py" + "db_utils.py", + ".pipeline-envs" ], "include_subdirectories": false, "outputs": [], - "env_vars": [ - { - "env_var": "DETECTION_ENDPOINT" - }, - { - "env_var": "CLAIMS_ENDPOINT" - }, - { - "env_var": "claim_id" - } - ], + "env_vars": [], "kubernetes_pod_annotations": [], "kubernetes_pod_labels": [], "kubernetes_secrets": [], @@ -333,8 +305,8 @@ "ui_data": { "label": "detect_objects.py", "image": "/notebook/robert-serving-test/pipelinetest/static/elyra/python.svg", - "x_pos": 379, - "y_pos": 520, + "x_pos": 559, + "y_pos": 681, "description": "Run Python script" } }, @@ -352,8 +324,8 @@ }, "links": [ { - "id": "eef24785-f69e-4585-bcb4-1b640d511990", - "node_id_ref": "ef03ea7c-3353-4350-80a9-4bef5305b081", + "id": "cd864664-1dc0-4c8e-99b6-459bc4e1c1cb", + "node_id_ref": "5a1b2fe1-12c3-4c02-a958-706d09245133", "port_id_ref": "outPort" } ] @@ -375,21 +347,19 @@ ] }, { - "id": "ef03ea7c-3353-4350-80a9-4bef5305b081", + "id": "af47e64c-33fb-4881-b6ee-6ffa382a33e1", "type": "execution_node", "op": "execute-python-node", "app_data": { "component_parameters": { - "pipeline_parameters": [ - "claim_id" - ], "dependencies": [ - "db_utils.py" + "llm_usage.py", + "templates/summary_template.txt", + "db_utils.py", + ".pipeline-envs" ], "include_subdirectories": false, - "outputs": [ - "claims.json" - ], + "outputs": [], "env_vars": [], "kubernetes_pod_annotations": [], "kubernetes_pod_labels": [], @@ -397,14 +367,14 @@ "kubernetes_shared_mem_size": {}, "kubernetes_tolerations": [], "mounted_volumes": [], - "filename": "get_claims.py" + "filename": "summarize_text.py" }, "label": "", "ui_data": { - "label": "get_claims.py", + "label": "summarize_text.py", "image": "/notebook/robert-serving-test/pipelinetest/static/elyra/python.svg", - "x_pos": 68, - "y_pos": 311, + "x_pos": 554, + "y_pos": 349, "description": "Run Python script" } }, @@ -419,7 +389,14 @@ }, "label": "Input Port" } - } + }, + "links": [ + { + "id": "83f30421-d0c6-4949-9150-898e47293c5e", + "node_id_ref": "5a1b2fe1-12c3-4c02-a958-706d09245133", + "port_id_ref": "outPort" + } + ] } ], "outputs": [ @@ -448,70 +425,14 @@ "name": "process_claims", "runtime": "Data Science Pipelines", "pipeline_defaults": { - "kubernetes_pod_labels": [], "kubernetes_shared_mem_size": {}, "mounted_volumes": [], - "kubernetes_tolerations": [], "kubernetes_pod_annotations": [], + "kubernetes_tolerations": [], + "kubernetes_pod_labels": [], "env_vars": [], - "kubernetes_secrets": [ - { - "env_var": "LLM_ENDPOINT", - "name": "llm-info", - "key": "LLM_ENDPOINT" - }, - { - "env_var": "DETECTION_ENDPOINT", - "name": "detection-info", - "key": "DETECTION_ENDPOINT" - }, - { - "env_var": "POSTGRES_HOST", - "name": "db-info", - "key": "POSTGRES_HOST" - }, - { - "env_var": "POSTGRES_DB", - "name": "db-info", - "key": "POSTGRES_DB" - }, - { - "env_var": "POSTGRES_USER", - "name": "db-info", - "key": "POSTGRES_USER" - }, - { - "env_var": "POSTGRES_PASSWORD", - "name": "db-info", - "key": "POSTGRES_PASSWORD" - }, - { - "env_var": "POSTGRES_PORT", - "name": "db-info", - "key": "POSTGRES_PORT" - }, - { - "env_var": "DB_S3_ENDPOINT_URL", - "name": "db-info", - "key": "S3_ENDPOINT_URL" - }, - { - "env_var": "IMAGES_BUCKET", - "name": "db-info", - "key": "IMAGES_BUCKET" - }, - { - "env_var": "DB_AWS_ACCESS_KEY_ID", - "name": "claim-images-bucket-secret", - "key": "aws_access_key_id" - }, - { - "env_var": "DB_AWS_SECRET_ACCESS_KEY", - "name": "claim-images-bucket-secret", - "key": "aws_secret_access_key" - } - ], - "runtime_image": "quay.io/rlundber/rh1/processing_pipeline:1.2" + "kubernetes_secrets": [], + "runtime_image": "quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0" }, "pipeline_parameters": [ { @@ -522,6 +443,15 @@ "value": 0 }, "required": true + }, + { + "name": "detection_endpoint", + "description": "The endpoint where your detection model is hosted.", + "default_value": { + "type": "String", + "value": "https://your-endpoint" + }, + "required": true } ] } diff --git a/lab-materials/05/05-05/process_claims.yaml b/lab-materials/05/05-05/process_claims.yaml new file mode 100644 index 00000000..a29930b9 --- /dev/null +++ b/lab-materials/05/05-05/process_claims.yaml @@ -0,0 +1,564 @@ +apiVersion: tekton.dev/v1beta1 +kind: PipelineRun +metadata: + name: process-claims + #generateName: training-pipeline- + annotations: + tekton.dev/output_artifacts: '{"run-a-file": [{"key": "artifacts/$PIPELINERUN/run-a-file/mlpipeline-metrics.tgz", + "name": "mlpipeline-metrics", "path": "/tmp/mlpipeline-metrics.json"}, {"key": + "artifacts/$PIPELINERUN/run-a-file/mlpipeline-ui-metadata.tgz", "name": "mlpipeline-ui-metadata", + "path": "/tmp/mlpipeline-ui-metadata.json"}], "run-a-file-2": [{"key": "artifacts/$PIPELINERUN/run-a-file-2/mlpipeline-metrics.tgz", + "name": "mlpipeline-metrics", "path": "/tmp/mlpipeline-metrics.json"}, {"key": + "artifacts/$PIPELINERUN/run-a-file-2/mlpipeline-ui-metadata.tgz", "name": "mlpipeline-ui-metadata", + "path": "/tmp/mlpipeline-ui-metadata.json"}], "run-a-file-3": [{"key": "artifacts/$PIPELINERUN/run-a-file-3/mlpipeline-metrics.tgz", + "name": "mlpipeline-metrics", "path": "/tmp/mlpipeline-metrics.json"}, {"key": + "artifacts/$PIPELINERUN/run-a-file-3/mlpipeline-ui-metadata.tgz", "name": "mlpipeline-ui-metadata", + "path": "/tmp/mlpipeline-ui-metadata.json"}], "run-a-file-4": [{"key": "artifacts/$PIPELINERUN/run-a-file-4/mlpipeline-metrics.tgz", + "name": "mlpipeline-metrics", "path": "/tmp/mlpipeline-metrics.json"}, {"key": + "artifacts/$PIPELINERUN/run-a-file-4/mlpipeline-ui-metadata.tgz", "name": "mlpipeline-ui-metadata", + "path": "/tmp/mlpipeline-ui-metadata.json"}], "run-a-file-5": [{"key": "artifacts/$PIPELINERUN/run-a-file-5/mlpipeline-metrics.tgz", + "name": "mlpipeline-metrics", "path": "/tmp/mlpipeline-metrics.json"}, {"key": + "artifacts/$PIPELINERUN/run-a-file-5/mlpipeline-ui-metadata.tgz", "name": "mlpipeline-ui-metadata", + "path": "/tmp/mlpipeline-ui-metadata.json"}], "run-a-file-6": [{"key": "artifacts/$PIPELINERUN/run-a-file-6/mlpipeline-metrics.tgz", + "name": "mlpipeline-metrics", "path": "/tmp/mlpipeline-metrics.json"}, {"key": + "artifacts/$PIPELINERUN/run-a-file-6/mlpipeline-ui-metadata.tgz", "name": "mlpipeline-ui-metadata", + "path": "/tmp/mlpipeline-ui-metadata.json"}]}' + tekton.dev/input_artifacts: '{}' + tekton.dev/artifact_bucket: mlpipeline + tekton.dev/artifact_endpoint: minio-service.kubeflow:9000 + tekton.dev/artifact_endpoint_scheme: http:// + tekton.dev/artifact_items: '{"run-a-file": [["mlpipeline-metrics", "/tmp/mlpipeline-metrics.json"], + ["mlpipeline-ui-metadata", "/tmp/mlpipeline-ui-metadata.json"]], "run-a-file-2": + [["mlpipeline-metrics", "/tmp/mlpipeline-metrics.json"], ["mlpipeline-ui-metadata", + "/tmp/mlpipeline-ui-metadata.json"]], "run-a-file-3": [["mlpipeline-metrics", + "/tmp/mlpipeline-metrics.json"], ["mlpipeline-ui-metadata", "/tmp/mlpipeline-ui-metadata.json"]], + "run-a-file-4": [["mlpipeline-metrics", "/tmp/mlpipeline-metrics.json"], ["mlpipeline-ui-metadata", + "/tmp/mlpipeline-ui-metadata.json"]], "run-a-file-5": [["mlpipeline-metrics", + "/tmp/mlpipeline-metrics.json"], ["mlpipeline-ui-metadata", "/tmp/mlpipeline-ui-metadata.json"]], + "run-a-file-6": [["mlpipeline-metrics", "/tmp/mlpipeline-metrics.json"], ["mlpipeline-ui-metadata", + "/tmp/mlpipeline-ui-metadata.json"]]}' + sidecar.istio.io/inject: "false" + tekton.dev/template: '' + pipelines.kubeflow.org/big_data_passing_format: $(workspaces.$TASK_NAME.path)/artifacts/$ORIG_PR_NAME/$TASKRUN_NAME/$TASK_PARAM_NAME + pipelines.kubeflow.org/pipeline_spec: '{"inputs": [{"default": "0", "name": "claim_id", + "optional": true, "type": "Integer"}, {"default": "https://your-endpoint", "name": + "detection_endpoint", "optional": true, "type": "String"}], "name": "process_claims"}' + labels: + pipelines.kubeflow.org/pipelinename: '' + pipelines.kubeflow.org/generation: '' +spec: + params: + - name: claim_id + value: '0' + - name: detection_endpoint + value: https://your-endpoint + pipelineSpec: + params: + - name: claim_id + default: '0' + - name: detection_endpoint + default: https://your-endpoint + tasks: + - name: initialize + taskSpec: + steps: + - name: main + args: + - | + cd /shared-data + rm -r * + git clone https://github.com/rh-aiservices-bu/insurance-claim-processing + cd insurance-claim-processing + ls + command: + - sh + - -c + env: + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: AWS_ACCESS_KEY_ID + name: aws-connection-shared-minio---pipelines + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: AWS_SECRET_ACCESS_KEY + name: aws-connection-shared-minio---pipelines + - name: ELYRA_RUNTIME_ENV + value: kfp + - name: ELYRA_ENABLE_PIPELINE_INFO + value: "True" + - name: ELYRA_WRITABLE_CONTAINER_DIR + value: /tmp + - name: ELYRA_RUN_NAME + valueFrom: + fieldRef: + fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0 + volumeMounts: + - mountPath: /shared-data + name: processing-pipeline-storage + readOnly: false + stepTemplate: + volumeMounts: + - name: mlpipeline-metrics + mountPath: /tmp + volumes: + - name: mlpipeline-metrics + emptyDir: {} + - name: processing-pipeline-storage + persistentVolumeClaim: + claimName: processing-pipeline-storage + metadata: + labels: + elyra/node-type: notebook-script + elyra/pipeline-name: process_claims + elyra/pipeline-version: '' + elyra/experiment-name: '' + elyra/node-name: initialize + pipelines.kubeflow.org/cache_enabled: "true" + annotations: + elyra/node-file-name: insurance-claim-processing/lab-materials/05/05-05/initialize.py + elyra/pipeline-source: process_claims.pipeline + pipelines.kubeflow.org/task_display_name: initialize + pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", + "outputs": [], "version": "Run a file@sha256=3889d6b450d7892186c111f69a758dd2d7928e45f350a7fb00f8229314150432"}' + - name: get-claims + params: + - name: claim_id + value: $(params.claim_id) + taskSpec: + steps: + - name: main + args: + - | + claim_id="$0" + export claim_id=$claim_id + cd /shared-data + cd insurance-claim-processing/lab-materials/05/05-05 + python get_claims.py + ls + - $(inputs.params.claim_id) + command: + - sh + - -c + env: + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: AWS_ACCESS_KEY_ID + name: aws-connection-shared-minio---pipelines + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: AWS_SECRET_ACCESS_KEY + name: aws-connection-shared-minio---pipelines + - name: ELYRA_RUNTIME_ENV + value: kfp + - name: ELYRA_ENABLE_PIPELINE_INFO + value: "True" + - name: ELYRA_WRITABLE_CONTAINER_DIR + value: /tmp + - name: ELYRA_RUN_NAME + valueFrom: + fieldRef: + fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRES_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0 + volumeMounts: + - mountPath: /shared-data + name: processing-pipeline-storage + readOnly: false + params: + - name: claim_id + stepTemplate: + volumeMounts: + - name: mlpipeline-metrics + mountPath: /tmp + volumes: + - name: mlpipeline-metrics + emptyDir: {} + - name: processing-pipeline-storage + persistentVolumeClaim: + claimName: processing-pipeline-storage + metadata: + labels: + elyra/node-type: notebook-script + elyra/pipeline-name: process_claims + elyra/pipeline-version: '' + elyra/experiment-name: '' + elyra/node-name: get_claims + pipelines.kubeflow.org/cache_enabled: "true" + annotations: + elyra/node-file-name: insurance-claim-processing/lab-materials/05/05-05/get_claims.py + elyra/pipeline-source: process_claims.pipeline + pipelines.kubeflow.org/task_display_name: get_claims + pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", + "outputs": [], "version": "Run a file@sha256=3889d6b450d7892186c111f69a758dd2d7928e45f350a7fb00f8229314150432"}' + runAfter: + - initialize + - name: get-accident-time + taskSpec: + steps: + - name: main + args: + - | + cd /shared-data + cd insurance-claim-processing/lab-materials/05/05-05 + python get_accident_time.py + command: + - sh + - -c + env: + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: AWS_ACCESS_KEY_ID + name: aws-connection-shared-minio---pipelines + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: AWS_SECRET_ACCESS_KEY + name: aws-connection-shared-minio---pipelines + - name: ELYRA_RUNTIME_ENV + value: kfp + - name: ELYRA_ENABLE_PIPELINE_INFO + value: "True" + - name: ELYRA_WRITABLE_CONTAINER_DIR + value: /tmp + - name: ELYRA_RUN_NAME + valueFrom: + fieldRef: + fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRES_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0 + volumeMounts: + - mountPath: /shared-data + name: processing-pipeline-storage + readOnly: false + stepTemplate: + volumeMounts: + - name: mlpipeline-metrics + mountPath: /tmp + volumes: + - name: mlpipeline-metrics + emptyDir: {} + - name: processing-pipeline-storage + persistentVolumeClaim: + claimName: processing-pipeline-storage + metadata: + labels: + elyra/node-type: notebook-script + elyra/pipeline-name: process_claims + elyra/pipeline-version: '' + elyra/experiment-name: '' + elyra/node-name: get_accident_time + pipelines.kubeflow.org/cache_enabled: "true" + annotations: + elyra/node-file-name: insurance-claim-processing/lab-materials/05/05-05/get_accident_time.py + elyra/pipeline-source: process_claims.pipeline + pipelines.kubeflow.org/task_display_name: get_accident_time + pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", + "outputs": [], "version": "Run a file@sha256=da07fb04c1e95b2900f6c50973b0dac8bba94da0e31e927025c89506a70411e7"}' + runAfter: + - get-claims + - name: get-location + taskSpec: + steps: + - name: main + args: + - | + cd /shared-data + cd insurance-claim-processing/lab-materials/05/05-05 + python get_location.py + command: + - sh + - -c + env: + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: AWS_ACCESS_KEY_ID + name: aws-connection-shared-minio---pipelines + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: AWS_SECRET_ACCESS_KEY + name: aws-connection-shared-minio---pipelines + - name: ELYRA_RUNTIME_ENV + value: kfp + - name: ELYRA_ENABLE_PIPELINE_INFO + value: "True" + - name: ELYRA_WRITABLE_CONTAINER_DIR + value: /tmp + - name: ELYRA_RUN_NAME + valueFrom: + fieldRef: + fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRES_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0 + volumeMounts: + - mountPath: /shared-data + name: processing-pipeline-storage + readOnly: false + stepTemplate: + volumeMounts: + - name: mlpipeline-metrics + mountPath: /tmp + volumes: + - name: mlpipeline-metrics + emptyDir: {} + - name: processing-pipeline-storage + persistentVolumeClaim: + claimName: processing-pipeline-storage + metadata: + labels: + elyra/node-type: notebook-script + elyra/pipeline-name: process_claims + elyra/pipeline-version: '' + elyra/experiment-name: '' + elyra/node-name: get_location + pipelines.kubeflow.org/cache_enabled: "true" + annotations: + elyra/node-file-name: insurance-claim-processing/lab-materials/05/05-05/get_location.py + elyra/pipeline-source: process_claims.pipeline + pipelines.kubeflow.org/task_display_name: get_location + pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", + "outputs": [], "version": "Run a file@sha256=0c1606205c836ad73d75f89b44bff3163cbbe9b7c3171334eb5688a5f13f6a4a"}' + runAfter: + - get-claims + - name: get-sentiment + taskSpec: + steps: + - name: main + args: + - | + cd /shared-data + cd insurance-claim-processing/lab-materials/05/05-05 + python get_sentiment.py + command: + - sh + - -c + env: + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: AWS_ACCESS_KEY_ID + name: aws-connection-shared-minio---pipelines + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: AWS_SECRET_ACCESS_KEY + name: aws-connection-shared-minio---pipelines + - name: ELYRA_RUNTIME_ENV + value: kfp + - name: ELYRA_ENABLE_PIPELINE_INFO + value: "True" + - name: ELYRA_WRITABLE_CONTAINER_DIR + value: /tmp + - name: ELYRA_RUN_NAME + valueFrom: + fieldRef: + fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRES_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0 + volumeMounts: + - mountPath: /shared-data + name: processing-pipeline-storage + readOnly: false + stepTemplate: + volumeMounts: + - name: mlpipeline-metrics + mountPath: /tmp + volumes: + - name: mlpipeline-metrics + emptyDir: {} + - name: processing-pipeline-storage + persistentVolumeClaim: + claimName: processing-pipeline-storage + metadata: + labels: + elyra/node-type: notebook-script + elyra/pipeline-name: process_claims + elyra/pipeline-version: '' + elyra/experiment-name: '' + elyra/node-name: get_sentiment + pipelines.kubeflow.org/cache_enabled: "true" + annotations: + elyra/node-file-name: insurance-claim-processing/lab-materials/05/05-05/get_sentiment.py + elyra/pipeline-source: process_claims.pipeline + pipelines.kubeflow.org/task_display_name: get_sentiment + pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", + "outputs": [], "version": "Run a file@sha256=a0516303ea38bb88d586b2c791cb59e60f547cbc6aed3bd000d925a7821b2bfa"}' + runAfter: + - get-claims + - name: detect-objects + params: + - name: detection_endpoint + value: $(params.detection_endpoint) + taskSpec: + steps: + - name: main + args: + - | + detection_endpoint="$0" + export detection_endpoint=$detection_endpoint + cd /shared-data + cd insurance-claim-processing/lab-materials/05/05-05 + python detect_objects.py + - $(inputs.params.detection_endpoint) + command: + - sh + - -c + env: + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: AWS_ACCESS_KEY_ID + name: aws-connection-shared-minio---pipelines + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: AWS_SECRET_ACCESS_KEY + name: aws-connection-shared-minio---pipelines + - name: ELYRA_RUNTIME_ENV + value: kfp + - name: ELYRA_ENABLE_PIPELINE_INFO + value: "True" + - name: ELYRA_WRITABLE_CONTAINER_DIR + value: /tmp + - name: ELYRA_RUN_NAME + valueFrom: + fieldRef: + fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRES_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + - name: IMAGES_BUCKET + value: $(NAMESPACE) + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0 + volumeMounts: + - mountPath: /shared-data + name: processing-pipeline-storage + readOnly: false + params: + - name: detection_endpoint + stepTemplate: + volumeMounts: + - name: mlpipeline-metrics + mountPath: /tmp + volumes: + - name: mlpipeline-metrics + emptyDir: {} + - name: processing-pipeline-storage + persistentVolumeClaim: + claimName: processing-pipeline-storage + metadata: + labels: + elyra/node-type: notebook-script + elyra/pipeline-name: process_claims + elyra/pipeline-version: '' + elyra/experiment-name: '' + elyra/node-name: detect_objects + pipelines.kubeflow.org/cache_enabled: "true" + annotations: + elyra/node-file-name: insurance-claim-processing/lab-materials/05/05-05/detect_objects.py + elyra/pipeline-source: process_claims.pipeline + pipelines.kubeflow.org/task_display_name: detect_objects + pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", + "outputs": [], "version": "Run a file@sha256=97bb4511ba9be4acba71bc51de5bde38d838b73e69cbb1cb8e2a6b28952537fd"}' + runAfter: + - get-claims + - name: summarize-text + taskSpec: + steps: + - name: main + args: + - | + cd /shared-data + cd insurance-claim-processing/lab-materials/05/05-05 + python summarize_text.py + command: + - sh + - -c + env: + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + key: AWS_ACCESS_KEY_ID + name: aws-connection-shared-minio---pipelines + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + key: AWS_SECRET_ACCESS_KEY + name: aws-connection-shared-minio---pipelines + - name: ELYRA_RUNTIME_ENV + value: kfp + - name: ELYRA_ENABLE_PIPELINE_INFO + value: "True" + - name: ELYRA_WRITABLE_CONTAINER_DIR + value: /tmp + - name: ELYRA_RUN_NAME + valueFrom: + fieldRef: + fieldPath: metadata.annotations['pipelines.kubeflow.org/run_name'] + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRES_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-processing-pipeline:1.0 + volumeMounts: + - mountPath: /shared-data + name: processing-pipeline-storage + readOnly: false + stepTemplate: + volumeMounts: + - name: mlpipeline-metrics + mountPath: /tmp + volumes: + - name: mlpipeline-metrics + emptyDir: {} + - name: processing-pipeline-storage + persistentVolumeClaim: + claimName: processing-pipeline-storage + metadata: + labels: + elyra/node-type: notebook-script + elyra/pipeline-name: process_claims + elyra/pipeline-version: '' + elyra/experiment-name: '' + elyra/node-name: summarize_text + pipelines.kubeflow.org/cache_enabled: "true" + annotations: + elyra/node-file-name: insurance-claim-processing/lab-materials/05/05-05/summarize_text.py + elyra/pipeline-source: process_claims.pipeline + pipelines.kubeflow.org/task_display_name: summarize_text + pipelines.kubeflow.org/component_spec_digest: '{"name": "Run a file", + "outputs": [], "version": "Run a file@sha256=8ace3a6f7e6e8f14b8102c388a305026254f0dd18c0630eada6a0ba347dda20e"}' + runAfter: + - get-claims diff --git a/lab-materials/05/process_image.py b/lab-materials/05/05-05/process_image.py similarity index 98% rename from lab-materials/05/process_image.py rename to lab-materials/05/05-05/process_image.py index 428efbd4..05185a3e 100644 --- a/lab-materials/05/process_image.py +++ b/lab-materials/05/05-05/process_image.py @@ -102,7 +102,7 @@ def _unpack(response_item): def send_request(image, endpoint): payload = _serialize(image) - raw_response = requests.post(endpoint, json = payload) + raw_response = requests.post(f"{endpoint}/v2/models/my-first-model/infer", json = payload) try: response = raw_response.json() except: diff --git a/lab-materials/05/requirements.txt b/lab-materials/05/05-05/requirements.txt similarity index 100% rename from lab-materials/05/requirements.txt rename to lab-materials/05/05-05/requirements.txt diff --git a/lab-materials/05/summarize_text.py b/lab-materials/05/05-05/summarize_text.py similarity index 94% rename from lab-materials/05/summarize_text.py rename to lab-materials/05/05-05/summarize_text.py index 3be0a33e..cd1567ae 100644 --- a/lab-materials/05/summarize_text.py +++ b/lab-materials/05/05-05/summarize_text.py @@ -16,6 +16,7 @@ **dotenv_values(".env"), # load shared development variables **dotenv_values(".env.secret"), # load sensitive variables **os.environ, # override loaded values with environment variables + **dotenv_values(".pipeline-envs"), # load pipeline-specific vars } db = db_utils.Database(config, logger) diff --git a/lab-materials/05/templates/location_template.txt b/lab-materials/05/05-05/templates/location_template.txt similarity index 100% rename from lab-materials/05/templates/location_template.txt rename to lab-materials/05/05-05/templates/location_template.txt diff --git a/lab-materials/05/templates/sentiment_template.txt b/lab-materials/05/05-05/templates/sentiment_template.txt similarity index 100% rename from lab-materials/05/templates/sentiment_template.txt rename to lab-materials/05/05-05/templates/sentiment_template.txt diff --git a/lab-materials/05/templates/summary_template.txt b/lab-materials/05/05-05/templates/summary_template.txt similarity index 100% rename from lab-materials/05/templates/summary_template.txt rename to lab-materials/05/05-05/templates/summary_template.txt diff --git a/lab-materials/05/templates/time_template.txt b/lab-materials/05/05-05/templates/time_template.txt similarity index 100% rename from lab-materials/05/templates/time_template.txt rename to lab-materials/05/05-05/templates/time_template.txt diff --git a/lab-materials/05/05-05/test_image.jpg b/lab-materials/05/05-05/test_image.jpg new file mode 100644 index 00000000..8feadd12 Binary files /dev/null and b/lab-materials/05/05-05/test_image.jpg differ diff --git a/lab-materials/05/app/db-init-job.yaml b/lab-materials/05/app/db-init-job.yaml new file mode 100644 index 00000000..10944121 --- /dev/null +++ b/lab-materials/05/app/db-init-job.yaml @@ -0,0 +1,59 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: db-init-job + annotations: + argocd.argoproj.io/sync-wave: "1" +spec: + template: + spec: + initContainers: + - name: wait-for-db + image: busybox:1.28 + command: ['sh', '-c', 'until nc -z -v -w30 $POSTGRESQL_DATABASE 5432; do echo "Waiting for database connection..."; sleep 2; done;'] + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRESQL_DATABASE + value: claimdb.$(NAMESPACE).svc.cluster.local + containers: + - name: postgresql + image: registry.redhat.io/rhel9/postgresql-13:latest + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POSTGRESQL_DATABASE + valueFrom: + secretKeyRef: + name: claimdb + key: database-name + - name: POSTGRESQL_USER + valueFrom: + secretKeyRef: + name: claimdb + key: database-user + - name: PGPASSWORD + valueFrom: + secretKeyRef: + name: claimdb + key: database-password + - name: POSTGRESQL_DATABASE_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + command: ["/bin/bash", "-c"] + args: + - | + echo "Running SQL script" + psql -h $POSTGRESQL_DATABASE_HOST -p 5432 -U $POSTGRESQL_USER -d $POSTGRESQL_DATABASE -f /sql-script/script.sql + volumeMounts: + - name: sql-script-volume + mountPath: /sql-script + restartPolicy: Never + volumes: + - name: sql-script-volume + configMap: + name: sql-script-configmap + backoffLimit: 4 \ No newline at end of file diff --git a/lab-materials/05/app/deployment-app.yaml b/lab-materials/05/app/deployment-app.yaml new file mode 100644 index 00000000..28efe9fd --- /dev/null +++ b/lab-materials/05/app/deployment-app.yaml @@ -0,0 +1,93 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ic-app + annotations: + argocd.argoproj.io/sync-wave: "2" +spec: + replicas: 1 + selector: + matchLabels: + app: ic-app + template: + metadata: + creationTimestamp: null + labels: + app: ic-app + deployment: ic-app + spec: + containers: + - name: insurance-claim-processing-git + image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-app:1.3 + ports: + - containerPort: 5000 + protocol: TCP + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: INFERENCE_SERVER_URL + value: http://llm.ic-shared-llm.svc.cluster.local:3000/ + - name: MAX_NEW_TOKENS + value: '1024' + - name: TOP_K + value: '10' + - name: TOP_P + value: '0.95' + - name: TYPICAL_P + value: '0.95' + - name: TEMPERATURE + value: '0.01' + - name: REPETITION_PENALTY + value: '1.03' + - name: POSTGRES_HOST + value: claimdb.$(NAMESPACE).svc.cluster.local + - name: POSTGRES_DB + valueFrom: + secretKeyRef: + name: claimdb + key: database-name + - name: POSTGRES_USER + valueFrom: + secretKeyRef: + name: claimdb + key: database-user + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: claimdb + key: database-password + - name: POSTGRES_PORT + value: '5432' + - name: S3_ENDPOINT_URL + value: http://minio.ic-shared-minio.svc.cluster.local:9000 + - name: IMAGES_BUCKET + value: $(NAMESPACE) + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: secret-minio + key: aws_access_key_id + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + name: secret-minio + key: aws_secret_access_key + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: Always + restartPolicy: Always + terminationGracePeriodSeconds: 30 + dnsPolicy: ClusterFirst + securityContext: {} + schedulerName: default-scheduler + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 25% + maxSurge: 25% + revisionHistoryLimit: 10 + progressDeadlineSeconds: 600 \ No newline at end of file diff --git a/lab-materials/05/app/deployment-db.yaml b/lab-materials/05/app/deployment-db.yaml new file mode 100644 index 00000000..65bf14e8 --- /dev/null +++ b/lab-materials/05/app/deployment-db.yaml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: claimdb + annotations: + argocd.argoproj.io/sync-wave: "1" +spec: + selector: + matchLabels: + app: claimdb + replicas: 1 + template: + metadata: + labels: + app: claimdb + spec: + containers: + - name: postgresql + image: registry.redhat.io/rhel9/postgresql-13:latest + resources: + limits: + memory: 512Mi + readinessProbe: + exec: + command: + - /usr/libexec/check-container + initialDelaySeconds: 5 + timeoutSeconds: 1 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + livenessProbe: + exec: + command: + - /usr/libexec/check-container + - '--live' + initialDelaySeconds: 120 + timeoutSeconds: 10 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + env: + - name: POSTGRESQL_USER + valueFrom: + secretKeyRef: + name: claimdb + key: database-user + - name: POSTGRESQL_PASSWORD + valueFrom: + secretKeyRef: + name: claimdb + key: database-password + - name: POSTGRESQL_DATABASE + valueFrom: + secretKeyRef: + name: claimdb + key: database-name + securityContext: + capabilities: {} + privileged: false + ports: + - containerPort: 5432 + protocol: TCP + imagePullPolicy: IfNotPresent + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - name: claimdb-data + mountPath: /var/lib/pgsql/data + volumes: + - name: claimdb-data + persistentVolumeClaim: + claimName: claimdb + strategy: + type: Recreate diff --git a/lab-materials/05/app/kustomization.yaml b/lab-materials/05/app/kustomization.yaml new file mode 100644 index 00000000..1574a2f2 --- /dev/null +++ b/lab-materials/05/app/kustomization.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +commonLabels: + component: ic-claim-app + +resources: +# wave 0 +- secret-db.yaml +- secret-minio.yaml +- pvc-db.yaml +- sql-script-configmap.yaml +# wave 1 +- deployment-db.yaml +- service-db.yaml +- db-init-job.yaml +- populate-images.yaml +# wave 2 +- deployment-app.yaml +- service-app.yaml +- route-app.yaml diff --git a/lab-materials/05/app/populate-images.yaml b/lab-materials/05/app/populate-images.yaml new file mode 100644 index 00000000..4e0a3383 --- /dev/null +++ b/lab-materials/05/app/populate-images.yaml @@ -0,0 +1,68 @@ +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: populate-images + annotations: + argocd.argoproj.io/sync-wave: "1" +spec: + backoffLimit: 4 + template: + spec: + initContainers: + - name: wait-for-minio + image: busybox:1.28 + command: ['sh', '-c', 'until nc -z -v -w30 $MINIO_ENDPOINT 9000; do echo "Waiting for Minio connection..."; sleep 2; done;'] + env: + - name: MINIO_ENDPOINT + value: minio.ic-shared-minio.svc.cluster.local + containers: + - name: add-images-to-bucket + image: image-registry.openshift-image-registry.svc:5000/redhat-ods-applications/s2i-generic-data-science-notebook:1.2 + imagePullPolicy: IfNotPresent + command: ["/bin/bash"] + args: + - -ec + - |- + git clone https://github.com/rh-aiservices-bu/insurance-claim-processing.git + + cat << 'EOF' | python3 + import boto3, os, botocore + + s3 = boto3.client("s3", + endpoint_url=os.getenv("AWS_S3_ENDPOINT"), + aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"), + aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY")) + + # Set bucket + bucket_name = os.getenv("NAMESPACE") + + # Upload original images to minio + for filename in os.listdir("insurance-claim-processing/bootstrap/ic-shared-database/images/original_images"): + with open(f"insurance-claim-processing/bootstrap/ic-shared-database/images/original_images/{filename}", "rb") as f: + s3.upload_fileobj(f, bucket_name, f"original_images/{filename}") + + # Upload processed images to minio + for filename in os.listdir("insurance-claim-processing/bootstrap/ic-shared-database/images/processed_images"): + with open(f"insurance-claim-processing/bootstrap/ic-shared-database/images/processed_images/{filename}", "rb") as f: + s3.upload_fileobj(f, bucket_name, f"processed_images/{filename}") + + EOF + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: AWS_S3_ENDPOINT + value: http://minio.ic-shared-minio.svc.cluster.local:9000 + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: secret-minio + key: aws_access_key_id + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + name: secret-minio + key: aws_secret_access_key + restartPolicy: Never diff --git a/lab-materials/05/app/pvc-db.yaml b/lab-materials/05/app/pvc-db.yaml new file mode 100644 index 00000000..4b1a2bdd --- /dev/null +++ b/lab-materials/05/app/pvc-db.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: claimdb + labels: + app: claimdb + annotations: + argocd.argoproj.io/sync-wave: "0" +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi diff --git a/lab-materials/05/app/route-app.yaml b/lab-materials/05/app/route-app.yaml new file mode 100644 index 00000000..c4db1e43 --- /dev/null +++ b/lab-materials/05/app/route-app.yaml @@ -0,0 +1,20 @@ +--- +kind: Route +apiVersion: route.openshift.io/v1 +metadata: + name: ic-app + labels: + app: ic-app + annotations: + argocd.argoproj.io/sync-wave: "2" +spec: + to: + kind: Service + name: ic-app + weight: 100 + port: + targetPort: http + tls: + termination: edge + insecureEdgeTerminationPolicy: Redirect + wildcardPolicy: None diff --git a/lab-materials/05/app/secret-db.yaml b/lab-materials/05/app/secret-db.yaml new file mode 100644 index 00000000..12966855 --- /dev/null +++ b/lab-materials/05/app/secret-db.yaml @@ -0,0 +1,14 @@ +--- +kind: Secret +apiVersion: v1 +metadata: + name: claimdb + labels: + app: claimdb + annotations: + argocd.argoproj.io/sync-wave: "0" +stringData: + database-name: claimdb + database-password: claimdb + database-user: claimdb +type: Opaque \ No newline at end of file diff --git a/lab-materials/05/app/secret-minio.yaml b/lab-materials/05/app/secret-minio.yaml new file mode 100644 index 00000000..75553db4 --- /dev/null +++ b/lab-materials/05/app/secret-minio.yaml @@ -0,0 +1,13 @@ +--- +kind: Secret +apiVersion: v1 +metadata: + name: secret-minio + labels: + app: ic-app-minio + annotations: + argocd.argoproj.io/sync-wave: "0" +stringData: + aws_access_key_id: minio + aws_secret_access_key: minio123 +type: Opaque \ No newline at end of file diff --git a/lab-materials/05/app/service-app.yaml b/lab-materials/05/app/service-app.yaml new file mode 100644 index 00000000..737509fa --- /dev/null +++ b/lab-materials/05/app/service-app.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: ic-app + labels: + app: ic-app + annotations: + argocd.argoproj.io/sync-wave: "2" +spec: + ports: + - name: http + protocol: TCP + port: 5000 + targetPort: 5000 + selector: + app: ic-app + sessionAffinity: None + type: ClusterIP diff --git a/lab-materials/05/app/service-db.yaml b/lab-materials/05/app/service-db.yaml new file mode 100644 index 00000000..2506f341 --- /dev/null +++ b/lab-materials/05/app/service-db.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: claimdb + labels: + app: claimdb + annotations: + argocd.argoproj.io/sync-wave: "1" +spec: + ports: + - name: postgresql + protocol: TCP + port: 5432 + targetPort: 5432 + selector: + app: claimdb + sessionAffinity: None + type: ClusterIP diff --git a/lab-materials/05/app/sql-script-configmap.yaml b/lab-materials/05/app/sql-script-configmap.yaml new file mode 100644 index 00000000..8401f3c9 --- /dev/null +++ b/lab-materials/05/app/sql-script-configmap.yaml @@ -0,0 +1,234 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: sql-script-configmap + annotations: + argocd.argoproj.io/sync-wave: "0" +data: + script.sql: | + CREATE SCHEMA IF NOT EXISTS claims + AUTHORIZATION claimdb; + + DROP TABLE IF EXISTS claims.claims CASCADE; + DROP TABLE IF EXISTS claims.original_images CASCADE; + DROP TABLE IF EXISTS claims.processed_images CASCADE; + DROP SEQUENCE IF EXISTS claims.claims_id_seq CASCADE; + DROP SEQUENCE IF EXISTS claims.original_images_id_seq CASCADE; + DROP SEQUENCE IF EXISTS claims.processed_images_id_seq CASCADE; + + -- SEQUENCE: claims.claims_id_seq + + CREATE SEQUENCE IF NOT EXISTS claims.claims_id_seq + INCREMENT 1 + START 1 + MINVALUE 1 + MAXVALUE 2147483647 + CACHE 1; + + -- Table: claims.claims + + CREATE TABLE IF NOT EXISTS claims.claims + ( + id integer NOT NULL DEFAULT nextval('claims.claims_id_seq'::regclass), + subject text COLLATE pg_catalog."default", + body text COLLATE pg_catalog."default", + summary text COLLATE pg_catalog."default", + location text COLLATE pg_catalog."default", + "time" text COLLATE pg_catalog."default", + sentiment text COLLATE pg_catalog."default", + CONSTRAINT claims_pkey PRIMARY KEY (id) + ) + WITH ( + OIDS = FALSE + ) + TABLESPACE pg_default; + + -- Link Table to Sequence + + ALTER SEQUENCE claims.claims_id_seq + OWNED BY claims.claims.id; + + -- SEQUENCE: claims.original_images_id_seq + + CREATE SEQUENCE IF NOT EXISTS claims.original_images_id_seq + INCREMENT 1 + START 1 + MINVALUE 1 + MAXVALUE 2147483647 + CACHE 1; + + -- Table: claims.original_images + + CREATE TABLE IF NOT EXISTS claims.original_images + ( + id integer NOT NULL DEFAULT nextval('claims.original_images_id_seq'::regclass), + image_name text COLLATE pg_catalog."default" NOT NULL, + image_key text COLLATE pg_catalog."default" NOT NULL, + claim_id integer NOT NULL, + CONSTRAINT original_images_pkey PRIMARY KEY (id), + CONSTRAINT fk_claim_id FOREIGN KEY (claim_id) + REFERENCES claims.claims (id) MATCH SIMPLE + ON UPDATE CASCADE + ON DELETE CASCADE + ) + WITH ( + OIDS = FALSE + ) + TABLESPACE pg_default; + + -- Link Table to Sequence + + ALTER SEQUENCE claims.original_images_id_seq + OWNED BY claims.original_images.id; + + -- SEQUENCE: claims.processed_images_id_seq + + CREATE SEQUENCE IF NOT EXISTS claims.processed_images_id_seq + INCREMENT 1 + START 1 + MINVALUE 1 + MAXVALUE 2147483647 + CACHE 1; + + -- Table: claims.processed_images + + CREATE TABLE IF NOT EXISTS claims.processed_images + ( + id integer NOT NULL DEFAULT nextval('claims.processed_images_id_seq'::regclass), + image_name text COLLATE pg_catalog."default" NOT NULL, + image_key text COLLATE pg_catalog."default" NOT NULL, + claim_id integer NOT NULL, + CONSTRAINT processed_images_pkey PRIMARY KEY (id), + CONSTRAINT fk_claim_id FOREIGN KEY (claim_id) + REFERENCES claims.claims (id) MATCH SIMPLE + ON UPDATE CASCADE + ON DELETE CASCADE + ) + WITH ( + OIDS = FALSE + ) + TABLESPACE pg_default; + + -- Link Table to Sequence + + ALTER SEQUENCE claims.processed_images_id_seq + OWNED BY claims.processed_images.id; + + ----- + -- INSERTS + ----- + -- CLAIM1 + + INSERT INTO claims.claims (subject, body, summary, location, time, sentiment) VALUES ('Claim for Recent Car Accident - Policy Number: AC-987654321', ' + Dear Pacific Shield Insurance, + + I hope this email finds you well. My name is Sarah Turner, and I am writing to file a claim for a recent car accident that occurred on January 2nd, 2024, at approximately 3:30 PM. My policy number is AC-987654321. + + The accident took place at the intersection of Birch Street and Willow Avenue in the city of Evergreen. I was driving my vehicle, a black Toyota Camry with license plate number DEF-456, heading south on Birch Street. At the intersection, the traffic signal was green, and I proceeded through the intersection. + + At the same time, another vehicle, a blue Chevrolet Traverse with license plate number GHI-789, was traveling west on Willow Avenue. Unfortunately, the driver failed to stop at the red traffic signal, resulting in a collision with the front passenger side of my vehicle. + + The impact caused significant damage to both vehicles. The front bumper and right headlight of my Toyota Camry are extensively damaged, and there are also damages to the front driver''s side of the Chevrolet Traverse. Fortunately, no injuries were sustained during the accident, and both drivers were able to move their vehicles to the side of the road. + + I promptly exchanged information with the other driver, Mr. Daniel Reynolds, including our names, phone numbers, insurance details, and a brief description of the accident. Additionally, I took photos of the accident scene, including the damages to both vehicles and the position of the traffic signal. + + I have attached the necessary documents to this email, including the photos, a copy of the police report filed at the Evergreen Police Department, and the estimate for the repair costs from Evergreen Auto Repair, where I have taken my vehicle for assessment. + + I kindly request your prompt attention to this matter and would appreciate any guidance on the next steps in the claims process. If you require any additional information or documentation, please do not hesitate to contact me at (555) 123-4567 or sarah.turner@email.com. + + Thank you for your assistance, and I look forward to a swift resolution of this claim. + + Sincerely, + + Sarah Turner + 123 Oak Street + Evergreen, CA 98765 + (555) 123-4567 + sarah.turner@email.com + ', + ' + On January 2, 2024, at around 3:30 PM, a car accident occurred at the intersection of Birch Street and Willow Avenue in Evergreen. The involved parties were Sarah Turner, driving a black Toyota Camry (DEF-456), and Daniel Reynolds in a blue Chevrolet Traverse (GHI-789). + + Sarah was heading south on Birch Street when Daniel failed to stop at the red traffic signal on Willow Avenue, causing a collision with Sarah''s vehicle. Both drivers exchanged information and took photos of the accident scene, which included damages to the front passenger side of Sarah''s Toyota Camry and the front driver''s side of Daniel''s Chevrolet Traverse. No injuries were reported. + + Sarah has attached necessary documents, such as photos, a police report, and an estimate for repair costs, to her email. She requests prompt attention to the claim and is available at (555) 123-4567 or sarah.turner@email.com for any additional information or documentation needed. + ', + 'Intersection of Birch Street and Willow Avenue in the city of Evergreen', + 'January 2nd, 2024, at approximately 3:30 PM', + 'The sender, Sarah Turner, expresses a polite and professional tone in her email. She is respectful and detailed in her description of the car accident and the subsequent steps she took to file a claim. She requests prompt attention to the matter and provides all necessary documentation. Overall, her sentiment is one of being proactive and cooperative in the claims process.' + ); + + -- CLAIM2 + + INSERT INTO claims.claims (subject, body, summary, location, time, sentiment) VALUES ('Urgent: Unacceptable Delay and Lack of Communication Regarding Claim #XYZ789', ' + Dear Prestige Insurances, + + I am writing to express my extreme dissatisfaction with the appalling service I have received concerning my recent claim, reference number #XYZ789. The lack of communication and delayed response from your company is utterly unacceptable, and I demand immediate attention to rectify this matter. + + The accident occurred on January 15, 2024, at approximately 3:45 PM, near the intersection of Maple Street and Oak Avenue in Rivertown. My vehicle, a Silver Hawk GT, was struck by another driver, identified as Samantha Reynolds, who ran a red light at the aforementioned intersection. This incident resulted in substantial damage to the front end of my car, including severe structural damage and airbag deployment. + + I reported the claim immediately after the accident, providing all necessary details, witness information, and a detailed description of the events leading up to the collision. However, the response—or lack thereof—from your company has been absolutely deplorable. I have yet to receive any updates on the status of my claim, and my attempts to contact your claims department have been met with prolonged hold times and unhelpful representatives. + + I insist on a thorough investigation into this matter and demand an explanation for the unreasonable delay. It is my right as a policyholder to receive timely updates on the progress of my claim and to be treated with the respect and urgency that this situation demands. + + Furthermore, the lack of transparency and communication from your company is not only unprofessional but also exacerbates the stress and inconvenience caused by the accident itself. I expect immediate action to be taken to expedite the processing of my claim and provide me with the information I am entitled to as a paying customer. + + I am appalled at the disregard for customer satisfaction and the apparent negligence displayed by your company in handling my claim. If my concerns are not addressed promptly and to my satisfaction, I will have no choice but to escalate this matter to the appropriate regulatory authorities and consider legal action. + + I demand a comprehensive update on the status of my claim within the next 48 hours. Failing to meet this deadline will only reinforce my belief that your company values its bottom line over the well-being of its customers. + + I trust that you will treat this matter with the urgency and seriousness it deserves. + + Sincerely, + John T. Anderson + Policy Number: PT567890 + ', + ' + The text is a letter of complaint from John T. Anderson to Prestige Insurances regarding an unresolved car insurance claim, #XYZ789. The incident occurred on January 15, 2024, when Anderson''s vehicle was hit by another driver, Samantha Reynolds, who ran a red light. The accident caused significant damage to Anderson''s car, and he reported the claim immediately, providing all necessary details. However, he has experienced poor communication and a delayed response from Prestige Insurances. Anderson demands an explanation for the delay, transparency, and urgency in handling his claim. He threatens to escalate the matter to regulatory authorities and consider legal action if his concerns are not addressed promptly. Anderson requests a comprehensive update on the status of his claim within the next 48 hours. + ', + 'Near the intersection of Maple Street and Oak Avenue in Rivertown', + 'January 15, 2024, at approximately 3:45 PM', + 'The sender of this claim is expressing extreme dissatisfaction with the handling of their insurance claim by Prestige Insurances. They are frustrated with the lack of communication and the significant delay in processing their claim. The tone of the message is demanding and assertive, with the sender threatening to escalate the matter if their concerns are not addressed promptly.' + ); + + -- CLAIM3 + + INSERT INTO claims.claims (subject, body) VALUES ('Urgent: Car Accident Claim Assistance Needed', ' + Dear AssuranceCare Inc., + + I hope this email finds you well. I''m writing to, uh, inform you about, well, something that happened recently. It''s, um, about a car accident, and I''m not really sure how to, you know, go about all this. I''m kinda anxious and confused, to be honest. + + So, the accident, uh, occurred on January 15, 2024, at around 3:30 PM. I was driving, or, um, attempting to drive, my car at the intersection of Maple Street and Elm Avenue. It''s kinda close to, um, a gas station and a, uh, coffee shop called Brew Haven? I''m not sure if that matters, but, yeah. + + So, I was just, you know, driving along, and suddenly, out of nowhere, another car, a Blue Crest Sedan, crashed into the, uh, driver''s side of my car. It was like, whoa, what just happened, you know? There was this screeching noise and, uh, some honking from other cars, and I just felt really, uh, overwhelmed. + + The weather was, um, kinda cloudy that day, but I don''t think it was raining. I mean, I can''t really remember. Sorry if that''s important. Anyway, the road, or, well, maybe the intersection, was kinda busy, with cars going in different directions. I guess that''s, you know, a detail you might need? + + As for damages, my car has, uh, significant damage on the driver''s side. The front door is all dented, and the side mirror is, like, hanging by a thread. It''s not really drivable in its current, uh, state. The Blue Crest Sedan also had some damage, but I''m not exactly sure what because, you know, everything happened so fast. + + I did manage to exchange information with the other driver. Their name is Sarah Johnson, and I got their phone number (555-1234), license plate number (ABC123), and insurance information. So, yeah, I hope that''s helpful. + + I''m not sure what, um, steps I should take now. Do I need to go to a specific, uh, repair shop? Should I get a quote for the repairs? And, uh, how do I, you know, proceed with the insurance claim? I''m kinda lost here, and any guidance or assistance you can provide would be really, um, appreciated. + + Sorry if this email is a bit all over the place. I''m just really, uh, anxious about the whole situation. Thank you for your understanding. + + Sincerely, + + Jane Doe + Policy Number: AC987654 + '); + + -- IMAGES + + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car0.jpg', 'original_images/car0.jpg', 1); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car1.jpg', 'original_images/car1.jpg', 1); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car2.jpg', 'original_images/car2.jpg', 2); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car3.jpg', 'original_images/car3.jpg', 3); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car5.jpg', 'original_images/car5.jpg', 3); + INSERT INTO claims.original_images (image_name, image_key, claim_id) VALUES ('car6.jpg', 'original_images/car6.jpg', 3); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car0-processed.jpg', 'processed_images/car0-processed.jpg', 1); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car1-processed.jpg', 'processed_images/car1-processed.jpg', 1); + INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car2-processed.jpg', 'processed_images/car2-processed.jpg', 2); + -- INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car3-processed.jpg', 'processed_images/car3-processed.jpg', 3); + -- INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car5-processed.jpg', 'processed_images/car5-processed.jpg', 3); + -- INSERT INTO claims.processed_images (image_name, image_key, claim_id) VALUES ('car6-processed.jpg', 'processed_images/car6-processed.jpg', 3);