Classifies course objectives, session objectives and – where given –
assessment items in one run, generating the same ids as
map_course_to_sessions() and map_sessions_to_assessments() so that the
result can be handed straight to check_level_consistency() alongside either
mapping. Call it with the same inputs and course_id, or the ids will not
line up.
Usage
classify_objectives(
course_objectives,
session_objectives,
course_id,
llmconfig,
assessments = NULL,
taxonomy = "blooms_revised",
repeats = 1L,
rationale = TRUE,
verbosity = 1L,
...
)Arguments
- course_objectives
Character: Course objectives.
- session_objectives
List of character vectors: Session objectives, named by session.
- course_id
Character: Course identifier, used to build stable ids.
- llmconfig
rtemis.llm::LLMConfig: Model configuration.- assessments
List of character vectors: Assessment items, named by assessment. Optional. Supplied here rather than classified separately so that both consistency checks read one table and no assessment can be scored against a taxonomy the objectives were not.
- taxonomy
Character or
Taxonomy: Classification scheme. Seelist_taxonomies().- repeats
Integer
[1, Inf): Independent raters per item. Bloom coding disagrees between human raters at the adjacent-level boundary, so a single rater's level is a point estimate with no visible spread;repeats > 1fillsconfidenceand keeps every rating inratings.- rationale
Logical: Whether to ask for a one-sentence justification.
- verbosity
Integer
[0, Inf): Verbosity level.- ...
Additional per-call arguments forwarded to
rtemis.llm::generate(), e.g.temperature,seed.
Value
Classification object, with one row per course objective, one per
session objective, and one per assessment item where given.
What the model is asked
Each objective is classified in isolation, against the level ladder and its
definitions. Two conventions are stated in the prompt because they are where
Bloom coding otherwise drifts: the level reflects the cognitive work the
objective requires rather than the verb it happens to use, and an objective
naming several processes takes the highest one it genuinely requires. The
verb the model keyed on is returned in verb, so a level that looks wrong
can be traced to the word that produced it.
Examples
if (FALSE) { # \dontrun{
obj <- read_objectives("objectives.yaml")
cfg <- config_Ollama("granite4.2:8b", temperature = 0, think = FALSE)
b <- classify_objectives(
obj[["objectives"]],
obj[["sessions"]],
course_id = "datasci213",
llmconfig = cfg
)
m <- map_course_to_sessions(
obj[["objectives"]],
obj[["sessions"]],
course_id = "datasci213",
llmconfig = cfg
)
check_level_consistency(m, b)
} # }