ForcePilot/backend/package/yuxi/channel/extensions/mattermost/model_picker.py
Kris ebab14660a feat(channel): 添加 Mattermost 渠道扩展
新增 Mattermost 渠道扩展,支持在 Yuxi 平台中集成 Mattermost 团队协作平台。

包含以下功能模块:
- client: Mattermost API 客户端封装
- config: 渠道配置管理
- gateway: SSE/WebSocket 网关接入
- websocket: WebSocket 实时连接
- outbound: 外发消息管理
- streaming: 流式消息处理
- pairing: 用户配对与绑定
- security: 安全校验
- dedup: 消息去重
- monitor: 渠道状态监控
- status: 会话状态管理
- session: 会话管理
- interactions: 交互处理
- slash_commands: 斜杠指令
- actions: 动作处理
- approval: 审批流程
- delivery: 消息送达确认
- directory: 目录管理
- threading: 线程管理
- gating: 门控管理
- reconnect: 重连机制
- reactions: 表情反应
- media: 媒体资源处理
- model_picker: 模型选择
- types: 类型定义
2026-05-21 11:22:43 +08:00

59 lines
1.9 KiB
Python

from __future__ import annotations
import logging
logger = logging.getLogger(__name__)
DEFAULT_MODEL_OPTIONS = [
{"id": "gpt-4o", "name": "GPT-4o", "provider": "openai"},
{"id": "gpt-4-turbo", "name": "GPT-4 Turbo", "provider": "openai"},
{"id": "claude-3-opus", "name": "Claude 3 Opus", "provider": "anthropic"},
{"id": "claude-3-sonnet", "name": "Claude 3 Sonnet", "provider": "anthropic"},
{"id": "gemini-1.5-pro", "name": "Gemini 1.5 Pro", "provider": "google"},
]
class ModelPickerManager:
def get_available_models(self) -> list[dict]:
return DEFAULT_MODEL_OPTIONS
def get_model_info(self, model_id: str) -> dict | None:
for model in DEFAULT_MODEL_OPTIONS:
if model["id"] == model_id:
return model
return None
def build_picker_message(self, models: list[dict] | None = None) -> str:
if models is None:
models = DEFAULT_MODEL_OPTIONS
lines = ["**Available Models:**"]
for i, model in enumerate(models, 1):
lines.append(f"{i}. **{model['name']}** (`{model['id']}`) — {model['provider']}")
return "\n".join(lines)
def build_picker_buttons(
self,
models: list[dict] | None = None,
channel_id: str = "",
) -> list[dict]:
if models is None:
models = DEFAULT_MODEL_OPTIONS
buttons = []
for model in models:
buttons.append({
"id": f"select_model_{model['id']}",
"text": model["name"],
"name": model["name"],
"style": "default",
"context": {
"action": "select_model",
"model_id": model["id"],
"provider": model["provider"],
"__openclaw_channel_id": channel_id,
},
})
return buttons