Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d5269a420 | |||
| bd9f311b4b |
59
README.md
59
README.md
@@ -1,12 +1,31 @@
|
|||||||
# tsjetpiti
|
<p align="center">
|
||||||
|
<img src="piti-icon.png" alt="tsjetpiti icon" width="132">
|
||||||
|
</p>
|
||||||
|
|
||||||
A dead-simple Android chat app that runs an **uncensored Qwen3.5-2B** model
|
<p align="center">
|
||||||
fully **on-device** via an embedded [llama.cpp](https://github.com/ggml-org/llama.cpp),
|
<img src="piti-logo.png" alt="tsjetpiti" width="360">
|
||||||
wrapped in an **extremely barebones WebView UI**.
|
</p>
|
||||||
|
|
||||||
tsjet has a deliberate personality: it **always answers**, sounds confident and
|
<p align="center">
|
||||||
plausible, and is **hilariously, purposely wrong**. Hit **new tsjet** to wipe the
|
<strong>Tiny app. Big model. Absolutely no idea what it's talking about.</strong>
|
||||||
conversation and start fresh.
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<sub>ANDROID 11+ • ARM64 • FULLY ON-DEVICE • CONFIDENTLY WRONG</sub>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Meet tsjet
|
||||||
|
|
||||||
|
**tsjetpiti** is a dead-simple Android chat app running an uncensored
|
||||||
|
**Qwen3.5-2B** model entirely on your phone through embedded
|
||||||
|
[llama.cpp](https://github.com/ggml-org/llama.cpp). No cloud inference, no
|
||||||
|
account, and no conversation leaving the device.
|
||||||
|
|
||||||
|
tsjet has one special talent: it **always answers**, sounds completely
|
||||||
|
confident, and is **hilariously, deliberately wrong**. Hit **new tsjet** whenever
|
||||||
|
you want to erase the evidence and start fresh.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -30,9 +49,11 @@ conversation and start fresh.
|
|||||||
- **Inference:** llama.cpp compiled from source (pinned tag `b10333`) through the
|
- **Inference:** llama.cpp compiled from source (pinned tag `b10333`) through the
|
||||||
NDK. Pulled automatically at build time via CMake `FetchContent` — no submodule
|
NDK. Pulled automatically at build time via CMake `FetchContent` — no submodule
|
||||||
to init.
|
to init.
|
||||||
- **Model:** `Qwen3.5-2B-Uncensored-HauhauCS-Aggressive-Q6_K.gguf` (~1.5 GB) is
|
- **Model:**
|
||||||
**downloaded on first launch** from Hugging Face into the app's private storage.
|
[`Qwen3.5-2B-Uncensored-HauhauCS-Aggressive`](https://huggingface.co/HauhauCS/Qwen3.5-2B-Uncensored-HauhauCS-Aggressive)
|
||||||
It is *not* bundled in the APK. (Swap the quant in `ModelDownloader.kt`.)
|
in Q6_K format (~1.5 GB) is **downloaded on first launch** from Hugging Face
|
||||||
|
into the app's private storage. It is *not* bundled in the APK. (Swap the
|
||||||
|
quant in `ModelDownloader.kt`.)
|
||||||
- **Persona:** set via `SYSTEM_PROMPT` in `MainActivity.kt`; sampling is a little
|
- **Persona:** set via `SYSTEM_PROMPT` in `MainActivity.kt`; sampling is a little
|
||||||
hot (temp 0.9) for playful answers. The model is a Qwen3 "thinking" model, so the
|
hot (temp 0.9) for playful answers. The model is a Qwen3 "thinking" model, so the
|
||||||
prompt disables reasoning (empty `<think></think>` prefill + `/no_think`) to keep
|
prompt disables reasoning (empty `<think></think>` prefill + `/no_think`) to keep
|
||||||
@@ -80,6 +101,24 @@ manager, and tap it. First launch downloads the ~1.5 GB model over Wi-Fi.
|
|||||||
| Model URL / filename | `ModelDownloader.kt` |
|
| Model URL / filename | `ModelDownloader.kt` |
|
||||||
| Generation params (ctx, temp, tokens) | `MainActivity.kt` + `llama-jni.cpp` |
|
| Generation params (ctx, temp, tokens) | `MainActivity.kt` + `llama-jni.cpp` |
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
tsjetpiti is small because it stands on the shoulders of some decidedly
|
||||||
|
not-small projects:
|
||||||
|
|
||||||
|
- [Qwen3.5-2B](https://huggingface.co/Qwen/Qwen3.5-2B) by the Qwen team is the
|
||||||
|
upstream base model.
|
||||||
|
- [Qwen3.5-2B-Uncensored-HauhauCS-Aggressive](https://huggingface.co/HauhauCS/Qwen3.5-2B-Uncensored-HauhauCS-Aggressive)
|
||||||
|
by [HauhauCS](https://huggingface.co/HauhauCS) is the model variant and GGUF
|
||||||
|
quantization used by the app.
|
||||||
|
- [llama.cpp](https://github.com/ggml-org/llama.cpp) by the ggml-org community
|
||||||
|
provides the on-device inference engine and GGUF runtime.
|
||||||
|
- [Android](https://developer.android.com/) and
|
||||||
|
[Kotlin](https://kotlinlang.org/) provide the application platform and native
|
||||||
|
app layer.
|
||||||
|
- [Gradle](https://gradle.org/) and [CMake](https://cmake.org/) power the Kotlin
|
||||||
|
and C++ build.
|
||||||
|
|
||||||
## TODO / notes
|
## TODO / notes
|
||||||
|
|
||||||
- **Branding:** launcher icon (adaptive + legacy densities) is generated from
|
- **Branding:** launcher icon (adaptive + legacy densities) is generated from
|
||||||
|
|||||||
Reference in New Issue
Block a user