Skip to content

Commit 4a62952

Browse files
authored
genai: change all examples to use client.UploadFileFromPath (#205)
1 parent 3b22eee commit 4a62952

File tree

3 files changed

+41
-127
lines changed

3 files changed

+41
-127
lines changed

genai/client_test.go

+3-7
Original file line numberDiff line numberDiff line change
@@ -864,14 +864,10 @@ func TestCustomHTTPClient(t *testing.T) {
864864
checkMatch(t, got, `new york`)
865865
}
866866

867+
// uploadFile is a helper function for tests: it uploads a file, reports its
868+
// upload status until it's ready, and registers a cleanup.
867869
func uploadFile(t *testing.T, ctx context.Context, client *Client, filename string) *File {
868-
osf, err := os.Open(filename)
869-
if err != nil {
870-
t.Fatal(err)
871-
}
872-
defer osf.Close()
873-
// Upload a file. Using the empty string as a name will generate a unique name.
874-
file, err := client.UploadFile(ctx, "", osf, nil)
870+
file, err := client.UploadFileFromPath(ctx, filename, nil)
875871
if err != nil {
876872
t.Fatal(err)
877873
}

genai/example_test.go

+19-60
Original file line numberDiff line numberDiff line change
@@ -38,43 +38,6 @@ import (
3838

3939
var testDataDir = filepath.Join(testhelpers.ModuleRootDir(), "genai", "testdata")
4040

41-
// uploadFile uploads the given file to the service, and returns a [genai.File]
42-
// representing it. mimeType optionally specifies the MIME type of the data in
43-
// the file; if empty, the service will attempt to infer it from the file
44-
// contents; for ambiguous file types (e.g. text files), it is recommended to
45-
// explicitly specify the MIME type.
46-
//
47-
// To clean up the file, defer a client.DeleteFile(ctx, file.Name)
48-
// call when a file is successfully returned. file.Name will be a uniqely
49-
// generated string to identify the file on the service.
50-
func uploadFile(ctx context.Context, client *genai.Client, path, mimeType string) (*genai.File, error) {
51-
osf, err := os.Open(path)
52-
if err != nil {
53-
return nil, err
54-
}
55-
defer osf.Close()
56-
57-
opts := &genai.UploadFileOptions{MIMEType: mimeType}
58-
file, err := client.UploadFile(ctx, "", osf, opts)
59-
if err != nil {
60-
return nil, err
61-
}
62-
63-
for file.State == genai.FileStateProcessing {
64-
log.Printf("processing %s", file.Name)
65-
time.Sleep(5 * time.Second)
66-
var err error
67-
file, err = client.GetFile(ctx, file.Name)
68-
if err != nil {
69-
return nil, err
70-
}
71-
}
72-
if file.State != genai.FileStateActive {
73-
return nil, fmt.Errorf("uploaded file has state %s, not active", file.State)
74-
}
75-
return file, nil
76-
}
77-
7841
func ExampleGenerativeModel_GenerateContent_textOnly() {
7942
ctx := context.Background()
8043
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GEMINI_API_KEY")))
@@ -129,7 +92,7 @@ func ExampleGenerativeModel_GenerateContent_videoPrompt() {
12992

13093
model := client.GenerativeModel("gemini-1.5-flash")
13194

132-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "earth.mp4"), "")
95+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "earth.mp4"), nil)
13396
if err != nil {
13497
log.Fatal(err)
13598
}
@@ -169,7 +132,7 @@ func ExampleGenerativeModel_GenerateContent_pdfPrompt() {
169132

170133
model := client.GenerativeModel("gemini-1.5-flash")
171134

172-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "test.pdf"), "")
135+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "test.pdf"), nil)
173136
if err != nil {
174137
log.Fatal(err)
175138
}
@@ -396,7 +359,7 @@ func ExampleGenerativeModel_GenerateContentStream_videoPrompt() {
396359

397360
model := client.GenerativeModel("gemini-1.5-flash")
398361

399-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "earth.mp4"), "")
362+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "earth.mp4"), nil)
400363
if err != nil {
401364
log.Fatal(err)
402365
}
@@ -428,7 +391,7 @@ func ExampleGenerativeModel_GenerateContentStream_audioPrompt() {
428391

429392
model := client.GenerativeModel("gemini-1.5-flash")
430393

431-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "sample.mp3"), "")
394+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "sample.mp3"), nil)
432395
if err != nil {
433396
log.Fatal(err)
434397
}
@@ -460,7 +423,7 @@ func ExampleGenerativeModel_GenerateContentStream_pdfPrompt() {
460423

461424
model := client.GenerativeModel("gemini-1.5-flash")
462425

463-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "test.pdf"), "")
426+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "test.pdf"), nil)
464427
if err != nil {
465428
log.Fatal(err)
466429
}
@@ -735,7 +698,7 @@ func ExampleGenerativeModel_CountTokens_videoUploadFile() {
735698

736699
model := client.GenerativeModel("gemini-1.5-flash")
737700
prompt := "Tell me about this video"
738-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "earth.mp4"), "")
701+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "earth.mp4"), nil)
739702
if err != nil {
740703
log.Fatal(err)
741704
}
@@ -1204,7 +1167,7 @@ func ExampleClient_UploadFile_text() {
12041167
}
12051168
defer client.Close()
12061169

