Skip to content

Commit

Permalink
645 streamline network calls for resetting level progress (#872)
Browse files Browse the repository at this point in the history
  • Loading branch information
pmarsh-scottlogic authored and chriswilty committed Apr 8, 2024
1 parent 3425cb5 commit 81ee06c
Show file tree
Hide file tree
Showing 19 changed files with 272 additions and 354 deletions.
15 changes: 1 addition & 14 deletions backend/src/controller/chatController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
} from '@src/defence';
import { OpenAiAddInfoToChatHistoryRequest } from '@src/models/api/OpenAiAddInfoToChatHistoryRequest';
import { OpenAiChatRequest } from '@src/models/api/OpenAiChatRequest';
import { OpenAiClearRequest } from '@src/models/api/OpenAiClearRequest';
import {
DefenceReport,
ChatHttpResponse,
Expand Down Expand Up @@ -412,16 +411,4 @@ function handleAddInfoToChatHistory(
}
}

function handleClearChatHistory(req: OpenAiClearRequest, res: Response) {
const level = req.body.level;
if (level !== undefined && level >= LEVEL_NAMES.LEVEL_1) {
req.session.levelState[level].chatHistory = [];
console.debug('ChatGPT messages cleared');
res.send();
} else {
res.status(400);
res.send();
}
}

export { handleChatToGPT, handleAddInfoToChatHistory, handleClearChatHistory };
export { handleChatToGPT, handleAddInfoToChatHistory };
18 changes: 0 additions & 18 deletions backend/src/controller/emailController.ts

This file was deleted.

25 changes: 24 additions & 1 deletion backend/src/controller/resetController.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { Response } from 'express';

import { LevelGetRequest } from '@src/models/api/LevelGetRequest';
import { LevelResetRequest } from '@src/models/api/LevelResetRequest';
import { defaultChatModel } from '@src/models/chat';
import { ChatInfoMessage } from '@src/models/chatMessage';
import {
LEVEL_NAMES,
getInitialLevelStates,
Expand Down Expand Up @@ -33,4 +35,25 @@ function handleResetProgress(req: LevelGetRequest, res: Response) {
});
}

export { handleResetProgress };
function handleResetLevel(req: LevelResetRequest, res: Response) {
const { level: levelStr } = req.params;

const level = Number(levelStr) as LEVEL_NAMES;

if (!isValidLevel(level)) {
res.status(400).send('Invalid level');
return;
}

console.debug('Resetting progress for level ', level);
req.session.levelState[level].chatHistory = [];
req.session.levelState[level].sentEmails = [];
res.send({
chatInfoMessage: {
infoMessage: `Level progress reset`,
chatMessageType: 'RESET_LEVEL',
} as ChatInfoMessage,
});
}

export { handleResetProgress, handleResetLevel };
12 changes: 0 additions & 12 deletions backend/src/models/api/EmailClearRequest.ts

This file was deleted.

12 changes: 12 additions & 0 deletions backend/src/models/api/LevelResetRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Request } from 'express';

import { ChatMessage } from '@src/models/chatMessage';

export type LevelResetRequest = Request<
{ level: string },
{
chatInfoMessage?: ChatMessage;
},
never,
never
>;
12 changes: 0 additions & 12 deletions backend/src/models/api/OpenAiClearRequest.ts

This file was deleted.

16 changes: 7 additions & 9 deletions backend/src/sessionRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,22 @@ import memoryStoreFactory from 'memorystore';
import {
handleChatToGPT,
handleAddInfoToChatHistory,
handleClearChatHistory,
} from './controller/chatController';
import {
handleConfigureDefence,
handleDefenceActivation,
handleDefenceDeactivation,
handleResetDefenceConfigItem,
} from './controller/defenceController';
import { handleClearEmails } from './controller/emailController';
import { handleLoadLevel } from './controller/levelController';
import {
handleConfigureModel,
handleSetModel,
} from './controller/modelController';
import { handleResetProgress } from './controller/resetController';
import {
handleResetLevel,
handleResetProgress,
} from './controller/resetController';
import { handleStart } from './controller/startController';
import { handleTest } from './controller/testController';
import { defaultChatModel } from './models/chat';
Expand Down Expand Up @@ -92,20 +93,17 @@ router.post('/defence/deactivate', handleDefenceDeactivation);
router.post('/defence/configure', handleConfigureDefence);
router.post('/defence/resetConfig', handleResetDefenceConfigItem);

// emails
router.post('/email/clear', handleClearEmails);

// chat
router.post('/openai/chat', handleChatToGPT);
router.post('/openai/addInfoToHistory', handleAddInfoToChatHistory);
router.post('/openai/clear', handleClearChatHistory);

// model configurations
router.post('/openai/model', handleSetModel);
router.post('/openai/model/configure', handleConfigureModel);

// reset progress for all levels
router.post('/reset', handleResetProgress);
// reset
router.post('/reset/all', handleResetProgress);
router.post('/reset/:level', handleResetLevel);

// Testing endpoints
router.post('/test/load', handleTest);
Expand Down
49 changes: 0 additions & 49 deletions backend/test/unit/controller/chatController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@ import { Response } from 'express';
import {
handleAddInfoToChatHistory,
handleChatToGPT,
handleClearChatHistory,
} from '@src/controller/chatController';
import { detectTriggeredInputDefences, transformMessage } from '@src/defence';
import { OpenAiAddInfoToChatHistoryRequest } from '@src/models/api/OpenAiAddInfoToChatHistoryRequest';
import { OpenAiChatRequest } from '@src/models/api/OpenAiChatRequest';
import { OpenAiClearRequest } from '@src/models/api/OpenAiClearRequest';
import {
DefenceReport,
ChatResponse,
Expand Down Expand Up @@ -953,50 +951,3 @@ describe('handleAddInfoToChatHistory', () => {
expect(req.session.levelState[0].chatHistory).toEqual(chatHistory);
});
});

describe('handleClearChatHistory', () => {
function openAiClearRequestMock(
level?: LEVEL_NAMES,
chatHistory?: ChatMessage[]
) {
return {
body: {
level: level ?? undefined,
},
session: {
levelState: [
{
chatHistory: chatHistory ?? [],
},
],
},
} as OpenAiClearRequest;
}

const chatHistory: ChatMessage[] = [
{
completion: { role: 'system', content: 'You are a helpful chatbot' },
chatMessageType: 'SYSTEM',
},
{
completion: { role: 'assistant', content: 'Hello human' },
chatMessageType: 'BOT',
},
];
test('GIVEN valid level WHEN handleClearChatHistory called THEN it sets chatHistory to empty', () => {
const req = openAiClearRequestMock(LEVEL_NAMES.LEVEL_1, chatHistory);
const res = responseMock();
handleClearChatHistory(req, res);
expect(req.session.levelState[0].chatHistory.length).toEqual(0);
});

test('GIVEN invalid level WHEN handleClearChatHistory called THEN returns 400 ', () => {
const req = openAiClearRequestMock(undefined, chatHistory);

const res = responseMock();

handleClearChatHistory(req, res);

expect(res.status).toHaveBeenCalledWith(400);
});
});
62 changes: 0 additions & 62 deletions backend/test/unit/controller/emailController.test.ts

This file was deleted.

Loading

0 comments on commit 81ee06c

Please sign in to comment.