4
4
"bytes"
5
5
"context"
6
6
"fmt"
7
- "io"
8
- "mime/multipart"
9
7
"net/http"
10
8
"os"
11
9
)
@@ -55,9 +53,9 @@ func (c *Client) callAudioAPI(
55
53
endpointSuffix string ,
56
54
) (response AudioResponse , err error ) {
57
55
var formBody bytes.Buffer
58
- w := multipart . NewWriter (& formBody )
56
+ builder := c . createFormBuilder (& formBody )
59
57
60
- if err = audioMultipartForm (request , w ); err != nil {
58
+ if err = audioMultipartForm (request , builder ); err != nil {
61
59
return
62
60
}
63
61
@@ -66,81 +64,55 @@ func (c *Client) callAudioAPI(
66
64
if err != nil {
67
65
return
68
66
}
69
- req .Header .Add ("Content-Type" , w . FormDataContentType ())
67
+ req .Header .Add ("Content-Type" , builder . formDataContentType ())
70
68
71
69
err = c .sendRequest (req , & response )
72
70
return
73
71
}
74
72
75
73
// audioMultipartForm creates a form with audio file contents and the name of the model to use for
76
74
// audio processing.
77
- func audioMultipartForm (request AudioRequest , w * multipart. Writer ) error {
75
+ func audioMultipartForm (request AudioRequest , b formBuilder ) error {
78
76
f , err := os .Open (request .FilePath )
79
77
if err != nil {
80
78
return fmt .Errorf ("opening audio file: %w" , err )
81
79
}
82
80
defer f .Close ()
83
81
84
- fw , err := w . CreateFormFile ("file" , f . Name () )
82
+ err = b . createFormFile ("file" , f )
85
83
if err != nil {
86
84
return fmt .Errorf ("creating form file: %w" , err )
87
85
}
88
86
89
- if _ , err = io .Copy (fw , f ); err != nil {
90
- return fmt .Errorf ("reading from opened audio file: %w" , err )
91
- }
92
-
93
- fw , err = w .CreateFormField ("model" )
87
+ err = b .writeField ("model" , request .Model )
94
88
if err != nil {
95
- return fmt .Errorf ("creating form field: %w" , err )
96
- }
97
-
98
- modelName := bytes .NewReader ([]byte (request .Model ))
99
- if _ , err = io .Copy (fw , modelName ); err != nil {
100
89
return fmt .Errorf ("writing model name: %w" , err )
101
90
}
102
91
103
92
// Create a form field for the prompt (if provided)
104
93
if request .Prompt != "" {
105
- fw , err = w . CreateFormField ("prompt" )
94
+ err = b . writeField ("prompt" , request . Prompt )
106
95
if err != nil {
107
- return fmt .Errorf ("creating form field: %w" , err )
108
- }
109
-
110
- prompt := bytes .NewReader ([]byte (request .Prompt ))
111
- if _ , err = io .Copy (fw , prompt ); err != nil {
112
96
return fmt .Errorf ("writing prompt: %w" , err )
113
97
}
114
98
}
115
99
116
100
// Create a form field for the temperature (if provided)
117
101
if request .Temperature != 0 {
118
- fw , err = w . CreateFormField ("temperature" )
102
+ err = b . writeField ("temperature" , fmt . Sprintf ( "%.2f" , request . Temperature ) )
119
103
if err != nil {
120
- return fmt .Errorf ("creating form field: %w" , err )
121
- }
122
-
123
- temperature := bytes .NewReader ([]byte (fmt .Sprintf ("%.2f" , request .Temperature )))
124
- if _ , err = io .Copy (fw , temperature ); err != nil {
125
104
return fmt .Errorf ("writing temperature: %w" , err )
126
105
}
127
106
}
128
107
129
108
// Create a form field for the language (if provided)
130
109
if request .Language != "" {
131
- fw , err = w . CreateFormField ("language" )
110
+ err = b . writeField ("language" , request . Language )
132
111
if err != nil {
133
- return fmt .Errorf ("creating form field: %w" , err )
134
- }
135
-
136
- language := bytes .NewReader ([]byte (request .Language ))
137
- if _ , err = io .Copy (fw , language ); err != nil {
138
112
return fmt .Errorf ("writing language: %w" , err )
139
113
}
140
114
}
141
115
142
116
// Close the multipart writer
143
- w .Close ()
144
-
145
- return nil
117
+ return b .close ()
146
118
}
0 commit comments