|
import { genUUID } from "./utils" |
|
import { Language } from "@/types" |
|
import axios from "axios" |
|
import { AddonDef, Connection, Graph, Node } from "./graph" |
|
|
|
interface StartRequestConfig { |
|
channel: string |
|
userId: number, |
|
graphName: string, |
|
language: Language, |
|
voiceType: "male" | "female" |
|
} |
|
|
|
interface GenAgoraDataConfig { |
|
userId: string | number |
|
channel: string |
|
} |
|
|
|
export const apiGenAgoraData = async (config: GenAgoraDataConfig) => { |
|
|
|
const url = `/api/token/generate` |
|
const { userId, channel } = config |
|
const data = { |
|
request_id: genUUID(), |
|
uid: userId, |
|
channel_name: channel |
|
} |
|
let resp: any = await axios.post(url, data) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
export const apiStartService = async (config: StartRequestConfig): Promise<any> => { |
|
|
|
const url = `/api/agents/start` |
|
const { channel, userId, graphName, language, voiceType } = config |
|
const data = { |
|
request_id: genUUID(), |
|
channel_name: channel, |
|
user_uid: userId, |
|
graph_name: graphName, |
|
language, |
|
voice_type: voiceType |
|
} |
|
let resp: any = await axios.post(url, data) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
export const apiStopService = async (channel: string) => { |
|
|
|
const url = `/api/agents/stop` |
|
const data = { |
|
request_id: genUUID(), |
|
channel_name: channel |
|
} |
|
let resp: any = await axios.post(url, data) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
export const apiGetDocumentList = async () => { |
|
|
|
const url = `/api/vector/document/preset/list` |
|
let resp: any = await axios.get(url) |
|
resp = (resp.data) || {} |
|
if (resp.code !== "0") { |
|
throw new Error(resp.msg) |
|
} |
|
return resp |
|
} |
|
|
|
export const apiUpdateDocument = async (options: { channel: string, collection: string, fileName: string }) => { |
|
|
|
const url = `/api/vector/document/update` |
|
const { channel, collection, fileName } = options |
|
const data = { |
|
request_id: genUUID(), |
|
channel_name: channel, |
|
collection: collection, |
|
file_name: fileName |
|
} |
|
let resp: any = await axios.post(url, data) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
|
|
|
|
export const apiPing = async (channel: string) => { |
|
|
|
const url = `/api/agents/ping` |
|
const data = { |
|
request_id: genUUID(), |
|
channel_name: channel |
|
} |
|
let resp: any = await axios.post(url, data) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
export const apiFetchAddonsExtensions = async (): Promise<AddonDef.Module[]> => { |
|
let resp: any = await axios.get(`/api/dev/v1/addons/extensions`) |
|
return resp.data.data |
|
} |
|
|
|
export const apiCheckCompatibleMessages = async (payload: { |
|
app: string |
|
graph: string |
|
extension_group: string |
|
extension: string |
|
msg_type: string |
|
msg_direction: string |
|
msg_name: string |
|
}) => { |
|
let resp: any = await axios.post(`/api/dev/v1/messages/compatible`, payload) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
export const apiFetchGraphs = async (): Promise<Graph[]> => { |
|
let resp: any = await axios.get(`/api/agents/graphs`) |
|
return resp.data.data.map((graph: any) => ({ |
|
id: graph.name, |
|
autoStart: graph.auto_start, |
|
nodes: [], |
|
connections: [], |
|
})) |
|
} |
|
|
|
export const apiFetchGraphNodes = async (graphId: string): Promise<Node[]> => { |
|
let resp: any = await axios.get(`/api/dev/v1/graphs/${graphId}/nodes`) |
|
return resp.data.data.map((node: any) => ({ |
|
name: node.name, |
|
addon: node.addon, |
|
extensionGroup: node.extension_group, |
|
app: node.app, |
|
property: node.property || {}, |
|
})) |
|
} |
|
|
|
export const apiFetchGraphConnections = async (graphId: string): Promise<Connection[]> => { |
|
let resp: any = await axios.get(`/api/dev/v1/graphs/${graphId}/connections`) |
|
return resp.data.data.map( |
|
(connection: any) => ({ |
|
app: connection.app, |
|
extensionGroup: connection.extension_group, |
|
extension: connection.extension, |
|
cmd: connection.cmd?.map((cmd: any) => ({ |
|
name: cmd.name, |
|
dest: cmd.dest.map((dest: any) => ({ |
|
app: dest.app, |
|
extensionGroup: dest.extension_group, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule: any) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
data: connection.data?.map((data: any) => ({ |
|
name: data.name, |
|
dest: data.dest.map((dest: any) => ({ |
|
app: dest.app, |
|
extensionGroup: dest.extension_group, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule: any) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
audio_frame: connection.audio_frame?.map((audioFrame: any) => ({ |
|
name: audioFrame.name, |
|
dest: audioFrame.dest.map((dest: any) => ({ |
|
app: dest.app, |
|
extensionGroup: dest.extension_group, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule: any) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
video_frame: connection.video_frame?.map((videoFrame: any) => ({ |
|
name: videoFrame.name, |
|
dest: videoFrame.dest.map((dest: any) => ({ |
|
app: dest.app, |
|
extensionGroup: dest.extension_group, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule: any) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
}), |
|
) |
|
} |
|
|
|
export const apiUpdateGraph = async (graphId: string, updates: Partial<Graph>) => { |
|
const { autoStart, nodes, connections } = updates |
|
const payload: any = {} |
|
|
|
|
|
if (autoStart !== undefined) payload.auto_start = autoStart |
|
|
|
|
|
if (nodes) { |
|
payload.nodes = nodes.map((node) => ({ |
|
name: node.name, |
|
addon: node.addon, |
|
extension_group: node.extensionGroup, |
|
app: node.app, |
|
property: node.property, |
|
})) |
|
} |
|
|
|
|
|
if (connections) { |
|
payload.connections = connections.map((connection) => ({ |
|
app: connection.app, |
|
extension: connection.extension, |
|
cmd: connection.cmd?.map((cmd) => ({ |
|
name: cmd.name, |
|
dest: cmd.dest.map((dest) => ({ |
|
app: dest.app, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
data: connection.data?.map((data) => ({ |
|
name: data.name, |
|
dest: data.dest.map((dest) => ({ |
|
app: dest.app, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
audio_frame: connection.audio_frame?.map((audioFrame) => ({ |
|
name: audioFrame.name, |
|
dest: audioFrame.dest.map((dest) => ({ |
|
app: dest.app, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
video_frame: connection.video_frame?.map((videoFrame) => ({ |
|
name: videoFrame.name, |
|
dest: videoFrame.dest.map((dest) => ({ |
|
app: dest.app, |
|
extension: dest.extension, |
|
msgConversion: dest.msgConversion |
|
? { |
|
type: dest.msgConversion.type, |
|
rules: dest.msgConversion.rules.map((rule) => ({ |
|
path: rule.path, |
|
conversionMode: rule.conversionMode, |
|
value: rule.value, |
|
originalPath: rule.originalPath, |
|
})), |
|
keepOriginal: dest.msgConversion.keepOriginal, |
|
} |
|
: undefined, |
|
})), |
|
})), |
|
})) |
|
} |
|
|
|
let resp: any = await axios.put(`/api/dev/v1/graphs/${graphId}`, payload) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
export const apiFetchAddonModulesDefaultProperties = async (): Promise< |
|
Record<string, Partial<AddonDef.Module>> |
|
> => { |
|
let resp: any = await axios.get(`/api/dev/v1/addons/default-properties`) |
|
const properties = resp.data.data |
|
const result: Record<string, Partial<AddonDef.Module>> = {} |
|
for (const property of properties) { |
|
result[property.addon] = property.property |
|
} |
|
return result |
|
} |
|
|
|
export const apiSaveProperty = async () => { |
|
let resp: any = await axios.put(`/api/dev/v1/property`) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
export const apiReloadPackage = async () => { |
|
let resp: any = await axios.post(`/api/dev/v1/packages/reload`) |
|
resp = (resp.data) || {} |
|
return resp |
|
} |
|
|
|
|
|
export const apiFetchInstalledAddons = async (): Promise<AddonDef.Module[]> => { |
|
const [modules, defaultProperties] = await Promise.all([ |
|
apiFetchAddonsExtensions(), |
|
apiFetchAddonModulesDefaultProperties(), |
|
]) |
|
return modules.map((module: any) => ({ |
|
name: module.name, |
|
defaultProperty: defaultProperties[module.name], |
|
api: module.api, |
|
})) |
|
} |
|
|
|
export const apiFetchGraphDetails = async (graphId: string): Promise<Graph> => { |
|
const [nodes, connections] = await Promise.all([ |
|
apiFetchGraphNodes(graphId), |
|
apiFetchGraphConnections(graphId), |
|
]) |
|
return { |
|
id: graphId, |
|
autoStart: true, |
|
nodes, |
|
connections, |
|
} |
|
} |