完整实现 Tauri + Vanilla JS 轻量级截图工具 Phase 1 - 项目搭建 - Tauri 2.x 项目初始化 - Vite 前端项目搭建 - 基础 UI 框架(CSS 变量、组件库) - 构建配置优化 Phase 2 - 核心截图功能 - 全屏/区域/窗口截图 - 截图预览和管理 - 文件命名和缩略图 - 全局快捷键集成 Phase 3 - 上传与存储 - 多图床上传(GitHub/Imgur/自定义) - 配置管理系统 - SQLite 数据库 Phase 4 - OCR 集成 - 云端 OCR(百度/腾讯云) - 插件管理系统 - 本地 OCR 插件(Go) - OCR 结果处理 Phase 5 - AI 分类系统 - Claude/OpenAI API 集成 - Prompt 模板引擎 - 模板管理界面 - 自动分类流程 Phase 6 - 历史记录与管理 - 图库视图(网格/列表) - 搜索与筛选 - 批量操作 - 导出功能(JSON/CSV/ZIP) Phase 7 - 打包与发布 - 多平台构建配置 - CI/CD 工作流 - 图标和资源 - 安装包配置 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
77 lines
1.8 KiB
Rust
77 lines
1.8 KiB
Rust
pub mod client;
|
||
pub mod prompt;
|
||
pub mod classify;
|
||
pub mod template;
|
||
|
||
pub use client::{AiClient, AiProvider, StreamChunk};
|
||
pub use prompt::PromptEngine;
|
||
pub use classify::Classifier;
|
||
pub use template::{Template, TemplateManager, TemplateVariable};
|
||
|
||
use anyhow::Result;
|
||
|
||
/// AI 服务错误类型
|
||
#[derive(Debug, thiserror::Error)]
|
||
pub enum AiError {
|
||
#[error("API 错误: {0}")]
|
||
ApiError(String),
|
||
|
||
#[error("网络错误: {0}")]
|
||
NetworkError(String),
|
||
|
||
#[error("认证失败: {0}")]
|
||
AuthError(String),
|
||
|
||
#[error("限流: 请稍后再试")]
|
||
RateLimitError,
|
||
|
||
#[error("配置错误: {0}")]
|
||
ConfigError(String),
|
||
|
||
#[error("模板错误: {0}")]
|
||
TemplateError(String),
|
||
|
||
#[error("其他错误: {0}")]
|
||
Other(String),
|
||
}
|
||
|
||
impl From<reqwest::Error> for AiError {
|
||
fn from(err: reqwest::Error) -> Self {
|
||
if err.is_timeout() {
|
||
AiError::NetworkError("请求超时".to_string())
|
||
} else if err.is_connect() {
|
||
AiError::NetworkError("连接失败".to_string())
|
||
} else {
|
||
AiError::NetworkError(err.to_string())
|
||
}
|
||
}
|
||
}
|
||
|
||
/// AI 服务结果
|
||
#[derive(Debug, Clone)]
|
||
pub struct AiResult {
|
||
/// 生成的文本内容
|
||
pub content: String,
|
||
/// 使用的 Token 数量(估算)
|
||
pub tokens_used: Option<usize>,
|
||
/// 模型名称
|
||
pub model: String,
|
||
/// 置信度评分(0.0 - 1.0)
|
||
pub confidence: Option<f64>,
|
||
}
|
||
|
||
/// 分类结果
|
||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||
pub struct ClassificationResult {
|
||
/// 主分类
|
||
pub category: String,
|
||
/// 子分类
|
||
pub subcategory: Option<String>,
|
||
/// 标签列表
|
||
pub tags: Vec<String>,
|
||
/// 置信度评分(0.0 - 1.0)
|
||
pub confidence: f64,
|
||
/// AI 提供的推理说明
|
||
pub reasoning: Option<String>,
|
||
}
|