Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

124 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ’Ž Gemstone AI

Kotlin Multiplatform Compose Multiplatform Python


Gemstone AI Logoย ย ย ย ย  Gemstone AI Logo

๐ŸŒŸ Universal AI Chat System with On-Device Intelligence

This is a open-source multi-platform AI Chat System written with Kotlin Compose Multiplatform and Python.


โœจ Key Features

  • ๐ŸŽฏ Universal Platform Support - Run on Web, Android, iOS, Windows, Linux, and macOS
  • ๐Ÿง  On-Device AI - Privacy-first local AI processing with Python Multiplatform
  • ๐ŸŽจ Modern UI - Beautiful, responsive interface built with Compose Multiplatform
  • ๐Ÿ’พ Offline Capability - Full functionality without internet connection
  • ๐Ÿ”„ Real-time Chat - WebSocket-based real-time messaging
  • ๐Ÿ“ฑ Cross-Platform Sync - Seamless experience across all devices

๐Ÿš€ Platform Support

๐ŸŒ Web ๐Ÿ“ฑ Android ๐ŸŽ iOS
๐ŸชŸ Windows ๐Ÿง Linux ๐ŸŽ macOS

Note: Developed with Python Multiplatform

๐Ÿ› ๏ธ Technology Stacks

๐Ÿ”ง Model Serving API

โšก Note: Planning to support OpenAI-like API for AI model serving.

  • Transformers/BitsAndBytes & PyTorch (INT4/INT8)
  • Transformers/AutoGPTQ & PyTorch (SAFETENSORS)
  • Llama-cpp-python & Numpy (GGUF)

๐Ÿ“ฑ Mobile/Web Client APP

  • Kotlin Multiplatform Mobile
  • Compose Multiplatform Mobile

๐Ÿ”ฎ Note: Scheduled to adapt Python Multiplatform for On-Device AI model serving.

๐Ÿค– Supported Models

๐Ÿ–ฅ๏ธ Server Models

  • Qwen 3 14b 4bitQ (BitsAndBytes)
  • To be done...

๐Ÿ“ฑ On-Device Models

  • Llama 3.1 8B (llama.cpp)
  • Qwen 3 14b 4bitQ (llama.cpp)
  • To be done...

๐Ÿ“– API Reference

chat_history = [
    {
        "role": "user",
        "content": "์˜ค๋Š˜ ๋Œ€์ „ ๋‚ ์”จ๊ฐ€ ์–ด๋•Œ?"
    },
    {
        "role": "assistant",
        "content": "",
        "tool_calls": [
            {
                "id": "call_20250614125444",
                "function": {
                    "name": "get_weather",
                    "arguments": {
                        "location": "Daejeon, South Korea",
                        "unit": "celsius"
                    }
                }
            }
        ]
    },
    {
        "role": "tool",
        "tool_call_id": "call_20250614125444",
        "content": "<cached_result:call_20250614125444>"
    },
    {
        "role": "assistant",
        "content": "์˜ค๋Š˜ ๋Œ€์ „์˜ ๋‚ ์”จ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:\n\n- ๐ŸŒก๏ธ ์˜จ๋„: 26.3ยฐC (์ฒด๊ฐ ์˜จ๋„: 30.6ยฐC)\n- โ˜๏ธ ๋‚ ์”จ: ์ฃผ๋กœ ๋ง‘์Œ\n- ๐Ÿ’ง ์Šต๋„: 81%\n- ๐Ÿ’จ ๋ฐ”๋žŒ: 13.8 m/s (๋ถ๋™)\n- ๐Ÿ“Š ๊ธฐ์••: 994 hPa\n\n์ด ์ •๋ณด๋Š” Open-Meteo์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค."
    }
]

๐Ÿ—๏ธ APP Architecture

Gemstone AI follows Clean Architecture principles with clear separation of concerns:

