Skip to content

Add Umans AI Coding Plan provider#2636

Merged
can1357 merged 7 commits into
can1357:mainfrom
oldschoola:oldschoola/umans
Jun 15, 2026
Merged

Add Umans AI Coding Plan provider#2636
can1357 merged 7 commits into
can1357:mainfrom
oldschoola:oldschoola/umans

Conversation

@oldschoola

Copy link
Copy Markdown
Contributor

Summary

  • add the umans catalog provider with Anthropic-compatible model discovery from https://api.code.umans.ai/v1/models/info
  • add /login umans and UMANS_AI_CODING_PLAN_API_KEY env fallback
  • regenerate the bundled catalog with Umans models and document the provider/env var

Verification

  • bun --cwd=packages/catalog run generate-models
  • bun test packages/catalog/test/umans-provider.test.ts packages/catalog/test/descriptors.test.ts packages/ai/test/provider-registry.test.ts
  • bun --cwd=packages/catalog run check
  • bun --cwd=packages/ai run check
  • bun --cwd=packages/coding-agent run check
  • live Anthropic Messages request to Umans with supplied API key returned status=200 and ok
  • /login umans validation path returned login=ok

@roboomp roboomp added cli CLI commands and arguments feat providers LLM provider-specific issues review:p2 triaged provider:umans labels Jun 15, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7d721dc420

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +619 to +621
api: "anthropic-messages",
provider: "umans",
baseUrl,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Use x-api-key for Umans Anthropic requests

When users authenticate through /login umans or UMANS_AI_CODING_PLAN_API_KEY and select one of these Umans anthropic-messages models, streamAnthropic builds headers for non-official Anthropic endpoints with Authorization: Bearer and suppresses the SDK API key, while the new login validation path and Umans' documented Anthropic /v1/messages examples use x-api-key (https://app.umans.ai/offers/code/docs). This can let /login umans validate successfully but then send chat requests with different auth headers and fail with 401; add a provider-specific auth override or otherwise force the Umans Anthropic route to use x-api-key.

Useful? React with 👍 / 👎.

@roboomp roboomp left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: coherent new provider integration, but it needs maintainer attention before merge.
Blocking: Umans discovery drops reasoning.can_disable, so umans-kimi-k2.7 can be cataloged while default requests send thinking: disabled.
Should-fix: add /login umans validation coverage and external-contributor changelog attribution across touched packages.
Thanks for wiring the provider through the catalog, registry, docs, and CLI surfaces.

api: "anthropic-messages",
provider: "umans",
baseUrl,
reasoning: umansReasoningSupported(capabilities.reasoning),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

blocking: capabilities.reasoning.can_disable is ignored here. The live Umans /v1/models/info response marks umans-kimi-k2.7 with reasoning: { supported: true, can_disable: false }, but the generated model has only reasoning: true and no thinking.requiresEffort. For anthropic-messages, mapOptionsForApi() sends thinkingEnabled: false when the caller does not request a reasoning effort, which becomes thinking: { type: "disabled" }; that model can reject the default request even though the catalog advertises it as usable. Please map can_disable === false to the existing mandatory-reasoning surface (and cover it in umans-provider.test.ts).

instructions: "Create or copy your Umans API key from Dashboard → API Keys.",
promptMessage: "Paste your Umans API key",
placeholder: "sk-...",
validation: {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should-fix: /login umans is a new user-facing path, but the PR only checks that umans appears in the provider list. Existing API-key providers such as zenmux and nanogpt have tests that assert the exact validation URL, method, auth header, prompt text, trimmed key, and validation-error surfacing. Without the same coverage here, a typo in baseUrl, model, or the Anthropic x-api-key validation path would ship while provider-registry.test.ts still passes.

Comment thread packages/ai/CHANGELOG.md Outdated

### Added

- Added Umans AI Coding Plan API-key login support and `UMANS_AI_CODING_PLAN_API_KEY` environment fallback.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should-fix: external contribution changelog entries need PR attribution per AGENTS.md (([#2636](https://github.com/can1357/oh-my-pi/pull/2636) by [@oldschoola](https://github.com/oldschoola))). Please apply the same attribution to the new packages/catalog and packages/coding-agent changelog entries too.

@oldschoola

Copy link
Copy Markdown
Contributor Author

Addressed review feedback in d7df0b6.

  • Umans Anthropic-compatible runtime requests now use X-Api-Key instead of bearer auth; added coverage in anthropic-alignment.test.ts.
  • /v1/models/info discovery now maps reasoning.can_disable === false to thinking.requiresEffort; the bundle preserves the mandatory-reasoning surface for umans-kimi-k2.7; added dynamic and bundled coverage in umans-provider.test.ts.
  • Added /login umans validation coverage for URL, method, x-api-key, prompt metadata, trimming, and validation-error surfacing in umans-login.test.ts.
  • Added PR attribution to the ai, catalog, and coding-agent changelog entries.

Verified locally:

  • bun --cwd=packages/catalog run generate-models
  • bun --cwd=packages/catalog run check && bun --cwd=packages/ai run check && bun --cwd=packages/coding-agent run check
  • bun test packages/catalog/test/umans-provider.test.ts packages/ai/test/umans-login.test.ts packages/ai/test/anthropic-alignment.test.ts packages/ai/test/provider-registry.test.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7bbe2d89b1

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread packages/catalog/src/models.json Outdated
"mimo-v2.5-asr": {
"id": "mimo-v2.5-asr",
"name": "mimo-v2.5-asr",
"api": "openai-completions",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Exclude the ASR model from chat completions

When the regenerated catalog exposes mimo-v2.5-asr as an openai-completions text model, anyone selecting it will send normal chat/tool traffic to a speech-recognition SKU; Xiaomi's model card labels MiMo-V2.5-ASR as Automatic Speech Recognition and its usage takes audio input (https://huggingface.co/XiaomiMiMo/MiMo-V2.5-ASR). Please filter this non-chat Xiaomi ID in the descriptor/source before regenerating rather than shipping it as a chat model.

Useful? React with 👍 / 👎.

@can1357 can1357 merged commit fcde870 into can1357:main Jun 15, 2026
18 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI commands and arguments feat provider:umans providers LLM provider-specific issues review:p2 triaged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants