luma-mcp 1.2.6 → 1.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +11 -1
- package/CHANGELOG.md +76 -0
- package/README.md +22 -1
- package/build/config.d.ts +1 -1
- package/build/config.d.ts.map +1 -1
- package/build/config.js +7 -0
- package/build/config.js.map +1 -1
- package/build/index.js +9 -5
- package/build/index.js.map +1 -1
- package/build/qwen-client.d.ts +3 -2
- package/build/qwen-client.d.ts.map +1 -1
- package/build/qwen-client.js +39 -25
- package/build/qwen-client.js.map +1 -1
- package/build/siliconflow-client.d.ts +2 -1
- package/build/siliconflow-client.d.ts.map +1 -1
- package/build/siliconflow-client.js +5 -5
- package/build/siliconflow-client.js.map +1 -1
- package/build/volcengine-client.d.ts +27 -0
- package/build/volcengine-client.d.ts.map +1 -0
- package/build/volcengine-client.js +96 -0
- package/build/volcengine-client.js.map +1 -0
- package/build/zhipu-client.d.ts +3 -2
- package/build/zhipu-client.d.ts.map +1 -1
- package/build/zhipu-client.js +15 -16
- package/build/zhipu-client.js.map +1 -1
- package/package.json +5 -2
package/.env.example
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# 模型提供商选择:zhipu | siliconflow | qwen
|
|
1
|
+
# 模型提供商选择:zhipu | siliconflow | qwen | volcengine
|
|
2
2
|
MODEL_PROVIDER=zhipu
|
|
3
3
|
|
|
4
4
|
# ========== Zhipu AI (推荐 - GLM-4.6V) ==========
|
|
@@ -16,6 +16,16 @@ MODEL_NAME=glm-4.6v
|
|
|
16
16
|
# DASHSCOPE_API_KEY=your-dashscope-api-key
|
|
17
17
|
# MODEL_NAME=qwen3-vl-flash
|
|
18
18
|
|
|
19
|
+
# ========== 火山方舟 Volcengine (Doubao-Seed-1.6) ==========
|
|
20
|
+
# 获取API Key: https://console.volcengine.com/ark
|
|
21
|
+
# VOLCENGINE_API_KEY=your-volcengine-api-key
|
|
22
|
+
# MODEL_NAME=doubao-seed-1-6-flash-250828
|
|
23
|
+
# 可选模型:
|
|
24
|
+
# - doubao-seed-1-6-flash-250828 (性价比高,256k上下文)
|
|
25
|
+
# - doubao-seed-1-6-vision-250815 (视觉优化,64k输出)
|
|
26
|
+
# - doubao-seed-1-6-lite-251015 (轻量级)
|
|
27
|
+
# 注意: 使用控制台中的实际模型ID
|
|
28
|
+
|
|
19
29
|
# ========== 通用参数 ==========
|
|
20
30
|
MAX_TOKENS=16384
|
|
21
31
|
TEMPERATURE=0.7
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,82 @@
|
|
|
2
2
|
|
|
3
3
|
本项目的所有重大变更都将记录在此文件中。
|
|
4
4
|
|
|
5
|
+
## [1.2.8] - 2025-12-23
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- 🐛 **修复 enableThinking 参数传递**: 修复 index.ts 中未将 enableThinking 参数传递给视觉模型客户端的问题
|
|
10
|
+
- 🔧 **统一 thinking 逻辑**: 所有支持 thinking 的客户端(智谱、千问、火山方舟)现在使用统一的启用逻辑
|
|
11
|
+
- 📝 **完善日志记录**: 千问客户端新增 API 调用日志,与其他客户端保持一致
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- ♻️ **重构智谱客户端**: 优化 thinking 参数处理逻辑,使代码更清晰易懂
|
|
16
|
+
- ♻️ **重构千问客户端**: 统一 thinking 启用逻辑,默认启用思考模式
|
|
17
|
+
- ✨ **火山方舟 thinking 支持**: 火山方舟 Doubao 模型现在正确支持思考模式
|
|
18
|
+
|
|
19
|
+
### Technical Details
|
|
20
|
+
|
|
21
|
+
- `src/index.ts`: 在 analyzeWithRetry 中正确传递 config.enableThinking 参数
|
|
22
|
+
- `src/zhipu-client.ts`: 重构 thinking 逻辑,使用 `if (enableThinking !== false)` 统一判断
|
|
23
|
+
- `src/qwen-client.ts`:
|
|
24
|
+
- 统一 thinking 启用逻辑为 `if (enableThinking !== false)`
|
|
25
|
+
- 新增 logger 导入和 API 调用日志
|
|
26
|
+
- 添加成功/失败日志记录
|
|
27
|
+
- `src/volcengine-client.ts`:
|
|
28
|
+
- 新增 thinking 参数支持到 VolcengineRequest 接口
|
|
29
|
+
- 实现 thinking 模式启用逻辑
|
|
30
|
+
- 更新日志记录以反映实际 thinking 状态
|
|
31
|
+
|
|
32
|
+
### Thinking Mode Support
|
|
33
|
+
|
|
34
|
+
现在所有支持的模型都正确启用思考模式:
|
|
35
|
+
|
|
36
|
+
| 模型 | Thinking 支持 | 实现方式 | 默认状态 |
|
|
37
|
+
|-----------------------|---------------|---------------------------------|----------|
|
|
38
|
+
| 智谱 GLM-4.6V | ✅ | `thinking: { type: "enabled" }` | 启用 |
|
|
39
|
+
| 千问 Qwen3-VL | ✅ | `extra_body.enable_thinking` | 启用 |
|
|
40
|
+
| 火山方舟 Doubao | ✅ | `thinking: { type: "enabled" }` | 启用 |
|
|
41
|
+
| 硅基流动 DeepSeek-OCR | ❌ | 不支持 | N/A |
|
|
42
|
+
|
|
43
|
+
用户可通过 `ENABLE_THINKING=false` 环境变量禁用思考模式以提升速度和降低成本。
|
|
44
|
+
|
|
45
|
+
## [1.2.7] - 2025-12-17
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
|
|
49
|
+
- 🆕 **火山方舟 Provider**: 新增第四个视觉模型提供商 - 火山方舟 Volcengine
|
|
50
|
+
- 🎯 **Doubao-Seed-1.6 系列**: 支持 flash、vision、lite 多种版本
|
|
51
|
+
- 🔧 **统一配置架构**: 客户端构造函数改为接受 LumaConfig 对象,实现配置集中管理
|
|
52
|
+
- 🖼️ **完整图片格式支持**: 火山方舟支持 base64 数据、URL 链接和本地文件
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- 🏗️ **架构重构**: 三个现有客户端(Zhipu、SiliconFlow、Qwen)重构为统一配置对象模式
|
|
57
|
+
- 🗃️ **客户端优化**: 移除硬编码默认值,所有配置统一从环境变量读取
|
|
58
|
+
- 📝 **API 格式统一**: 火山方舟客户端改为使用 Chat Completions API 格式,与其他 provider 保持一致
|
|
59
|
+
- 📚 **文档完善**: 更新中英文 README,添加火山方舟配置示例和模型对比
|
|
60
|
+
|
|
61
|
+
### Technical Details
|
|
62
|
+
|
|
63
|
+
- `src/config.ts`: 新增 volcengine provider 支持,添加 VOLCENGINE_API_KEY 环境变量
|
|
64
|
+
- `src/volcengine-client.ts`: 新文件,完整实现 VolcengineClient 类,支持 Chat Completions API
|
|
65
|
+
- `src/zhipu-client.ts`: 重构构造函数,移除硬编码参数,支持 LumaConfig
|
|
66
|
+
- `src/siliconflow-client.ts`: 重构构造函数,支持统一配置对象
|
|
67
|
+
- `src/qwen-client.ts`: 重构构造函数,支持统一配置对象
|
|
68
|
+
- `src/index.ts`: 添加 VolcengineClient 导入和实例化逻辑
|
|
69
|
+
- `.env.example`: 添加火山方舟配置示例和说明
|
|
70
|
+
- `README.md` & `docs/README_EN.md`: 新增火山方舟特性说明和配置示例
|
|
71
|
+
|
|
72
|
+
### Provider Summary
|
|
73
|
+
|
|
74
|
+
现在支持 4 个视觉模型提供商:
|
|
75
|
+
|
|
76
|
+
1. **智谱 GLM-4.6V** (默认): 中文理解优秀,16384 tokens
|
|
77
|
+
2. **硅基流动 DeepSeek-OCR**: 免费使用,OCR 能力强
|
|
78
|
+
3. **阿里云 Qwen3-VL-Flash**: 速度快成本低,支持思考模式
|
|
79
|
+
4. **火山方舟 Doubao-Seed-1.6**: 性价比高,256k 上下文,支持多种版本
|
|
80
|
+
|
|
5
81
|
## [1.2.6] - 2025-12-16
|
|
6
82
|
|
|
7
83
|
### Changed
|
package/README.md
CHANGED
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
## 特性
|
|
8
8
|
|
|
9
|
-
- **多模型支持**:
|
|
9
|
+
- **多模型支持**: 支持四个视觉模型
|
|
10
10
|
- GLM-4.6V(智谱清言)- 付费,中文理解优秀
|
|
11
11
|
- DeepSeek-OCR(硅基流动)- **免费使用**,OCR 能力强
|
|
12
12
|
- Qwen3-VL-Flash(阿里云通义千问)- 付费,速度快成本低,支持思考模式
|
|
13
|
+
- Doubao-Seed-1.6(火山方舟)- 付费,性价比高,支持多种版本
|
|
13
14
|
- **简单设计**: 单一 `analyze_image` 工具处理所有图片分析任务
|
|
14
15
|
- **智能理解**: 自动识别代码、UI、错误等不同场景
|
|
15
16
|
- **全面支持**: 代码截图、界面设计、错误诊断、OCR 文字识别
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
- **方案 A**: 智谱 AI API Key ([获取地址](https://open.bigmodel.cn/)) - 中文理解优秀
|
|
27
28
|
- **方案 B**: 硅基流动 API Key ([获取地址](https://cloud.siliconflow.cn/)) - **免费使用**,OCR 能力强
|
|
28
29
|
- **方案 C**: 阿里云百炼 API Key ([获取地址](https://bailian.console.aliyun.com/)) - 速度快成本低,支持思考模式
|
|
30
|
+
- **方案 D**: 火山方舟 API Key ([获取地址](https://console.volcengine.com/ark)) - 性价比高,支持多种版本
|
|
29
31
|
|
|
30
32
|
### 安装
|
|
31
33
|
|
|
@@ -98,6 +100,24 @@ npx luma-mcp
|
|
|
98
100
|
}
|
|
99
101
|
```
|
|
100
102
|
|
|
103
|
+
**方案 D: 使用火山方舟 Doubao-Seed-1.6**:
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"mcpServers": {
|
|
108
|
+
"luma": {
|
|
109
|
+
"command": "npx",
|
|
110
|
+
"args": ["-y", "luma-mcp"],
|
|
111
|
+
"env": {
|
|
112
|
+
"MODEL_PROVIDER": "volcengine",
|
|
113
|
+
"VOLCENGINE_API_KEY": "your-volcengine-api-key",
|
|
114
|
+
"MODEL_NAME": "doubao-seed-1-6-flash-250828"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
101
121
|
**本地开发(智谱)**:
|
|
102
122
|
|
|
103
123
|
```json
|
|
@@ -425,6 +445,7 @@ luma-mcp/
|
|
|
425
445
|
│ ├── zhipu-client.ts # GLM-4.6V API 客户端
|
|
426
446
|
│ ├── siliconflow-client.ts # DeepSeek-OCR API 客户端
|
|
427
447
|
│ ├── qwen-client.ts # Qwen3-VL API 客户端
|
|
448
|
+
│ ├── volcengine-client.ts # Doubao-Seed-1.6 API 客户端
|
|
428
449
|
│ ├── image-processor.ts # 图片处理
|
|
429
450
|
│ └── utils/
|
|
430
451
|
│ ├── logger.ts # 日志工具
|
package/build/config.d.ts
CHANGED
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,YAAY,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,UAAU,CA+CvC"}
|
package/build/config.js
CHANGED
|
@@ -25,6 +25,13 @@ export function loadConfig() {
|
|
|
25
25
|
throw new Error('DASHSCOPE_API_KEY environment variable is required when using Qwen provider');
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
else if (provider === 'volcengine') {
|
|
29
|
+
apiKey = process.env.VOLCENGINE_API_KEY;
|
|
30
|
+
defaultModel = 'doubao-seed-1-6-flash-250828';
|
|
31
|
+
if (!apiKey) {
|
|
32
|
+
throw new Error('VOLCENGINE_API_KEY environment variable is required when using Volcengine provider');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
28
35
|
else {
|
|
29
36
|
apiKey = process.env.ZHIPU_API_KEY;
|
|
30
37
|
defaultModel = 'glm-4.6v';
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,aAAa;IACb,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,OAAO,CAAkB,CAAC;IAEzF,kBAAkB;IAClB,IAAI,MAA0B,CAAC;IAC/B,IAAI,YAAoB,CAAC;IAEzB,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzC,YAAY,GAAG,0BAA0B,CAAC;QAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC,YAAY,GAAG,gBAAgB,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACnC,YAAY,GAAG,UAAU,CAAC;QAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,MAAM;QACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,YAAY;QAC7C,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,EAAE,CAAC;QAC1D,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC;QACzD,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;QAC5C,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;KACxD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,aAAa;IACb,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,OAAO,CAAkB,CAAC;IAEzF,kBAAkB;IAClB,IAAI,MAA0B,CAAC;IAC/B,IAAI,YAAoB,CAAC;IAEzB,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzC,YAAY,GAAG,0BAA0B,CAAC;QAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC,YAAY,GAAG,gBAAgB,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACrC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACxC,YAAY,GAAG,8BAA8B,CAAC;QAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACnC,YAAY,GAAG,UAAU,CAAC;QAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,MAAM;QACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,YAAY;QAC7C,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,EAAE,CAAC;QAC1D,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC;QACzD,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;QAC5C,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;KACxD,CAAC;AACJ,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { loadConfig } from "./config.js";
|
|
|
13
13
|
import { ZhipuClient } from "./zhipu-client.js";
|
|
14
14
|
import { SiliconFlowClient } from "./siliconflow-client.js";
|
|
15
15
|
import { QwenClient } from "./qwen-client.js";
|
|
16
|
+
import { VolcengineClient } from "./volcengine-client.js";
|
|
16
17
|
import { imageToBase64, validateImageSource } from "./image-processor.js";
|
|
17
18
|
import { withRetry, createSuccessResponse, createErrorResponse, } from "./utils/helpers.js";
|
|
18
19
|
/**
|
|
@@ -25,13 +26,16 @@ async function createServer() {
|
|
|
25
26
|
// 根据配置选择模型客户端
|
|
26
27
|
let visionClient;
|
|
27
28
|
if (config.provider === "siliconflow") {
|
|
28
|
-
visionClient = new SiliconFlowClient(config
|
|
29
|
+
visionClient = new SiliconFlowClient(config);
|
|
29
30
|
}
|
|
30
31
|
else if (config.provider === "qwen") {
|
|
31
|
-
visionClient = new QwenClient(config
|
|
32
|
+
visionClient = new QwenClient(config);
|
|
33
|
+
}
|
|
34
|
+
else if (config.provider === "volcengine") {
|
|
35
|
+
visionClient = new VolcengineClient(config);
|
|
32
36
|
}
|
|
33
37
|
else {
|
|
34
|
-
visionClient = new ZhipuClient(config
|
|
38
|
+
visionClient = new ZhipuClient(config);
|
|
35
39
|
}
|
|
36
40
|
logger.info("Vision client initialized", {
|
|
37
41
|
provider: config.provider,
|
|
@@ -55,7 +59,7 @@ async function createServer() {
|
|
|
55
59
|
// 3. 直接使用原始提示词(不进行包装或增强)
|
|
56
60
|
const fullPrompt = prompt;
|
|
57
61
|
// 4. 调用视觉模型分析图片
|
|
58
|
-
return await visionClient.analyzeImage(imageDataUrl, fullPrompt);
|
|
62
|
+
return await visionClient.analyzeImage(imageDataUrl, fullPrompt, config.enableThinking);
|
|
59
63
|
}, 2, // 最多重试2次
|
|
60
64
|
1000 // 初始延补1秒
|
|
61
65
|
);
|
|
@@ -66,7 +70,7 @@ async function createServer() {
|
|
|
66
70
|
.describe("要分析的图片来源:支持三种方式 1) 用户粘贴图片时由Claude Desktop自动提供路径 2) 本地文件路径,如./screenshot.png 3) HTTP(S)图片URL,如https://example.com/image.png(支持 PNG、JPG、JPEG、WebP、GIF,最大 10MB)"),
|
|
67
71
|
prompt: z
|
|
68
72
|
.string()
|
|
69
|
-
.describe(
|
|
73
|
+
.describe("分析提示词:AI根据用户问题生成的专业分析提示词。应该包含具体的分析要求和期望的输出格式。"),
|
|
70
74
|
}, async (params) => {
|
|
71
75
|
try {
|
|
72
76
|
// AI应该已经根据用户问题生成了合适的prompt
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,wCAAwC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpE,uBAAuB,EAAE,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,KAAK,UAAU,YAAY;IACzB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAE5C,OAAO;IACP,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,cAAc;IACd,IAAI,YAA0B,CAAC;IAE/B,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACtC,YAAY,GAAG,IAAI,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/qwen-client.d.ts
CHANGED
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
* 使用 OpenAI 兼容接口
|
|
4
4
|
* API 文档: https://help.aliyun.com/zh/model-studio/vision
|
|
5
5
|
*/
|
|
6
|
-
import { VisionClient } from
|
|
6
|
+
import { VisionClient } from "./vision-client.js";
|
|
7
|
+
import type { LumaConfig } from "./config.js";
|
|
7
8
|
export declare class QwenClient implements VisionClient {
|
|
8
9
|
private client;
|
|
9
10
|
private apiKey;
|
|
10
11
|
private model;
|
|
11
12
|
private maxTokens;
|
|
12
13
|
private temperature;
|
|
13
|
-
constructor(
|
|
14
|
+
constructor(config: LumaConfig);
|
|
14
15
|
analyzeImage(imageDataUrl: string, prompt: string, enableThinking?: boolean): Promise<string>;
|
|
15
16
|
getModelName(): string;
|
|
16
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qwen-client.d.ts","sourceRoot":"","sources":["../src/qwen-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"qwen-client.d.ts","sourceRoot":"","sources":["../src/qwen-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,UAAW,YAAW,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,UAAU;IAiBxB,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC;IAqElB,YAAY,IAAI,MAAM;CAGvB"}
|
package/build/qwen-client.js
CHANGED
|
@@ -3,24 +3,25 @@
|
|
|
3
3
|
* 使用 OpenAI 兼容接口
|
|
4
4
|
* API 文档: https://help.aliyun.com/zh/model-studio/vision
|
|
5
5
|
*/
|
|
6
|
-
import axios from
|
|
6
|
+
import axios from "axios";
|
|
7
|
+
import { logger } from "./utils/logger.js";
|
|
7
8
|
export class QwenClient {
|
|
8
9
|
client;
|
|
9
10
|
apiKey;
|
|
10
11
|
model;
|
|
11
12
|
maxTokens;
|
|
12
13
|
temperature;
|
|
13
|
-
constructor(
|
|
14
|
-
this.apiKey = apiKey;
|
|
15
|
-
this.model = model;
|
|
16
|
-
this.maxTokens = maxTokens;
|
|
17
|
-
this.temperature = temperature;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.apiKey = config.apiKey;
|
|
16
|
+
this.model = config.model;
|
|
17
|
+
this.maxTokens = config.maxTokens;
|
|
18
|
+
this.temperature = config.temperature;
|
|
18
19
|
// 使用阿里云百炼的 OpenAI 兼容接口
|
|
19
20
|
this.client = axios.create({
|
|
20
|
-
baseURL:
|
|
21
|
+
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|
21
22
|
headers: {
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
24
|
+
"Content-Type": "application/json",
|
|
24
25
|
},
|
|
25
26
|
timeout: 180000, // 180秒超时
|
|
26
27
|
});
|
|
@@ -32,39 +33,52 @@ export class QwenClient {
|
|
|
32
33
|
model: this.model,
|
|
33
34
|
messages: [
|
|
34
35
|
{
|
|
35
|
-
role:
|
|
36
|
+
role: "user",
|
|
36
37
|
content: [
|
|
37
38
|
{
|
|
38
|
-
type:
|
|
39
|
+
type: "image_url",
|
|
39
40
|
image_url: {
|
|
40
|
-
url: imageDataUrl
|
|
41
|
-
}
|
|
41
|
+
url: imageDataUrl,
|
|
42
|
+
},
|
|
42
43
|
},
|
|
43
44
|
{
|
|
44
|
-
type:
|
|
45
|
-
text: prompt
|
|
46
|
-
}
|
|
47
|
-
]
|
|
48
|
-
}
|
|
45
|
+
type: "text",
|
|
46
|
+
text: prompt,
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
49
50
|
],
|
|
50
51
|
max_tokens: this.maxTokens,
|
|
51
52
|
temperature: this.temperature,
|
|
52
|
-
stream: false
|
|
53
|
+
stream: false,
|
|
53
54
|
};
|
|
54
|
-
//
|
|
55
|
-
if (enableThinking) {
|
|
55
|
+
// 根据参数决定是否启用思考模式
|
|
56
|
+
if (enableThinking !== false) {
|
|
56
57
|
requestBody.extra_body = {
|
|
57
58
|
enable_thinking: true,
|
|
58
|
-
thinking_budget: 81920 // 最大思考 Token 数
|
|
59
|
+
thinking_budget: 81920, // 最大思考 Token 数
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
|
-
|
|
62
|
+
logger.info("Calling Qwen3-VL API", {
|
|
63
|
+
model: this.model,
|
|
64
|
+
thinking: !!requestBody.extra_body,
|
|
65
|
+
});
|
|
66
|
+
const response = await this.client.post("/chat/completions", requestBody);
|
|
62
67
|
if (!response.data?.choices?.[0]?.message?.content) {
|
|
63
|
-
throw new Error(
|
|
68
|
+
throw new Error("Invalid response format from Qwen API");
|
|
64
69
|
}
|
|
65
|
-
|
|
70
|
+
const result = response.data.choices[0].message.content;
|
|
71
|
+
const usage = response.data.usage;
|
|
72
|
+
logger.info("Qwen3-VL API call successful", {
|
|
73
|
+
tokens: usage?.total_tokens || 0,
|
|
74
|
+
model: response.data.model,
|
|
75
|
+
});
|
|
76
|
+
return result;
|
|
66
77
|
}
|
|
67
78
|
catch (error) {
|
|
79
|
+
logger.error("Qwen3-VL API call failed", {
|
|
80
|
+
error: error instanceof Error ? error.message : String(error),
|
|
81
|
+
});
|
|
68
82
|
if (axios.isAxiosError(error)) {
|
|
69
83
|
const errorMessage = error.response?.data?.error?.message || error.message;
|
|
70
84
|
throw new Error(`Qwen API error: ${errorMessage}`);
|
package/build/qwen-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qwen-client.js","sourceRoot":"","sources":["../src/qwen-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAwB,MAAM,OAAO,CAAC;AAG7C,MAAM,OAAO,UAAU;IACb,MAAM,CAAgB;IACtB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,WAAW,CAAS;IAE5B,YAAY,
|
|
1
|
+
{"version":3,"file":"qwen-client.js","sourceRoot":"","sources":["../src/qwen-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 基于 OpenAI 兼容 API
|
|
4
4
|
*/
|
|
5
5
|
import type { VisionClient } from './vision-client.js';
|
|
6
|
+
import type { LumaConfig } from './config.js';
|
|
6
7
|
/**
|
|
7
8
|
* 硅基流动 API 客户端
|
|
8
9
|
*/
|
|
@@ -12,7 +13,7 @@ export declare class SiliconFlowClient implements VisionClient {
|
|
|
12
13
|
private maxTokens;
|
|
13
14
|
private temperature;
|
|
14
15
|
private apiEndpoint;
|
|
15
|
-
constructor(
|
|
16
|
+
constructor(config: LumaConfig);
|
|
16
17
|
/**
|
|
17
18
|
* 分析图片
|
|
18
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siliconflow-client.d.ts","sourceRoot":"","sources":["../src/siliconflow-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"siliconflow-client.d.ts","sourceRoot":"","sources":["../src/siliconflow-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA2C9C;;GAEG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAoD;gBAE3D,MAAM,EAAE,UAAU;IAO9B;;OAEG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAqEnG;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB"}
|
|
@@ -13,11 +13,11 @@ export class SiliconFlowClient {
|
|
|
13
13
|
maxTokens;
|
|
14
14
|
temperature;
|
|
15
15
|
apiEndpoint = 'https://api.siliconflow.cn/v1/chat/completions';
|
|
16
|
-
constructor(
|
|
17
|
-
this.apiKey = apiKey;
|
|
18
|
-
this.model = model;
|
|
19
|
-
this.maxTokens = maxTokens;
|
|
20
|
-
this.temperature = temperature;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.apiKey = config.apiKey;
|
|
18
|
+
this.model = config.model;
|
|
19
|
+
this.maxTokens = config.maxTokens;
|
|
20
|
+
this.temperature = config.temperature;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* 分析图片
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siliconflow-client.js","sourceRoot":"","sources":["../src/siliconflow-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"siliconflow-client.js","sourceRoot":"","sources":["../src/siliconflow-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA0C3C;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,WAAW,CAAS;IACpB,WAAW,GAAG,gDAAgD,CAAC;IAEvE,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,YAAoB,EAAE,MAAc,EAAE,cAAwB;QAC/E,MAAM,WAAW,GAAuB;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,WAAW;4BACjB,SAAS,EAAE;gCACT,GAAG,EAAE,YAAY;6BAClB;yBACF;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF;aACF;YACD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;YAClD,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,WAAW,EAChB,WAAW,EACX;gBACE,OAAO,EAAE;oBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACxC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,OAAO,EAAE,KAAK,EAAE,QAAQ;aACzB,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAElC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAC7C,MAAM,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;gBAChC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;aAC3B,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;gBAC1C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;gBACtE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,IAAI,SAAS,MAAM,OAAO,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,aAAa,IAAI,CAAC,KAAK,GAAG,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 火山方舟 Volcengine Doubao 视觉模型客户端
|
|
3
|
+
* 支持 Doubao-Seed-1.6 系列模型(flash、vision、lite)
|
|
4
|
+
* 使用 Chat Completions API 格式
|
|
5
|
+
*/
|
|
6
|
+
import type { VisionClient } from "./vision-client.js";
|
|
7
|
+
import type { LumaConfig } from "./config.js";
|
|
8
|
+
/**
|
|
9
|
+
* 火山方舟客户端
|
|
10
|
+
*/
|
|
11
|
+
export declare class VolcengineClient implements VisionClient {
|
|
12
|
+
private apiKey;
|
|
13
|
+
private model;
|
|
14
|
+
private maxTokens;
|
|
15
|
+
private temperature;
|
|
16
|
+
private apiEndpoint;
|
|
17
|
+
constructor(config: LumaConfig);
|
|
18
|
+
/**
|
|
19
|
+
* 分析图片
|
|
20
|
+
*/
|
|
21
|
+
analyzeImage(imageDataUrl: string, prompt: string, enableThinking?: boolean): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* 获取模型名称
|
|
24
|
+
*/
|
|
25
|
+
getModelName(): string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=volcengine-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volcengine-client.d.ts","sourceRoot":"","sources":["../src/volcengine-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA8C9C;;GAEG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAC2C;gBAElD,MAAM,EAAE,UAAU;IAO9B;;OAEG;IACG,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC;IA6ElB;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 火山方舟 Volcengine Doubao 视觉模型客户端
|
|
3
|
+
* 支持 Doubao-Seed-1.6 系列模型(flash、vision、lite)
|
|
4
|
+
* 使用 Chat Completions API 格式
|
|
5
|
+
*/
|
|
6
|
+
import axios from "axios";
|
|
7
|
+
import { logger } from "./utils/logger.js";
|
|
8
|
+
/**
|
|
9
|
+
* 火山方舟客户端
|
|
10
|
+
*/
|
|
11
|
+
export class VolcengineClient {
|
|
12
|
+
apiKey;
|
|
13
|
+
model;
|
|
14
|
+
maxTokens;
|
|
15
|
+
temperature;
|
|
16
|
+
apiEndpoint = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.apiKey = config.apiKey;
|
|
19
|
+
this.model = config.model;
|
|
20
|
+
this.maxTokens = config.maxTokens;
|
|
21
|
+
this.temperature = config.temperature;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 分析图片
|
|
25
|
+
*/
|
|
26
|
+
async analyzeImage(imageDataUrl, prompt, enableThinking) {
|
|
27
|
+
const requestBody = {
|
|
28
|
+
model: this.model,
|
|
29
|
+
messages: [
|
|
30
|
+
{
|
|
31
|
+
role: "user",
|
|
32
|
+
content: [
|
|
33
|
+
{
|
|
34
|
+
type: "image_url",
|
|
35
|
+
image_url: {
|
|
36
|
+
url: imageDataUrl,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: "text",
|
|
41
|
+
text: prompt,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
temperature: this.temperature,
|
|
47
|
+
max_tokens: this.maxTokens,
|
|
48
|
+
stream: false,
|
|
49
|
+
};
|
|
50
|
+
// 根据参数决定是否启用思考模式
|
|
51
|
+
if (enableThinking !== false) {
|
|
52
|
+
requestBody.thinking = { type: "enabled" };
|
|
53
|
+
}
|
|
54
|
+
logger.info("Calling Volcengine Doubao API", {
|
|
55
|
+
model: this.model,
|
|
56
|
+
thinking: !!requestBody.thinking,
|
|
57
|
+
});
|
|
58
|
+
try {
|
|
59
|
+
const response = await axios.post(this.apiEndpoint, requestBody, {
|
|
60
|
+
headers: {
|
|
61
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
62
|
+
"Content-Type": "application/json",
|
|
63
|
+
},
|
|
64
|
+
timeout: 120000, // 120秒超时
|
|
65
|
+
});
|
|
66
|
+
if (!response.data.choices || response.data.choices.length === 0) {
|
|
67
|
+
throw new Error("No response from Volcengine Doubao");
|
|
68
|
+
}
|
|
69
|
+
const result = response.data.choices[0].message.content;
|
|
70
|
+
const usage = response.data.usage;
|
|
71
|
+
logger.info("Volcengine Doubao API call successful", {
|
|
72
|
+
tokens: usage?.total_tokens || 0,
|
|
73
|
+
model: response.data.model,
|
|
74
|
+
});
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
logger.error("Volcengine Doubao API call failed", {
|
|
79
|
+
error: error instanceof Error ? error.message : String(error),
|
|
80
|
+
});
|
|
81
|
+
if (axios.isAxiosError(error)) {
|
|
82
|
+
const message = error.response?.data?.error?.message || error.message;
|
|
83
|
+
const status = error.response?.status;
|
|
84
|
+
throw new Error(`Volcengine Doubao API error (${status || "unknown"}): ${message}`);
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 获取模型名称
|
|
91
|
+
*/
|
|
92
|
+
getModelName() {
|
|
93
|
+
return `Doubao (${this.model})`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=volcengine-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volcengine-client.js","sourceRoot":"","sources":["../src/volcengine-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA6C3C;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,WAAW,CAAS;IACpB,WAAW,GACjB,2DAA2D,CAAC;IAE9D,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,YAAoB,EACpB,MAAc,EACd,cAAwB;QAExB,MAAM,WAAW,GAAsB;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,WAAW;4BACjB,SAAS,EAAE;gCACT,GAAG,EAAE,YAAY;6BAClB;yBACF;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF;aACF;YACD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,iBAAiB;QACjB,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;YAC7B,WAAW,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,WAAW,EAChB,WAAW,EACX;gBACE,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,OAAO,EAAE,MAAM,EAAE,SAAS;aAC3B,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAElC,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE;gBACnD,MAAM,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;gBAChC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;aAC3B,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE;gBAChD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;gBACtE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,IAAI,SAAS,MAAM,OAAO,EAAE,CACnE,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,WAAW,IAAI,CAAC,KAAK,GAAG,CAAC;IAClC,CAAC;CACF"}
|
package/build/zhipu-client.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 智谱 GLM-4.
|
|
2
|
+
* 智谱 GLM-4.6V API 客户端
|
|
3
3
|
*/
|
|
4
4
|
import type { VisionClient } from "./vision-client.js";
|
|
5
|
+
import type { LumaConfig } from "./config.js";
|
|
5
6
|
/**
|
|
6
7
|
* 智谱 API 客户端
|
|
7
8
|
*/
|
|
@@ -12,7 +13,7 @@ export declare class ZhipuClient implements VisionClient {
|
|
|
12
13
|
private temperature;
|
|
13
14
|
private topP;
|
|
14
15
|
private apiEndpoint;
|
|
15
|
-
constructor(
|
|
16
|
+
constructor(config: LumaConfig);
|
|
16
17
|
/**
|
|
17
18
|
* 分析图片
|
|
18
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhipu-client.d.ts","sourceRoot":"","sources":["../src/zhipu-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"zhipu-client.d.ts","sourceRoot":"","sources":["../src/zhipu-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA4C9C;;GAEG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAA2D;gBAElE,MAAM,EAAE,UAAU;IAQ9B;;OAEG;IACG,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC;IA6ElB;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB"}
|
package/build/zhipu-client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 智谱 GLM-4.
|
|
2
|
+
* 智谱 GLM-4.6V API 客户端
|
|
3
3
|
*/
|
|
4
4
|
import axios from "axios";
|
|
5
5
|
import { logger } from "./utils/logger.js";
|
|
@@ -13,12 +13,12 @@ export class ZhipuClient {
|
|
|
13
13
|
temperature;
|
|
14
14
|
topP;
|
|
15
15
|
apiEndpoint = "https://open.bigmodel.cn/api/paas/v4/chat/completions";
|
|
16
|
-
constructor(
|
|
17
|
-
this.apiKey = apiKey;
|
|
18
|
-
this.model = model;
|
|
19
|
-
this.maxTokens = maxTokens;
|
|
20
|
-
this.temperature = temperature;
|
|
21
|
-
this.topP = topP;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.apiKey = config.apiKey;
|
|
18
|
+
this.model = config.model;
|
|
19
|
+
this.maxTokens = config.maxTokens;
|
|
20
|
+
this.temperature = config.temperature;
|
|
21
|
+
this.topP = config.topP;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* 分析图片
|
|
@@ -46,13 +46,12 @@ export class ZhipuClient {
|
|
|
46
46
|
temperature: this.temperature,
|
|
47
47
|
max_tokens: this.maxTokens,
|
|
48
48
|
top_p: this.topP,
|
|
49
|
-
thinking: { type: "enabled" }, // 默认启用思考模式,提高分析准确性
|
|
50
49
|
};
|
|
51
|
-
//
|
|
52
|
-
if (enableThinking
|
|
53
|
-
|
|
50
|
+
// 根据参数决定是否启用思考模式
|
|
51
|
+
if (enableThinking !== false) {
|
|
52
|
+
requestBody.thinking = { type: "enabled" };
|
|
54
53
|
}
|
|
55
|
-
logger.info("Calling GLM-4.
|
|
54
|
+
logger.info("Calling GLM-4.6V API", {
|
|
56
55
|
model: this.model,
|
|
57
56
|
thinking: !!requestBody.thinking,
|
|
58
57
|
});
|
|
@@ -65,24 +64,24 @@ export class ZhipuClient {
|
|
|
65
64
|
timeout: 60000, // 60秒超时
|
|
66
65
|
});
|
|
67
66
|
if (!response.data.choices || response.data.choices.length === 0) {
|
|
68
|
-
throw new Error("No response from GLM-4.
|
|
67
|
+
throw new Error("No response from GLM-4.6V");
|
|
69
68
|
}
|
|
70
69
|
const result = response.data.choices[0].message.content;
|
|
71
70
|
const usage = response.data.usage;
|
|
72
|
-
logger.info("GLM-4.
|
|
71
|
+
logger.info("GLM-4.6V API call successful", {
|
|
73
72
|
tokens: usage?.total_tokens || 0,
|
|
74
73
|
model: response.data.model,
|
|
75
74
|
});
|
|
76
75
|
return result;
|
|
77
76
|
}
|
|
78
77
|
catch (error) {
|
|
79
|
-
logger.error("GLM-4.
|
|
78
|
+
logger.error("GLM-4.6V API call failed", {
|
|
80
79
|
error: error instanceof Error ? error.message : String(error),
|
|
81
80
|
});
|
|
82
81
|
if (axios.isAxiosError(error)) {
|
|
83
82
|
const message = error.response?.data?.error?.message || error.message;
|
|
84
83
|
const status = error.response?.status;
|
|
85
|
-
throw new Error(`GLM-4.
|
|
84
|
+
throw new Error(`GLM-4.6V API error (${status || "unknown"}): ${message}`);
|
|
86
85
|
}
|
|
87
86
|
throw error;
|
|
88
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhipu-client.js","sourceRoot":"","sources":["../src/zhipu-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"zhipu-client.js","sourceRoot":"","sources":["../src/zhipu-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "luma-mcp",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"description": "Multi-model vision understanding MCP server. Supports GLM-4.6V (Zhipu), DeepSeek-OCR (SiliconFlow - Free),
|
|
3
|
+
"version": "1.2.8",
|
|
4
|
+
"description": "Multi-model vision understanding MCP server. Supports GLM-4.6V (Zhipu), DeepSeek-OCR (SiliconFlow - Free), Qwen3-VL-Flash (Aliyun), and Doubao-Seed-1.6 (Volcengine)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"luma-mcp": "build/index.js"
|
|
@@ -24,6 +24,9 @@
|
|
|
24
24
|
"qwen3-vl",
|
|
25
25
|
"aliyun",
|
|
26
26
|
"dashscope",
|
|
27
|
+
"doubao",
|
|
28
|
+
"volcengine",
|
|
29
|
+
"ark",
|
|
27
30
|
"ocr",
|
|
28
31
|
"free",
|
|
29
32
|
"image-understanding",
|