Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(chat): implement new settings feature flags (Issue #2923) #2926

Merged
merged 8 commits into from
Jan 13, 2025
24 changes: 14 additions & 10 deletions apps/chat-e2e/src/tests/chatHeaderSettings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,21 +58,25 @@ dialTest(
'Verify conversation settings are the same as for initial model',
async () => {
await chatHeader.openConversationSettingsPopup();
if (randomModel.features?.systemPrompt) {
if (ModelsUtil.doesModelAllowSystemPrompt(randomModel)) {
const systemPrompt = await agentSettings.getSystemPrompt();
expect
.soft(systemPrompt, ExpectedMessages.defaultSystemPromptIsEmpty)
.toBe(conversation.prompt);
}
const temperature = await temperatureSlider.getTemperature();
expect
.soft(temperature, ExpectedMessages.defaultTemperatureIsOne)
.toBe(conversation.temperature.toString());
const modelAddons = defaultModel.selectedAddons ?? [];
const selectedAddons = await addons.getSelectedAddons();
expect
.soft(selectedAddons, ExpectedMessages.noAddonsSelected)
.toEqual(modelAddons);
if (ModelsUtil.doesModelAllowTemperature(randomModel)) {
const temperature = await temperatureSlider.getTemperature();
expect
.soft(temperature, ExpectedMessages.defaultTemperatureIsOne)
.toBe(conversation.temperature.toString());
}
if (ModelsUtil.doesModelAllowAddons(randomModel)) {
const modelAddons = defaultModel.selectedAddons ?? [];
const selectedAddons = await addons.getSelectedAddons();
expect
.soft(selectedAddons, ExpectedMessages.noAddonsSelected)
.toEqual(modelAddons);
}
},
);
},
Expand Down
51 changes: 30 additions & 21 deletions apps/chat-e2e/src/tests/compareMode.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ dialTest.beforeAll(async () => {
defaultModel = ModelsUtil.getDefaultModel()!;
aModel = GeneratorUtil.randomArrayElement(
allModels.filter(
(m) => m.id !== defaultModel.id && m.features?.systemPrompt,
(m) =>
m.id !== defaultModel.id &&
ModelsUtil.doesModelAllowSystemPrompt(m) &&
ModelsUtil.doesModelAllowTemperature(m),
),
);
bModel = GeneratorUtil.randomArrayElement(
Expand Down Expand Up @@ -817,23 +820,27 @@ dialTest(
await leftChatHeader.openConversationSettingsPopup();
const leftEntitySettings =
conversationSettingsModal.getLeftAgentSettings();
if (firstUpdatedRandomModel.features?.systemPrompt) {
if (ModelsUtil.doesModelAllowSystemPrompt(firstUpdatedRandomModel)) {
await leftEntitySettings.clearAndSetSystemPrompt(firstUpdatedPrompt);
}
await leftEntitySettings
.getTemperatureSlider()
.setTemperature(firstUpdatedTemp);
if (ModelsUtil.doesModelAllowTemperature(firstUpdatedRandomModel)) {
await leftEntitySettings
.getTemperatureSlider()
.setTemperature(firstUpdatedTemp);
}

const rightEntitySettings =
conversationSettingsModal.getRightAgentSettings();
if (secondUpdatedRandomModel.features?.systemPrompt) {
if (ModelsUtil.doesModelAllowSystemPrompt(secondUpdatedRandomModel)) {
await rightEntitySettings.clearAndSetSystemPrompt(
secondUpdatedPrompt,
);
}
await rightEntitySettings
.getTemperatureSlider()
.setTemperature(secondUpdatedTemp);
if (ModelsUtil.doesModelAllowTemperature(secondUpdatedRandomModel)) {
await rightEntitySettings
.getTemperatureSlider()
.setTemperature(secondUpdatedTemp);
}
await conversationSettingsModal.applyChangesButton.click();
},
);
Expand Down Expand Up @@ -874,17 +881,18 @@ dialTest(
.toBe(secondUpdatedRandomModel.version);

await rightChatHeader.hoverOverChatSettings();
if (secondUpdatedRandomModel.features?.systemPrompt) {
if (ModelsUtil.doesModelAllowSystemPrompt(secondUpdatedRandomModel)) {
const rightPromptInfo = await chatSettingsTooltip.getPromptInfo();
expect
.soft(rightPromptInfo, ExpectedMessages.chatInfoPromptIsValid)
.toBe(secondUpdatedPrompt);
}

const rightTempInfo = await chatSettingsTooltip.getTemperatureInfo();
expect
.soft(rightTempInfo, ExpectedMessages.chatInfoTemperatureIsValid)
.toBe(secondUpdatedTemp.toString());
if (ModelsUtil.doesModelAllowTemperature(secondUpdatedRandomModel)) {
const rightTempInfo = await chatSettingsTooltip.getTemperatureInfo();
expect
.soft(rightTempInfo, ExpectedMessages.chatInfoTemperatureIsValid)
.toBe(secondUpdatedTemp.toString());
}

await errorPopup.cancelPopup();
await leftChatHeader.hoverOverChatModel();
Expand All @@ -899,17 +907,18 @@ dialTest(
.toBe(firstUpdatedRandomModel.version);

await leftChatHeader.hoverOverChatSettings();
if (firstUpdatedRandomModel.features?.systemPrompt) {
if (ModelsUtil.doesModelAllowSystemPrompt(firstUpdatedRandomModel)) {
const leftPromptInfo = await chatSettingsTooltip.getPromptInfo();
expect
.soft(leftPromptInfo, ExpectedMessages.chatInfoPromptIsValid)
.toBe(firstUpdatedPrompt);
}

const leftTempInfo = await chatSettingsTooltip.getTemperatureInfo();
expect
.soft(leftTempInfo, ExpectedMessages.chatInfoTemperatureIsValid)
.toBe(firstUpdatedTemp.toString());
if (ModelsUtil.doesModelAllowTemperature(firstUpdatedRandomModel)) {
const leftTempInfo = await chatSettingsTooltip.getTemperatureInfo();
expect
.soft(leftTempInfo, ExpectedMessages.chatInfoTemperatureIsValid)
.toBe(firstUpdatedTemp.toString());
}
},
);
},
Expand Down
24 changes: 13 additions & 11 deletions apps/chat-e2e/src/tests/defaultModelSettings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ let nonDefaultModel: DialAIEntityModel;
let recentAddonIds: string[];
let recentModelIds: string[];
let allEntities: DialAIEntityModel[];
let modelsWithoutSystemPrompt: string[];

dialTest.beforeAll(async () => {
defaultModel = ModelsUtil.getDefaultModel()!;
Expand All @@ -27,7 +26,6 @@ dialTest.beforeAll(async () => {
recentAddonIds = ModelsUtil.getRecentAddonIds();
recentModelIds = ModelsUtil.getRecentModelIds();
allEntities = ModelsUtil.getOpenAIEntities();
modelsWithoutSystemPrompt = ModelsUtil.getModelsWithoutSystemPrompt();
});

dialTest(
Expand Down Expand Up @@ -359,13 +357,16 @@ dialTest(
await chat.configureSettingsButton.click();
const sysPrompt = 'test prompt';
const temp = 0;
const isSysPromptAllowed = !modelsWithoutSystemPrompt.includes(
randomModel.id,
);
const isSysPromptAllowed =
ModelsUtil.doesModelAllowSystemPrompt(randomModel);
if (isSysPromptAllowed) {
await agentSettings.setSystemPrompt(sysPrompt);
}
await temperatureSlider.setTemperature(temp);
const isTemperatureAllowed =
ModelsUtil.doesModelAllowTemperature(randomModel);
if (isTemperatureAllowed) {
await temperatureSlider.setTemperature(temp);
}
await conversationSettingsModal.applyChangesButton.click();

await dialHomePage.reloadPage();
Expand All @@ -376,11 +377,12 @@ dialTest(
const systemPrompt = await agentSettings.systemPrompt.getElementContent();
expect.soft(systemPrompt, ExpectedMessages.systemPromptIsValid).toBe('');
}

const temperature = await temperatureSlider.getTemperature();
expect
.soft(temperature, ExpectedMessages.temperatureIsValid)
.toBe(ExpectedConstants.defaultTemperature);
if (isTemperatureAllowed) {
const temperature = await temperatureSlider.getTemperature();
expect
.soft(temperature, ExpectedMessages.temperatureIsValid)
.toBe(ExpectedConstants.defaultTemperature);
}

const selectedAddons = await addons.getSelectedAddons();
expect.soft(selectedAddons, ExpectedMessages.noAddonsSelected).toEqual([]);
Expand Down
25 changes: 15 additions & 10 deletions apps/chat-e2e/src/tests/modelSettings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,36 +32,41 @@ dialTest(
setTestIds('EPMRTC-1046');
const randomModel = GeneratorUtil.randomArrayElement(
models.filter(
(m) => m.id !== defaultModel.id && m.features?.systemPrompt === true,
(m) =>
m.id !== defaultModel.id &&
ModelsUtil.doesModelAllowSystemPrompt(m) &&
ModelsUtil.doesModelAllowTemperature(m),
),
);
await localStorageManager.setRecentModelsIds(defaultModel, randomModel);
await dialHomePage.openHomePage();
await dialHomePage.waitForPageLoaded();

await chat.configureSettingsButton.click();
if (defaultModel.features?.systemPrompt) {
if (ModelsUtil.doesModelAllowSystemPrompt(defaultModel)) {
await agentSettings.setSystemPrompt(sysPrompt);
}
await temperatureSlider.setTemperature(temp);
if (ModelsUtil.doesModelAllowTemperature(defaultModel)) {
await temperatureSlider.setTemperature(temp);
}
await conversationSettingsModal.applyChangesButton.click();

await chat.changeAgentButton.click();
await talkToAgentDialog.selectAgent(randomModel, marketplacePage);

await chat.configureSettingsButton.click();
if (defaultModel.features?.systemPrompt) {
if (ModelsUtil.doesModelAllowSystemPrompt(defaultModel)) {
const systemPromptVisible = await agentSettings.getSystemPrompt();
expect
.soft(systemPromptVisible, ExpectedMessages.systemPromptIsValid)
.toBe(sysPrompt);
}

const temperature = await temperatureSlider.getTemperature();
expect
.soft(temperature, ExpectedMessages.temperatureIsValid)
.toBe(temp.toString());

if (ModelsUtil.doesModelAllowTemperature(defaultModel)) {
const temperature = await temperatureSlider.getTemperature();
expect
.soft(temperature, ExpectedMessages.temperatureIsValid)
.toBe(temp.toString());
}
const selectedAddons = await addons.getSelectedAddons();
expect
.soft(selectedAddons, ExpectedMessages.selectedAddonsValid)
Expand Down
5 changes: 4 additions & 1 deletion apps/chat-e2e/src/tests/replay.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,10 @@ dialTest(
const replayPrompt = 'reply the same text';
const replayModel = GeneratorUtil.randomArrayElement(
allModels.filter(
(m) => m.id !== defaultModel.id && m.features?.systemPrompt,
(m) =>
m.id !== defaultModel.id &&
ModelsUtil.doesModelAllowSystemPrompt(m) &&
ModelsUtil.doesModelAllowTemperature(m),
),
);
const conversation =
Expand Down
23 changes: 19 additions & 4 deletions apps/chat-e2e/src/utils/modelsUtil.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { DialAIEntityModel } from '@/chat/types/models';
import {
doesModelAllowAddons,
doesModelAllowSystemPrompt,
doesModelAllowTemperature,
} from '@/chat/utils/app/models';

export class ModelsUtil {
public static getOpenAIEntities() {
Expand Down Expand Up @@ -80,10 +85,20 @@ export class ModelsUtil {
return ModelsUtil.getModels().find((a) => a.isDefault);
}

public static getModelsWithoutSystemPrompt() {
return ModelsUtil.getModels()
.filter((m) => m.features?.systemPrompt === false)
.map((m) => m.id);
public static doesModelAllowSystemPrompt(
model: DialAIEntityModel | undefined,
) {
return doesModelAllowSystemPrompt(model);
}

public static doesModelAllowTemperature(
model: DialAIEntityModel | undefined,
) {
return doesModelAllowTemperature(model);
}

public static doesModelAllowAddons(model: DialAIEntityModel | undefined) {
return doesModelAllowAddons(model);
}

public static getModelsWithoutAttachment() {
Expand Down
2 changes: 1 addition & 1 deletion apps/chat/next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ const nextConfig = {
permanent: false,
},
{
source: '/models/:slug([A-Za-z0-9@.:-]+)',
source: '/models/:slug([A-Za-z0-9@.-]+)',
destination: '/?isolated-model-id=:slug',
permanent: false,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { useTranslation } from 'next-i18next';
import classNames from 'classnames';

import { DefaultsService } from '@/src/utils/app/data/defaults-service';
import { doesModelHaveSettings } from '@/src/utils/app/models';

import { Conversation } from '@/src/types/chat';
import { EntityType } from '@/src/types/common';
import { ModalState } from '@/src/types/modal';
import { DialAIEntityModel } from '@/src/types/models';
import { Translation } from '@/src/types/translation';
Expand Down Expand Up @@ -147,7 +147,7 @@ export const ChatSettings = ({
.map((conv) => modelsMap[conv.model.id])
.filter(Boolean) as DialAIEntityModel[];

return allowedModels.some((model) => model.type !== EntityType.Application);
return allowedModels.some((model) => doesModelHaveSettings(model));
}, [conversations, modelsMap]);

return (
Expand Down
Loading
Loading