first
This commit is contained in:
parent
9ea57475f7
commit
5f7a2e2adb
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
.*
|
||||
!.gitignore
|
||||
go.sum
|
||||
env.yml
|
||||
node_modules
|
||||
package.json
|
||||
*.bak.*
|
||||
*.png
|
||||
*.jpg
|
||||
*.jpeg
|
35
go.mod
Normal file
35
go.mod
Normal file
@ -0,0 +1,35 @@
|
||||
module Huoshan
|
||||
|
||||
go 1.18
|
||||
|
||||
require (
|
||||
apigo.cc/apigo/gojs v0.1.1
|
||||
github.com/ssgo/config v1.7.7
|
||||
github.com/ssgo/log v1.7.7
|
||||
github.com/ssgo/u v1.7.7
|
||||
github.com/volcengine/volc-sdk-golang v1.0.178
|
||||
)
|
||||
|
||||
require (
|
||||
golang.org/x/net v0.29.0 // indirect
|
||||
golang.org/x/text v0.18.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.1.2 // indirect
|
||||
github.com/dlclark/regexp2 v1.11.4 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
|
||||
github.com/go-sql-driver/mysql v1.8.1 // indirect
|
||||
github.com/google/pprof v0.0.0-20230207041349-798e818bf904 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/ssgo/dao v0.1.5 // indirect
|
||||
github.com/ssgo/db v1.7.9 // indirect
|
||||
github.com/ssgo/httpclient v1.7.7 // indirect
|
||||
github.com/ssgo/standard v1.7.7 // indirect
|
||||
github.com/ssgo/tool v0.4.27 // indirect
|
||||
golang.org/x/sys v0.25.0 // indirect
|
||||
)
|
44
huoshan.go
Normal file
44
huoshan.go
Normal file
@ -0,0 +1,44 @@
|
||||
package huoshan
|
||||
|
||||
import (
|
||||
"apigo.cc/apigo/gojs"
|
||||
_ "embed"
|
||||
"github.com/ssgo/config"
|
||||
"github.com/ssgo/log"
|
||||
"github.com/ssgo/u"
|
||||
)
|
||||
|
||||
//go:embed huoshan.ts
|
||||
var huoshanTS string
|
||||
|
||||
type Conf struct {
|
||||
AKey string
|
||||
SKey string
|
||||
}
|
||||
|
||||
var conf = Conf{}
|
||||
|
||||
var confAes = u.NewAes([]byte("?GQ$0K0GgLdO=f+~L68PLm$uhKr4'=tV"), []byte("VFs7@sK61cj^f?HZ"))
|
||||
var keysIsSet = false
|
||||
|
||||
func SetSSKey(key, iv []byte) {
|
||||
if !keysIsSet {
|
||||
confAes = u.NewAes(key, iv)
|
||||
keysIsSet = true
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
obj := gojs.Map{
|
||||
"image": RequireImage(),
|
||||
}
|
||||
config.LoadConfig("huoshan", &conf)
|
||||
conf.AKey = confAes.DecryptUrlBase64ToString(conf.AKey)
|
||||
conf.SKey = confAes.DecryptUrlBase64ToString(conf.SKey)
|
||||
log.DefaultLogger.Info("Conf", "", conf)
|
||||
gojs.Register("huoshan", gojs.Module{
|
||||
Object: obj,
|
||||
TsCode: huoshanTS,
|
||||
Example: "",
|
||||
})
|
||||
}
|
10
huoshan.ts
Normal file
10
huoshan.ts
Normal file
@ -0,0 +1,10 @@
|
||||
export default {
|
||||
image: {
|
||||
text2image,
|
||||
image2image,
|
||||
readImage
|
||||
}
|
||||
}
|
||||
function text2image(prompt:string, option?:Object):string {return ""}
|
||||
function image2image(image:string[], prompt:string, option?:Object):string {return ""}
|
||||
function readImage(path:string):string {return ""}
|
117
image.go
Normal file
117
image.go
Normal file
@ -0,0 +1,117 @@
|
||||
package huoshan
|
||||
|
||||
import (
|
||||
"apigo.cc/apigo/gojs"
|
||||
"apigo.cc/apigo/gojs/dop251/goja"
|
||||
"errors"
|
||||
"github.com/ssgo/log"
|
||||
"github.com/ssgo/u"
|
||||
"github.com/volcengine/volc-sdk-golang/service/visual"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
func RequireImage() gojs.Map {
|
||||
return map[string]interface{}{
|
||||
"text2image": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
return vm.ToValue(T2IXL(args.Str(0), args.Map(1), vm))
|
||||
},
|
||||
"image2image": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(2)
|
||||
v := u.FinalValue(reflect.ValueOf(args.Arguments[0].Export()))
|
||||
switch v.Type().Kind() {
|
||||
case reflect.String:
|
||||
option := args.Map(2)
|
||||
if option == nil {
|
||||
option = map[string]interface{}{}
|
||||
}
|
||||
option["binary_data_base64"] = []string{
|
||||
args.Str(0),
|
||||
}
|
||||
return vm.ToValue(I2IXLbyUrl(nil, args.Str(1), option, vm))
|
||||
case reflect.Slice:
|
||||
vv := u.FinalValue(v.Index(0))
|
||||
if vv.Type().Kind() == reflect.Uint8 {
|
||||
option := args.Map(2)
|
||||
if option == nil {
|
||||
option = map[string]interface{}{}
|
||||
}
|
||||
option["binary_data_base64"] = []string{
|
||||
u.Base64(args.Bytes(0)),
|
||||
}
|
||||
return vm.ToValue(I2IXLbyUrl(nil, args.Str(1), option, vm))
|
||||
} else if vv.Type().Kind() == reflect.String {
|
||||
arr := make([]string, 0)
|
||||
u.Convert(args.Any(0), &arr)
|
||||
return vm.ToValue(I2IXLbyUrl(arr, args.Str(1), args.Map(2), vm))
|
||||
} else {
|
||||
log.DefaultLogger.Error("image type is slice but not supported", "type", args.Arguments[0].ExportType().Kind().String(), "elemType", vv.Type().Kind().String())
|
||||
panic(vm.NewGoError(errors.New(u.Red("image type is slice but not supported"))))
|
||||
return nil
|
||||
}
|
||||
}
|
||||
log.DefaultLogger.Error("image type not supported", "type", args.Arguments[0].ExportType().Kind().String())
|
||||
panic(vm.NewGoError(errors.New(u.Red("image type not supported"))))
|
||||
return nil
|
||||
},
|
||||
"readImage": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
if r, err := u.ReadFileBytes(args.Path(0)); err == nil {
|
||||
return vm.ToValue(r)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// T2IXL used t2i_xl_sft
|
||||
//
|
||||
// option 会覆盖已有参数,可传空,return_url不可更改
|
||||
func T2IXL(prompt string, option map[string]interface{}, vm *goja.Runtime) []string {
|
||||
vis := visual.NewInstance()
|
||||
vis.Client.SetAccessKey(conf.AKey)
|
||||
vis.Client.SetSecretKey(conf.SKey)
|
||||
data := map[string]interface{}{
|
||||
"req_key": "t2i_xl_sft",
|
||||
"prompt": prompt,
|
||||
}
|
||||
if option != nil {
|
||||
u.Convert(option, &data)
|
||||
}
|
||||
data["return_url"] = true
|
||||
resp, status, err := vis.Text2ImgXLSft(data)
|
||||
if status != 200 || err != nil {
|
||||
log.DefaultLogger.Error("request error", status, err)
|
||||
panic(vm.NewGoError(err))
|
||||
return []string{}
|
||||
}
|
||||
return resp.Data.ImageUrls
|
||||
}
|
||||
|
||||
// I2IXLbyUrl used t2i_xl_sft
|
||||
//
|
||||
// option 会覆盖已有参数,可传空,return_url不可更改
|
||||
func I2IXLbyUrl(imageUrls []string, prompt string, option map[string]interface{}, vm *goja.Runtime) []string {
|
||||
vis := visual.NewInstance()
|
||||
vis.Client.SetAccessKey(conf.AKey)
|
||||
vis.Client.SetSecretKey(conf.SKey)
|
||||
data := map[string]interface{}{
|
||||
"req_key": "i2i_xl_sft",
|
||||
"prompt": prompt,
|
||||
}
|
||||
if imageUrls != nil {
|
||||
data["image_urls"] = imageUrls
|
||||
}
|
||||
if option != nil {
|
||||
u.Convert(option, &data)
|
||||
}
|
||||
data["return_url"] = true
|
||||
resp, status, err := vis.Img2ImgXLSft(data)
|
||||
if status != 200 || err != nil {
|
||||
log.DefaultLogger.Error("request error", "status", status, "err", err, "resp", resp)
|
||||
panic(vm.NewGoError(err))
|
||||
return []string{}
|
||||
}
|
||||
return resp.Data.ImageUrls
|
||||
}
|
25
test.js
Normal file
25
test.js
Normal file
@ -0,0 +1,25 @@
|
||||
import {image} from "huoshan"
|
||||
import u from "util"
|
||||
|
||||
function main() {
|
||||
let a = image.image2image(u.base64(image.readImage("img_2.jpeg")), "在吃冰淇淋", {
|
||||
style_reference_args: {
|
||||
id_weight: 1.0
|
||||
}
|
||||
})
|
||||
let b = image.image2image(image.readImage("img_2.jpeg"), "在吃冰淇淋", {
|
||||
style_reference_args: {
|
||||
id_weight: 1.0
|
||||
}
|
||||
})
|
||||
let c = image.image2image([""], "在吃冰淇淋", {
|
||||
style_reference_args: {
|
||||
id_weight: 1.0
|
||||
}
|
||||
})
|
||||
return {
|
||||
a: a,
|
||||
b: b,
|
||||
c: c
|
||||
}
|
||||
}
|
22
textin_test.go
Normal file
22
textin_test.go
Normal file
@ -0,0 +1,22 @@
|
||||
package huoshan
|
||||
|
||||
import (
|
||||
"apigo.cc/apigo/gojs"
|
||||
_ "apigo.cc/apigo/gojs/modules"
|
||||
"fmt"
|
||||
"github.com/ssgo/u"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestExport(t *testing.T) {
|
||||
gojs.ExportForDev()
|
||||
}
|
||||
|
||||
func TestLLM(t *testing.T) {
|
||||
r, err := gojs.RunFile("test.js")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
fmt.Println()
|
||||
fmt.Println(u.JsonP(r))
|
||||
}
|
Loading…
Reference in New Issue
Block a user