qing-client 0.0.22 → 0.0.23

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.
@@ -6,6 +6,7 @@ import { TokenService } from "../service/TokenService";
6
6
  import { UserService } from "../service/UserService";
7
7
  import { AuditLogService } from "../service/AuditLogService";
8
8
  import { ProviderService } from "../service/ProviderService";
9
+ import { UsageService } from "../service/UsageService";
9
10
  import { ClientConfig, UserContext } from "../types";
10
11
  export declare class Client {
11
12
  protected config: ClientConfig;
@@ -17,6 +18,7 @@ export declare class Client {
17
18
  readonly ai: AiService;
18
19
  readonly audit: AuditLogService;
19
20
  readonly provider: ProviderService;
21
+ readonly usage: UsageService;
20
22
  protected isFrontendMode: boolean;
21
23
  constructor(config: ClientConfig);
22
24
  setUserContext(context: UserContext): this;
@@ -9,6 +9,7 @@ const TokenService_1 = require("../service/TokenService");
9
9
  const UserService_1 = require("../service/UserService");
10
10
  const AuditLogService_1 = require("../service/AuditLogService");
11
11
  const ProviderService_1 = require("../service/ProviderService");
12
+ const UsageService_1 = require("../service/UsageService");
12
13
  class Client {
13
14
  constructor(config) {
14
15
  this.config = config;
@@ -21,6 +22,7 @@ class Client {
21
22
  this.ai = new AiService_1.AiService(config);
22
23
  this.audit = new AuditLogService_1.AuditLogService(config);
23
24
  this.provider = new ProviderService_1.ProviderService(config);
25
+ this.usage = new UsageService_1.UsageService(config);
24
26
  }
25
27
  // 后端模式:设置用户上下文
26
28
  setUserContext(context) {
@@ -33,6 +35,7 @@ class Client {
33
35
  this.ai.setUserContext(context);
34
36
  this.audit.setUserContext(context);
35
37
  this.provider.setUserContext(context);
38
+ this.usage.setUserContext(context);
36
39
  }
37
40
  else {
38
41
  console.warn("setUserContext() 仅在后端模式下有效");
@@ -50,6 +53,7 @@ class Client {
50
53
  this.ai.setProjectId(projectId);
51
54
  this.audit.setProjectId(projectId);
52
55
  this.provider.setProjectId(projectId);
56
+ this.usage.setProjectId(projectId);
53
57
  }
54
58
  else {
55
59
  console.warn("setProjectId() 仅在前端模式下有效");
@@ -67,6 +71,7 @@ class Client {
67
71
  this.ai.setAppId(appId);
68
72
  this.audit.setAppId(appId);
69
73
  this.provider.setAppId(appId);
74
+ this.usage.setAppId(appId);
70
75
  }
71
76
  else {
72
77
  console.warn("setAppId() 仅在前端模式下有效");
@@ -84,6 +89,7 @@ class Client {
84
89
  this.ai.setProjectAndApp(projectId, appId);
85
90
  this.audit.setProjectAndApp(projectId, appId);
86
91
  this.provider.setProjectAndApp(projectId, appId);
92
+ this.usage.setProjectAndApp(projectId, appId);
87
93
  }
88
94
  else {
89
95
  console.warn("setProjectAndApp() 仅在前端模式下有效");
@@ -100,6 +106,7 @@ class Client {
100
106
  await this.ai.setToken(token);
101
107
  await this.audit.setToken(token);
102
108
  await this.provider.setToken(token);
109
+ await this.usage.setToken(token);
103
110
  }
104
111
  // 清除认证令牌(两种模式都需要)
105
112
  async clearToken() {
@@ -111,6 +118,7 @@ class Client {
111
118
  await this.ai.clearToken();
112
119
  await this.audit.clearToken();
113
120
  await this.provider.clearToken();
121
+ await this.usage.clearToken();
114
122
  }
115
123
  }
116
124
  exports.Client = Client;
package/lib/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { AigcService } from './service/AigcService';
8
8
  export { AuditLogService } from "./service/AuditLogService";
9
9
  export { FrontHostService } from "./service/FrontHostService";
10
10
  export { ProviderService } from "./service/ProviderService";
11
+ export { UsageService } from "./service/UsageService";
11
12
  export * from './types';
12
13
  export * from './types/msg';
13
14
  export * from './types/token';
@@ -19,3 +20,4 @@ export * from "./types/aigc";
19
20
  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, CreateSessionRequest, UpdateSessionRequest } from "./types/ai";
20
21
  export { BaseClient } from './client/BaseClient';
21
22
  export * from "./types/provider";
23
+ export * from "./types/usage";
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.ProviderService = exports.FrontHostService = exports.AuditLogService = exports.AigcService = exports.FileService = exports.UserService = exports.TokenService = exports.MsgService = exports.AuthService = exports.Client = void 0;
17
+ exports.BaseClient = exports.UsageService = 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; } });
@@ -37,6 +37,8 @@ var FrontHostService_1 = require("./service/FrontHostService");
37
37
  Object.defineProperty(exports, "FrontHostService", { enumerable: true, get: function () { return FrontHostService_1.FrontHostService; } });
38
38
  var ProviderService_1 = require("./service/ProviderService");
39
39
  Object.defineProperty(exports, "ProviderService", { enumerable: true, get: function () { return ProviderService_1.ProviderService; } });
40
+ var UsageService_1 = require("./service/UsageService");
41
+ Object.defineProperty(exports, "UsageService", { enumerable: true, get: function () { return UsageService_1.UsageService; } });
40
42
  // 导出所有类型定义
41
43
  __exportStar(require("./types"), exports);
42
44
  __exportStar(require("./types/msg"), exports);
@@ -49,3 +51,4 @@ __exportStar(require("./types/aigc"), exports);
49
51
  var BaseClient_1 = require("./client/BaseClient");
50
52
  Object.defineProperty(exports, "BaseClient", { enumerable: true, get: function () { return BaseClient_1.BaseClient; } });
51
53
  __exportStar(require("./types/provider"), exports);
54
+ __exportStar(require("./types/usage"), exports);
@@ -0,0 +1,20 @@
1
+ import { BaseClient } from "../client/BaseClient";
2
+ import { ClientConfig, RequestOptions } from "../types";
3
+ import { UsageBaseQuery, UsageByProviderQuery, UsageDailyQuery, UsageSummaryResponse, UsageDailyResponse, UsageByModelResponse, UsageByProviderResponse, UsageByUserResponse, UsageTopQuery, UsageTopResponse } from "../types/usage";
4
+ /**
5
+ * Usage 服务(Usage Service)
6
+ * - 网关模式:前端 -> /api/providers/usage/...
7
+ * - 直连模式:后端 -> /api/v1/usage/...
8
+ * 说明:Usage 模块挂在 Provider 服务里,因此 serviceName 复用 "providers"
9
+ */
10
+ export declare class UsageService extends BaseClient {
11
+ constructor(config: ClientConfig);
12
+ private path;
13
+ private normalizeParams;
14
+ summary(params?: UsageBaseQuery, options?: RequestOptions): Promise<UsageSummaryResponse>;
15
+ daily(params?: UsageDailyQuery, options?: RequestOptions): Promise<UsageDailyResponse>;
16
+ byModel(params?: UsageBaseQuery, options?: RequestOptions): Promise<UsageByModelResponse>;
17
+ byProvider(params?: UsageByProviderQuery, options?: RequestOptions): Promise<UsageByProviderResponse>;
18
+ byUser(params?: UsageBaseQuery, options?: RequestOptions): Promise<UsageByUserResponse>;
19
+ top(params?: UsageTopQuery, options?: RequestOptions): Promise<UsageTopResponse>;
20
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UsageService = void 0;
4
+ const BaseClient_1 = require("../client/BaseClient");
5
+ /**
6
+ * Usage 服务(Usage Service)
7
+ * - 网关模式:前端 -> /api/providers/usage/...
8
+ * - 直连模式:后端 -> /api/v1/usage/...
9
+ * 说明:Usage 模块挂在 Provider 服务里,因此 serviceName 复用 "providers"
10
+ */
11
+ class UsageService extends BaseClient_1.BaseClient {
12
+ constructor(config) {
13
+ super(config, "providers");
14
+ }
15
+ // 前端/后端路径兼容
16
+ path(p) {
17
+ return this.isFrontendMode ? p : `/api/v1${p}`;
18
+ }
19
+ normalizeParams(params) {
20
+ if (!params)
21
+ return undefined;
22
+ const normalized = {
23
+ ...params,
24
+ success: params.success === undefined ? undefined : String(params.success),
25
+ };
26
+ Object.keys(normalized).forEach((k) => normalized[k] === undefined && delete normalized[k]);
27
+ return normalized;
28
+ }
29
+ async summary(params, options) {
30
+ return this.request(this.path("/usage/summary"), {
31
+ ...options,
32
+ method: "GET",
33
+ params: this.normalizeParams(params),
34
+ });
35
+ }
36
+ async daily(params, options) {
37
+ return this.request(this.path("/usage/daily"), {
38
+ ...options,
39
+ method: "GET",
40
+ params: this.normalizeParams(params),
41
+ });
42
+ }
43
+ async byModel(params, options) {
44
+ return this.request(this.path("/usage/by-model"), {
45
+ ...options,
46
+ method: "GET",
47
+ params: this.normalizeParams(params),
48
+ });
49
+ }
50
+ async byProvider(params, options) {
51
+ return this.request(this.path("/usage/by-provider"), {
52
+ ...options,
53
+ method: "GET",
54
+ params: this.normalizeParams(params),
55
+ });
56
+ }
57
+ async byUser(params, options) {
58
+ return this.request(this.path("/usage/by-user"), {
59
+ ...options,
60
+ method: "GET",
61
+ params: this.normalizeParams(params),
62
+ });
63
+ }
64
+ async top(params, options) {
65
+ return this.request(this.path("/usage/top"), {
66
+ ...options,
67
+ method: "GET",
68
+ params: this.normalizeParams(params),
69
+ });
70
+ }
71
+ }
72
+ exports.UsageService = UsageService;
@@ -52,3 +52,4 @@ export interface RequestOptions {
52
52
  appId?: string;
53
53
  }
54
54
  export * from "./provider";
55
+ export * from "./usage";
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./provider"), exports);
18
+ __exportStar(require("./usage"), exports);
@@ -0,0 +1,57 @@
1
+ export interface UsageBaseQuery {
2
+ from?: string;
3
+ to?: string;
4
+ providerId?: string;
5
+ providerClass?: string;
6
+ fullModelName?: string;
7
+ modelId?: string;
8
+ actorId?: string;
9
+ success?: boolean;
10
+ }
11
+ export interface UsageDailyQuery extends UsageBaseQuery {
12
+ timezone?: string;
13
+ }
14
+ export interface UsageByProviderQuery extends UsageBaseQuery {
15
+ groupBy?: "providerId" | "providerClass";
16
+ }
17
+ export interface UsageTopQuery extends UsageBaseQuery {
18
+ by?: "model" | "provider" | "user";
19
+ limit?: number;
20
+ }
21
+ export interface UsageSumResult {
22
+ inputTokens: number;
23
+ outputTokens: number;
24
+ totalTokens: number;
25
+ count: number;
26
+ }
27
+ export interface UsageDailyRow extends UsageSumResult {
28
+ day: string;
29
+ }
30
+ export interface UsageGroupRow extends UsageSumResult {
31
+ key: string;
32
+ }
33
+ export interface UsageScope {
34
+ actorId: string | null;
35
+ }
36
+ export interface UsageSummaryResponse {
37
+ from: string;
38
+ to: string;
39
+ scope: UsageScope;
40
+ data: UsageSumResult;
41
+ }
42
+ export interface UsageDailyResponse {
43
+ from: string;
44
+ to: string;
45
+ scope: UsageScope;
46
+ rows: UsageDailyRow[];
47
+ }
48
+ export interface UsageGroupResponse {
49
+ from: string;
50
+ to: string;
51
+ scope: UsageScope;
52
+ rows: UsageGroupRow[];
53
+ }
54
+ export type UsageByModelResponse = UsageGroupResponse;
55
+ export type UsageByProviderResponse = UsageGroupResponse;
56
+ export type UsageByUserResponse = UsageGroupResponse;
57
+ export type UsageTopResponse = UsageGroupResponse;
@@ -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.22",
3
+ "version": "0.0.23",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "scripts": {