SPB Git

spb/ai-atlas

Public
4.0 KB · 59 lines python
1import pytest23from aiatlas.connectors.labs.mistral import DOCS, NEWS_RSS, MistralConnector4from aiatlas.sdk.facts import Target5from tests.conftest import claims_of, entity_names, extract_from_fixture, fixture_path678@pytest.fixture9def connector() -> MistralConnector:10    return MistralConnector()111213async def test_models_overview(connector):14    facts = await extract_from_fixture(connector, Target(url=f"{DOCS}/models", doc_type="model_docs", key="models"), fixture_path("mistral", "models.html"))15    models = entity_names(facts, "model")16    assert len(models) >= 5517    medium = claims_of(facts, "Mistral Medium 3.5")18    assert medium["license"] == "Modified MIT" and medium["openness"] == "open-weights" and medium["version"] == "26.04"19    assert medium["official_url"] == f"{DOCS}/models/mistral-medium-3-5-26-04"20    assert claims_of(facts, "Mistral Small 4")["license"] == "Apache 2.0"21    # deprecation table: versioned API ids, dates (US format), status vs. today, alternative22    m31 = next(e for e in facts.entities if e.name == "Mistral Medium 3.1")23    assert m31.identifiers == {"mistral_docs_slug": "mistral-medium-3-1-25-08", "mistral_model_id": "mistral-medium-2508"}24    c31 = claims_of(facts, "Mistral Medium 3.1")25    assert c31["api_model_id"] == "mistral-medium-2508" and c31["deprecation_date"] == "2026-05-22" and c31["retirement_date"] == "2026-08-31"26    assert c31["status"] == "retired"27    assert ("Mistral Medium 3.1", "Mistral Medium 3.5") in {(r.subject.name, r.object.name) for r in facts.relations if r.predicate == "superseded_by"}28    # third-party model hosted on La Plateforme keeps its own developer29    glm = next(e for e in facts.entities if e.name == "Z.ai GLM 5.2")30    assert glm.organization is not None and glm.organization.slug_hint == "zhipu"31    assert any(r.predicate == "available_through" and r.subject is glm for r in facts.relations)32    pages = [t for t in facts.targets if t.doc_type == "model_page"]33    assert len(pages) == 20 and pages[0].url == f"{DOCS}/models/mistral-medium-3-5-26-04"34    # a reused display name never folds distinct versions together35    codestral = sorted(e.name for e in facts.entities if e.entity_type == "model" and e.name.startswith("Codestral") and "Embed" not in e.name and "Mamba" not in e.name)36    assert codestral == ["Codestral", "Codestral 24.05", "Codestral 25.01"]37    assert claims_of(facts, "Codestral 25.01")["api_model_id"] == "codestral-2501"38    assert len({(e.name.lower()) for e in facts.entities if e.entity_type == "model"}) == len([e for e in facts.entities if e.entity_type == "model"])394041async def test_model_page(connector):42    target = Target(url=f"{DOCS}/models/mistral-medium-3-5-26-04", doc_type="model_page", key="model:mistral-medium-3-5-26-04", meta={"slug": "mistral-medium-3-5-26-04"})43    facts = await extract_from_fixture(connector, target, fixture_path("mistral", "model-mistral-medium-3-5.html"))44    m = claims_of(facts, "Mistral Medium 3.5")45    assert m["context_length"] == 256_000 and m["license"] == "Modified MIT" and m["openness"] == "open-weights"46    assert m["api_alias"] == "mistral-medium-latest" and m["tool_calling"] is True and m["structured_output"] is True47    assert len(facts.prices) == 148    p = facts.prices[0]49    assert (p.input_per_mtok, p.output_per_mtok) == (1.5, 7.5) and p.features["eur_input_per_mtok"] == 1.25 and p.provider.identifiers["registry_provider"] == "mistral"50    ref = next(e for e in facts.entities if e.entity_type == "model")51    assert ref.identifiers == {"mistral_docs_slug": "mistral-medium-3-5-26-04"}525354async def test_news_feed(connector):55    facts = await extract_from_fixture(connector, Target(url=NEWS_RSS, doc_type="feed", key="news"), fixture_path("mistral", "news.rss.xml"), content_type="application/rss+xml")56    assert len(facts.events) == 8657    assert facts.events[0].summary.startswith("Mistral AI: Cloudera and Mistral Partner") and facts.events[0].effective_at.date().isoformat() == "2026-09-10"58    assert any(e.category == "release" and "Mistral Small 4" in e.summary for e in facts.events)59
Files · 988708f87b6de48ea615b846f7dee321b888038c
Menu

Theme