// Package openai implements the go-llm v2 provider interface for OpenAI. // // The actual wire-protocol logic lives in the shared openaicompat package; // this file encodes OpenAI-specific Rules (temperature is rejected on o-series // and gpt-5* models) and supplies the default base URL. package openai import ( "strings" "gitea.stevedudenhoeffer.com/steve/go-llm/v2/openaicompat" ) // DefaultBaseURL is the public OpenAI Chat Completions endpoint. const DefaultBaseURL = "https://api.openai.com/v1" // Provider is the OpenAI chat-completion provider. It's a type alias over // openaicompat.Provider so existing callers using openai.Provider keep compiling. type Provider = openaicompat.Provider // New creates a new OpenAI provider. An empty baseURL uses DefaultBaseURL. func New(apiKey string, baseURL string) *Provider { if baseURL == "" { baseURL = DefaultBaseURL } return openaicompat.New(apiKey, baseURL, openaicompat.Rules{ RestrictTemperature: restrictTemperature, }) } // restrictTemperature reports whether OpenAI rejects a user-supplied // temperature for this model. o-series reasoning models and gpt-5* both do. func restrictTemperature(model string) bool { return strings.HasPrefix(model, "o") || strings.HasPrefix(model, "gpt-5") }