[maven]OpenAI モデルを取得する
maven (ビルドツール)でゼロからプロジェクトを構築する備忘録です。流行りの OpenAI API で java ライブラリを使って モデル一覧取得する例です。
前提
AlmaLinux 8.8~8.9
参考 https://note.com/remix_asia/n/n420b747b4f35
javac 11.0.22
参考 https://note.com/remix_asia/n/ne9eda8e8da53
Apache Maven 3.9.6
参考 https://note.com/remix_asia/n/nbce4cab65b66
sashirestela/simple-openai
参考 https://github.com/sashirestela/simple-openai
APIキー
参考 https://note.com/remix_asia/n/n6756b23d161e
シェルの環境変数「OPENAI_API_KEY」に取得したキーを設定しておきます。
$ export OPENAI_API_KEY="sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
maven プロジェクト構築
新規プロジェクト生成
フォルダ・ファイルのひな形を生成するコマンド
$ mvn archetype:generate
と、入力値(★箇所)
[INFO] Scanning for projects...
...
3409: remote -> za.co.absa.hyperdrive:component-archetype_2.11 (-)
3410: remote -> za.co.absa.hyperdrive:component-archetype_2.12 (-)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 2133: ★エンター
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
7: 1.3
8: 1.4
Choose a number: 8: ★エンター
...
Define value for property 'groupId': jp.example ★デフォルトパッケージ名
Define value for property 'artifactId': test ★ディレクトリ名
Define value for property 'version' 1.0-SNAPSHOT: : ★エンター
Define value for property 'package' jp.example: : ★エンター
Confirm properties configuration:
groupId: jp.example
artifactId: test
version: 1.0-SNAPSHOT
package: jp.example
Y: : y ★
...
[INFO] BUILD SUCCESS
...
で生成されるパス名は次の関係になります。ビルド情報が記載された Project Object Model (pom.xml)ファイルも生成されています。
/home/wanko/test
|-- pom.xml ★
`-- src
|-- main
| `-- java
| `-- jp
| `-- example
| `-- App.java ★
`-- test
`-- java
`-- jp
`-- example
`-- AppTest.java ★
コンパイル
プロジェクトフォルダに移動し
$ cd ~/test
コンパイルします。
$ mvn clean compile
target フォルダ以下に class ファイルなどが生成されます。
/home/wanko/test
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- jp
| | `-- example
| | `-- App.java
| `-- test
| `-- java
| `-- jp
| `-- example
| `-- AppTest.java
`-- target
|-- classes
| `-- jp
| `-- example
| `-- App.class ★
|-- generated-sources
| `-- annotations
`-- maven-status
`-- maven-compiler-plugin
`-- compile
`-- default-compile
|-- createdFiles.lst
`-- inputFiles.lst
実行
実行すると Hello World! が表示されます。
$ java -cp target/classes jp.example.App
このプロジェクトは github へアップしたのでリソース変更点を見ていただけます。
の 2024-04-28 コミット a966f9f5e359d7e10d742e9e11af86ed133146bb に該当します。
実装
pom.xml
pom.xml ファイルの <dependencies>~</dependencies> に、OpenAI API javaライブラリの1つ「sashirestela/simple-openai」についての
<dependency>
<groupId>io.github.sashirestela</groupId>
<artifactId>simple-openai</artifactId>
<version>2.3.3</version>
</dependency>
を追加することで利用可能になります。
main/java/jp/example/App.java
App.java ファイルを次のように編集します。「sashirestela/simple-openai」では最新の java記法 var や ラムダ式を使ったデモソースが紹介されていますが、型を理解したい為 maven プロジェクトデフォルトの java1.7 のままでビルド出来るように実装しています。
package jp.example;
import io.github.sashirestela.openai.BaseSimpleOpenAI;
import io.github.sashirestela.openai.domain.model.ModelResponse;
import io.github.sashirestela.openai.SimpleOpenAI;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.concurrent.CompletableFuture;
import java.util.Iterator;
import java.util.List;
/**
* list of model in OpenAI.
*
*/
public class App{
public static void main( String[] a ){
SimpleDateFormat sdf= new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss" );
BaseSimpleOpenAI openAI;
try{
openAI= SimpleOpenAI.builder()
.apiKey( System.getenv( "OPENAI_API_KEY" ) )
.build();
CompletableFuture futureModels= (CompletableFuture)( openAI.models().getList() );
List models= (List)( futureModels.join() );
for( Iterator it= models.iterator(); it.hasNext(); ){
ModelResponse m= (ModelResponse)( it.next() );
Timestamp t= new Timestamp( 1000 * m.getCreated() );
System.out.println( String.format(
"%s,%s,%-15s,%s", sdf.format( t ), m.getObject(), m.getOwnedBy(), m.getId() ) );
}
}catch( Exception e ){
e.printStackTrace();
}
}
}
2024-05-05 コミット c3eac9af985b9cf1f14d87bf1b77572eb6de3ed8 に該当します。https://github.com/remixgrjp/openai_model/commit/c3eac9af985b9cf1f14d87bf1b77572eb6de3ed8
コンパイル
$ mvn clean compile
実行
ここで maven が威力を発揮します。モデル一覧が表示されれば成功です。
$ mvn exec:java -Dexec.mainClass=jp.example.App
javaコマンドで実行する場合 クラスパスに依存ライブラリを指定しなければなりません。
$ mvn dependency:copy-dependencies -DoutputDirectory=lib
で、依存する全ての jarファイルをlibフォルダにダウンロードできます。
$ java -cp target/classes:lib/* jp.example.App
で実行できます。
終わり
https://github.com/remixgrjp/openai_model
の 2024-05-06 コミット 43efe9ecfc4b79dd0fcd360358102c9d6d809237 では 取得したモデル一覧を ID昇順ソートを追加実装しています。
ちなみに、モデル一覧の問い合わせは何度実行しても支払いは消費されていませんでした。
速報
2024-05-15 AM07:00 現在
ニュースで報じられている gpt-4o が、モデル一覧に追加されています。
...
2024-05-11 03:50:49,model,system ,gpt-4o
2024-05-11 04:08:52,model,system ,gpt-4o-2024-05-13
...
投げ銭も出来るんですね。
ここから先は
¥ 100
この記事が気に入ったらチップで応援してみませんか?