model_config or ....annotate_cell_types() return contract.UnifiedLogger
console output is now disabled by default
(enable_console = FALSE). Use
configure_logger(console_output = TRUE) to enable console
logging.debug parameter +
LLMCELLTYPE_DEBUG_CACHE env var) into single
log_debug() approach; debug = TRUE temporarily
enables console + DEBUG level via on.exit()warning()
calls now paired with log_warn() for file-based audit; LLM
consensus decisions logged to audit trailQwenProcessor now
correctly exported; internal .qwen_endpoint_cache no longer
exposed in public API@export misplacement in
qwen_processor.R that exported internal state instead of
the processor classtissue_name parameter in real API test
callsprint() bypassing logging system in
compare_model_predictions.Rcompare_model_predictions.Rmessage() format inconsistencies across consensus
and comparison functionsmessage() + log_info() pairing
across entire codebaseTaskState.TESTING from state machine (web
component)0:(n-1) IDs)claude-sonnet-4-5-20250929) - Newest Sonnet model, same
price as earlier Sonnetsclaude-opus-4-1-20250805) - Updated Opus modelclaude-sonnet-4-20250514,
claude-opus-4-20250514)claude-sonnet-4.5, claude-opus-4.1)anthropic/claude-sonnet-4.5 and
anthropic/claude-opus-4.120250929) remain stable
and do not change over timeinstall.packages("mLLMCelltype")clusters_to_analyze:
Allows users to specify exactly which clusters to analyze
force_rerun: Forces
fresh analysis of controversial clusters
clusters_to_analyze for
targeted workflowsnormalize_annotation(): Handles annotation variations
(e.g., “T cells” vs “T lymphocytes”)calculate_simple_consensus(): Fast local consensus
calculation with CP and entropy metricsBaseAPIProcessor with consistent
make_api_call() and extract_response_content()
methodsapi_logs/ subdirectories within each sessionEnhanced directory structure:
logs/
├── mllm_YYYYMMDD_HHMMSS.log # Main session log
├── YYYYMMDD_HHMMSS/ # Session directory
│ ├── cluster_X_discussion.md # Discussion logs (fixed format)
│ └── api_logs/ # Complete API call logs (NEW)
│ ├── provider_model_timestamp.json
│ └── provider_model_timestamp.mdDiscussionLogger class
and scattered write_log callsUnifiedLogger R6 class with
structured JSON output, multi-level logging, and performance
monitoringconfigure_logger(),
get_logger(), log_info(),
log_warn(), log_error(),
log_debug()logger
parameters from interactive_consensus_annotation() and
related functionsDiscussionLogger class (still exported for backward
compatibility but not recommended)gemini-2.0-flash-lite to supported models
listgemini-2.0-flash or gemini-2.0-flash-lite for
better performance and continued supportgemini-1.5-pro and
gemini-1.5-flash will continue to work until September 24,
2025as.logical(from) error:
Resolved critical error that occurred when processing large numbers of
clusters (60+ clusters), which was caused by non-character data being
passed to strsplit() functionstryCatch() blocks around all
strsplit() operations in API processing functionsprocess_openrouter.R,
process_anthropic.R, process_openai.R,
process_deepseek.R, process_qwen.R,
process_stepfun.R, process_minimax.R,
process_zhipu.R, process_gemini.R,
process_grok.R) now include improved error handlingunlist() operations to filter out NULL values and handle
errors gracefullycheck_consensus.R to handle edge cases with malformed
responsesprompt_templates.Rconsensus_annotation.R to
ensure cluster indices start from 0