Skip to content

Commit 711c63a

Browse files
authored
Merge pull request #658 from VipulMascarenhas/update_aihub_policies
Update AI Hub policies
2 parents 6c1c544 + e54091f commit 711c63a

File tree

21 files changed

+199
-75
lines changed

21 files changed

+199
-75
lines changed

.github/workflows/stack.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ jobs:
2424
run: |
2525
set -euo pipefail
2626
RELEASE=$(cat VERSION)
27-
# temporarily hardcode solution versions
28-
AI_HUB_SOLUTION_VERSION=3.1
2927
3028
# oci-ods-aqua
3129
STACKNAME=oci-ods-aqua
@@ -59,7 +57,6 @@ jobs:
5957
echo "aqua=${STACKNAME}"
6058
echo "ai_document_converter=${DOC_CONVERTER_STACKNAME}"
6159
echo "ai_translation=${TRANSLATION_STACKNAME}"
62-
echo "ai_hub_solution_version=${AI_HUB_SOLUTION_VERSION}"
6360
} >> $GITHUB_OUTPUT
6461
6562
- name: Prepare Release Notes
@@ -69,8 +66,6 @@ jobs:
6966
aqua="${{ steps.create_stacks.outputs.aqua }}"
7067
ai_document_converter="${{ steps.create_stacks.outputs.ai_document_converter }}"
7168
ai_translation="${{ steps.create_stacks.outputs.ai_translation }}"
72-
ai_hub_solution_version="${{ steps.create_stacks.outputs.ai_hub_solution_version }}"
73-
7469
{
7570
printf '# Stacks - v%s\n\n' "$rel"
7671
printf '### %s\n' "$aqua"
@@ -84,8 +79,8 @@ jobs:
8479
8580
printf '[magic_button]: https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com/latest/deploy-to-oracle-cloud.svg\n'
8681
printf '[magic_stack_aqua]: https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/${{ github.repository }}/releases/download/%s/%s.zip\n' "$rel" "$aqua"
87-
printf '[magic_stack_ai_document_converter]: https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/${{ github.repository }}/releases/download/%s/%s.zip\n' "$ai_hub_solution_version" "$ai_document_converter"
88-
printf '[magic_stack_ai_translation]: https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/${{ github.repository }}/releases/download/%s/%s.zip\n' "$ai_hub_solution_version" "$ai_translation"
82+
printf '[magic_stack_ai_document_converter]: https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/${{ github.repository }}/releases/download/%s/%s.zip\n' "$rel" "$ai_document_converter"
83+
printf '[magic_stack_ai_translation]: https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/${{ github.repository }}/releases/download/%s/%s.zip\n' "$rel" "$ai_translation"
8984
} > release.md
9085
9186
- name: Create Release

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.1
1+
4.0

