qing-client 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -131,6 +131,7 @@ class BaseClient {
131
131
  case 'token': return this.config.tokenServiceUrl;
132
132
  case 'aigc': return this.config.aigcServiceUrl;
133
133
  case "logs": return this.config.auditLogServiceUrl;
134
+ case "providers": return this.config.providerServiceUrl;
134
135
  case "gateway-h5": return this.config.gatewayH5ServiceUrl;
135
136
  default: throw new Error(`Unsupported service: ${this.serviceName}`);
136
137
  }
@@ -5,6 +5,7 @@ import { MsgService } from "../service/MsgService";
5
5
  import { TokenService } from "../service/TokenService";
6
6
  import { UserService } from "../service/UserService";
7
7
  import { AuditLogService } from "../service/AuditLogService";
8
+ import { ProviderService } from "../service/ProviderService";
8
9
  import { ClientConfig, UserContext } from "../types";
9
10
  export declare class Client {
10
11
  protected config: ClientConfig;
@@ -15,6 +16,7 @@ export declare class Client {
15
16
  readonly aigc: AigcService;
16
17
  readonly ai: AiService;
17
18
  readonly audit: AuditLogService;
19
+ readonly provider: ProviderService;
18
20
  protected isFrontendMode: boolean;
19
21
  constructor(config: ClientConfig);
20
22
  setUserContext(context: UserContext): this;
@@ -8,6 +8,7 @@ const MsgService_1 = require("../service/MsgService");
8
8
  const TokenService_1 = require("../service/TokenService");
9
9
  const UserService_1 = require("../service/UserService");
10
10
  const AuditLogService_1 = require("../service/AuditLogService");
11
+ const ProviderService_1 = require("../service/ProviderService");
11
12
  class Client {
12
13
  constructor(config) {
13
14
  this.config = config;
@@ -19,6 +20,7 @@ class Client {
19
20
  this.aigc = new AigcService_1.AigcService(config);
20
21
  this.ai = new AiService_1.AiService(config);
21
22
  this.audit = new AuditLogService_1.AuditLogService(config);
23
+ this.provider = new ProviderService_1.ProviderService(config);
22
24
  }
23
25
  // 后端模式:设置用户上下文
24
26
  setUserContext(context) {
@@ -30,6 +32,7 @@ class Client {
30
32
  this.aigc.setUserContext(context);
31
33
  this.ai.setUserContext(context);
32
34
  this.audit.setUserContext(context);
35
+ this.provider.setUserContext(context);
33
36
  }
34
37
  else {
35
38
  console.warn("setUserContext() 仅在后端模式下有效");
@@ -46,6 +49,7 @@ class Client {
46
49
  this.aigc.setProjectId(projectId);
47
50
  this.ai.setProjectId(projectId);
48
51
  this.audit.setProjectId(projectId);
52
+ this.provider.setProjectId(projectId);
49
53
  }
50
54
  else {
51
55
  console.warn("setProjectId() 仅在前端模式下有效");
@@ -62,6 +66,7 @@ class Client {
62
66
  this.aigc.setAppId(appId);
63
67
  this.ai.setAppId(appId);
64
68
  this.audit.setAppId(appId);
69
+ this.provider.setAppId(appId);
65
70
  }
66
71
  else {
67
72
  console.warn("setAppId() 仅在前端模式下有效");
@@ -78,6 +83,7 @@ class Client {
78
83
  this.aigc.setProjectAndApp(projectId, appId);
79
84
  this.ai.setProjectAndApp(projectId, appId);
80
85
  this.audit.setProjectAndApp(projectId, appId);
86
+ this.provider.setProjectAndApp(projectId, appId);
81
87
  }
82
88
  else {
83
89
  console.warn("setProjectAndApp() 仅在前端模式下有效");
@@ -93,6 +99,7 @@ class Client {
93
99
  await this.aigc.setToken(token);
94
100
  await this.ai.setToken(token);
95
101
  await this.audit.setToken(token);
102
+ await this.provider.setToken(token);
96
103
  }
97
104
  // 清除认证令牌(两种模式都需要)
98
105
  async clearToken() {
@@ -103,6 +110,7 @@ class Client {
103
110
  await this.aigc.clearToken();
104
111
  await this.ai.clearToken();
105
112
  await this.audit.clearToken();
113
+ await this.provider.clearToken();
106
114
  }
107
115
  }
108
116
  exports.Client = Client;
package/lib/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export { FileService } from './service/FileService';
7
7
  export { AigcService } from './service/AigcService';
8
8
  export { AuditLogService } from "./service/AuditLogService";
9
9
  export { FrontHostService } from "./service/FrontHostService";
10
+ export { ProviderService } from "./service/ProviderService";
10
11
  export * from './types';
11
12
  export * from './types/msg';
12
13
  export * from './types/token';
@@ -17,3 +18,4 @@ export * from "./types/audit";
17
18
  export * from "./types/aigc";
18
19
  export { ApiSuccessResponse, ApiErrorResponse, PaginatedResponse, ChatCompletionRequest, ChatCompletionResponse, ChatCompletionStreamResponse, ProviderListItem, ProviderDetail, ProviderModel, ModelListItem, ModelDetail, ModelConfig, CreateAssistantRequest, UpdateAssistantRequest, AssistantResponse, AssistantListResponse, SessionMessage, SessionResponse, SessionListResponse, SessionDetailResponse, SessionStatistics, PaginatedSessionMessageResponse, SessionMessageDetail, BatchDeleteSessionsResponse, AssistantModelsResponse, ModelInfoResponse, AddMessageRequest, SwitchModelRequest, } from "./types/ai";
19
20
  export { BaseClient } from './client/BaseClient';
21
+ export * from "./types/provider";
package/lib/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.BaseClient = exports.FrontHostService = exports.AuditLogService = exports.AigcService = exports.FileService = exports.UserService = exports.TokenService = exports.MsgService = exports.AuthService = exports.Client = void 0;
17
+ exports.BaseClient = exports.ProviderService = exports.FrontHostService = exports.AuditLogService = exports.AigcService = exports.FileService = exports.UserService = exports.TokenService = exports.MsgService = exports.AuthService = exports.Client = void 0;
18
18
  // 导出核心客户端类
19
19
  var client_1 = require("./client");
20
20
  Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_1.Client; } });
@@ -35,6 +35,8 @@ var AuditLogService_1 = require("./service/AuditLogService");
35
35
  Object.defineProperty(exports, "AuditLogService", { enumerable: true, get: function () { return AuditLogService_1.AuditLogService; } });
36
36
  var FrontHostService_1 = require("./service/FrontHostService");
37
37
  Object.defineProperty(exports, "FrontHostService", { enumerable: true, get: function () { return FrontHostService_1.FrontHostService; } });
38
+ var ProviderService_1 = require("./service/ProviderService");
39
+ Object.defineProperty(exports, "ProviderService", { enumerable: true, get: function () { return ProviderService_1.ProviderService; } });
38
40
  // 导出所有类型定义
39
41
  __exportStar(require("./types"), exports);
40
42
  __exportStar(require("./types/msg"), exports);
@@ -46,3 +48,4 @@ __exportStar(require("./types/audit"), exports);
46
48
  __exportStar(require("./types/aigc"), exports);
47
49
  var BaseClient_1 = require("./client/BaseClient");
48
50
  Object.defineProperty(exports, "BaseClient", { enumerable: true, get: function () { return BaseClient_1.BaseClient; } });
51
+ __exportStar(require("./types/provider"), exports);
@@ -1,6 +1,6 @@
1
1
  import { BaseClient } from "../client/BaseClient";
2
2
  import { ClientConfig, RequestOptions, PaginatedResponse } from "../types";
3
- import { File, CreateFileRequest, UpdateFileRequest, FileListQuery } from "../types/file";
3
+ import { File, CreateFileRequest, UpdateFileRequest, FileListQuery, Folder, FolderItemsResponse, FolderTreeNode, CreateFolderRequest, UpdateFolderRequest, OSSConfig, GenerateOSSUploadSignRequest, GenerateOSSUploadSignResponse, OSSCallbackQuery, OSSCallbackBody, OSSCallbackResponse } from "../types/file";
4
4
  export declare class FileService extends BaseClient {
5
5
  constructor(config: ClientConfig);
6
6
  /**
@@ -22,9 +22,7 @@ export declare class FileService extends BaseClient {
22
22
  * 删除文件
23
23
  * DELETE /api/files/:id (网关转发到 /api/v1/files/:id)
24
24
  */
25
- deleteFile(fileId: string, options?: RequestOptions): Promise<{
26
- message: string;
27
- }>;
25
+ deleteFile(fileId: string, options?: RequestOptions): Promise<null>;
28
26
  /**
29
27
  * 获取文件列表
30
28
  * GET /api/files (网关转发到 /api/v1/files)
@@ -34,67 +32,45 @@ export declare class FileService extends BaseClient {
34
32
  * 生成 OSS 上传签名
35
33
  * POST /api/files/oss/generate-sign (网关转发到 /api/v1/files/oss/generate-sign)
36
34
  */
37
- generateOSSUploadSign(request: {
38
- taskKey?: string;
39
- fileName?: string;
40
- fileSize?: number;
41
- taskId?: string;
42
- folderId?: string;
43
- }, options?: RequestOptions): Promise<{
44
- policy: string;
45
- signature: string;
46
- OSSAccessKeyId: string;
47
- host: string;
48
- expire: string;
49
- callback?: string;
50
- key: string;
51
- taskId: string;
52
- jwt: string;
53
- projectId?: string;
54
- }>;
35
+ generateOSSUploadSign(request: GenerateOSSUploadSignRequest, options?: RequestOptions): Promise<GenerateOSSUploadSignResponse>;
55
36
  /**
56
37
  * 获取项目 OSS 配置
57
38
  * GET /api/files/oss/config/:projectId (网关转发到 /api/v1/files/oss/config/:projectId)
58
39
  */
59
- getOSSConfig(projectId: string, options?: RequestOptions): Promise<any>;
40
+ getOSSConfig(projectId: string, options?: RequestOptions): Promise<OSSConfig>;
60
41
  /**
61
42
  * 创建文件夹
62
43
  * POST /api/files/folders (网关转发到 /api/v1/files/folders)
63
44
  */
64
- createFolder(request: {
65
- name: string;
66
- parentId?: string;
67
- description?: string;
68
- }, options?: RequestOptions): Promise<any>;
45
+ createFolder(request: CreateFolderRequest, options?: RequestOptions): Promise<Folder>;
69
46
  /**
70
47
  * 获取文件夹详情
71
48
  * GET /api/files/folders/:id (网关转发到 /api/v1/files/folders/:id)
72
49
  */
73
- getFolderById(folderId: string, options?: RequestOptions): Promise<any>;
50
+ getFolderById(folderId: string, options?: RequestOptions): Promise<Folder>;
74
51
  /**
75
52
  * 更新文件夹
76
53
  * PUT /api/files/folders/:id (网关转发到 /api/v1/files/folders/:id)
77
54
  */
78
- updateFolder(folderId: string, updateData: {
79
- name?: string;
80
- description?: string;
81
- parentId?: string;
82
- }, options?: RequestOptions): Promise<any>;
55
+ updateFolder(folderId: string, updateData: UpdateFolderRequest, options?: RequestOptions): Promise<Folder>;
83
56
  /**
84
57
  * 删除文件夹
85
58
  * DELETE /api/files/folders/:id (网关转发到 /api/v1/files/folders/:id)
86
59
  */
87
- deleteFolder(folderId: string, options?: RequestOptions): Promise<{
88
- message: string;
89
- }>;
60
+ deleteFolder(folderId: string, options?: RequestOptions): Promise<null>;
90
61
  /**
91
62
  * 获取文件夹列表
92
63
  * GET /api/files/folders?parentId=xxx (网关转发到 /api/v1/files/folders?parentId=xxx)
93
64
  */
94
- listFolders(parentId?: string, options?: RequestOptions): Promise<any[]>;
65
+ listFolders(parentId?: string, options?: RequestOptions): Promise<FolderItemsResponse<Folder>>;
95
66
  /**
96
67
  * 获取文件夹树
97
68
  * GET /api/files/folders/tree?parentId=xxx (网关转发到 /api/v1/files/folders/tree?parentId=xxx)
98
69
  */
99
- getFolderTree(parentId?: string, options?: RequestOptions): Promise<any[]>;
70
+ getFolderTree(parentId?: string, options?: RequestOptions): Promise<FolderItemsResponse<FolderTreeNode>>;
71
+ /**
72
+ * OSS 上传回调(通常由 OSS 服务端调用;此方法主要用于联调/测试)
73
+ * POST /api/files/oss/callback
74
+ */
75
+ handleOSSCallback(query: OSSCallbackQuery, body: OSSCallbackBody, options?: RequestOptions): Promise<OSSCallbackResponse>;
100
76
  }
@@ -189,5 +189,21 @@ class FileService extends BaseClient_1.BaseClient {
189
189
  params
190
190
  });
191
191
  }
192
+ /**
193
+ * OSS 上传回调(通常由 OSS 服务端调用;此方法主要用于联调/测试)
194
+ * POST /api/files/oss/callback
195
+ */
196
+ async handleOSSCallback(query, body, options) {
197
+ return this.request('/oss/callback', {
198
+ ...options,
199
+ method: 'POST',
200
+ params: {
201
+ 'x-jwt': query['x-jwt'],
202
+ 'x-taskid': query['x-taskid'],
203
+ folderId: query.folderId,
204
+ },
205
+ body,
206
+ });
207
+ }
192
208
  }
193
209
  exports.FileService = FileService;
@@ -0,0 +1,40 @@
1
+ import { BaseClient } from "../client/BaseClient";
2
+ import { ClientConfig, RequestOptions } from "../types";
3
+ import { ChatCompletionsRequest, ChatCompletionsResponse, CreateProviderRequest, ProviderItem, ProviderModel, UpdateProviderRequest, UpsertManyModelsBody } from "../types/provider";
4
+ /**
5
+ * 大模型供应商服务(Provider Service)
6
+ * - 网关模式:前端 -> /api/providers/...
7
+ * - 直连模式:后端 -> /api/v1/...
8
+ */
9
+ export declare class ProviderService extends BaseClient {
10
+ constructor(config: ClientConfig);
11
+ private path;
12
+ chatCompletions(body: ChatCompletionsRequest, options?: RequestOptions): Promise<ChatCompletionsResponse>;
13
+ listProviders(options?: RequestOptions): Promise<ProviderItem[]>;
14
+ getProvider(providerId: string, options?: RequestOptions): Promise<ProviderItem>;
15
+ createProvider(body: CreateProviderRequest, options?: RequestOptions): Promise<ProviderItem>;
16
+ updateProvider(providerId: string, body: UpdateProviderRequest, options?: RequestOptions): Promise<ProviderItem>;
17
+ deleteProvider(providerId: string, options?: RequestOptions): Promise<void>;
18
+ listProviderModels(providerId: string, params?: {
19
+ onlySupported?: boolean;
20
+ onlyEnabled?: boolean;
21
+ }, options?: RequestOptions): Promise<ProviderModel[]>;
22
+ listGlobalModels(params?: {
23
+ providerId?: string;
24
+ onlySupported?: boolean;
25
+ onlyEnabled?: boolean;
26
+ q?: string;
27
+ }, options?: RequestOptions): Promise<ProviderModel[]>;
28
+ upsertManyModels(body: UpsertManyModelsBody, options?: RequestOptions): Promise<{
29
+ upserted: number;
30
+ updated: number;
31
+ }>;
32
+ validateApiKey(providerId: string, options?: RequestOptions): Promise<{
33
+ valid: boolean;
34
+ meta?: {
35
+ statusCode?: number;
36
+ requestId?: string;
37
+ };
38
+ }>;
39
+ getRateLimit(providerId: string, options?: RequestOptions): Promise<any>;
40
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProviderService = void 0;
4
+ const BaseClient_1 = require("../client/BaseClient");
5
+ /**
6
+ * 大模型供应商服务(Provider Service)
7
+ * - 网关模式:前端 -> /api/providers/...
8
+ * - 直连模式:后端 -> /api/v1/...
9
+ */
10
+ class ProviderService extends BaseClient_1.BaseClient {
11
+ constructor(config) {
12
+ super(config, "providers");
13
+ }
14
+ // 前端/后端路径兼容
15
+ path(p) {
16
+ return this.isFrontendMode ? p : `/api/v1${p}`;
17
+ }
18
+ // ===== Runtime (统一入口) =====
19
+ async chatCompletions(body, options) {
20
+ return this.request(this.path("/chat/completions"), {
21
+ ...options,
22
+ method: "POST",
23
+ body,
24
+ });
25
+ }
26
+ // ===== Provider CRUD =====
27
+ async listProviders(options) {
28
+ const data = await this.request(this.path("/providers"), {
29
+ ...options,
30
+ method: "GET",
31
+ });
32
+ return data;
33
+ }
34
+ async getProvider(providerId, options) {
35
+ return this.request(this.path(`/providers/${providerId}`), {
36
+ ...options,
37
+ method: "GET",
38
+ });
39
+ }
40
+ async createProvider(body, options) {
41
+ return this.request(this.path("/providers"), {
42
+ ...options,
43
+ method: "POST",
44
+ body,
45
+ });
46
+ }
47
+ async updateProvider(providerId, body, options) {
48
+ return this.request(this.path(`/providers/${providerId}`), {
49
+ ...options,
50
+ method: "PUT",
51
+ body,
52
+ });
53
+ }
54
+ async deleteProvider(providerId, options) {
55
+ return this.request(this.path(`/providers/${providerId}`), {
56
+ ...options,
57
+ method: "DELETE",
58
+ });
59
+ }
60
+ // ===== Models =====
61
+ async listProviderModels(providerId, params, options) {
62
+ return this.request(this.path(`/providers/${providerId}/models`), {
63
+ ...options,
64
+ method: "GET",
65
+ params,
66
+ });
67
+ }
68
+ async listGlobalModels(params, options) {
69
+ return this.request(this.path("/models"), {
70
+ ...options,
71
+ method: "GET",
72
+ params,
73
+ });
74
+ }
75
+ async upsertManyModels(body, options) {
76
+ return this.request(this.path("/internal/models/upsertMany"), {
77
+ ...options,
78
+ method: "POST",
79
+ body,
80
+ });
81
+ }
82
+ // ===== Runtime 辅助 =====
83
+ async validateApiKey(providerId, options) {
84
+ return this.request(this.path(`/providers/${providerId}/validate-api-key`), {
85
+ ...options,
86
+ method: "POST",
87
+ body: {},
88
+ });
89
+ }
90
+ async getRateLimit(providerId, options) {
91
+ return this.request(this.path(`/providers/${providerId}/rate-limit`), {
92
+ ...options,
93
+ method: "GET",
94
+ });
95
+ }
96
+ }
97
+ exports.ProviderService = ProviderService;
@@ -12,7 +12,7 @@ export interface File {
12
12
  acl: 'private' | 'public-read';
13
13
  etag?: string;
14
14
  contentMd5?: string;
15
- folderId?: string;
15
+ folderId?: string | null;
16
16
  createdAt: string;
17
17
  updatedAt: string;
18
18
  }
@@ -43,10 +43,77 @@ export interface FileListQuery {
43
43
  taskId?: string;
44
44
  acl?: 'private' | 'public-read';
45
45
  }
46
- export interface FileListResponse {
47
- data: File[];
48
- total: number;
49
- page: number;
50
- pageSize: number;
51
- totalPages: number;
46
+ export interface Folder {
47
+ id: string;
48
+ name: string;
49
+ parentId?: string | null;
50
+ description?: string;
51
+ createdAt: string;
52
+ updatedAt: string;
53
+ }
54
+ export interface CreateFolderRequest {
55
+ name: string;
56
+ parentId?: string;
57
+ description?: string;
58
+ }
59
+ export interface UpdateFolderRequest {
60
+ name?: string;
61
+ parentId?: string | null;
62
+ description?: string;
63
+ }
64
+ /**
65
+ * folders/list、folders/tree 实际返回:
66
+ * { success, message, data: { items: [...] } }
67
+ * SDK 的 BaseClient.request<T>() 会解包到 data,所以这里定义 items wrapper。
68
+ */
69
+ export interface FolderItemsResponse<TItem = Folder> {
70
+ items: TItem[];
71
+ }
72
+ export type FolderTreeNode = Folder & {
73
+ children?: FolderTreeNode[];
74
+ };
75
+ export interface OSSConfig {
76
+ enabledTasks: string[];
77
+ defaultTask: string;
78
+ isPublic?: boolean;
79
+ }
80
+ export interface GenerateOSSUploadSignRequest {
81
+ taskKey?: string;
82
+ fileName?: string;
83
+ fileSize?: number;
84
+ taskId?: string;
85
+ folderId?: string;
86
+ }
87
+ export interface GenerateOSSUploadSignResponse {
88
+ policy: string;
89
+ signature: string;
90
+ OSSAccessKeyId: string;
91
+ host: string;
92
+ expire: string;
93
+ callback?: string;
94
+ acl?: string;
95
+ key: string;
96
+ taskId: string;
97
+ jwt: string;
98
+ projectId?: string;
99
+ }
100
+ export interface OSSCallbackQuery {
101
+ 'x-jwt': string;
102
+ 'x-taskid': string;
103
+ folderId?: string;
104
+ }
105
+ export interface OSSCallbackBody {
106
+ bucket?: string;
107
+ object: string;
108
+ etag?: string;
109
+ size?: string;
110
+ mimeType?: string;
111
+ acl?: 'private' | 'public-read' | string;
112
+ contentMd5?: string;
113
+ 'x-service'?: string;
114
+ }
115
+ export interface OSSCallbackResponse {
116
+ id: string;
117
+ taskId: string;
118
+ url: string;
52
119
  }
package/lib/types/file.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  // client/npm/src/types/file.ts
3
- // 文件模型和请求类型
3
+ // 文件服务(files)相关类型:文件 / 文件夹 / OSS
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -30,6 +30,7 @@ export interface ClientConfig {
30
30
  tokenServiceUrl?: string;
31
31
  aigcServiceUrl?: string;
32
32
  auditLogServiceUrl?: string;
33
+ providerServiceUrl?: string;
33
34
  gatewayH5ServiceUrl?: string;
34
35
  tokenStorage?: TokenStorage;
35
36
  projectId?: string;
@@ -50,3 +51,4 @@ export interface RequestOptions {
50
51
  projectId?: string;
51
52
  appId?: string;
52
53
  }
54
+ export * from "./provider";
@@ -1,2 +1,17 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./provider"), exports);
@@ -0,0 +1,119 @@
1
+ export type ProviderClass = "openai" | "anthropic" | "gemini" | "azure_openai" | "mock";
2
+ export type ProviderStatus = "enabled" | "disabled";
3
+ export interface ProviderCredential {
4
+ hasApiKey: boolean;
5
+ apiKeyLast4?: string;
6
+ }
7
+ export interface ProviderRuntime {
8
+ timeoutMs: number;
9
+ maxRetries: number;
10
+ extra?: Record<string, any>;
11
+ }
12
+ export interface ProviderItem {
13
+ id: string;
14
+ name: string;
15
+ providerClass: ProviderClass;
16
+ baseUrl?: string;
17
+ status: ProviderStatus;
18
+ defaultModel?: string;
19
+ credential: ProviderCredential;
20
+ runtime: ProviderRuntime;
21
+ createdAt?: string;
22
+ updatedAt?: string;
23
+ }
24
+ export interface ProviderListResponse {
25
+ providers: ProviderItem[];
26
+ }
27
+ export interface ModelPricing {
28
+ currency?: string;
29
+ inputPer1k?: number;
30
+ outputPer1k?: number;
31
+ }
32
+ export interface ModelCapabilities {
33
+ text: boolean;
34
+ vision?: boolean;
35
+ tools?: boolean;
36
+ json?: boolean;
37
+ audio?: boolean;
38
+ embeddings?: boolean;
39
+ }
40
+ export interface ModelLimits {
41
+ contextWindow?: number;
42
+ maxOutputTokens?: number;
43
+ }
44
+ export interface ProviderModel {
45
+ providerId: string;
46
+ modelId: string;
47
+ fullModelName: string;
48
+ displayName?: string;
49
+ enabled: boolean;
50
+ supported: boolean;
51
+ pricing?: ModelPricing;
52
+ capabilities: ModelCapabilities;
53
+ limits?: ModelLimits;
54
+ tags?: string[];
55
+ createdAt?: string;
56
+ updatedAt?: string;
57
+ }
58
+ export interface UpsertModelItem {
59
+ id?: string;
60
+ modelId?: string;
61
+ name?: string;
62
+ displayName?: string;
63
+ enabled?: boolean;
64
+ supported?: boolean;
65
+ inputPrice?: number;
66
+ outputPrice?: number;
67
+ perUnit?: number;
68
+ currency?: string;
69
+ capabilities?: Partial<ModelCapabilities>;
70
+ contextWindow?: number;
71
+ maxOutputTokens?: number;
72
+ tags?: string[];
73
+ description?: string;
74
+ hasExtraCost?: boolean;
75
+ extraCostNote?: string;
76
+ company?: string;
77
+ providerClass?: string;
78
+ }
79
+ export interface UpsertManyModelsBody {
80
+ providerId: string;
81
+ models: UpsertModelItem[];
82
+ }
83
+ export interface CreateProviderRequest {
84
+ providerId: string;
85
+ name: string;
86
+ providerClass: ProviderClass;
87
+ baseUrl?: string;
88
+ defaultModel?: string;
89
+ apiKey?: string;
90
+ apiKeyEncrypted?: string;
91
+ apiKeyLast4?: string;
92
+ runtime?: Partial<ProviderRuntime>;
93
+ }
94
+ export interface UpdateProviderRequest {
95
+ name?: string;
96
+ providerClass?: ProviderClass;
97
+ baseUrl?: string;
98
+ defaultModel?: string;
99
+ status?: ProviderStatus;
100
+ apiKey?: string;
101
+ apiKeyEncrypted?: string;
102
+ apiKeyLast4?: string;
103
+ runtime?: Partial<ProviderRuntime>;
104
+ }
105
+ export interface ChatMessage {
106
+ role: "system" | "user" | "assistant" | "function";
107
+ content: string;
108
+ name?: string;
109
+ function_call?: any;
110
+ }
111
+ export interface ChatCompletionsRequest {
112
+ model: string;
113
+ messages: ChatMessage[];
114
+ temperature?: number;
115
+ max_tokens?: number;
116
+ requiredCapabilities?: Array<"text" | "vision" | "tools" | "json" | "audio" | "embeddings">;
117
+ [key: string]: any;
118
+ }
119
+ export type ChatCompletionsResponse = any;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qing-client",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "scripts": {