utterance.go (106 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
package witai
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
// Utterance - https://wit.ai/docs/http/20200513/#get__utterances_link
type Utterance struct {
Text string `json:"text"`
Intent UtteranceIntent `json:"intent"`
Entities []UtteranceEntity `json:"entities"`
Traits []UtteranceTrait `json:"traits"`
}
// UtteranceIntent - https://wit.ai/docs/http/20200513/#get__utterances_link
type UtteranceIntent struct {
ID string `json:"id"`
Name string `json:"name"`
}
// UtteranceEntity - https://wit.ai/docs/http/20200513/#get__utterances_link
type UtteranceEntity struct {
ID string `json:"id"`
Name string `json:"name"`
Role string `json:"role"`
Start int `json:"start"`
End int `json:"end"`
Body string `json:"body"`
Entities []UtteranceEntity `json:"entities"`
}
// UtteranceTrait - https://wit.ai/docs/http/20200513/#get__utterances_link
type UtteranceTrait struct {
ID string `json:"id"`
Name string `json:"name"`
Value string `json:"value"`
}
// GetUtterances - Returns an array of utterances.
//
// https://wit.ai/docs/http/20200513/#get__utterances_link
func (c *Client) GetUtterances(limit int, offset int) ([]Utterance, error) {
if limit <= 0 {
limit = 0
}
if offset <= 0 {
offset = 0
}
resp, err := c.request(http.MethodGet, fmt.Sprintf("/utterances?limit=%d&offset=%d", limit, offset), "application/json", nil)
if err != nil {
return []Utterance{}, err
}
defer resp.Close()
var utterances []Utterance
decoder := json.NewDecoder(resp)
err = decoder.Decode(&utterances)
return utterances, err
}
// DeleteUtterances - Delete validated utterances from your app.
//
// https://wit.ai/docs/http/20200513/#delete__utterances_link
func (c *Client) DeleteUtterances(texts []string) (*TrainingResponse, error) {
type text struct {
Text string `json:"text"`
}
reqTexts := make([]text, len(texts))
for i, t := range texts {
reqTexts[i] = text{Text: t}
}
utterancesJSON, err := json.Marshal(reqTexts)
if err != nil {
return nil, err
}
resp, err := c.request(http.MethodDelete, "/utterances", "application/json", bytes.NewBuffer(utterancesJSON))
if err != nil {
return nil, err
}
defer resp.Close()
var r *TrainingResponse
decoder := json.NewDecoder(resp)
err = decoder.Decode(&r)
return r, err
}
// TrainingResponse - https://wit.ai/docs/http/20200513/#post__utterances_link
type Training struct {
Text string `json:"text"`
Intent string `json:"intent,omitempty"`
Entities []TrainingEntity `json:"entities"`
Traits []TrainingTrait `json:"traits"`
}
// TrainingResponse - https://wit.ai/docs/http/20200513/#post__utterances_link
type TrainingEntity struct {
Entity string `json:"entity"`
Start int `json:"start"`
End int `json:"end"`
Body string `json:"body"`
Entities []TrainingEntity `json:"entities"`
}
// TrainingResponse - https://wit.ai/docs/http/20200513/#post__utterances_link
type TrainingTrait struct {
Trait string `json:"trait"`
Value string `json:"value"`
}
// TrainingResponse - https://wit.ai/docs/http/20200513/#post__utterances_link
type TrainingResponse struct {
Sent bool `json:"sent"`
N int `json:"n"`
}
// TrainUtterances - Add utterances (sentence + entities annotations) to train your app programmatically.
//
// https://wit.ai/docs/http/20200513/#post__utterances_link
func (c *Client) TrainUtterances(trainings []Training) (*TrainingResponse, error) {
utterancesJSON, err := json.Marshal(trainings)
if err != nil {
return nil, err
}
resp, err := c.request(http.MethodPost, "/utterances", "application/json", bytes.NewBuffer(utterancesJSON))
if err != nil {
return nil, err
}
defer resp.Close()
var r *TrainingResponse
decoder := json.NewDecoder(resp)
err = decoder.Decode(&r)
return r, err
}