@@ -43,6 +43,7 @@ require ( | |||||
github.com/golang/snappy v0.0.4 // indirect | github.com/golang/snappy v0.0.4 // indirect | ||||
github.com/gomodule/redigo v2.0.0+incompatible // indirect | github.com/gomodule/redigo v2.0.0+incompatible // indirect | ||||
github.com/google/go-cmp v0.5.9 // indirect | github.com/google/go-cmp v0.5.9 // indirect | ||||
github.com/gorilla/websocket v1.5.0 // indirect | |||||
github.com/hashicorp/golang-lru v0.5.4 // indirect | github.com/hashicorp/golang-lru v0.5.4 // indirect | ||||
github.com/henomis/cohere-go v1.0.1 // indirect | github.com/henomis/cohere-go v1.0.1 // indirect | ||||
github.com/henomis/restclientgo v1.0.5 // indirect | github.com/henomis/restclientgo v1.0.5 // indirect | ||||
@@ -64,6 +65,9 @@ require ( | |||||
github.com/rogpeppe/go-internal v1.9.0 // indirect | github.com/rogpeppe/go-internal v1.9.0 // indirect | ||||
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect | github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect | ||||
github.com/syndtr/goleveldb v1.0.0 // indirect | github.com/syndtr/goleveldb v1.0.0 // indirect | ||||
github.com/vogo/gorun v1.1.0 // indirect | |||||
github.com/vogo/logger v1.5.1 // indirect | |||||
github.com/vogo/xfspark v0.1.2 // indirect | |||||
golang.org/x/crypto v0.7.0 // indirect | golang.org/x/crypto v0.7.0 // indirect | ||||
golang.org/x/exp v0.0.0-20220827204233-334a2380cb91 // indirect | golang.org/x/exp v0.0.0-20220827204233-334a2380cb91 // indirect | ||||
golang.org/x/mod v0.8.0 // indirect | golang.org/x/mod v0.8.0 // indirect | ||||
@@ -253,6 +253,8 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51 | |||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | ||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | ||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | ||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= | |||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | |||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | ||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= | github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= | ||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | ||||
@@ -579,6 +581,12 @@ github.com/unidoc/unioffice v1.4.0 h1:yl+TbZJu2GTVYAYvu51wppj0R+fPC67xzVcy91qgrz | |||||
github.com/unidoc/unioffice v1.4.0/go.mod h1:7wl8btOkZW1TfqfpDWoujRXkUpowwisGRYDo7COHBiI= | github.com/unidoc/unioffice v1.4.0/go.mod h1:7wl8btOkZW1TfqfpDWoujRXkUpowwisGRYDo7COHBiI= | ||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= | github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= | ||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= | github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= | ||||
github.com/vogo/gorun v1.1.0 h1:i/8HhmNyjMa79bFn1ZHGTO3KyiWQcZPBsFGpvgkcap8= | |||||
github.com/vogo/gorun v1.1.0/go.mod h1:MyOjF/DbZSz40GQ5657Ou9NEfNlUbMhvpXjDvh4L8OY= | |||||
github.com/vogo/logger v1.5.1 h1:voyVY69TpM/x1lml4LYy4jMe5z0kDh5jW1oatcikajM= | |||||
github.com/vogo/logger v1.5.1/go.mod h1:9U+qupncHpWpt4ptlxFm9bvDb9EjbGIA+cY/tYtW4Kg= | |||||
github.com/vogo/xfspark v0.1.2 h1:QdW7jvFL6bgHQ74xTuAlP2IBj4sIVCpBE/LS0LW4ePE= | |||||
github.com/vogo/xfspark v0.1.2/go.mod h1:KHvAxw98fpLsFdmFYm9ps99eGaLbuLBTBa9rVG6SFyo= | |||||
github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= | github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= | ||||
github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc= | github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc= | ||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= | github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= | ||||
@@ -1037,6 +1045,7 @@ modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= | |||||
modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= | modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= | ||||
modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= | modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= | ||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | ||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= | |||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= | rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= | ||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= | rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= | ||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | ||||
@@ -0,0 +1,79 @@ | |||||
// Copyright 2023 The casbin Authors. All Rights Reserved. | |||||
// | |||||
// Licensed under the Apache License, Version 2.0 (the "License"); | |||||
// you may not use this file except in compliance with the License. | |||||
// You may obtain a copy of the License at | |||||
// | |||||
// http://www.apache.org/licenses/LICENSE-2.0 | |||||
// | |||||
// Unless required by applicable law or agreed to in writing, software | |||||
// distributed under the License is distributed on an "AS IS" BASIS, | |||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
// See the License for the specific language governing permissions and | |||||
// limitations under the License. | |||||
package model | |||||
import ( | |||||
"fmt" | |||||
"io" | |||||
"net/http" | |||||
"strings" | |||||
iflytek "github.com/vogo/xfspark/chat" | |||||
) | |||||
type iFlytekModelProvider struct { | |||||
subType string | |||||
appID string | |||||
apiKey string | |||||
secretKey string | |||||
} | |||||
func NewiFlytekModelProvider(subType string, secretKey string) (*iFlytekModelProvider, error) { | |||||
p := &iFlytekModelProvider{ | |||||
subType: subType, | |||||
appID: "", | |||||
apiKey: "", | |||||
secretKey: secretKey, | |||||
} | |||||
return p, nil | |||||
} | |||||
func (p *iFlytekModelProvider) QueryText(question string, writer io.Writer, builder *strings.Builder) error { | |||||
client := iflytek.NewServer(p.appID, p.apiKey, p.secretKey) | |||||
flusher, ok := writer.(http.Flusher) | |||||
if !ok { | |||||
return fmt.Errorf("writer does not implement http.Flusher") | |||||
} | |||||
session, err := client.GetSession("1") | |||||
if err != nil { | |||||
return fmt.Errorf("iflytek get session error: %v", err) | |||||
} | |||||
if session == nil { | |||||
return fmt.Errorf("iflytek get session error: session is nil") | |||||
} | |||||
response, err := session.Send(question) | |||||
if err != nil { | |||||
return fmt.Errorf("iflytek send error: %v", err) | |||||
} | |||||
flushData := func(data string) error { | |||||
if _, err := fmt.Fprintf(writer, "event: message\ndata: %s\n\n", data); err != nil { | |||||
return err | |||||
} | |||||
flusher.Flush() | |||||
builder.WriteString(data) | |||||
return nil | |||||
} | |||||
err = flushData(response) | |||||
if builder != nil { | |||||
builder.WriteString(response) | |||||
} | |||||
return nil | |||||
} |
@@ -34,6 +34,8 @@ func GetModelProvider(typ string, subType string, clientId string, clientSecret | |||||
p, err = NewOpenRouterModelProvider(subType, clientSecret) | p, err = NewOpenRouterModelProvider(subType, clientSecret) | ||||
} else if typ == "Ernie" { | } else if typ == "Ernie" { | ||||
p, err = NewErnieModelProvider(subType, clientId, clientSecret) | p, err = NewErnieModelProvider(subType, clientId, clientSecret) | ||||
} else if typ == "iFlytek" { | |||||
p, err = NewiFlytekModelProvider(subType, clientSecret) | |||||
} | } | ||||
if err != nil { | if err != nil { | ||||
@@ -632,6 +632,7 @@ export function getProviderTypeOptions(category) { | |||||
{id: "Hugging Face", name: "Hugging Face"}, | {id: "Hugging Face", name: "Hugging Face"}, | ||||
{id: "OpenRouter", name: "OpenRouter"}, | {id: "OpenRouter", name: "OpenRouter"}, | ||||
{id: "Ernie", name: "Ernie"}, | {id: "Ernie", name: "Ernie"}, | ||||
{id: "iFlytek", name: "iFlytek"}, | |||||
] | ] | ||||
); | ); | ||||
} else if (category === "Embedding") { | } else if (category === "Embedding") { | ||||
@@ -776,6 +777,13 @@ export function getProviderSubTypeOptions(category, type) { | |||||
{id: "embed-multilingual-v2.0", name: "embed-multilingual-v2.0"}, | {id: "embed-multilingual-v2.0", name: "embed-multilingual-v2.0"}, | ||||
] | ] | ||||
); | ); | ||||
} else if (type === "iFlytek") { | |||||
return ( | |||||
[ | |||||
{id: "spark-v1.5", name: "spark-v1.5"}, | |||||
{id: "spark-v2.0", name: "spark-v2.0"}, | |||||
] | |||||
); | |||||
} else { | } else { | ||||
return []; | return []; | ||||
} | } | ||||