{"id":50813648,"url":"https://github.com/koji/gemma4-on-browser","last_synced_at":"2026-06-13T07:05:19.472Z","repository":{"id":353015170,"uuid":"1217615360","full_name":"koji/gemma4-on-browser","owner":"koji","description":"run Gemma4 with WebGPU + MediaPipe","archived":false,"fork":false,"pushed_at":"2026-04-22T04:09:31.000Z","size":11015,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T18:41:47.373Z","etag":null,"topics":["gemma4","llm","localllm","mediapipe","webgpu","webllm"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/koji.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-22T03:59:57.000Z","updated_at":"2026-05-10T06:31:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/koji/gemma4-on-browser","commit_stats":null,"previous_names":["koji/gemma4-on-browser"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/koji/gemma4-on-browser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koji%2Fgemma4-on-browser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koji%2Fgemma4-on-browser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koji%2Fgemma4-on-browser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koji%2Fgemma4-on-browser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koji","download_url":"https://codeload.github.com/koji/gemma4-on-browser/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koji%2Fgemma4-on-browser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34275068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gemma4","llm","localllm","mediapipe","webgpu","webllm"],"created_at":"2026-06-13T07:05:18.638Z","updated_at":"2026-06-13T07:05:19.432Z","avatar_url":"https://github.com/koji.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gemma 4 Agentic Web\n\n[English README](./README.md)\n\nMediaPipe Tasks GenAI と WebGPU を使って、Gemma 4 E2B をブラウザ上で動かす offline-first のチャットアプリです。\n\n![Gemma 4 Agentic Web スクリーンショット](/webui.png)\n\n## 概要\n\nこのプロジェクトは Gemma 4 の LiteRT Web モデルをブラウザで直接実行し、初回ダウンロード後は OPFS にモデルを保存して再利用します。さらに、`txt` / `md` / `pdf` を対象にしたローカル lexical RAG と、IndexedDB による会話履歴の永続化を備えています。\n\n現状のスコープ:\n\n- Gemma 4 E2B によるブラウザ内 text chat\n- OPFS へのローカルモデル保存と再利用\n- 初回ダウンロード後のオフライン利用\n- 取り込み文書に対する local lexical RAG\n- localhost 以外での PWA / service worker 対応\n\n## 技術スタック\n\n- React 19\n- TypeScript\n- Vite\n- `@mediapipe/tasks-genai`\n- `idb` による IndexedDB 利用\n- モデル保存用の OPFS\n- PDF テキスト抽出用の `pdfjs-dist`\n\n## 動作要件\n\n- WebGPU が有効なデスクトップ版 Chrome または Edge\n- Node.js と npm\n- 初回モデルダウンロード時のネットワーク接続\n\n## セットアップ\n\n```bash\nnpm install\nnpm run dev\n```\n\n本番ビルド:\n\n```bash\nnpm run build\n```\n\n本番ビルドのローカル確認:\n\n```bash\nnpm run preview\n```\n\n## 仕組み\n\n### モデル実行\n\n- 既定のモデル URL は LiteRT Community の Gemma 4 E2B Web task を指します\n- モデルは初回のみダウンロードされ、OPFS に保存されます\n- 同じ origin であれば、その後はオフラインでも初期化と推論が可能です\n\n### データ保存\n\n- モデルのメタデータは IndexedDB に保存されます\n- モデル本体は OPFS に保存されます\n- 会話、メッセージ、文書メタデータは IndexedDB に保存されます\n\n### Local RAG\n\n- 取り込んだファイルはブラウザ内でチャンク化されます\n- v1 の検索は lexical retrieval のみです\n- 各 user turn ごとに上位チャンクを自動で prompt に注入します\n- assistant message には citation 情報を保存し、再読み込み後も source 表示を維持します\n\n## 注意点\n\n- OPFS と IndexedDB は origin ごとに分かれます。`localhost:5173` と `127.0.0.1:5173` では保存済みモデルを共有しません\n- 開発中の stale bundle を避けるため、localhost では service worker を無効化しています\n- 現在のアプリは text-only です。画像・音声解析は有効化していません\n- `pdfjs-dist` により build 時に bundle size warning が出ることがありますが、build failure ではありません\n\n## 主要スクリプト\n\n- `npm run dev`: Vite 開発サーバーを起動\n- `npm run build`: 本番ビルドを作成\n- `npm run preview`: 本番ビルドをローカルで確認\n\n## 主要ファイル\n\n- [src/App.tsx](/Users/koji/Desktop/dev/gemma4-web/src/App.tsx): メイン UI と chat flow\n- [src/workers/llm.worker.ts](/Users/koji/Desktop/dev/gemma4-web/src/workers/llm.worker.ts): MediaPipe worker 推論\n- [src/lib/retrieval.ts](/Users/koji/Desktop/dev/gemma4-web/src/lib/retrieval.ts): local lexical RAG の検索処理\n- [src/lib/modelStorage.ts](/Users/koji/Desktop/dev/gemma4-web/src/lib/modelStorage.ts): OPFS へのモデル保存処理\n\n## ライセンス\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoji%2Fgemma4-on-browser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoji%2Fgemma4-on-browser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoji%2Fgemma4-on-browser/lists"}