LLMController.go 2.39 KB
Newer Older
duanjinfei's avatar
duanjinfei committed
1 2 3
package controllers

import (
duanjinfei's avatar
duanjinfei committed
4
	"bytes"
duanjinfei's avatar
duanjinfei committed
5 6 7 8 9 10
	"crypto/ecdsa"
	"encoding/json"
	"github.com/astaxie/beego"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/common/hexutil"
	"github.com/ethereum/go-ethereum/crypto"
duanjinfei's avatar
duanjinfei committed
11 12 13 14 15 16
	"github.com/ethereum/go-ethereum/log"
	_ "image/gif"  // 导入 GIF 支持
	_ "image/jpeg" // 导入 JPEG 支持
	_ "image/png"  // 导入 PNG 支持
	"net/http"
	"os"
duanjinfei's avatar
duanjinfei committed
17 18 19 20 21 22 23 24 25 26 27 28 29
	"time"
	"token-uri/models"
)

type LLMController struct {
	BaseController
}

func (c *LLMController) GetContainerSign() {
	signData := &models.TaskInfo{}
	reqData := c.Ctx.Input.RequestBody
	err := json.Unmarshal(reqData, signData)
	if err != nil {
duanjinfei's avatar
duanjinfei committed
30
		c.ResponseInfo(500, "sign container failed", nil)
duanjinfei's avatar
duanjinfei committed
31 32 33
		return
	}
	signPrv := beego.AppConfig.String("sign_prv")
duanjinfei's avatar
duanjinfei committed
34
	if signData.TaskResult == nil || signData.TaskParam == nil || signData.TaskId == "" {
duanjinfei's avatar
duanjinfei committed
35
		c.ResponseInfo(500, "sign container is failed", nil)
duanjinfei's avatar
duanjinfei committed
36 37
		return
	}
duanjinfei's avatar
duanjinfei committed
38
	bridgePrv := stringToPrivateKey(signPrv)
duanjinfei's avatar
duanjinfei committed
39 40 41
	reqHash := crypto.Keccak256Hash(signData.TaskParam)
	respHash := crypto.Keccak256Hash(signData.TaskResult)
	signHash := crypto.Keccak256Hash(bytes.NewBufferString(signData.TaskId).Bytes(), reqHash.Bytes(), respHash.Bytes())
duanjinfei's avatar
duanjinfei committed
42
	signature, err := crypto.Sign(signHash.Bytes(), bridgePrv)
duanjinfei's avatar
duanjinfei committed
43 44 45
	if err != nil {
		return
	}
duanjinfei's avatar
duanjinfei committed
46
	signHex := common.Bytes2Hex(signature)
duanjinfei's avatar
duanjinfei committed
47
	c.ResponseInfo(200, "sign container successful", signHex)
duanjinfei's avatar
duanjinfei committed
48 49
}

duanjinfei's avatar
duanjinfei committed
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
func (c *LLMController) GetImage() {
	filePath := "response.png" // 替换为实际图片文件路径
	// 打开图片文件
	file, err := os.Open(filePath)
	if err != nil {
		log.Error("Error opening file:", err)
		c.ResponseInfo(500, "Error opening file:", err)
		return
	}
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			log.Error("Error closing file:", err)
		}
	}(file)

	// 设置 Content-Type 为图片类型
	c.Ctx.Output.Header("Content-Type", "image/jpeg")

	http.ServeContent(c.Ctx.ResponseWriter, c.Ctx.Request, "", time.Now(), file)

}

func (c *LLMController) GetText() {
	c.ResponseInfo(200, "sss", nil)
}

duanjinfei's avatar
duanjinfei committed
77 78
func (c *LLMController) GetExecRes() {
	time.Sleep(time.Second * 5)
duanjinfei's avatar
duanjinfei committed
79
	c.ResponseInfo(200, "OK", "https://paint4art.oss-cn-beijing.aliyuncs.com/aiimages/SN90P6aKwh.jpg")
duanjinfei's avatar
duanjinfei committed
80 81 82 83 84 85 86 87 88 89 90 91 92
}

func stringToPrivateKey(privateKeyStr string) *ecdsa.PrivateKey {
	privateKeyByte, err := hexutil.Decode(privateKeyStr)
	if err != nil {
		return nil
	}
	privateKey, err := crypto.ToECDSA(privateKeyByte)
	if err != nil {
		return nil
	}
	return privateKey
}