Skip to content

Commit ba63eff

Browse files
committed
feat: 重构图像模型管理架构并优化用户界面
## 核心改进 ### 🏗️ 架构重构 - 实现ImageModelManager组件分离设计,关注点明确分离 - 重构ModelManager.vue为统一模型管理入口,支持文本/图像双模式 - 采用组件复用和扩展性设计,易于添加新模型类型 ### 🎨 界面优化 - 摒弃5步导航式编辑,改为一体化界面设计 - 优化ImageModelEditModal为单页滚动布局,提升操作效率 - 统一文本和图像模型管理的交互体验和视觉风格 ### 🔌 适配器扩展 - 新增OpenRouter和SiliconFlow图像适配器支持 - 完善AbstractImageProviderAdapter抽象基类设计 - 优化适配器注册表和动态模型发现机制 ### 💻 类型系统 - 完善ImageModelConfig和相关类型定义 - 增强TypeScript类型安全和智能提示 - 优化服务层接口设计和依赖注入架构 ### 🧪 测试覆盖 - 新增图像适配器单元测试和集成测试 - 添加E2E验收测试保证功能完整性 - 增强连接测试和参数验证测试覆盖 ### 📚 文档完善 - 新增图像模型管理架构设计文档 - 添加一体化界面改进方案文档 - 更新项目结构和开发指南 ## 技术特点 - **SOLID原则**:清晰的单一职责和开闭扩展设计 - **组合模式**:ImageModelManager + ModelManager.vue 组合架构 - **响应式设计**:基于Vue 3 Composition API的状态管理 - **依赖注入**:松耦合的服务架构和组件通信 这次重构显著提升了图像模型管理的用户体验和代码可维护性, 为后续音频、视频等多模态功能扩展奠定了坚实基础。
1 parent 2ffb755 commit ba63eff

File tree

76 files changed

+11346
-2941
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+11346
-2941
lines changed

docker-compose.dev.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: '3.8'
2-
31
services:
42
prompt-optimizer:
53
# 开发模式:从源码构建

docker-compose.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: '3.8'
2-
31
services:
42
prompt-optimizer:
53
image: linshen/prompt-optimizer:latest

docker/generate-config.sh

Lines changed: 29 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,59 +5,39 @@ CONFIG_FILE="/usr/share/nginx/html/config.js"
55

66
echo "开始生成运行时配置文件..."
77

8-
# 扫描动态自定义模型环境变量
9-
echo "扫描动态自定义模型环境变量..."
10-
DYNAMIC_CONFIG=""
11-
DYNAMIC_COUNT=0
12-
13-
# 扫描所有VITE_CUSTOM_API_*_suffix模式的环境变量
14-
for var in $(env | grep '^VITE_CUSTOM_API_.*_[^=]*=' | cut -d= -f1); do
15-
# 验证环境变量名格式
16-
if echo "$var" | grep -qE '^VITE_CUSTOM_API_(KEY|BASE_URL|MODEL)_[a-zA-Z0-9_-]+$'; then
17-
# 提取配置类型和后缀
18-
config_type=$(echo "$var" | sed 's/^VITE_CUSTOM_API_\([^_]*\)_.*$/\1/')
19-
suffix=$(echo "$var" | sed 's/^VITE_CUSTOM_API_[^_]*_\(.*\)$/\1/')
20-
21-
# 获取环境变量值(安全方式)
22-
value=$(printenv "$var" 2>/dev/null)
23-
24-
if [ -n "$value" ]; then
25-
# 移除VITE_前缀生成运行时配置键名
26-
runtime_key=$(echo "$var" | sed 's/^VITE_//')
27-
28-
# 简单有效的转义:只转义必要的字符
29-
# - 反斜杠、双引号
30-
escaped_value=$(printf '%s' "$value" | sed 's/\\/\\\\/g; s/"/\\"/g')
31-
32-
# 添加到动态配置中
33-
if [ -n "$DYNAMIC_CONFIG" ]; then
34-
DYNAMIC_CONFIG="$DYNAMIC_CONFIG,"
35-
fi
36-
DYNAMIC_CONFIG="$DYNAMIC_CONFIG
37-
$runtime_key: \"$escaped_value\""
38-
39-
DYNAMIC_COUNT=$((DYNAMIC_COUNT + 1))
40-
echo "Found: $runtime_key"
8+
# 构建包含全部 VITE_* 变量的运行时配置(同时注入带前缀与不带前缀的键)
9+
CONFIG_BODY=""
10+
COUNT=0
11+
12+
# 遍历所有以 VITE_ 开头的环境变量
13+
for var in $(env | grep '^VITE_[A-Za-z0-9_]*=' | cut -d= -f1 | sort); do
14+
value=$(printenv "$var" 2>/dev/null)
15+
if [ -n "$value" ]; then
16+
# 去除 VITE_ 前缀得到无前缀键名
17+
no_prefix_key=$(echo "$var" | sed 's/^VITE_//')
18+
# 简单转义(反斜杠与双引号)
19+
escaped_value=$(printf '%s' "$value" | sed 's/\\/\\\\/g; s/"/\\"/g')
20+
21+
# 追加属性:无前缀副本 与 带前缀副本
22+
if [ -n "$CONFIG_BODY" ]; then
23+
CONFIG_BODY="$CONFIG_BODY,\n"
4124
fi
25+
CONFIG_BODY="$CONFIG_BODY $no_prefix_key: \"$escaped_value\",\n $var: \"$escaped_value\""
26+
27+
COUNT=$((COUNT + 1))
28+
echo "Found VITE var: $var"
4229
fi
4330
done
4431

