更新函数调用模型,添加同步函数类型支持;重构函数信息获取逻辑;新增示例测试用例
Some checks failed
Deploy VitePress site to Pages / build (push) Failing after 38s
Pre-commit checks / pre-commit (3.11) (push) Successful in 2m40s
Pre-commit checks / pre-commit (3.10) (push) Successful in 3m19s
Pre-commit checks / pre-commit (3.12) (push) Successful in 3m19s
Pre-commit checks / pre-commit (3.13) (push) Successful in 3m23s
Pytest API Testing / Pytest (3.11) (push) Failing after 2m10s
Pytest API Testing / Pytest (3.10) (push) Failing after 2m51s
Pytest API Testing / Pytest (3.12) (push) Failing after 2m46s
Pytest API Testing / Pytest (3.13) (push) Failing after 2m39s

This commit is contained in:
远野千束(神羽) 2024-12-14 19:56:42 +08:00
parent 2229a60a05
commit 52046ba032
5 changed files with 43 additions and 19 deletions

View File

@ -3,7 +3,7 @@ from typing import Any
from pydantic import BaseModel from pydantic import BaseModel
from .typing import ASYNC_FUNCTION_CALL_FUNC from .typing import ASYNC_FUNCTION_CALL_FUNC, FUNCTION_CALL_FUNC
class PluginMetadata(BaseModel): class PluginMetadata(BaseModel):
@ -114,7 +114,7 @@ class FunctionCall(BaseModel):
"""函数描述 这个函数用于获取天气信息""" """函数描述 这个函数用于获取天气信息"""
arguments: dict[str, FunctionCallArgument] arguments: dict[str, FunctionCallArgument]
"""函数参数信息""" """函数参数信息"""
function: ASYNC_FUNCTION_CALL_FUNC function: FUNCTION_CALL_FUNC
"""函数对象""" """函数对象"""
class Config: class Config:

View File

@ -2,17 +2,17 @@
""" """
import inspect import inspect
from typing import Any, Callable, Coroutine, TypeAlias
from nonebot import logger from nonebot import logger
from nonebot_plugin_marshoai.plugin.utils import is_coroutine_callable
from .models import FunctionCall, FunctionCallArgument from .models import FunctionCall, FunctionCallArgument
from .typing import ( from .typing import (
ASYNC_FUNCTION_CALL_FUNC, ASYNC_FUNCTION_CALL_FUNC,
FUNCTION_CALL_FUNC, FUNCTION_CALL_FUNC,
SYNC_FUNCTION_CALL_FUNC, SYNC_FUNCTION_CALL_FUNC,
) )
from .utils import is_coroutine_callable
_loaded_functions: dict[str, FUNCTION_CALL_FUNC] = {} _loaded_functions: dict[str, FUNCTION_CALL_FUNC] = {}
@ -42,21 +42,21 @@ def function_call(*funcs: FUNCTION_CALL_FUNC) -> None:
Returns: Returns:
str: 函数定义信息 str: 函数定义信息
""" """
for func in funcs: # for func in funcs:
function_call = get_function_info(func) # function_call = get_function_info(func)
# TODO: 注册函数 # # TODO: 注册函数
def get_function_info(func: FUNCTION_CALL_FUNC): # def get_function_info(func: FUNCTION_CALL_FUNC) -> FunctionCall:
"""获取函数信息 # """获取函数信息
Args: # Args:
func: 函数对象 # func: 函数对象
Returns: # Returns:
FunctionCall: 函数信息对象模型 # FunctionCall: 函数信息对象模型
""" # """
name = func.__name__ # description = func.__doc__
description = func.__doc__ # # TODO: 获取函数参数信息
logger.info(f"注册函数: {name} {description}") # parameters = {}
# TODO: 获取函数参数信息 # pass

View File

@ -20,7 +20,8 @@ dependencies = [
"pyyaml>=6.0.2", "pyyaml>=6.0.2",
"psutil>=6.1.0", "psutil>=6.1.0",
"beautifulsoup4>=4.12.3", "beautifulsoup4>=4.12.3",
"pydantic>=2.10.3" "pydantic>=2.10.3",
"litedoc>=0.1.0.dev20241214103915"
] ]
license = { text = "MIT, Mulan PSL v2" } license = { text = "MIT, Mulan PSL v2" }
@ -65,3 +66,6 @@ dev = [
"black>=24.10.0", "black>=24.10.0",
"litedoc>=0.1.0.dev20240906203154", "litedoc>=0.1.0.dev20240906203154",
] ]
test = [
"nonebug>=0.4.3",
]

20
tests/test_plugin.py Normal file
View File

@ -0,0 +1,20 @@
def example_function(num: int, text: str, is_a: bool) -> str:
"""这是一个示例描述
Args:
num (int): 描述整数
text (str): 文本类型
is_a (bool): 布尔类型
Returns:
str: 消息
"""
return "-"
class TestPlugin:
def test_get_function_info(self):
from nonebot_plugin_marshoai.plugin import get_function_info
func_info = get_function_info(example_function)
print(func_info)