Open6

fletでai chatアプリを作ってみる

いばらきいばらき

プロジェクト初期化

uv init .

fletを追加

uv add flet

とりあえず、単純なアプリを動かそうとしたらmypyに怒られてるなぁ

無視しても動くけど、とりあえず、pyprofect.tomlに設定入れて誤魔化しておく

[tool.mypy]
exclude = ['.venv']

[[tool.mypy.overrides]]
module = ["flet.*"]
ignore_missing_imports = true

起動用のscript設定しようとしたらuvで対応してないんか
https://zenn.dev/nowa0402/articles/e84d3598001c9c#rye-run-{script}
やっぱりメジャーバージョンになるまでは、本格利用は難しそうか。

一旦[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
https://firebase.google.com/docs/vertex-ai?hl=ja
こっちのドキュメントだと、Vertex AI for Firebase になっている。どっちが正しいの?
https://firebase.blog/posts/2024/05/introducing-vertex-ai-firebase/

と思ったけど、そもそも普通のフロントエンド向け機能だから、逆にPython向けのSDKないやん。。。

いばらきいばらき

一旦、LamgChainからBedrock上の素のClaude3 Haikuを呼ぶようにした。

UI部分はflet公式のchatアプリをパクった。(なので無意味にpubsub機能とかも使っている)
https://github.com/flet-dev/examples/blob/main/python/tutorials/chat/chat.py

fletアプリ上では動いたので、次はflutterアプリとしてビルドしてみる。

※ よくみると自動で改行が入ってないな。。。なんか微妙。。。一旦放置で。。。

いばらきいばらき

諸々の課題は無視して、Androidアプリ化してみるか。
https://flet.dev/docs/publish/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で答えた。