mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-01 17:00:21 +08:00
feat(provider): 增加 Claude Code 适配器、高级配置能力与 OAuth 账号类型统一解析
- 新增 Claude Code provider adapter (context, envelope, plugin, constants) - 扩展 provider admin 路由,支持 Claude Code 高级配置 (CRUD) - 统一 OAuth 账号类型解析逻辑,前后端对齐 - 重构 BatchAssignModelsDialog / ModelMappingDialog,简化组件逻辑 - handler 基类增强: request_builder 支持 Claude Code 信封格式 - CLI stream/sync mixin 适配 Claude Code 流式与同步模式 - 扩展 candidate builder / failover / scheduler 对 Claude Code 的支持 - 前端增加请求时间线可视化 (HorizontalRequestTimeline) - 补充 Claude Code envelope / runtime controls / distributed sessions 等测试 Closes #183 Closes #185 Co-Authored-By: AAEE86 <ppk0227@hotmail.com>
This commit is contained in:
@@ -283,6 +283,40 @@ def test_claude_stream_chunk_and_event_roundtrip_basic() -> None:
|
||||
assert out_events[-1]["type"] == "message_stop"
|
||||
|
||||
|
||||
def test_claude_stream_message_start_preserves_usage() -> None:
|
||||
n = ClaudeNormalizer()
|
||||
state = StreamState(model="claude-3-sonnet")
|
||||
|
||||
chunk = {
|
||||
"type": "message_start",
|
||||
"message": {
|
||||
"id": "msg_usage_start",
|
||||
"type": "message",
|
||||
"role": "assistant",
|
||||
"model": "claude-3-sonnet",
|
||||
"content": [],
|
||||
"usage": {
|
||||
"input_tokens": 9,
|
||||
"output_tokens": 0,
|
||||
"cache_read_input_tokens": 3,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
events = n.stream_chunk_to_internal(chunk, state)
|
||||
assert len(events) == 1
|
||||
start_event = events[0]
|
||||
assert isinstance(start_event, MessageStartEvent)
|
||||
assert start_event.usage is not None
|
||||
assert start_event.usage.input_tokens == 9
|
||||
assert start_event.usage.cache_read_tokens == 3
|
||||
|
||||
out = n.stream_event_from_internal(start_event, StreamState(model="claude-3-sonnet"))
|
||||
assert out[0]["type"] == "message_start"
|
||||
assert out[0]["message"]["usage"]["input_tokens"] == 9
|
||||
assert out[0]["message"]["usage"]["cache_read_input_tokens"] == 3
|
||||
|
||||
|
||||
def test_claude_error_conversion() -> None:
|
||||
n = ClaudeNormalizer()
|
||||
err_resp = {
|
||||
|
||||
Reference in New Issue
Block a user