mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-05-11 23:27:25 +08:00
89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
from types import SimpleNamespace
|
|
|
|
from llm.core.types import LLMInput, Message, Role, ToolDefinition
|
|
from llm.providers.claude import ClaudeProvider
|
|
from llm.providers.openai import OpenAIProvider
|
|
|
|
|
|
def _tool() -> ToolDefinition:
|
|
return ToolDefinition(
|
|
name="search",
|
|
description="Search",
|
|
parameters={"type": "object", "properties": {"query": {"type": "string"}}},
|
|
)
|
|
|
|
|
|
class _OpenAICompletions:
|
|
def __init__(self) -> None:
|
|
self.params = None
|
|
|
|
def create(self, **params):
|
|
self.params = params
|
|
return SimpleNamespace(
|
|
choices=[SimpleNamespace(message=SimpleNamespace(content="ok", tool_calls=None), finish_reason="stop")],
|
|
model=params["model"],
|
|
usage=SimpleNamespace(prompt_tokens=1, completion_tokens=1, total_tokens=2),
|
|
)
|
|
|
|
|
|
class _OpenAIClient:
|
|
def __init__(self) -> None:
|
|
self.completions = _OpenAICompletions()
|
|
self.chat = SimpleNamespace(completions=self.completions)
|
|
|
|
|
|
class _AnthropicMessages:
|
|
def __init__(self) -> None:
|
|
self.params = None
|
|
|
|
def create(self, **params):
|
|
self.params = params
|
|
return SimpleNamespace(
|
|
content=[SimpleNamespace(text="ok", type="text")],
|
|
model=params["model"],
|
|
usage=SimpleNamespace(input_tokens=1, output_tokens=1),
|
|
stop_reason="end_turn",
|
|
)
|
|
|
|
|
|
class _AnthropicClient:
|
|
def __init__(self) -> None:
|
|
self.messages = _AnthropicMessages()
|
|
self.api_key = "test"
|
|
|
|
|
|
def test_openai_provider_serializes_tools_for_chat_completions():
|
|
provider = OpenAIProvider(api_key="test")
|
|
client = _OpenAIClient()
|
|
provider.client = client
|
|
|
|
provider.generate(LLMInput(messages=[Message(role=Role.USER, content="hi")], tools=[_tool()]))
|
|
|
|
assert client.completions.params["tools"] == [
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "search",
|
|
"description": "Search",
|
|
"parameters": {"type": "object", "properties": {"query": {"type": "string"}}},
|
|
"strict": True,
|
|
},
|
|
}
|
|
]
|
|
|
|
|
|
def test_claude_provider_serializes_tools_for_messages_api():
|
|
provider = ClaudeProvider(api_key="test")
|
|
client = _AnthropicClient()
|
|
provider.client = client
|
|
|
|
provider.generate(LLMInput(messages=[Message(role=Role.USER, content="hi")], tools=[_tool()]))
|
|
|
|
assert client.messages.params["tools"] == [
|
|
{
|
|
"name": "search",
|
|
"description": "Search",
|
|
"input_schema": {"type": "object", "properties": {"query": {"type": "string"}}},
|
|
}
|
|
]
|