fletでai chatアプリを作ってみる
Fletは、pythonでfutterアプリを作れるフレームワーク。
以前webアプリを試しに動かしてみたことはあるけど、AIチャットが出来るモバイルアプリを作るのを目指してみる。pythonのパッケージ管理に普段はryeを使っているけど、今回はuvを使ってみる。
プロジェクト初期化
uv init .
fletを追加
uv add flet
とりあえず、単純なアプリを動かそうとしたらmypyに怒られてるなぁ
無視しても動くけど、とりあえず、pyprofect.tomlに設定入れて誤魔化しておく
[tool.mypy]
exclude = ['.venv']
[[tool.mypy.overrides]]
module = ["flet.*"]
ignore_missing_imports = true
起動用のscript設定しようとしたらuvで対応してないんか
やっぱりメジャーバージョンになるまでは、本格利用は難しそうか。一旦[project.scripts]
でごまかすか。。。ryeの[tool.rye.scripts]
みたいなのが欲しいところだが。
Android / iOSで動かす。
テスト用アプリを端末にインストール
iOS : https://apps.apple.com/us/app/flet/id1624979699
Android https://play.google.com/store/apps/details?id=com.appveyor.flet
mac側でアプリ起動
uv run flet run --ios
or
uv run flet run --android
QRが表示されるので、fletアプリインストール済みスマホから読み取れば無事に起動
テストがめっちゃ楽でいいな。
と言いたいことだけど、この状態だとアプリは元のPC上で動いていてネットワーク経由で通信しているだけだから、実際にアプリとしてビルドするのとは挙動が変わってきそう。
まぁ、そのあたりはまた後日やろう。。。
あと、uvまだ不完全ってわかったから、やっぱりryeに切り替えておく。
アプリからのAI呼び出しは、とりあえずこれを試してみようかな。
Vertex AI in Firebase
こっちのドキュメントだと、Vertex AI for Firebase になっている。どっちが正しいの?
と思ったけど、そもそも普通のフロントエンド向け機能だから、逆にPython向けのSDKないやん。。。
一旦、LamgChainからBedrock上の素のClaude3 Haikuを呼ぶようにした。
UI部分はflet公式のchatアプリをパクった。(なので無意味にpubsub機能とかも使っている)
fletアプリ上では動いたので、次はflutterアプリとしてビルドしてみる。
※ よくみると自動で改行が入ってないな。。。なんか微妙。。。一旦放置で。。。
諸々の課題は無視して、Androidアプリ化してみるか。
brew install --cask temurin@8
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
export ANDROID_SDK_ROOT="/opt/homebrew/share/android-sdk"
export NDK_VERSION=25.2.9519653
export SDK_VERSION=android-33
export PATH=$ANDROID_SDK_ROOT/tools/bin:$PATH
本当にあってるのかこれ?
AndroidSDK
brew install android-sdk
Javaのパスが違うと言われる。
# echo "y" | sdkmanager --install "ndk;$NDK_VERSION" --channel=3
ERROR: JAVA_HOME is set to an invalid directory: /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
JAVAのインストールが上手くいってなかった。
- brew install --cask temurin8
+ brew install --cask temurin@8
改めて。
echo "y" | sdkmanager --install "ndk;$NDK_VERSION" --channel=3
echo "y" | sdkmanager --install "platforms;$SDK_VERSION"
activateするのいまいち好かないけど、一旦ドキュメントに従う。
. .venv/bin/activate
pip3 install git+https://github.com/flet-dev/python-for-android.git@3.11.6
pip install --upgrade cython
p4a create --requirements numpy --arch arm64-v8a --arch armeabi-v7a --arch x86_64 --sdk-dir $ANDROID_SDK_ROOT --ndk-dir $ANDROID_SDK_ROOT/ndk/$NDK_VERSION --dist-name mydist
[ERROR]: Build failed: Could not find `android` or `sdkmanager` binaries in Android SDK
だめやん。。。
→あれ。。。両方あるんだが。。。。
こまった。JAVAが分からん
JAVA17がいるみたいなエラーが出たので
brew install --cask temurin@17
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
→ 結局ダメでJava1.8に戻したら動いた。なぞ。
sdkmanager --update
を実行した。p4a
実行時の質問のN
で答えた。