diff --git a/src/commands/model/model.test.tsx b/src/commands/model/model.test.tsx index d35c1f0fe..ee8fe2a60 100644 --- a/src/commands/model/model.test.tsx +++ b/src/commands/model/model.test.tsx @@ -1280,6 +1280,7 @@ test('/model applies auto provider surface for single-model static descriptor pr 'qwen/qwen3.7-max', 'z-ai/glm-5.2', 'nvidia/nemotron-3-ultra-550b-a55b:free', + 'tencent/hy3', ]) } finally { rendered.instance.unmount() diff --git a/src/integrations/brands/tencent.ts b/src/integrations/brands/tencent.ts new file mode 100644 index 000000000..714a4e4ff --- /dev/null +++ b/src/integrations/brands/tencent.ts @@ -0,0 +1,16 @@ +import { defineBrand } from '../define.js' + +export default defineBrand({ + id: 'tencent', + label: 'Tencent', + canonicalVendorId: 'openai', + defaultCapabilities: { + supportsVision: true, + supportsStreaming: true, + supportsFunctionCalling: true, + supportsJsonMode: true, + supportsReasoning: true, + supportsPreciseTokenCount: false, + }, + modelIds: ['tencent/hy3'], +}) diff --git a/src/integrations/gateways/gitlawb-opengateway.ts b/src/integrations/gateways/gitlawb-opengateway.ts index 0be7ff121..19d8162d0 100644 --- a/src/integrations/gateways/gitlawb-opengateway.ts +++ b/src/integrations/gateways/gitlawb-opengateway.ts @@ -133,6 +133,13 @@ export default defineGateway({ modelDescriptorId: 'nvidia/nemotron-3-ultra-550b-a55b:free', notes: 'Free', }, + { + id: 'opengateway-tencent-hy3', + apiName: 'tencent/hy3', + label: 'Tencent HY3 Free (via Opengateway)', + modelDescriptorId: 'tencent/hy3', + notes: 'Free', + }, ], }, usage: { supported: false }, diff --git a/src/integrations/generated/integrationArtifacts.generated.ts b/src/integrations/generated/integrationArtifacts.generated.ts index 41c691ae8..bdf9f352b 100644 --- a/src/integrations/generated/integrationArtifacts.generated.ts +++ b/src/integrations/generated/integrationArtifacts.generated.ts @@ -57,6 +57,7 @@ import brandNearai from '../brands/nearai.js' import brandNemotron from '../brands/nemotron.js' import brandOpenaiCompatibleAlias from '../brands/openai-compatible-alias.js' import brandQwen from '../brands/qwen.js' +import brandTencent from '../brands/tencent.js' import brandXai from '../brands/xai.js' import brandXiaomiMimo from '../brands/xiaomi-mimo.js' import modelClaude from '../models/claude.js' @@ -74,14 +75,15 @@ import modelNemotron from '../models/nemotron.js' import modelOpenaiCompatibleAlias from '../models/openai-compatible-alias.js' import modelOpencode from '../models/opencode.js' import modelQwen from '../models/qwen.js' +import modelTencent from '../models/tencent.js' import modelXai from '../models/xai.js' import modelXiaomiMimo from '../models/xiaomi-mimo.js' export const VENDOR_DESCRIPTORS = [vendorAnthropic, vendorBankr, vendorDeepseek, vendorFireworks, vendorGemini, vendorMinimax, vendorMoonshot, vendorNearai, vendorOpenai, vendorVenice, vendorXai, vendorXiaomiMimo, vendorZai] as const satisfies readonly VendorDescriptor[] export const GATEWAY_DESCRIPTORS = [gatewayAimlapi, gatewayAtlasCloud, gatewayAtomicChat, gatewayAzureOpenai, gatewayBedrock, gatewayClinepass, gatewayCustom, gatewayDashscopeCn, gatewayDashscopeIntl, gatewayGithubEnterprise, gatewayGithub, gatewayGitlawbOpengateway, gatewayGroq, gatewayHicap, gatewayKimiCode, gatewayLmstudio, gatewayMistral, gatewayNvidiaNim, gatewayOllama, gatewayOpencodeGo, gatewayOpencode, gatewayOpenrouter, gatewayTogether, gatewayVertex, gatewayXiaomiMimoToken] as const satisfies readonly GatewayDescriptor[] export const ANTHROPIC_PROXY_DESCRIPTORS = [] as const satisfies readonly AnthropicProxyDescriptor[] -export const BRAND_DESCRIPTORS = [brandClaude, brandDeepseek, brandFireworks, brandGemini, brandGlm, brandGpt, brandKimi, brandLlama, brandMinimax, brandMistral, brandNearai, brandNemotron, brandOpenaiCompatibleAlias, brandQwen, brandXai, brandXiaomiMimo] as const satisfies readonly BrandDescriptor[] -export const MODEL_DESCRIPTOR_GROUPS = [modelClaude, modelDeepseek, modelFireworksMerged, modelGemini, modelGlm, modelGpt, modelKimi, modelLlama, modelMinimax, modelMistral, modelNearai, modelNemotron, modelOpenaiCompatibleAlias, modelOpencode, modelQwen, modelXai, modelXiaomiMimo] as const satisfies readonly (readonly ModelDescriptor[])[] +export const BRAND_DESCRIPTORS = [brandClaude, brandDeepseek, brandFireworks, brandGemini, brandGlm, brandGpt, brandKimi, brandLlama, brandMinimax, brandMistral, brandNearai, brandNemotron, brandOpenaiCompatibleAlias, brandQwen, brandTencent, brandXai, brandXiaomiMimo] as const satisfies readonly BrandDescriptor[] +export const MODEL_DESCRIPTOR_GROUPS = [modelClaude, modelDeepseek, modelFireworksMerged, modelGemini, modelGlm, modelGpt, modelKimi, modelLlama, modelMinimax, modelMistral, modelNearai, modelNemotron, modelOpenaiCompatibleAlias, modelOpencode, modelQwen, modelTencent, modelXai, modelXiaomiMimo] as const satisfies readonly (readonly ModelDescriptor[])[] export const MODEL_DESCRIPTORS = MODEL_DESCRIPTOR_GROUPS.flat() satisfies readonly ModelDescriptor[] export { PROVIDER_PRESET_MANIFEST, ORDERED_PROVIDER_PRESETS } from './integrationManifest.generated.js' diff --git a/src/integrations/models/tencent.ts b/src/integrations/models/tencent.ts new file mode 100644 index 000000000..43ea6477e --- /dev/null +++ b/src/integrations/models/tencent.ts @@ -0,0 +1,22 @@ +import { defineModel } from '../define.js' + +export default [ + defineModel({ + id: 'tencent/hy3', + label: 'Tencent HY3', + brandId: 'tencent', + vendorId: 'openai', + classification: ['chat', 'reasoning', 'vision', 'coding'], + defaultModel: 'tencent/hy3', + capabilities: { + supportsVision: true, + supportsStreaming: true, + supportsFunctionCalling: true, + supportsJsonMode: true, + supportsReasoning: true, + supportsPreciseTokenCount: false, + }, + contextWindow: 262_144, + maxOutputTokens: 65_536, + }), +]