mirror of
https://github.com/fumiama/deepinfra.git
synced 2026-06-23 05:30:26 +08:00
feat: support image upload
This commit is contained in:
107
model/openai.go
107
model/openai.go
@@ -8,18 +8,18 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
ModelDeepDeek = "deepseek-ai/DeepSeek-R1"
|
||||
ModelDeepDeek = "deepseek-ai/DeepSeek-V3.1-Terminus"
|
||||
)
|
||||
|
||||
type Message struct {
|
||||
Role string `json:"role"`
|
||||
Content string `json:"content"`
|
||||
type OpenAIMessage struct {
|
||||
Role string `json:"role"`
|
||||
Content json.RawMessage `json:"content"` // Contents or string
|
||||
}
|
||||
|
||||
type Choice struct {
|
||||
Index int `json:"index"`
|
||||
Message Message `json:"message"`
|
||||
FinishReason string `json:"finish_reason"`
|
||||
type OpenAIChoice struct {
|
||||
Index int `json:"index"`
|
||||
Message OpenAIMessage `json:"message"`
|
||||
FinishReason string `json:"finish_reason"`
|
||||
}
|
||||
|
||||
// OpenAI as an specified example.
|
||||
@@ -27,18 +27,18 @@ type OpenAI struct {
|
||||
sep string
|
||||
Protocol `json:"-"`
|
||||
// callback only
|
||||
ID string `json:"id,omitempty"`
|
||||
Object string `json:"object,omitempty"`
|
||||
Created int `json:"created,omitempty"`
|
||||
Choices []Choice `json:"choices,omitempty"`
|
||||
ID string `json:"id,omitempty"`
|
||||
Object string `json:"object,omitempty"`
|
||||
Created int `json:"created,omitempty"`
|
||||
Choices []OpenAIChoice `json:"choices,omitempty"`
|
||||
// callback/request
|
||||
Model string `json:"model"`
|
||||
Messages []Message `json:"messages"`
|
||||
Temperature float32 `json:"temperature,omitempty"` // Temperature 0.7
|
||||
TopP float32 `json:"top_p,omitempty"` // TopP 0.9
|
||||
MaxTokens int `json:"max_tokens,omitempty"` // MaxTokens 4096
|
||||
Model string `json:"model"`
|
||||
Messages []OpenAIMessage `json:"messages"`
|
||||
Temperature float32 `json:"temperature,omitempty"` // Temperature 0.7
|
||||
TopP float32 `json:"top_p,omitempty"` // TopP 0.9
|
||||
MaxTokens int `json:"max_tokens,omitempty"` // MaxTokens 4096
|
||||
// extra body
|
||||
EnableThinking bool `json:"enable_thinking"`
|
||||
EnableThinking bool `json:"enable_thinking"` // EnableThinking is always false in non-stream mode, adapt to 百炼
|
||||
}
|
||||
|
||||
// NewOpenAI use temp 0.7, topp 0.9, maxn 4096 if you don't know the meaning.
|
||||
@@ -74,41 +74,80 @@ func (opai *OpenAI) Parse(body io.Reader) error {
|
||||
return json.NewDecoder(body).Decode(&opai)
|
||||
}
|
||||
|
||||
func (opai *OpenAI) Output() string {
|
||||
func (opai *OpenAI) Output() Contents {
|
||||
if len(opai.Choices) == 0 {
|
||||
return ""
|
||||
return nil
|
||||
}
|
||||
return CutLast(opai.Choices[len(opai.Choices)-1].Message.Content, opai.sep)
|
||||
cs := make(Contents, 0, 8)
|
||||
c := opai.Choices[len(opai.Choices)-1].Message.Content
|
||||
err := json.Unmarshal(c, &cs)
|
||||
if err == nil {
|
||||
for i := range cs {
|
||||
if cs[i].Type == ContentTypeText {
|
||||
cs[i].Text = CutLast(cs[i].Text, opai.sep)
|
||||
}
|
||||
}
|
||||
return cs
|
||||
}
|
||||
s := ""
|
||||
err = json.Unmarshal(c, &s)
|
||||
if err == nil {
|
||||
return Contents{{Type: ContentTypeText, Text: CutLast(s, opai.sep)}}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (opai *OpenAI) OutputRaw() string {
|
||||
func (opai *OpenAI) OutputRaw() Contents {
|
||||
if len(opai.Choices) == 0 {
|
||||
return ""
|
||||
return nil
|
||||
}
|
||||
return opai.Choices[len(opai.Choices)-1].Message.Content
|
||||
cs := make(Contents, 0, 8)
|
||||
c := opai.Choices[len(opai.Choices)-1].Message.Content
|
||||
err := json.Unmarshal(c, &cs)
|
||||
if err == nil {
|
||||
return cs
|
||||
}
|
||||
s := ""
|
||||
err = json.Unmarshal(c, &s)
|
||||
if err == nil {
|
||||
return Contents{{Type: ContentTypeText, Text: s}}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (opai *OpenAI) System(prompt string) Protocol {
|
||||
opai.Messages = make([]Message, 1, 8)
|
||||
opai.Messages[0] = Message{
|
||||
func (opai *OpenAI) System(prompt ...Content) Protocol {
|
||||
opai.Messages = make([]OpenAIMessage, 1, 8)
|
||||
raw, err := json.Marshal(&prompt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
opai.Messages[0] = OpenAIMessage{
|
||||
Role: "system",
|
||||
Content: prompt,
|
||||
Content: raw,
|
||||
}
|
||||
return opai
|
||||
}
|
||||
|
||||
func (opai *OpenAI) User(prompt string) Protocol {
|
||||
opai.Messages = append(opai.Messages, Message{
|
||||
func (opai *OpenAI) User(prompt ...Content) Protocol {
|
||||
raw, err := json.Marshal(&prompt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
opai.Messages = append(opai.Messages, OpenAIMessage{
|
||||
Role: "user",
|
||||
Content: prompt,
|
||||
Content: raw,
|
||||
})
|
||||
return opai
|
||||
}
|
||||
|
||||
func (opai *OpenAI) Assistant(prompt string) Protocol {
|
||||
opai.Messages = append(opai.Messages, Message{
|
||||
func (opai *OpenAI) Assistant(prompt ...Content) Protocol {
|
||||
raw, err := json.Marshal(&prompt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
opai.Messages = append(opai.Messages, OpenAIMessage{
|
||||
Role: "assistant",
|
||||
Content: prompt,
|
||||
Content: raw,
|
||||
})
|
||||
return opai
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user