// Package deepseek implements the go-llm v2 provider interface for DeepSeek // (https://platform.deepseek.com). DeepSeek speaks the OpenAI Chat Completions // protocol, so this package is a thin wrapper around openaicompat with its own // defaults and per-model Rules. package deepseek import ( "strings" "gitea.stevedudenhoeffer.com/steve/go-llm/v2/openaicompat" ) // DefaultBaseURL is the public DeepSeek API endpoint. const DefaultBaseURL = "https://api.deepseek.com/v1" // Provider is a type alias over openaicompat.Provider. type Provider = openaicompat.Provider // New creates a new DeepSeek provider. An empty baseURL uses DefaultBaseURL. func New(apiKey, baseURL string) *Provider { if baseURL == "" { baseURL = DefaultBaseURL } return openaicompat.New(apiKey, baseURL, openaicompat.Rules{ // DeepSeek's chat and reasoner models are text-only. SupportsVision: func(string) bool { return false }, // Reasoner doesn't accept tool calls. SupportsTools: func(m string) bool { return !strings.Contains(m, "reasoner") }, // Reasoner rejects user-supplied temperature. RestrictTemperature: func(m string) bool { return strings.Contains(m, "reasoner") }, // DeepSeek's reasoner thinks unconditionally; the API rejects an // explicit reasoning_effort parameter. The thinking trace is // surfaced via openaicompat's reasoning_content extraction without // any opt-in. SupportsReasoning: func(string) bool { return false }, }) }