Skip to content

Commit cb6a3ec

Browse files
kartkaru-orcljotruon
authored andcommitted
Added - Custom model features in Document Service
1 parent af96ed4 commit cb6a3ec

28 files changed

+5370
-0
lines changed

examples/aiDocument/description.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Overview
2+
This is a Terraform configuration that creates the AI Document resources on Oracle Cloud Infrastructure.
3+
4+
The Terraform code is used to create a Resource Manager stack, that creates the required resources and configures the application on the created resources.

examples/aiDocument/main.tf

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
provider "oci" {
2+
}
3+
4+
variable "tenancy_ocid" {
5+
default = "ocid1.tenancy.oc1..aaaaaaaaikox5b3adi2w237m2fwomzxybp52i7byjrj5fxradayjqxum7bsq"
6+
}
7+
8+
variable "region" {
9+
default = "us-phoenix-1"
10+
}
11+
12+
variable "model_model_version" {
13+
default = "modelVersion"
14+
}
15+
16+
variable "compartment_id" { default = "ocid1.compartment.oc1..aaaaaaaa3jewat7ub6yf257bsxvfcfz5zt46fruduji37ekbsefwmcmzvgxq" }
17+
18+
variable defined_tag_namespace_name { default = "" }
19+
20+
21+
resource "oci_ai_document_project" "test_project" {
22+
compartment_id = var.compartment_id
23+
}
24+
25+
resource "oci_ai_document_model" "test_model" {
26+
#Required
27+
compartment_id = var.compartment_id
28+
model_type = "KEY_VALUE_EXTRACTION"
29+
project_id = oci_ai_document_project.test_project.id
30+
31+
training_dataset {
32+
bucket = "tf_test_bucket"
33+
dataset_type = "OBJECT_STORAGE"
34+
namespace = "axgexwaxnm7k"
35+
object = "tf_test_dataset_1680065500556.jsonl"
36+
}
37+
38+
#Optional
39+
display_name = "test_tf_model"
40+
is_quick_mode = "false"
41+
max_training_time_in_hours = "0.5"
42+
model_version = var.model_model_version
43+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package client
5+
6+
import (
7+
oci_ai_document "github.com/oracle/oci-go-sdk/v65/aidocument"
8+
9+
oci_common "github.com/oracle/oci-go-sdk/v65/common"
10+
)
11+
12+
func init() {
13+
RegisterOracleClient("oci_ai_document.AiServiceDocumentClient", &OracleClient{InitClientFn: initAidocumentAiServiceDocumentClient})
14+
}
15+
16+
func initAidocumentAiServiceDocumentClient(configProvider oci_common.ConfigurationProvider, configureClient ConfigureClient, serviceClientOverrides ServiceClientOverrides) (interface{}, error) {
17+
client, err := oci_ai_document.NewAIServiceDocumentClientWithConfigurationProvider(configProvider)
18+
if err != nil {
19+
return nil, err
20+
}
21+
err = configureClient(&client.BaseClient)
22+
if err != nil {
23+
return nil, err
24+
}
25+
26+
if serviceClientOverrides.HostUrlOverride != "" {
27+
client.Host = serviceClientOverrides.HostUrlOverride
28+
}
29+
return &client, nil
30+
}
31+
32+
func (m *OracleClients) AiServiceDocumentClient() *oci_ai_document.AIServiceDocumentClient {
33+
return m.GetClient("oci_ai_document.AiServiceDocumentClient").(*oci_ai_document.AIServiceDocumentClient)
34+
}

internal/integrationtest/ai_document_model_test.go

Lines changed: 402 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package integrationtest
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
11+
"github.com/oracle/terraform-provider-oci/httpreplay"
12+
"github.com/oracle/terraform-provider-oci/internal/acctest"
13+
14+
"github.com/oracle/terraform-provider-oci/internal/utils"
15+
)
16+
17+
var (
18+
AiDocumentProcessorJobRequiredOnlyResource = acctest.GenerateResourceFromRepresentationMap("oci_ai_document_processor_job", "test_processor_job", acctest.Required, acctest.Create, AiDocumentProcessorJobRepresentation)
19+
20+
AiDocumentProcessorJobResourceConfig = acctest.GenerateResourceFromRepresentationMap("oci_ai_document_processor_job", "test_processor_job", acctest.Optional, acctest.Update, AiDocumentProcessorJobRepresentation)
21+
22+
AiDocumentAiDocumentProcessorJobSingularDataSourceRepresentation = map[string]interface{}{
23+
"processor_job_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_ai_document_processor_job.test_processor_job.id}`},
24+
}
25+
26+
AiDocumentProcessorJobRepresentation = map[string]interface{}{
27+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
28+
"input_location": acctest.RepresentationGroup{RepType: acctest.Required, Group: AiDocumentProcessorJobInputLocationRepresentation},
29+
"output_location": acctest.RepresentationGroup{RepType: acctest.Required, Group: AiDocumentProcessorJobOutputLocationRepresentation},
30+
"processor_config": acctest.RepresentationGroup{RepType: acctest.Required, Group: AiDocumentProcessorJobProcessorConfigRepresentation},
31+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`},
32+
}
33+
AiDocumentProcessorJobInputLocationRepresentation = map[string]interface{}{
34+
"source_type": acctest.Representation{RepType: acctest.Required, Create: `OBJECT_STORAGE_LOCATIONS`},
35+
//"data": acctest.Representation{RepType: acctest.Optional, Create: `data`},
36+
"object_locations": acctest.RepresentationGroup{RepType: acctest.Required, Group: AiDocumentProcessorJobInputLocationObjectLocationsRepresentation},
37+
}
38+
AiDocumentProcessorJobOutputLocationRepresentation = map[string]interface{}{
39+
"bucket": acctest.Representation{RepType: acctest.Required, Create: `tf_test_bucket`},
40+
"namespace": acctest.Representation{RepType: acctest.Required, Create: `axgexwaxnm7k`},
41+
"prefix": acctest.Representation{RepType: acctest.Required, Create: `response`},
42+
}
43+
AiDocumentProcessorJobProcessorConfigRepresentation = map[string]interface{}{
44+
"features": acctest.RepresentationGroup{RepType: acctest.Required, Group: AiDocumentProcessorJobProcessorConfigFeaturesRepresentation},
45+
"processor_type": acctest.Representation{RepType: acctest.Required, Create: `GENERAL`},
46+
}
47+
AiDocumentProcessorJobInputLocationObjectLocationsRepresentation = map[string]interface{}{
48+
"bucket": acctest.Representation{RepType: acctest.Required, Create: `tf_test_bucket`},
49+
"namespace": acctest.Representation{RepType: acctest.Required, Create: `axgexwaxnm7k`},
50+
"object": acctest.Representation{RepType: acctest.Required, Create: `amazon_inv.pdf`},
51+
}
52+
AiDocumentProcessorJobProcessorConfigFeaturesRepresentation = map[string]interface{}{
53+
"feature_type": acctest.Representation{RepType: acctest.Required, Create: `DOCUMENT_CLASSIFICATION`},
54+
"generate_searchable_pdf": acctest.Representation{RepType: acctest.Optional, Create: `false`},
55+
"max_results": acctest.Representation{RepType: acctest.Optional, Create: `5`},
56+
}
57+
)
58+
59+
// issue-routing-tag: ai_document/default
60+
func TestAiDocumentProcessorJobResource_basic(t *testing.T) {
61+
httpreplay.SetScenario("TestAiDocumentProcessorJobResource_basic")
62+
defer httpreplay.SaveScenario()
63+
64+
config := acctest.ProviderTestConfig()
65+
66+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
67+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
68+
69+
resourceName := "oci_ai_document_processor_job.test_processor_job"
70+
71+
singularDatasourceName := "data.oci_ai_document_processor_job.test_processor_job"
72+
73+
// Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "create with optionals" step in the test.
74+
acctest.SaveConfigContent(config+compartmentIdVariableStr+acctest.GenerateResourceFromRepresentationMap("oci_ai_document_processor_job", "test_processor_job", acctest.Optional, acctest.Create, AiDocumentProcessorJobRepresentation), "aidocument", "processorJob", t)
75+
76+
acctest.ResourceTest(t, nil, []resource.TestStep{
77+
// verify Create
78+
{
79+
Config: config + compartmentIdVariableStr + acctest.GenerateResourceFromRepresentationMap("oci_ai_document_processor_job", "test_processor_job", acctest.Required, acctest.Create, AiDocumentProcessorJobRepresentation),
80+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
81+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
82+
resource.TestCheckResourceAttr(resourceName, "input_location.#", "1"),
83+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.#", "1"),
84+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.0.bucket", "tf_test_bucket"),
85+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.0.namespace", "axgexwaxnm7k"),
86+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.0.object", "amazon_inv.pdf"),
87+
resource.TestCheckResourceAttr(resourceName, "input_location.0.source_type", "OBJECT_STORAGE_LOCATIONS"),
88+
resource.TestCheckResourceAttr(resourceName, "output_location.#", "1"),
89+
resource.TestCheckResourceAttr(resourceName, "output_location.0.bucket", "tf_test_bucket"),
90+
resource.TestCheckResourceAttr(resourceName, "output_location.0.namespace", "axgexwaxnm7k"),
91+
resource.TestCheckResourceAttr(resourceName, "output_location.0.prefix", "response"),
92+
resource.TestCheckResourceAttr(resourceName, "processor_config.#", "1"),
93+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.features.#", "1"),
94+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.features.0.feature_type", "DOCUMENT_CLASSIFICATION"),
95+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.processor_type", "GENERAL"),
96+
),
97+
},
98+
99+
// delete before next Create
100+
{
101+
Config: config + compartmentIdVariableStr,
102+
},
103+
// verify Create with optionals
104+
{
105+
Config: config + compartmentIdVariableStr + acctest.GenerateResourceFromRepresentationMap("oci_ai_document_processor_job", "test_processor_job", acctest.Optional, acctest.Create, AiDocumentProcessorJobRepresentation),
106+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
107+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
108+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"),
109+
resource.TestCheckResourceAttrSet(resourceName, "id"),
110+
resource.TestCheckResourceAttr(resourceName, "input_location.#", "1"),
111+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.#", "1"),
112+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.0.bucket", "tf_test_bucket"),
113+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.0.namespace", "axgexwaxnm7k"),
114+
resource.TestCheckResourceAttr(resourceName, "input_location.0.object_locations.0.object", "amazon_inv.pdf"),
115+
resource.TestCheckResourceAttr(resourceName, "input_location.0.source_type", "OBJECT_STORAGE_LOCATIONS"),
116+
resource.TestCheckResourceAttr(resourceName, "output_location.#", "1"),
117+
resource.TestCheckResourceAttr(resourceName, "output_location.0.bucket", "tf_test_bucket"),
118+
resource.TestCheckResourceAttr(resourceName, "output_location.0.namespace", "axgexwaxnm7k"),
119+
resource.TestCheckResourceAttr(resourceName, "output_location.0.prefix", "response"),
120+
resource.TestCheckResourceAttr(resourceName, "processor_config.#", "1"),
121+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.features.#", "1"),
122+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.features.0.feature_type", "DOCUMENT_CLASSIFICATION"),
123+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.features.0.generate_searchable_pdf", "false"),
124+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.features.0.max_results", "5"),
125+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.is_zip_output_enabled", "false"),
126+
resource.TestCheckResourceAttr(resourceName, "processor_config.0.processor_type", "GENERAL"),
127+
resource.TestCheckResourceAttrSet(resourceName, "state"),
128+
resource.TestCheckResourceAttrSet(resourceName, "time_accepted"),
129+
),
130+
},
131+
132+
// verify singular datasource
133+
{
134+
Config: config +
135+
acctest.GenerateDataSourceFromRepresentationMap("oci_ai_document_processor_job", "test_processor_job", acctest.Required, acctest.Create, AiDocumentAiDocumentProcessorJobSingularDataSourceRepresentation) +
136+
compartmentIdVariableStr + AiDocumentProcessorJobResourceConfig,
137+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
138+
resource.TestCheckResourceAttrSet(singularDatasourceName, "processor_job_id"),
139+
140+
resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId),
141+
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName"),
142+
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
143+
resource.TestCheckResourceAttr(singularDatasourceName, "input_location.#", "1"),
144+
resource.TestCheckResourceAttr(singularDatasourceName, "input_location.0.object_locations.#", "1"),
145+
resource.TestCheckResourceAttr(singularDatasourceName, "input_location.0.object_locations.0.bucket", "tf_test_bucket"),
146+
resource.TestCheckResourceAttr(singularDatasourceName, "input_location.0.object_locations.0.namespace", "axgexwaxnm7k"),
147+
resource.TestCheckResourceAttr(singularDatasourceName, "input_location.0.object_locations.0.object", "amazon_inv.pdf"),
148+
resource.TestCheckResourceAttr(singularDatasourceName, "input_location.0.source_type", "OBJECT_STORAGE_LOCATIONS"),
149+
resource.TestCheckResourceAttr(singularDatasourceName, "output_location.#", "1"),
150+
resource.TestCheckResourceAttr(singularDatasourceName, "output_location.0.bucket", "tf_test_bucket"),
151+
resource.TestCheckResourceAttr(singularDatasourceName, "output_location.0.namespace", "axgexwaxnm7k"),
152+
resource.TestCheckResourceAttr(singularDatasourceName, "output_location.0.prefix", "response"),
153+
resource.TestCheckResourceAttrSet(singularDatasourceName, "percent_complete"),
154+
resource.TestCheckResourceAttr(singularDatasourceName, "processor_config.#", "1"),
155+
resource.TestCheckResourceAttr(singularDatasourceName, "processor_config.0.features.#", "1"),
156+
resource.TestCheckResourceAttr(singularDatasourceName, "processor_config.0.features.0.feature_type", "DOCUMENT_CLASSIFICATION"),
157+
resource.TestCheckResourceAttr(singularDatasourceName, "processor_config.0.features.0.generate_searchable_pdf", "false"),
158+
resource.TestCheckResourceAttr(singularDatasourceName, "processor_config.0.features.0.max_results", "5"),
159+
resource.TestCheckResourceAttr(singularDatasourceName, "processor_config.0.is_zip_output_enabled", "false"),
160+
resource.TestCheckResourceAttr(singularDatasourceName, "processor_config.0.processor_type", "GENERAL"),
161+
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
162+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_accepted"),
163+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_finished"),
164+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_started"),
165+
),
166+
},
167+
// verify resource import
168+
{
169+
Config: config + AiDocumentProcessorJobRequiredOnlyResource,
170+
ImportState: true,
171+
ImportStateVerify: true,
172+
ImportStateVerifyIgnore: []string{},
173+
ResourceName: resourceName,
174+
},
175+
})
176+
}

0 commit comments

Comments
 (0)