Skip to content

Commit 12b5dee

Browse files
yyyu-googlecopybara-github
authored andcommitted
feat: introduce usability functions to allow quick creation of user content and model content.
PiperOrigin-RevId: 728792689
1 parent 01b042e commit 12b5dee

File tree

3 files changed

+359
-1
lines changed

3 files changed

+359
-1
lines changed

models.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

types.go

Lines changed: 136 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

types_test.go

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,3 +298,225 @@ func TestNewPartFromCodeExecutionResult(t *testing.T) {
298298
t.Fatalf("expected %v, got %v", expected, result)
299299
}
300300
}
301+
302+
func TestNewUserContentFromParts(t *testing.T) {
303+
parts := []*Part{
304+
{Text: "Hello, world!"},
305+
{Text: "This is a test."},
306+
}
307+
expected := &Content{
308+
Parts: parts,
309+
Role: "user",
310+
}
311+
312+
result := NewUserContentFromParts(parts)
313+
if !reflect.DeepEqual(result, expected) {
314+
t.Fatalf("expected %v, got %v", expected, result)
315+
}
316+
}
317+
318+
func TestNewUserContentFromText(t *testing.T) {
319+
text := "Hello, world!"
320+
expected := &Content{
321+
Parts: []*Part{
322+
{Text: "Hello, world!"},
323+
},
324+
Role: "user",
325+
}
326+
327+
result := NewUserContentFromText(text)
328+
if !reflect.DeepEqual(result, expected) {
329+
t.Fatalf("expected %v, got %v", expected, result)
330+
}
331+
}
332+
333+
func TestNewUserContentFromBytes(t *testing.T) {
334+
data := []byte{0x01, 0x02, 0x03}
335+
mimeType := "application/octet-stream"
336+
expected := &Content{
337+
Parts: []*Part{
338+
{InlineData: &Blob{Data: data, MIMEType: mimeType}},
339+
},
340+
Role: "user",
341+
}
342+
343+
result := NewUserContentFromBytes(data, mimeType)
344+
if !reflect.DeepEqual(result, expected) {
345+
t.Fatalf("expected %v, got %v", expected, result)
346+
}
347+
}
348+
349+
func TestNewUserContentFromURI(t *testing.T) {
350+
fileURI := "http://example.com/video.mp4"
351+
mimeType := "video/mp4"
352+
expected := &Content{
353+
Parts: []*Part{
354+
{FileData: &FileData{FileURI: fileURI, MIMEType: mimeType}},
355+
},
356+
Role: "user",
357+
}
358+
359+
result := NewUserContentFromURI(fileURI, mimeType)
360+
if !reflect.DeepEqual(result, expected) {
361+
t.Fatalf("expected %v, got %v", expected, result)
362+
}
363+
}
364+
365+
func TestNewUserContentFromFunctionResponse(t *testing.T) {
366+
funcName := "myFunction"
367+
response := map[string]any{"result": "success"}
368+
expected := &Content{
369+
Parts: []*Part{
370+
{FunctionResponse: &FunctionResponse{Name: funcName, Response: response}},
371+
},
372+
Role: "user",
373+
}
374+
375+
result := NewUserContentFromFunctionResponse(funcName, response)
376+
if !reflect.DeepEqual(result, expected) {
377+
t.Fatalf("expected %v, got %v", expected, result)
378+
}
379+
}
380+
381+
func TestNewUserContentFromExecutableCode(t *testing.T) {
382+
code := "print('Hello, world!')"
383+
language := LanguagePython
384+
expected := &Content{
385+
Parts: []*Part{
386+
{ExecutableCode: &ExecutableCode{Code: code, Language: language}},
387+
},
388+
Role: "user",
389+
}
390+
391+
result := NewUserContentFromExecutableCode(code, language)
392+
if !reflect.DeepEqual(result, expected) {
393+
t.Fatalf("expected %v, got %v", expected, result)
394+
}
395+
}
396+
397+
func TestNewUserContentFromCodeExecutionResult(t *testing.T) {
398+
outcome := OutcomeOK
399+
output := "Execution output"
400+
expected := &Content{
401+
Parts: []*Part{
402+
{CodeExecutionResult: &CodeExecutionResult{Outcome: outcome, Output: output}},
403+
},
404+
Role: "user",
405+
}
406+
407+
result := NewUserContentFromCodeExecutionResult(outcome, output)
408+
if !reflect.DeepEqual(result, expected) {
409+
t.Fatalf("expected %v, got %v", expected, result)
410+
}
411+
}
412+
413+
func TestNewModelContentFromParts(t *testing.T) {
414+
parts := []*Part{
415+
{Text: "Hello, world!"},
416+
{Text: "This is a test."},
417+
}
418+
expected := &Content{
419+
Parts: parts,
420+
Role: "model",
421+
}
422+
423+
result := NewModelContentFromParts(parts)
424+
if !reflect.DeepEqual(result, expected) {
425+
t.Fatalf("expected %v, got %v", expected, result)
426+
}
427+
}
428+
429+
func TestNewModelContentFromText(t *testing.T) {
430+
text := "Hello, world!"
431+
expected := &Content{
432+
Parts: []*Part{
433+
{Text: "Hello, world!"},
434+
},
435+
Role: "model",
436+
}
437+
438+
result := NewModelContentFromText(text)
439+
if !reflect.DeepEqual(result, expected) {
440+
t.Fatalf("expected %v, got %v", expected, result)
441+
}
442+
}
443+
444+
func TestNewModelContentFromBytes(t *testing.T) {
445+
data := []byte{0x01, 0x02, 0x03}
446+
mimeType := "application/octet-stream"
447+
expected := &Content{
448+
Parts: []*Part{
449+
{InlineData: &Blob{Data: data, MIMEType: mimeType}},
450+
},
451+
Role: "model",
452+
}
453+
454+
result := NewModelContentFromBytes(data, mimeType)
455+
if !reflect.DeepEqual(result, expected) {
456+
t.Fatalf("expected %v, got %v", expected, result)
457+
}
458+
}
459+
460+
func TestNewModelContentFromURI(t *testing.T) {
461+
fileURI := "http://example.com/video.mp4"
462+
mimeType := "video/mp4"
463+
expected := &Content{
464+
Parts: []*Part{
465+
{FileData: &FileData{FileURI: fileURI, MIMEType: mimeType}},
466+
},
467+
Role: "model",
468+
}
469+
470+
result := NewModelContentFromURI(fileURI, mimeType)
471+
if !reflect.DeepEqual(result, expected) {
472+
t.Fatalf("expected %v, got %v", expected, result)
473+
}
474+
}
475+
476+
func TestNewModelContentFromFunctionCall(t *testing.T) {
477+
funcName := "myFunction"
478+
args := map[string]any{"arg1": "value1"}
479+
expected := &Content{
480+
Parts: []*Part{
481+
{FunctionCall: &FunctionCall{Name: funcName, Args: args}},
482+
},
483+
Role: "model",
484+
}
485+
486+
result := NewModelContentFromFunctionCall(funcName, args)
487+
if !reflect.DeepEqual(result, expected) {
488+
t.Fatalf("expected %v, got %v", expected, result)
489+
}
490+
}
491+
492+
func TestNewModelContentFromExecutableCode(t *testing.T) {
493+
code := "print('Hello, world!')"
494+
language := LanguagePython
495+
expected := &Content{
496+
Parts: []*Part{
497+
{ExecutableCode: &ExecutableCode{Code: code, Language: language}},
498+
},
499+
Role: "model",
500+
}
501+
502+
result := NewModelContentFromExecutableCode(code, language)
503+
if !reflect.DeepEqual(result, expected) {
504+
t.Fatalf("expected %v, got %v", expected, result)
505+
}
506+
}
507+
508+
func TestNewModelContentFromCodeExecutionResult(t *testing.T) {
509+
outcome := OutcomeOK
510+
output := "Execution output"
511+
expected := &Content{
512+
Parts: []*Part{
513+
{CodeExecutionResult: &CodeExecutionResult{Outcome: outcome, Output: output}},
514+
},
515+
Role: "model",
516+
}
517+
518+
result := NewModelContentFromCodeExecutionResult(outcome, output)
519+
if !reflect.DeepEqual(result, expected) {
520+
t.Fatalf("expected %v, got %v", expected, result)
521+
}
522+
}

0 commit comments

Comments
 (0)