diff --git a/app/Tests/Models/Corpus/CapabilitySnapshot.txt b/app/Tests/Models/Corpus/CapabilitySnapshot.txt
index 193254b5..9b36815a 100644
--- a/app/Tests/Models/Corpus/CapabilitySnapshot.txt
+++ b/app/Tests/Models/Corpus/CapabilitySnapshot.txt
@@ -20,10 +20,7 @@
# what each of them must answer, but it states capabilities alone.
#
ALIBABA_CLOUD | qvq-max | ALWAYS_REASONING, CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
-ALIBABA_CLOUD | qwen-max-latest | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
ALIBABA_CLOUD | qwen-mt-plus | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
-ALIBABA_CLOUD | qwen-plus-latest | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
-ALIBABA_CLOUD | qwen-turbo-latest | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
ALIBABA_CLOUD | qwen-vl-max | CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
ALIBABA_CLOUD | qwen2.5-14b-instruct-1m | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
ALIBABA_CLOUD | qwen2.5-72b-instruct | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
diff --git a/app/Tests/Models/Corpus/CorpusOrigin.cs b/app/Tests/Models/Corpus/CorpusOrigin.cs
index 7d72fdb0..6544b0d4 100644
--- a/app/Tests/Models/Corpus/CorpusOrigin.cs
+++ b/app/Tests/Models/Corpus/CorpusOrigin.cs
@@ -17,8 +17,8 @@ public enum CorpusOrigin
NAMED_BY_A_RULE,
///
- /// The app carries this model in a built-in list, such as the one Alibaba Cloud models are
- /// picked from when the provider serves no catalog.
+ /// The app carries this model in a built-in list, such as the aliases Anthropic answers to but
+ /// does not list, or the transcription model GWDG serves without naming it.
///
BUILT_INTO_THE_APP,
diff --git a/app/Tests/Models/Corpus/ModelCorpus.cs b/app/Tests/Models/Corpus/ModelCorpus.cs
index 9be1e9c9..1cfcdbf5 100644
--- a/app/Tests/Models/Corpus/ModelCorpus.cs
+++ b/app/Tests/Models/Corpus/ModelCorpus.cs
@@ -134,23 +134,28 @@ public static class ModelCorpus
];
///
- /// Alibaba Cloud. Everything below the two dozen models the app carries is one Qwen tier per
- /// entry, because each tier answers differently about thinking and vision.
+ /// Alibaba Cloud. One Qwen tier per entry, because each tier answers differently about thinking
+ /// and vision.
///
+ ///
+ /// The app carried two dozen of these names in a list of its own until the catalog became the
+ /// only source. Three went with it and are not replaced: qwen-max-latest, qwen-plus-latest and
+ /// qwen-turbo-latest are a naming convention Alibaba has left behind -- its rolling names carry
+ /// no suffix now, and the tier once called turbo is called flash. The ones which stayed are
+ /// here for the other reason: no rule spells any of them out, so they say what becomes of a
+ /// name the rules were not written for.
+ ///
private static readonly CorpusEntry[] ALIBABA_ENTRIES =
[
- new(ALIBABA_CLOUD, "qwq-plus", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen-max-latest", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen-plus-latest", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen-turbo-latest", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qvq-max", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen-vl-max", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen-mt-plus", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen2.5-72b-instruct", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen2.5-14b-instruct-1m", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen2.5-omni-7b", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "qwen2.5-vl-72b-instruct", BUILT_INTO_THE_APP),
- new(ALIBABA_CLOUD, "text-embedding-v3", BUILT_INTO_THE_APP),
+ new(ALIBABA_CLOUD, "qwq-plus", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "qvq-max", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "qwen-vl-max", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "qwen-mt-plus", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "qwen2.5-72b-instruct", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "qwen2.5-14b-instruct-1m", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "qwen2.5-omni-7b", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "qwen2.5-vl-72b-instruct", NAMED_BY_NO_RULE),
+ new(ALIBABA_CLOUD, "text-embedding-v3", NAMED_BY_NO_RULE),
new(ALIBABA_CLOUD, "qwen3-omni-flash", NAMED_BY_A_RULE),
new(ALIBABA_CLOUD, "qwen3-vl-plus", NAMED_BY_A_RULE),
new(ALIBABA_CLOUD, "qwen3-235b-a22b", NAMED_BY_A_RULE),
diff --git a/app/Tests/Models/Corpus/ModelKindCorpus.cs b/app/Tests/Models/Corpus/ModelKindCorpus.cs
index 309ad007..cdcac754 100644
--- a/app/Tests/Models/Corpus/ModelKindCorpus.cs
+++ b/app/Tests/Models/Corpus/ModelKindCorpus.cs
@@ -261,7 +261,7 @@ public static class ModelKindCorpus
// last one translates rather than converses, and it does so through the chat completion
// API like the others, so this is where it belongs.
//
- new(ALIBABA_CLOUD, "qwen-max-latest", CHAT),
+ new(ALIBABA_CLOUD, "qwen3.8-max", CHAT),
new(ALIBABA_CLOUD, "qwq-plus", CHAT),
new(ALIBABA_CLOUD, "qvq-max", CHAT),
new(ALIBABA_CLOUD, "qwen-mt-turbo", CHAT),