3.9 KiB
PRD: GemmaTrans Desktop Client
1. Project Overview
GemmaTrans is a lightweight, high-performance desktop translation client built with Tauri and Vue 3. It is designed to act as a modern frontend for the TranslateGemma model running on a local or remote Ollama instance (including over private networks like Tailscale). The application prioritizes speed, privacy, and a professional "Google Translate" aesthetic.
2. Technical Stack
- Core Framework: Tauri (Rust backend for system-level API access).
- Frontend Framework: Vue 3 (Composition API).
- Styling: Tailwind CSS (Minimalist, modern utility-first CSS).
- Package Manager:
pnpm. - State Management: Pinia (To persist user settings and prompt templates).
- Icons: Lucide Vue Next.
3. User Interface (UI) Requirements
The UI should be Modern, Minimalist, and Functional, mimicking the clean layout of Google Translate.
3.1 Main Translation Interface
- Split-Pane Layout:
- Left (Source): Input text area with a header for language selection.
- Right (Target): Read-only text area for the translation result, with a header for the target language selection.
- Language Selection: Dropdowns supporting both Full Name (e.g., English) and ISO Code (e.g., en).
- Actions: * "Translate" button (with loading state).
- "Copy" button on the target pane.
- "Clear" button on the source pane.
3.2 Settings View
- API Configuration: A text input for the
Ollama API Address(e.g.,http://100.x.y.z:11434). - Output Control: A toggle switch for
Enable Streaming(renders text as it is generated). - Prompt Engineering: A large text area for the
System Prompt Template.
4. Functional Requirements
4.1 Prompt Engineering Engine
The application must dynamically inject variables into the user-provided template before sending the request to the Ollama API.
Default Template:
You are a professional {SOURCE_LANG} ({SOURCE_CODE}) to {TARGET_LANG} ({TARGET_CODE}) translator. Your goal is to accurately convey the meaning and nuances of the original {SOURCE_LANG} text while adhering to {TARGET_LANG} grammar, vocabulary, and cultural sensitivities. Produce only the {TARGET_LANG} translation, without any additional explanations or commentary. Please translate the following {SOURCE_LANG} text into {TARGET_LANG}:
{TEXT}
4.2 Template Variables
The engine must support and correctly replace the following tokens:
{SOURCE_LANG}: Full name of the input language (e.g., "Chinese").{SOURCE_CODE}: Short code of the input language (e.g., "zh-Hans").{TARGET_LANG}: Full name of the output language (e.g., "English").{TARGET_CODE}: Short code of the output language (e.g., "en").{TEXT}: The actual content provided by the user.
4.3 Ollama Integration
- Support for the
/api/generateendpoint. - Ability to handle both
stream: true(progressive UI updates) andstream: false(batch updates). - Support for connecting to any valid URL provided in Settings, ensuring compatibility with Tailscale IPs.
5. Technical Implementation Details
5.1 Language Mapping (Default Configuration)
The application will provide a default list of languages:
| Language | Code |
|---|---|
| English | en |
| Chinese | zh-Hans |
| Japanese | ja |
| Spanish | es |
| French | fr |
| German | de |
5.2 Persistence
- All settings (API Address, Stream Toggle, and Custom Prompt Template) must be stored in the user's local application data folder to ensure they are remembered across restarts.
6. Success Metrics
- Connectivity: Seamless communication with an Ollama instance over a Tailscale network.
- UX: The "Streaming" mode should feel responsive with no UI lag during high-token-per-second generation.