1
0
forked from Leaf/amber-ui

改进 首页

This commit is contained in:
ivamp 2024-09-25 12:29:36 +08:00
parent 0068d9a0e9
commit 2b771db5dd
9 changed files with 902 additions and 134 deletions

View File

@ -263,6 +263,25 @@ definitions:
user_id: user_id:
type: string type: string
type: object type: object
page.PagedResult-schema_AssistantPublic:
properties:
data:
items:
$ref: '#/definitions/schema.AssistantPublic'
type: array
page:
description: 当前页码
type: integer
page_size:
description: 每页大小
type: integer
total_count:
description: 数据总条数
type: integer
total_pages:
description: 总页数
type: integer
type: object
schema.AddPublicChatMessageRequest: schema.AddPublicChatMessageRequest:
properties: properties:
assistant_key: assistant_key:
@ -325,6 +344,15 @@ definitions:
required: required:
- library_id - library_id
type: object type: object
schema.AssistantPublic:
properties:
description:
type: string
id:
type: integer
name:
type: string
type: object
schema.AssistantUpdateRequest: schema.AssistantUpdateRequest:
properties: properties:
description: description:
@ -353,6 +381,11 @@ definitions:
prompt: prompt:
maxLength: 512 maxLength: 512
type: string type: string
public:
enum:
- true
- false
type: boolean
temperature: temperature:
enum: enum:
- 0.1 - 0.1
@ -590,6 +623,13 @@ definitions:
success: success:
type: boolean type: boolean
type: object type: object
schema.SiteUsageResponse:
properties:
month_tokens:
type: integer
month_tool_calls:
type: integer
type: object
schema.TokenUsage: schema.TokenUsage:
properties: properties:
completion_tokens: completion_tokens:
@ -1125,10 +1165,14 @@ paths:
summary: 绑定 Tool summary: 绑定 Tool
tags: tags:
- assistant - assistant
/api/v1/assistants/public: /api/v1/assistants/favorites:
get: get:
consumes: consumes:
- application/json - application/json
parameters:
- in: query
name: page
type: integer
produces: produces:
- application/json - application/json
responses: responses:
@ -1139,9 +1183,36 @@ paths:
- $ref: '#/definitions/schema.ResponseBody' - $ref: '#/definitions/schema.ResponseBody'
- properties: - properties:
data: data:
items: $ref: '#/definitions/page.PagedResult-schema_AssistantPublic'
$ref: '#/definitions/entity.Assistant' type: object
type: array "400":
description: Bad Request
schema:
$ref: '#/definitions/schema.ResponseBody'
security:
- ApiKeyAuth: []
summary: 收藏的助理列表
tags:
- assistant
/api/v1/assistants/public:
get:
consumes:
- application/json
parameters:
- in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/page.PagedResult-schema_AssistantPublic'
type: object type: object
"400": "400":
description: Bad Request description: Bad Request
@ -1152,6 +1223,65 @@ paths:
summary: 获取公开的助理列表 summary: 获取公开的助理列表
tags: tags:
- assistant - assistant
/api/v1/assistants/public/{id}:
delete:
consumes:
- application/json
parameters:
- in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/schema.AssistantPublic'
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/schema.ResponseBody'
security:
- ApiKeyAuth: []
summary: 取消收藏助理
tags:
- assistant
post:
consumes:
- application/json
parameters:
- in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/schema.AssistantPublic'
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/schema.ResponseBody'
security:
- ApiKeyAuth: []
summary: 收藏助理
tags:
- assistant
/api/v1/chat_public: /api/v1/chat_public:
get: get:
consumes: consumes:
@ -2347,6 +2477,25 @@ paths:
summary: 校验 Discovery 语法 summary: 校验 Discovery 语法
tags: tags:
- tool - tool
/api/v1/usage:
get:
consumes:
- application/json
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/schema.SiteUsageResponse'
type: object
summary: 获取站点 Usage
tags:
- usage
securityDefinitions: securityDefinitions:
ApiKeyAuth: ApiKeyAuth:
in: header in: header

View File

