Spaces:
Runtime error
Runtime error
File size: 1,998 Bytes
cd6f98e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import { useQuery, useQueryClient } from "@tanstack/react-query";
import { z } from "zod";
import { get } from "../services/fetch-utils";
import { useAgentStore } from "../stores";
const Tool = z.object({
name: z.string(),
description: z.string(),
color: z.string(),
image_url: z.string().optional(),
});
const ToolsResponseSchema = z.object({
tools: z.array(Tool),
});
const ActiveToolSchema = Tool.extend({
active: z.boolean(),
});
export type ActiveTool = z.infer<typeof ActiveToolSchema>;
const loadTools = async (key: string) => {
const allTools = await get("/api/agent/tools", ToolsResponseSchema);
const data = localStorage.getItem(key);
let activeTools: ActiveTool[] = [];
try {
const obj = z.array(ActiveToolSchema).parse(JSON.parse(data ?? ""));
activeTools = allTools.tools.map((db_tool) => {
const tool = obj.find((t) => t.name === db_tool.name);
return tool ?? { ...db_tool, active: false };
});
} catch (error) {
activeTools = allTools.tools.map((toolModel) => ({ ...toolModel, active: false }));
}
return activeTools;
};
const save = (key: string, data: object) => {
localStorage.setItem(key, JSON.stringify(data));
};
export function useTools() {
const setTools = useAgentStore.use.setTools();
const queryClient = useQueryClient();
const query = useQuery(["tools"], () => loadTools("tools"), {
onSuccess: (data) => {
updateActiveTools(data);
},
});
function updateActiveTools(data: ActiveTool[]) {
save("tools", data);
setTools(data.filter((tool) => tool.active));
}
const setToolActive = (toolName: string, active: boolean) => {
queryClient.setQueriesData(["tools"], (old) => {
const data = (old as ActiveTool[]).map((tool) =>
tool.name === toolName ? { ...tool, active } : tool
);
updateActiveTools(data);
return data;
});
};
return {
activeTools: query.data ?? [],
setToolActive,
isSuccess: query.isSuccess,
};
}
|