Browse Source

bug fix: openai api

master
RealXLFD 3 months ago
parent
commit
3034ba2867
  1. 4
      go.mod
  2. 9
      go.sum
  3. 36
      main.go
  4. 25
      openai/consts.go
  5. 24
      openai/req.go

4
go.mod

@ -5,15 +5,19 @@ go 1.22
require (
github.com/dustin/go-humanize v1.0.1
github.com/gookit/color v1.5.4
github.com/k0kubun/pp/v3 v3.2.0
github.com/parnurzeal/gorequest v0.3.0
)
require (
github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/moul/http2curl v1.0.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/smartystreets/goconvey v1.8.1 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
golang.org/x/net v0.22.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
)

9
go.sum

@ -11,6 +11,12 @@ github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25d
github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/k0kubun/pp/v3 v3.2.0 h1:h33hNTZ9nVFNP3u2Fsgz8JXiF5JINoZfFq4SvKJwNcs=
github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs=
github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
github.com/parnurzeal/gorequest v0.3.0 h1:SoFyqCDC9COr1xuS6VA8fC8RU7XyrJZN2ona1kEX7FI=
@ -30,7 +36,10 @@ github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHg
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

36
main.go

@ -1,19 +1,31 @@
package main
import (
"fmt"
"git.realxlfd.cc/RealXLFD/golib/spinner"
"time"
"git.realxlfd.cc/RealXLFD/golib/openai"
"github.com/k0kubun/pp/v3"
)
func main() {
s := spinner.New("测试中", spinner.Circle)
s.Start()
time.Sleep(5 * time.Second)
s.Finish("OK")
var a int
_, err := fmt.Scanln(a)
if err != nil {
return
}
openai.SetBase(`https://openai-api.proxy.realxlfd.top`)
openai.SetProxy(`http://127.0.0.1:7890`)
models, errs := openai.GetModels(
`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`,
)
pp.Println(errs)
pp.Println(models)
chat := openai.New(&openai.Model{
Id: `gpt-4-turbo-preview`,
})
msg, token, errs := chat.AddPrompt(
`Your task is to extract TV show information from filenames, including the title, season, and episode number, while ignoring the production team's name. If the season or episode is not specified, infer them. Format your response as "{Show Title} {Season Number} {Episode Number}". For instance, the file "[Airota&VCB-Studio] SLOW LOOP [08][Ma10p_1080p][x265_flac].mkv" should be responded to with "{SLOW LOOP} {01} {08}".`,
).AddMsg(
openai.Msg{
Role: openai.RoleUser,
Content: `[LoliHouse] Rikei ga Koi ni Ochita no de Shoumei
shitemita 4th - 02 [WebRip 1080p HEVC-10bit AAC ASSx2]`,
},
).Completion(true)
pp.Println(errs)
pp.Println(token)
pp.Println(msg)
}

25
openai/consts.go

@ -2,33 +2,36 @@ package openai
// 模型
var (
ModelGPT3_T = Model{
ModelGPT3_T = &Model{
Id: "gpt-3.5-turbo",
}
ModelGPT3_T_0125 = Model{
ModelGPT3_T_0125 = &Model{
Id: "gpt-3.5-turbo-0125",
}
ModelGPT3_T_0301 = Model{
ModelGPT3_T_0301 = &Model{
Id: "gpt-3.5-turbo-0301",
}
ModelGPT3_T_16K = Model{
ModelGPT3_T_16K = &Model{
Id: "gpt-3.5-turbo-16k",
}
ModelGPT3_T_16K_0613 = Model{
ModelGPT3_T_16K_0613 = &Model{
Id: "gpt-3.5-turbo-16k-0613",
}
ModelGPT4 = &Model{
Id: "gpt-4",
}
ModelGPT4_P = &Model{
Id: "gpt-4-turbo-preview",
}
)
// 角色
const (
RoleSystem Role = "system"
RoleAssistant Role = "assistant"
RoleUser Role = "user"
RoleSystem = "system"
RoleAssistant = "assistant"
RoleUser = "user"
)
// Role 对话角色预设
type Role string
// Completions 对话URL Path
// ListModels 模型查询URL
const (

24
openai/req.go

@ -47,7 +47,7 @@ func (c *Chat) AddPrompt(prompt string) *Chat {
// NewMsg 创建一个新对话消息
func NewMsg(
role Role,
role string,
content string,
) Msg {
return Msg{
@ -66,16 +66,19 @@ func (c *Chat) AddMsg(msg Msg) *Chat {
}
// Completion 完成对话,其中回复会自动添加至对话中
func (c *Chat) Completion(autoAppend bool) (*TokenCount, []error) {
func (c *Chat) Completion(autoAppend bool) (Msg, *TokenCount, []error) {
resp, errs := c.Send()
if errs != nil {
return nil, errs
return Msg{}, nil, errs
}
msg, token := resp.Parse()
if autoAppend {
c.dialog = append(c.dialog, msg)
c.dialog = append(
c.dialog,
msg,
)
}
return token, nil
return msg, token, nil
}
// Send 发送请求获取对话响应
@ -85,8 +88,11 @@ func (c *Chat) Send() (
) {
chain := &Request{
Model: c.model,
Messages: append(c.sysPrompt, c.dialog...),
Model: c.model,
Messages: append(
c.sysPrompt,
c.dialog...,
),
}
reqJSON, err := json.Marshal(chain)
if err != nil {
@ -108,12 +114,12 @@ func (c *Chat) Send() (
if proxy != nil {
req.Proxy(proxy.String())
}
resp, data, errs := req.Send(reqJSON).Retry(
resp, data, errs := req.Retry(
3,
time.Second,
500,
502,
).End()
).Send(string(reqJSON)).End()
if errs != nil {
return nil, errs
}

Loading…
Cancel
Save