mirror of
https://github.com/zhengkai/orca.git
synced 2026-02-04 16:42:26 +08:00
up
This commit is contained in:
@@ -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"}'
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ var (
|
|||||||
|
|
||||||
WebAddr = `localhost:22035`
|
WebAddr = `localhost:22035`
|
||||||
|
|
||||||
RemoteAPI = `https://api.openai.com`
|
OpenAIBase = `https://api.openai.com`
|
||||||
|
|
||||||
OpenAIKey = ``
|
OpenAIKey = ``
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -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() {
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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
35
server/src/tmptest/t.go
Normal 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)
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user