diff --git a/src/commons/application/actions/__tests__/SessionActions.test.ts b/src/commons/application/actions/__tests__/SessionActions.test.ts index b8d11c0c8d..d5dbcb1936 100644 --- a/src/commons/application/actions/__tests__/SessionActions.test.ts +++ b/src/commons/application/actions/__tests__/SessionActions.test.ts @@ -620,10 +620,14 @@ test('updateGrading generates correct action object', async () => { id: 100 }, gradedAt: '2019-08-16T13:26:32+00:00' - } + }, + autogradingResults: [], + autoGradingStatus: 'N/A' } ], + enable_llm_grading: false, assessment: { + llm_assessment_prompt: null, coverPicture: 'https://i.imgur.com/dR7zBPI.jpeg', id: 1, number: '5', diff --git a/src/commons/application/reducers/__tests__/SessionReducer.test.ts b/src/commons/application/reducers/__tests__/SessionReducer.test.ts index ff9001f136..6802046726 100644 --- a/src/commons/application/reducers/__tests__/SessionReducer.test.ts +++ b/src/commons/application/reducers/__tests__/SessionReducer.test.ts @@ -402,8 +402,11 @@ test('UPDATE_ASSESSMENT_OVERVIEWS works correctly in updating assessment overvie // Test data for UPDATE_GRADING const gradingTest1: GradingQuery = { + enable_llm_grading: false, answers: [ { + autogradingResults: [], + autoGradingStatus: 'N/A', question: await vi.importMock('../../../../features/grading/GradingTypes'), student: { name: 'test student', @@ -418,6 +421,7 @@ const gradingTest1: GradingQuery = { } ], assessment: { + llm_assessment_prompt: null, coverPicture: 'test string', id: 1, number: 'M1A', @@ -430,8 +434,11 @@ const gradingTest1: GradingQuery = { }; const gradingTest2: GradingQuery = { + enable_llm_grading: false, answers: [ { + autogradingResults: [], + autoGradingStatus: 'N/A', question: await vi.importMock('../../../../features/grading/GradingTypes'), student: { name: 'another test student', @@ -446,6 +453,7 @@ const gradingTest2: GradingQuery = { } ], assessment: { + llm_assessment_prompt: null, coverPicture: 'another test string', id: 2, number: 'P2', diff --git a/src/commons/application/types/SessionTypes.ts b/src/commons/application/types/SessionTypes.ts index 401466989f..ad70840098 100644 --- a/src/commons/application/types/SessionTypes.ts +++ b/src/commons/application/types/SessionTypes.ts @@ -39,6 +39,11 @@ export type SessionState = { readonly enableAchievements?: boolean; readonly enableSourcecast?: boolean; readonly enableStories?: boolean; + readonly enableLlmGrading?: boolean; + readonly llmApiKey?: string; + readonly llmModel?: string; + readonly llmApiUrl?: string; + readonly llmCourseLevelPrompt?: string; readonly enableOverallLeaderboard?: boolean; readonly enableContestLeaderboard?: boolean; readonly topLeaderboardDisplay?: number; @@ -109,6 +114,7 @@ export type CourseConfiguration = { enableAchievements: boolean; enableSourcecast: boolean; enableStories: boolean; + enableLlmGrading?: boolean; enableOverallLeaderboard: boolean; enableContestLeaderboard: boolean; topLeaderboardDisplay: number; @@ -117,6 +123,10 @@ export type CourseConfiguration = { sourceVariant: Variant; moduleHelpText: string; assetsPrefix: string; + llmApiKey?: string; + llmModel?: string; + llmApiUrl?: string; + llmCourseLevelPrompt?: string; }; export type AdminPanelCourseRegistration = { diff --git a/src/commons/assessment/AssessmentTypes.ts b/src/commons/assessment/AssessmentTypes.ts index bbd7b13644..ddcc916c72 100644 --- a/src/commons/assessment/AssessmentTypes.ts +++ b/src/commons/assessment/AssessmentTypes.ts @@ -121,6 +121,7 @@ export interface IProgrammingQuestion extends BaseQuestion { prepend: string; postpend: string; solutionTemplate: string; + llm_prompt?: string | null; testcases: Testcase[]; testcasesPrivate?: Testcase[]; // For mission control type: 'programming'; @@ -280,6 +281,7 @@ export const programmingTemplate = (): IProgrammingQuestion => { prepend: '', solutionTemplate: '//This is a mock solution template', postpend: '', + llm_prompt: null, testcases: [], testcasesPrivate: [], type: 'programming', diff --git a/src/commons/dropdown/DropdownCreateCourse.tsx b/src/commons/dropdown/DropdownCreateCourse.tsx index 2d37ce7eb9..b61d8bedfb 100644 --- a/src/commons/dropdown/DropdownCreateCourse.tsx +++ b/src/commons/dropdown/DropdownCreateCourse.tsx @@ -40,9 +40,11 @@ const DropdownCreateCourse: React.FC = props => { enableAchievements: true, enableSourcecast: true, enableStories: false, + enableLlmGrading: false, sourceChapter: Chapter.SOURCE_1, sourceVariant: Variant.DEFAULT, - moduleHelpText: '' + moduleHelpText: '', + llmApiKey: '' }); const [courseHelpTextSelectedTab, setCourseHelpTextSelectedTab] = @@ -222,7 +224,8 @@ const DropdownCreateCourse: React.FC = props => { }) } /> - + +
= props => { }) } /> + + + setCourseConfig({ + ...courseConfig, + enableLlmGrading: (e.target as HTMLInputElement).checked + }) + } + />
@@ -273,6 +288,24 @@ const DropdownCreateCourse: React.FC = props => { fill /> + + + setCourseConfig({ + ...courseConfig, + llmApiKey: e.target.value + }) + } + /> +