|
- package gogpt
-
- import (
- "context"
- "errors"
- "net/http"
- )
-
- var (
- ErrCompletionUnsupportedModel = errors.New("this model is not supported with this method, please use CreateChatCompletion client method instead") //nolint:lll
- )
-
- // GPT3 Defines the models provided by OpenAI to use when generating
- // completions from OpenAI.
- // GPT3 Models are designed for text-based tasks. For code-specific
- // tasks, please refer to the Codex series of models.
- const (
- GPT432K0314 = "gpt-4-32k-0314"
- GPT432K = "gpt-4-32k"
- GPT40314 = "gpt-4-0314"
- GPT4 = "gpt-4"
- GPT3Dot5Turbo0301 = "gpt-3.5-turbo-0301"
- GPT3Dot5Turbo = "gpt-3.5-turbo"
- GPT3TextDavinci003 = "text-davinci-003"
- GPT3TextDavinci002 = "text-davinci-002"
- GPT3TextCurie001 = "text-curie-001"
- GPT3TextBabbage001 = "text-babbage-001"
- GPT3TextAda001 = "text-ada-001"
- GPT3TextDavinci001 = "text-davinci-001"
- GPT3DavinciInstructBeta = "davinci-instruct-beta"
- GPT3Davinci = "davinci"
- GPT3CurieInstructBeta = "curie-instruct-beta"
- GPT3Curie = "curie"
- GPT3Ada = "ada"
- GPT3Babbage = "babbage"
- )
-
- // Codex Defines the models provided by OpenAI.
- // These models are designed for code-specific tasks, and use
- // a different tokenizer which optimizes for whitespace.
- const (
- CodexCodeDavinci002 = "code-davinci-002"
- CodexCodeCushman001 = "code-cushman-001"
- CodexCodeDavinci001 = "code-davinci-001"
- )
-
- // CompletionRequest represents a request structure for completion API.
- type CompletionRequest struct {
- Model string `json:"model"`
- Prompt string `json:"prompt,omitempty"`
- Suffix string `json:"suffix,omitempty"`
- MaxTokens int `json:"max_tokens,omitempty"`
- Temperature float32 `json:"temperature,omitempty"`
- TopP float32 `json:"top_p,omitempty"`
- N int `json:"n,omitempty"`
- Stream bool `json:"stream,omitempty"`
- LogProbs int `json:"logprobs,omitempty"`
- Echo bool `json:"echo,omitempty"`
- Stop []string `json:"stop,omitempty"`
- PresencePenalty float32 `json:"presence_penalty,omitempty"`
- FrequencyPenalty float32 `json:"frequency_penalty,omitempty"`
- BestOf int `json:"best_of,omitempty"`
- LogitBias map[string]int `json:"logit_bias,omitempty"`
- User string `json:"user,omitempty"`
- }
-
- // CompletionChoice represents one of possible completions.
- type CompletionChoice struct {
- Text string `json:"text"`
- Index int `json:"index"`
- FinishReason string `json:"finish_reason"`
- LogProbs LogprobResult `json:"logprobs"`
- }
-
- // LogprobResult represents logprob result of Choice.
- type LogprobResult struct {
- Tokens []string `json:"tokens"`
- TokenLogprobs []float32 `json:"token_logprobs"`
- TopLogprobs []map[string]float32 `json:"top_logprobs"`
- TextOffset []int `json:"text_offset"`
- }
-
- // CompletionResponse represents a response structure for completion API.
- type CompletionResponse struct {
- ID string `json:"id"`
- Object string `json:"object"`
- Created int64 `json:"created"`
- Model string `json:"model"`
- Choices []CompletionChoice `json:"choices"`
- Usage Usage `json:"usage"`
- }
-
- // CreateCompletion — API call to create a completion. This is the main endpoint of the API. Returns new text as well
- // as, if requested, the probabilities over each alternative token at each position.
- //
- // If using a fine-tuned model, simply provide the model's ID in the CompletionRequest object,
- // and the server will use the model's parameters to generate the completion.
- func (c *Client) CreateCompletion(
- ctx context.Context,
- request CompletionRequest,
- ) (response CompletionResponse, err error) {
- if request.Model == GPT3Dot5Turbo0301 || request.Model == GPT3Dot5Turbo {
- err = ErrCompletionUnsupportedModel
- return
- }
-
- urlSuffix := "/completions"
- req, err := c.requestBuilder.build(ctx, http.MethodPost, c.fullURL(urlSuffix), request)
- if err != nil {
- return
- }
-
- err = c.sendRequest(req, &response)
- return
- }
|