๐Ÿ“ app/
โ”œโ”€โ”€ ๐ŸŽฏ domain/           # Business logic and entities
โ”œโ”€โ”€ ๐Ÿ”„ adapter/          # Controllers and presenters
โ””โ”€โ”€ ๐Ÿ› ๏ธ framework/        # UI, database, network, and AI infrastructure
๐Ÿ“ Detailed Project Structure (Click to expand)
app/
โ”œโ”€โ”€ domain/
โ”‚   โ”œโ”€โ”€ entity/
โ”‚   โ”‚   โ”œโ”€โ”€ Message.kt
โ”‚   โ”‚   โ”œโ”€โ”€ ChatSession.kt
โ”‚   โ”‚   โ”œโ”€โ”€ User.kt
โ”‚   โ”‚   โ”œโ”€โ”€ AIModel.kt
โ”‚   โ”‚   โ””โ”€โ”€ value/
โ”‚   โ”‚       โ”œโ”€โ”€ MessageId.kt
โ”‚   โ”‚       โ”œโ”€โ”€ SessionId.kt
โ”‚   โ”‚       โ””โ”€โ”€ Timestamp.kt
โ”‚   โ”œโ”€โ”€ usecase/
โ”‚   โ”‚   โ”œโ”€โ”€ chat/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ SendMessageUseCase.kt
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ GetChatHistoryUseCase.kt
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ CreateSessionUseCase.kt
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ DeleteSessionUseCase.kt
โ”‚   โ”‚   โ”œโ”€โ”€ ai/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ SwitchAIModelUseCase.kt
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ DownloadModelUseCase.kt
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ GetAvailableModelsUseCase.kt
โ”‚   โ”‚   โ””โ”€โ”€ user/
โ”‚   โ”‚       โ”œโ”€โ”€ SaveUserPreferencesUseCase.kt
โ”‚   โ”‚       โ””โ”€โ”€ GetUserPreferencesUseCase.kt
โ”‚   โ”œโ”€โ”€ repository/
โ”‚   โ”‚   โ”œโ”€โ”€ ChatRepository.kt
โ”‚   โ”‚   โ”œโ”€โ”€ AIModelRepository.kt
โ”‚   โ”‚   โ””โ”€โ”€ UserRepository.kt
โ”‚   โ””โ”€โ”€ service/
โ”‚       โ”œโ”€โ”€ AIService.kt
โ”‚       โ”œโ”€โ”€ ValidationService.kt
โ”‚       โ””โ”€โ”€ NotificationService.kt
โ”œโ”€โ”€ adapter/
โ”‚   โ”œโ”€โ”€ controller/
โ”‚   โ”‚   โ”œโ”€โ”€ chat/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ChatController.kt
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ SessionController.kt
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ dto/
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ SendMessageRequest.kt
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ CreateSessionRequest.kt
โ”‚   โ”‚   โ”œโ”€โ”€ ai/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ AIModelController.kt
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ dto/
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ SwitchModelRequest.kt
โ”‚   โ”‚   โ””โ”€โ”€ settings/
โ”‚   โ”‚       โ”œโ”€โ”€ SettingsController.kt
โ”‚   โ”‚       โ””โ”€โ”€ dto/
โ”‚   โ”‚           โ””โ”€โ”€ UpdatePreferencesRequest.kt
โ”‚   โ”œโ”€โ”€ presenter/
โ”‚   โ”‚   โ”œโ”€โ”€ chat/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ChatPresenter.kt
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ SessionPresenter.kt
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ model/
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ ChatUiState.kt
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ MessageUiModel.kt
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ SessionUiModel.kt
โ”‚   โ”‚   โ”œโ”€โ”€ ai/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ AIModelPresenter.kt
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ model/
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ AIModelUiState.kt
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ ModelDownloadUiModel.kt
โ”‚   โ”‚   โ””โ”€โ”€ settings/
โ”‚   โ”‚       โ”œโ”€โ”€ SettingsPresenter.kt
โ”‚   โ”‚       โ””โ”€โ”€ model/
โ”‚   โ”‚           โ””โ”€โ”€ SettingsUiState.kt
โ””โ”€โ”€ framework/
    โ”œโ”€โ”€ ui/
    โ”‚   โ”œโ”€โ”€ compose/
    โ”‚   โ”‚   โ”œโ”€โ”€ screen/
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ chat/
    โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ MainScreen.kt
    โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ SideScreen.kt
    โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ChatScreen.kt
    โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ component/
    โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ MessageItem.kt
    โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ MessageInput.kt
    โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ SubjectCard.kt
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ model/
    โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ModelSelectionScreen.kt
    โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ component/
    โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ ModelItem.kt
    โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ DownloadProgress.kt
    โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ settings/
    โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ SettingsScreen.kt
    โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ component/
    โ”‚   โ”‚   โ”‚           โ””โ”€โ”€ PreferenceItem.kt
    โ”‚   โ”‚   โ”œโ”€โ”€ navigation/
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ AppNavigation.kt
    โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ NavigationRoute.kt
    โ”‚   โ”‚   โ””โ”€โ”€ theme/
    โ”‚   โ”‚       โ”œโ”€โ”€ Color.kt
    โ”‚   โ”‚       โ”œโ”€โ”€ Dimen.kt
    โ”‚   โ”‚       โ”œโ”€โ”€ Shape.kt
    โ”‚   โ”‚       โ”œโ”€โ”€ Theme.kt
    โ”‚   โ”‚       โ””โ”€โ”€ Type.kt
    โ”‚   โ””โ”€โ”€ viewmodel/
    โ”‚       โ”œโ”€โ”€ ChatViewModel.kt
    โ”‚       โ”œโ”€โ”€ AIModelViewModel.kt
    โ”‚       โ””โ”€โ”€ SettingsViewModel.kt
    โ”œโ”€โ”€ database/
    โ”‚   โ””โ”€โ”€ ChatDatabase.kt
    โ”œโ”€โ”€ network/
    โ”‚   โ”œโ”€โ”€ http/
    โ”‚   โ”‚   โ”œโ”€โ”€ HttpClientFactory.kt
    โ”‚   โ”‚   โ””โ”€โ”€ api/
    โ”‚   โ”‚       โ”œโ”€โ”€ ChatApiService.kt
    โ”‚   โ”‚       โ””โ”€โ”€ AIModelApiService.kt
    โ”‚   โ””โ”€โ”€ websocket/
    โ”‚       โ””โ”€โ”€ ChatWebSocketClient.kt
    โ”œโ”€โ”€ ai/
    โ”‚   โ”œโ”€โ”€ local/
    โ”‚   โ”‚   โ””โ”€โ”€ LocalModelManager.kt
    โ”‚   โ”œโ”€โ”€ remote/
    โ”‚   โ”‚   โ”œโ”€โ”€ OpenAIClient.kt
    โ”‚   โ”‚   โ”œโ”€โ”€ AnthropicClient.kt
    โ”‚   โ”‚   โ””โ”€โ”€ HuggingFaceClient.kt
    โ”‚   โ””โ”€โ”€ common/
    โ”‚       โ””โ”€โ”€ ModelManager.kt
    โ””โ”€โ”€ storage/
        โ””โ”€โ”€ FileManager.kt

