diff --git a/README.md b/README.md index 9c87e631..29f7aa8a 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,167 @@ -# Content Processing Solution Accelerator +# Content processing solution accelerator +This solution accelerator enables customers to programmatically extract data and apply schemas to unstructured documents across text-based and multi-modal content. During processing, extraction and data schema transformation - these steps are scored for accuracy to automate processing and identify as-needed human validation. This allows for improved accuracy and greater speed for data integration into downstream systems. -MENU: [**USER STORY**](#user-story) \| [**QUICK DEPLOY**](#quick-deploy) \| [**SUPPORTING DOCUMENTATION**](#supporting-documentation) - -


-User story -

-### Overview +
+ +[**SOLUTION OVERVIEW**](#solution-overview) \| [**QUICK DEPLOY**](#quick-deploy) \| [**BUSINESS SCENARIO**](#business-scenario) \| [**SUPPORTING DOCUMENTATION**](#supporting-documentation) -This solution accelerator enables customers to programmatically extract data and apply schemas to unstructured documents across text-based and multi-modal content. During processing, extraction and data schema transformation - these steps are scored for accuracy to automate processing and identify as-needed human validation. This allows for improved accuracy and greater speed for data integration into downstream systems. +
+
-It leverages Azure AI Foundry, Azure AI Content Understanding, Azure OpenAI Service, Azure blob storage, and Azure Cosmos DB to transform large volumes of unstructured content through event-driven processing pipelines for integration into downstream applications and post-processing activities. +

+Solution overview +

+The solution leverages Azure AI Foundry, Azure AI Content Understanding, Azure OpenAI Service, Azure blob storage, and Azure Cosmos DB to transform large volumes of unstructured content through event-driven processing pipelines for integration into downstream applications and post-processing activities. -### Technical key features +### Solution architecture +|![image](./docs/images/readme/solution-architecture.png)| +|---| -- **Multi-modal content processing:** Utilizes machine learning-based OCR for efficient text extraction and integrates GPT Vision for processing various content formats.​ -- **Schema-based data transformation:** Maps extracted content to custom or industry-defined schemas and outputs as JSON for interoperability.​ +### How to customize +If you'd like to customize the solution accelerator, here are some common areas to start: -- **Confidence scoring:** Calculation of entity extraction and schema mapping processes for accuracy, providing scores to drive manual human-in-the-loop review, if desired. +[Adding your own Schemas and Data](./docs/CustomizeSchemaData.md) -- **Review, validate, update:** Transparency in reviewing processing steps and final output - allowing for review, comparison to source asset, ability to modify output results, and annotation for historical reference. +[Modifying System Processing Prompts](./docs/CustomizeSystemPrompts.md) -- **API driven processing pipelines:** API end-points are available for external source systems to integrate event-driven processing workflows. +[Ingesting API for Event-Driven Processing](./docs/API.md)
-Below is an image of the solution accelerator: +### Additional resources -![image](./docs/Images/ReadMe/ui.png) +[Technical Architecture](./docs/TechnicalArchitecture.md) -### Use case / scenario +[Technical Approach & Processing Pipeline](./docs/ProcessingPipelineApproach.md) -A data analyst at a property insurance company manages and ensures claims for data accuracy and compliance. +
-A recent natural disaster has led to an influx of insurance claims coming into the pipeline. The analyst is tasked with accurately validating ingested data from claims and invoices being processed through the system. Claims data includes various multi-modal content types, with details extracted and mapped to defined schemas such as policy plans, invoices, and insurance adjuster reports. +### Key features +
Click to learn more about the key features this solution enables -AI is used to extract, transform, and flag potential discrepancies, such as missing policyholder details and outlier repair estimates. The data analyst then cross-checks the findings against historical claims data and regulatory guidelines. Collaborating with the compliance team, she verifies the flagged issues and refines the dataset. + - **Multi-modal content processing**
+ Utilizes machine learning-based OCR for efficient text extraction and integrates GPT Vision for processing various content formats.​ -Thanks to AI pipeline processing, data moves much faster, more accurately, and is more seamlessly integrated into the data analyst's workflow. + - **Schema-based data transformation**
+ Maps extracted content to custom or industry-defined schemas and outputs as JSON for interoperability -The sample data used in this repository is synthetic and generated using Azure OpenAI service. The data is intended for use as sample data only. + - **Confidence scoring**
+ Calculation of entity extraction and schema mapping processes for accuracy, providing scores to drive manual human-in-the-loop review, if desired -### Solution architecture -![image](./docs/Images/ReadMe/solution-architecture.png) + - **Review, validate, update**
+ Transparency in reviewing processing steps and final output - allowing for review, comparison to source asset, ability to modify output results, and annotation for historical reference + - **API driven processing pipelinese**
+ API end-points are available for external source systems to integrate event-driven processing workflows + +
-

-
-QUICK DEPLOY +

+

+Quick deploy

-Follow the quick deploy steps on the deployment guide to deploy this solution to your own Azure subscription. +### How to install or deploy +Follow the quick deploy steps on the deployment guide to deploy this solution to your own Azure subscription. [Click here to launch the deployment guide](./docs/DeploymentGuide.md) - +

| [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/content-processing-solution-accelerator) | [![Open in Dev Containers](https://img.shields.io/static/v1?style=for-the-badge&label=Dev%20Containers&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/content-processing-solution-accelerator) | |---|---| -
+
+ +> ⚠️ **Important: Check Azure OpenAI Quota Availability** +
To ensure sufficient quota is available in your subscription, please follow [quota check instructions guide](./docs/QuotaCheck.md) before you deploy the solution. -> ⚠️ **Important: Check Azure OpenAI Quota Availability**
To ensure sufficient quota is available in your subscription, please follow [quota check instructions guide](./docs/quota_check.md) before you deploy the solution. +
-
+### Prerequisites and Costs +To deploy this solution accelerator, ensure you have access to an [Azure subscription](https://azure.microsoft.com/free/) with the necessary permissions to create **resource groups, resources, app registrations, and assign roles at the resource group level**. This should include Contributor role at the subscription level and Role Based Access Control role on the subscription and/or resource group level. Follow the steps in [Azure Account Set Up](./docs/AzureAccountSetUp.md). -

-Supporting Documentation -

+Here are some example regions where the services are available: East US, East US2, Australia East, UK South, France Central, Africa. -### Costs +Check the [Azure Products by Region](https://azure.microsoft.com/en-us/explore/global-infrastructure/products-by-region/?products=all®ions=all) page and select a **region** where the following services are available. -Pricing varies per region and usage, so it isn't possible to predict exact costs for your usage. -The majority of the Azure resources used in this infrastructure are on usage-based pricing tiers. -However, Azure Container Registry has a fixed cost per registry per day. +Pricing varies per region and usage, so it isn't possible to predict exact costs for your usage. The majority of the Azure resources used in this infrastructure are on usage-based pricing tiers. However, Azure Container Registry has a fixed cost per registry per day. -You can try the [Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator) for the resources: +Use the [Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator) to calculate the cost of this solution in your subscription. [Review a sample pricing sheet for the achitecture](https://azure.com/e/0a9a1459d1a2440ca3fd274ed5b53397). -* Azure AI Foundry: Free tier. [Pricing](https://azure.microsoft.com/pricing/details/ai-studio/) - * Azure Storage Account for AI Foundry: Standard tier, LRS. Pricing is based on storage and operations. [Pricing](https://azure.microsoft.com/pricing/details/storage/blobs/) - * Azure Key Vault: Standard tier. Pricing is based on the number of operations. [Pricing](https://azure.microsoft.com/pricing/details/key-vault/) -* Azure Storage Account for Content Processing Application: Standard tier, LRS. Pricing is based on storage and operations. [Pricing](https://azure.microsoft.com/pricing/details/storage/blobs/) -* Azure AI Services: S0 tier, defaults to gpt-4o-mini. Pricing is based on token count. [Pricing](https://azure.microsoft.com/pricing/details/cognitive-services/) -* Azure Container App: Consumption tier with 4 CPU, 8GiB memory/storage. Pricing is based on resource allocation, and each month allows for a certain amount of free usage. [Pricing](https://azure.microsoft.com/pricing/details/container-apps/) -* Azure Container Registry: Basic tier. [Pricing](https://azure.microsoft.com/pricing/details/container-registry/) -* Log analytics: Pay-as-you-go tier. Costs based on data ingested. [Pricing](https://azure.microsoft.com/pricing/details/monitor/) -* Azure Cosmos DB: [Pricing](https://azure.microsoft.com/en-us/pricing/details/cosmos-db/autoscale-provisioned/) + +
-> ⚠️ To avoid unnecessary costs, remember to take down your app if it's no longer in use, +| Product | Description | Cost | +|---|---|---| +| [Azure AI Foundry](https://learn.microsoft.com/en-us/azure/ai-foundry/) | Build generative AI applications on an enterprise-grade platform | [Pricing](https://azure.microsoft.com/pricing/details/ai-studio/) | +| [Azure OpenAI Service](https://learn.microsoft.com/en-us/azure/ai-services/openai/) | Provides REST API access to OpenAI's powerful language models including o3-mini, o1, o1-mini, GPT-4o, GPT-4o mini | [Pricing](https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/) | +| [Azure AI Content Understanding Service](https://learn.microsoft.com/en-us/azure/ai-services/content-understanding/) | Analyzes various media content—such as audio, video, text, and images—transforming it into structured, searchable data | [Pricing](https://azure.microsoft.com/en-us/pricing/details/content-understanding/) | +| [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/) | Microsoft's object storage solution for the cloud. Blob storage is optimized for storing massive amounts of unstructured data | [Pricing](https://azure.microsoft.com/pricing/details/storage/blobs/) | +| [Azure Container Apps](https://learn.microsoft.com/en-us/azure/container-apps/) | Allows you to run containerized applications without worrying about orchestration or infrastructure. | [Pricing](https://azure.microsoft.com/pricing/details/container-apps/) | +| [Azure Container Registry](https://learn.microsoft.com/en-us/azure/container-registry/) | Build, store, and manage container images and artifacts in a private registry for all types of container deployments | [Pricing](https://azure.microsoft.com/pricing/details/container-registry/) | +| [Azure Cosmos DB](https://learn.microsoft.com/en-us/azure/cosmos-db/) | Fully managed, distributed NoSQL, relational, and vector database for modern app development | [Pricing](https://azure.microsoft.com/en-us/pricing/details/cosmos-db/autoscale-provisioned/) | +| [Azure Queue Storage](https://learn.microsoft.com/en-us/azure/storage/queues/) | Store large numbers of messages and access messages from anywhere in the world via HTTP or HTTPS. | [Pricing]() | +| [GPT Model Capacity](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models) | The latest most capable Azure OpenAI models with multimodal versions, accepting both text and images as input | [Pricing](https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/) | + +
+ +>⚠️ **Important:** To avoid unnecessary costs, remember to take down your app if it's no longer in use, either by deleting the resource group in the Portal or running `azd down`. +

+

+Business Scenario +

+ +|![image](./docs/images/readme/ui.png)| +|---| + +
+ +A data analyst at a property insurance company manages and ensures claims for data accuracy and compliance. + +A recent natural disaster has led to an influx of insurance claims coming into the pipeline. The analyst is tasked with accurately validating ingested data from claims and invoices being processed through the system. Claims data includes various multi-modal content types, with details extracted and mapped to defined schemas such as policy plans, invoices, and insurance adjuster reports. + +AI is used to extract, transform, and flag potential discrepancies, such as missing policyholder details and outlier repair estimates. The data analyst then cross-checks the findings against historical claims data and regulatory guidelines. Collaborating with the compliance team, she verifies the flagged issues and refines the dataset. + +Thanks to AI pipeline processing, data moves much faster, more accurately, and is more seamlessly integrated into the data analyst's workflow. + +⚠️ The sample data used in this repository is synthetic and generated using Azure OpenAI service. The data is intended for use as sample data only. + + + +
+ +### Business value +
Click to learn more about what value this solution provides + + - **Automated data management**
+ Streamline data management to enable event-driven automation. While standardizing the data structure for a reusable experience, improving productivity at scale. + + - **Enhanced data processing**
+ Efficiently extract key details, keywords, and entities, to automatically map them to the specified schemas, optimizing workflows, reducing manual effort and saving time. + + - **Data confidence**
+ Systematic extraction and mapping elevate confidence in AI workflows by applying tolerance thresholds and ensuring quality results through scoring, all while enhancing accuracy. + + - **Verifiable Approvals**
+ Human verification of processed content ensures reliability and precision of the final output when thresholds are not met, while fostering trust and guaranteeing consistency. + +
+ +

+ +

+Supporting documentation +

+ ### Security guidelines This template uses Azure Key Vault to store all connections to communicate between resources. @@ -106,21 +175,32 @@ You may want to consider additional security measures, such as: * Enabling Microsoft Defender for Cloud to [secure your Azure resources](https://learn.microsoft.com/azure/security-center/defender-for-cloud). * Protecting the Azure Container Apps instance with a [firewall](https://learn.microsoft.com/azure/container-apps/waf-app-gateway) and/or [Virtual Network](https://learn.microsoft.com/azure/container-apps/networking?tabs=workload-profiles-env%2Cazure-cli). -### How to customize +
+ -If you'd like to customize the solution accelerator, here are some common areas to start: -- [Adding your own Schemas and Data](./docs/CustomizeSchemaData.md) -- [Modifying System Processing Prompts](./docs/CustomizeSystemPrompts.md) -- [Ingesting API for Event-Driven Processing](./docs/API.md) +### Cross references +Check out similar solution accelerators + -### Additional resources +| Solution Accelerator | Description | +|---|---| +| [Document knowledge mining](https://github.com/microsoft/Document-Knowledge-Mining-Solution-Accelerator) | Process and extract summaries, entities, and metadata from unstructured, multi-modal documents and enable searching and chatting over this data. | +| [Conversation knowledge mining](https://github.com/microsoft/Conversation-Knowledge-Mining-Solution-Accelerator) | Derive insights from volumes of conversational data using generative AI. It offers key phrase extraction, topic modeling, and interactive chat experiences through an intuitive web interface. | +| [Document generation](https://github.com/microsoft/document-generation-solution-accelerator) | Identify relevant documents, summarize unstructured information, and generate document templates. | -- [Technical Architecture](./docs/TechnicalArchitecture.md) -- [Technical Approach & Processing Pipeline](./docs/ProcessingPipelineApproach.md) + +
+ + +## Provide feedback +Have questions, find a bug, or want to request a feature? [Submit a new issue](https://github.com/microsoft/content-processing-solution-accelerator/issues) on this repo and we'll connect. + +
## Responsible AI Transparency FAQ Please refer to [Transparency FAQ](./TRANSPARENCY_FAQ.md) for responsible AI transparency details of this solution accelerator. +
## Disclaimers diff --git a/docs/ConfigureAppAuthentication.md b/docs/ConfigureAppAuthentication.md index 835fe422..43603e58 100644 --- a/docs/ConfigureAppAuthentication.md +++ b/docs/ConfigureAppAuthentication.md @@ -14,57 +14,57 @@ We will add Microsoft Entra ID as an authentication provider to API and Web Appl 1. Add Authentication Provider in Web Application - Go to deployed Container App and select `ca-cps--web` and click **Add Identity Provider** button in Authentication. - ![add_auth_provider_web_1](./Images/add_auth_provider_web_1.png) + ![add_auth_provider_web_1](./images/add_auth_provider_web_1.png) - Select **Microsoft** and set **Client secret expiration**, then click **Add** button. - ![add_auth_provider_web_2](./Images/add_auth_provider_web_2.png) + ![add_auth_provider_web_2](./images/add_auth_provider_web_2.png) - Set **Unauthenticated requests**, then click **Add** button. - ![add_auth_provider_api_3](./Images/add_auth_provider_web_4.png) + ![add_auth_provider_api_3](./images/add_auth_provider_web_4.png) > **Note:** If you encounter the following error message indicating that your organization's policy prohibits the automatic use of secrets, please refer to our [Manual App Registration Configuration](./ManualAppRegistrationConfiguration.md) for detailed manual setup instructions. -> ![add_auth_provider_web_3](./Images/add_auth_provider_web_3.png) +> ![add_auth_provider_web_3](./images/add_auth_provider_web_3.png) 1. Add Authentication Provider in API Service - Go to deployed Container App and select `ca-cps--api` and click **Add Identity Provider** button in Authentication. - ![add_auth_provider_api_1](./Images/add_auth_provider_api_1.png) + ![add_auth_provider_api_1](./images/add_auth_provider_api_1.png) - Select **Microsoft** and set **Client secret expiration**. - ![add_auth_provider_api_2](./Images/add_auth_provider_api_2.png) + ![add_auth_provider_api_2](./images/add_auth_provider_api_2.png) - Set **Unauthenticated requests**, then click **Add** button. - ![add_auth_provider_api_3](./Images/add_auth_provider_api_3.png) + ![add_auth_provider_api_3](./images/add_auth_provider_api_3.png) ## Step 2: Configure Application Registration - Web Application 1. Set Redirect URI in Single Page Application Platform - Go to deployed Container App `ca-cps--web` and select **Authentication** menu, then select created Application Registration. - ![configure_app_registration_web_1](./Images/configure_app_registration_web_1.png) + ![configure_app_registration_web_1](./images/configure_app_registration_web_1.png) - Select **Authentication**, then select **+ Add a platform** menu. - ![configure_app_registration_web_2](./Images/configure_app_registration_web_2.png) + ![configure_app_registration_web_2](./images/configure_app_registration_web_2.png) - Select **Single-page application**. - ![configure_app_registration_web_3](./Images/configure_app_registration_web_3.png) + ![configure_app_registration_web_3](./images/configure_app_registration_web_3.png) - Add Container App `ca-cps--web`'s URL. - ![configure_app_registration_web_4](./Images/configure_app_registration_web_4.png) + ![configure_app_registration_web_4](./images/configure_app_registration_web_4.png) - You may get this URL from here in your Container App. - ![configure_app_registration_web_5](./Images/configure_app_registration_web_5.png) + ![configure_app_registration_web_5](./images/configure_app_registration_web_5.png) 2. Add Permission and Grant Permission - Add Permission for API application. Select **+ Add a permission** button, then search API application with name `ca-cps--api`. - ![configure_app_registration_web_6](./Images/configure_app_registration_web_6.png) - ![configure_app_registration_web_7](./Images/configure_app_registration_web_7.png) + ![configure_app_registration_web_6](./images/configure_app_registration_web_6.png) + ![configure_app_registration_web_7](./images/configure_app_registration_web_7.png) - Grant admin consent to permissions. - ![configure_app_registration_web_8](./Images/configure_app_registration_web_8.png) + ![configure_app_registration_web_8](./images/configure_app_registration_web_8.png) > ⚠️ **Granting Admin Consent:** If you don't have permission or aren't able to grant admin consent for the API permissions, please follow one of the steps below:

_Option 1 - Reach out to your Tenant Administrator:_ Contact your administrator to let them know your Application Registration ID and what permissions you woud like to have them consent and approve.

_Option 2 - Internal Microsoft Employees Only:_ Please refer to these detailed instructions on the admin consent granting process: [https://aka.ms/AzAdminConsentWiki](https://aka.ms/AzAdminConsentWiki) @@ -74,35 +74,35 @@ We will add Microsoft Entra ID as an authentication provider to API and Web Appl - Select **Expose an API** in the left menu. Copy the Scope name, then paste it in some temporary place. The copied text will be used for Web Application Environment variable - **APP_WEB_SCOPE**. - ![configure_app_registration_web_9](./Images/configure_app_registration_web_9.png) + ![configure_app_registration_web_9](./images/configure_app_registration_web_9.png) 4. Grab Client Id for Web App - Select **Overview** in the left menu. Copy the Client Id, then paste it in some temporary place. The copied text will be used for Web Application Environment variable - **APP_WEB_CLIENT_ID**. - ![configure_app_registration_web_10](./Images/configure_app_registration_web_10.png) + ![configure_app_registration_web_10](./images/configure_app_registration_web_10.png) ## Step 3: Configure Application Registration - API Application 1. Grab Scope Name for Impersonation - Go to deployed Container App `ca-cps--api` and select **Authentication** menu, then select created Application Registration. - ![configure_app_registration_api_1](./Images/configure_app_registration_api_1.png) + ![configure_app_registration_api_1](./images/configure_app_registration_api_1.png) - Select **Expose an API** in the left menu. Copy the Scope name, then paste it in some temporary place. The copied text will be used for Web Application Environment variable - **APP_API_SCOPE**. - ![configure_app_registration_api_2](./Images/configure_app_registration_api_2.png) + ![configure_app_registration_api_2](./images/configure_app_registration_api_2.png) ## Step 4: Add Web Application's Client Id to Allowed Client Applications List in API Application Registration 1. Go to the deployed Container App `ca-cps--api`, select **Authentication**, and then click **Edit**. - ![add_client_id_to_api_1](./Images/add_client_id_to_api_1.png) + ![add_client_id_to_api_1](./images/add_client_id_to_api_1.png) 2. Select **Allow requests from specific client applications**, then click the **pencil** icon to add the Client Id. - ![add_client_id_to_api_2](./Images/add_client_id_to_api_2.png) + ![add_client_id_to_api_2](./images/add_client_id_to_api_2.png) 3. Add the **Client Id** obtained from [Step 2: Configure Application Registration - Web Application](#step-2-configure-application-registration---web-application), then save. - ![add_client_id_to_web_3](./Images/add_client_id_to_web_3.png) + ![add_client_id_to_web_3](./images/add_client_id_to_web_3.png) ## Step 5: Update Environment Variable in Container App for Web Application @@ -111,7 +111,7 @@ In previous steps for [Configure Application Registration - Web Application](#st Now, we will edit and deploy the Web Application Container with updated Environment variables. 1. Select **Containers** menu under **Application**. Then click **Environment variables** tab. -![update_env_app_1_1](./Images/update_env_app_1_1.png) +![update_env_app_1_1](./images/update_env_app_1_1.png) 2. Update 3 values which were taken in previous steps for **APP_WEB_CLIENT_ID**, **APP_WEB_SCOPE**, **APP_API_SCOPE**. Click on **Save as a new revision**. The updated revision will be activated soon. diff --git a/docs/CustomizeSchemaData.md b/docs/CustomizeSchemaData.md index 3214e969..dbe8c2a2 100644 --- a/docs/CustomizeSchemaData.md +++ b/docs/CustomizeSchemaData.md @@ -65,7 +65,7 @@ A schema should be created that includes all fields you expect to extract and tr 3. The name of the main schema class that will get instantiated. 4. Friendly, readable description of the schema. this value will be show up in UI. - > ![Schema Registartion REST API call with payload](./Images/schema-register-api.png) + > ![Schema Registartion REST API call with payload](./images/schema-register-api.png) After running the request, you will see a response with an ID confirming the schema has been added. It will now show up in the web UI in the schema dropdown as well. diff --git a/docs/DeleteResourceGroup.md b/docs/DeleteResourceGroup.md index 1753f030..4ca37601 100644 --- a/docs/DeleteResourceGroup.md +++ b/docs/DeleteResourceGroup.md @@ -14,9 +14,9 @@ If your deployment fails and you need to clean up the resources manually, follow 1. In the search bar at the top, type **"Resource groups"** and select it. 2. Locate the **resource group** associated with the failed deployment. -![Resource Groups](Images/resourcegroup.png) +![Resource Groups](./images/resourcegroup.png) -![Resource Groups](Images/resource-groups.png) +![Resource Groups](./images/resource-groups.png) --- @@ -24,7 +24,7 @@ If your deployment fails and you need to clean up the resources manually, follow 1. Click on the **resource group name** to open it. 2. Click the **Delete resource group** button at the top. -![Delete Resource Group](Images/DeleteRG.png) +![Delete Resource Group](./images/DeleteRG.png) 3. Type the resource group name in the confirmation box and click **Delete**. @@ -40,7 +40,7 @@ If you don’t want to delete the entire resource group, follow these steps: 3. Select the **resource** you want to delete (e.g., App Service, Storage Account). 4. Click **Delete** at the top. -![Delete Individual Resource](Images/deleteservices.png) +![Delete Individual Resource](./images/deleteservices.png) --- diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 6911fa70..30d3d66e 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -209,7 +209,7 @@ This will rebuild the source code, package it into a container, and push it to t - **Get API Service's Endpoint** - Get API Service Endpoint Url from your container app for API Name is **ca-**<< your environmentName >>-**api** - ![Check API Service Url](Images/CheckAPIService.png) + ![Check API Service Url](./images/CheckAPIService.png) - Copy the URL - **Execute Script to registering Schemas** @@ -228,7 +228,7 @@ This will rebuild the source code, package it into a container, and push it to t ``` - **Verify Results** - ![schema file registration](./Images/SchemaFileRegistration.png) + ![schema file registration](./images/SchemaFileRegistration.png) 2. **Import Sample Data** - Grab the Schema IDs for Invoice and Property Damage Claim Form's Schema from first step diff --git a/docs/Images/ReadMe/customerTruth.png b/docs/Images/ReadMe/customerTruth.png deleted file mode 100644 index 20cc799b..00000000 Binary files a/docs/Images/ReadMe/customerTruth.png and /dev/null differ diff --git a/docs/Images/ReadMe/quickDeploy.png b/docs/Images/ReadMe/quickDeploy.png deleted file mode 100644 index 846e0e1f..00000000 Binary files a/docs/Images/ReadMe/quickDeploy.png and /dev/null differ diff --git a/docs/Images/ReadMe/userStory.png b/docs/Images/ReadMe/userStory.png deleted file mode 100644 index ba485f54..00000000 Binary files a/docs/Images/ReadMe/userStory.png and /dev/null differ diff --git a/docs/ManualAppRegistrationConfiguration.md b/docs/ManualAppRegistrationConfiguration.md index e8fb6bf4..533c2f6d 100644 --- a/docs/ManualAppRegistrationConfiguration.md +++ b/docs/ManualAppRegistrationConfiguration.md @@ -23,7 +23,7 @@ This guide provides detailed steps to manually register both front-end and backe - Copy the Ingress URL from the Overview . - Click **Register** - ![manual_register_app_web_1](./Images/manual_register_app_web_1.png) + ![manual_register_app_web_1](./images/manual_register_app_web_1.png) ### 2. Expose an API @@ -37,7 +37,7 @@ This guide provides detailed steps to manually register both front-end and backe - Admin consent display name: `Access Web App` - Admin consent description: `Allows the app to access the web application as the signed-in user` - Click **Add scope** - ![manual_register_app_web_2](./Images/manual_register_app_web_2.png) + ![manual_register_app_web_2](./images/manual_register_app_web_2.png) ### 3. Configure Certificates and Secrets @@ -49,13 +49,13 @@ This guide provides detailed steps to manually register both front-end and backe - Start (Optional for custom range): Set the starting date of the secret's validity - End (Optional for custom range): Set the ending date of the secret's validity - Click **Add** and remember to copy and store the secret value securely as it will not be shown again -![manual_register_app_web_3](./Images/manual_register_app_web_3.png) +![manual_register_app_web_3](./images/manual_register_app_web_3.png) ### 3. Get Tenant ID - Go to **Tenant Properties** in [Azure Portal](https://portal.azure.com) - Copy the Tenant ID (will be used in next step) -![manual_register_app_web_6](./Images/manual_register_app_web_6.png) +![manual_register_app_web_6](./images/manual_register_app_web_6.png) ### 4. Set Up Authentication in Web Container App @@ -70,7 +70,7 @@ This guide provides detailed steps to manually register both front-end and backe - **Allowed Token Audiences**: Usually the Application ID URI or Client ID - Click **Add** -![manual_register_app_web_4](./Images/manual_register_app_web_4.png) +![manual_register_app_web_4](./images/manual_register_app_web_4.png) ## Step 2: Register API Application @@ -91,7 +91,7 @@ This guide provides detailed steps to manually register both front-end and backe - Copy the Ingress URL from the Overview . - Click **Register** - ![manual_register_app_api_1](./Images/manual_register_app_api_1.png) + ![manual_register_app_api_1](./images/manual_register_app_api_1.png) ### 2. Expose an API @@ -102,7 +102,7 @@ This guide provides detailed steps to manually register both front-end and backe - Scope name: `user_impersonation` - Admin consent details - Click **Add scope** -![manual_register_app_api_2](./Images/manual_register_app_api_2.png) +![manual_register_app_api_2](./images/manual_register_app_api_2.png) ### 3. Configure Certificates and Secrets @@ -113,7 +113,7 @@ This guide provides detailed steps to manually register both front-end and backe - Start (Optional for custom range): Set the starting date of the secret's validity - End (Optional for custom range): Set the ending date of the secret's validity - Click **Add** and remember to copy and store the secret value securely as it will not be shown again -![manual_register_app_api_3](./Images/manual_register_app_api_3.png) +![manual_register_app_api_3](./images/manual_register_app_api_3.png) ### 4. Set Up Authentication in API Container App @@ -127,8 +127,8 @@ This guide provides detailed steps to manually register both front-end and backe - **Issuer URL**: `https://sts.windows.net//v2.0` - **Allowed Token Audiences**: Usually the Application ID URI or Client ID - Click **Add** -![manual_register_app_api_4](./Images/manual_register_app_api_4.png) -![manual_register_app_api_5](./Images/manual_register_app_api_5.png) +![manual_register_app_api_4](./images/manual_register_app_api_4.png) +![manual_register_app_api_5](./images/manual_register_app_api_5.png) --- diff --git a/docs/ProcessingPipelineApproach.md b/docs/ProcessingPipelineApproach.md index 6ac60a59..89c9e813 100644 --- a/docs/ProcessingPipelineApproach.md +++ b/docs/ProcessingPipelineApproach.md @@ -1,7 +1,7 @@ # Technical Approach ## Overview -![image](./Images/ReadMe/approach.png) +![image](./images/readme/approach.png) At the application level, when a file is processed a number of steps take place to ingest, extract, and transform the contents of the file into the selected schema. The diagram above shows a step-by-step overview of the approach for processing. 1. Documents are passed with a specific schema. This request is sent to the API end point and _can include an optional set of metadata for external refencing_. This collection of data is sent to Azure AI Content Understanding Service for initial extraction of content. This utilizes a pre-built layout for extracting the data. @@ -16,7 +16,7 @@ At the application level, when a file is processed a number of steps take place ## Processing Pipeline -![image](./Images/ReadMe/processing-pipeline.png) +![image](./images/readme/processing-pipeline.png) 1. **Extract Pipeline** – Text Extraction via Azure Content Understanding. diff --git a/docs/TechnicalArchitecture.md b/docs/TechnicalArchitecture.md index d4f66847..cfc0e92f 100644 --- a/docs/TechnicalArchitecture.md +++ b/docs/TechnicalArchitecture.md @@ -2,7 +2,7 @@ Additional details about the technical architecture of the Content Processing solution accelerator. This describes the purpose and additional context of each component in the solution. -![image](./Images/ReadMe/solution-architecture.png) +![image](./images/readme/solution-architecture.png) ### Ingress Controller @@ -36,4 +36,4 @@ Using Azure OpenAI Service, a deployment of the GPT-4o 2024-10-01-preview model Using Azure Blob Storage, schema .py files, source files for processing, and final output JSON files are stored in blob storage. ### Azure Cosmos DB for MongoDB -Using Azure Cosmos DB for MongoDB, files that have been submitted for processing are added to the DB and their processing step history is saved. The processing queue stores individual processes information and history for status and processing step review, along with final extraction and transformation into JSON for its selected schema. \ No newline at end of file +Using Azure Cosmos DB for MongoDB, files that have been submitted for processing are added to the DB and their processing step history is saved. The processing queue stores individual processes information and history for status and processing step review, along with final extraction and transformation into JSON for its selected schema. diff --git a/docs/Images/AddDetails.png b/docs/images/AddDetails.png similarity index 100% rename from docs/Images/AddDetails.png rename to docs/images/AddDetails.png diff --git a/docs/Images/AddPlatform.png b/docs/images/AddPlatform.png similarity index 100% rename from docs/Images/AddPlatform.png rename to docs/images/AddPlatform.png diff --git a/docs/Images/AddRedirectURL.png b/docs/images/AddRedirectURL.png similarity index 100% rename from docs/Images/AddRedirectURL.png rename to docs/images/AddRedirectURL.png diff --git a/docs/Images/AppAuthIdentityProvider.png b/docs/images/AppAuthIdentityProvider.png similarity index 100% rename from docs/Images/AppAuthIdentityProvider.png rename to docs/images/AppAuthIdentityProvider.png diff --git a/docs/Images/AppAuthIdentityProviderAdd.png b/docs/images/AppAuthIdentityProviderAdd.png similarity index 100% rename from docs/Images/AppAuthIdentityProviderAdd.png rename to docs/images/AppAuthIdentityProviderAdd.png diff --git a/docs/Images/AppAuthIdentityProviderAdded.png b/docs/images/AppAuthIdentityProviderAdded.png similarity index 100% rename from docs/Images/AppAuthIdentityProviderAdded.png rename to docs/images/AppAuthIdentityProviderAdded.png diff --git a/docs/Images/AppAuthentication.png b/docs/images/AppAuthentication.png similarity index 100% rename from docs/Images/AppAuthentication.png rename to docs/images/AppAuthentication.png diff --git a/docs/Images/AppAuthenticationIdentity.png b/docs/images/AppAuthenticationIdentity.png similarity index 100% rename from docs/Images/AppAuthenticationIdentity.png rename to docs/images/AppAuthenticationIdentity.png diff --git a/docs/Images/Appregistrations.png b/docs/images/Appregistrations.png similarity index 100% rename from docs/Images/Appregistrations.png rename to docs/images/Appregistrations.png diff --git a/docs/Images/CheckAPIService.png b/docs/images/CheckAPIService.png similarity index 100% rename from docs/Images/CheckAPIService.png rename to docs/images/CheckAPIService.png diff --git a/docs/Images/DeleteRG.png b/docs/images/DeleteRG.png similarity index 100% rename from docs/Images/DeleteRG.png rename to docs/images/DeleteRG.png diff --git a/docs/Images/MicrosoftEntraID.png b/docs/images/MicrosoftEntraID.png similarity index 100% rename from docs/Images/MicrosoftEntraID.png rename to docs/images/MicrosoftEntraID.png diff --git a/docs/Images/NewRegistration.png b/docs/images/NewRegistration.png similarity index 100% rename from docs/Images/NewRegistration.png rename to docs/images/NewRegistration.png diff --git a/docs/Images/SchemaFileRegistration.png b/docs/images/SchemaFileRegistration.png similarity index 100% rename from docs/Images/SchemaFileRegistration.png rename to docs/images/SchemaFileRegistration.png diff --git a/docs/Images/Web.png b/docs/images/Web.png similarity index 100% rename from docs/Images/Web.png rename to docs/images/Web.png diff --git a/docs/Images/WebAppURL.png b/docs/images/WebAppURL.png similarity index 100% rename from docs/Images/WebAppURL.png rename to docs/images/WebAppURL.png diff --git a/docs/Images/add_auth_provider_api_1.png b/docs/images/add_auth_provider_api_1.png similarity index 100% rename from docs/Images/add_auth_provider_api_1.png rename to docs/images/add_auth_provider_api_1.png diff --git a/docs/Images/add_auth_provider_api_2.png b/docs/images/add_auth_provider_api_2.png similarity index 100% rename from docs/Images/add_auth_provider_api_2.png rename to docs/images/add_auth_provider_api_2.png diff --git a/docs/Images/add_auth_provider_api_3.png b/docs/images/add_auth_provider_api_3.png similarity index 100% rename from docs/Images/add_auth_provider_api_3.png rename to docs/images/add_auth_provider_api_3.png diff --git a/docs/Images/add_auth_provider_web_1.png b/docs/images/add_auth_provider_web_1.png similarity index 100% rename from docs/Images/add_auth_provider_web_1.png rename to docs/images/add_auth_provider_web_1.png diff --git a/docs/Images/add_auth_provider_web_2.png b/docs/images/add_auth_provider_web_2.png similarity index 100% rename from docs/Images/add_auth_provider_web_2.png rename to docs/images/add_auth_provider_web_2.png diff --git a/docs/Images/add_auth_provider_web_3.png b/docs/images/add_auth_provider_web_3.png similarity index 100% rename from docs/Images/add_auth_provider_web_3.png rename to docs/images/add_auth_provider_web_3.png diff --git a/docs/Images/add_auth_provider_web_4.png b/docs/images/add_auth_provider_web_4.png similarity index 100% rename from docs/Images/add_auth_provider_web_4.png rename to docs/images/add_auth_provider_web_4.png diff --git a/docs/Images/add_client_id_to_api_1.png b/docs/images/add_client_id_to_api_1.png similarity index 100% rename from docs/Images/add_client_id_to_api_1.png rename to docs/images/add_client_id_to_api_1.png diff --git a/docs/Images/add_client_id_to_api_2.png b/docs/images/add_client_id_to_api_2.png similarity index 100% rename from docs/Images/add_client_id_to_api_2.png rename to docs/images/add_client_id_to_api_2.png diff --git a/docs/Images/add_client_id_to_web_1.png b/docs/images/add_client_id_to_web_1.png similarity index 100% rename from docs/Images/add_client_id_to_web_1.png rename to docs/images/add_client_id_to_web_1.png diff --git a/docs/Images/add_client_id_to_web_2.png b/docs/images/add_client_id_to_web_2.png similarity index 100% rename from docs/Images/add_client_id_to_web_2.png rename to docs/images/add_client_id_to_web_2.png diff --git a/docs/Images/add_client_id_to_web_3.png b/docs/images/add_client_id_to_web_3.png similarity index 100% rename from docs/Images/add_client_id_to_web_3.png rename to docs/images/add_client_id_to_web_3.png diff --git a/docs/Images/configure_app_registration_api_1.png b/docs/images/configure_app_registration_api_1.png similarity index 100% rename from docs/Images/configure_app_registration_api_1.png rename to docs/images/configure_app_registration_api_1.png diff --git a/docs/Images/configure_app_registration_api_2.png b/docs/images/configure_app_registration_api_2.png similarity index 100% rename from docs/Images/configure_app_registration_api_2.png rename to docs/images/configure_app_registration_api_2.png diff --git a/docs/Images/configure_app_registration_api_3.png b/docs/images/configure_app_registration_api_3.png similarity index 100% rename from docs/Images/configure_app_registration_api_3.png rename to docs/images/configure_app_registration_api_3.png diff --git a/docs/Images/configure_app_registration_web_1.png b/docs/images/configure_app_registration_web_1.png similarity index 100% rename from docs/Images/configure_app_registration_web_1.png rename to docs/images/configure_app_registration_web_1.png diff --git a/docs/Images/configure_app_registration_web_10.png b/docs/images/configure_app_registration_web_10.png similarity index 100% rename from docs/Images/configure_app_registration_web_10.png rename to docs/images/configure_app_registration_web_10.png diff --git a/docs/Images/configure_app_registration_web_2.png b/docs/images/configure_app_registration_web_2.png similarity index 100% rename from docs/Images/configure_app_registration_web_2.png rename to docs/images/configure_app_registration_web_2.png diff --git a/docs/Images/configure_app_registration_web_3.png b/docs/images/configure_app_registration_web_3.png similarity index 100% rename from docs/Images/configure_app_registration_web_3.png rename to docs/images/configure_app_registration_web_3.png diff --git a/docs/Images/configure_app_registration_web_4.png b/docs/images/configure_app_registration_web_4.png similarity index 100% rename from docs/Images/configure_app_registration_web_4.png rename to docs/images/configure_app_registration_web_4.png diff --git a/docs/Images/configure_app_registration_web_5.png b/docs/images/configure_app_registration_web_5.png similarity index 100% rename from docs/Images/configure_app_registration_web_5.png rename to docs/images/configure_app_registration_web_5.png diff --git a/docs/Images/configure_app_registration_web_6.png b/docs/images/configure_app_registration_web_6.png similarity index 100% rename from docs/Images/configure_app_registration_web_6.png rename to docs/images/configure_app_registration_web_6.png diff --git a/docs/Images/configure_app_registration_web_7.png b/docs/images/configure_app_registration_web_7.png similarity index 100% rename from docs/Images/configure_app_registration_web_7.png rename to docs/images/configure_app_registration_web_7.png diff --git a/docs/Images/configure_app_registration_web_8.png b/docs/images/configure_app_registration_web_8.png similarity index 100% rename from docs/Images/configure_app_registration_web_8.png rename to docs/images/configure_app_registration_web_8.png diff --git a/docs/Images/configure_app_registration_web_9.png b/docs/images/configure_app_registration_web_9.png similarity index 100% rename from docs/Images/configure_app_registration_web_9.png rename to docs/images/configure_app_registration_web_9.png diff --git a/docs/Images/deleteservices.png b/docs/images/deleteservices.png similarity index 100% rename from docs/Images/deleteservices.png rename to docs/images/deleteservices.png diff --git a/docs/Images/git_bash.png b/docs/images/git_bash.png similarity index 100% rename from docs/Images/git_bash.png rename to docs/images/git_bash.png diff --git a/docs/Images/manual_register_app_api_1.png b/docs/images/manual_register_app_api_1.png similarity index 100% rename from docs/Images/manual_register_app_api_1.png rename to docs/images/manual_register_app_api_1.png diff --git a/docs/Images/manual_register_app_api_2.png b/docs/images/manual_register_app_api_2.png similarity index 100% rename from docs/Images/manual_register_app_api_2.png rename to docs/images/manual_register_app_api_2.png diff --git a/docs/Images/manual_register_app_api_3.png b/docs/images/manual_register_app_api_3.png similarity index 100% rename from docs/Images/manual_register_app_api_3.png rename to docs/images/manual_register_app_api_3.png diff --git a/docs/Images/manual_register_app_api_5.png b/docs/images/manual_register_app_api_5.png similarity index 100% rename from docs/Images/manual_register_app_api_5.png rename to docs/images/manual_register_app_api_5.png diff --git a/docs/Images/manual_register_app_web_1.png b/docs/images/manual_register_app_web_1.png similarity index 100% rename from docs/Images/manual_register_app_web_1.png rename to docs/images/manual_register_app_web_1.png diff --git a/docs/Images/manual_register_app_web_2.png b/docs/images/manual_register_app_web_2.png similarity index 100% rename from docs/Images/manual_register_app_web_2.png rename to docs/images/manual_register_app_web_2.png diff --git a/docs/Images/manual_register_app_web_3.png b/docs/images/manual_register_app_web_3.png similarity index 100% rename from docs/Images/manual_register_app_web_3.png rename to docs/images/manual_register_app_web_3.png diff --git a/docs/Images/manual_register_app_web_4.png b/docs/images/manual_register_app_web_4.png similarity index 100% rename from docs/Images/manual_register_app_web_4.png rename to docs/images/manual_register_app_web_4.png diff --git a/docs/Images/manual_register_app_web_5.png b/docs/images/manual_register_app_web_5.png similarity index 100% rename from docs/Images/manual_register_app_web_5.png rename to docs/images/manual_register_app_web_5.png diff --git a/docs/Images/manual_register_app_web_6.png b/docs/images/manual_register_app_web_6.png similarity index 100% rename from docs/Images/manual_register_app_web_6.png rename to docs/images/manual_register_app_web_6.png diff --git a/docs/Images/quota-check-output.png b/docs/images/quota-check-output.png similarity index 100% rename from docs/Images/quota-check-output.png rename to docs/images/quota-check-output.png diff --git a/docs/Images/ReadMe/approach.png b/docs/images/readme/approach.png similarity index 100% rename from docs/Images/ReadMe/approach.png rename to docs/images/readme/approach.png diff --git a/docs/images/readme/business-scenario.png b/docs/images/readme/business-scenario.png new file mode 100644 index 00000000..017032cc Binary files /dev/null and b/docs/images/readme/business-scenario.png differ diff --git a/docs/Images/ReadMe/processing-pipeline.png b/docs/images/readme/processing-pipeline.png similarity index 100% rename from docs/Images/ReadMe/processing-pipeline.png rename to docs/images/readme/processing-pipeline.png diff --git a/docs/images/readme/quick-deploy.png b/docs/images/readme/quick-deploy.png new file mode 100644 index 00000000..421c0c1f Binary files /dev/null and b/docs/images/readme/quick-deploy.png differ diff --git a/docs/Images/ReadMe/solution-architecture.png b/docs/images/readme/solution-architecture.png similarity index 100% rename from docs/Images/ReadMe/solution-architecture.png rename to docs/images/readme/solution-architecture.png diff --git a/docs/images/readme/solution-overview.png b/docs/images/readme/solution-overview.png new file mode 100644 index 00000000..483dbfcd Binary files /dev/null and b/docs/images/readme/solution-overview.png differ diff --git a/docs/images/readme/supporting-documentation.png b/docs/images/readme/supporting-documentation.png new file mode 100644 index 00000000..b498805c Binary files /dev/null and b/docs/images/readme/supporting-documentation.png differ diff --git a/docs/Images/ReadMe/ui.png b/docs/images/readme/ui.png similarity index 100% rename from docs/Images/ReadMe/ui.png rename to docs/images/readme/ui.png diff --git a/docs/Images/resource-groups.png b/docs/images/resource-groups.png similarity index 100% rename from docs/Images/resource-groups.png rename to docs/images/resource-groups.png diff --git a/docs/Images/resourcegroup.png b/docs/images/resourcegroup.png similarity index 100% rename from docs/Images/resourcegroup.png rename to docs/images/resourcegroup.png diff --git a/docs/Images/schema-register-api.png b/docs/images/schema-register-api.png similarity index 100% rename from docs/Images/schema-register-api.png rename to docs/images/schema-register-api.png diff --git a/docs/Images/update_env_app_1.png b/docs/images/update_env_app_1.png similarity index 100% rename from docs/Images/update_env_app_1.png rename to docs/images/update_env_app_1.png diff --git a/docs/Images/update_env_app_1_1.png b/docs/images/update_env_app_1_1.png similarity index 100% rename from docs/Images/update_env_app_1_1.png rename to docs/images/update_env_app_1_1.png diff --git a/docs/Images/update_env_app_2.png b/docs/images/update_env_app_2.png similarity index 100% rename from docs/Images/update_env_app_2.png rename to docs/images/update_env_app_2.png diff --git a/docs/quota_check.md b/docs/quota_check.md index d79fe42b..594812ef 100644 --- a/docs/quota_check.md +++ b/docs/quota_check.md @@ -55,7 +55,7 @@ eastus, uksouth, eastus2, northcentralus, swedencentral, westus, westus2, southc ### **Sample Output** The final table lists regions with available quota. You can select any of these regions for deployment. -![quota-check-ouput](Images/quota-check-output.png) +![quota-check-ouput](./images/quota-check-output.png) --- ### **If using Azure Portal and Cloud Shell**