diff --git a/answers.go b/answers.go new file mode 100644 index 000000000..fedfcad18 --- /dev/null +++ b/answers.go @@ -0,0 +1,49 @@ +package gogpt + +import ( + "bytes" + "context" + "encoding/json" + "net/http" +) + +type AnswerRequest struct { + Documents [][]string `json:"documents"` + Question string `json:"question"` + SearchModel string `json:"search_model"` + Model string `json:"model"` + ExamplesContext string `json:"examples_context"` + Examples [][]string `json:"examples"` + MaxTokens int `json:"max_tokens"` + Stop []string `json:"stop"` +} + +type AnswerResponse struct { + Answers []string `json:"answers"` + Completion string `json:"completion"` + Model string `json:"model"` + Object string `json:"object"` + SearchModel string `json:"search_model"` + SelectedDocuments []struct { + Document int `json:"document"` + Text string `json:"text"` + } `json:"selected_documents"` +} + +// Search — perform a semantic search api call over a list of documents. +func (c *Client) Answers(ctx context.Context, request AnswerRequest) (response AnswerResponse, err error) { + var reqBytes []byte + reqBytes, err = json.Marshal(request) + if err != nil { + return + } + + req, err := http.NewRequest("POST", c.fullURL("/answers"), bytes.NewBuffer(reqBytes)) + if err != nil { + return + } + + req = req.WithContext(ctx) + err = c.sendRequest(req, &response) + return +} diff --git a/completion.go b/completion.go index b01b4c06d..647bd7b9b 100644 --- a/completion.go +++ b/completion.go @@ -25,6 +25,7 @@ type CompletionRequest struct { PresencePenalty float32 `json:"presence_penalty,omitempty"` FrequencyPenalty float32 `json:"frequency_penalty,omitempty"` + BestOf int `json:"best_of,omitempty"` } // Choice represents one of possible completions