1207-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "poem.txt"), "text/plain")
1170+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "poem.txt"), nil)
12081171
if err != nil {
12091172
log.Fatal(err)
12101173
}
@@ -1230,7 +1193,7 @@ func ExampleClient_UploadFile_image() {
12301193
}
12311194
defer client.Close()
12321195

1233-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "Cajun_instruments.jpg"), "")
1196+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "Cajun_instruments.jpg"), nil)
12341197
if err != nil {
12351198
log.Fatal(err)
12361199
}
@@ -1256,7 +1219,7 @@ func ExampleClient_UploadFile_pdf() {
12561219
}
12571220
defer client.Close()
12581221

1259-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "test.pdf"), "")
1222+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "test.pdf"), nil)
12601223
if err != nil {
12611224
log.Fatal(err)
12621225
}
@@ -1282,13 +1245,7 @@ func ExampleClient_UploadFile_video() {
12821245
}
12831246
defer client.Close()
12841247

1285-
osf, err := os.Open(filepath.Join(testDataDir, "earth.mp4"))
1286-
if err != nil {
1287-
log.Fatal(err)
1288-
}
1289-
defer osf.Close()
1290-
1291-
file, err := client.UploadFile(ctx, "", osf, nil)
1248+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "earth.mp4"), nil)
12921249
if err != nil {
12931250
log.Fatal(err)
12941251
}
@@ -1327,7 +1284,7 @@ func ExampleClient_UploadFile_audio() {
13271284
}
13281285
defer client.Close()
13291286

1330-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "sample.mp3"), "")
1287+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "sample.mp3"), nil)
13311288
if err != nil {
13321289
log.Fatal(err)
13331290
}
@@ -1353,7 +1310,7 @@ func ExampleClient_GetFile() {
13531310
}
13541311
defer client.Close()
13551312

1356-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "personWorkingOnComputer.jpg"), "")
1313+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "personWorkingOnComputer.jpg"), nil)
13571314
if err != nil {
13581315
log.Fatal(err)
13591316
}
@@ -1407,7 +1364,9 @@ func ExampleCachedContent_create() {
14071364
}
14081365
defer client.Close()
14091366

1410-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "a11.txt"), "text/plain")
1367+
file, err := client.UploadFileFromPath(ctx,
1368+
filepath.Join(testDataDir, "a11.txt"),
1369+
&genai.UploadFileOptions{MIMEType: "text/plain"})
14111370
if err != nil {
14121371
log.Fatal(err)
14131372
}
@@ -1445,7 +1404,7 @@ func ExampleCachedContent_createFromChat() {
14451404
}
14461405
defer client.Close()
14471406

1448-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "a11.txt"), "")
1407+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "a11.txt"), nil)
14491408
if err != nil {
14501409
log.Fatal(err)
14511410
}
@@ -1499,7 +1458,7 @@ func ExampleClient_GetCachedContent() {
14991458
}
15001459
defer client.Close()
15011460

1502-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "a11.txt"), "")
1461+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "a11.txt"), nil)
15031462
if err != nil {
15041463
log.Fatal(err)
15051464
}
@@ -1544,7 +1503,7 @@ func ExampleClient_ListCachedContents() {
15441503
}
15451504
defer client.Close()
15461505

1547-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "a11.txt"), "")
1506+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "a11.txt"), nil)
15481507
if err != nil {
15491508
log.Fatal(err)
15501509
}
@@ -1585,7 +1544,7 @@ func ExampleClient_UpdateCachedContent() {
15851544
}
15861545
defer client.Close()
15871546

1588-
file, err := uploadFile(ctx, client, filepath.Join(testDataDir, "a11.txt"), "")
1547+
file, err := client.UploadFileFromPath(ctx, filepath.Join(testDataDir, "a11.txt"), nil)
15891548
if err != nil {
15901549
log.Fatal(err)
15911550
}

0 commit comments

Comments
 (0)