mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-15 21:53:47 +00:00
Added Requesty as a provider (#1006)
Co-authored-by: Thorsten Sommer <SommerEngineering@users.noreply.github.com>
This commit is contained in:
1 parent
f912af321f
commit
2bd3d41421
44 files changed
+518
-65
No files matched your search
@@ -195,6 +195,12 @@ PERPLEXITY | sonar-deep-research | ALWAYS_REASONING, CHAT_COMPLETION_API, MULTIP
|
||||
PERPLEXITY | sonar-pro | CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT, WEB_SEARCH | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
PERPLEXITY | sonar-reasoning | ALWAYS_REASONING, CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT, WEB_SEARCH | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
PERPLEXITY | sonar-reasoning-pro | ALWAYS_REASONING, CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT, WEB_SEARCH | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
REQUESTY | anthropic/claude-opus-5 | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, REASONING_BY_DEFAULT, TEXT_INPUT, TEXT_OUTPUT | CHAT | 1000000 | 600 per request | PROVIDER_API /v1/messages/count_tokens | (unknown)
|
||||
REQUESTY | bedrock/claude-opus-5@eu-central-1 | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, REASONING_BY_DEFAULT, TEXT_INPUT, TEXT_OUTPUT | CHAT | 1000000 | 600 per request | PROVIDER_API /v1/messages/count_tokens | (unknown)
|
||||
REQUESTY | claude-opus-5@eu | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, REASONING_BY_DEFAULT, TEXT_INPUT, TEXT_OUTPUT | CHAT | 1000000 | 600 per request | PROVIDER_API /v1/messages/count_tokens | (unknown)
|
||||
REQUESTY | google/gemma-4-31b-it | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, OPTIONAL_REASONING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
REQUESTY | novita/qwen/qwen3.8-max | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, REASONING_BY_DEFAULT, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
REQUESTY | openai/gpt-6-sol:flex | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, REASONING_BY_DEFAULT, TEXT_INPUT, TEXT_OUTPUT, WEB_SEARCH | CHAT | 1050000 | (unknown) | (unknown) | DEVELOPER
|
||||
SELF_HOSTED | | (nothing) | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
SELF_HOSTED | --- | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
SELF_HOSTED | 01-ai/yi-large | CHAT_COMPLETION_API, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown) | (unknown)
|
||||
|
||||
@@ -240,6 +240,12 @@ public static class ModelCorpus
|
||||
new(LITE_LLM, "azure/gpt-5.6", QUOTED_AS_A_NAME_SHAPE),
|
||||
new(LITE_LLM, "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0", NAMED_BY_NO_RULE),
|
||||
new(LITE_LLM, "the-fast-one", NAMED_BY_NO_RULE),
|
||||
new(REQUESTY, "anthropic/claude-opus-5", QUOTED_AS_A_NAME_SHAPE),
|
||||
new(REQUESTY, "google/gemma-4-31b-it", NAMED_BY_A_RULE),
|
||||
new(REQUESTY, "bedrock/claude-opus-5@eu-central-1", QUOTED_AS_A_NAME_SHAPE),
|
||||
new(REQUESTY, "claude-opus-5@eu", QUOTED_AS_A_NAME_SHAPE),
|
||||
new(REQUESTY, "openai/gpt-6-sol:flex", QUOTED_AS_A_NAME_SHAPE),
|
||||
new(REQUESTY, "novita/qwen/qwen3.8-max", QUOTED_AS_A_NAME_SHAPE),
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -54,6 +54,8 @@ public sealed class HostNamingTests
|
||||
Assert.That(HostNaming.VendorOfOrganization("Qwen"), Is.EqualTo(ModelVendor.ALIBABA));
|
||||
Assert.That(HostNaming.VendorOfOrganization("deepseek-ai"), Is.EqualTo(ModelVendor.DEEP_SEEK));
|
||||
Assert.That(HostNaming.VendorOfOrganization("HuggingFaceTB"), Is.EqualTo(ModelVendor.HUGGING_FACE));
|
||||
Assert.That(HostNaming.VendorOfOrganization("zai"), Is.EqualTo(ModelVendor.Z_AI));
|
||||
Assert.That(HostNaming.VendorOfOrganization("minimaxi"), Is.EqualTo(ModelVendor.MINIMAX));
|
||||
Assert.That(HostNaming.VendorOfOrganization("somebody-else"), Is.EqualTo(ModelVendor.UNKNOWN));
|
||||
});
|
||||
}
|
||||
@@ -111,6 +113,31 @@ public sealed class HostNamingTests
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TheRegionSuffixComesOffAndTheModelStaysWhatItWas()
|
||||
{
|
||||
var taken = HostNaming.TryStripRegionSuffix(new ModelId("bedrock/claude-opus-5@eu-central-1"), out var inner);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(taken, Is.True);
|
||||
Assert.That(inner.Original, Is.EqualTo("bedrock/claude-opus-5"));
|
||||
});
|
||||
}
|
||||
|
||||
[TestCase("bedrock/claude-opus-5", TestName = "A name without an at sign has no region to take off")]
|
||||
[TestCase("@eu", TestName = "A region with nothing in front of it is not a wrapping")]
|
||||
public void WhatCarriesNoRegionIsLeftAlone(string modelId)
|
||||
{
|
||||
var taken = HostNaming.TryStripRegionSuffix(new ModelId(modelId), out var inner);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(taken, Is.False);
|
||||
Assert.That(inner.Original, Is.EqualTo(modelId));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AMenuPositionComesOff()
|
||||
{
|
||||
|
||||
@@ -78,6 +78,55 @@ public sealed class ModelHostTests
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ARequestyNameLosesItsRegionAndTheCloudRunningIt()
|
||||
{
|
||||
var unwrapped = Unwrap(LLMProviders.REQUESTY, "bedrock/claude-opus-5@eu-central-1", out var vendor);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(unwrapped.Original, Is.EqualTo("claude-opus-5"));
|
||||
Assert.That(vendor, Is.Null, "Bedrock runs the model; it did not build it.");
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ARequestyManagedPolicyOnlyLosesItsRegion()
|
||||
{
|
||||
var unwrapped = Unwrap(LLMProviders.REQUESTY, "claude-opus-5@eu", out var vendor);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(unwrapped.Original, Is.EqualTo("claude-opus-5"));
|
||||
Assert.That(vendor, Is.Null);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TheRequestyServiceTierComesOffAndTheVendorStays()
|
||||
{
|
||||
var unwrapped = Unwrap(LLMProviders.REQUESTY, "openai/gpt-6-sol:flex", out var vendor);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(unwrapped.Original, Is.EqualTo("gpt-6-sol"));
|
||||
Assert.That(vendor, Is.EqualTo(ModelVendor.OPEN_AI));
|
||||
});
|
||||
}
|
||||
|
||||
[TestCase("novita/qwen/qwen3.8-max", "qwen3.8-max", ModelVendor.ALIBABA, TestName = "Behind the cloud, the organization from the hub names the vendor")]
|
||||
[TestCase("azure/openai/text-embedding-3-large@francecentral", "text-embedding-3-large", ModelVendor.OPEN_AI, TestName = "Behind the cloud and before the region, the organization names the vendor")]
|
||||
public void TheInnermostRequestyOrganizationNamesTheVendor(string modelId, string expectedModel, ModelVendor expectedVendor)
|
||||
{
|
||||
var unwrapped = Unwrap(LLMProviders.REQUESTY, modelId, out var vendor);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(unwrapped.Original, Is.EqualTo(expectedModel));
|
||||
Assert.That(vendor, Is.EqualTo(expectedVendor));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TheFireworksAccountPathComesOffWholeWithoutAnybodyCountingItsSegments()
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Text.Json;
|
||||
|
||||
using AIStudio.Provider.Groq;
|
||||
using AIStudio.Provider.OpenRouter;
|
||||
using AIStudio.Provider.Requesty;
|
||||
|
||||
using MistralModelsResponse = AIStudio.Provider.Mistral.ModelsResponse;
|
||||
using SelfHostedModelsResponse = AIStudio.Provider.SelfHosted.ModelsResponse;
|
||||
@@ -105,6 +106,19 @@ public sealed class ModelListMetadataTests
|
||||
Assert.That(response.Data[0].ContextWindowTokens, Is.EqualTo(131_072));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RequestyStatesTheWindowAsTheContextWindow()
|
||||
{
|
||||
var response = JsonSerializer.Deserialize<RequestyModelsResponse>("""
|
||||
{
|
||||
"object": "list",
|
||||
"data": [ { "id": "openai/gpt-4o-mini", "object": "model", "api": "chat", "context_window": 128000, "max_output_tokens": 16384 } ]
|
||||
}
|
||||
""", AS_THE_PROVIDERS_READ_IT);
|
||||
|
||||
Assert.That(response.Data[0].ContextWindowTokens, Is.EqualTo(128_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MistralStatesTheWindowAsAMaximumLength()
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user