feat: Add base project structure with API and web components

This commit is contained in:
Ke Sun
2025-12-02 20:28:01 +08:00
parent f3de6d6cc9
commit c1adc62ec6
817 changed files with 111226 additions and 106 deletions

112
web/src/api/application.ts Normal file
View File

@@ -0,0 +1,112 @@
import { request } from '@/utils/request'
import type { Application } from '@/views/ApplicationManagement/types'
import type { Config } from '@/views/ApplicationConfig/types'
import { handleSSE } from '@/utils/stream'
// 应用列表
export const getApplicationListUrl = '/apps'
export const getApplicationList = (data: Record<string, unknown>) => {
return request.get(getApplicationListUrl, data)
}
// 获取应用配置
export const getApplicationConfig = (id: string) => {
return request.get(`/apps/${id}/config`)
}
// 获取集群应配置
export const getMultiAgentConfig = (id: string) => {
return request.get(`/apps/${id}/multi-agent`)
}
// 应用详情
export const getApplication = (id: string) => {
return request.get(`/apps/${id}`)
}
// 更新应用
export const updateApplication = (id: string, values: Application) => {
return request.put(`/apps/${id}`, values)
}
// 创建应用
export const addApplication = (values: Application) => {
return request.post('/apps', values)
}
// 保存Agent配置
export const saveAgentConfig = (app_id: string, values: Config) => {
return request.put(`/apps/${app_id}/config`, values)
}
// 保存集群配置
export const saveMultiAgentConfig = (app_id: string, values: Config) => {
return request.put(`/apps/${app_id}/multi-agent`, values)
}
// 模型比对试运行
export const runCompare = (app_id: string, values: Record<string, unknown>, onMessage?: (data: string) => void) => {
return handleSSE(`/apps/${app_id}/draft/run/compare`, values, onMessage)
}
export const draftRun = (app_id: string, values: Record<string, unknown>, onMessage?: (data: string) => void) => {
return handleSSE(`/apps/${app_id}/draft/run`, values, onMessage)
}
// 删除应用
export const deleteApplication = (app_id: string) => {
return request.delete(`/apps/${app_id}`)
}
// 发布版本列表
export const getReleaseList = (app_id: string) => {
return request.get(`/apps/${app_id}/releases`)
}
// 发布版本
export const publishRelease = (app_id: string, values: Record<string, unknown>) => {
return request.post(`/apps/${app_id}/publish`, values)
}
// 回滚版本
export const rollbackRelease = (app_id: string, version: string) => {
return request.post(`/apps/${app_id}/rollback/${version}`)
}
// 发布版本分享
export const shareRelease = (app_id: string, release_id: string) => {
return request.post(`/apps/${app_id}/releases/${release_id}/share`, {
"is_enabled": true,
"require_password": false,
"allow_embed": true
})
}
// 获取体验对话历史
export const getConversationHistory = (share_token: string, data: { page: number; pagesize: number }) => {
return request.get(`/public/share/conversations`, data, {
headers: {
'Authorization': `Bearer ${localStorage.getItem(`shareToken_${share_token}`)}`
}
})
}
// 发送体验对话
export const sendConversation = (share_token: string, values: {
message: string;
web_search: boolean;
memory: boolean;
stream: boolean;
conversation_id: string | null;
}, onMessage, shareToken: string) => {
// return request.post(`/public/share/chat`, values, {
// headers: {
// 'Authorization': `Bearer ${localStorage.getItem(`shareToken_${share_token}`)}`
// }
// })
return handleSSE(`/public/share/chat`, values, onMessage, {
headers: {
'Authorization': `Bearer ${shareToken}`
}
})
}
// 获取体验会话详情
export const getConversationDetail = (share_token: string, conversation_id: string) => {
return request.get(`/public/share/conversations/${conversation_id}`, {}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem(`shareToken_${share_token}`)}`
}
})
}
// 获取体验对话token
export const getShareToken = (share_token: string, user_id: string) => {
return request.post(`/public/share/${share_token}/token`, { user_id })
}
// 复制应用
export const copyApplication = (app_id: string, new_name: string) => {
return request.post(`/apps/${app_id}/copy?new_name=${new_name}`)
}

20
web/src/api/member.ts Normal file
View File

@@ -0,0 +1,20 @@
import { request } from '@/utils/request'
// 成员列表
export const memberListUrl = '/workspaces/members'
// 邀请成员
export const inviteMember = (values: { email: string }) => {
return request.post(`/workspaces/invites`, values)
}
// 删除成员
export const deleteMember = (id: string) => {
return request.delete(`/workspaces/members/${id}`)
}
// 更新成员
export const updateMember = (values: { id: string, role: string }) => {
return request.put(`/workspaces/members`, [values])
}
// 验证邀请token
export const validateInviteToken = (token: string) => {
return request.get(`/workspaces/invites/validate/${token}`)
}

145
web/src/api/memory.ts Normal file
View File

@@ -0,0 +1,145 @@
import { request } from '@/utils/request'
import type {
MemoryFormData,
} from '@/views/MemoryManagement/types'
import type {
ConfigForm as ForgetConfigForm
} from '@/views/ForgettingEngine/types'
import type {
ConfigForm as ExtractionConfigForm
} from '@/views/MemoryExtractionEngine/types'
import type { TestParams } from '@/views/MemoryConversation'
// 记忆对话
export const readService = (query: TestParams) => {
return request.post('/memory/read_service', query)
}
/****************** 记忆看板 相关接口 *******************************/
// 记忆看板-记忆总量
export const getTotalMemoryCount = () => {
return request.get(`/dashboard/total_memory_count`)
}
// 记忆看板-知识库类型分布
export const getKbTypes = () => {
return request.get(`/memory/stats/types`)
}
// 记忆看板-热门记忆标签
export const getHotMemoryTags = () => {
return request.get(`/memory-storage/analytics/hot_memory_tags`)
}
// 记忆看板-最近活动统计
export const getRecentActivityStats = () => {
return request.get(`/memory-storage/analytics/recent_activity_stats`)
}
// 记忆看板-记忆增长趋势
export const getMemoryIncrement = (limit: number) => {
return request.get(`/dashboard/memory_increment`, { limit })
}
// 记忆看板-API调用趋势
export const getApiTrend = () => {
return request.get(`/dashboard/api_increment`)
}
// 记忆看板-总数据
export const getDashboardData = () => {
return request.get(`/dashboard/dashboard_data`)
}
/*************** end 记忆看板 相关接口 ******************************/
/****************** 用户记忆 相关接口 *******************************/
export const userMemoryListUrl = '/dashboard/end_users'
export const getUserMemoryList = () => {
return request.get(userMemoryListUrl)
}
// 用户记忆-用户记忆总量
export const getTotalEndUsers = () => {
return request.get(`/dashboard/total_end_users`)
}
// 用户记忆-用户详情
export const getUserProfile = (end_user_id: string) => {
return request.get(`/memory/analytics/user_profile`, { end_user_id })
}
// 用户记忆-记忆洞察
export const getMemoryInsightReport = (end_user_id: string) => {
return request.get(`/memory-storage/analytics/memory_insight/report`, { end_user_id })
}
// 用户记忆-用户摘要
export const getUserSummary = (end_user_id: string) => {
return request.get(`/memory-storage/analytics/user_summary`, { end_user_id })
}
// 用户记忆-关系网络
export const getMemorySearchEdges = (end_user_id: string) => {
return request.get(`/memory-storage/search/entity_graph`, { end_user_id })
}
// 用户记忆-用户兴趣分布
export const getHotMemoryTagsByUser = (end_user_id: string) => {
return request.get(`/memory/analytics/hot_memory_tags/by_user`, { end_user_id })
}
// 用户记忆-记忆总量
export const getTotalMemoryCountByUser = (end_user_id: string) => {
return request.get(`/memory-storage/search`, { end_user_id })
}
// RAG 用户记忆-记忆总量
export const getTotalRagMemoryCountByUser = (end_user_id: string) => {
return request.get(`/dashboard/current_user_rag_total_num`, { end_user_id })
}
// RAG 用户记忆-用户摘要
export const getChunkSummaryTag = (end_user_id: string) => {
return request.get(`/dashboard/chunk_summary_tag`, { end_user_id })
}
// RAG 用户记忆-记忆洞察
export const getChunkInsight = (end_user_id: string) => {
return request.get(`/dashboard/chunk_insight`, { end_user_id })
}
// RAG 用户记忆-存储内容
export const getRagContent = (end_user_id: string) => {
return request.get(`/dashboard/rag_content`, { end_user_id, limit: 20 })
}
/*************** end 用户记忆 相关接口 ******************************/
/****************** 记忆管理 相关接口 *******************************/
// 记忆管理-获取所有配置
export const memoryConfigListUrl = '/memory-storage/read_all_config'
export const getMemoryConfigList = () => {
return request.get(memoryConfigListUrl)
}
// 记忆管理-创建配置
export const createMemoryConfig = (values: MemoryFormData) => {
return request.post('/memory-storage/create_config', values)
}
// 记忆管理-更新配置
export const updateMemoryConfig = (values: MemoryFormData) => {
return request.post('/memory-storage/update_config', values)
}
// 记忆管理-删除配置
export const deleteMemoryConfig = (config_id: number) => {
return request.delete(`/memory-storage/delete_config?config_id=${config_id}`)
}
// 遗忘引擎-获取配置
export const getMemoryForgetConfig = (config_id: number | string) => {
return request.get('/memory-storage/read_config_forget', { config_id })
}
// 遗忘引擎-更新配置
export const updateMemoryForgetConfig = (values: ForgetConfigForm) => {
return request.post('/memory-storage/update_config_forget', values)
}
// 记忆萃取引擎-获取配置
export const getMemoryExtractionConfig = (config_id: number | string) => {
return request.get('/memory-storage/read_config_extracted', { config_id: config_id })
}
// 记忆萃取引擎-更新配置
export const updateMemoryExtractionConfig = (values: ExtractionConfigForm) => {
return request.post('/memory-storage/update_config_extracted', values)
}
// 记忆萃取引擎-试运行
export const pilotRunMemoryExtractionConfig = (values: { config_id: number | string; dialogue_text: string }) => {
return request.post('/memory-storage/pilot_run', values)
}
/*************** end 记忆管理 相关接口 ******************************/
/****************** API参数 相关接口 *******************************/
export const getMemoryApi = () => {
return request.get('/memory/docs/api')
}
/*************** end API参数 相关接口 ******************************/

23
web/src/api/models.ts Normal file
View File

@@ -0,0 +1,23 @@
import { request } from '@/utils/request'
import type { ModelFormData } from '@/views/ModelManagement/types'
// 模型列表
export const getModelListUrl = '/models'
export const getModelList = (data: { type: string; pagesize: number; page: number; }) => {
return request.get(getModelListUrl, data)
}
// 创建模型
export const addModel = (data: ModelFormData) => {
return request.post('/models', data)
}
// 更新模型
export const updateModel = (apiKeyId: string, data: ModelFormData) => {
return request.put(`/models/apikeys/${apiKeyId}`, data)
}
// 模型类型列表
export const modelTypeUrl = '/models/type'
// 模型供应商列表
export const modelProviderUrl = '/models/provider'
export const getModelProviderList = () => {
return request.get(modelProviderUrl)
}

40
web/src/api/user.ts Normal file
View File

@@ -0,0 +1,40 @@
import { request } from '@/utils/request'
import type { CreateModalData } from '@/views/UserManagement/types'
// 用户信息
export const getUsers = () => {
return request.get('/users')
}
// 用户列表
export const getUserListUrl = '/users/superusers'
// 登录
export const loginUrl = '/token'
export const login = (data: { email: string; password: string; invite?: string; username?: string }) => {
return request.post(loginUrl, data)
}
// 刷新token
export const refreshTokenUrl = '/refresh'
export const refreshToken = () => {
return request.post(refreshTokenUrl, { refresh_token: localStorage.getItem('refresh_token') })
}
// 重置密码
export const changePassword = (data: { user_id: string; new_password: string }) => {
return request.put('/users/admin/change-password', data)
}
// 禁用用户
export const deleteUser = (user_id: string) => {
return request.delete(`/users/${user_id}`)
}
// 启用用户
export const enableUser = (user_id: string) => {
return request.post(`/users/${user_id}/activate`)
}
// 创建用户
export const addUser = (data: CreateModalData) => {
return request.post('/users/superuser', data)
}
// 注销
export const logoutUrl = '/logout'
export const logout = () => {
return request.post(logoutUrl)
}

27
web/src/api/workspaces.ts Normal file
View File

@@ -0,0 +1,27 @@
import { request } from '@/utils/request'
import type { SpaceModalData } from '@/views/SpaceManagement/types'
// 空间列表
export const getWorkspaces = () => {
return request.get('/workspaces')
}
// 创建空间
export const createWorkspace = (values: SpaceModalData) => {
return request.post('/workspaces', values)
}
// 切换空间
export const switchWorkspace = (workspaceId: string) => {
return request.put(`/workspaces/${workspaceId}/switch`)
}
// 获取空间存储类型
export const getWorkspaceStorageType = () => {
return request.get(`/workspaces/storage`)
}
// 获取空间模型配置
export const getWorkspaceModels = () => {
return request.get(`/workspaces/workspace_models`)
}
// 更新空间模型配置
export const updateWorkspaceModels = () => {
return request.post(`/workspaces/workspace_models`)
}