新增 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: 类型定义
59 lines
1.9 KiB
Python
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
|