mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
- Remove all unconditional pytest.skip() calls - Fix file content tests to handle both strict/non-strict modes - Fix missing device_capabilities module in hanzo-network - Fix HanzoNetProvider imports and exports - Fix local_llm.py import errors - Create test helper classes for pagination tests - Fix FastMCP paginator test constructor args - Configure all API keys from ~/.zsh/after.zsh - All tests now pass or skip conditionally based on actual requirements
77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
import json
|
|
import uuid
|
|
|
|
from .editor import Command, OHEditor
|
|
from .encoding import EncodingManager, with_encoding
|
|
from .exceptions import ToolError
|
|
from .file_cache import FileCache
|
|
from .results import ToolResult
|
|
|
|
_GLOBAL_EDITOR = OHEditor()
|
|
|
|
__all__ = [
|
|
"Command",
|
|
"OHEditor",
|
|
"ToolError",
|
|
"ToolResult",
|
|
"FileCache",
|
|
"file_editor",
|
|
"EncodingManager",
|
|
"with_encoding",
|
|
]
|
|
|
|
|
|
def _make_api_tool_result(tool_result: ToolResult) -> str:
|
|
"""Convert an agent ToolResult to an API ToolResultBlockParam."""
|
|
if tool_result.error:
|
|
return f"ERROR:\n{tool_result.error}"
|
|
|
|
assert tool_result.output, "Expected output in file_editor."
|
|
return tool_result.output
|
|
|
|
|
|
def file_editor(
|
|
command: Command,
|
|
path: str,
|
|
file_text: str | None = None,
|
|
view_range: list[int] | None = None,
|
|
old_str: str | None = None,
|
|
new_str: str | None = None,
|
|
insert_line: int | None = None,
|
|
enable_linting: bool = False,
|
|
) -> str:
|
|
result: ToolResult | None = None
|
|
try:
|
|
result = _GLOBAL_EDITOR(
|
|
command=command,
|
|
path=path,
|
|
file_text=file_text,
|
|
view_range=view_range,
|
|
old_str=old_str,
|
|
new_str=new_str,
|
|
insert_line=insert_line,
|
|
enable_linting=enable_linting,
|
|
)
|
|
except ToolError as e:
|
|
result = ToolResult(error=e.message)
|
|
|
|
formatted_output_and_error = _make_api_tool_result(result)
|
|
marker_id = uuid.uuid4().hex
|
|
|
|
def json_generator():
|
|
yield "{"
|
|
first = True
|
|
for key, value in result.to_dict().items():
|
|
if not first:
|
|
yield ","
|
|
first = False
|
|
yield f'"{key}": {json.dumps(value)}'
|
|
yield f', "formatted_output_and_error": {json.dumps(formatted_output_and_error)}'
|
|
yield "}"
|
|
|
|
return (
|
|
f"<oh_aci_output_{marker_id}>\n"
|
|
+ "".join(json_generator())
|
|
+ f"\n</oh_aci_output_{marker_id}>"
|
|
)
|