はじめに
タイトルの通りなんですが、IBM watsonx.ai で Meta Llama 3.2 Vision を動かしてcurlコマンドでAPI呼び出しする方法を記載します。
まだ情報が少ないので参考になればと思います。
参考
実行
コード
コードの処理はコメントに記載の通りです。画像データはBASE64にエンコードして渡します。
test.sh
#!/bin/bash
# 環境変数準備
export API_KEY="xx"
export PROJECT_ID="yy"
# トークン取得
YOUR_ACCESS_TOKEN=$(curl -X POST "https://iam.cloud.ibm.com/identity/token" \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'grant_type=urn:ibm:params:oauth:grant-type:apikey' \
-d "apikey=${API_KEY}" | jq -r '.access_token')
# test.jpgをbase64に変換 (同じフォルダにtest.jpgをおく)
BASE64_IMAGE=$(base64 -i ./test.jpg)
# visionのAPIを呼び出し
curl "https://us-south.ml.cloud.ibm.com/ml/v1/text/chat?version=2023-05-29" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization: Bearer ${YOUR_ACCESS_TOKEN}" \
-d '{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "これは何?"
},
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64, '"${BASE64_IMAGE}"'"
}
}
]
}
],
"project_id": "'"${PROJECT_ID}"'",
"model_id": "meta-llama/llama-3-2-90b-vision-instruct",
"decoding_method": "greedy",
"min_new_tokens": 0,
"stop_sequences": [],
"repetition_penalty": 1,
"max_tokens": 900
}'
実行手順
- IBM watsonx.ai インスタンスを準備して、プロジェクトを作成します。
- APIキーとプロジェクトIDを取得して環境変数にセットします。
- APIに渡したい画像(
test.jpg
)を準備します。(pngの場合は、-dで渡しているjsonの中に、image/jpeg
をimage/png
にすると良いと思います。ただ、image/jpeg
のままでも動きました。。。) - 上記コードを実行します。
プロジェクトIDとAPIキー
プロジェクトIDとAPIキーの取得は下記が参考になるかと思います。
サービスIDを使う場合は、下記が参考になるかと思います。
https://qiita.com/katahiro/items/3258cd42226ed82268ac
おわりに
下記公式ドキュメントで情報を見つけられなかったのですが、そのうち追加されるかなとは思います。
Pythonで呼び出す際は下記が参考になるかと思います。