func TokensCachedContent()

in go/count_tokens.go [276:339]


func TokensCachedContent() error {
	// [START tokens_cached_content]
	ctx := context.Background()
	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		APIKey:  os.Getenv("GEMINI_API_KEY"),
		Backend: genai.BackendGeminiAPI,
	})
	if err != nil {
		log.Fatal(err)
	}

	file, err := client.Files.UploadFromPath(
		ctx, 
		filepath.Join(getMedia(), "a11.txt"), 
		&genai.UploadFileConfig{
			MIMEType : "text/plain",
		},
	)
	if err != nil {
		log.Fatal(err)
	}
	parts := []*genai.Part{
		genai.NewPartFromText("Here the Apollo 11 transcript:"),
		genai.NewPartFromURI(file.URI, file.MIMEType),
	}
	contents := []*genai.Content{
		genai.NewContentFromParts(parts, genai.RoleUser),
	}

	// Create cached content using a simple slice with text and a file.
	cache, err := client.Caches.Create(ctx, "gemini-1.5-flash-001", &genai.CreateCachedContentConfig{
		Contents: contents,
	})
	if err != nil {
		log.Fatal(err)
	}

	prompt := "Please give a short summary of this file."
	countResp, err := client.Models.CountTokens(ctx, "gemini-2.0-flash", []*genai.Content{
		genai.NewContentFromText(prompt, genai.RoleUser),
	}, nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%d", countResp.TotalTokens)
	response, err := client.Models.GenerateContent(ctx, "gemini-1.5-flash-001", []*genai.Content{
		genai.NewContentFromText(prompt, genai.RoleUser),
	}, &genai.GenerateContentConfig{
		CachedContent: cache.Name,
	})
	if err != nil {
		log.Fatal(err)
	}

	usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", "  ")
	if err != nil {
		log.Fatal(err)
	}
	// Returns `nil` for some reason
	fmt.Println(string(usageMetadata))
	_, err = client.Caches.Delete(ctx, cache.Name, &genai.DeleteCachedContentConfig{})
	// [END tokens_cached_content]
	return err
}