github.com/instill-ai/component@v0.16.0-beta/pkg/connector/openai/v0/audio_transcriptions.go (about)

     1  package openai
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"mime/multipart"
     7  
     8  	"github.com/instill-ai/component/pkg/connector/util"
     9  )
    10  
    11  const (
    12  	transcriptionsPath = "/v1/audio/transcriptions"
    13  )
    14  
    15  type AudioTranscriptionInput struct {
    16  	Audio       string   `json:"audio"`
    17  	Model       string   `json:"model"`
    18  	Prompt      *string  `json:"prompt,omitempty"`
    19  	Temperature *float64 `json:"temperature,omitempty"`
    20  	Language    *string  `json:"language,omitempty"`
    21  }
    22  
    23  type AudioTranscriptionReq struct {
    24  	File        []byte   `json:"file"`
    25  	Model       string   `json:"model"`
    26  	Prompt      *string  `json:"prompt,omitempty"`
    27  	Language    *string  `json:"language,omitempty"`
    28  	Temperature *float64 `json:"temperature,omitempty"`
    29  }
    30  
    31  type AudioTranscriptionResp struct {
    32  	Text string `json:"text"`
    33  }
    34  
    35  func getBytes(req AudioTranscriptionReq) (*bytes.Reader, string, error) {
    36  	data := &bytes.Buffer{}
    37  	writer := multipart.NewWriter(data)
    38  	err := util.WriteFile(writer, "file", req.File)
    39  	if err != nil {
    40  		return nil, "", err
    41  	}
    42  	util.WriteField(writer, "model", req.Model)
    43  	if req.Prompt != nil {
    44  		util.WriteField(writer, "prompt", *req.Prompt)
    45  	}
    46  	if req.Language != nil {
    47  		util.WriteField(writer, "language", *req.Language)
    48  	}
    49  	if req.Temperature != nil {
    50  		util.WriteField(writer, "temperature", fmt.Sprintf("%f", *req.Temperature))
    51  	}
    52  	writer.Close()
    53  	return bytes.NewReader(data.Bytes()), writer.FormDataContentType(), nil
    54  }