@ -23,6 +23,37 @@ import type { RequestArgs } from './base';
// @ts-ignore // @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base';
/**
*
* @export
* @interface ApiV1AssistantsFavoritesGet200Response
*/
export interface ApiV1AssistantsFavoritesGet200Response {
/**
*
* @type {PagePagedResultSchemaAssistantPublic}
* @memberof ApiV1AssistantsFavoritesGet200Response
*/
'data'?: PagePagedResultSchemaAssistantPublic;
/**
*
* @type {string}
* @memberof ApiV1AssistantsFavoritesGet200Response
*/
'error'?: string;
/**
*
* @type {string}
* @memberof ApiV1AssistantsFavoritesGet200Response
*/
'message'?: string;
/**
*
* @type {boolean}
* @memberof ApiV1AssistantsFavoritesGet200Response
*/
'success'?: boolean;
}
/** /**
* *
* @export * @export
@ -209,6 +240,37 @@ export interface ApiV1AssistantsPost200Response {
*/ */
'success'?: boolean; 'success'?: boolean;
} }
/**
*
* @export
* @interface ApiV1AssistantsPublicIdPost200Response
*/
export interface ApiV1AssistantsPublicIdPost200Response {
/**
*
* @type {SchemaAssistantPublic}
* @memberof ApiV1AssistantsPublicIdPost200Response
*/
'data'?: SchemaAssistantPublic;
/**
*
* @type {string}
* @memberof ApiV1AssistantsPublicIdPost200Response
*/
'error'?: string;
/**
*
* @type {string}
* @memberof ApiV1AssistantsPublicIdPost200Response
*/
'message'?: string;
/**
*
* @type {boolean}
* @memberof ApiV1AssistantsPublicIdPost200Response
*/
'success'?: boolean;
}
/** /**
* *
* @export * @export
@ -631,6 +693,37 @@ export interface ApiV1ToolsPost200Response {
*/ */
'success'?: boolean; 'success'?: boolean;
} }
/**
*
* @export
* @interface ApiV1UsageGet200Response
*/
export interface ApiV1UsageGet200Response {
/**
*
* @type {SchemaSiteUsageResponse}
* @memberof ApiV1UsageGet200Response
*/
'data'?: SchemaSiteUsageResponse;
/**
*
* @type {string}
* @memberof ApiV1UsageGet200Response
*/
'error'?: string;
/**
*
* @type {string}
* @memberof ApiV1UsageGet200Response
*/
'message'?: string;
/**
*
* @type {boolean}
* @memberof ApiV1UsageGet200Response
*/
'success'?: boolean;
}
/** /**
* *
* @export * @export
@ -1333,6 +1426,43 @@ export interface EntityTool {
*/ */
'user_id'?: string; 'user_id'?: string;
} }
/**
*
* @export
* @interface PagePagedResultSchemaAssistantPublic
*/
export interface PagePagedResultSchemaAssistantPublic {
/**
*
* @type {Array<SchemaAssistantPublic>}
* @memberof PagePagedResultSchemaAssistantPublic
*/
'data'?: Array<SchemaAssistantPublic>;
/**
*
* @type {number}
* @memberof PagePagedResultSchemaAssistantPublic
*/
'page'?: number;
/**
*
* @type {number}
* @memberof PagePagedResultSchemaAssistantPublic
*/
'page_size'?: number;
/**
*
* @type {number}
* @memberof PagePagedResultSchemaAssistantPublic
*/
'total_count'?: number;
/**
*
* @type {number}
* @memberof PagePagedResultSchemaAssistantPublic
*/
'total_pages'?: number;
}
/** /**
* *
* @export * @export
@ -1425,6 +1555,31 @@ export interface SchemaAssistantLibraryRequest {
*/ */
'library_id': number; 'library_id': number;
} }
/**
*
* @export
* @interface SchemaAssistantPublic
*/
export interface SchemaAssistantPublic {
/**
*
* @type {string}
* @memberof SchemaAssistantPublic
*/
'description'?: string;
/**
*
* @type {number}
* @memberof SchemaAssistantPublic
*/
'id'?: number;
/**
*
* @type {string}
* @memberof SchemaAssistantPublic
*/
'name'?: string;
}
/** /**
* *
* @export * @export
@ -1473,6 +1628,12 @@ export interface SchemaAssistantUpdateRequest {
* @memberof SchemaAssistantUpdateRequest * @memberof SchemaAssistantUpdateRequest
*/ */
'prompt'?: string; 'prompt'?: string;
/**
*
* @type {boolean}
* @memberof SchemaAssistantUpdateRequest
*/
'public'?: boolean;
/** /**
* *
* @type {number} * @type {number}
@ -1973,6 +2134,25 @@ export interface SchemaResponseBody {
*/ */
'success'?: boolean; 'success'?: boolean;
} }
/**
*
* @export
* @interface SchemaSiteUsageResponse
*/
export interface SchemaSiteUsageResponse {
/**
*
* @type {number}
* @memberof SchemaSiteUsageResponse
*/
'month_tokens'?: number;
/**
*
* @type {number}
* @memberof SchemaSiteUsageResponse
*/
'month_tool_calls'?: number;
}
/** /**
* *
* @export * @export
@ -2179,6 +2359,44 @@ export interface SchemaToolDiscoveryOutputFunctions {
*/ */
export const AssistantApiAxiosParamCreator = function (configuration?: Configuration) { export const AssistantApiAxiosParamCreator = function (configuration?: Configuration) {
return { return {
/**
*
* @summary
* @param {number} [page]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1AssistantsFavoritesGet: async (page?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/v1/assistants/favorites`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication ApiKeyAuth required
await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)
if (page !== undefined) {
localVarQueryParameter['page'] = page;
}
setSearchParams(localVarUrlObj, localVarQueryParameter);
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: toPathString(localVarUrlObj),
options: localVarRequestOptions,
};
},
/** /**
* *
* @summary Assistant * @summary Assistant
@ -2685,10 +2903,11 @@ export const AssistantApiAxiosParamCreator = function (configuration?: Configura
/** /**
* *
* @summary * @summary
* @param {number} [page]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
apiV1AssistantsPublicGet: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => { apiV1AssistantsPublicGet: async (page?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/v1/assistants/public`; const localVarPath = `/api/v1/assistants/public`;
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@ -2704,6 +2923,84 @@ export const AssistantApiAxiosParamCreator = function (configuration?: Configura
// authentication ApiKeyAuth required // authentication ApiKeyAuth required
await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration) await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)
if (page !== undefined) {
localVarQueryParameter['page'] = page;
}
setSearchParams(localVarUrlObj, localVarQueryParameter);
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: toPathString(localVarUrlObj),
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1AssistantsPublicIdDelete: async (id: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'id' is not null or undefined
assertParamExists('apiV1AssistantsPublicIdDelete', 'id', id)
const localVarPath = `/api/v1/assistants/public/{id}`
.replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication ApiKeyAuth required
await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)
setSearchParams(localVarUrlObj, localVarQueryParameter);
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: toPathString(localVarUrlObj),
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1AssistantsPublicIdPost: async (id: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'id' is not null or undefined
assertParamExists('apiV1AssistantsPublicIdPost', 'id', id)
const localVarPath = `/api/v1/assistants/public/{id}`
.replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication ApiKeyAuth required
await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)
setSearchParams(localVarUrlObj, localVarQueryParameter); setSearchParams(localVarUrlObj, localVarQueryParameter);
@ -2725,6 +3022,19 @@ export const AssistantApiAxiosParamCreator = function (configuration?: Configura
export const AssistantApiFp = function(configuration?: Configuration) { export const AssistantApiFp = function(configuration?: Configuration) {
const localVarAxiosParamCreator = AssistantApiAxiosParamCreator(configuration) const localVarAxiosParamCreator = AssistantApiAxiosParamCreator(configuration)
return { return {
/**
*
* @summary
* @param {number} [page]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiV1AssistantsFavoritesGet(page?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApiV1AssistantsFavoritesGet200Response>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.apiV1AssistantsFavoritesGet(page, options);
const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
const localVarOperationServerBasePath = operationServerMap['AssistantApi.apiV1AssistantsFavoritesGet']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
},
/** /**
* *
* @summary Assistant * @summary Assistant
@ -2901,15 +3211,42 @@ export const AssistantApiFp = function(configuration?: Configuration) {
/** /**
* *
* @summary * @summary
* @param {number} [page]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async apiV1AssistantsPublicGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApiV1AssistantsGet200Response>> { async apiV1AssistantsPublicGet(page?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApiV1AssistantsFavoritesGet200Response>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.apiV1AssistantsPublicGet(options); const localVarAxiosArgs = await localVarAxiosParamCreator.apiV1AssistantsPublicGet(page, options);
const localVarOperationServerIndex = configuration?.serverIndex ?? 0; const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
const localVarOperationServerBasePath = operationServerMap['AssistantApi.apiV1AssistantsPublicGet']?.[localVarOperationServerIndex]?.url; const localVarOperationServerBasePath = operationServerMap['AssistantApi.apiV1AssistantsPublicGet']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
}, },
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiV1AssistantsPublicIdDelete(id: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApiV1AssistantsPublicIdPost200Response>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.apiV1AssistantsPublicIdDelete(id, options);
const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
const localVarOperationServerBasePath = operationServerMap['AssistantApi.apiV1AssistantsPublicIdDelete']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
},
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiV1AssistantsPublicIdPost(id: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApiV1AssistantsPublicIdPost200Response>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.apiV1AssistantsPublicIdPost(id, options);
const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
const localVarOperationServerBasePath = operationServerMap['AssistantApi.apiV1AssistantsPublicIdPost']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
},
} }
}; };
@ -2920,6 +3257,16 @@ export const AssistantApiFp = function(configuration?: Configuration) {
export const AssistantApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { export const AssistantApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
const localVarFp = AssistantApiFp(configuration) const localVarFp = AssistantApiFp(configuration)
return { return {
/**
*
* @summary
* @param {number} [page]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1AssistantsFavoritesGet(page?: number, options?: RawAxiosRequestConfig): AxiosPromise<ApiV1AssistantsFavoritesGet200Response> {
return localVarFp.apiV1AssistantsFavoritesGet(page, options).then((request) => request(axios, basePath));
},
/** /**
* *
* @summary Assistant * @summary Assistant
@ -3057,11 +3404,32 @@ export const AssistantApiFactory = function (configuration?: Configuration, base
/** /**
* *
* @summary * @summary
* @param {number} [page]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
apiV1AssistantsPublicGet(options?: RawAxiosRequestConfig): AxiosPromise<ApiV1AssistantsGet200Response> { apiV1AssistantsPublicGet(page?: number, options?: RawAxiosRequestConfig): AxiosPromise<ApiV1AssistantsFavoritesGet200Response> {
return localVarFp.apiV1AssistantsPublicGet(options).then((request) => request(axios, basePath)); return localVarFp.apiV1AssistantsPublicGet(page, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1AssistantsPublicIdDelete(id: number, options?: RawAxiosRequestConfig): AxiosPromise<ApiV1AssistantsPublicIdPost200Response> {
return localVarFp.apiV1AssistantsPublicIdDelete(id, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1AssistantsPublicIdPost(id: number, options?: RawAxiosRequestConfig): AxiosPromise<ApiV1AssistantsPublicIdPost200Response> {
return localVarFp.apiV1AssistantsPublicIdPost(id, options).then((request) => request(axios, basePath));
}, },
}; };
}; };
@ -3073,6 +3441,18 @@ export const AssistantApiFactory = function (configuration?: Configuration, base
* @extends {BaseAPI} * @extends {BaseAPI}
*/ */
export class AssistantApi extends BaseAPI { export class AssistantApi extends BaseAPI {
/**
*
* @summary
* @param {number} [page]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof AssistantApi
*/
public apiV1AssistantsFavoritesGet(page?: number, options?: RawAxiosRequestConfig) {
return AssistantApiFp(this.configuration).apiV1AssistantsFavoritesGet(page, options).then((request) => request(this.axios, this.basePath));
}
/** /**
* *
* @summary Assistant * @summary Assistant
@ -3236,12 +3616,37 @@ export class AssistantApi extends BaseAPI {
/** /**
* *
* @summary * @summary
* @param {number} [page]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AssistantApi * @memberof AssistantApi
*/ */
public apiV1AssistantsPublicGet(options?: RawAxiosRequestConfig) { public apiV1AssistantsPublicGet(page?: number, options?: RawAxiosRequestConfig) {
return AssistantApiFp(this.configuration).apiV1AssistantsPublicGet(options).then((request) => request(this.axios, this.basePath)); return AssistantApiFp(this.configuration).apiV1AssistantsPublicGet(page, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof AssistantApi
*/
public apiV1AssistantsPublicIdDelete(id: number, options?: RawAxiosRequestConfig) {
return AssistantApiFp(this.configuration).apiV1AssistantsPublicIdDelete(id, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof AssistantApi
*/
public apiV1AssistantsPublicIdPost(id: number, options?: RawAxiosRequestConfig) {
return AssistantApiFp(this.configuration).apiV1AssistantsPublicIdPost(id, options).then((request) => request(this.axios, this.basePath));
} }
} }
@ -6226,3 +6631,104 @@ export class ToolApi extends BaseAPI {
/**
* UsageApi - axios parameter creator
* @export
*/
export const UsageApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary Usage
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1UsageGet: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/v1/usage`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
setSearchParams(localVarUrlObj, localVarQueryParameter);
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: toPathString(localVarUrlObj),
options: localVarRequestOptions,
};
},
}
};
/**
* UsageApi - functional programming interface
* @export
*/
export const UsageApiFp = function(configuration?: Configuration) {
const localVarAxiosParamCreator = UsageApiAxiosParamCreator(configuration)
return {
/**
*
* @summary Usage
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiV1UsageGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ApiV1UsageGet200Response>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.apiV1UsageGet(options);
const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
const localVarOperationServerBasePath = operationServerMap['UsageApi.apiV1UsageGet']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
},
}
};
/**
* UsageApi - factory interface
* @export
*/
export const UsageApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
const localVarFp = UsageApiFp(configuration)
return {
/**
*
* @summary Usage
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiV1UsageGet(options?: RawAxiosRequestConfig): AxiosPromise<ApiV1UsageGet200Response> {
return localVarFp.apiV1UsageGet(options).then((request) => request(axios, basePath));
},
};
};
/**
* UsageApi - object-oriented interface
* @export
* @class UsageApi
* @extends {BaseAPI}
*/
export class UsageApi extends BaseAPI {
/**
*
* @summary Usage
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof UsageApi
*/
public apiV1UsageGet(options?: RawAxiosRequestConfig) {
return UsageApiFp(this.configuration).apiV1UsageGet(options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -44,7 +44,6 @@ const onScroll = (e: Event) => {
<template> <template>
<Header <Header
v-if="userStore.logined"
style=" style="
min-height: var(--header-height); min-height: var(--header-height);
position: fixed; position: fixed;
@ -54,48 +53,33 @@ const onScroll = (e: Event) => {
" "
></Header> ></Header>
<n-layout <!-- <n-layout
:native-scrollbar="isMobile" :native-scrollbar="isMobile"
position="absolute" position="absolute"
:style="userStore.logined ? 'margin-top: var(--header-height)' : ''" :style="userStore.logined ? 'margin-top: var(--header-height)' : ''"
ref="mainContainer" ref="mainContainer"
:on-scroll="onScroll" :on-scroll="onScroll"
></n-layout> -->
<n-layout
:native-scrollbar="isMobile"
position="absolute"
style="margin-top: var(--header-height)"
ref="mainContainer"
:on-scroll="onScroll"
> >
<!-- <n-layout-sider <!-- <n-back-top v-if="!isMobile" :right="100" /> -->
v-if="userStore.logined && !isMobile"
:collapsed-width="0"
:native-scrollbar="false"
:show-collapsed-content="false"
:width="240"
bordered
collapse-mode="width"
show-trigger="arrow-circle"
class="select-none"
@collapse="menuCollapsed.left = true"
@expand="menuCollapsed.left = false"
>
<Menu v-show="!isMobile"></Menu>
</n-layout-sider> -->
<n-back-top v-if="!isMobile" :right="100" />
<n-layout :native-scrollbar="isMobile"> <n-layout :native-scrollbar="isMobile">
<div class="!pt-2">
<router-view :key="route.path"> </router-view>
</div>
<!-- <Guest v-if="!userStore.logined && currentRoute != '/auth/login'" /> <!-- <Guest v-if="!userStore.logined && currentRoute != '/auth/login'" />
<Container v-else /> --> <Container v-else /> -->
<Guest v-if="!userStore.logined && !currentRoute?.startsWith('/auth')" /> <!-- <Guest v-if="!userStore.logined && !currentRoute?.startsWith('/auth')" />
<div v-else :class="userStore.logined ? 'pt-2' : ''"> <div v-else :class="userStore.logined ? 'pt-2' : ''">
<!-- <div style="height: calc(var(--header-height)*2)"></div> -->
<router-view :key="route.path"> </router-view> <router-view :key="route.path"> </router-view>
</div> -->
<!-- <Container /> -->
<!-- <div class="p-4 pt-0 pb-0 mb-0 h-screen">
<router-view v-slot="{ Component }" :key="route.path">
<transition mode="out-in" name="fade">
<component :is="Component" />
</transition>
</router-view>
</div> -->
</div>
</n-layout> </n-layout>
</n-layout> </n-layout>
</template> </template>

View File

@ -30,7 +30,10 @@
closable closable
:native-scrollbar="false" :native-scrollbar="false"
> >
<LeftSettings></LeftSettings> <LeftSettings v-if="userStore.logined"></LeftSettings>
<div v-else>
要使用 Amberlet请先登录
</div>
</n-drawer-content> </n-drawer-content>
</n-drawer> </n-drawer>
<div <div
@ -77,47 +80,57 @@
<n-grid-item class="flex items-center justify-end mr-1.5"> <n-grid-item class="flex items-center justify-end mr-1.5">
<!-- 右侧 --> <!-- 右侧 -->
<!-- 新对话 -->
<n-tooltip trigger="hover">
<template #trigger>
<n-icon class="text-2xl mr-4 cursor-pointer" @click="backToHome">
<AddOutline />
</n-icon>
</template>
<span> 新对话 </span>
</n-tooltip>
<!-- 助理选择 --> <div v-if="userStore.logined">
<n-popover <!-- 新对话 -->
:placement="userPlacement" <n-tooltip trigger="hover">
class="w-full" <template #trigger>
trigger="click" <n-icon
style="padding: 0" class="text-2xl mr-4 cursor-pointer"
> @click="backToHome"
<template #trigger> >
<n-icon class="text-2xl mr-4 cursor-pointer"> <AddOutline />
<PersonOutline /> </n-icon>
</n-icon> </template>
</template> <span> 新对话 </span>
<AssistantMenu /> </n-tooltip>
</n-popover>
<!-- 用户弹出 --> <!-- 助理选择 -->
<n-popover <n-popover
:placement="userPlacement" :placement="userPlacement"
class="w-full" class="w-full"
trigger="click" trigger="click"
style="padding: 0" style="padding: 0"
> >
<template #trigger> <template #trigger>
<n-avatar <n-icon class="text-2xl mr-4 cursor-pointer">
round <PersonOutline />
size="medium" </n-icon>
:src="userStore.user.avatar" </template>
class="mr-2 cursor-pointer" <AssistantMenu />
/> </n-popover>
</template> <!-- 用户弹出 -->
<UserMenu class="select-none" /> <n-popover
</n-popover> :placement="userPlacement"
class="w-full"
trigger="click"
style="padding: 0"
>
<template #trigger>
<n-avatar
round
size="medium"
:src="userStore.user.avatar"
class="mr-2 cursor-pointer"
/>
</template>
<UserMenu class="select-none" />
</n-popover>
</div>
<div v-else class="mr-2">
<n-button @click="gotoLogin" strong secondary type="primary"> 登录 </n-button>
</div>
</n-grid-item> </n-grid-item>
</n-grid> </n-grid>
</n-layout-header> </n-layout-header>
@ -165,4 +178,10 @@ if (isMobile.value) {
const backToHome = () => { const backToHome = () => {
router.push("/"); router.push("/");
}; };
const gotoLogin = () => {
router.push("/auth/login");
};
</script> </script>

147
src/pages/Guest.vue Normal file
View File

@ -0,0 +1,147 @@
<template>
<div class="p-4">
<div class="mt-5">
<n-grid x-gap="14" cols="2 s:3 m:4 l:5" responsive="screen">
<n-gi
class="mt-3 from-green-200 to-green-300 rounded-lg p-4 text-black"
>
<h3 class="text-2xl">Leaflow Amber</h3>
<p class=" mt-3">
Amber 是一个全新的智能体平台是我们 LeaFlow
生态里面重要的一环也是我们自脱离莱云之后全新的尝试 Leaflow Amber
目前仍然处于测试阶段 不代表最终品质
</p>
<p
v-if="
siteUsage.month_tokens &&
siteUsage.month_tool_calls &&
siteUsage.month_tokens > 0 &&
siteUsage.month_tool_calls
"
>
我们本月共处理了 {{ siteUsage.month_tokens }} Token, 发起了
{{ siteUsage.month_tool_calls }} 次工具调用
</p>
</n-gi>
<n-gi
class="mt-3 from-cyan-500 to-blue-500 rounded-lg p-4 "
>
<h3 class="text-2xl">💬 对话优化引擎</h3>
<p class="mt-3">
Amber
的对话优化引擎无与伦比我们独特的对话功能支持多个助理并行工作您可以通过输入
@
或点击右上角的切换助理选项轻松指定下一个回复的助理所有助理共享一个上下文彼此了解每个操作为您提供流畅一致的对话体验与一些只能处理单一对话的竞品相比Amber
的多助理协作系统显得更为智能和高效在重大决策型的使用场景中你可以通过
Amber 对话引擎去得到 N Second Opinion Amber
为聊天场景做了很多的优化它将更能处理您日常生活中的问题
</p>
</n-gi>
<n-gi
class="mt-3 from-cyan-500 to-blue-500 rounded-lg p-4 "
>
<h3 class="text-2xl">🛠 客制化</h3>
<p class="mt-3">
Amber 具备了目前主流 LLM
对话平台都拥有的高自由度智能体自定义功能用户可以自定义提示词绑定工具以完成复杂任务并优化工作流例如您可以设置助理在每天早上自动为您生成当天的工作清单或者在您需要时快速调用数据分析工具我们的助理不仅能执行简单的任务还能实现多步骤的复杂操作并与知识库无缝集成说它是您高效工作的得力助手绝不为过
💪
</p>
</n-gi>
<n-gi
class="mt-3 from-cyan-500 to-blue-500 rounded-lg p-4 "
>
<h3 class="text-2xl">🧠 记忆</h3>
<p class="mt-3">
Amber
通过采样您的对话内容生成记忆这些记忆是碎片化的但对话中共享您可以随时清除所有记忆确保数据的灵活管理Amber
会收集您的消息并且根据消息推断您的喜好记忆的内容您完全可以控制甚至禁用助理的记忆助理将会根据您的记忆来改变响应的结果您喜欢什么您直接在对话中说明即可Amber
会从第二条消息开始学习记忆
</p>
</n-gi>
<n-gi
class="mt-3 from-cyan-500 to-blue-500 rounded-lg p-4 "
>
<h3 class="text-2xl">🔗 API</h3>
<p class="mt-3">
我们提供强大的助理 API支持兼容 OpenAI 格式的应用接入 Amber通过
Chat Completion API您可以直接调用 Amber
的工具记忆以及知识库功能例如一个开发者可以轻松地将 Amber
集成到他们的客服系统中<