Skip to content

Commit 4d24ee0

Browse files
committed
Refactor AI model selection fields and update script paths
- Updated the AI model selection fields to use more descriptive variable names for better readability. - Introduced a new function `getModelHint` to provide contextual hints based on the selected AI model and its thinking type. - Changed the output file path in `tsconfig.json` from `ai-unittests.js` to `ai-chat-driven.js`. - Updated the XML configuration for the AI execution script to point to the new JavaScript file. - Added a new folder structure in the project file to accommodate the new script. - Created a new JavaScript file `ai-chat-driven.js` that implements the AI execution logic. - Ensured that similar changes were applied to the unit tests to maintain consistency across the codebase.
1 parent 627a826 commit 4d24ee0

12 files changed

Lines changed: 169 additions & 59 deletions

File tree

Modules/Intent.Modules.AI.AutoImplementation/DesignerScripts/ai-common.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,19 @@ async function getAiProviderModels(): Promise<IProviderModelsResult> {
3232

3333
async function getAiModelSelectionFields(providerModelsResult: IProviderModelsResult, aiSettingKeyPrefix: string): Promise<MacroApi.Context.IDynamicFormFieldConfig[]> {
3434
const globalSettings = await userSettings.loadGlobalAsync();
35-
const autoImplementationAiModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
36-
const autoImplementationAiThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
35+
const settingModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
36+
const settingThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
3737

3838
const { providerModels, modelLookup } = providerModelsResult;
39+
const initialThinkingType = modelLookup[settingModelId]?.thinkingType;
3940

4041
return [
4142
{
4243
id: "model",
4344
fieldType: "select",
4445
label: "Model",
4546
isRequired: true,
46-
hint: providerModels.length === 0 ? "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html)." : "",
47+
hint: getModelHint(providerModels, initialThinkingType),
4748
selectOptions:
4849
Object.entries(modelLookup)
4950
.map(([key, value]: [string, IModelRecord]) => {
@@ -53,13 +54,14 @@ async function getAiModelSelectionFields(providerModelsResult: IProviderModelsRe
5354
additionalInfo: value.providerName
5455
};
5556
}),
56-
value: autoImplementationAiModelId,
57+
value: settingModelId,
5758
onChange: async (config) => {
5859
const curThinkingType = modelLookup[config.getField("model").value as string].thinkingType;
5960
const thinkingField = config.getField("thinking");
6061

6162
thinkingField.isHidden = curThinkingType === "None";
6263
thinkingField.selectOptions = getApplicableThinkingOptions(curThinkingType);
64+
thinkingField.hint = getModelHint(providerModels, curThinkingType);
6365

6466
if (curThinkingType === "ThinkingLevels") {
6567
thinkingField.value = "low";
@@ -74,12 +76,22 @@ async function getAiModelSelectionFields(providerModelsResult: IProviderModelsRe
7476
id: "thinking",
7577
fieldType: "select",
7678
label: "Thinking/reasoning mode",
77-
isHidden: autoImplementationAiThinkingLevel == null || providerModels.length === 0,
78-
value: autoImplementationAiThinkingLevel,
79-
selectOptions: getApplicableThinkingOptions(modelLookup[autoImplementationAiModelId].thinkingType)
79+
isHidden: settingThinkingLevel == null || providerModels.length === 0,
80+
value: settingThinkingLevel,
81+
selectOptions: getApplicableThinkingOptions(initialThinkingType)
8082
}
8183
];
8284

85+
function getModelHint(providerModels: IModelRecord[], thinkingType: ThinkingType | null): string {
86+
if (providerModels.length === 0) {
87+
return "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html).";
88+
} else if (thinkingType == "Unknown") {
89+
return "Thinking level for model is unknown; none is selected by default.";
90+
} else {
91+
return "";
92+
}
93+
}
94+
8395
function getApplicableThinkingOptions(thinkingType: ThinkingType | null): MacroApi.Context.IDynamicFormFieldSelectOption[] {
8496
if (thinkingType === "ThinkingLevels") {
8597
return [

Modules/Intent.Modules.AI.AutoImplementation/resources/scripts/ai-implement.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@ async function getAiProviderModels() {
88
return { providerModels, modelLookup };
99
}
1010
async function getAiModelSelectionFields(providerModelsResult, aiSettingKeyPrefix) {
11+
var _a;
1112
const globalSettings = await userSettings.loadGlobalAsync();
12-
const autoImplementationAiModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
13-
const autoImplementationAiThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
13+
const settingModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
14+
const settingThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
1415
const { providerModels, modelLookup } = providerModelsResult;
16+
const initialThinkingType = (_a = modelLookup[settingModelId]) === null || _a === void 0 ? void 0 : _a.thinkingType;
1517
return [
1618
{
1719
id: "model",
1820
fieldType: "select",
1921
label: "Model",
2022
isRequired: true,
21-
hint: providerModels.length === 0 ? "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html)." : "",
23+
hint: getModelHint(providerModels, initialThinkingType),
2224
selectOptions: Object.entries(modelLookup)
2325
.map(([key, value]) => {
2426
return {
@@ -27,12 +29,13 @@ async function getAiModelSelectionFields(providerModelsResult, aiSettingKeyPrefi
2729
additionalInfo: value.providerName
2830
};
2931
}),
30-
value: autoImplementationAiModelId,
32+
value: settingModelId,
3133
onChange: async (config) => {
3234
const curThinkingType = modelLookup[config.getField("model").value].thinkingType;
3335
const thinkingField = config.getField("thinking");
3436
thinkingField.isHidden = curThinkingType === "None";
3537
thinkingField.selectOptions = getApplicableThinkingOptions(curThinkingType);
38+
thinkingField.hint = getModelHint(providerModels, curThinkingType);
3639
if (curThinkingType === "ThinkingLevels") {
3740
thinkingField.value = "low";
3841
}
@@ -48,11 +51,22 @@ async function getAiModelSelectionFields(providerModelsResult, aiSettingKeyPrefi
4851
id: "thinking",
4952
fieldType: "select",
5053
label: "Thinking/reasoning mode",
51-
isHidden: autoImplementationAiThinkingLevel == null || providerModels.length === 0,
52-
value: autoImplementationAiThinkingLevel,
53-
selectOptions: getApplicableThinkingOptions(modelLookup[autoImplementationAiModelId].thinkingType)
54+
isHidden: settingThinkingLevel == null || providerModels.length === 0,
55+
value: settingThinkingLevel,
56+
selectOptions: getApplicableThinkingOptions(initialThinkingType)
5457
}
5558
];
59+
function getModelHint(providerModels, thinkingType) {
60+
if (providerModels.length === 0) {
61+
return "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html).";
62+
}
63+
else if (thinkingType == "Unknown") {
64+
return "Thinking level for model is unknown; none is selected by default.";
65+
}
66+
else {
67+
return "";
68+
}
69+
}
5670
function getApplicableThinkingOptions(thinkingType) {
5771
if (thinkingType === "ThinkingLevels") {
5872
return [

Modules/Intent.Modules.AI.Blazor/DesignerScripts/ai-common.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,19 @@ async function getAiProviderModels(): Promise<IProviderModelsResult> {
3232

3333
async function getAiModelSelectionFields(providerModelsResult: IProviderModelsResult, aiSettingKeyPrefix: string): Promise<MacroApi.Context.IDynamicFormFieldConfig[]> {
3434
const globalSettings = await userSettings.loadGlobalAsync();
35-
const autoImplementationAiModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
36-
const autoImplementationAiThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
35+
const settingModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
36+
const settingThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
3737

3838
const { providerModels, modelLookup } = providerModelsResult;
39+
const initialThinkingType = modelLookup[settingModelId]?.thinkingType;
3940

4041
return [
4142
{
4243
id: "model",
4344
fieldType: "select",
4445
label: "Model",
4546
isRequired: true,
46-
hint: providerModels.length === 0 ? "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html)." : "",
47+
hint: getModelHint(providerModels, initialThinkingType),
4748
selectOptions:
4849
Object.entries(modelLookup)
4950
.map(([key, value]: [string, IModelRecord]) => {
@@ -53,13 +54,14 @@ async function getAiModelSelectionFields(providerModelsResult: IProviderModelsRe
5354
additionalInfo: value.providerName
5455
};
5556
}),
56-
value: autoImplementationAiModelId,
57+
value: settingModelId,
5758
onChange: async (config) => {
5859
const curThinkingType = modelLookup[config.getField("model").value as string].thinkingType;
5960
const thinkingField = config.getField("thinking");
6061

6162
thinkingField.isHidden = curThinkingType === "None";
6263
thinkingField.selectOptions = getApplicableThinkingOptions(curThinkingType);
64+
thinkingField.hint = getModelHint(providerModels, curThinkingType);
6365

6466
if (curThinkingType === "ThinkingLevels") {
6567
thinkingField.value = "low";
@@ -74,12 +76,22 @@ async function getAiModelSelectionFields(providerModelsResult: IProviderModelsRe
7476
id: "thinking",
7577
fieldType: "select",
7678
label: "Thinking/reasoning mode",
77-
isHidden: autoImplementationAiThinkingLevel == null || providerModels.length === 0,
78-
value: autoImplementationAiThinkingLevel,
79-
selectOptions: getApplicableThinkingOptions(modelLookup[autoImplementationAiModelId].thinkingType)
79+
isHidden: settingThinkingLevel == null || providerModels.length === 0,
80+
value: settingThinkingLevel,
81+
selectOptions: getApplicableThinkingOptions(initialThinkingType)
8082
}
8183
];
8284

85+
function getModelHint(providerModels: IModelRecord[], thinkingType: ThinkingType | null): string {
86+
if (providerModels.length === 0) {
87+
return "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html).";
88+
} else if (thinkingType == "Unknown") {
89+
return "Thinking level for model is unknown; none is selected by default.";
90+
} else {
91+
return "";
92+
}
93+
}
94+
8395
function getApplicableThinkingOptions(thinkingType: ThinkingType | null): MacroApi.Context.IDynamicFormFieldSelectOption[] {
8496
if (thinkingType === "ThinkingLevels") {
8597
return [

Modules/Intent.Modules.AI.Blazor/resources/scripts/ai-blazor.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,19 @@ async function getAiProviderModels() {
7575
return { providerModels, modelLookup };
7676
}
7777
async function getAiModelSelectionFields(providerModelsResult, aiSettingKeyPrefix) {
78+
var _a;
7879
const globalSettings = await userSettings.loadGlobalAsync();
79-
const autoImplementationAiModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
80-
const autoImplementationAiThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
80+
const settingModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
81+
const settingThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
8182
const { providerModels, modelLookup } = providerModelsResult;
83+
const initialThinkingType = (_a = modelLookup[settingModelId]) === null || _a === void 0 ? void 0 : _a.thinkingType;
8284
return [
8385
{
8486
id: "model",
8587
fieldType: "select",
8688
label: "Model",
8789
isRequired: true,
88-
hint: providerModels.length === 0 ? "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html)." : "",
90+
hint: getModelHint(providerModels, initialThinkingType),
8991
selectOptions: Object.entries(modelLookup)
9092
.map(([key, value]) => {
9193
return {
@@ -94,12 +96,13 @@ async function getAiModelSelectionFields(providerModelsResult, aiSettingKeyPrefi
9496
additionalInfo: value.providerName
9597
};
9698
}),
97-
value: autoImplementationAiModelId,
99+
value: settingModelId,
98100
onChange: async (config) => {
99101
const curThinkingType = modelLookup[config.getField("model").value].thinkingType;
100102
const thinkingField = config.getField("thinking");
101103
thinkingField.isHidden = curThinkingType === "None";
102104
thinkingField.selectOptions = getApplicableThinkingOptions(curThinkingType);
105+
thinkingField.hint = getModelHint(providerModels, curThinkingType);
103106
if (curThinkingType === "ThinkingLevels") {
104107
thinkingField.value = "low";
105108
}
@@ -115,11 +118,22 @@ async function getAiModelSelectionFields(providerModelsResult, aiSettingKeyPrefi
115118
id: "thinking",
116119
fieldType: "select",
117120
label: "Thinking/reasoning mode",
118-
isHidden: autoImplementationAiThinkingLevel == null || providerModels.length === 0,
119-
value: autoImplementationAiThinkingLevel,
120-
selectOptions: getApplicableThinkingOptions(modelLookup[autoImplementationAiModelId].thinkingType)
121+
isHidden: settingThinkingLevel == null || providerModels.length === 0,
122+
value: settingThinkingLevel,
123+
selectOptions: getApplicableThinkingOptions(initialThinkingType)
121124
}
122125
];
126+
function getModelHint(providerModels, thinkingType) {
127+
if (providerModels.length === 0) {
128+
return "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html).";
129+
}
130+
else if (thinkingType == "Unknown") {
131+
return "Thinking level for model is unknown; none is selected by default.";
132+
}
133+
else {
134+
return "";
135+
}
136+
}
123137
function getApplicableThinkingOptions(thinkingType) {
124138
if (thinkingType === "ThinkingLevels") {
125139
return [

Modules/Intent.Modules.AI.ChatDrivenDomain/DesignerScripts/ai-common.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,19 @@ async function getAiProviderModels(): Promise<IProviderModelsResult> {
3232

3333
async function getAiModelSelectionFields(providerModelsResult: IProviderModelsResult, aiSettingKeyPrefix: string): Promise<MacroApi.Context.IDynamicFormFieldConfig[]> {
3434
const globalSettings = await userSettings.loadGlobalAsync();
35-
const autoImplementationAiModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
36-
const autoImplementationAiThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
35+
const settingModelId = globalSettings.get(`${aiSettingKeyPrefix}.ModelId`);
36+
const settingThinkingLevel = globalSettings.get(`${aiSettingKeyPrefix}.ThinkingLevel`);
3737

3838
const { providerModels, modelLookup } = providerModelsResult;
39+
const initialThinkingType = modelLookup[settingModelId]?.thinkingType;
3940

4041
return [
4142
{
4243
id: "model",
4344
fieldType: "select",
4445
label: "Model",
4546
isRequired: true,
46-
hint: providerModels.length === 0 ? "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html)." : "",
47+
hint: getModelHint(providerModels, initialThinkingType),
4748
selectOptions:
4849
Object.entries(modelLookup)
4950
.map(([key, value]: [string, IModelRecord]) => {
@@ -53,13 +54,14 @@ async function getAiModelSelectionFields(providerModelsResult: IProviderModelsRe
5354
additionalInfo: value.providerName
5455
};
5556
}),
56-
value: autoImplementationAiModelId,
57+
value: settingModelId,
5758
onChange: async (config) => {
5859
const curThinkingType = modelLookup[config.getField("model").value as string].thinkingType;
5960
const thinkingField = config.getField("thinking");
6061

6162
thinkingField.isHidden = curThinkingType === "None";
6263
thinkingField.selectOptions = getApplicableThinkingOptions(curThinkingType);
64+
thinkingField.hint = getModelHint(providerModels, curThinkingType);
6365

6466
if (curThinkingType === "ThinkingLevels") {
6567
thinkingField.value = "low";
@@ -74,12 +76,22 @@ async function getAiModelSelectionFields(providerModelsResult: IProviderModelsRe
7476
id: "thinking",
7577
fieldType: "select",
7678
label: "Thinking/reasoning mode",
77-
isHidden: autoImplementationAiThinkingLevel == null || providerModels.length === 0,
78-
value: autoImplementationAiThinkingLevel,
79-
selectOptions: getApplicableThinkingOptions(modelLookup[autoImplementationAiModelId].thinkingType)
79+
isHidden: settingThinkingLevel == null || providerModels.length === 0,
80+
value: settingThinkingLevel,
81+
selectOptions: getApplicableThinkingOptions(initialThinkingType)
8082
}
8183
];
8284

85+
function getModelHint(providerModels: IModelRecord[], thinkingType: ThinkingType | null): string {
86+
if (providerModels.length === 0) {
87+
return "Not seeing any AI Models? Learn how to configure or add models [here](https://docs.intentarchitect.com/articles/modules-common/intent-common-ai/intent-common-ai.html).";
88+
} else if (thinkingType == "Unknown") {
89+
return "Thinking level for model is unknown; none is selected by default.";
90+
} else {
91+
return "";
92+
}
93+
}
94+
8395
function getApplicableThinkingOptions(thinkingType: ThinkingType | null): MacroApi.Context.IDynamicFormFieldSelectOption[] {
8496
if (thinkingType === "ThinkingLevels") {
8597
return [

Modules/Intent.Modules.AI.ChatDrivenDomain/DesignerScripts/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"compilerOptions": {
44
"noImplicitAny": true,
55
"noImplicitReturns": true,
6-
"outFile": "../resources/scripts/ai-unittests.js",
6+
"outFile": "../resources/scripts/ai-chat-driven.js",
77
"removeComments": false,
88
"sourceMap": false,
99
"target": "ES2019",

Modules/Intent.Modules.AI.ChatDrivenDomain/Intent.Metadata/Module Builder/Intent.AI.ChatDrivenDomain/Elements/Script/Execute AI__191xzlgj.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<properties>
1717
<property name="4708b6ef-0671-4ea1-a920-ccec2c9eb3ea" display="Type" value="File Resource" isActive="true" />
1818
<property name="3256efdd-5d71-46f3-bd51-ef08a8d95526" display="Script" isActive="false" />
19-
<property name="41cc0d56-3141-40fe-ae97-c024866d441e" display="File Path" isActive="true" />
19+
<property name="41cc0d56-3141-40fe-ae97-c024866d441e" display="File Path" value="scripts/ai-chat-driven.js" isActive="true" />
2020
<property name="540780ad-f54e-4bd5-95f3-20a58fd59105" display="Dependencies" isActive="true" />
2121
</properties>
2222
</stereotype>

Modules/Intent.Modules.AI.ChatDrivenDomain/Intent.Modules.AI.ChatDrivenDomain.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,8 @@
2020
<PackageReference Include="Intent.SoftwareFactory.SDK" Version="3.9.0" />
2121
</ItemGroup>
2222

23+
<ItemGroup>
24+
<Folder Include="resources\scripts\" />
25+
</ItemGroup>
26+
2327
</Project>

Modules/Intent.Modules.AI.ChatDrivenDomain/modelers/Chat Driven Domain Settings.designer.settings

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
<mappableElementPackages />
4242
<mappableElementPackageExtensions />
4343
<scripts>
44-
<script name="Execute AI" id="9ff1b212-b47e-437b-9994-dcfdeea96c7e" />
44+
<script name="Execute AI" id="9ff1b212-b47e-437b-9994-dcfdeea96c7e">
45+
<filePath>scripts/ai-chat-driven.js</filePath>
46+
</script>
4547
</scripts>
4648
</settings>

0 commit comments

Comments
 (0)