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
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 "Authorization: Bearer $OPENAI_API_KEY" \
-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`
RemoteAPI = `https://api.openai.com`
OpenAIBase = `https://api.openai.com`
OpenAIKey = ``
)

View File

@@ -1,6 +1,8 @@
package config
import (
"fmt"
"net/url"
"os"
"path/filepath"
)
@@ -22,4 +24,10 @@ func init() {
*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 (
"bytes"
"fmt"
"io"
"net/http"
"net/url"
"project/config"
"project/pb"
"project/zj"
"project/util"
"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)
if err != nil {
zj.W(`url fail`, config.RemoteAPI, err)
return
}
r := pr.req
var b bytes.Buffer
pr.failLog = &b
u, _ := url.Parse(config.OpenAIBase)
u.Path = r.Path
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
}
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(`Authorization`, `Bearer `+config.OpenAIKey)
@@ -33,14 +44,35 @@ func fetchRemote(r *pb.Req) (ab []byte, err error) {
}
rsp, err := client.Do(req)
if err != nil {
fmt.Fprintf(&b, "client.Do fail: %s\n", err.Error())
return
}
for k, v := range rsp.Header {
zj.J(k, v)
if rsp.StatusCode >= 200 || rsp.StatusCode < 300 {
// 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)
if err != nil {
fmt.Fprintf(&b, "rsp body: %d %v\n\n", len(ab), err)
b.Write(ab)
}
rsp.Body.Close()
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
import (
"bytes"
"fmt"
"net/http"
"project/pb"
@@ -19,6 +20,7 @@ type row struct {
done bool
t time.Time
mux sync.RWMutex
failLog *bytes.Buffer
}
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`))
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.metrics()
// go pr.metrics()
pr.done = true
pr.mux.Unlock()
@@ -48,6 +56,3 @@ func (pr *row) saveFile() {
rspFile := rspCacheFile(pr.req)
util.WriteFile(rspFile, pr.rsp)
}
func (pr *row) metrics() {
}

View File

@@ -3,6 +3,7 @@ package project
import (
"project/build"
"project/config"
"project/tmptest"
"project/web"
"project/zj"
@@ -16,6 +17,8 @@ func Start() {
zj.Init()
tmptest.Test()
go web.Server()
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)
}