Skip to content

Commit

Permalink
feat(chat): implement new settings feature flags (Issue #2923) (#2926)
Browse files Browse the repository at this point in the history
  • Loading branch information
IlyaBondar authored Jan 13, 2025
1 parent 4bc7086 commit b60af4b
Show file tree
Hide file tree
Showing 14 changed files with 246 additions and 135 deletions.
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([[email protected]]+)',
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

0 comments on commit b60af4b

Please sign in to comment.