mirror of
https://github.com/YuuKi-OS/yuy-chat.git
synced 2026-02-18 22:01:09 +00:00
pos nomas
This commit is contained in:
180
yuy-chat/README.md
Normal file
180
yuy-chat/README.md
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
# yuy-chat
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
```
|
||||||
|
$$\ $$\
|
||||||
|
\$$\ $$ |
|
||||||
|
\$$\ $$ /$$\ $$\ $$\ $$\
|
||||||
|
\$$$$ / $$ | $$ |$$ | $$ |
|
||||||
|
\$$ / $$ | $$ |$$ | $$ |
|
||||||
|
$$ | $$ | $$ |$$ | $$ |
|
||||||
|
$$ | \$$$$$$ |\$$$$$$$ |
|
||||||
|
\__| \______/ \____$$ |
|
||||||
|
$$\ $$ |
|
||||||
|
\$$$$$$ |
|
||||||
|
\______/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Beautiful TUI chat interface for local AI models**
|
||||||
|
|
||||||
|
[](https://www.rust-lang.org)
|
||||||
|
[](https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌟 Features
|
||||||
|
|
||||||
|
- ✨ **Beautiful TUI** - Gorgeous terminal interface powered by ratatui
|
||||||
|
- 🔍 **Auto-discovery** - Automatically finds `.gguf` and `.llamafile` models
|
||||||
|
- 🎨 **Presets** - Creative, Balanced, and Precise modes
|
||||||
|
- 💾 **Save conversations** - Keep your chat history
|
||||||
|
- 🌐 **HuggingFace API** - Use models from HuggingFace (optional)
|
||||||
|
- ⚡ **Fast & Lightweight** - ~5MB binary, minimal dependencies
|
||||||
|
- 🚀 **Streaming responses** - See words appear as they're generated
|
||||||
|
- 🎯 **Zero configuration** - Just run and chat
|
||||||
|
|
||||||
|
## 📦 Installation
|
||||||
|
|
||||||
|
### From source:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/YuuKi-OS/yuy-chat
|
||||||
|
cd yuy-chat
|
||||||
|
cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install globally:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo install --path .
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run yuy-chat
|
||||||
|
yuy-chat
|
||||||
|
|
||||||
|
# It will auto-scan ~/.yuuki/models/ for .gguf and .llamafile files
|
||||||
|
# Select a model and start chatting!
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📁 Supported Model Formats
|
||||||
|
|
||||||
|
- ✅ **GGUF** (`.gguf`) - Runs with llama.cpp
|
||||||
|
- ✅ **Llamafile** (`.llamafile`) - Self-contained executables
|
||||||
|
|
||||||
|
## 🎮 Controls
|
||||||
|
|
||||||
|
### Model Selector
|
||||||
|
- `↑/↓` or `j/k` - Navigate models
|
||||||
|
- `Enter` - Select model
|
||||||
|
- `R` - Refresh model list
|
||||||
|
- `Q` - Quit
|
||||||
|
|
||||||
|
### Chat
|
||||||
|
- `Type` - Write your message
|
||||||
|
- `Enter` - Send message
|
||||||
|
- `Shift+Enter` - New line
|
||||||
|
- `Ctrl+Enter` - Send (always)
|
||||||
|
- `Ctrl+C` - Open menu
|
||||||
|
- `Ctrl+L` - Clear chat
|
||||||
|
- `Ctrl+S` - Save conversation
|
||||||
|
- `↑/↓` - Scroll chat (when input is empty)
|
||||||
|
|
||||||
|
### Menu
|
||||||
|
- `1` - Change model
|
||||||
|
- `2` - Change preset
|
||||||
|
- `3` - Save conversation
|
||||||
|
- `4` - Load conversation
|
||||||
|
- `5` - Clear chat
|
||||||
|
- `6` - Settings
|
||||||
|
- `Q` - Back to chat
|
||||||
|
|
||||||
|
## ⚙️ Configuration
|
||||||
|
|
||||||
|
Config file location: `~/.config/yuy-chat/config.toml`
|
||||||
|
|
||||||
|
```toml
|
||||||
|
models_dir = "/home/user/.yuuki/models"
|
||||||
|
hf_token = "hf_xxxxxxxxxxxxx" # Optional
|
||||||
|
default_preset = "Balanced"
|
||||||
|
save_history = true
|
||||||
|
theme = "Dark"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 Presets
|
||||||
|
|
||||||
|
- **Creative** (temp: 0.8, top_p: 0.9) - More random and creative
|
||||||
|
- **Balanced** (temp: 0.6, top_p: 0.7) - Good middle ground
|
||||||
|
- **Precise** (temp: 0.3, top_p: 0.5) - More focused and deterministic
|
||||||
|
|
||||||
|
## 🌐 HuggingFace Integration
|
||||||
|
|
||||||
|
Add your HuggingFace token in settings to use models via API:
|
||||||
|
|
||||||
|
1. Press `Ctrl+C` → `6` (Settings)
|
||||||
|
2. Edit `HuggingFace Token`
|
||||||
|
3. Paste your token from https://huggingface.co/settings/tokens
|
||||||
|
4. Save and refresh models
|
||||||
|
|
||||||
|
## 📚 Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.config/yuy-chat/
|
||||||
|
├── config.toml # Configuration
|
||||||
|
└── conversations/ # Saved chats
|
||||||
|
├── conversation-20240206-143022.json
|
||||||
|
└── conversation-20240206-150133.json
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Requirements
|
||||||
|
|
||||||
|
- **Rust 1.70+** (for building)
|
||||||
|
- **llama.cpp** (for .gguf models) - Install with: `yuy runtime install llama-cpp`
|
||||||
|
- **chmod +x** (for .llamafile models)
|
||||||
|
|
||||||
|
## 🤝 Integration with yuy
|
||||||
|
|
||||||
|
yuy-chat is designed to work alongside [yuy](https://github.com/YuuKi-OS/yuy):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Download models with yuy
|
||||||
|
yuy download Yuuki-best
|
||||||
|
|
||||||
|
# Chat with yuy-chat
|
||||||
|
yuy-chat
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
**No models found?**
|
||||||
|
- Make sure you have models in `~/.yuuki/models/`
|
||||||
|
- Or specify custom directory: `yuy-chat --models-dir /path/to/models`
|
||||||
|
|
||||||
|
**llama.cpp not found?**
|
||||||
|
- Install with: `yuy runtime install llama-cpp`
|
||||||
|
- Or: `brew install llama.cpp` (macOS)
|
||||||
|
- Or: `pkg install llama-cpp` (Termux)
|
||||||
|
|
||||||
|
**Streaming not working?**
|
||||||
|
- Ensure llama.cpp is installed and in PATH
|
||||||
|
- Check model file permissions
|
||||||
|
|
||||||
|
## 📝 License
|
||||||
|
|
||||||
|
MIT License - see [LICENSE](LICENSE) file
|
||||||
|
|
||||||
|
## 🌸 Credits
|
||||||
|
|
||||||
|
Made with love by the Yuuki team
|
||||||
|
|
||||||
|
- TUI Framework: [ratatui](https://github.com/ratatui-org/ratatui)
|
||||||
|
- Inference: [llama.cpp](https://github.com/ggerganov/llama.cpp)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**For model management, see [yuy](https://github.com/YuuKi-OS/yuy)**
|
||||||
495
yuy-chat/USAGE.md
Normal file
495
yuy-chat/USAGE.md
Normal file
@@ -0,0 +1,495 @@
|
|||||||
|
# yuy-chat - Guía de Uso Completa
|
||||||
|
|
||||||
|
## 📖 Contenido
|
||||||
|
|
||||||
|
1. [Instalación](#instalación)
|
||||||
|
2. [Primera Vez](#primera-vez)
|
||||||
|
3. [Uso Diario](#uso-diario)
|
||||||
|
4. [Configuración Avanzada](#configuración-avanzada)
|
||||||
|
5. [Integración con HuggingFace](#integración-con-huggingface)
|
||||||
|
6. [Tips y Trucos](#tips-y-trucos)
|
||||||
|
7. [Troubleshooting](#troubleshooting)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Instalación
|
||||||
|
|
||||||
|
### Termux (Android)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Instalar Rust
|
||||||
|
pkg install rust
|
||||||
|
|
||||||
|
# Clonar y compilar
|
||||||
|
git clone https://github.com/YuuKi-OS/yuy-chat
|
||||||
|
cd yuy-chat
|
||||||
|
cargo build --release -j 1 # Usar 1 thread en Termux
|
||||||
|
|
||||||
|
# Instalar globalmente
|
||||||
|
cargo install --path .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Linux/macOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clonar y compilar
|
||||||
|
git clone https://github.com/YuuKi-OS/yuy-chat
|
||||||
|
cd yuy-chat
|
||||||
|
cargo build --release
|
||||||
|
|
||||||
|
# Instalar
|
||||||
|
cargo install --path .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Mismo proceso que Linux/macOS
|
||||||
|
git clone https://github.com/YuuKi-OS/yuy-chat
|
||||||
|
cd yuy-chat
|
||||||
|
cargo build --release
|
||||||
|
cargo install --path .
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎬 Primera Vez
|
||||||
|
|
||||||
|
### 1. Asegúrate de tener modelos
|
||||||
|
|
||||||
|
yuy-chat busca modelos en `~/.yuuki/models/` por defecto.
|
||||||
|
|
||||||
|
**Opción A: Usar yuy**
|
||||||
|
```bash
|
||||||
|
yuy download Yuuki-best
|
||||||
|
```
|
||||||
|
|
||||||
|
**Opción B: Copiar manualmente**
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.yuuki/models/
|
||||||
|
cp /path/to/your/model.gguf ~/.yuuki/models/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Instalar llama.cpp
|
||||||
|
|
||||||
|
**Termux:**
|
||||||
|
```bash
|
||||||
|
pkg install llama-cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
**macOS:**
|
||||||
|
```bash
|
||||||
|
brew install llama.cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
# Descargar desde releases
|
||||||
|
wget https://github.com/ggerganov/llama.cpp/releases/...
|
||||||
|
chmod +x llama-cli
|
||||||
|
sudo mv llama-cli /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Ejecutar yuy-chat
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yuy-chat
|
||||||
|
```
|
||||||
|
|
||||||
|
Verás el selector de modelos. Usa `↑/↓` para navegar y `Enter` para seleccionar.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💬 Uso Diario
|
||||||
|
|
||||||
|
### Flujo Básico
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Ejecuta: yuy-chat
|
||||||
|
↓
|
||||||
|
2. Selecciona modelo con ↑/↓ y Enter
|
||||||
|
↓
|
||||||
|
3. Escribe tu mensaje
|
||||||
|
↓
|
||||||
|
4. Presiona Enter para enviar
|
||||||
|
↓
|
||||||
|
5. Yuuki responde (streaming)
|
||||||
|
↓
|
||||||
|
6. Continúa la conversación
|
||||||
|
```
|
||||||
|
|
||||||
|
### Atajos de Teclado Útiles
|
||||||
|
|
||||||
|
**En chat:**
|
||||||
|
- `Enter` - Enviar mensaje
|
||||||
|
- `Shift+Enter` - Nueva línea (para mensajes multi-línea)
|
||||||
|
- `Ctrl+L` - Limpiar chat
|
||||||
|
- `Ctrl+S` - Guardar conversación
|
||||||
|
- `Ctrl+C` - Abrir menú
|
||||||
|
|
||||||
|
**Escribir código:**
|
||||||
|
```
|
||||||
|
You: Dame un ejemplo de código Python
|
||||||
|
|
||||||
|
[Shift+Enter para nueva línea]
|
||||||
|
def hello():
|
||||||
|
print("Hola")
|
||||||
|
[Shift+Enter]
|
||||||
|
|
||||||
|
hello()
|
||||||
|
|
||||||
|
[Ctrl+Enter para enviar]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cambiar Preset
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Ctrl+C (abrir menú)
|
||||||
|
↓
|
||||||
|
2. Presiona 2 (Change Preset)
|
||||||
|
↓
|
||||||
|
Cicla entre: Creative → Balanced → Precise
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cuándo usar cada preset:**
|
||||||
|
- **Creative**: Escribir historias, brainstorming, ideas
|
||||||
|
- **Balanced**: Uso general, conversación
|
||||||
|
- **Precise**: Código, matemáticas, datos exactos
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Configuración Avanzada
|
||||||
|
|
||||||
|
### Cambiar Directorio de Modelos
|
||||||
|
|
||||||
|
**Método 1: Configuración**
|
||||||
|
```bash
|
||||||
|
yuy-chat
|
||||||
|
Ctrl+C → 6 (Settings)
|
||||||
|
Editar "Models Directory"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Método 2: Archivo config**
|
||||||
|
```bash
|
||||||
|
nano ~/.config/yuy-chat/config.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
```toml
|
||||||
|
models_dir = "/custom/path/to/models"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Personalizar Presets
|
||||||
|
|
||||||
|
Edita el código o usa parámetros de llama.cpp directamente:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# En models/runtime.rs, modifica:
|
||||||
|
pub fn temperature(&self) -> f32 {
|
||||||
|
match self {
|
||||||
|
Preset::Creative => 0.9, // Más aleatorio
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tema Claro
|
||||||
|
|
||||||
|
```toml
|
||||||
|
theme = "Light"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌐 Integración con HuggingFace
|
||||||
|
|
||||||
|
### 1. Obtener Token
|
||||||
|
|
||||||
|
1. Ve a https://huggingface.co/settings/tokens
|
||||||
|
2. Click "Create new token"
|
||||||
|
3. Tipo: "Read"
|
||||||
|
4. Copia el token
|
||||||
|
|
||||||
|
### 2. Configurar en yuy-chat
|
||||||
|
|
||||||
|
**Método A: UI**
|
||||||
|
```
|
||||||
|
Ctrl+C → 6 (Settings)
|
||||||
|
Navigate to "HuggingFace Token"
|
||||||
|
Enter → Pega tu token
|
||||||
|
```
|
||||||
|
|
||||||
|
**Método B: Config file**
|
||||||
|
```toml
|
||||||
|
hf_token = "hf_abcdefghijklmnopqrstuvwxyz1234567890"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Usar Modelos de HF
|
||||||
|
|
||||||
|
Después de configurar el token:
|
||||||
|
```
|
||||||
|
yuy-chat
|
||||||
|
[Verás modelos locales + modelos HF API]
|
||||||
|
|
||||||
|
> Yuuki-best.gguf (Local)
|
||||||
|
Yuuki-3.7.gguf (Local)
|
||||||
|
Yuuki-best (HF API) <-- Usa la API
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ventajas:**
|
||||||
|
- No ocupa espacio local
|
||||||
|
- Siempre actualizado
|
||||||
|
- Acceso a modelos privados
|
||||||
|
|
||||||
|
**Desventajas:**
|
||||||
|
- Requiere internet
|
||||||
|
- Más lento que local
|
||||||
|
- Rate limits en plan gratis
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Tips y Trucos
|
||||||
|
|
||||||
|
### Guardar Conversaciones Importantes
|
||||||
|
|
||||||
|
```
|
||||||
|
Ctrl+S mientras chateas
|
||||||
|
→ Se guarda en ~/.config/yuy-chat/conversations/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cargar Conversación Anterior
|
||||||
|
|
||||||
|
```
|
||||||
|
Ctrl+C → 4 (Load Conversation)
|
||||||
|
↑/↓ para navegar
|
||||||
|
Enter para cargar
|
||||||
|
```
|
||||||
|
|
||||||
|
### Prompt Engineering
|
||||||
|
|
||||||
|
**Para mejores respuestas, sé específico:**
|
||||||
|
|
||||||
|
❌ Malo:
|
||||||
|
```
|
||||||
|
You: Explica Rust
|
||||||
|
```
|
||||||
|
|
||||||
|
✅ Bueno:
|
||||||
|
```
|
||||||
|
You: Explica el sistema de ownership en Rust con un ejemplo simple de borrowing. Quiero entender por qué evita memory leaks.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Conversaciones Multi-paso
|
||||||
|
|
||||||
|
```
|
||||||
|
You: Vamos a diseñar una API REST
|
||||||
|
|
||||||
|
Yuuki: Claro, ¿qué tipo de API?
|
||||||
|
|
||||||
|
You: Para gestionar tareas tipo TODO
|
||||||
|
|
||||||
|
Yuuki: Perfecto, estos son los endpoints...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usar Presets Dinámicamente
|
||||||
|
|
||||||
|
- **Creative preset**: "Escribe un cuento de terror"
|
||||||
|
- **Precise preset**: "¿Cuál es la complejidad de quicksort?"
|
||||||
|
- **Balanced preset**: "Explícame cómo funciona Git"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Troubleshooting
|
||||||
|
|
||||||
|
### Error: "No models found"
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Verifica que tienes modelos
|
||||||
|
ls ~/.yuuki/models/
|
||||||
|
|
||||||
|
# Si está vacío, descarga uno
|
||||||
|
yuy download Yuuki-best
|
||||||
|
|
||||||
|
# O especifica otro directorio
|
||||||
|
yuy-chat --models-dir /path/to/models
|
||||||
|
```
|
||||||
|
|
||||||
|
### Error: "llama.cpp binary not found"
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Termux
|
||||||
|
pkg install llama-cpp
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
brew install llama.cpp
|
||||||
|
|
||||||
|
# Linux - verifica que está en PATH
|
||||||
|
which llama-cli
|
||||||
|
# Si no, instala o agrega al PATH
|
||||||
|
export PATH=$PATH:/path/to/llama-cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
### Error: "Permission denied" (llamafile)
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
chmod +x ~/.yuuki/models/*.llamafile
|
||||||
|
```
|
||||||
|
|
||||||
|
### Chat no responde / se congela
|
||||||
|
|
||||||
|
**Diagnóstico:**
|
||||||
|
1. Verifica que llama.cpp funciona:
|
||||||
|
```bash
|
||||||
|
llama-cli -m ~/.yuuki/models/Yuuki-best.gguf -p "Hola"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Revisa logs:
|
||||||
|
```bash
|
||||||
|
RUST_LOG=debug yuy-chat
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Reduce context size si es falta de RAM
|
||||||
|
|
||||||
|
### Respuestas muy lentas
|
||||||
|
|
||||||
|
**Causas comunes:**
|
||||||
|
- Modelo muy grande para tu RAM
|
||||||
|
- Cuantización muy alta (F32, Q8)
|
||||||
|
- Sin aceleración GPU
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Descarga versión cuantizada más pequeña
|
||||||
|
yuy download Yuuki-best --quant q4_0
|
||||||
|
|
||||||
|
# Verifica RAM disponible
|
||||||
|
free -h # Linux
|
||||||
|
top # macOS/Linux
|
||||||
|
```
|
||||||
|
|
||||||
|
### No puedo escribir mensajes largos
|
||||||
|
|
||||||
|
El input box tiene límite visual pero **no de contenido**:
|
||||||
|
- Usa `Shift+Enter` para multi-línea
|
||||||
|
- Scroll automático después de 5 líneas
|
||||||
|
- O escribe en editor externo y pega
|
||||||
|
|
||||||
|
### HuggingFace API no funciona
|
||||||
|
|
||||||
|
**Verifica:**
|
||||||
|
```bash
|
||||||
|
# Test manual
|
||||||
|
curl https://api-inference.huggingface.co/models/OpceanAI/Yuuki-best \
|
||||||
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||||
|
-d '{"inputs": "test"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Problemas comunes:**
|
||||||
|
- Token expirado → Genera nuevo
|
||||||
|
- Rate limit → Espera o upgrade plan
|
||||||
|
- Modelo privado → Verifica permisos
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Performance Tips
|
||||||
|
|
||||||
|
### Termux/Móvil
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Usa modelos pequeños
|
||||||
|
yuy download Yuuki-best --quant q4_0
|
||||||
|
|
||||||
|
# Preset Balanced o Precise
|
||||||
|
# Creative es más lento
|
||||||
|
```
|
||||||
|
|
||||||
|
### Desktop High-end
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Usa Q8 o F32 para mejor calidad
|
||||||
|
yuy download Yuuki-best --quant q8_0
|
||||||
|
|
||||||
|
# Habilita GPU en llama.cpp
|
||||||
|
llama-cli -m model.gguf -ngl 32 # 32 layers en GPU
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎓 Casos de Uso
|
||||||
|
|
||||||
|
### 1. Coding Assistant
|
||||||
|
|
||||||
|
```
|
||||||
|
Preset: Precise
|
||||||
|
|
||||||
|
You: Cómo implemento un servidor HTTP en Rust?
|
||||||
|
You: Muestra ejemplo con tokio
|
||||||
|
You: Agrega manejo de errores
|
||||||
|
You: Ahora agrega logging
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Creative Writing
|
||||||
|
|
||||||
|
```
|
||||||
|
Preset: Creative
|
||||||
|
|
||||||
|
You: Escribe el inicio de una novela de ciencia ficción ambientada en Marte en el año 2157
|
||||||
|
You: Continúa describiendo al protagonista
|
||||||
|
You: ¿Qué conflicto enfrenta?
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Learning/Study
|
||||||
|
|
||||||
|
```
|
||||||
|
Preset: Balanced
|
||||||
|
|
||||||
|
You: Explícame la diferencia entre mutex y semaphore
|
||||||
|
You: Dame un ejemplo de cuándo usar cada uno
|
||||||
|
You: ¿Qué pasa si no uso sincronización?
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Workflow Recomendado
|
||||||
|
|
||||||
|
### Developer
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Mañana: Coding
|
||||||
|
yuy-chat # Preset: Precise
|
||||||
|
> Ayuda con bugs, arquitectura, código
|
||||||
|
|
||||||
|
# Tarde: Docs
|
||||||
|
yuy-chat # Preset: Balanced
|
||||||
|
> Escribir documentación, READMEs
|
||||||
|
|
||||||
|
# Noche: Ideas
|
||||||
|
yuy-chat # Preset: Creative
|
||||||
|
> Brainstorming features
|
||||||
|
```
|
||||||
|
|
||||||
|
### Writer
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yuy-chat # Preset: Creative
|
||||||
|
> Generar ideas
|
||||||
|
> Escribir borradores
|
||||||
|
> Feedback de historias
|
||||||
|
```
|
||||||
|
|
||||||
|
### Estudiante
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yuy-chat # Preset: Balanced
|
||||||
|
> Explicaciones de conceptos
|
||||||
|
> Resolver dudas
|
||||||
|
> Preparar exámenes
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**¿Preguntas? Abre un issue en GitHub!**
|
||||||
|
|
||||||
|
🌸 Hecho con amor por el equipo Yuuki
|
||||||
@@ -110,3 +110,9 @@ impl Config {
|
|||||||
Ok(config_dir)
|
Ok(config_dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Yuuki constants
|
||||||
|
pub const HF_ORG: &str = "OpceanAI";
|
||||||
|
pub const OLLAMA_ORG: &str = "aguitachan3";
|
||||||
|
pub const YUUKI_API: &str = "https://huggingface.co/spaces/OpceanAI/Yuuki-api";
|
||||||
|
pub const AVAILABLE_QUANTS: &[&str] = &["q4_0", "q4_k_m", "q5_k_m", "q8_0", "f32"];
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
use super::{Model, ModelFormat, ModelSource};
|
use super::{Model, ModelFormat, ModelSource};
|
||||||
use crate::config::Preset;
|
use crate::config::{Preset, YUUKI_API};
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use std::process::Stdio;
|
use std::process::Stdio;
|
||||||
use tokio::io::{AsyncBufReadExt, BufReader};
|
use tokio::io::{AsyncBufReadExt, BufReader};
|
||||||
@@ -109,19 +109,44 @@ impl ModelRuntime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn generate_hf(&mut self, prompt: &str) -> Result<()> {
|
async fn generate_hf(&mut self, prompt: &str) -> Result<()> {
|
||||||
// Placeholder for HuggingFace API call
|
// Use Yuuki API
|
||||||
let (tx, rx) = mpsc::channel(100);
|
let (tx, rx) = mpsc::channel(100);
|
||||||
self.response_rx = Some(rx);
|
self.response_rx = Some(rx);
|
||||||
|
|
||||||
let prompt_owned = prompt.to_string();
|
let prompt_owned = prompt.to_string();
|
||||||
|
let api_url = YUUKI_API.to_string();
|
||||||
|
let temp = self.preset.temperature();
|
||||||
|
let top_p = self.preset.top_p();
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
// Simulated streaming response
|
// Call Yuuki API
|
||||||
let response = format!("Response to: {}", prompt_owned);
|
let client = reqwest::Client::new();
|
||||||
for word in response.split_whitespace() {
|
let response = client
|
||||||
let _ = tx.send(format!("{} ", word)).await;
|
.post(&api_url)
|
||||||
tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;
|
.json(&serde_json::json!({
|
||||||
|
"prompt": prompt_owned,
|
||||||
|
"temperature": temp,
|
||||||
|
"top_p": top_p,
|
||||||
|
"max_tokens": 512
|
||||||
|
}))
|
||||||
|
.send()
|
||||||
|
.await;
|
||||||
|
|
||||||
|
match response {
|
||||||
|
Ok(resp) => {
|
||||||
|
if let Ok(text) = resp.text().await {
|
||||||
|
// Stream response word by word
|
||||||
|
for word in text.split_whitespace() {
|
||||||
|
let _ = tx.send(format!("{} ", word)).await;
|
||||||
|
tokio::time::sleep(tokio::time::Duration::from_millis(50)).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => {
|
||||||
|
let _ = tx.send("Error: Could not connect to Yuuki API".to_string()).await;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = tx.send("[DONE]".to_string()).await;
|
let _ = tx.send("[DONE]".to_string()).await;
|
||||||
});
|
});
|
||||||
|
|
||||||
Reference in New Issue
Block a user