Skip to content

Commit bc3758f

Browse files
committed
Updated image
1 parent 8157d49 commit bc3758f

File tree

3 files changed

+78
-3
lines changed

3 files changed

+78
-3
lines changed

pkg/client/transport.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ func (transport *logtransport) RoundTrip(req *http.Request) (*http.Response, err
107107
///////////////////////////////////////////////////////////////////////////////
108108
// PRIVATE METHODS
109109

110-
func (w *readwrapper) Read(b []byte) (n int, err error) {
111-
n, err = w.r.Read(b)
110+
func (w *readwrapper) Read(b []byte) (int, error) {
111+
n, err := w.r.Read(b)
112112
if err == nil {
113113
_, err = w.data.Write(b[:n])
114114
}

pkg/openai/image.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package openai
33
import (
44
"encoding/base64"
55
"io"
6+
"net/http"
67

78
// Packages
89
"github.com/mutablelogic/go-client/pkg/client"
@@ -61,7 +62,52 @@ func (c *Client) WriteImage(w io.Writer, image *Image) (int, error) {
6162
} else {
6263
return n, nil
6364
}
65+
case image.Url != "":
66+
var resp reqUrl
67+
if req, err := http.NewRequest(http.MethodGet, image.Url, nil); err != nil {
68+
return 0, err
69+
} else if err := c.Request(req, &resp, client.OptToken(client.Token{})); err != nil {
70+
return 0, err
71+
} else {
72+
return 0, ErrNotImplemented.With("WriteImage")
73+
}
6474
default:
6575
return 0, ErrNotImplemented.With("WriteImage")
6676
}
6777
}
78+
79+
///////////////////////////////////////////////////////////////////////////////
80+
// PRIVATE METHODS
81+
82+
type reqUrl struct {
83+
w io.Writer
84+
n int
85+
}
86+
87+
func (i *reqUrl) Unmarshal(mimetype string, r io.Reader) error {
88+
defer func() {
89+
// Close the reader if it's an io.ReadCloser
90+
if closer, ok := r.(io.ReadCloser); ok {
91+
closer.Close()
92+
}
93+
}()
94+
95+
buffer := make([]byte, 1024)
96+
for {
97+
// Read data from the reader into the buffer
98+
bytesRead, err := r.Read(buffer)
99+
if err == io.EOF {
100+
// If we've reached EOF, break out of the loop
101+
break
102+
} else if err != nil {
103+
return err
104+
} else if n, err := i.w.Write(buffer[:bytesRead]); err != nil {
105+
return err
106+
} else {
107+
i.n += n
108+
}
109+
}
110+
111+
// Return success
112+
return nil
113+
}

pkg/openai/image_test.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,36 @@ func Test_image_002(t *testing.T) {
3939

4040
// Output images
4141
for n, image := range images {
42-
filename := filepath.Join(os.TempDir(), fmt.Sprintf("test-%d.png", n))
42+
filename := filepath.Join(t.TempDir(), fmt.Sprintf("%s-%d.png", t.Name(), 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+
54+
}
55+
56+
func Test_image_003(t *testing.T) {
57+
assert := assert.New(t)
58+
client, err := openai.New(GetApiKey(t), opts.OptTrace(os.Stderr, true))
59+
assert.NoError(err)
60+
assert.NotNil(client)
61+
62+
// Create one image
63+
images, err := client.CreateImages("A painting of a cat in the style of Van Gogh", openai.OptResponseFormat("url"), openai.OptCount(1))
64+
assert.NoError(err)
65+
assert.NotNil(images)
66+
assert.NotEmpty(images)
67+
assert.Len(images, 1)
68+
69+
// Output images
70+
for n, image := range images {
71+
filename := filepath.Join(t.TempDir(), fmt.Sprintf("%s-%d.png", t.Name(), n))
4372
if w, err := os.Create(filename); err != nil {
4473
t.Error(err)
4574
} else {

0 commit comments

Comments
 (0)