Skip to main content

Writing Test Commands

writing_tests

CommandTS wrapperSignature
get_writing_testsgetWritingTest(id, userId)Promise<WritingTest | null>
list_writing_testslistWritingTests(userId)Promise<WritingTest[]>
create_writing_testscreateWritingTest(userId, { title?, status? })Promise<string>
update_writing_testsupdateWritingTest(id, userId, { title?, status? })Promise<void>
delete_writing_testsdeleteWritingTest(id, userId)Promise<void>

writing_tasks

CommandTS wrapper
list_writing_taskslistWritingTasks(userId)
create_writing_taskscreateWritingTask(userId, input)
delete_writing_tasksdeleteWritingTask(id, userId)

createWritingTask input:

{
test_id: string;
task_number?: number;
task_type?: string; // "task1" | "task2"
title?: string;
difficulty?: string;
suggested_time?: string;
prompt?: string;
min_words?: number;
max_words?: string;
image_url?: string;
include_model_answer?: boolean;
model_answer?: string;
figure_description?: string;
}

grade_writing

AI-grades a single Writing task response using whichever AI provider is currently active in Admin → AI Configurations. See Writing Module & AI Grading for the full behavior, system prompt, and per-provider request shape.

Input:

{
user_id: string;
task_type: "task1" | "task2";
prompt: string;
user_response: string;
session_id?: string;
}

Output (GradingResult):

{
overallBand: number;
criteria: {
taskAchievement: number;
coherenceCohesion: number;
lexicalResource: number;
grammaticalRange: number;
};
feedback: {
strengths: string[];
weaknesses: string[];
improvements: string;
};
}

Constraints:

FieldLimit
user_responsemax 10,000 characters
promptmax 5,000 characters
task_typemust be "task1" or "task2"

Example call:

import { gradeWriting } from "@/lib/tauri";

const result = await gradeWriting({
user_id: getAnonId(),
task_type: "task2",
prompt: essayPrompt,
user_response: candidateEssay,
});