ai-hub/ai-document-converter/policies/terraform/api_gateway.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ resource "oci_apigateway_deployment" "ai_application_apigateway_deployment" {
4040
type = "OAUTH2"
4141
use_cookies_for_intermediate_steps = "true"
4242
use_cookies_for_session = "true"
43-
max_expiry_duration_in_hours = 1
43+
max_expiry_duration_in_hours = 1
4444
}
4545
validation_policy {
4646
additional_validation_policy {
@@ -112,7 +112,7 @@ resource "oci_apigateway_deployment" "ai_application_apigateway_deployment" {
112112
}
113113
methods = ["ANY"]
114114
path = "/{req*}"
115-
request_policies {
115+
request_policies {
116116
header_transformations {
117117
set_headers {
118118
items {

ai-hub/ai-document-converter/policies/terraform/container_instances.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ resource "oci_container_instances_container_instance" "ai_container_instance" {
44
compartment_id = var.vcn_compartment_id
55
containers {
66
#Required
7-
image_url = local.image
7+
image_url = local.container_image
88

99
#Optional
1010
environment_variables = {

ai-hub/ai-document-converter/policies/terraform/identity_app.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ resource "oci_identity_domains_app" "ai_application_confidential_app" {
44
well_known_id = "CustomWebAppTemplateId"
55
}
66
client_type = "confidential"
7-
description = "Confidential Application for AI Translation Application"
8-
display_name = "ai__translation_application_confidential_app_${random_string.randomstring.result}"
7+
description = "Confidential Application for AI Document Converter Application"
8+
display_name = "ai__doc_converter_application_confidential_app_${random_string.randomstring.result}"
99
schemas = ["urn:ietf:params:scim:schemas:oracle:idcs:App"]
1010
allowed_operations = ["introspect"]
1111
idcs_endpoint = data.oci_identity_domain.application_identity_domain.url
@@ -14,7 +14,7 @@ resource "oci_identity_domains_app" "ai_application_confidential_app" {
1414
bypass_consent = true
1515
allowed_grants = ["authorization_code", "client_credentials", "urn:ietf:params:oauth:grant-type:jwt-bearer", "implicit"]
1616
all_url_schemes_allowed = true
17-
redirect_uris = ["https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui","https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/gradio", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/playground","https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/docs", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/callback"]
17+
redirect_uris = ["https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/gradio", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/playground", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/ui/docs", "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/callback"]
1818
post_logout_redirect_uris = ["https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/"]
1919
audience = oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname
2020
}

ai-hub/ai-document-converter/policies/terraform/model.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ data "archive_file" "model_zip" {
2929
resource "oci_datascience_model" "ai_model" {
3030
compartment_id = var.data_science_project_compartment_id
3131
project_id = var.project_ocid
32-
display_name = var.model_display_name
32+
display_name = var.model_display_name
3333
description = local.model_desc
3434

3535
# Upload artifact inline (ZIP created above)

ai-hub/ai-document-converter/policies/terraform/model_deployment.tf

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ resource "oci_datascience_model_deployment" "ai_deployment" {
2020
# subnet_id = var.subnet_ocid
2121
subnet_id = local.app_subnet_id
2222
}
23-
model_id = oci_datascience_model.ai_model.id
23+
model_id = oci_datascience_model.ai_model.id
2424
bandwidth_mbps = var.deployment_bandwidth_mbps
2525
scaling_policy {
2626
instance_count = var.deployment_instance_count
@@ -41,21 +41,37 @@ resource "oci_datascience_model_deployment" "ai_deployment" {
4141
MAX_OUTPUT_TOKEN = var.multimodal_max_output_token
4242
GENAI_COMPARTMENT_OCID = var.genai_compartment_ocid
4343
PROMPT_VERSION = var.prompt_version,
44-
MODEL_DEPLOY_CUSTOM_ENDPOINTS = "[{\"endpointURI\": \"/api/list\", \"httpMethods\": [\"GET\"]}, {\"endpointURI\": \"/api/convert\", \"httpMethods\": [\"POST\"]}, {\"endpointURI\": \"/api/convert/file\", \"httpMethods\": [\"POST\"]}]"
44+
MODEL_DEPLOY_CUSTOM_ENDPOINTS = "[{\"endpointURI\": \"/api/list\", \"httpMethods\": [\"GET\"]}, {\"endpointURI\": \"/api/convert\", \"httpMethods\": [\"POST\"]}, {\"endpointURI\": \"/api/convert/file\", \"httpMethods\": [\"POST\"]}, {\"endpointURI\": \"/mcp/\", \"httpMethods\": [\"POST\"], \"streaming\": true}]"
4545
}
4646
}
4747
}
4848

4949
# Logging, use the same log group and log ocid to reduce the variables.
50-
category_log_details {
51-
access {
52-
log_group_id = var.log_group_ocid
53-
log_id = var.log_ocid
54-
}
55-
predict {
56-
log_group_id = var.log_group_ocid
57-
log_id = var.log_ocid
50+
dynamic "category_log_details" {
51+
for_each = (
52+
var.log_group_ocid != null && var.log_ocid != "" &&
53+
var.log_group_ocid != null && var.log_ocid != ""
54+
) ? [1] : []
55+
56+
content {
57+
access {
58+
log_group_id = var.log_group_ocid
59+
log_id = var.log_ocid
60+
}
61+
predict {
62+
log_group_id = var.log_group_ocid
63+
log_id = var.log_ocid
64+
}
5865
}
5966
}
6067

68+
freeform_tags = {
69+
"ai-hub-solution-name" = "PDF to markdown conversion"
70+
"ai_solution_playground_url" = "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/"
71+
"ai_solution_mcp_endpoint" = "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/mcp"
72+
"ai_solution_api_endpoint_list_apis" = "https://${oci_apigateway_gateway.ai_application_oci_apigateway_gateway.hostname}/api/convert"
73+
}
74+
75+
depends_on = [oci_identity_policy.ai_solution_policies]
76+
6177
}

ai-hub/ai-document-converter/policies/terraform/output.tf

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@ output "base_url" {
33
value = "${oci_apigateway_deployment.ai_application_apigateway_deployment.endpoint}"
44
}
55

6-
output "mcp_endpoint" {
7-
description = "MCP Endpoint"
8-
value = "${oci_apigateway_deployment.ai_application_apigateway_deployment.endpoint}mcp"
9-
}
10-
116
output "playground_ui" {
127
description = "Playground UI"
138
value = "${oci_apigateway_deployment.ai_application_apigateway_deployment.endpoint}ui/playground"
@@ -23,17 +18,22 @@ output "api_schema" {
2318
value = "${oci_apigateway_deployment.ai_application_apigateway_deployment.endpoint}api/openapi.json"
2419
}
2520

21+
output "mcp_endpoint" {
22+
description = "MCP Endpoint"
23+
value = "${oci_datascience_model_deployment.ai_deployment.model_deployment_url}/predictWithResponseStream/mcp/"
24+
}
25+
2626
output "api_endpoint_convert" {
2727
description = "API Endpoint - Convert PDF from Object Storage to Markdown"
28-
value = "${oci_apigateway_deployment.ai_application_apigateway_deployment.endpoint}api/convert"
28+
value = "${oci_datascience_model_deployment.ai_deployment.model_deployment_url}/predict/api/convert"
2929
}
3030

3131
output "api_endpoint_convert_file" {
3232
description = "API Endpoint - Convert PDF uploaded as file to Markdown"
33-
value = "${oci_apigateway_deployment.ai_application_apigateway_deployment.endpoint}api/convert/file"
33+
value = "${oci_datascience_model_deployment.ai_deployment.model_deployment_url}/predict/api/convert/file"
3434
}
3535

3636
output "api_endpoint_list_apis" {
3737
description = "API Endpoint - Supported APIs for Document Conversion"
38-
value = "${oci_apigateway_deployment.ai_application_apigateway_deployment.endpoint}api/list"
38+
value = "${oci_datascience_model_deployment.ai_deployment.model_deployment_url}/predict/api/list"
3939
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
resource "oci_identity_dynamic_group" "ai_solution_group" {
2+
compartment_id = var.tenancy_ocid
3+
description = "Dynamic Group for AI Solution"
4+
name = "ai_solution_group-${random_string.randomstring.result}"
5+
matching_rule = "any { all {resource.type='datasciencemodeldeployment',resource.compartment.id='${var.data_science_project_compartment_id}'}, all {resource.type='apigateway',resource.compartment.id='${var.compartment_id}'},all {resource.type='computecontainerinstance',resource.compartment.id='${var.vcn_compartment_id}'},all {resource.type='datasciencejobrun', resource.compartment.id='${var.data_science_project_compartment_id}'}}"
6+
}
7+
8+
locals {
9+
policies = [
10+
"allow service datascience to use virtual-network-family in compartment id ${var.vcn_compartment_id}",
11+
"allow dynamic-group ${oci_identity_dynamic_group.ai_solution_group.name} to manage secret-family in compartment id ${var.vault_compartment_id}",
12+
"allow dynamic-group ${oci_identity_dynamic_group.ai_solution_group.name} to use virtual-network-family in compartment id ${var.vcn_compartment_id}",
13+
"allow dynamic-group ${oci_identity_dynamic_group.ai_solution_group.name} to use logging-family in compartment id ${var.log_compartment_id}",
14+
"allow dynamic-group ${oci_identity_dynamic_group.ai_solution_group.name} to manage data-science-family in compartment id ${var.data_science_project_compartment_id}",
15+
"allow dynamic-group ${oci_identity_dynamic_group.ai_solution_group.name} to manage generative-ai-family in tenancy",
16+
"allow dynamic-group ${oci_identity_dynamic_group.ai_solution_group.name} to read repos in tenancy"
17+
]
18+
}
19+
20+
resource "oci_identity_policy" "ai_solution_policies" {
21+
compartment_id = "${var.tenancy_ocid}"
22+
description = "Dynamic group policies for AI Solution"
23+
name = "ai_solution_policies-${random_string.randomstring.result}"
24+
statements = local.policies
25+
depends_on = [oci_identity_dynamic_group.ai_solution_group]
26+
}

ai-hub/ai-document-converter/policies/terraform/schema.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ variableGroups:
6363
- data_science_project_compartment_id
6464
- project_ocid
6565
- deployment_display_name
66+
- log_compartment_id
67+
- log_group_ocid
68+
- log_ocid
6669

6770

6871
variables:
@@ -264,6 +267,12 @@ variables:
264267
title: Model Deployment display name
265268
description: A user-friendly name to help you easily identify the Model Deployment resource in Data Science Project.
266269
required: true
270+
log_compartment_id:
271+
type: oci:identity:compartment:id
272+
required: false
273+
title: Logs Compartment Id
274+
description: Compartment in which Log Group and Logs are present.
275+
default: compartment_ocid
267276
log_group_ocid:
268277
type: string
269278
title: Log Group ocid

0 commit comments

Comments
 (0)