What's Changed
New Features
- feat: implement release-branch workflow by @ajbozarth in #1076
- feat: add health check endpoint to CLI serve by @markstur in #1100
- feat: add stopping sequence to model options by @psschwei in #1112
- fix: change hallucination detection tests to accept differences in explanation by @jakelorocco in #1059
- refactor: use plural logs to match otel by @AngeloDanducci in #1160
- feat: consolidate to llguidance from xgrammar by @jakelorocco in #1077
- feat: sandbox runtime and capability policy by @AngeloDanducci in #1171
- feat: groundedness requirement by @akihikokuroda in #773
- feat: python requirements by @akihikokuroda in #1128
- feat(intrinsics): introduce Adapter/Identity/IOContract/WeightsBinding scaffolding (Epic #929 Phase 0) by @planetf1 in #1158
- refactor: set do_sample=True if a seed is set on HF backends by @psschwei in #1149
- feat: support concurrency in base sampling strategy by @jakelorocco in #1175
- feat: python code interpreter improvements by @AngeloDanducci in #1190
- feat(cli): Multimodal serve images by @markstur in #1184
- feat: add matplotlib requirements by @akihikokuroda in #1208
- refactor(telemetry)!: move backend tracing onto plugin/hook pattern by @ajbozarth in #1181
- feat: dispatch release event to mellea-contribs by @avinash2692 in #1179
- feat(telemetry): wire metrics plugins to generation_batch_* hooks by @ajbozarth in #1254
- refactor(telemetry): align metrics/pricing init with tracing pattern by @ajbozarth in #1252
- feat: re-export serve types from public mellea.* namespace by @markstur in #1243
- feat: add matplotlib requirement factory by @akihikokuroda in #1227
- refactor(adapters): decouple KNOWN_CAPABILITIES from catalog entry names (#1186) by @planetf1 in #1266
- refactor(backends): move generate_from_raw hook firing into Backend base class by @ajbozarth in #1264
- feat: create sampling preset for python code generation by @akihikokuroda in #1265
- feat(sampling): re-export hidden strategies and fix structured-output docs by @planetf1 in #1281
- feat: add debug plugin collections by @akihikokuroda in #1251
- feat: add shell tool by @akihikokuroda in #1107
- feat: allow images as urls for supported backends by @AngeloDanducci in #1260
- feat(stdlib): public error and generate_log surface on ModelOutputThunk by @ajbozarth in #1307
- refactor(telemetry): migrate application spans to plugin hooks by @ajbozarth in #1289
- feat(intrinsics): shim old adapters onto Adapter dataclass; call_intrinsic rewritten (Epic #929 Phase 1) by @planetf1 in #1269
- feat: model aware sliding window context by @AngeloDanducci in #1270
- refactor(formatters): remove unused Granite32/33 processor classes by @planetf1 in #1337
- refactor(core): consolidate backend raw responses onto mot.raw namespace by @ajbozarth in #1329
- feat: standardize logits in mot by @AngeloDanducci in #1261
- refactor(intrinsics): migrate rag.py to new Adapter types (Epic #929 Phase 1 Wave 3) by @planetf1 in #1321
- refactor(core): promote ModelOutputThunk.thinking and deprecate _thin… by @exequeryphil in #1315
- refactor(core): split MOT internal state into _call / _gen sub-objects by @ajbozarth in #1350
- refactor(intrinsics): guardian.py whole-file migration + documents= kw-only discovery (#1139) by @planetf1 in #1323
- feat: first pass at mot as a separate class by @AngeloDanducci in #1348
- refactor(intrinsics): requirement_check_to_bool raises on schema mismatch (Epic #929 Phase 1) by @planetf1 in #1320
- feat: first pass at guardian io contract subclasses by @AngeloDanducci in #1357
- feat: context compaction strategies for the react loop by @yelkurdi in #996
- feat: add safe repr implementations for watsonx and litellm backends by @cptnm3 in #1359
- refactor(telemetry): migrate stream_with_chunking telemetry to plugin hooks by @ajbozarth in #1361
Bug Fixes
- fix: guard hf dep for m alora command by @psschwei in #1102
- fix: prevent double-wrapping of image data URIs in OpenAI message conversion by @markstur in #1091
- fix: add ollama async timeout by @psschwei in #1101
- fix: preserve discriminated-union schema in tool conversion by @planetf1 in #1104
- fix(streaming): replace sleep gate with _started event for cancel tests by @planetf1 in #1146
- fix: propagate generate_from_raw exceptions in OllamaModelBackend by @planetf1 in #1163
- fix: intrinsic tests and add some safeguards for future adapters changes by @jakelorocco in #1078
- fix(backends): populate mot._thinking from vLLM 'reasoning' wire key in LiteLLMBackend by @planetf1 in #1169
- fix: query-clarification-positive test_rag by @jakelorocco in #1178
- fix(ollama): soft-fail on empty response in generate_from_raw by @planetf1 in #1161
- fix(intrinsics): pin catalogue entries to HF revision SHAs + deduplicate requirement_check (#1135) by @planetf1 in #1157
- fix(hf): filter model_options for apply_chat_template via Jinja AST allowlist by @planetf1 in #1168
- fix(telemetry): break helpers->core import cycle so metrics plugins register by @ajbozarth in #1180
- fix: skip DCO check during git merge by @ajbozarth in #1189
- fix(retrievers): propagate non-404 HTTP errors from embedding download loop by @planetf1 in #1200
- fix: remove drift detection from intrinsic tests and pin tests to SHAs by @jakelorocco in #1196
- fix(litellm): pass api_base and set enable_thinking for bool THINKING by @planetf1 in #1207
- fix(streaming): use public cancellation property by @wondr-wclabs in #1220
- fix: Bumps to transformers==5.0.0 by @nrfulton in #418
- fix(backends): route ModelOption.THINKING=bool to chat_template_kwargs for vLLM by @planetf1 in #1204
- fix(hf): pass return_dict=True to apply_chat_template by @ajbozarth in #1253
- fix: demote format= warning to INFO and fix grammar by @RahulJoshi-rx in #1278
- fix: address default execution tier security posture by @AngeloDanducci in #1271
- fix(sampling): migrate budget forcing to mot.generation.usage; drop _meta["usage"] writes by @ajbozarth in #1288
- fix: update tool examples to use melleatool wrapper by @AngeloDanducci in #1297
- fix: mark xfail test_groundedness_e2e_string_documents by @akihikokuroda in #1205
- fix: update pillow version to prevent deprecation warning by @AngeloDanducci in #1287
- fix(tracing+ollama): split streaming span test into fast mock + slow e2e; add 300s default timeout by @planetf1 in #1302
- fix: test model_ids catalog and improve missing-model errors by @AngeloDanducci in #1299
- fix: pick best device (CUDA → MPS → CPU) for LoRA model loading by @planetf1 in #1303
- fix: improve repair instruction by @akihikokuroda in #1309
- fix: type assertion and richdocument docstrings by @AngeloDanducci in #1311
- fix: convert remaining rst docstrings by @AngeloDanducci in #1244
- fix: add request timeouts and mask API key in repr by @planetf1 in #1262
- fix: inter-chunk stream timeout and download part guard (RFC) by @planetf1 in #1236
- fix(intrinsics): restore aLoRA offsets and fix groundedness parser by @planetf1 in #1292
- fix(intrinsics): deprecate check_context_relevance — Granite 4.0 only adapter by @planetf1 in #1339
- fix: contribution guide for backticks in docstring by @jakelorocco in #1326
- fix: use IAM roles for bedrock access by @nrfulton in #578
- fix: generate_only kwargs for huggingface by @jakelorocco in #1325
- fix: add Python code extraction from tool_calls in PythonCodeExtraction validator by @akihikokuroda in #1353
- fix: plugin scope to handle list parameters by @jakelorocco in #1355
- fix: improve repair feedback for LLM-as-a-Judge validations by @akihikokuroda in #1248
- fix: get tool_call info from json schema by @akihikokuroda in #1360
- fix: fix jinja2 bare environment by @AngeloDanducci in #1363
- fix(test): enable openai intrinsic e2e tests in nightlies by @avinash2692 in #1341
- fix: canonicalize adapter io config path by @AngeloDanducci in #1366
- fix(adapters): correct typo from IntriniscsCatalogEntry to IntrinsicsCatalogEntry by @cptnm3 in #1370
- fix: message role not validated at runtime by @AngeloDanducci in #1371
- fix: enforce https in webhook urls by @AngeloDanducci in #1362
- fix: add chmod and umask guard to interpreter by @AngeloDanducci in #1372
- fix: host validation for vllm server-detection request by @AngeloDanducci in #1375
- fix(ci): mint release-workflow writes with the mellea-auto-release App token by @ajbozarth in #1376
- fix: repair release/v0.7 full-suite test failures (telemetry plugin registration + broken aLora example) by @ajbozarth in #1378
Documentation
- docs: fixing docs contributor guide by @psschwei in #1103
- docs: add redirect callout from MCP server page to MCP tools by @ajbozarth in #1110
- docs(api): normalize source docstring backticks by @planetf1 in #1155
- docs: migrate Guardian documentation from deprecated GuardianCheck to Intrinsics API by @planetf1 in #935
- docs: consolidate test guidance into test/README.md by @planetf1 in #1167
- docs: clarify uv add requires an existing uv project by @SAY-5 in #1152
- docs: migrate from Mintlify to Docusaurus 3 by @planetf1 in #1174
- docs(docusaurus): suppress unreleased banner until first snapshot exists by @planetf1 in #1237
- docs(docusaurus): remove author from Last Updated footer by @Ayman-ing in #1257
- docs: update alora examples readme by @AngeloDanducci in #1259
- docs: update readme files in docs/examples by @akihikokuroda in #1228
- docs: clarify sampling raises by @skyswordw in #1214
- docs(docusaurus): move version dropdown to left navbar; shorten label to 'main' by @planetf1 in #1238
- docs: clarify MelleaSession vs functional.act() layering; add start_session() pin example by @planetf1 in #1283
- docs: migrate examples off deprecated interpreters to python tool by @AngeloDanducci in #1324
- docs: clarify format= value contract and model_validate_json pattern by @planetf1 in #1333
- docs: update docs/examples/tools/README.md by @akihikokuroda in #1328
- docs: fix stale 'main (unreleased)' reference in CONTRIBUTING_DOCS.md by @planetf1 in #1335
- docs: document PR review states by @ajbozarth in #1306
- docs: add python / matplotlib requirement example by @akihikokuroda in #1293
- docs(core): document _generate_from_context uncomputed-thunk contract by @ajbozarth in #1354
- docs: update contributing and agent guidelines by @AngeloDanducci in #1364
Other Changes
- chore: add dco to contributing by @psschwei in #1129
- ci: fix blocked dco check in merge queue by @psschwei in #1133
- chore: add local DCO check via pre-commit commit-msg hook by @ajbozarth in #1131
- test: add hook ordering regression coverage by @tatakaisun in #1113
- chore: disable intrinsic io.yaml overrides by @psschwei in #1156
- test(backends): fix vision Ollama tests failing in CI with 400 model does not support vision (#1185) by @planetf1 in #1188
- test(formatters): skip combo fixtures gracefully when Hub returns 429 by @planetf1 in #1195
- test: centralise HF Hub skip guard to boost CI resiliency against 429 errors by @planetf1 in #1199
- chore: add HF_TOKEN for authentication by @jakelorocco in #1202
- chore(backends): drop deprecated torch_dtype argument in LocalHFBackend by @planetf1 in #1231
- chore: add PEP 484 return-type annotations to mellea.stdlib public me… by @yehorcallmedai-maker in #1263
- ci(quality): retry ollama model pull on transient network failure by @planetf1 in #1234
- chore(terminology): adopt agreed Granite Switch / Mellea glossary (#1192) by @planetf1 in #1256
- chore(terminology): sweep docs/examples and Python docstrings (#1192 follow-up) by @planetf1 in #1322
- test: auto-retry ollama tests on transient ReadTimeout by @ajbozarth in #1369
New Contributors
- @tatakaisun made their first contribution in #1113
- @wondr-wclabs made their first contribution in #1220
- @Ayman-ing made their first contribution in #1257
- @skyswordw made their first contribution in #1214
- @yehorcallmedai-maker made their first contribution in #1263
- @RahulJoshi-rx made their first contribution in #1278
- @exequeryphil made their first contribution in #1315
- @cptnm3 made their first contribution in #1359
Full Changelog: v0.6.0...v0.7.0