Skip to content

Commit 8157d49

Browse files
committed
Update images
1 parent 1ee799b commit 8157d49

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

pkg/openai/image.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
11
package openai
22

33
import (
4+
"encoding/base64"
5+
"io"
6+
47
// Packages
58
"github.com/mutablelogic/go-client/pkg/client"
9+
10+
// Namespace imports
11+
. "github.com/djthorpe/go-errors"
612
)
713

814
///////////////////////////////////////////////////////////////////////////////
915
// TYPES
1016

1117
type responseImages struct {
12-
Created int64 `json:"created"`
13-
Data []Image `json:"data"`
18+
Created int64 `json:"created"`
19+
Data []*Image `json:"data"`
1420
}
1521

1622
///////////////////////////////////////////////////////////////////////////////
1723
// API CALLS
1824

1925
// CreateImage generates one or more images from a prompt
20-
func (c *Client) CreateImages(prompt string, opts ...Opt) ([]Image, error) {
26+
func (c *Client) CreateImages(prompt string, opts ...Opt) ([]*Image, error) {
2127
var request reqImage
2228
var response responseImages
2329

@@ -39,3 +45,23 @@ func (c *Client) CreateImages(prompt string, opts ...Opt) ([]Image, error) {
3945
// Return success
4046
return response.Data, nil
4147
}
48+
49+
// WriteImage writes an image and returns the number of bytes written
50+
func (c *Client) WriteImage(w io.Writer, image *Image) (int, error) {
51+
if image == nil {
52+
return 0, ErrBadParameter.With("WriteImage")
53+
}
54+
// Handle url or data
55+
switch {
56+
case image.Data != "":
57+
if data, err := base64.StdEncoding.DecodeString(image.Data); err != nil {
58+
return 0, err
59+
} else if n, err := w.Write(data); err != nil {
60+
return 0, err
61+
} else {
62+
return n, nil
63+
}
64+
default:
65+
return 0, ErrNotImplemented.With("WriteImage")
66+
}
67+
}

pkg/openai/image_test.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package openai_test
22

33
import (
4+
"fmt"
45
"os"
6+
"path/filepath"
57
"testing"
68

79
opts "github.com/mutablelogic/go-client/pkg/client"
@@ -28,9 +30,25 @@ func Test_image_002(t *testing.T) {
2830
assert.NoError(err)
2931
assert.NotNil(client)
3032

31-
images, err := client.CreateImages("A painting of a cat", openai.OptResponseFormat("b64_json"), openai.OptCount(1))
33+
// Create one image
34+
images, err := client.CreateImages("A painting of a cat in the style of Salvador Dali", openai.OptResponseFormat("b64_json"), openai.OptCount(1))
3235
assert.NoError(err)
3336
assert.NotNil(images)
3437
assert.NotEmpty(images)
3538
assert.Len(images, 1)
39+
40+
// Output images
41+
for n, image := range images {
42+
filename := filepath.Join(os.TempDir(), fmt.Sprintf("test-%d.png", n))
43+
if w, err := os.Create(filename); err != nil {
44+
t.Error(err)
45+
} else {
46+
defer w.Close()
47+
t.Log("Writing", w.Name())
48+
n, err := client.WriteImage(w, image)
49+
assert.NoError(err)
50+
assert.NotZero(n)
51+
}
52+
}
53+
3654
}

0 commit comments

Comments
 (0)