You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

84 lines
2.8 KiB

package openai
import (
"context"
"encoding/json"
"github.com/sashabaranov/go-openai"
)
type (
ChatReq struct {
Role string `json:"role"`
Content string `json:"content"`
// Images 可选图片 url 列表:非空时该消息以 OpenAI 多模态格式(text + image_url)发送,
// 用于视觉模型(如通义千问-VL / Azure OpenAI 视觉模型)。为空时按纯文本发送。
Images []string `json:"images,omitempty"`
}
Parameters struct {
Type string `json:"type"`
Properties map[string]Property `json:"properties"`
Required []string `json:"required"`
}
Property struct {
Type string `json:"type"`
Description string `json:"description"`
// Pattern string `json:"pattern"`
// MaxLength string `json:"max_length"`
// Examples []interface{} `json:"examples"`
}
ChatResponse struct {
Role string `json:"role"`
Content string `json:"content,omitempty"`
Meta map[string]interface{} `json:"meta,omitempty"`
}
//回应流式切片
ChatResponseChoice struct {
Role string `json:"role"`
Content string `json:"content,omitempty"`
Meta map[string]interface{} `json:"meta,omitempty"`
}
ITool interface {
GetToolInfo() openai.Tool
Execute(args json.RawMessage) (any, string, error)
}
ISys interface {
RegisterTools(tool ITool)
Chat(ctx context.Context, messages []ChatReq) (resp *ChatResponse, err error)
ChatForSteams(ctx context.Context, messages []ChatReq, choiceChan chan *ChatResponseChoice) (err error)
CreateChatCompletion(ctx context.Context, request openai.ChatCompletionRequest) (response openai.ChatCompletionResponse, err error)
CreateChatCompletionStream(ctx context.Context, request openai.ChatCompletionRequest) (stream *openai.ChatCompletionStream, err error)
}
)
var defsys ISys
func OnInit(config map[string]interface{}, option ...Option) (err error) {
defsys, err = newSys(newOptions(config, option...))
return
}
func NewSys(option ...Option) (sys ISys, err error) {
sys, err = newSys(newOptionsByOption(option...))
return
}
func RegisterTools(tool ITool) {
defsys.RegisterTools(tool)
}
func Chat(ctx context.Context, messages []ChatReq) (resp *ChatResponse, err error) {
return defsys.Chat(ctx, messages)
}
func ChatForSteams(ctx context.Context, messages []ChatReq, choiceChan chan *ChatResponseChoice) (err error) {
return defsys.ChatForSteams(ctx, messages, choiceChan)
}
func CreateChatCompletion(ctx context.Context, request openai.ChatCompletionRequest) (response openai.ChatCompletionResponse, err error) {
return defsys.CreateChatCompletion(ctx, request)
}
func CreateChatCompletionStream(ctx context.Context, request openai.ChatCompletionRequest) (stream *openai.ChatCompletionStream, err error) {
return defsys.CreateChatCompletionStream(ctx, request)
}