func TokensChat()

in go/count_tokens.go [71:119]


func TokensChat() error {
	// [START tokens_chat]
	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)
	}

	// Initialize chat with some history.
	history := []*genai.Content{
		{Role: genai.RoleUser, Parts: []*genai.Part{{Text: "Hi my name is Bob"}}},
		{Role: genai.RoleModel, Parts: []*genai.Part{{Text: "Hi Bob!"}}},
	}
	chat, err := client.Chats.Create(ctx, "gemini-2.0-flash", nil, history)
	if err != nil {
		log.Fatal(err)
	}

	firstTokenResp, err := client.Models.CountTokens(ctx, "gemini-2.0-flash", chat.History(false), nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(firstTokenResp.TotalTokens)

	resp, err := chat.SendMessage(ctx, genai.Part{
		Text: "In one sentence, explain how a computer works to a young child."},
	)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%#v\n", resp.UsageMetadata)

	// Append an extra user message and recount.
	extra := genai.NewContentFromText("What is the meaning of life?", genai.RoleUser)
	hist := chat.History(false)
	hist = append(hist, extra)

	secondTokenResp, err := client.Models.CountTokens(ctx, "gemini-2.0-flash", hist, nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(secondTokenResp.TotalTokens)
	// [END tokens_chat]

	return nil
}