{"adoption": {"forks": 134, "observed_at": "2026-08-28T04:03:59.810473+00:00", "stars": 1209}, "canonical_url": "https://ross.abutalabs.com/products/gpt_mobile", "card": {"archived": false, "artifact_type": "application", "description": "Chat app for Android that supports answers from multiple LLMs at once. Bring your own API key AI client. Supports OpenAI, Anthropic, Google, and Ollama. Designed with Material3 & Compose.", "domain": ["chatbots", "large-language-models", "android-tools", "artificial-intelligence", "privacy"], "enriched": true, "function": ["chatbot", "chat-interface", "agent-framework", "mcp", "http-client"], "health_score": 100, "homepage": null, "language": "Kotlin", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["Taewan-P/gpt_mobile"], "name": "Taewan-P/gpt_mobile", "platform": ["jvm"], "pushed_at": "2026-08-26T14:39:03+00:00", "repo": "Taewan-P/gpt_mobile", "stars": 1209, "tags": ["bring-your-own-key", "material3", "jetpack-compose", "multi-llm", "ollama", "openai", "anthropic", "gemini", "groq", "local-chat-history", "tool-calling", "android", "mobile"], "topics": ["android", "chatgpt", "claude", "compose", "gemini", "jetpack-compose", "chatbots", "jetpack", "kotlin", "anthropic", "google", "openai", "hacktoberfest", "ollama", "ollama-api", "ollama-app", "groq", "groq-api", "collaborate", "deepseek"], "urls": [], "use_cases": ["chat with multiple AI models side by side on Android", "compare answers from GPT, Claude, and Gemini at once", "use my own API key for a private AI chat app", "connect a local Ollama model from my phone", "keep chat history stored only on my device", "add web search or MCP tools to an AI assistant on Android"], "what_it_is": "GPT Mobile is an Android chat application that lets users talk to multiple LLM providers (OpenAI, Anthropic, Google Gemini, Groq, Ollama) simultaneously using their own API keys. Built with Kotlin, Jetpack Compose, and Material3, it stores chat history locally, encrypts credentials with Android Keystore, and supports optional agent tools including web search and MCP servers.", "when_to_avoid": ["you need an iOS, desktop, or web client", "you want a hosted service with no API keys or subscriptions managed for you", "you need features like image generation or voice input not offered by the app"], "when_to_choose": ["you want one Android app to query several LLM providers simultaneously", "you prefer bring-your-own-key privacy with locally stored history and encrypted credentials", "you want a native Material3/Compose experience with optional agent tools and MCP support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/gpt_mobile", "repo": "Taewan-P/gpt_mobile", "role": "main", "score": 97}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.810473+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:18:33.943794+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2018894529f9730eeee6fef0a5e43255ca029e1a499abc134466106a0f3b692d", "fetched_at": "2026-08-28T04:03:59.810473+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Taewan-P/gpt_mobile"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 91, "rhythm": 98}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1276, "days_push": 7, "days_rel": 16, "gap_med": 19, "n_releases_24m": 16}, "score": 97, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}