Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Google Gemini Pro

livebooks/google/gemini_pro.livemd

Google Gemini Pro

Mix.install([
  {:kino, "~> 0.12"},
  {:req, "~> 0.4"}
])

Text

api_key_input = Kino.Input.text("API_KEY")
api_key = Kino.Input.read(api_key_input)

base_url = "https://generativelanguage.googleapis.com/v1beta/models"

headers = %{
  "Content-Type" => "application/json"
}
request_body = %{
  contents: [
    %{
      parts: [
        %{
          text: "開発言語の Elixir について教えてください"
        }
      ]
    }
  ]
}
response =
  "#{base_url}/gemini-pro:generateContent?key=#{api_key}"
  |> Req.post!(
    json: request_body,
    headers: headers
  )
  |> Map.get(:body)
response
|> Map.get("candidates")
|> hd()
|> Map.get("content")
|> Map.get("parts")
|> hd()
|> Map.get("text")
|> Kino.Markdown.new()

Text + Image

image_input = Kino.Input.image("IMAGE", format: :jpeg)
image_binary =
  image_input
  |> Kino.Input.read()
  |> Map.get(:file_ref)
  |> Kino.Input.file_path()
  |> File.read!()
request_body = %{
  contents: [
    %{
      parts: [
        %{
          text: "首輪は何色ですか"
        },
        %{
          inline_data: %{
            mime_type: "image/jpeg",
            data: Base.encode64(image_binary)
          }
        }
      ]
    }
  ]
}
response =
  "#{base_url}/gemini-pro-vision:generateContent?key=#{api_key}"
  |> Req.post!(
    json: request_body,
    headers: headers
  )
  |> Map.get(:body)
response
|> Map.get("candidates")
|> hd()
|> Map.get("content")
|> Map.get("parts")
|> hd()
|> Map.get("text")
|> Kino.Markdown.new()
request_body = %{
  contents: [
    %{
      parts: [
        %{
          text: "写真内の犬はどういう状態になっていますか"
        },
        %{
          inline_data: %{
            mime_type: "image/jpeg",
            data: Base.encode64(image_binary)
          }
        }
      ]
    }
  ]
}

"#{base_url}/gemini-pro-vision:generateContent?key=#{api_key}"
|> Req.post!(
  json: request_body,
  headers: headers
)
|> Map.get(:body)
|> Map.get("candidates")
|> hd()
|> Map.get("content")
|> Map.get("parts")
|> hd()
|> Map.get("text")
|> Kino.Markdown.new()
request_body = %{
  contents: [
    %{
      parts: [
        %{
          text: "写真内の犬はどんなことを考えているように見えますか"
        },
        %{
          inline_data: %{
            mime_type: "image/jpeg",
            data: Base.encode64(image_binary)
          }
        }
      ]
    }
  ]
}

"#{base_url}/gemini-pro-vision:generateContent?key=#{api_key}"
|> Req.post!(
  json: request_body,
  headers: headers
)
|> Map.get(:body)
|> Map.get("candidates")
|> hd()
|> Map.get("content")
|> Map.get("parts")
|> hd()
|> Map.get("text")
|> Kino.Markdown.new()