mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-09-27 02:33:38 +00:00
Recognize the models which hold a connection open instead of chatting
This commit is contained in:
parent
f7350bf86b
commit
987ccf527d
@ -19,7 +19,7 @@ public sealed class ImageGenerationModelsFamily : ModelFamily
|
|||||||
public override ModelVendor Vendor => ModelVendor.UNKNOWN;
|
public override ModelVendor Vendor => ModelVendor.UNKNOWN;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override ModelSource Source => new("https://huggingface.co/models?pipeline_tag=text-to-image", new DateOnly(2026, 9, 12), "Ported from the image generation markers of Provider/ModelKindExtensions.cs. Imagen and the Gemini image models state it in their own families as well, where the capabilities stand next to it.");
|
public override ModelSource Source => new("https://huggingface.co/models?pipeline_tag=text-to-image", new DateOnly(2026, 9, 12), "Ported from the image generation markers of Provider/ModelKindExtensions.cs. Imagen and the Gemini image models state it in their own families as well, where the capabilities stand next to it. Nano Banana came later, off Google's own catalog at https://generativelanguage.googleapis.com/v1beta/openai/models, read on 2026-09-19.");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Declare(ModelFamilyBuilder builder)
|
protected override void Declare(ModelFamilyBuilder builder)
|
||||||
@ -38,5 +38,9 @@ public sealed class ImageGenerationModelsFamily : ModelFamily
|
|||||||
|
|
||||||
// The other half of Grok Imagine, which the video rule steps aside for:
|
// The other half of Grok Imagine, which the video rule steps aside for:
|
||||||
builder.Modifier("grok-imagine").AsSegment().NotContains("video").Inherits();
|
builder.Modifier("grok-imagine").AsSegment().NotContains("video").Inherits();
|
||||||
|
|
||||||
|
// Google's codename for the image model it serves next to Gemini, and the one name in its
|
||||||
|
// catalog which says nothing about drawing: nano-banana-pro-preview.
|
||||||
|
builder.Modifier("nano-banana").AsSegment().Inherits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -23,7 +23,7 @@ public sealed class RealtimeModelsFamily : ModelFamily
|
|||||||
public override ModelVendor Vendor => ModelVendor.UNKNOWN;
|
public override ModelVendor Vendor => ModelVendor.UNKNOWN;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override ModelSource Source => new("https://developers.openai.com/api/docs/models/gpt-live-1", new DateOnly(2026, 9, 12), "Ported from the realtime marker of Provider/ModelKindExtensions.cs, where the same precedence was written as the order of two if statements. GPT-Live was added after it turned up in the chat list while testing.");
|
public override ModelSource Source => new("https://developers.openai.com/api/docs/models/gpt-live-1", new DateOnly(2026, 9, 12), "Ported from the realtime marker of Provider/ModelKindExtensions.cs, where the same precedence was written as the order of two if statements. The live rule was added after GPT-Live turned up in the chat list while testing, and widened when Google's catalog turned out to name its whole two-way line that way: https://ai.google.dev/gemini-api/docs/live");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Declare(ModelFamilyBuilder builder)
|
protected override void Declare(ModelFamilyBuilder builder)
|
||||||
@ -33,10 +33,15 @@ public sealed class RealtimeModelsFamily : ModelFamily
|
|||||||
.Kind(ModelKind.REALTIME);
|
.Kind(ModelKind.REALTIME);
|
||||||
|
|
||||||
//
|
//
|
||||||
// The line which dropped the word. GPT-Live listens and speaks at the same time and leaves
|
// The other word for the same connection. OpenAI's GPT-Live listens and speaks at once and
|
||||||
// the thinking to a text model behind it, so there is even less of a conversation in it than
|
// leaves the thinking to a text model behind it, and Google names its whole two-way line
|
||||||
// in the realtime models it succeeds -- and nothing in the name says so any more.
|
// this way: gemini-3.8-live, gemini-3.1-flash-live-preview, gemini-3.5-live-translate-preview.
|
||||||
|
// None of them can be talked to the way a chat model can, and all of them stood in the chat
|
||||||
|
// list until this rule was written.
|
||||||
//
|
//
|
||||||
builder.Modifier("gpt-live").AsSegment().Inherits();
|
// A name part rather than a substring, because four letters sit inside "delivery",
|
||||||
|
// "olive" and plenty of words which promise no connection at all.
|
||||||
|
//
|
||||||
|
builder.Modifier("live").AsSegment().Inherits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -19,7 +19,7 @@ public sealed class TextCompletionModelsFamily : ModelFamily
|
|||||||
public override ModelVendor Vendor => ModelVendor.UNKNOWN;
|
public override ModelVendor Vendor => ModelVendor.UNKNOWN;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override ModelSource Source => new("https://platform.openai.com/docs/api-reference/completions", new DateOnly(2026, 9, 12), "Ported unchanged from the text completion markers of Provider/ModelKindExtensions.cs.");
|
public override ModelSource Source => new("https://platform.openai.com/docs/api-reference/completions", new DateOnly(2026, 9, 12), "Ported unchanged from the text completion markers of Provider/ModelKindExtensions.cs. Fill-in-the-middle came later, off Mistral's own catalog at https://api.mistral.ai/v1/models, read on 2026-09-19.");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Declare(ModelFamilyBuilder builder)
|
protected override void Declare(ModelFamilyBuilder builder)
|
||||||
@ -32,5 +32,13 @@ public sealed class TextCompletionModelsFamily : ModelFamily
|
|||||||
|
|
||||||
// The one model of the 3.5 line which never learned to chat, next to the ones which did:
|
// The one model of the 3.5 line which never learned to chat, next to the ones which did:
|
||||||
builder.Modifier("gpt-3.5-turbo-instruct").AsSegment().Inherits();
|
builder.Modifier("gpt-3.5-turbo-instruct").AsSegment().Inherits();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fill in the middle: a model handed the code on either side of a gap rather than a
|
||||||
|
// conversation. Mistral writes it into the name of the one it serves for that,
|
||||||
|
// mistral-code-fim-latest, which stood in the chat list because nothing looked for the
|
||||||
|
// word. Codestral does the same job and says so through its family instead.
|
||||||
|
//
|
||||||
|
builder.Modifier("fim").AsSegment().Inherits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,7 +64,7 @@ FIREWORKS | accounts/fireworks/models/qwen3-235b-a22b | CHAT_COMPLETION_API, FUN
|
|||||||
FIREWORKS | whisper-v3 | SPEECH_INPUT, TEXT_OUTPUT | TRANSCRIPTION | (unknown) | (unknown) | (unknown)
|
FIREWORKS | whisper-v3 | SPEECH_INPUT, TEXT_OUTPUT | TRANSCRIPTION | (unknown) | (unknown) | (unknown)
|
||||||
GOOGLE | gemini-1.0-pro-vision | CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
|
GOOGLE | gemini-1.0-pro-vision | CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
|
||||||
GOOGLE | gemini-2.0-flash | AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, SPEECH_INPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | CHAT | (unknown) | 3600 per request | PROVIDER_API countTokens
|
GOOGLE | gemini-2.0-flash | AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, SPEECH_INPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | CHAT | (unknown) | 3600 per request | PROVIDER_API countTokens
|
||||||
GOOGLE | gemini-2.0-flash-live-001 | AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, SPEECH_INPUT, SPEECH_OUTPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | CHAT | (unknown) | (unknown) | (unknown)
|
GOOGLE | gemini-2.0-flash-live-001 | AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, SPEECH_INPUT, SPEECH_OUTPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | REALTIME | (unknown) | (unknown) | (unknown)
|
||||||
GOOGLE | gemini-2.5-flash | ALWAYS_REASONING, AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, SPEECH_INPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | CHAT | 1048576 | 3600 per request | PROVIDER_API countTokens
|
GOOGLE | gemini-2.5-flash | ALWAYS_REASONING, AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, SPEECH_INPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | CHAT | 1048576 | 3600 per request | PROVIDER_API countTokens
|
||||||
GOOGLE | gemini-2.5-flash-image | CHAT_COMPLETION_API, IMAGE_OUTPUT, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT | IMAGE_GENERATION | (unknown) | (unknown) | (unknown)
|
GOOGLE | gemini-2.5-flash-image | CHAT_COMPLETION_API, IMAGE_OUTPUT, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT | IMAGE_GENERATION | (unknown) | (unknown) | (unknown)
|
||||||
GOOGLE | gemini-2.5-flash-lite | AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, OPTIONAL_REASONING, SPEECH_INPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | CHAT | 1048576 | 3600 per request | PROVIDER_API countTokens
|
GOOGLE | gemini-2.5-flash-lite | AUDIO_INPUT, CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, OPTIONAL_REASONING, SPEECH_INPUT, TEXT_INPUT, TEXT_OUTPUT, VIDEO_INPUT | CHAT | 1048576 | 3600 per request | PROVIDER_API countTokens
|
||||||
|
|||||||
@ -92,6 +92,10 @@ public static class ModelKindCorpus
|
|||||||
new(GOOGLE, "imagen-4.0-generate-001", IMAGE_GENERATION, AnsweredTodayAs: CHAT, Reason: "The markers never knew the name; the family ported in the Google step states it. Nobody noticed because the Google provider shows only names beginning with gemini."),
|
new(GOOGLE, "imagen-4.0-generate-001", IMAGE_GENERATION, AnsweredTodayAs: CHAT, Reason: "The markers never knew the name; the family ported in the Google step states it. Nobody noticed because the Google provider shows only names beginning with gemini."),
|
||||||
|
|
||||||
new(ALIBABA_CLOUD, "qwen-image-edit", IMAGE_GENERATION),
|
new(ALIBABA_CLOUD, "qwen-image-edit", IMAGE_GENERATION),
|
||||||
|
|
||||||
|
// Google ships one image model under a codename instead of a description. Nothing in it
|
||||||
|
// says drawing, and the provider only ever saw it because its catalog was read whole.
|
||||||
|
new(GOOGLE, "nano-banana-pro-preview", IMAGE_GENERATION),
|
||||||
];
|
];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -172,6 +176,21 @@ public static class ModelKindCorpus
|
|||||||
//
|
//
|
||||||
new(ALIBABA_CLOUD, "qwen-tts-realtime", REALTIME),
|
new(ALIBABA_CLOUD, "qwen-tts-realtime", REALTIME),
|
||||||
new(ALIBABA_CLOUD, "qwen3-asr-flash-realtime", REALTIME),
|
new(ALIBABA_CLOUD, "qwen3-asr-flash-realtime", REALTIME),
|
||||||
|
|
||||||
|
//
|
||||||
|
// Google's whole two-way line, taken off its catalog rather than written from memory. It
|
||||||
|
// uses the other word for the thing OpenAI calls realtime, so none of these was recognized
|
||||||
|
// and all four stood among the models to talk to -- which none of them can be. The last
|
||||||
|
// one translates between two people speaking, which is as far from a chat as it gets.
|
||||||
|
//
|
||||||
|
new(GOOGLE, "gemini-3.8-live", REALTIME),
|
||||||
|
new(GOOGLE, "gemini-3.8-live-extended-thinking", REALTIME),
|
||||||
|
new(GOOGLE, "gemini-3.1-flash-live-preview", REALTIME),
|
||||||
|
new(GOOGLE, "gemini-3.5-live-translate-preview", REALTIME),
|
||||||
|
|
||||||
|
// Google's experimental music model, which is recognized already: it carries the other
|
||||||
|
// word, and this holds that the two rules do not fall out with each other.
|
||||||
|
new(GOOGLE, "lyria-realtime-exp", REALTIME),
|
||||||
];
|
];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -188,6 +207,11 @@ public static class ModelKindCorpus
|
|||||||
private static readonly ModelKindExample[] TEXT_COMPLETION_ENTRIES =
|
private static readonly ModelKindExample[] TEXT_COMPLETION_ENTRIES =
|
||||||
[
|
[
|
||||||
new(HELMHOLTZ, "text-davinci-003", TEXT_COMPLETION),
|
new(HELMHOLTZ, "text-davinci-003", TEXT_COMPLETION),
|
||||||
|
|
||||||
|
// The model Mistral serves for filling a gap in a file. Its name does not begin with the
|
||||||
|
// word the provider used to sort its list by, so it stood among the chat models -- next to
|
||||||
|
// Codestral, which does the same job and was kept out by that very word.
|
||||||
|
new(MISTRAL, "mistral-code-fim-latest", TEXT_COMPLETION),
|
||||||
new(OPEN_AI, "babbage-002", TEXT_COMPLETION),
|
new(OPEN_AI, "babbage-002", TEXT_COMPLETION),
|
||||||
new(OPEN_AI, "gpt-3.5-turbo-instruct", TEXT_COMPLETION),
|
new(OPEN_AI, "gpt-3.5-turbo-instruct", TEXT_COMPLETION),
|
||||||
|
|
||||||
@ -279,6 +303,19 @@ public static class ModelKindCorpus
|
|||||||
new(PERPLEXITY, "sonar-reasoning-pro", CHAT),
|
new(PERPLEXITY, "sonar-reasoning-pro", CHAT),
|
||||||
new(PERPLEXITY, "sonar-deep-research", CHAT),
|
new(PERPLEXITY, "sonar-deep-research", CHAT),
|
||||||
|
|
||||||
|
//
|
||||||
|
// The counter-sample to the three rules above, taken off the same three catalogs. Every
|
||||||
|
// one of these carries a word which now means something -- code, live, image -- without
|
||||||
|
// being what that word says, and every one of them has to stay a chat model.
|
||||||
|
//
|
||||||
|
new(MISTRAL, "mistral-code-latest", CHAT),
|
||||||
|
new(MISTRAL, "mistral-vibe-cli-latest", CHAT),
|
||||||
|
new(MISTRAL, "zai-glm-latest", CHAT),
|
||||||
|
new(GOOGLE, "gemma-4-31b-it", CHAT),
|
||||||
|
new(GOOGLE, "gemini-3.8-flash", CHAT),
|
||||||
|
new(X, "grok-4.6", CHAT),
|
||||||
|
new(X, "grok-build-0.1", CHAT),
|
||||||
|
|
||||||
//
|
//
|
||||||
// Three which were questioned while testing and stay all the same. Grok Build is the coding
|
// Three which were questioned while testing and stay all the same. Grok Build is the coding
|
||||||
// model behind the xAI CLI and answers like any other Grok. The Groq compound systems are
|
// model behind the xAI CLI and answers like any other Grok. The Groq compound systems are
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user