forked from Alishahryar1/free-claude-code
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_protocol_model_ownership.py
More file actions
206 lines (181 loc) · 6.57 KB
/
Copy pathtest_protocol_model_ownership.py
File metadata and controls
206 lines (181 loc) · 6.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
"""Protocol models live with the protocol logic that consumes them."""
import subprocess
import sys
from dataclasses import FrozenInstanceError
import pytest
from free_claude_code.core.anthropic import (
MessagesRequest as PublicMessagesRequest,
)
from free_claude_code.core.anthropic import (
MessagesResponse,
TokenCountResponse,
)
from free_claude_code.core.anthropic.models import MessagesRequest
from free_claude_code.core.inference import (
FunctionTool,
InferenceRequest,
MessageItem,
MessageRole,
OpenAIChatExtension,
ReasoningItem,
ReplayArtifact,
ReplayArtifactKind,
ReplayArtifactOrigin,
ReplayAttachment,
TextContent,
ToolCallItem,
ToolCallKind,
ToolResultItem,
inference_request_snapshot,
)
from free_claude_code.core.openai_responses import (
OpenAIResponsesRequest as PublicOpenAIResponsesRequest,
)
from free_claude_code.core.openai_responses.models import OpenAIResponsesRequest
def test_anthropic_request_model_is_core_owned_and_permissive() -> None:
request = MessagesRequest.model_validate(
{
"model": "provider-model",
"messages": [{"role": "user", "content": "hello"}],
"provider_extension": {"enabled": True},
}
)
assert MessagesRequest.__module__ == "free_claude_code.core.anthropic.models"
assert PublicMessagesRequest is MessagesRequest
assert request.model_extra == {"provider_extension": {"enabled": True}}
def test_responses_request_model_is_core_owned_and_permissive() -> None:
request = OpenAIResponsesRequest.model_validate(
{
"model": "provider-model",
"input": "hello",
"provider_extension": {"enabled": True},
}
)
assert (
OpenAIResponsesRequest.__module__
== "free_claude_code.core.openai_responses.models"
)
assert PublicOpenAIResponsesRequest is OpenAIResponsesRequest
assert request.model_extra == {"provider_extension": {"enabled": True}}
def test_anthropic_response_models_are_protocol_owned() -> None:
assert MessagesResponse.__module__ == "free_claude_code.core.anthropic.models"
assert TokenCountResponse.__module__ == "free_claude_code.core.anthropic.models"
def test_wire_request_models_do_not_carry_internal_route_state() -> None:
internal_fields = {
"original_model",
"provider_model",
"resolved_provider_model",
"resolved_reasoning",
}
assert internal_fields.isdisjoint(MessagesRequest.model_fields)
assert internal_fields.isdisjoint(OpenAIResponsesRequest.model_fields)
def test_canonical_request_owns_recursive_copies_and_is_frozen() -> None:
arguments = {"nested": {"value": 1}}
result = {"items": ["first"]}
schema = {"type": "object", "properties": {"value": {"type": "integer"}}}
metadata = {"trace": {"enabled": True}}
extension = {"service": {"tier": "free"}}
request = InferenceRequest(
model="client-model",
items=(
MessageItem("turn_0", MessageRole.USER, (TextContent("Hello"),)),
ToolCallItem(
"turn_1",
"call_1",
ToolCallKind.FUNCTION,
"lookup",
arguments,
),
ToolResultItem("turn_2", "call_1", result),
),
tools=(FunctionTool("lookup", None, schema),),
metadata=metadata,
extensions=(OpenAIChatExtension(extension),),
)
arguments["nested"] = {"value": 2}
result["items"] = ["changed"]
schema["properties"] = {}
metadata["trace"] = {"enabled": False}
extension["service"] = {"tier": "paid"}
call = request.items[1]
tool_result = request.items[2]
assert isinstance(call, ToolCallItem)
assert call.input == {"nested": {"value": 1}}
assert isinstance(tool_result, ToolResultItem)
assert tool_result.content == {"items": ("first",)}
tool = request.tools[0]
assert isinstance(tool, FunctionTool)
assert tool.input_schema["properties"] == {"value": {"type": "integer"}}
assert request.metadata == {"trace": {"enabled": True}}
assert request.openai_chat_extension is not None
assert request.openai_chat_extension.extra_body == {"service": {"tier": "free"}}
field_name = "model"
with pytest.raises(FrozenInstanceError):
setattr(request, field_name, "other-model")
def test_canonical_request_snapshot_contains_structure_but_no_client_payloads() -> None:
request = InferenceRequest(
model="public-model",
items=(
MessageItem(
"turn_0",
MessageRole.USER,
(TextContent("private-prompt"),),
),
ReasoningItem(
"turn_1",
"private-reasoning",
artifacts=(
ReplayArtifact(
origin=ReplayArtifactOrigin.OPENAI,
kind=ReplayArtifactKind.ENCRYPTED_REASONING,
attachment=ReplayAttachment.REASONING,
payload="private-replay",
),
),
),
ToolCallItem(
"turn_1",
"call_1",
ToolCallKind.FUNCTION,
"lookup",
{"secret": "private-tool-arguments"},
),
),
tools=(FunctionTool("lookup", None, {"type": "object"}),),
metadata={"secret": "private-metadata"},
extensions=(OpenAIChatExtension({"secret": "private-extra-body"}),),
)
snapshot = inference_request_snapshot(request)
rendered = repr(snapshot)
assert snapshot["item_count"] == 3
assert snapshot["message_count"] == 2
assert snapshot["tool_count"] == 1
for secret in (
"private-prompt",
"private-reasoning",
"private-replay",
"private-tool-arguments",
"private-metadata",
"private-extra-body",
):
assert secret not in rendered
def test_protocol_facades_are_import_order_independent() -> None:
import_orders = (
(
"free_claude_code.core.anthropic",
"free_claude_code.core.openai_responses",
),
(
"free_claude_code.core.openai_responses",
"free_claude_code.core.anthropic",
),
)
for modules in import_orders:
script = "; ".join(f"import {module}" for module in modules)
completed = subprocess.run(
[sys.executable, "-c", script],
capture_output=True,
check=False,
text=True,
)
assert completed.returncode == 0, completed.stderr