MoonKraken/rusty_llama
A simple ChatGPT clone in Rust on both the frontend and backend. Uses open source language models and TailwindCSS.
Rusty Llama Webapp – クイック概要
概要 – Rustのみで記述された最小限のチャットボットWebアプリケーションです。以下の技術を使用しています:
- Leptos(RustベースのUIフレームワーク)をフロントエンドに使用し、TailwindCSSでスタイリング。
- Actix をHTTPサーバーとして使用。
- mistral.rs を使用して、オープンソースLLM(例:Qwen-3.8 B)の推論を同一プロセス内で直接実行。
重要性 – Python、Node、または外部の推論サービスを一切使用せずに、フルスタックのAI駆動アプリを構築できることを示しています。モデルは同一マシン上でローカルに実行され、Apple Metal、CUDA、またはCPUのみのバックエンドを利用可能です。
実行方法
適切なRustツールチェーンのインストール
rustup target add wasm32-unknown-unknown cargo install cargo-leptos --locked # `cargo leptos` を提供Rust 1.88以上が必要です。
GPUサポートの設定
- Apple Silicon –
Cargo.tomlでmetal機能を維持します。Metalツールチェーンをインストールしてください:xcodebuild -runFirstLaunch xcodebuild -downloadComponent MetalToolchain xcrun metal --version - NVIDIA –
mistralrs依存関係のmetalをcudaに置き換えます。 - CPUのみ – 機能フラグを削除するだけです。
- Apple Silicon –
モデルの設定(デフォルトはQwen-3.8 27B、4-bit量子化、約17 GB)
.envファイルを作成(または既存のものを編集)します:MODEL_REPO=bartowski/Qwen3.8-27B-GGUF MODEL_FILE=Qwen3.8-27B-Q4_K_M.gguf- 初回起動時に、
mistral.rsがGGUFファイルを~/.cache/huggingfaceにダウンロードします。 - 別のモデルを使用する場合は、
MODEL_FILEを変更するか、MODEL_PATHをローカルの.ggufファイルまたはシャードディレクトリに向けてください。 - モデルに埋め込みチャットテンプレートがない場合は、
CHAT_TEMPLATEをJinja文字列またはJSONファイルに設定してください。
アプリの実行
cargo leptos watch # Rustサーバーのビルド、Tailwindのコンパイル、変更の監視その後、ブラウザで http://localhost:3000/ を開きます。
mistral.rsがMetal/CUDAカーネルをコンパイルするため、初回ビルドには数分かかる場合があります。
機能
- シンプルなチャットUI(リポジトリ内のGIFを参照)。プロンプトを入力して、ローカルで実行中のLLMから応答を得ることができます。
- バックエンドがプロセス内で推論を実行するため、Pythonライブラリ経由でモデルを実行するのと同等のレイテンシを実現しつつ、Rustエコシステム内に完全に留まることができます。
対象ユーザー
- Rust開発者:Pythonを学ばずにLLM推論を試したい方。
- エッジデバイス愛好家(Apple SiliconまたはNVIDIA GPU):自己完結型のAIチャットボットを探している方。
- 教育者:単一言語でのエンドツーエンドAIパイプラインをデモンストレーションしたい方。
制限事項と注意点
- GGUF形式のモデルのみサポートされています。古いGGML
.binファイルは動作しません。 - デフォルトモデルは27Bパラメータです。十分なRAM/VRAM(4-bit版で約17 GB)が必要です。
- GPUアクセラレーションは、正しい機能フラグと動作するMetal/CUDAツールチェーンに依存します。
結論 – Rusty Llama は、純RustでWebベースのチャットボットを構築するための実用的で最小限の例です。mistral.rs によるデバイス上でのLLM推論と、LeptosによるリアクティブなUIを活用しています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト