docs(api): 更新Swagger文档以包含助理工具类型

更新了Swagger API文档,以包含新的“assistant_tool_type”定义。这定义了助理工具类型,包括ID、助理和工具的ID、创建和更新时间等属性。此外,调整了若干API路径的响应和参数部分,以更准确地反映当前的API行为。
This commit is contained in:
ivamp 2024-08-03 18:50:57 +08:00
parent 1a70561f7c
commit 4bdb33ba19
15 changed files with 2867 additions and 3277 deletions

View File

@ -29,6 +29,23 @@ definitions:
updated_at:
type: string
type: object
rag-new_internal_entity.AssistantToolType:
properties:
assistant:
$ref: '#/definitions/rag-new_internal_entity.Assistant'
assistant_id:
type: integer
created_at:
type: string
id:
type: integer
tool:
$ref: '#/definitions/rag-new_internal_entity.Tool'
tool_id:
type: integer
updated_at:
type: string
type: object
rag-new_internal_entity.Chat:
properties:
assistant_id:
@ -72,7 +89,7 @@ definitions:
created_at:
type: string
data:
$ref: "#/definitions/rag-new_internal_schema.ToolDiscoveryOutput"
$ref: '#/definitions/rag-new_internal_schema.ToolDiscoveryOutput'
description:
type: string
discovery_url:
@ -97,8 +114,8 @@ definitions:
prompt:
type: string
required:
- description
- name
- description
- name
type: object
rag-new_internal_schema.ChatCreateRequest:
properties:
@ -108,8 +125,8 @@ definitions:
maxLength: 255
type: string
required:
- assistant_id
- name
- assistant_id
- name
type: object
rag-new_internal_schema.ChatMessageAddRequest:
properties:
@ -117,7 +134,7 @@ definitions:
maxLength: 255
type: string
required:
- message
- message
type: object
rag-new_internal_schema.ChatMessageResponse:
properties:
@ -160,9 +177,9 @@ definitions:
maxLength: 255
type: string
required:
- description
- name
- url
- description
- name
- url
type: object
rag-new_internal_schema.ToolDiscoveryOutput:
properties:
@ -172,7 +189,7 @@ definitions:
type: string
function:
items:
$ref: "#/definitions/rag-new_internal_schema.ToolDiscoveryOutputFunctions"
$ref: '#/definitions/rag-new_internal_schema.ToolDiscoveryOutputFunctions'
type: array
homepage_url:
type: string
@ -195,7 +212,7 @@ definitions:
properties:
function:
items:
$ref: "#/definitions/rag-new_internal_schema.ToolDiscoveryOutputFunction"
$ref: '#/definitions/rag-new_internal_schema.ToolDiscoveryOutputFunction'
type: array
type:
type: string
@ -208,594 +225,618 @@ paths:
/api/v1/assistants:
get:
consumes:
- application/json
description: get string by ID
- application/json
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
items:
$ref: "#/definitions/rag-new_internal_entity.Assistant"
type: array
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
items:
$ref: '#/definitions/rag-new_internal_entity.Assistant'
type: array
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 获取 Assistant 列表
tags:
- assistant
- assistant
post:
consumes:
- application/json
description: get string by ID
- application/json
parameters:
- description: Assistant
in: body
name: assistant
required: true
schema:
$ref: "#/definitions/rag-new_internal_schema.AssistantCreateRequest"
- description: Assistant
in: body
name: assistant
required: true
schema:
$ref: '#/definitions/rag-new_internal_schema.AssistantCreateRequest'
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_entity.Assistant"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_entity.Assistant'
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 创建 Assistant
tags:
- assistant
- assistant
/api/v1/assistants/{id}:
delete:
consumes:
- application/json
description: get string by ID
- application/json
parameters:
- description: Assistant ID
in: path
name: id
required: true
type: integer
- description: Assistant ID
in: path
name: id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"204":
description: No Content
"404":
description: Not Found
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 删除 Assistant
tags:
- assistant
- assistant
get:
consumes:
- application/json
parameters:
- description: Assistant ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_entity.Assistant'
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
summary: 获取指定的 Assistant
tags:
- assistant
/api/v1/assistants/{id}/tools:
get:
consumes:
- application/json
description: get string by ID
- application/json
parameters:
- description: Assistant ID
in: path
name: id
required: true
type: integer
- description: Assistant ID
in: path
name: id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
items:
$ref: "#/definitions/rag-new_internal_entity.AssistantTool"
type: array
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
items:
$ref: '#/definitions/rag-new_internal_entity.AssistantToolType'
type: array
type: object
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 获取 Assistant 所绑定的 Tool
tags:
- assistant
- assistant
/api/v1/assistants/{id}/tools/{tool_id}:
delete:
consumes:
- application/json
description: get string by ID
- application/json
parameters:
- description: Assistant ID
in: path
name: id
required: true
type: integer
- description: Tool ID
in: path
name: tool_id
required: true
type: integer
- description: Assistant ID
in: path
name: id
required: true
type: integer
- description: Tool ID
in: path
name: tool_id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_entity.AssistantTool"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_entity.AssistantTool'
type: object
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 解绑 Tool
tags:
- assistant
- assistant
post:
consumes:
- application/json
description: get string by ID
- application/json
parameters:
- description: Assistant ID
in: path
name: id
required: true
type: integer
- description: Tool ID
in: path
name: tool_id
required: true
type: integer
- description: Assistant ID
in: path
name: id
required: true
type: integer
- description: Tool ID
in: path
name: tool_id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_entity.AssistantTool"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_entity.AssistantTool'
type: object
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 绑定 Tool
tags:
- assistant
- assistant
/api/v1/chats:
get:
consumes:
- application/json
- application/json
description: get string by ID
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
items:
$ref: "#/definitions/rag-new_internal_entity.Chat"
type: array
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
items:
$ref: '#/definitions/rag-new_internal_entity.Chat'
type: array
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
summary: 获取所有 Chat
tags:
- chat
- chat
post:
consumes:
- application/json
- application/json
description: get string by ID
parameters:
- description: Chat
in: body
name: chat
required: true
schema:
$ref: "#/definitions/rag-new_internal_schema.ChatCreateRequest"
- description: Chat
in: body
name: chat
required: true
schema:
$ref: '#/definitions/rag-new_internal_schema.ChatCreateRequest'
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_entity.Chat"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_entity.Chat'
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
summary: Create Chat
tags:
- chat
- chat
/api/v1/chats/{id}:
delete:
consumes:
- application/json
- application/json
description: get string by ID
parameters:
- description: Chat ID
in: path
name: id
required: true
type: integer
- description: Chat ID
in: path
name: id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"404":
description: Not Found
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: Delete Chat
tags:
- chat
- chat
/api/v1/chats/{id}/messages:
get:
consumes:
- application/json
- application/json
description: get string by ID
parameters:
- description: Chat ID
in: path
name: id
required: true
type: integer
- description: Chat ID
in: path
name: id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
items:
$ref: "#/definitions/rag-new_internal_entity.ChatMessage"
type: array
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
items:
$ref: '#/definitions/rag-new_internal_entity.ChatMessage'
type: array
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"404":
description: Not Found
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 查看聊天记录
tags:
- chat_message
- chat_message
post:
consumes:
- application/json
- application/json
description: get string by ID
parameters:
- description: Chat ID
in: path
name: id
required: true
type: integer
- description: Message
in: body
name: message
required: true
schema:
$ref: "#/definitions/rag-new_internal_schema.ChatMessageAddRequest"
- description: Chat ID
in: path
name: id
required: true
type: integer
- description: Message
in: body
name: message
required: true
schema:
$ref: '#/definitions/rag-new_internal_schema.ChatMessageAddRequest'
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_schema.ChatMessageResponse"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_schema.ChatMessageResponse'
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"404":
description: Not Found
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"409":
description: Conflict
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_schema.ChatMessageResponse"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_schema.ChatMessageResponse'
type: object
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: 添加聊天记录
tags:
- chat_message
- chat_message
/api/v1/ping:
get:
consumes:
- application/json
- application/json
description: get string by ID
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_schema.CurrentUserResponse"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_schema.CurrentUserResponse'
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: Greet
tags:
- ping
- ping
/api/v1/stream/{stream_id}:
get:
consumes:
- application/json
- application/json
description: get string by ID
parameters:
- description: Chat ID
in: path
name: id
required: true
type: integer
- description: Chat stream id
in: path
name: stream_id
required: true
type: string
- description: Chat ID
in: path
name: id
required: true
type: integer
- description: Chat stream id
in: path
name: stream_id
required: true
type: string
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_schema.ChatMessageResponse"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_schema.ChatMessageResponse'
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"404":
description: Not Found
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"409":
description: Conflict
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_schema.ChatMessageResponse"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_schema.ChatMessageResponse'
type: object
"500":
description: Internal Server Error
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- none: []
- none: []
summary: 流式传输聊天内容
tags:
- chat_message
- chat_message
/api/v1/tools:
get:
consumes:
- application/json
- application/json
description: List tools
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_schema.CurrentUserResponse"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
items:
$ref: '#/definitions/rag-new_internal_entity.Tool'
type: array
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: List Tool
tags:
- tool
- tool
post:
consumes:
- application/json
- application/json
description: Create tool
parameters:
- description: Tool
in: body
name: tool
required: true
schema:
$ref: "#/definitions/rag-new_internal_schema.ToolCreateRequest"
- description: Tool
in: body
name: tool
required: true
schema:
$ref: '#/definitions/rag-new_internal_schema.ToolCreateRequest'
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
items:
$ref: "#/definitions/rag-new_internal_entity.Tool"
type: array
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_entity.Tool'
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: Create Tool
tags:
- tool
- tool
/api/v1/tools/{id}:
delete:
consumes:
- application/json
- application/json
description: DeleteTool
parameters:
- description: Tool ID
in: path
name: id
required: true
type: string
- description: Tool ID
in: path
name: id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"200":
description: OK
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"404":
description: Not Found
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: DeleteTool
tags:
- tool
- tool
get:
consumes:
- application/json
- application/json
description: Get tool
parameters:
- description: Tool ID
in: path
name: id
required: true
type: string
- description: Tool ID
in: path
name: id
required: true
type: integer
produces:
- application/json
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: "#/definitions/rag-new_internal_schema.ResponseBody"
- properties:
data:
$ref: "#/definitions/rag-new_internal_entity.Tool"
type: object
- $ref: '#/definitions/rag-new_internal_schema.ResponseBody'
- properties:
data:
$ref: '#/definitions/rag-new_internal_entity.Tool'
type: object
"400":
description: Bad Request
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
"404":
description: Not Found
schema:
$ref: "#/definitions/rag-new_internal_schema.ResponseBody"
$ref: '#/definitions/rag-new_internal_schema.ResponseBody'
security:
- ApiKeyAuth: []
- ApiKeyAuth: []
summary: Get Tool
tags:
- tool
- tool
securityDefinitions:
ApiKeyAuth:
in: header

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Welcome to Vuetify 3</title>
<title>Leaflow Amber</title>
</head>
<body>

File diff suppressed because it is too large Load Diff

View File

@ -5,18 +5,19 @@
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* The version of the OpenAPI document: 1.0
*
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
import type { Configuration } from "./configuration";
import type { Configuration } from './configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from "axios";
import globalAxios from "axios";
import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
import globalAxios from 'axios';
export const BASE_PATH = "http://localhost".replace(/\/+$/, "");
@ -25,10 +26,10 @@ export const BASE_PATH = "http://localhost".replace(/\/+$/, "");
* @export
*/
export const COLLECTION_FORMATS = {
csv: ",",
ssv: " ",
tsv: "\t",
pipes: "|",
csv: ",",
ssv: " ",
tsv: "\t",
pipes: "|",
};
/**
@ -37,8 +38,8 @@ export const COLLECTION_FORMATS = {
* @interface RequestArgs
*/
export interface RequestArgs {
url: string;
options: RawAxiosRequestConfig;
url: string;
options: RawAxiosRequestConfig;
}
/**
@ -47,19 +48,15 @@ export interface RequestArgs {
* @class BaseAPI
*/
export class BaseAPI {
protected configuration: Configuration | undefined;
protected configuration: Configuration | undefined;
constructor(
configuration?: Configuration,
protected basePath: string = BASE_PATH,
protected axios: AxiosInstance = globalAxios,
) {
if (configuration) {
this.configuration = configuration;
this.basePath = configuration.basePath ?? basePath;
constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {
if (configuration) {
this.configuration = configuration;
this.basePath = configuration.basePath ?? basePath;
}
}
}
}
};
/**
*
@ -68,24 +65,22 @@ export class BaseAPI {
* @extends {Error}
*/
export class RequiredError extends Error {
constructor(
public field: string,
msg?: string,
) {
super(msg);
this.name = "RequiredError";
}
constructor(public field: string, msg?: string) {
super(msg);
this.name = "RequiredError"
}
}
interface ServerMap {
[key: string]: {
url: string;
description: string;
}[];
[key: string]: {
url: string,
description: string,
}[];
}
/**
*
* @export
*/
export const operationServerMap: ServerMap = {};
export const operationServerMap: ServerMap = {
}

