mirror of
https://github.com/langbot-app/LangBot.git
synced 2025-11-25 03:15:06 +08:00
* style: remove necessary imports * style: fix F841 * style: fix F401 * style: fix F811 * style: fix E402 * style: fix E721 * style: fix E722 * style: fix E722 * style: fix F541 * style: ruff format * style: all passed * style: add ruff in deps * style: more ignores in ruff.toml * style: add pre-commit
95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
import typing
|
|
|
|
from .. import operator, entities, errors
|
|
|
|
|
|
@operator.operator_class(
|
|
name='model',
|
|
help='显示和切换模型列表',
|
|
usage='!model\n!model show <模型名>\n!model set <模型名>',
|
|
privilege=2,
|
|
)
|
|
class ModelOperator(operator.CommandOperator):
|
|
"""Model命令"""
|
|
|
|
async def execute(
|
|
self, context: entities.ExecuteContext
|
|
) -> typing.AsyncGenerator[entities.CommandReturn, None]:
|
|
content = '模型列表:\n'
|
|
|
|
model_list = self.ap.model_mgr.model_list
|
|
|
|
for model in model_list:
|
|
content += f'\n名称: {model.name}\n'
|
|
content += f'请求器: {model.requester.name}\n'
|
|
|
|
content += f'\n当前对话使用模型: {context.query.use_model.name}\n'
|
|
content += f'新对话默认使用模型: {self.ap.provider_cfg.data.get("model")}\n'
|
|
|
|
yield entities.CommandReturn(text=content.strip())
|
|
|
|
|
|
@operator.operator_class(
|
|
name='show', help='显示模型详情', privilege=2, parent_class=ModelOperator
|
|
)
|
|
class ModelShowOperator(operator.CommandOperator):
|
|
"""Model Show命令"""
|
|
|
|
async def execute(
|
|
self, context: entities.ExecuteContext
|
|
) -> typing.AsyncGenerator[entities.CommandReturn, None]:
|
|
model_name = context.crt_params[0]
|
|
|
|
model = None
|
|
for _model in self.ap.model_mgr.model_list:
|
|
if model_name == _model.name:
|
|
model = _model
|
|
break
|
|
|
|
if model is None:
|
|
yield entities.CommandReturn(
|
|
error=errors.CommandError(f'未找到模型 {model_name}')
|
|
)
|
|
else:
|
|
content = '模型详情\n'
|
|
content += f'名称: {model.name}\n'
|
|
if model.model_name is not None:
|
|
content += f'请求模型名称: {model.model_name}\n'
|
|
content += f'请求器: {model.requester.name}\n'
|
|
content += f'密钥组: {model.token_mgr.name}\n'
|
|
content += f'支持视觉: {model.vision_supported}\n'
|
|
content += f'支持工具: {model.tool_call_supported}\n'
|
|
|
|
yield entities.CommandReturn(text=content.strip())
|
|
|
|
|
|
@operator.operator_class(
|
|
name='set', help='设置默认使用模型', privilege=2, parent_class=ModelOperator
|
|
)
|
|
class ModelSetOperator(operator.CommandOperator):
|
|
"""Model Set命令"""
|
|
|
|
async def execute(
|
|
self, context: entities.ExecuteContext
|
|
) -> typing.AsyncGenerator[entities.CommandReturn, None]:
|
|
model_name = context.crt_params[0]
|
|
|
|
model = None
|
|
for _model in self.ap.model_mgr.model_list:
|
|
if model_name == _model.name:
|
|
model = _model
|
|
break
|
|
|
|
if model is None:
|
|
yield entities.CommandReturn(
|
|
error=errors.CommandError(f'未找到模型 {model_name}')
|
|
)
|
|
else:
|
|
self.ap.provider_cfg.data['model'] = model_name
|
|
await self.ap.provider_cfg.dump_config()
|
|
yield entities.CommandReturn(
|
|
text=f'已设置当前使用模型为 {model_name},重置会话以生效'
|
|
)
|