45-
echo "Found $DYNAMIC_COUNT dynamic custom model configurations"
46-
47-
# 生成配置文件
48-
cat > $CONFIG_FILE << EOF
49-
window.runtime_config = {
50-
OPENAI_API_KEY: "${VITE_OPENAI_API_KEY:-}",
51-
GEMINI_API_KEY: "${VITE_GEMINI_API_KEY:-}",
52-
DEEPSEEK_API_KEY: "${VITE_DEEPSEEK_API_KEY:-}",
53-
ZHIPU_API_KEY: "${VITE_ZHIPU_API_KEY:-}",
54-
SILICONFLOW_API_KEY: "${VITE_SILICONFLOW_API_KEY:-}",
55-
CUSTOM_API_KEY: "${VITE_CUSTOM_API_KEY:-}",
56-
CUSTOM_API_BASE_URL: "${VITE_CUSTOM_API_BASE_URL:-}",
57-
CUSTOM_API_MODEL: "${VITE_CUSTOM_API_MODEL:-}"${DYNAMIC_CONFIG:+,$DYNAMIC_CONFIG}
58-
};
59-
console.log("运行时配置已加载,包含 $DYNAMIC_COUNT 个动态自定义模型");
32+
# 生成配置文件(运行时在浏览器环境可读)
33+
cat > "$CONFIG_FILE" << EOF
34+
// 此文件由容器启动时生成,用于在运行时向前端注入环境变量
35+
// 同时提供带前缀与不带前缀的两个副本,方便不同读取策略
36+
window.runtime_config = Object.assign({}, (window.runtime_config || {}), {
37+
${CONFIG_BODY}
38+
});
39+
console.log("运行时配置已加载,共注入 ${COUNT} 个 VITE_* 变量(双份键)");
6040
EOF
6141

6242
echo "配置文件已生成: $CONFIG_FILE"
63-
echo "动态配置: $DYNAMIC_COUNT"
43+
echo "已注入 VITE_* 变量数量: $COUNT"

docker/nginx.conf

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ server {
6363
proxy_pass http://127.0.0.1:3001;
6464
proxy_http_version 1.1;
6565

66+
# 避免对代理响应再压缩,降低与上游编码的耦合
67+
gzip off;
68+
6669
# 透传关键信息
6770
proxy_set_header X-Real-IP $remote_addr;
6871
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -81,6 +84,9 @@ server {
8184
proxy_request_buffering off;
8285
add_header X-Accel-Buffering no always;
8386

87+
# 禁止压缩,确保SSE/流式稳定
88+
gzip off;
89+
8490
# 透传关键信息
8591
proxy_set_header X-Real-IP $remote_addr;
8692
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -154,4 +160,4 @@ server {
154160
proxy_connect_timeout 60;
155161
proxy_send_timeout 60;
156162
proxy_read_timeout 60;
157-
}
163+
}

0 commit comments

Comments
 (0)