All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Type safety: resolve all mypy errors across 70 source files
- Remove invalid
# type: ignore[Any]comments (Anyis not a valid mypy error code) - Replace
any/callablebuiltins with properAny/Callabletype annotations - Add
@overloadsignatures for tokenizer methods with union return types - Add explicit
Nonechecks to narrow union types for mypy
- Remove invalid
- Code quality: resolve all ruff lint issues
- Replace
assertwith explicitif+raise ValueError(S101 bandit rule) - Fix
Callableimport fromtypinginstead ofcollections.abc(UP035) - Fix module-level import not at top of file (E402)
- Fix dummy variable
_plot_diraccessed after prefix (RUF052)
- Replace
- Bug fixes discovered during type checking:
- Fix
run_noise_tunnel()call missing requiredbase_methodargument - Fix
DNAInference.__init__not storingself.config - Fix CLI config key mismatch (
training_args->finetune) - Fix
Mutagenesis.evaluate()return type (list[dict]->dict[str, Any]) - Fix
LoggingContext.__exit__crash whenoriginal_levelisNone
- Fix
- Ruff formatting: reformat 4 files after line-length changes
- MCP: Streamable HTTP transport support (client + server) — MCP Streamable HTTP migration (Phase 5)
- MCP:
transport="streamable-http"support inDNALLMMCPClientusingmcp.client.streamable_http.streamablehttp_client()(Phase 5) - MCP:
StreamableHTTPConfigconfiguration block withhost,port, andpathfields (Phase 5) - MCP: Streamable HTTP integration tests in
test_streamable_http_client.py(Phase 5) - MCP: Client SDK unit tests for
transport="streamable-http"initialization and connection (Phase 5)
- MCP:
DNALLMMCPClienttransport type expanded fromLiteral["sse", "stdio"]toLiteral["streamable-http", "sse", "stdio"](Phase 5) - MCP: Server docstrings and CLI help text now recommend
streamable-httpas the primary remote transport (Phase 5) - README: MCP Server section now shows
streamable-httpas the primary example with SSE noted as legacy (Phase 5) - Recommended remote transport changed from SSE to Streamable HTTP per MCP spec 2025-11-25
- SSE transport marked as legacy; still supported for backward compatibility
Version 0.5.0 is a major release that transforms DNALLM from a basic fine-tuning toolkit into a production-ready platform for DNA language model research. This release introduces five major capability areas:
- Quality Assurance Infrastructure (Phase 1) — Restored CI/CD, unified testing, and modern tooling
- Advanced Training Features (Phase 2) — Early stopping, hyperparameter search, QLoRA, and visualization
- MCP Server & Client SDK (Phase 3) — Full Model Context Protocol integration with 13 tools
- Dependency Modernization & UX (Phase 4) — Updated dependencies and Click-based CLI
- Fine-tuning: Early stopping callback in
DNATrainerwith configurablepatienceandthreshold - Fine-tuning: Optuna hyperparameter search via YAML-configurable search space with auto-inferred distributions
- Fine-tuning: Training visualization with loss curves and learning rate schedule plotting utilities
- Fine-tuning: QLoRA 4-bit quantization support via
bitsandbyteswith automatic fix for improperly quantized layers - Fine-tuning: Configurable gradient clipping integrated into
TrainingConfig
- MCP:
dna_mutagenesistool exposingMutagenesisclass with 5 mutation types - MCP:
dna_interprettool exposingDNAInterpretclass with 8 Captum attribution methods - MCP: Python client SDK (
DNALLMMCPClient) with dual sync/async API for all 13 server tools - MCP: Request timeout handling on all 13 tools with configurable
tool_timeout_seconds - MCP: Structured JSON/text dual-format logging for production observability
- CLI:
dnallm-mutagenesisstandalone command for in-silico mutation analysis - CLI:
dnallm-trainmigrated fromsys.argvto Click framework with typed options and help text - CLI:
dnallm-inferencemigrated fromsys.argvto Click framework with typed options and help text
- QA: CI test execution restored with unified pytest configuration
- QA: Shared fixtures centralized in
tests/conftest.py - QA: GPU/CUDA tests re-enabled in CI
- QA: Mamba tests restored
- QA: Pre-commit hooks with ruff and mypy
- QA: Dependabot config for pip and GitHub Actions
- CHANGELOG.md initialized
- Dependencies: numpy constraint relaxed to
>=1.26.0(supports 1.x and 2.x) - Dependencies: transformers upper bound removed (
>=4.49.0) - Dependencies: torch upper bound relaxed from
<=2.7to<2.12for RTX 5090 support - README: Installation instructions moved to prominent position near the top
- Architecture:
FocalLossmoved to module level for proper importability - Architecture:
.flake8removed, fully migrated to ruff for linting - Architecture: mypy ignore list pruned for stub-covered packages
- Type safety:
load_model_and_tokenizerreturn type changed fromtuple[Any, Any]totuple[PreTrainedModel, PreTrainedTokenizer]
.flake8configuration file
Last stable release before the 0.5.x development cycle. Provided core fine-tuning and inference capabilities for DNA language models with support for multiple model architectures (DNABERT2, Nucleotide Transformer, GPN, HyenaDNA, etc.).
- Core fine-tuning pipeline with
DNATrainersupporting classification, regression, and masked language modeling - Multi-model architecture support via
AutoModelintegration - Basic inference engine with batch processing
- Model zoo with 20+ pre-trained DNA language models
- Initial project structure and package layout
- Various stability improvements for model loading and tokenization