mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-30 12:40:44 +00:00
fix: provide available models of all configured authTypes
This commit is contained in:
parent
bd900d3668
commit
889c49f0f4
10 changed files with 344 additions and 74 deletions
55
packages/cli/src/utils/acpModelUtils.ts
Normal file
55
packages/cli/src/utils/acpModelUtils.ts
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright 2025 Qwen Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
import { AuthType } from '@qwen-code/qwen-code-core';
|
||||
import { z } from 'zod';
|
||||
|
||||
/**
|
||||
* ACP model IDs are represented as `${modelId}(${authType})` in the ACP protocol.
|
||||
*/
|
||||
export function formatAcpModelId(modelId: string, authType: AuthType): string {
|
||||
return `${modelId}(${authType})`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the base model id from an ACP model id string.
|
||||
*
|
||||
* If the string ends with `(...)`, the suffix is removed; otherwise returns the
|
||||
* trimmed input as-is.
|
||||
*/
|
||||
export function parseAcpBaseModelId(value: string): string {
|
||||
const trimmed = value.trim();
|
||||
const closeIdx = trimmed.lastIndexOf(')');
|
||||
const openIdx = trimmed.lastIndexOf('(');
|
||||
if (openIdx >= 0 && closeIdx === trimmed.length - 1 && openIdx < closeIdx) {
|
||||
return trimmed.slice(0, openIdx);
|
||||
}
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses an ACP model option string into `{ modelId, authType? }`.
|
||||
*
|
||||
* If the string ends with `(...)` and `...` is a valid `AuthType`, returns both;
|
||||
* otherwise returns the trimmed input as `modelId` only.
|
||||
*/
|
||||
export function parseAcpModelOption(input: string): {
|
||||
modelId: string;
|
||||
authType?: AuthType;
|
||||
} {
|
||||
const trimmed = input.trim();
|
||||
const closeIdx = trimmed.lastIndexOf(')');
|
||||
const openIdx = trimmed.lastIndexOf('(');
|
||||
if (openIdx >= 0 && closeIdx === trimmed.length - 1 && openIdx < closeIdx) {
|
||||
const maybeModelId = trimmed.slice(0, openIdx);
|
||||
const maybeAuthType = trimmed.slice(openIdx + 1, closeIdx);
|
||||
const parsedAuthType = z.nativeEnum(AuthType).safeParse(maybeAuthType);
|
||||
if (parsedAuthType.success) {
|
||||
return { modelId: maybeModelId, authType: parsedAuthType.data };
|
||||
}
|
||||
}
|
||||
return { modelId: trimmed };
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue