mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
feat: add a tool
This commit is contained in:
parent
da27e6a1b3
commit
116e4bef3c
1 changed files with 65 additions and 0 deletions
|
|
@ -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'
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue