From bcd1dec3dce1a7eb311af637103addadd639e695 Mon Sep 17 00:00:00 2001 From: JuniperSling <80268751+JuniperSling@users.noreply.github.com> Date: Wed, 22 Apr 2026 13:46:07 +0800 Subject: [PATCH] feat(tencent): remove Token Plan provider and auth (#69996) Co-authored-by: albertxyu --- docs/providers/tencent.md | 56 ++++++---------------- extensions/tencent/api.ts | 6 +-- extensions/tencent/index.ts | 62 ++----------------------- extensions/tencent/models.ts | 30 ------------ extensions/tencent/onboard.ts | 35 -------------- extensions/tencent/openclaw.plugin.json | 20 ++------ extensions/tencent/provider-catalog.ts | 11 ----- 7 files changed, 22 insertions(+), 198 deletions(-) diff --git a/docs/providers/tencent.md b/docs/providers/tencent.md index 8c3ea17d38c..5c65f93af40 100644 --- a/docs/providers/tencent.md +++ b/docs/providers/tencent.md @@ -1,64 +1,40 @@ --- -title: "Tencent Cloud (TokenHub + Token Plan)" -summary: "Tencent Cloud TokenHub and Token Plan setup (separate keys)" +title: "Tencent Cloud (TokenHub)" +summary: "Tencent Cloud TokenHub setup" read_when: - You want to use Tencent Hy models with OpenClaw - - You need the TokenHub API key or Token Plan (LKEAP) setup + - You need the TokenHub API key setup --- -# Tencent Cloud (TokenHub + Token Plan) +# Tencent Cloud (TokenHub) -The Tencent Cloud provider gives access to Tencent Hy models via two endpoints -with separate API keys: +The Tencent Cloud provider gives access to Tencent Hy models via the TokenHub +endpoint (`tencent-tokenhub`). -- **TokenHub** (`tencent-tokenhub`) — call Hy via Tencent TokenHub Gateway -- **Token Plan** (`tencent-token-plan`) — call Hy via the LKEAP - Token Plan endpoint - -Both providers use OpenAI-compatible APIs. +The provider uses an OpenAI-compatible API. ## Quick start -TokenHub: - ```bash openclaw onboard --auth-choice tokenhub-api-key ``` -Token Plan: - -```bash -openclaw onboard --auth-choice tencent-token-plan-api-key -``` - ## Non-interactive example ```bash -# TokenHub openclaw onboard --non-interactive \ --mode local \ --auth-choice tokenhub-api-key \ --tokenhub-api-key "$TOKENHUB_API_KEY" \ --skip-health \ --accept-risk - -# Token Plan -openclaw onboard --non-interactive \ - --mode local \ - --auth-choice tencent-token-plan-api-key \ - --tencent-token-plan-api-key "$LKEAP_API_KEY" \ - --skip-health \ - --accept-risk ``` ## Providers and endpoints -| Provider | Endpoint | Use case | -| -------------------- | ------------------------------------- | ----------------------- | -| `tencent-tokenhub` | `tokenhub.tencentmaas.com/v1` | Hy via Tencent TokenHub | -| `tencent-token-plan` | `api.lkeap.cloud.tencent.com/plan/v3` | Hy via LKEAP Token Plan | - -Each provider uses its own API key. Setup registers only the selected provider. +| Provider | Endpoint | Use case | +| ------------------ | ----------------------------- | ----------------------- | +| `tencent-tokenhub` | `tokenhub.tencentmaas.com/v1` | Hy via Tencent TokenHub | ## Available models @@ -66,25 +42,19 @@ Each provider uses its own API key. Setup registers only the selected provider. - **hy3-preview** — Hy3 preview (256K context, reasoning, default) -### tencent-token-plan - -- **hy3-preview** — Hy3 preview (256K context, reasoning, default) - ## Notes -- TokenHub model refs use `tencent-tokenhub/`. Token Plan model refs - use `tencent-token-plan/`. +- TokenHub model refs use `tencent-tokenhub/`. - Override pricing and context metadata in `models.providers` if needed. ## Environment note If the Gateway runs as a daemon (launchd/systemd), make sure `TOKENHUB_API_KEY` -or `LKEAP_API_KEY` is available to that process (for example, in -`~/.openclaw/.env` or via `env.shellEnv`). +is available to that process (for example, in `~/.openclaw/.env` or via +`env.shellEnv`). ## Related documentation - [OpenClaw Configuration](/configuration) - [Model Providers](/concepts/model-providers) - [Tencent TokenHub](https://cloud.tencent.com/document/product/1823/130050) -- [Tencent Token Plan API](https://cloud.tencent.com/document/product/1823/130060) diff --git a/extensions/tencent/api.ts b/extensions/tencent/api.ts index 62bafadda2b..92766a19178 100644 --- a/extensions/tencent/api.ts +++ b/extensions/tencent/api.ts @@ -1,11 +1,7 @@ export { buildTokenHubModelDefinition, - buildTokenPlanModelDefinition, TOKENHUB_BASE_URL, TOKENHUB_MODEL_CATALOG, TOKENHUB_PROVIDER_ID, - TOKEN_PLAN_BASE_URL, - TOKEN_PLAN_MODEL_CATALOG, - TOKEN_PLAN_PROVIDER_ID, } from "./models.js"; -export { buildTokenHubProvider, buildTokenPlanProvider } from "./provider-catalog.js"; +export { buildTokenHubProvider } from "./provider-catalog.js"; diff --git a/extensions/tencent/index.ts b/extensions/tencent/index.ts index 2aef592d2ee..42922553cff 100644 --- a/extensions/tencent/index.ts +++ b/extensions/tencent/index.ts @@ -1,19 +1,9 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth-api-key"; import { buildSingleProviderApiKeyCatalog } from "openclaw/plugin-sdk/provider-catalog-shared"; -import { - TOKENHUB_MODEL_CATALOG, - TOKENHUB_PROVIDER_ID, - TOKEN_PLAN_MODEL_CATALOG, - TOKEN_PLAN_PROVIDER_ID, -} from "./models.js"; -import { - applyTokenHubConfig, - TOKENHUB_DEFAULT_MODEL_REF, - applyTokenPlanConfig, - TOKEN_PLAN_DEFAULT_MODEL_REF, -} from "./onboard.js"; -import { buildTokenHubProvider, buildTokenPlanProvider } from "./provider-catalog.js"; +import { TOKENHUB_MODEL_CATALOG, TOKENHUB_PROVIDER_ID } from "./models.js"; +import { applyTokenHubConfig, TOKENHUB_DEFAULT_MODEL_REF } from "./onboard.js"; +import { buildTokenHubProvider } from "./provider-catalog.js"; function buildStaticCatalogEntries(providerId: string, catalog: typeof TOKENHUB_MODEL_CATALOG) { return catalog.map((entry) => ({ @@ -29,9 +19,8 @@ function buildStaticCatalogEntries(providerId: string, catalog: typeof TOKENHUB_ export default definePluginEntry({ id: "tencent", name: "Tencent Cloud Provider", - description: "Bundled Tencent Cloud provider plugins (TokenHub + Token Plan)", + description: "Bundled Tencent Cloud provider plugin (TokenHub)", register(api) { - // ---------- TokenHub provider ---------- api.registerProvider({ id: TOKENHUB_PROVIDER_ID, label: "Tencent TokenHub", @@ -55,7 +44,7 @@ export default definePluginEntry({ choiceLabel: "Tencent TokenHub", groupId: "tencent", groupLabel: "Tencent Cloud", - groupHint: "TokenHub + Token Plan", + groupHint: "Tencent TokenHub", }, }), ], @@ -71,46 +60,5 @@ export default definePluginEntry({ augmentModelCatalog: () => buildStaticCatalogEntries(TOKENHUB_PROVIDER_ID, TOKENHUB_MODEL_CATALOG), }); - - // ---------- Token Plan provider ---------- - api.registerProvider({ - id: TOKEN_PLAN_PROVIDER_ID, - label: "Tencent Token Plan", - docsPath: "/providers/tencent", - envVars: ["LKEAP_API_KEY"], - auth: [ - createProviderApiKeyAuthMethod({ - providerId: TOKEN_PLAN_PROVIDER_ID, - methodId: "api-key", - label: "Tencent Token Plan", - hint: "Hy via Token Plan", - optionKey: "tencentTokenPlanApiKey", - flagName: "--tencent-token-plan-api-key", - envVar: "LKEAP_API_KEY", - promptMessage: "Enter Tencent Token Plan API key", - defaultModel: TOKEN_PLAN_DEFAULT_MODEL_REF, - expectedProviders: [TOKEN_PLAN_PROVIDER_ID], - applyConfig: (cfg) => applyTokenPlanConfig(cfg), - wizard: { - choiceId: "tencent-token-plan-api-key", - choiceLabel: "Tencent Token Plan", - groupId: "tencent", - groupLabel: "Tencent Cloud", - groupHint: "TokenHub + Token Plan", - }, - }), - ], - catalog: { - order: "simple", - run: (ctx) => - buildSingleProviderApiKeyCatalog({ - ctx, - providerId: TOKEN_PLAN_PROVIDER_ID, - buildProvider: buildTokenPlanProvider, - }), - }, - augmentModelCatalog: () => - buildStaticCatalogEntries(TOKEN_PLAN_PROVIDER_ID, TOKEN_PLAN_MODEL_CATALOG), - }); }, }); diff --git a/extensions/tencent/models.ts b/extensions/tencent/models.ts index 131942c64b7..171ffe55bdb 100644 --- a/extensions/tencent/models.ts +++ b/extensions/tencent/models.ts @@ -61,33 +61,3 @@ export function buildTokenHubModelDefinition( api: "openai-completions", }; } - -// ---------- Token Plan provider ---------- - -export const TOKEN_PLAN_BASE_URL = "https://api.lkeap.cloud.tencent.com/plan/v3"; -export const TOKEN_PLAN_PROVIDER_ID = "tencent-token-plan"; - -export const TOKEN_PLAN_MODEL_CATALOG: ModelDefinitionConfig[] = [ - { - id: "hy3-preview", - name: "Hy3 preview (Token Plan)", - reasoning: true, - input: ["text"], - contextWindow: 256_000, - maxTokens: 64_000, - cost: HY3_PREVIEW_COST, - compat: { - supportsUsageInStreaming: true, - supportsReasoningEffort: true, - }, - }, -]; - -export function buildTokenPlanModelDefinition( - model: (typeof TOKEN_PLAN_MODEL_CATALOG)[number], -): ModelDefinitionConfig { - return { - ...model, - api: "openai-completions", - }; -} diff --git a/extensions/tencent/onboard.ts b/extensions/tencent/onboard.ts index 1f66ad5d639..b056342d94c 100644 --- a/extensions/tencent/onboard.ts +++ b/extensions/tencent/onboard.ts @@ -5,13 +5,9 @@ import { } from "openclaw/plugin-sdk/provider-onboard"; import { buildTokenHubModelDefinition, - buildTokenPlanModelDefinition, TOKENHUB_BASE_URL, TOKENHUB_MODEL_CATALOG, TOKENHUB_PROVIDER_ID, - TOKEN_PLAN_BASE_URL, - TOKEN_PLAN_MODEL_CATALOG, - TOKEN_PLAN_PROVIDER_ID, } from "./api.js"; // ---------- TokenHub ---------- @@ -22,8 +18,6 @@ function applyTokenHubProviderConfig(cfg: OpenClawConfig): OpenClawConfig { const models = { ...cfg.agents?.defaults?.models }; models[TOKENHUB_DEFAULT_MODEL_REF] = { ...models[TOKENHUB_DEFAULT_MODEL_REF], - // Provider-specific alias to keep alias resolution deterministic when - // both Tencent providers are enabled (see buildModelAliasIndex). alias: models[TOKENHUB_DEFAULT_MODEL_REF]?.alias ?? "Hy3 preview (TokenHub)", }; @@ -42,32 +36,3 @@ export function applyTokenHubConfig(cfg: OpenClawConfig): OpenClawConfig { TOKENHUB_DEFAULT_MODEL_REF, ); } - -// ---------- Token Plan ---------- - -export const TOKEN_PLAN_DEFAULT_MODEL_REF = `${TOKEN_PLAN_PROVIDER_ID}/hy3-preview`; - -function applyTokenPlanProviderConfig(cfg: OpenClawConfig): OpenClawConfig { - const models = { ...cfg.agents?.defaults?.models }; - models[TOKEN_PLAN_DEFAULT_MODEL_REF] = { - ...models[TOKEN_PLAN_DEFAULT_MODEL_REF], - // Provider-specific alias to keep alias resolution deterministic when - // both Tencent providers are enabled (see buildModelAliasIndex). - alias: models[TOKEN_PLAN_DEFAULT_MODEL_REF]?.alias ?? "Hy3 preview (Token Plan)", - }; - - return applyProviderConfigWithModelCatalog(cfg, { - agentModels: models, - providerId: TOKEN_PLAN_PROVIDER_ID, - api: "openai-completions", - baseUrl: TOKEN_PLAN_BASE_URL, - catalogModels: TOKEN_PLAN_MODEL_CATALOG.map(buildTokenPlanModelDefinition), - }); -} - -export function applyTokenPlanConfig(cfg: OpenClawConfig): OpenClawConfig { - return applyAgentDefaultModelPrimary( - applyTokenPlanProviderConfig(cfg), - TOKEN_PLAN_DEFAULT_MODEL_REF, - ); -} diff --git a/extensions/tencent/openclaw.plugin.json b/extensions/tencent/openclaw.plugin.json index 7fa34e875b0..ddf0791250c 100644 --- a/extensions/tencent/openclaw.plugin.json +++ b/extensions/tencent/openclaw.plugin.json @@ -1,10 +1,9 @@ { "id": "tencent", "enabledByDefault": true, - "providers": ["tencent-tokenhub", "tencent-token-plan"], + "providers": ["tencent-tokenhub"], "providerAuthEnvVars": { - "tencent-tokenhub": ["TOKENHUB_API_KEY"], - "tencent-token-plan": ["LKEAP_API_KEY"] + "tencent-tokenhub": ["TOKENHUB_API_KEY"] }, "providerAuthChoices": [ { @@ -14,24 +13,11 @@ "choiceLabel": "Tencent TokenHub", "groupId": "tencent", "groupLabel": "Tencent Cloud", - "groupHint": "TokenHub + Token Plan", + "groupHint": "Tencent TokenHub", "optionKey": "tokenhubApiKey", "cliFlag": "--tokenhub-api-key", "cliOption": "--tokenhub-api-key ", "cliDescription": "Tencent TokenHub API key" - }, - { - "provider": "tencent-token-plan", - "method": "api-key", - "choiceId": "tencent-token-plan-api-key", - "choiceLabel": "Tencent Token Plan", - "groupId": "tencent", - "groupLabel": "Tencent Cloud", - "groupHint": "TokenHub + Token Plan", - "optionKey": "tencentTokenPlanApiKey", - "cliFlag": "--tencent-token-plan-api-key", - "cliOption": "--tencent-token-plan-api-key ", - "cliDescription": "Tencent Token Plan API key" } ], "configSchema": { diff --git a/extensions/tencent/provider-catalog.ts b/extensions/tencent/provider-catalog.ts index 43fe05f1816..cd7c66a413c 100644 --- a/extensions/tencent/provider-catalog.ts +++ b/extensions/tencent/provider-catalog.ts @@ -1,11 +1,8 @@ import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildTokenHubModelDefinition, - buildTokenPlanModelDefinition, TOKENHUB_BASE_URL, TOKENHUB_MODEL_CATALOG, - TOKEN_PLAN_BASE_URL, - TOKEN_PLAN_MODEL_CATALOG, } from "./models.js"; export function buildTokenHubProvider(): ModelProviderConfig { @@ -15,11 +12,3 @@ export function buildTokenHubProvider(): ModelProviderConfig { models: TOKENHUB_MODEL_CATALOG.map(buildTokenHubModelDefinition), }; } - -export function buildTokenPlanProvider(): ModelProviderConfig { - return { - baseUrl: TOKEN_PLAN_BASE_URL, - api: "openai-completions", - models: TOKEN_PLAN_MODEL_CATALOG.map(buildTokenPlanModelDefinition), - }; -}