mirror of
https://fastgit.cc/github.com/openclaw/openclaw
synced 2026-04-30 22:12:32 +08:00
feat(tencent): remove Token Plan provider and auth (#69996)
Co-authored-by: albertxyu <albertxyu@tencent.com>
This commit is contained in:
@@ -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/<modelId>`. Token Plan model refs
|
||||
use `tencent-token-plan/<modelId>`.
|
||||
- TokenHub model refs use `tencent-tokenhub/<modelId>`.
|
||||
- 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)
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
@@ -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",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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 <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 <key>",
|
||||
"cliDescription": "Tencent Token Plan API key"
|
||||
}
|
||||
],
|
||||
"configSchema": {
|
||||
|
||||
@@ -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),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user