View File

@ -5,139 +5,105 @@
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* The version of the OpenAPI document: 1.0
*
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
import type { Configuration } from "./configuration";
import type { RequestArgs } from "./base";
import type { AxiosInstance, AxiosResponse } from "axios";
import type { AxiosInstance, AxiosResponse } from 'axios';
import { RequiredError } from "./base";
/**
*
* @export
*/
export const DUMMY_BASE_URL = "https://example.com";
export const DUMMY_BASE_URL = 'https://example.com'
/**
*
* @throws {RequiredError}
* @export
*/
export const assertParamExists = function (
functionName: string,
paramName: string,
paramValue: unknown,
) {
if (paramValue === null || paramValue === undefined) {
throw new RequiredError(
paramName,
`Required parameter ${paramName} was null or undefined when calling ${functionName}.`,
);
}
};
/**
*
* @export
*/
export const setApiKeyToObject = async function (
object: any,
keyParamName: string,
configuration?: Configuration,
) {
if (configuration && configuration.apiKey) {
const localVarApiKeyValue =
typeof configuration.apiKey === "function"
? await configuration.apiKey(keyParamName)
: await configuration.apiKey;
object[keyParamName] = localVarApiKeyValue;
}
};
/**
*
* @export
*/
export const setBasicAuthToObject = function (
object: any,
configuration?: Configuration,
) {
if (configuration && (configuration.username || configuration.password)) {
object["auth"] = {
username: configuration.username,
password: configuration.password,
};
}
};
/**
*
* @export
*/
export const setBearerAuthToObject = async function (
object: any,
configuration?: Configuration,
) {
if (configuration && configuration.accessToken) {
const accessToken =
typeof configuration.accessToken === "function"
? await configuration.accessToken()
: await configuration.accessToken;
object["Authorization"] = "Bearer " + accessToken;
}
};
/**
*
* @export
*/
export const setOAuthToObject = async function (
object: any,
name: string,
scopes: string[],
configuration?: Configuration,
) {
if (configuration && configuration.accessToken) {
const localVarAccessTokenValue =
typeof configuration.accessToken === "function"
? await configuration.accessToken(name, scopes)
: await configuration.accessToken;
object["Authorization"] = "Bearer " + localVarAccessTokenValue;
}
};
function setFlattenedQueryParams(
urlSearchParams: URLSearchParams,
parameter: any,
key: string = "",
): void {
if (parameter == null) return;
if (typeof parameter === "object") {
if (Array.isArray(parameter)) {
(parameter as any[]).forEach((item) =>
setFlattenedQueryParams(urlSearchParams, item, key),
);
} else {
Object.keys(parameter).forEach((currentKey) =>
setFlattenedQueryParams(
urlSearchParams,
parameter[currentKey],
`${key}${key !== "" ? "." : ""}${currentKey}`,
),
);
export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) {
if (paramValue === null || paramValue === undefined) {
throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);
}
} else {
if (urlSearchParams.has(key)) {
urlSearchParams.append(key, parameter);
} else {
urlSearchParams.set(key, parameter);
}
/**
*
* @export
*/
export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) {
if (configuration && configuration.apiKey) {
const localVarApiKeyValue = typeof configuration.apiKey === 'function'
? await configuration.apiKey(keyParamName)
: await configuration.apiKey;
object[keyParamName] = localVarApiKeyValue;
}
}
/**
*
* @export
*/
export const setBasicAuthToObject = function (object: any, configuration?: Configuration) {
if (configuration && (configuration.username || configuration.password)) {
object["auth"] = { username: configuration.username, password: configuration.password };
}
}
/**
*
* @export
*/
export const setBearerAuthToObject = async function (object: any, configuration?: Configuration) {
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
object["Authorization"] = "Bearer " + accessToken;
}
}
/**
*
* @export
*/
export const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) {
if (configuration && configuration.accessToken) {
const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
? await configuration.accessToken(name, scopes)
: await configuration.accessToken;
object["Authorization"] = "Bearer " + localVarAccessTokenValue;
}
}
function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void {
if (parameter == null) return;
if (typeof parameter === "object") {
if (Array.isArray(parameter)) {
(parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key));
}
else {
Object.keys(parameter).forEach(currentKey =>
setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`)
);
}
}
else {
if (urlSearchParams.has(key)) {
urlSearchParams.append(key, parameter);
}
else {
urlSearchParams.set(key, parameter);
}
}
}
}
/**
@ -145,58 +111,40 @@ function setFlattenedQueryParams(
* @export
*/
export const setSearchParams = function (url: URL, ...objects: any[]) {
const searchParams = new URLSearchParams(url.search);
setFlattenedQueryParams(searchParams, objects);
url.search = searchParams.toString();
};
const searchParams = new URLSearchParams(url.search);
setFlattenedQueryParams(searchParams, objects);
url.search = searchParams.toString();
}
/**
*
* @export
*/
export const serializeDataIfNeeded = function (
value: any,
requestOptions: any,
configuration?: Configuration,
) {
const nonString = typeof value !== "string";
const needsSerialization =
nonString && configuration && configuration.isJsonMime
? configuration.isJsonMime(requestOptions.headers["Content-Type"])
: nonString;
return needsSerialization
? JSON.stringify(value !== undefined ? value : {})
: value || "";
};
export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) {
const nonString = typeof value !== 'string';
const needsSerialization = nonString && configuration && configuration.isJsonMime
? configuration.isJsonMime(requestOptions.headers['Content-Type'])
: nonString;
return needsSerialization
? JSON.stringify(value !== undefined ? value : {})
: (value || "");
}
/**
*
* @export
*/
export const toPathString = function (url: URL) {
return url.pathname + url.search + url.hash;
};
return url.pathname + url.search + url.hash
}
/**
*
* @export
*/
export const createRequestFunction = function (
axiosArgs: RequestArgs,
globalAxios: AxiosInstance,
BASE_PATH: string,
configuration?: Configuration,
) {
return <T = unknown, R = AxiosResponse<T>>(
axios: AxiosInstance = globalAxios,
basePath: string = BASE_PATH,
) => {
const axiosRequestArgs = {
...axiosArgs.options,
url:
(axios.defaults.baseURL ? "" : (configuration?.basePath ?? basePath)) +
axiosArgs.url,
export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {
return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs = {...axiosArgs.options, url: (axios.defaults.baseURL ? '' : configuration?.basePath ?? basePath) + axiosArgs.url};
return axios.request<T, R>(axiosRequestArgs);
};
return axios.request<T, R>(axiosRequestArgs);
};
};
}

View File

@ -5,128 +5,106 @@
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* The version of the OpenAPI document: 1.0
*
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
export interface ConfigurationParameters {
apiKey?:
| string
| Promise<string>
| ((name: string) => string)
| ((name: string) => Promise<string>);
username?: string;
password?: string;
accessToken?:
| string
| Promise<string>
| ((name?: string, scopes?: string[]) => string)
| ((name?: string, scopes?: string[]) => Promise<string>);
basePath?: string;
serverIndex?: number;
baseOptions?: any;
formDataCtor?: new () => any;
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
username?: string;
password?: string;
accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);
basePath?: string;
serverIndex?: number;
baseOptions?: any;
formDataCtor?: new () => any;
}
export class Configuration {
/**
* parameter for apiKey security
* @param name security name
* @memberof Configuration
*/
apiKey?:
| string
| Promise<string>
| ((name: string) => string)
| ((name: string) => Promise<string>);
/**
* parameter for basic security
*
* @type {string}
* @memberof Configuration
*/
username?: string;
/**
* parameter for basic security
*
* @type {string}
* @memberof Configuration
*/
password?: string;
/**
* parameter for oauth2 security
* @param name security name
* @param scopes oauth2 scope
* @memberof Configuration
*/
accessToken?:
| string
| Promise<string>
| ((name?: string, scopes?: string[]) => string)
| ((name?: string, scopes?: string[]) => Promise<string>);
/**
* override base path
*
* @type {string}
* @memberof Configuration
*/
basePath?: string;
/**
* override server index
*
* @type {number}
* @memberof Configuration
*/
serverIndex?: number;
/**
* base options for axios calls
*
* @type {any}
* @memberof Configuration
*/
baseOptions?: any;
/**
* The FormData constructor that will be used to create multipart form data
* requests. You can inject this here so that execution environments that
* do not support the FormData class can still run the generated client.
*
* @type {new () => FormData}
*/
formDataCtor?: new () => any;
/**
* parameter for apiKey security
* @param name security name
* @memberof Configuration
*/
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
/**
* parameter for basic security
*
* @type {string}
* @memberof Configuration
*/
username?: string;
/**
* parameter for basic security
*
* @type {string}
* @memberof Configuration
*/
password?: string;
/**
* parameter for oauth2 security
* @param name security name
* @param scopes oauth2 scope
* @memberof Configuration
*/
accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);
/**
* override base path
*
* @type {string}
* @memberof Configuration
*/
basePath?: string;
/**
* override server index
*
* @type {number}
* @memberof Configuration
*/
serverIndex?: number;
/**
* base options for axios calls
*
* @type {any}
* @memberof Configuration
*/
baseOptions?: any;
/**
* The FormData constructor that will be used to create multipart form data
* requests. You can inject this here so that execution environments that
* do not support the FormData class can still run the generated client.
*
* @type {new () => FormData}
*/
formDataCtor?: new () => any;
constructor(param: ConfigurationParameters = {}) {
this.apiKey = param.apiKey;
this.username = param.username;
this.password = param.password;
this.accessToken = param.accessToken;
this.basePath = param.basePath;
this.serverIndex = param.serverIndex;
this.baseOptions = param.baseOptions;
this.formDataCtor = param.formDataCtor;
}
constructor(param: ConfigurationParameters = {}) {
this.apiKey = param.apiKey;
this.username = param.username;
this.password = param.password;
this.accessToken = param.accessToken;
this.basePath = param.basePath;
this.serverIndex = param.serverIndex;
this.baseOptions = param.baseOptions;
this.formDataCtor = param.formDataCtor;
}
/**
* Check if the given MIME is a JSON MIME.
* JSON MIME examples:
* application/json
* application/json; charset=UTF8
* APPLICATION/JSON
* application/vnd.company+json
* @param mime - MIME (Multipurpose Internet Mail Extensions)
* @return True if the given MIME is JSON, false otherwise.
*/
public isJsonMime(mime: string): boolean {
const jsonMime: RegExp = new RegExp(
"^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$",
"i",
);
return (
mime !== null &&
(jsonMime.test(mime) ||
mime.toLowerCase() === "application/json-patch+json")
);
}
/**
* Check if the given MIME is a JSON MIME.
* JSON MIME examples:
* application/json
* application/json; charset=UTF8
* APPLICATION/JSON
* application/vnd.company+json
* @param mime - MIME (Multipurpose Internet Mail Extensions)
* @return True if the given MIME is JSON, false otherwise.
*/
public isJsonMime(mime: string): boolean {
const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
}
}

View File

@ -5,12 +5,14 @@
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* The version of the OpenAPI document: 1.0
*
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
export * from "./api";
export * from "./configuration";

View File

@ -25,6 +25,13 @@
to="/assistants"
/>
<v-list-item
prepend-icon="mdi-home"
rounded="lg"
title="工具"
to="/tools"
/>
<v-list-item
prepend-icon="mdi-home"
rounded="lg"

View File

@ -1,35 +0,0 @@
# Components
Vue template files in this folder are automatically imported.
## 🚀 Usage
Importing is handled by [unplugin-vue-components](https://github.com/unplugin/unplugin-vue-components). This plugin automatically imports `.vue` files created in the `src/components` directory, and registers them as global components. This means that you can use any component in your application without having to manually import it.
The following example assumes a component located at `src/components/MyComponent.vue`:
```vue
<template>
<div>
<MyComponent />
</div>
</template>
<script lang="ts" setup>
//
</script>
```
When your template is rendered, the component's import will automatically be inlined, which renders to this:
```vue
<template>
<div>
<MyComponent />
</div>
</template>
<script lang="ts" setup>
import MyComponent from "@/components/MyComponent.vue";
</script>
```

View File

@ -0,0 +1,112 @@
<template>
<h3>助理 {{ assistant.data?.name }}</h3>
<div class="mt-3">
<p>已经绑定的工具</p>
<v-row>
<v-col
v-for="tool in bindedTools.data"
:key="tool.id"
cols="12"
md="4"
sm="6"
>
<v-card>
<v-card-title>{{ tool.tool?.name }}</v-card-title>
<v-card-text>
<p>函数名称: {{ tool.tool?.data?.name }}</p>
<p>函数描述{{ tool.tool?.data?.description }}</p>
<p>主页地址: {{ tool.tool?.data?.homepage_url }}</p>
</v-card-text>
<v-card-actions>
<v-btn color="error" @click="unbindTool(tool.tool_id ?? 0)"
>解除绑定</v-btn
>
</v-card-actions>
</v-card>
</v-col>
</v-row>
</div>
<div class="mt-4">
<p>你创建的工具</p>
<v-row>
<v-col v-for="tool in tools.data" :key="tool.id" cols="12" md="4" sm="6">
<v-card>
<v-card-title>{{ tool.name }}</v-card-title>
<v-card-text>
<p>函数名称: {{ tool.data?.name }}</p>
<p>函数描述{{ tool.data?.description }}</p>
<p>主页地址: {{ tool.data?.homepage_url }}</p>
</v-card-text>
<v-card-actions>
<v-btn color="primary" @click="bindTool(tool.id ?? 0)">绑定</v-btn>
</v-card-actions>
</v-card>
</v-col>
</v-row>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
import { api } from "@/plugins/api";
import router from "@/router";
import {
ApiV1AssistantsIdToolsGet200Response,
ApiV1AssistantsPost200Response,
ApiV1ToolsGet200Response,
} from "@/api";
// @ts-ignore
const assistantId = router.currentRoute.value.params.id as number;
const assistant: Ref<ApiV1AssistantsPost200Response> = ref({});
const tools: Ref<ApiV1ToolsGet200Response> = ref({});
const bindedTools: Ref<ApiV1AssistantsIdToolsGet200Response> = ref({});
function getAssistant() {
api.Assistant.apiV1AssistantsIdGet(assistantId).then((res) => {
assistant.value = res.data;
});
}
function getBindedTools() {
api.Assistant.apiV1AssistantsIdToolsGet(assistantId).then((res) => {
bindedTools.value = res.data;
});
}
function getTools() {
api.Tool.apiV1ToolsGet().then((res) => {
tools.value = res.data;
});
}
function unbindTool(toolId: number) {
api.Assistant.apiV1AssistantsIdToolsToolIdDelete(assistantId, toolId)
.then(() => {
refresh();
})
.catch((e) => {
console.log(e);
});
}
function refresh() {
getAssistant();
getTools();
getBindedTools();
}
function bindTool(toolId: number) {
api.Assistant.apiV1AssistantsIdToolsToolIdPost(assistantId, toolId)
.then(() => {
refresh();
})
.catch((e) => {
console.log(e);
});
}
refresh();
</script>

View File

View File

@ -20,12 +20,13 @@
<p>Phone: {{ assistant.phone }}</p> -->
</v-card-text>
<v-card-actions>
<v-btn color="primary" @click="openDialog(assistant.id ?? 0)"
<!-- <v-btn color="primary" @click="openDialog(assistant.id ?? 0)"
>对话</v-btn
> -->
<v-btn color="primary" @click="editTool(assistant.id ?? 0)"
>工具</v-btn
>
<!-- <v-btn color="primary" @click="editAssistant(assistant)"
>编辑</v-btn
> -->
<v-btn color="error" @click="deleteAssistant(assistant.id ?? 0)"
>删除</v-btn
>
@ -61,7 +62,6 @@ const assistants: Ref<ApiV1AssistantsGet200Response> = ref({});
function refresh() {
api.Assistant.apiV1AssistantsGet().then((res) => {
assistants.value = res.data;
console.log(assistants.value);
});
}
refresh();
@ -87,6 +87,10 @@ function deleteAssistantConfirmed() {
refresh();
}
function editTool(assistantId: number) {
router.push(`/assistants/${assistantId}/tools`);
}
function to(path: string) {
router.push(path);
}

View File

@ -0,0 +1,58 @@
<template>
<div>
<h3>创建工具</h3>
<v-text-field v-model="toolName" label="工具名称" required></v-text-field>
<v-textarea
v-model="toolDescription"
label="工具描述"
required
></v-textarea>
<v-text-field v-model="toolUrl" label="发现地址" required></v-text-field>
<v-text-field v-model="toolApiKey" label="认证密钥" required></v-text-field>
<v-btn color="primary" @click="createTool">创建</v-btn>
<v-dialog v-model="failedDialog.show" max-width="290" persistent>
<v-card>
<v-card-title class="headline">创建失败</v-card-title>
<v-card-text>{{ failedDialog.message }}</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="green darken-1" @click="failedDialog.show = false"
>关闭</v-btn
>
</v-card-actions>
</v-card>
</v-dialog>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
import { api } from "@/plugins/api";
import router from "@/router";
const toolName = ref("");
const toolDescription = ref("");
const toolUrl = ref("");
const toolApiKey = ref("");
function createTool() {
api.Tool.apiV1ToolsPost({
name: toolName.value,
description: toolDescription.value,
url: toolUrl.value,
api_key: toolApiKey.value,
})
.then((r) => {
router.push("/tools");
})
.catch((e) => {
failedDialog.value.show = true;
failedDialog.value.message = e.response?.data?.error ?? "未知错误";
});
}
const failedDialog = ref({
show: false,
message: "",
});
</script>

105
src/pages/tools/index.vue Normal file
View File

@ -0,0 +1,105 @@
<template>
<h3>工具</h3>
<v-btn color="primary" @click="to('/tools/create')">创建工具</v-btn>
<div class="mt-3">
<v-row
><v-slide-x-transition group>
<v-col
v-for="tool in tools.data"
:key="tool.id"
cols="12"
md="4"
sm="6"
>
<v-card>
<v-card-title>{{ tool.name }}</v-card-title>
<v-card-text>
<p>函数名称: {{ tool.data?.name }}</p>
<p>函数描述{{ tool.data?.description }}</p>
<p>主页地址: {{ tool.data?.homepage_url }}</p>
</v-card-text>
<v-card-actions>
<!-- <v-btn color="primary" @click="editAssistant(assistant)"
>编辑</v-btn
> -->
<v-btn color="error" @click="deleteTool(tool.id ?? 0)"
>删除</v-btn
>
</v-card-actions>
</v-card>
</v-col>
</v-slide-x-transition></v-row
>
</div>
<v-dialog v-model="dialog" max-width="290" persistent>
<v-card>
<v-card-title class="headline">确认删除</v-card-title>
<v-card-text>您确定要删除这个工具吗</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="green darken-1" @click="dialog = false">取消</v-btn>
<v-btn color="red darken-1" @click="deleteId">删除</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<v-dialog v-model="failedDialog.show" max-width="290" persistent>
<v-card>
<v-card-title class="headline">创建失败</v-card-title>
<v-card-text>{{ failedDialog.message }}</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="green darken-1" @click="failedDialog.show = false"
>关闭</v-btn
>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script setup lang="ts">
import { ApiV1ToolsGet200Response } from "@/api";
import { api } from "@/plugins/api";
import router from "@/router";
const tools: Ref<ApiV1ToolsGet200Response> = ref({});
function refresh() {
api.Tool.apiV1ToolsGet().then((res) => {
tools.value = res.data;
console.log(tools.value);
});
}
refresh();
const dialog = ref(false);
const failedDialog = ref({
show: false,
message: "创建失败",
});
const selectedId = ref(0);
function deleteTool(id: number) {
selectedId.value = id;
dialog.value = true;
}
function deleteId() {
api.Tool.apiV1ToolsIdDelete(selectedId.value)
.then(() => {
refresh();
})
.catch((r) => {
failedDialog.value.show = true;
failedDialog.value.message = r.response.data.error;
});
dialog.value = false;
}
function to(path: string) {
router.push(path);
}
</script>

View File

@ -20,9 +20,13 @@ declare module 'vue-router/auto-routes' {
export interface RouteNamedMap {
'/': RouteRecordInfo<'/', '/', Record<never, never>, Record<never, never>>,
'/assistants/': RouteRecordInfo<'/assistants/', '/assistants', Record<never, never>, Record<never, never>>,
'/assistants/[id]/tools': RouteRecordInfo<'/assistants/[id]/tools', '/assistants/:id/tools', { id: ParamValue<true> }, { id: ParamValue<false> }>,
'/assistants/binds': RouteRecordInfo<'/assistants/binds', '/assistants/binds', Record<never, never>, Record<never, never>>,
'/assistants/create': RouteRecordInfo<'/assistants/create', '/assistants/create', Record<never, never>, Record<never, never>>,
'/auth/callback': RouteRecordInfo<'/auth/callback', '/auth/callback', Record<never, never>, Record<never, never>>,
'/auth/login': RouteRecordInfo<'/auth/login', '/auth/login', Record<never, never>, Record<never, never>>,
'/ping/': RouteRecordInfo<'/ping/', '/ping', Record<never, never>, Record<never, never>>,
'/tools/': RouteRecordInfo<'/tools/', '/tools', Record<never, never>, Record<never, never>>,
'/tools/create': RouteRecordInfo<'/tools/create', '/tools/create', Record<never, never>, Record<never, never>>,
}
}