Files
AI-Grading-Assistant/src/types/index.ts
T

128 lines
3.3 KiB
TypeScript

export interface QuestionItem {
questionTitle: string
maxScore: number
referenceAnswer: string
rubric: string
referenceAnswerImage?: string
}
export interface GradeResult {
score: number
confidence: number
deductions: string[]
comment: string
commit?: string
}
export interface ApiConfig {
apiKey: string
baseUrl: string
model: string
}
export interface AppSettings {
apiKey: string
baseUrl: string
model: string
shortcut: string
theme: string
fontSize: number
proxy: string
timeout: number
screenshotSavePath: string
}
export interface HistoryRecord {
id: number
question_id: number
image_path: string
student_answer: string
ai_score: number
teacher_score: number
confidence: number
created_at: string
question_title?: string
max_score?: number
reference_answer?: string
rubric?: string
deductions?: string
comment?: string
result_json?: string
image_data?: string
reference_answer_image?: string
}
export interface ElectronAPI {
window: {
dragMove: (deltaX: number, deltaY: number) => Promise<void>
dragEnd: (x: number, y: number) => Promise<void>
resizeMain: (width: number) => Promise<void>
}
screenshot: {
start: () => Promise<void>
capture: (region: { x: number; y: number; width: number; height: number }) => Promise<string | null>
cancel: () => Promise<void>
getLastImage: () => Promise<string | null>
onCompleted: (callback: (base64: string) => void) => () => void
}
ai: {
grade: (data: { imageBase64: string; rubric: string; apiConfig: ApiConfig; maxScore?: number; referenceAnswer?: string; questionTitle?: string; referenceAnswerImage?: string }) => Promise<GradeResult>
}
settings: {
get: () => Promise<AppSettings>
set: (settings: Record<string, unknown>) => Promise<boolean>
selectDirectory: () => Promise<string | null>
}
history: {
list: () => Promise<HistoryRecord[]>
delete: (id: number) => Promise<boolean>
getById: (id: number) => Promise<HistoryRecord | null>
}
grading: {
submit: (data: {
questionId: number
imagePath: string
aiScore: number
teacherScore: number
confidence: number
studentAnswer?: string
questionTitle?: string
maxScore?: number
referenceAnswer?: string
rubric?: string
deductions?: string[]
comment?: string
resultJson?: string
imageData?: string
referenceAnswerImage?: string
}) => Promise<boolean>,
storeData: (data: any) => Promise<void>,
getData: () => Promise<any>
}
rubric: {
storeData: (data: any) => Promise<void>
getData: () => Promise<any>
exportJson: () => Promise<boolean>
importJson: () => Promise<{ questions: QuestionItem[]; currentIndex: number } | null>
getNextIndex: () => Promise<number>
setNextIndex: (idx: number) => Promise<void>
resetNextIndex: () => Promise<void>
}
template: {
list: () => Promise<unknown[]>
save: (data: { name: string; course: string }) => Promise<number | null>
}
dialog: {
open: (type: string, data?: any) => Promise<void>
close: () => void
getPayload: (type: string) => Promise<any>
openImage: () => Promise<{ base64: string; mime: string; filePath: string } | null>
}
}
declare global {
interface Window {
electronAPI: ElectronAPI
}
}