Skip to content

Commit

Permalink
Add multi-image prompt snippets
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewheard committed Jul 11, 2024
1 parent 07f9cf5 commit 2cfa965
Showing 1 changed file with 127 additions and 57 deletions.
184 changes: 127 additions & 57 deletions samples/TextGeneration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,76 +21,146 @@ import XCTest
// section in the Gemini API quickstart:
// https://ai.google.dev/gemini-api/docs/quickstart?lang=swift#set-up-api-key

@available(iOS 15.0, macOS 11.0, macCatalyst 15.0, *)
final class TextGeneration: XCTestCase {
override func setUpWithError() throws {
try XCTSkipIf(APIKey.default.isEmpty, "`\(APIKey.apiKeyEnvVar)` environment variable not set.")
}

func testTextOnlyPrompt() async throws {
// [START text_gen_text_only_prompt]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
#if canImport(UIKit)
@available(iOS 15.0, macCatalyst 15.0, *)
final class TextGeneration: XCTestCase {
override func setUpWithError() throws {
try XCTSkipIf(
APIKey.default.isEmpty,
"`\(APIKey.apiKeyEnvVar)` environment variable not set."
)
}

let prompt = "Write a story about a magic backpack."
let response = try await generativeModel.generateContent(prompt)
if let text = response.text {
print(text)
func testTextOnlyPrompt() async throws {
// [START text_gen_text_only_prompt]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)

let prompt = "Write a story about a magic backpack."
let response = try await generativeModel.generateContent(prompt)
if let text = response.text {
print(text)
}
// [END text_gen_text_only_prompt]
}
// [END text_gen_text_only_prompt]
}

func testTextOnlyPromptStreaming() async throws {
// [START text_gen_text_only_prompt_streaming]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)
func testTextOnlyPromptStreaming() async throws {
// [START text_gen_text_only_prompt_streaming]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)

let prompt = "Write a story about a magic backpack."
// Use streaming with text-only input
for try await response in generativeModel.generateContentStream(prompt) {
let prompt = "Write a story about a magic backpack."
// Use streaming with text-only input
for try await response in generativeModel.generateContentStream(prompt) {
if let text = response.text {
print(text)
}
}
// [END text_gen_text_only_prompt_streaming]
}

func testMultimodalOneImagePrompt() async throws {
// [START text_gen_multimodal_one_image_prompt]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)

guard let image = UIImage(systemName: "cloud.sun") else { fatalError() }

let prompt = "What's in this picture?"

let response = try await generativeModel.generateContent(image, prompt)
if let text = response.text {
print(text)
}
// [END text_gen_multimodal_one_image_prompt]
}
// [END text_gen_text_only_prompt_streaming]
}

func testMultimodalOneImagePrompt() async throws {
// [START text_gen_multimodal_one_image_prompt]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)
func testMultimodalOneImagePromptStreaming() async throws {
// [START text_gen_multimodal_one_image_prompt_streaming]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)

#if canImport(UIKit)
guard let image = UIImage(systemName: "cloud.sun") else { fatalError() }
#elseif canImport(AppKit)
guard let image = NSImage(systemSymbolName: "cloud.sun", accessibilityDescription: nil)
else { fatalError() }
#endif

let prompt = "What's in this picture?"
let prompt = "What's in this picture?"

for try await response in generativeModel.generateContentStream(image, prompt) {
if let text = response.text {
print(text)
}
}
// [END text_gen_multimodal_one_image_prompt_streaming]
}

func testMultimodalMultiImagePrompt() async throws {
// [START text_gen_multimodal_multi_image_prompt]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)

guard let image1 = UIImage(systemName: "cloud.sun") else { fatalError() }
guard let image2 = UIImage(systemName: "cloud.heavyrain") else { fatalError() }

let prompt = "What's the difference between these pictures?"

let response = try await generativeModel.generateContent(image1, image2, prompt)
if let text = response.text {
print(text)
}
// [END text_gen_multimodal_multi_image_prompt]
}

let response = try await generativeModel.generateContent(image, prompt)
if let text = response.text {
print(text)
func testMultimodalMultiImagePromptStreaming() async throws {
// [START text_gen_multimodal_multi_image_prompt_streaming]
let generativeModel =
GenerativeModel(
// Specify a Gemini model appropriate for your use case
name: "gemini-1.5-flash",
// Access your API key from your on-demand resource .plist file (see "Set up your API key"
// above)
apiKey: APIKey.default
)

guard let image1 = UIImage(systemName: "cloud.sun") else { fatalError() }
guard let image2 = UIImage(systemName: "cloud.heavyrain") else { fatalError() }

let prompt = "What's the difference between these pictures?"

for try await response in generativeModel.generateContentStream(image1, image2, prompt) {
if let text = response.text {
print(text)
}
}
// [END text_gen_multimodal_multi_image_prompt_streaming]
}
// [END text_gen_multimodal_one_image_prompt]
}
}
#endif // canImport(UIKit)

0 comments on commit 2cfa965

Please sign in to comment.