go-openai icon indicating copy to clipboard operation
go-openai copied to clipboard

Plans to support DeepSeek?

Open bamzi opened this issue 1 year ago • 8 comments

Reviewing the documentation of DeepSeek, the example codes use python OpenAi library which indicates API parity with OpenAI.

Is there a plan to support DeepSeek models and endpoint?

Example: DeepSeek Structured output

from openai import OpenAI

client = OpenAI(
    api_key="<your api key>",
    base_url="https://api.deepseek.com", # <--- deepseek api endpoint
)

bamzi avatar Jan 21 '25 15:01 bamzi

config := openai.DefaultConfig(os.Getenv("OPENAI_API_KEY"))
config.BaseURL = "https://api.deepseek.com"
client := openai.NewClientWithConfig(config)

resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: "deepseek-chat",
			Messages: []openai.ChatCompletionMessage{
				{
					Role:    openai.ChatMessageRoleSystem,
					Content: MakeSystemPrompt(),
				},
				{
					Role:    openai.ChatMessageRoleUser,
					Content: prompt,
				},
			},
			ResponseFormat: &openai.ChatCompletionResponseFormat{
				Type: openai.ChatCompletionResponseFormatTypeJSONObject,
			},
		},
	)

desprit avatar Feb 02 '25 19:02 desprit

deepseek-reasoner What about this?

feng626 avatar Feb 06 '25 07:02 feng626

status code: 400, status: 400 Bad Request, message: %!s(), body: {"code":20024,"message":"Json mode is not supported for this model.","data":null}

feng626 avatar Feb 06 '25 07:02 feng626

status code: 400, status: 400 Bad Request, message: %!s(), body: {"code":20024,"message":"Json mode is not supported for this model.","data":null}

Why are you asking it here? You are getting an error from deepseek, not from go-openai lib.

desprit avatar Feb 06 '25 10:02 desprit

type ChatCompletionStreamChoiceDelta struct { openai.ChatCompletionStreamChoiceDelta ReasoningContent string json:"reasoning_content,omitempty" }

type ChatCompletionStreamChoice struct { openai.ChatCompletionStreamChoice Delta ChatCompletionStreamChoiceDelta json:"delta" }

type ChatCompletionStreamResponse struct { openai.ChatCompletionStreamResponse Choices []ChatCompletionStreamChoice json:"choices" }

response := ChatCompletionStreamResponse{} rawLine, streamErr := stream.RecvRaw()

Rewrote it. OK

feng626 avatar Feb 17 '25 11:02 feng626

👍 @feng626 adding the reasoning_content single line can store the deepseek-r1 model streaming response.

panzhongxian avatar Feb 21 '25 09:02 panzhongxian

how to get reasoning_content from resp

wangriyu avatar Mar 06 '25 09:03 wangriyu

@wangriyu you can try to use this branch: https://github.com/panzhongxian/go-openai/tree/ds_r1

panzhongxian avatar Mar 06 '25 11:03 panzhongxian