Skip to content

Add uberllm 0.0.1 - #3569

Merged
crazywoola merged 1 commit into
langgenius:mainfrom
PSA-Team-source:add-uberllm-0.0.1
Oct 31, 2026
Merged

crazywoola merged 1 commit into
langgenius:mainfrom
PSA-Team-source:add-uberllm-0.0.1

Conversation

@PSA-Team-source

Copy link
Copy Markdown
Contributor

Plugin Submission

Plugin information

Submission type

  • New plugin
  • Version update

What changed

New model provider for UberLLM (https://uberllm.dev), an OpenAI-compatible API that serves hundreds of chat models (OpenAI, Anthropic, Google, DeepSeek, Qwen, Kimi, GLM, Grok and others) with one API key, billed at what the underlying provider charged.

The plugin adds:

  • 20 ready-to-pick chat models, each checked against the live UberLLM catalog (context size, reply limit, tool use, picture input and supported parameters come from GET /v1/models/<id>).
  • Custom models: any other UberLLM chat model by its exact name, with context size, reply limit, picture input and tool use set by the user.
  • Streaming, tool calling (incl. streamed tool calls), picture input on models that read pictures, and JSON / JSON schema replies on models that support them.
  • Free credential checks: saving the key reads the account balance (GET /v1/balance) and adding a custom model looks up the model (GET /v1/models/<id>), so no tokens are spent on validation and accounts with a $0 balance can still connect.
  • Plain-language errors for a wrong key, low balance, a key spend limit, an unknown model name and rate limits, with links to the page that fixes each one.

Why it is needed: UberLLM is not available in Dify today. Its catalog and routing (several providers per model, automatic retries before the first byte, prices at or below list) differ from the existing aggregator plugins, so UberLLM users cannot use their key in Dify without it.

Risk level

  • Low risk
  • Medium risk
  • High risk

Required checks

  • I have read and followed the Marketplace submission requirements.
  • I have read and comply with the Plugin Development Guidelines.
  • I tested this plugin on Dify Community Edition and Dify Cloud, or documented any limitation below.
  • The package contains only files needed at runtime.
  • The package does not contain secrets, local credentials, .env files, .git directories, virtual environments, caches, logs, or IDE files.
  • The package does not contain executables or bundled binaries, or I explained why they are required below.
  • The plugin README includes setup steps, usage instructions, required APIs or credentials, connection requirements, and the source repository link.
  • The plugin includes PRIVACY.md or a hosted privacy policy, and manifest.yaml references it.
  • All user-facing text is primarily in English, with any localized README files following the i18n guidance.

Security and privacy notes

  • Network requests: the plugin only sends HTTPS requests to the fixed host api.uberllm.dev (declared in manifest.yaml under network.domains). The two requests.get calls flagged by the scanner are the free credential checks (GET https://api.uberllm.dev/v1/balance and GET https://api.uberllm.dev/v1/models/<model name>); chat calls go through the SDK's OAICompatLargeLanguageModel to https://api.uberllm.dev/v1/chat/completions. No user-controlled URLs or hosts. uberllm.dev (no api.) appears only as help links inside error messages; the plugin never connects to it.
  • Timeouts: credential checks use a 10 s connect / 30 s read timeout; chat calls use the SDK default (10 s connect, MAX_REQUEST_TIMEOUT 300 s read).
  • Credentials: the UberLLM API key is a secret-input field, sent only as a Bearer header to api.uberllm.dev. Error messages are rewritten to fixed plain-language text or UberLLM's own error message and never include the key.
  • User content: prompts, pictures and tool definitions in a model call are sent to UberLLM, which forwards them to the model's provider. UberLLM does not store prompts or answers (https://uberllm.dev/privacy). The plugin stores and logs nothing itself. Details in PRIVACY.md (in the package).
  • No command or code execution, SQL, file system access, browser automation or proxying. No payments or transfers: the plugin only spends prepaid API credit the user already bought on uberllm.dev, like any paid model API.

Local validation

$ dify plugin package ./uberllm -o dist/uberllm-0.0.1.difypkg        # CLI v0.6.12
INFO plugin packaged successfully  (19 KB, 31 files, no directory entries)

$ python3 validator/validate-difypkg.py uberllm-0.0.1.difypkg --pr-body-file pr-body.md
package_contents PASS | package_secrets PASS | package_binaries PASS | manifest_metadata PASS
readme_metadata PASS | package_dependencies PASS | python_compile PASS
sensitive_capabilities PASS | dependency_vulnerabilities: no known vulnerabilities (dify_plugin==0.10.2)
exit 0 (0 blocking errors)

$ INSTALL_METHOD=serverless python3 validator/test-plugin-install.py -d unpacked/
!!! Plugin test result: success

$ python3 uploader -d unpacked/ -f --test --plugin-daemon-path dify-plugin
Security scan: 2 domain(s), 1 undeclared, dependencies=ok (0 vulnerability findings)
!!! Skip uploading package in testing

$ UBERLLM_KEY_FILE=... python check_plugin.py     # loads the plugin via PluginRegistration, live API
offline: OK (plugin loads, 20 models, error messages)
live: key check OK (good key accepted, wrong key refused in plain words)
live: custom model check OK (chat model accepted, unknown and non-chat refused)
live: non-streamed OK -> 'pong' in 1 chunk(s) (8+1 tokens)
live: streamed OK -> 'pong' in 2 chunk(s) (8+1 tokens)
live: wrong key on chat -> plain-words error OK

Reviewer notes

  • Validator warnings, explained: access_domains lists uberllm.dev as undeclared because help links like https://uberllm.dev/dashboard/keys appear in error messages; it is never requested. python_safety flags return super()...(model, credentials) calls, which pass credentials to the SDK base class and do not return them. prohibited_financial_activity matches the words "billed" and "charged" in the README, which describe API usage costs; the plugin makes no payments.
  • Prices are left out of the model files on purpose: UberLLM prices move with its provider market, so a fixed number in Dify would be wrong. Each call's exact cost is shown in the user's UberLLM dashboard.
  • Tested with the Dify plugin SDK (PluginRegistration, the same loader the runtime uses) and the Marketplace toolkit's install test, against the live UberLLM API.
  • Limitation: not yet run inside a full Dify Community Edition or Dify Cloud workspace. (Replace this line with the Dify version and what was run there once that test is done.)

@github-actions github-actions Bot added the risk: medium Medium-risk Marketplace submission label Oct 30, 2026

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Pre Check Plugin and PR Risk Label passed for this revision. Inspected the submitted package, documentation and relevant source: this is a non-draft plugin submission with no Web3 functionality identified. This is an eligibility review, not a comprehensive security audit.

@crazywoola
crazywoola merged commit 312438e into langgenius:main Oct 31, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: medium Medium-risk Marketplace submission

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants