Conversation
An OpenAI chat-completions gateway: one key in front of models from several labs, so the provider-level capabilities are the intersection that holds for every listed model, with the one image-capable entry overriding its own modalities. Reasoning config, forced and parallel tool calls are declared unsupported rather than assumed from the wire format — the gateway documents no reasoning parameter and the models behind it do not agree on a spelling, so offering the control would only work for part of the list. Prompt caching is automatic and billed at its own rate on every model, with no cache-control parameter to set. Context and output lengths are the platform's published values per model. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upfront disclosure: I work on ModelRunner, so this PR adds my own company to the catalog. Written with Claude Code; I've read and run everything in it. Close it without ceremony if catalog entries aren't something you take from outside.
What this adds
A
modelrunnerprovider preset. It's an OpenAI chat-completions gateway — one key in front of models from several labs — so it needs no new SDK type and no code outside the catalog:SDKTypeProviderSDKTypeOpenAIChatCompletionsOriginhttps://queue.modelrunner.runChatCompletionPathPrefixspec.DefaultOpenAIChatCompletionsPrefixAPIKeyHeaderKeyspec.DefaultAuthorizationHeaderKeyowner/alias— the only value the chat route acceptsSix presets, reusing the existing
Preset*ids the wayprovider_openrouter.godoes:gemini35Flash,gemini37Flash,gemini35FlashLite,deepseekv4pro,zaiglm52,qwen38Max. Context and output lengths are the platform's published per-model values, not estimates.Four files: the new provider, the
catalogProvidersregistration, and the two manifests that are meant to be updated when a provider is added (catalog_model_membership_test.go,catalog_test.go).Capability declarations, and why several are
falseThe provider-level override is the intersection that holds for every listed model; the one image-capable entry overrides its own modalities rather than widening the provider.
SupportsReasoningConfig: false. Several of these models think, and some expose an effort control upstream — but the gateway documents no reasoning parameter of its own and the models behind it don't agree on a spelling. Offering the control would work for part of the list and fail for the rest, so it's declared unsupported. This is the declaration I'd most expect you to push back on; happy to revisit it if you'd rather the catalog be optimistic here.functionwithAuto/None,SupportsParallelToolCalls: false,MaxForcedTools: 0. Function tool calling is what the gateway documents and what its own conformance run covers. Forced and parallel calls are pass-through in the wire format but unverified per model, so I left them off rather than inferring capability from the request schema.SupportsAutomaticCaching: true, no cache-control. Caching happens upstream and is billed at its own rate on every model here; there's nocache_controlparameter to set, so theTopLevelblock is allfalse.Text+JSONSchema.response_formatis honoured where the model supports it.Testing
go build ./...— clean.go test ./...— all packages pass, matching themainbaseline I took before starting.gofmt -l .— clean.golangci-lint run ./...— 0 issues (2.13.2; your CI pins v2.13.0).Two things your own validation caught that I'd otherwise have shipped wrong, which is a nice advert for those manifests:
validateModelrequires eitherReasoningorTemperatureto be set. With reasoning config declared unsupported, five of six presets failed until each got an explicitTemperature— nownew(1.0), matching the OpenRouter gateway presets.TestCatalogContainsAllRegisteredProvidersandTestCatalogModelMembershipIsExhaustiveboth failed until updated, exactly as their comments promise.The flexigpt-app side
flexigpt-appreads its built-in providers entirely from this catalog (populateDataFromInferenceCatalog), so nothing there can be wired until this is tagged. Once it is, the app-side follow-up is one small commit — the name constant,BuiltInProviderNames,BuiltInProviderTimestamps, a default preset id, and thego.modbump. Say the word and I'll open it.Happy to revise anything here — the preset selection, the capability declarations, or the naming. Leave a comment and I'll push a change.
🤖 Generated with Claude Code