feat: 添加项目规则、环境配置示例及开发文档
This commit is contained in:
135
tests/test_llm.py
Normal file
135
tests/test_llm.py
Normal file
@@ -0,0 +1,135 @@
|
||||
"""LLM 模块测试"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from minenasai.llm.base import Message, Provider, ToolCall, ToolDefinition
|
||||
|
||||
|
||||
class TestProvider:
|
||||
"""Provider 枚举测试"""
|
||||
|
||||
def test_is_overseas(self):
|
||||
"""测试境外服务识别"""
|
||||
assert Provider.ANTHROPIC.is_overseas is True
|
||||
assert Provider.OPENAI.is_overseas is True
|
||||
assert Provider.GEMINI.is_overseas is True
|
||||
|
||||
assert Provider.DEEPSEEK.is_overseas is False
|
||||
assert Provider.ZHIPU.is_overseas is False
|
||||
assert Provider.MINIMAX.is_overseas is False
|
||||
assert Provider.MOONSHOT.is_overseas is False
|
||||
|
||||
def test_display_name(self):
|
||||
"""测试显示名称"""
|
||||
assert "Claude" in Provider.ANTHROPIC.display_name
|
||||
assert "GPT" in Provider.OPENAI.display_name
|
||||
assert "DeepSeek" in Provider.DEEPSEEK.display_name
|
||||
assert "GLM" in Provider.ZHIPU.display_name
|
||||
assert "Kimi" in Provider.MOONSHOT.display_name
|
||||
|
||||
|
||||
class TestMessage:
|
||||
"""消息测试"""
|
||||
|
||||
def test_basic_message(self):
|
||||
"""测试基本消息"""
|
||||
msg = Message(role="user", content="Hello")
|
||||
assert msg.role == "user"
|
||||
assert msg.content == "Hello"
|
||||
assert msg.tool_calls is None
|
||||
|
||||
def test_message_with_tool_call(self):
|
||||
"""测试带工具调用的消息"""
|
||||
tool_call = ToolCall(
|
||||
id="tc_123",
|
||||
name="read_file",
|
||||
arguments={"path": "/test.txt"},
|
||||
)
|
||||
msg = Message(
|
||||
role="assistant",
|
||||
content="Let me read that file.",
|
||||
tool_calls=[tool_call],
|
||||
)
|
||||
assert len(msg.tool_calls) == 1
|
||||
assert msg.tool_calls[0].name == "read_file"
|
||||
|
||||
|
||||
class TestToolDefinition:
|
||||
"""工具定义测试"""
|
||||
|
||||
def test_tool_definition(self):
|
||||
"""测试工具定义"""
|
||||
tool = ToolDefinition(
|
||||
name="read_file",
|
||||
description="Read a file",
|
||||
parameters={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"path": {"type": "string"},
|
||||
},
|
||||
"required": ["path"],
|
||||
},
|
||||
)
|
||||
assert tool.name == "read_file"
|
||||
assert "path" in tool.parameters["properties"]
|
||||
|
||||
|
||||
class TestClientImports:
|
||||
"""客户端导入测试"""
|
||||
|
||||
def test_import_all_clients(self):
|
||||
"""测试导入所有客户端"""
|
||||
from minenasai.llm.clients import (
|
||||
AnthropicClient,
|
||||
DeepSeekClient,
|
||||
GeminiClient,
|
||||
MiniMaxClient,
|
||||
MoonshotClient,
|
||||
OpenAICompatClient,
|
||||
ZhipuClient,
|
||||
)
|
||||
|
||||
assert AnthropicClient.provider == Provider.ANTHROPIC
|
||||
assert OpenAICompatClient.provider == Provider.OPENAI
|
||||
assert DeepSeekClient.provider == Provider.DEEPSEEK
|
||||
assert ZhipuClient.provider == Provider.ZHIPU
|
||||
assert MiniMaxClient.provider == Provider.MINIMAX
|
||||
assert MoonshotClient.provider == Provider.MOONSHOT
|
||||
assert GeminiClient.provider == Provider.GEMINI
|
||||
|
||||
def test_client_models(self):
|
||||
"""测试客户端模型列表"""
|
||||
from minenasai.llm.clients import (
|
||||
AnthropicClient,
|
||||
DeepSeekClient,
|
||||
ZhipuClient,
|
||||
)
|
||||
|
||||
assert "claude-sonnet-4-20250514" in AnthropicClient.MODELS
|
||||
assert "deepseek-chat" in DeepSeekClient.MODELS
|
||||
assert "glm-4-plus" in ZhipuClient.MODELS
|
||||
|
||||
|
||||
class TestLLMManager:
|
||||
"""LLM 管理器测试"""
|
||||
|
||||
def test_import_manager(self):
|
||||
"""测试导入管理器"""
|
||||
from minenasai.llm import LLMManager, get_llm_manager
|
||||
|
||||
manager = get_llm_manager()
|
||||
assert isinstance(manager, LLMManager)
|
||||
|
||||
def test_no_api_keys(self):
|
||||
"""测试无 API Key 时的行为"""
|
||||
from minenasai.llm import LLMManager
|
||||
|
||||
manager = LLMManager()
|
||||
manager.initialize()
|
||||
|
||||
# 没有配置 API Key,应该没有可用的提供商
|
||||
providers = manager.get_available_providers()
|
||||
# 可能为空,取决于环境变量
|
||||
assert isinstance(providers, list)
|
||||
Reference in New Issue
Block a user