This commit is contained in:
Zheng Kai
2023-03-31 11:34:20 +08:00
parent 8e72c62281
commit a0fe0b26ee
7 changed files with 109 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
curl http://localhost:21035/v1/engines/text-embedding-ada-002/embeddings \ curl http://localhost:22035/v1/engines/text-embedding-ada-002/embeddings \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"input": ["\u80fd\u91cf\u793c\u7269\u662f\u600e\u4e48\u56de\u4e8b\uff1f\u7528\u4e2d\u6587"], "encoding_format": "base64"}' -d '{"input":["\u80fd\u91cf\u793c\u7269\u662f\u600e\u4e48\u56de\u4e8b\uff1f\u7528\u4e2d\u6587"], "encoding_format": "base64"}'

View File

@@ -10,7 +10,7 @@ var (
WebAddr = `localhost:22035` WebAddr = `localhost:22035`
RemoteAPI = `https://api.openai.com` OpenAIBase = `https://api.openai.com`
OpenAIKey = `` OpenAIKey = ``
) )

View File

@@ -1,6 +1,8 @@
package config package config
import ( import (
"fmt"
"net/url"
"os" "os"
"path/filepath" "path/filepath"
) )
@@ -22,4 +24,10 @@ func init() {
*v = s *v = s
} }
} }
_, err := url.Parse(OpenAIBase)
if err != nil {
fmt.Println(`OpenAI base URL is invalid.`)
panic(err)
}
} }

View File

@@ -2,22 +2,22 @@ package core
import ( import (
"bytes" "bytes"
"fmt"
"io" "io"
"net/http" "net/http"
"net/url" "net/url"
"project/config" "project/config"
"project/pb" "project/util"
"project/zj"
"time" "time"
) )
func fetchRemote(r *pb.Req) (ab []byte, err error) { func (pr *row) fetchRemote() (ab []byte, ok bool, err error) {
u, err := url.Parse(config.RemoteAPI) r := pr.req
if err != nil { var b bytes.Buffer
zj.W(`url fail`, config.RemoteAPI, err) pr.failLog = &b
return
} u, _ := url.Parse(config.OpenAIBase)
u.Path = r.Path u.Path = r.Path
req, err := http.NewRequest(r.Method, u.String(), bytes.NewReader(r.Body)) req, err := http.NewRequest(r.Method, u.String(), bytes.NewReader(r.Body))
@@ -25,6 +25,17 @@ func fetchRemote(r *pb.Req) (ab []byte, err error) {
return return
} }
b.WriteString(pr.hr.URL.String())
b.WriteString("\n\nreq header:\n\n")
for k, v := range pr.hr.Header {
fmt.Fprintf(&b, "\t%s: %v\n", k, v)
}
b.WriteString("\n")
fmt.Fprintf(&b, "req body: %d\n\n", len(r.Body))
if len(r.Body) > 0 {
fmt.Fprintf(&b, "%s\n\n", r.Body)
}
req.Header.Set(`Content-Type`, `application/json`) req.Header.Set(`Content-Type`, `application/json`)
req.Header.Set(`Authorization`, `Bearer `+config.OpenAIKey) req.Header.Set(`Authorization`, `Bearer `+config.OpenAIKey)
@@ -33,14 +44,35 @@ func fetchRemote(r *pb.Req) (ab []byte, err error) {
} }
rsp, err := client.Do(req) rsp, err := client.Do(req)
if err != nil { if err != nil {
fmt.Fprintf(&b, "client.Do fail: %s\n", err.Error())
return return
} }
for k, v := range rsp.Header { if rsp.StatusCode >= 200 || rsp.StatusCode < 300 {
zj.J(k, v) // ok = true
} else {
err = fmt.Errorf(`status code fail: %d`, rsp.StatusCode)
b.WriteString(err.Error())
} }
b.WriteString("req header:\n\n")
for k, v := range rsp.Header {
fmt.Fprintf(&b, "\t%s: %v\n", k, v)
}
b.WriteString("\n")
ab, err = io.ReadAll(rsp.Body) ab, err = io.ReadAll(rsp.Body)
if err != nil {
fmt.Fprintf(&b, "rsp body: %d %v\n\n", len(ab), err)
b.Write(ab)
}
rsp.Body.Close() rsp.Body.Close()
return return
} }
func writeFailLog(hash [16]byte, ab []byte) {
date := time.Now().Format(`0102-150405`)
file := fmt.Sprintf(`fail/%s-%x.txt`, date, hash)
util.WriteFile(file, ab)
}

View File

@@ -1,6 +1,7 @@
package core package core
import ( import (
"bytes"
"fmt" "fmt"
"net/http" "net/http"
"project/pb" "project/pb"
@@ -11,14 +12,15 @@ import (
) )
type row struct { type row struct {
hash [16]byte hash [16]byte
hr *http.Request hr *http.Request
req *pb.Req req *pb.Req
rsp []byte rsp []byte
err error err error
done bool done bool
t time.Time t time.Time
mux sync.RWMutex mux sync.RWMutex
failLog *bytes.Buffer
} }
func (pr *row) run() { func (pr *row) run() {
@@ -28,10 +30,16 @@ func (pr *row) run() {
s := fmt.Sprintf(`%x, %s`, pr.hash, pr.t.Format(`2006-01-02 15:04:05`)) s := fmt.Sprintf(`%x, %s`, pr.hash, pr.t.Format(`2006-01-02 15:04:05`))
zj.J(`new`, s) zj.J(`new`, s)
pr.rsp, pr.err = fetchRemote(pr.req) var ok bool
pr.rsp, ok, pr.err = pr.fetchRemote()
if pr.err == nil && ok {
pr.failLog.Reset()
} else {
go writeFailLog(pr.hash, pr.failLog.Bytes())
}
go pr.saveFile() go pr.saveFile()
go pr.metrics() // go pr.metrics()
pr.done = true pr.done = true
pr.mux.Unlock() pr.mux.Unlock()
@@ -48,6 +56,3 @@ func (pr *row) saveFile() {
rspFile := rspCacheFile(pr.req) rspFile := rspCacheFile(pr.req)
util.WriteFile(rspFile, pr.rsp) util.WriteFile(rspFile, pr.rsp)
} }
func (pr *row) metrics() {
}

View File

@@ -3,6 +3,7 @@ package project
import ( import (
"project/build" "project/build"
"project/config" "project/config"
"project/tmptest"
"project/web" "project/web"
"project/zj" "project/zj"
@@ -16,6 +17,8 @@ func Start() {
zj.Init() zj.Init()
tmptest.Test()
go web.Server() go web.Server()
life.Wait() life.Wait()

35
server/src/tmptest/t.go Normal file
View File

@@ -0,0 +1,35 @@
package tmptest
import (
"fmt"
"io"
"log"
"net/http"
"project/zj"
)
// Test ...
func Test() {
fetch()
}
func fetch() {
client := &http.Client{}
req, err := http.NewRequest("GET", "http://10.0.84.49/e500", nil)
if err != nil {
log.Fatal(err)
}
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
zj.J(`StatusCode`, resp.StatusCode)
fmt.Printf("%s\n", bodyText)
}