Source code for mtf.config
"""Configuration dataclass for MTF."""
from dataclasses import dataclass, field
[docs]
@dataclass
class MTFConfig:
"""Top-level configuration for an MTF run."""
# Agent counts
n_literature: int = 2
citation_verification: bool = True # require LiteratureAgent to re-verify each citation
citation_verification_max: int = 10 # max citations to re-verify per agent
n_fitting: int = 2
n_qualitative: int = 2
n_reviewer: int = 2
reviewer_verification_passes: int = 1 # >1 enables structural "check again" loop
reviewer_models: list[str] = field(default_factory=list) # cycles models for diversity
# Model selection
literature_model: str = "claude-haiku-4-5-20251001"
fitting_model: str = "claude-sonnet-4-6"
reviewer_model: str = "claude-sonnet-4-6"
debate_model: str = "claude-sonnet-4-6"
image_digest_model: str = "claude-sonnet-4-6"
# Debate loop controls
max_debate_rounds: int = 3
# Fitting
fitting_enabled: bool = True
fitting_scope: str = "per_hypothesis" # "per_hypothesis" | "all"
fitting_semaphore_limit: int = 6
# Toolkit
toolkit_items: dict[str, object] = field(default_factory=dict)
# GPD MCP integration
enable_gpd_mcp: bool = True
physics_domains: list[str] = field(
default_factory=lambda: ["condensed_matter"],
) # one or more domains; passed to get_checklist / subfield_defaults
gpd_servers: list[str] = field(
default_factory=lambda: ["verification", "errors", "protocols", "conventions", "patterns", "skills"]
)
# Auto domain classification (Addition 1)
auto_detect_domains: bool = False
gpd_domain_detection_max_domains: int = 3
# Literature plausibility screen (Addition 5)
literature_plausibility_screen: bool = True
auto_reject_physics_failures: bool = False
# Fitting convention check (Addition 3)
fitting_convention_check: bool = True
fitting_max_convention_retries: int = 1
fitting_result_integrity_check: bool = True # detect hardcoded/fabricated fit results
# Proposal agent
n_proposal: int = 2
proposal_model: str = "claude-sonnet-4-6"
followup_model: str = "claude-sonnet-4-6"
# PDF enhanced extraction
pdf_enhanced_extraction: bool = True
pdf_figure_extraction_max_tokens: int = 8192
pdf_min_size_kb_for_enhanced: int = 200