Skip to main content

TUI AI chat tool for local LLM development

Project description

TinyChat

轻量级终端 AI 聊天应用,支持多后端供应商,中英文双语界面。

特性

多后端支持

  • Ollama - 本地 Ollama 服务器
  • OpenAI 兼容 - 支持 OpenAI 兼容的 API 服务

现代化终端界面

  • 基于 Textual 框架
  • 丰富的 Markdown 渲染和代码高亮
  • 响应式布局,自适应终端尺寸
  • 原生鼠标支持(点击、滚动)
  • 多主题支持(明/暗主题)

国际化

  • 中文/英文双语界面
  • 一键切换语言

会话管理

  • 自动保存聊天历史
  • 支持多会话切换
  • 自动生成会话标题
  • 流式响应实时显示

跨平台

  • 支持 Windows、macOS、Linux
  • 跨平台剪贴板支持

安装

系统要求

  • Python 3.9+
  • pip 或 uv 包管理器

从 PyPI 安装

pip install tinychat

从源码安装

git clone <repository-url>
cd tinychat

# 使用 pip
pip install -e ".[dev]"

# 或使用 uv
uv sync --extra dev

使用

启动应用

tinychat

或直接运行模块:

python -m tinychat

基本操作

  1. 选择后端 - 在左侧边栏点击后端名称
  2. 选择模型 - 在边栏点击模型名称
  3. 发送消息 - 输入内容后按 Enter
  4. 换行 - 按 Ctrl+Enter 插入换行
  5. 滚动历史 - 使用鼠标滚轮或方向键

快捷键

按键 功能
Enter 发送消息
Ctrl+Enter 输入换行
Ctrl+L 切换语言
Ctrl+T 切换主题
Ctrl+Q 退出应用
Ctrl+P 命令面板

配置

配置文件位于 ~/.config/tinychat/config.toml(如不存在会自动创建)。

配置结构

[settings]
locale = "zh"  # 语言: "en" (英语) 或 "zh" (中文)

[[backends]]  # 可以配置多个后端
name = "backend-name"       # 后端显示名称
type = "backend-type"       # 后端类型
endpoint = "API地址"         # API 端点
default_model = "模型名"     # 默认模型
api_key = "密钥"            # API 密钥(可选)

后端类型详解

类型 说明 API 端点示例
ollama 本地 Ollama 服务器 http://localhost:11434
openai-compatible OpenAI 兼容的 API 服务 https://api.example.com/v1

后端配置参数

参数 类型 必需 说明
name 字符串 后端显示名称,用于 UI 标识
type 字符串 后端类型:ollamaopenai-compatible
endpoint 字符串 API 地址,需包含完整路径(如 /v1
default_model 字符串 默认使用的模型名称
api_key 字符串 API 密钥(Ollama 不需要)

配置示例

Ollama 本地服务器:

[[backends]]
name = "ollama-local"
type = "ollama"
endpoint = "http://localhost:11434"
default_model = "llama3.2"

OpenAI 官方 API:

[[backends]]
name = "openai"
type = "openai-compatible"
endpoint = "https://api.openai.com/v1"
api_key = "sk-..."
default_model = "gpt-4o"

vLLM / LM Studio / Text Generation WebUI 等 OpenAI 兼容服务:

[[backends]]
name = "vllm-server"
type = "openai-compatible"
endpoint = "http://localhost:8000/v1"
api_key = "not-required"  # 多数本地服务不需要密钥
default_model = "meta-llama/Llama-2-7b-chat-hf"

OpenRouter / Together AI 等云服务:

[[backends]]
name = "openrouter"
type = "openai-compatible"
endpoint = "https://openrouter.ai/api/v1"
api_key = "sk-or-..."
default_model = "openai/gpt-3.5-turbo"

Azure OpenAI Service:

[[backends]]
name = "azure-openai"
type = "openai-compatible"
endpoint = "https://your-resource.openai.azure.com/openai/deployments/your-deployment"
api_key = "your-azure-api-key"
default_model = "gpt-35-turbo"

多后端配置

可以同时配置多个后端,通过 name 字段区分:

[settings]
locale = "zh"

[[backends]]
name = "ollama-local"
type = "ollama"
endpoint = "http://localhost:11434"
default_model = "llama3.2"

[[backends]]
name = "openai-cloud"
type = "openai-compatible"
endpoint = "https://api.openai.com/v1"
api_key = "sk-..."
default_model = "gpt-4o"

[[backends]]
name = "vllm-server"
type = "openai-compatible"
endpoint = "http://localhost:8000/v1"
default_model = "meta-llama/Llama-2-7b-chat-hf"

启动后可在左侧边栏点击切换不同后端和模型。


开发

项目结构

tinychat/
├── src/tinychat/
│   ├── __main__.py           # 入口
│   ├── app_textual.py        # 主应用
│   ├── backends/             # 后端实现
│   │   ├── base.py          # 抽象基类
│   │   ├── ollama.py        # Ollama 后端
│   │   └── openai.py        # OpenAI 后端
│   ├── components/           # UI 组件
│   │   ├── chat_view_textual.py
│   │   ├── input_area_textual.py
│   │   ├── sidebar_textual.py
│   │   └── status_bar_textual.py
│   ├── models/               # 数据模型
│   ├── utils/                # 工具函数
│   │   ├── event_bus.py     # 事件系统
│   │   ├── i18n.py          # 国际化
│   │   └── theme_manager.py # 主题管理
│   └── locales/              # 翻译文件
│       ├── en/LC_MESSAGES/
│       └── zh/LC_MESSAGES/
└── tests/                    # 测试

运行测试

# 运行所有测试
pytest tests/ -v

# 带覆盖率报告
pytest tests/ --cov=src/tinychat --cov-report=html

# 运行单个测试
pytest tests/unit/test_app_textual.py -v

代码检查

ruff check src/ tests/
ruff format src/ tests/

打包发布

# 安装构建工具
pip install build

# 构建
python -m build

# 生成的文件在 dist/ 目录

致谢

许可证

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tinychat_ai-0.1.3.tar.gz (49.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tinychat_ai-0.1.3-py3-none-any.whl (59.8 kB view details)

Uploaded Python 3

File details

Details for the file tinychat_ai-0.1.3.tar.gz.

File metadata

  • Download URL: tinychat_ai-0.1.3.tar.gz
  • Upload date:
  • Size: 49.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for tinychat_ai-0.1.3.tar.gz
Algorithm Hash digest
SHA256 e18831a22a26997e99a8a9eceeca169baac3441a0c28ef007d604bb8a94d3d42
MD5 5057a3ca878d5fb05c53805510f948cc
BLAKE2b-256 022832d36c127476ec4084a6913a692cc0852d263d0febec59e01d44dfc719d0

See more details on using hashes here.

File details

Details for the file tinychat_ai-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: tinychat_ai-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 59.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for tinychat_ai-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9322b2cb934fee550a624775ba4c5e7ddc3b22bf91632d74457b0da2d647526e
MD5 96dd1b8b62677caf87188258d5022d9f
BLAKE2b-256 ebdd54a46516dbf0ffa831e9a66316bae81faca095e7a1ea248b46da48e6c005

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page