๐Ÿš€ Installation

๐Ÿ“‹ Prerequisites

  • Git
  • Python 3.12+
  • Java 21+ (for Kotlin Multiplatform)
  • Xcode 14+ - For iOS development (macOS only)

๐Ÿ”ง Setup

1๏ธโƒฃ Clone this repository

git clone https://github.com/thisisthepy/Gemstone.git
cd Gemstone

2๏ธโƒฃ Install Python dependencies

uv sync

3๏ธโƒฃ Install Llama-cpp-python with CUDA support (Optional)

For GPU acceleration with NVIDIA cards

CMAKE_ARGS="-DGGML_CUDA=on -DLLAVA_BUILD=off -DCMAKE_CUDA_ARCHITECTURES=native" \
FORCE_CMAKE=1 uv pip install llama-cpp-python --no-cache-dir --force-reinstall --upgrade

4๏ธโƒฃ Run the server

python -m api run server

๐ŸŽฏ Usage

๐Ÿ–ฅ๏ธ Desktop Application

./gradlew :app:run

๐Ÿ“ฑ Android

./gradlew :app:installDebug

๐ŸŒ Web

./gradlew :app:wasmJsBrowserDevelopmentRun

๐ŸŽ iOS

./gradlew :app:iosSimulatorArm64Test

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

๐Ÿ› Bug Reports

  • Use the issue tracker
  • Provide detailed reproduction steps
  • Include platform and version information

๐Ÿ’ก Feature Requests

  • Check existing feature requests
  • Propose new ideas with clear use cases
  • Consider implementation complexity

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • JetBrains for Kotlin Multiplatform and Compose
  • Hugging Face for the Transformers library
  • Llama.cpp for efficient local model serving
  • Llama-cpp-python for Python bindings
  • Meta for Llama models
  • Alibaba for Qwen models
  • Google for Gemma models

๐ŸŽ‰ Ready to chat with AI across all your devices!

๐Ÿ› Report Bug | ๐Ÿ’ฌ Discuss on Discord | โญ Star on GitHub

About

Universal AI Chat System with On-Device Intelligence

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages