mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-06 07:49:40 +00:00
Port the Mistral open weights and the GLM family
This commit is contained in:
9 files changed
+215
-7
No files matched your search
@@ -229,7 +229,6 @@ SELF_HOSTED | minimax-m2:latest | ALWAYS_REASONING, CHAT_COMPLETION_API, FUNCTIO
|
||||
SELF_HOSTED | minimax-text-01 | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT
|
||||
SELF_HOSTED | ministral-8b-instruct-2410 | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT
|
||||
SELF_HOSTED | mistral-nemo:12b | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT
|
||||
SELF_HOSTED | mistral-small-3.1-24b-instruct | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, OPTIONAL_REASONING, TEXT_INPUT, TEXT_OUTPUT
|
||||
SELF_HOSTED | mistral-small3.2:24b | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT
|
||||
SELF_HOSTED | muse-glimmer-30b | ALWAYS_REASONING, CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT
|
||||
SELF_HOSTED | nemotron-3-49b | CHAT_COMPLETION_API, FUNCTION_CALLING, REASONING_BY_DEFAULT, TEXT_INPUT, TEXT_OUTPUT
|
||||
|
||||
@@ -122,6 +122,12 @@ public static class ExpectedChanges
|
||||
Reason: "Claude 3.5 Sonnet loses its image input when it arrives under the Bedrock spelling: the vendor sits behind a dot rather than a slash, so neither the gateway detection nor the reseller check finds it.",
|
||||
Source: "The same model as \"anthropic/claude-sonnet-4-0\" and the other Claude entries of this corpus, which all report image input."),
|
||||
|
||||
new(SELF_HOSTED, "mistral-small-3.1-24b-instruct",
|
||||
AnswerToday: [TEXT_INPUT, MULTIPLE_IMAGE_INPUT, TEXT_OUTPUT, OPTIONAL_REASONING, FUNCTION_CALLING, CHAT_COMPLETION_API],
|
||||
AnswerWanted: [TEXT_INPUT, MULTIPLE_IMAGE_INPUT, TEXT_OUTPUT, FUNCTION_CALLING, CHAT_COMPLETION_API],
|
||||
Reason: "Mistral Small 3.1 is told that it thinks, and the very same model is told the opposite when it arrives through Mistral's own API. The rules for the open weights answer for the whole 3 and 4 range in one line, and reasoning arrived with 4.",
|
||||
Source: "The corpus entry \"mistral-small-2503\" is this model at Mistral and reports no reasoning; Mistral names Magistral as the thinking model of that generation."),
|
||||
|
||||
new(HELMHOLTZ, "01 - GPT-5.5 - great overall performance",
|
||||
AnswerToday: [TEXT_INPUT, MULTIPLE_IMAGE_INPUT, TEXT_OUTPUT, FUNCTION_CALLING, WEB_SEARCH, CHAT_COMPLETION_API],
|
||||
AnswerWanted: [TEXT_INPUT, MULTIPLE_IMAGE_INPUT, TEXT_OUTPUT, FUNCTION_CALLING, REASONING_BY_DEFAULT, WEB_SEARCH, CHAT_COMPLETION_API],
|
||||
|
||||
@@ -56,21 +56,20 @@ public sealed class PortingDifferenceTests
|
||||
///
|
||||
/// Only vendors, never UNKNOWN: that is what a model nobody wrote a rule for answers with, and
|
||||
/// putting it here would compare everything against everything.
|
||||
///
|
||||
/// Mistral is the one ported vendor still missing. Its cloud writes a release date into every
|
||||
/// name and its rules are built on that, while the open weights are called
|
||||
/// "mistral-small-3.1-24b-instruct" and carry none -- so those names are still to be ported.
|
||||
/// </remarks>
|
||||
private static readonly IReadOnlyList<ModelVendor> VENDORS_ALREADY_PORTED =
|
||||
[
|
||||
ModelVendor.OPEN_AI,
|
||||
ModelVendor.ANTHROPIC,
|
||||
ModelVendor.GOOGLE,
|
||||
ModelVendor.MISTRAL_AI,
|
||||
ModelVendor.ALIBABA,
|
||||
ModelVendor.DEEP_SEEK,
|
||||
ModelVendor.PERPLEXITY,
|
||||
ModelVendor.XAI,
|
||||
ModelVendor.META,
|
||||
ModelVendor.Z_AI,
|
||||
ModelVendor.MICROSOFT,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
using AIStudio.Models.Registry;
|
||||
using AIStudio.Provider;
|
||||
|
||||
namespace AIStudio.Tests.Models.ZAI;
|
||||
|
||||
/// <summary>
|
||||
/// Checks how a GLM name says that the model looks at pictures.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Z AI marks its vision models by gluing a "v" to the version number: glm-4v, glm-4.1v, glm-4.5v.
|
||||
/// That is not a name part, so no pattern can ask about it and the family works it out of the name
|
||||
/// instead -- the second of the two places in the rebuilt rules where a capability is calculated.
|
||||
///
|
||||
/// These need tests of their own because the corpus cannot tell the calculation apart from a
|
||||
/// careless one. Looking for a bare "v" anywhere answers every corpus name the same way, and is
|
||||
/// still wrong: a quantized build carries one in "nvfp4", and so do the names of several inference
|
||||
/// providers. The corpus happens to hold that name only for a generation which reads images anyway.
|
||||
/// </remarks>
|
||||
[TestFixture]
|
||||
public sealed class GlmFamilyTests
|
||||
{
|
||||
[TestCase("glm-4.5v", TestName = "The vision marker sits behind the version")]
|
||||
[TestCase("glm-4v", TestName = "A version without a dot carries the marker just the same")]
|
||||
[TestCase("glm-4.1v-9b", TestName = "A size may follow the marker")]
|
||||
public void AGlmWhoseVersionCarriesTheMarkerLooksAtPictures(string modelId)
|
||||
{
|
||||
var profile = ModelRegistry.Shared.Profile(LLMProviders.SELF_HOSTED, modelId);
|
||||
|
||||
Assert.That(profile.Has(Capability.MULTIPLE_IMAGE_INPUT), Is.True);
|
||||
}
|
||||
|
||||
[TestCase("glm-4-9b-chat-nvfp4", TestName = "A quantized build is not a vision model")]
|
||||
[TestCase("glm-4-9b-chat", TestName = "The plain 4 line reads text only")]
|
||||
[TestCase("glm-4.6-latest", TestName = "A rolling tag says nothing about pictures")]
|
||||
public void AGlmCarryingAVSomewhereElseDoesNot(string modelId)
|
||||
{
|
||||
var profile = ModelRegistry.Shared.Profile(LLMProviders.SELF_HOSTED, modelId);
|
||||
|
||||
Assert.That(profile.Has(Capability.MULTIPLE_IMAGE_INPUT), Is.False);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user