Repository navigation
feat: add Obscurify.ai to the built-in provider catalog - #4751
tonydavis629 wants to merge 1 commit into
Conversation
|
👋 Some commits in this PR are not signed and verified by GitHub. Please sign your commits with a GPG or SSH key registered in your GitHub account, then force-push. Commits that are not verified: See GitHub’s guide on signing commits for setup instructions. I’ve added |
2460796 to
4d50b1a
Compare
|
👋 This PR has merge conflicts with the base branch. Please rebase or merge the latest base branch and resolve them. I've moved it to draft and added |
|
Hi @tonydavis629 we are sorry but we just changed how we manage our providers using a more centralized approach. Could you rebuild our PR with it |
4d50b1a to
37e903f
Compare
|
Thanks for the pointer. I rebuilt it on the catalog: Obscurify.ai is now a single entry in |
There was a problem hiding this comment.
🟡 Changes recommended
The Obscurify live test lacks an explicit opt-in guard, allowing ordinary test runs to send paid API requests whenever OBSCURIFY_API_KEY is exported.
1 open issue
What changed in this PR
Adds Obscurify.ai to Docker Agent’s embedded provider catalog, reusing the existing OpenAI-compatible implementation.
Changes:
- Registers the endpoint, API-key variable, default model, and message-merging behavior.
- Extends provider and configuration tests, including models.dev exemptions.
- Adds setup documentation, navigation, and an example configuration.
| File | Description |
|---|---|
pkg/model/provider/openai/system_message_merge_test.go |
Tests Obscurify message-merging behavior. |
pkg/model/provider/openai_alias_providers_test.go |
Adds shared request and live-test coverage. |
pkg/model/provider/catalog/providers.json |
Registers the provider and its defaults. |
pkg/model/provider/catalog_test.go |
Exempts Obscurify from models.dev matching. |
pkg/config/examples_test.go |
Allows example models absent from models.dev. |
pkg/config/auto_test.go |
Tests credential discovery and automatic model selection. |
examples/README.md |
Lists the new example. |
examples/obscurify.yaml |
Provides a tool-enabled agent configuration. |
docs/providers/overview/index.md |
Lists provider credentials. |
docs/providers/obscurify/index.md |
Documents setup, usage, models, and limitations. |
docs/data/nav.yml |
Adds provider navigation. |
docs/configuration/models/index.md |
Adds Obscurify to documented provider lists. |
agent-schema.json |
Updates the supported-provider description. |
Review effort: Balanced
| testKey: "test-obscurify-key", | ||
| model: "deepseek/deepseek-v4-flash", | ||
| greeting: "Hello from Obscurify.ai", | ||
| mergesSystemMessages: true, |
aheritier
left a comment
There was a problem hiding this comment.
Reviewed provider dispatch/defaults, credentials and auto-selection, model listing/picker behavior, request/streaming coverage, schema, and documentation against the provider implementation checklist. See inline comments.
CI / operational status: The required gate passed at 37e903f; all executed checks succeeded. The PR is not draft, but GitHub reports mergeable=false and mergeable_state=dirty. Resolve the conflicts and revalidate the resulting head. No local Go tests were run because the available worktree differs from the PR head; review used fetched head sources. No paid inference requests were made.
Issue context: Reviewed #4755 and #4761 and their accessible discussions as implementation/guidance references. No acceptance-criteria issue or Jira reference is linked. Needs-decision: confirm that the PR description is the complete acceptance scope; no additional requirements were inferred.
| testKey: "test-obscurify-key", | ||
| model: "deepseek/deepseek-v4-flash", | ||
| greeting: "Hello from Obscurify.ai", | ||
| mergesSystemMessages: true, |
There was a problem hiding this comment.
[blocking][correctness] Require explicit opt-in before paid live inference. This row leaves liveOptInEnvVar empty, so runOpenAIAliasProviderLiveAPI bypasses its opt-in check and sends a real completion whenever OBSCURIFY_API_KEY is exported. TestOpenAIAliasProvider_LiveAPI runs for every alias, and .env.test does not clear this key, so an ordinary go test ./... or task test can unexpectedly consume the developer's paid balance. Set liveOptInEnvVar: "DOCKER_AGENT_RUN_OBSCURIFY_LIVE_TEST" and require its value to be 1, matching API Route/Lunaroute/OrcaRouter. This also includes Obscurify in the existing credential-alone/no-request regression test. Confidence: high; verified against the row, live-test helper, regression-test selector, and .env.test at this head.
There was a problem hiding this comment.
Fixed: the Obscurify row now sets liveOptInEnvVar: "DOCKER_AGENT_RUN_OBSCURIFY_LIVE_TEST". Locally, TestOpenAIAliasProvider_LiveAPI/obscurify skips with only OBSCURIFY_API_KEY exported, and TestOpenAIAliasProvider_LiveAPIRequiresExplicitOptIn/obscurify passes. Thanks for catching it.
|
👋 This PR has merge conflicts with the base branch. Please rebase or merge the latest base branch and resolve them. I've moved it to draft and added ; it'll be picked back up automatically once the conflicts are cleared. |
|
👋 This PR has merge conflicts with the base branch. Please rebase or merge the latest base branch and resolve them. I've moved it to draft and added |
37e903f to
988a0a2
Compare
aheritier
left a comment
There was a problem hiding this comment.
Reviewed all 13 changed files against the provider implementation checklist, including catalog dispatch/defaults, credentials, selection/discovery, model listing, request/streaming tests, schema, examples, and documentation. No additional demonstrated findings beyond the existing blocking thread.
CI / operational status: Required gate passed at this head; the check rollup is SUCCESS and all executed checks succeeded. Race tests were skipped. The PR is not draft and has no merge conflicts, but GitHub reports mergeable_state=blocked. No local tests were run because the available worktree differs from the PR head. No paid inference requests were made.
Issue context: Reviewed #4755 and #4761 and their accessible discussions as implementation/guidance references; #4756 and #4757 track separate follow-ups. No acceptance-criteria issue or Jira reference is linked. Needs-decision: confirm that the PR description is the complete acceptance scope; no additional requirements were inferred.
Prior threads:
- 4418619721: Still valid but outdated; its root cause is already tracked by current unresolved thread 4432978325, so no duplicate inline comment is added.
- 4432978325: Still open [blocking], confidence high. Reverified at the current head: the Obscurify row omits liveOptInEnvVar, the live-test helper permits inference with credentials alone, and .env.test does not clear OBSCURIFY_API_KEY. The requested explicit opt-in remains necessary.
Add an obscurify entry to the embedded provider catalog (https://obscurify.ai/v1, OBSCURIFY_API_KEY, default model deepseek/deepseek-v4-flash, consecutive-message merging like the other open-model hosts) and exempt it from the models.dev ID checks since it is not in the snapshot yet. Document it with a provider page, navigation, the provider tables, the schema description and an example recipe. Signed-off-by: Tony Davis <acdavis629@gmail.com>
988a0a2 to
ba107af
Compare
|
@aheritier the blocking thread is fixed in ba107af (the Obscurify live test now needs |

Summary
Rebuilt on the embedded provider catalog from #4755, following the contributor guide from #4761:
pkg/model/provider/catalog/providers.json: anobscurifyentry using the existing OpenAI implementation (api_type: openai, base URLhttps://obscurify.ai/v1,OBSCURIFY_API_KEY, default modeldeepseek/deepseek-v4-flash,merge_consecutive_messageslike the other open-model hosts). It sits aftercloudgpu, so it ranks low for automatic selection.openAIAliasProviders(hermetic request test, plus the opt-in live test), rows in the auto-selection tables, ashouldMergeConsecutiveMessagesrow, and the models.dev exemptions inTestProviderIDsMatchEmbeddedCatalogandmodelsDevAbsentProviders. Obscurify.ai isn't in the models.dev snapshot yet, the same situation asruncrate,atlascloudandlunaroute.docs/configuration/modelsand the schema description, and anexamples/obscurify.yamlrecipe.Obscurify.ai is a privacy-focused provider with an OpenAI-compatible API and 200+ models. Accounts are a random account number with no email, and prompts and responses are not stored on the server.
Testing
On
mainat 72e52dc, Go 1.27.3:go test ./pkg/model/provider/... ./pkg/config/... ./cmd/... ./pkg/runtime/modelcatalog/...: pass.gofmt -l pkg cmdis clean.OBSCURIFY_API_KEY=... go test -count=1 -run 'TestOpenAIAliasProvider_LiveAPI$/obscurify' ./pkg/model/provider/: PASS against the real API.OBSCURIFY_API_KEYset, in a clean HOME:docker-agent modelslistsobscurify deepseek/deepseek-v4-flashas the default.docker-agent run --exec examples/obscurify.yamlasked to read a local file: the agent calledread_fileand answered with the file's contents.task lint, because golangci-lint isn't installed here.docker-agent run --exec defaultwith only this key still went to DMR when I checked on 7a9206a, andRUNCRATE_API_KEYandGROQ_API_KEYdid the same, so I left that alone.The commit has a DCO sign-off and a verified SSH signature.
Disclosure: I run it.