Skip to main content

scitadel_core/models/
assessment.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4use super::{AssessmentId, PaperId, QuestionId};
5
6/// Paper x research question -> relevance score + provenance.
7///
8/// Multiple assessments per paper (different questions, models, human override).
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10pub struct Assessment {
11    pub id: AssessmentId,
12    pub paper_id: PaperId,
13    pub question_id: QuestionId,
14    pub score: f64,
15    #[serde(default)]
16    pub reasoning: String,
17    pub model: Option<String>,
18    pub prompt: Option<String>,
19    pub temperature: Option<f64>,
20    #[serde(default)]
21    pub assessor: String,
22    pub created_at: DateTime<Utc>,
23}
24
25impl Assessment {
26    #[must_use]
27    pub fn new(paper_id: PaperId, question_id: QuestionId, score: f64) -> Self {
28        Self {
29            id: AssessmentId::new(),
30            paper_id,
31            question_id,
32            score,
33            reasoning: String::new(),
34            model: None,
35            prompt: None,
36            temperature: None,
37            assessor: String::new(),
38            created_at: Utc::now(),
39        }
40    }
41}