From 116e4bef3c94e3879d317d7b7b8f895f3733450a Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Sun, 25 Jun 2023 16:09:58 +0800 Subject: [PATCH] feat: add a tool --- utils/tools/ProcessPictureTool.js | 65 +++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/utils/tools/ProcessPictureTool.js b/utils/tools/ProcessPictureTool.js index e69de29..2540519 100644 --- a/utils/tools/ProcessPictureTool.js +++ b/utils/tools/ProcessPictureTool.js @@ -0,0 +1,65 @@ +import { AbstractTool } from './AbstractTool.js' +import fetch, { File, FormData } from 'node-fetch' +import { Config } from '../config.js' +export class ProcessPictureTool extends AbstractTool { + name = 'processPicture' + + parameters = { + properties: { + type: { + type: 'string', + enum: ['Image2Hed', 'Image2Scribble'], + description: 'how to process it. Image2Hed: useful when you want to detect the soft hed boundary of the image; Image2Scribble: useful when you want to generate a scribble of the image' + }, + qq: { + type: 'string', + description: 'if the picture is avatar of a user, input his qq number' + }, + url: { + type: 'string', + description: 'url of the picture' + } + }, + required: [] + } + + description = 'useful when you want to know what is inside a photo, such as user\'s avatar or other pictures' + + func = async function (opts) { + let { imgUrl, qq, type } = opts + if (qq) { + imgUrl = `https://q1.qlogo.cn/g?b=qq&s=160&nk=${qq}` + } + if (!imgUrl) { + return 'you must give at least one parameter of imgUrl and qq' + } + const imageResponse = await fetch(imgUrl) + const blob = await imageResponse.blob() + const arrayBuffer = await blob.arrayBuffer() + const buffer = Buffer.from(arrayBuffer) + // await fs.writeFileSync(`data/chatgpt/${crypto.randomUUID()}`, buffer) + let formData = new FormData() + formData.append('file', new File([buffer], 'file.png', { type: 'image/png' })) + let endpoint = 'image2hed' + switch (type) { + case 'Image2Scribble': { + endpoint = 'image2Scribble' + break + } + case 'Image2Hed': { + endpoint = 'image2hed' + break + } + } + let captionRes = await fetch(`${Config.extraUrl}/${endpoint}`, { + method: 'POST', + body: formData + }) + if (captionRes.status === 200) { + let result = await captionRes.text() + return `the processed image url is ${result}` + } else { + return 'error happened' + } + } +}