Skip to content

Commit 14867af

Browse files
authored
Fix ipv4 dist_init_addr (#856)
1 parent c77d087 commit 14867af

File tree

7 files changed

+160
-274
lines changed

7 files changed

+160
-274
lines changed

examples/tau-bench/openai_tool_adapter.py

Lines changed: 23 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
from dataclasses import dataclass
44
from typing import Any, Dict, List, Optional
55

6+
from sglang_tool_parser import parse_tools
67
from tau_bench.agents.tool_calling_agent import RESPOND_ACTION_NAME
78
from tau_bench.types import Action
89

9-
from sglang_tool_parser import parse_tools
10-
1110
# Set up logger for this module
1211
logger = logging.getLogger(__name__)
1312

1413

1514
@dataclass
1615
class OpenAIToolCall:
1716
"""OpenAI format tool call structure"""
17+
1818
id: str
1919
type: str = "function"
2020
function: Dict[str, Any] = None
@@ -23,6 +23,7 @@ class OpenAIToolCall:
2323
@dataclass
2424
class OpenAIAssistantMessage:
2525
"""OpenAI format assistant message structure"""
26+
2627
role: str = "assistant"
2728
content: Optional[str] = None
2829
tool_calls: Optional[List[OpenAIToolCall]] = None
@@ -36,8 +37,7 @@ class OpenAICompatibleToolCallAdapter:
3637
and provides OpenAI format output interface.
3738
"""
3839

39-
def __init__(self, tools_info: List[Dict[str, Any]],
40-
parser_type: str = "qwen25"):
40+
def __init__(self, tools_info: List[Dict[str, Any]], parser_type: str = "qwen25"):
4141
"""
4242
Initialize adapter
4343
@@ -48,10 +48,7 @@ def __init__(self, tools_info: List[Dict[str, Any]],
4848
self.tools_info = tools_info
4949
self.parser_type = parser_type
5050

51-
def parse_response_to_openai_format(
52-
self,
53-
response: str
54-
) -> Dict[str, Any]:
51+
def parse_response_to_openai_format(self, response: str) -> Dict[str, Any]:
5552
"""
5653
Parse sglang response to OpenAI compatible format
5754
@@ -69,33 +66,19 @@ def parse_response_to_openai_format(
6966
parsed = parse_tools(response, self.tools_info, self.parser_type)
7067

7168
# Extract parsing results
72-
normal_text = parsed['normal_text']
73-
calls = parsed['calls']
69+
normal_text = parsed["normal_text"]
70+
calls = parsed["calls"]
7471

7572
# Convert to OpenAI format
76-
openai_message = self._convert_to_openai_message(
77-
normal_text, calls)
73+
openai_message = self._convert_to_openai_message(normal_text, calls)
7874

79-
return {
80-
"openai_message": openai_message,
81-
"parsed_result": parsed,
82-
"success": True
83-
}
75+
return {"openai_message": openai_message, "parsed_result": parsed, "success": True}
8476

8577
except Exception as e:
8678
logger.warning(f"Parsing failed with error: {str(e)}")
87-
return {
88-
"openai_message": None,
89-
"parsed_result": None,
90-
"success": False,
91-
"error": str(e)
92-
}
79+
return {"openai_message": None, "parsed_result": None, "success": False, "error": str(e)}
9380

94-
def _convert_to_openai_message(
95-
self,
96-
normal_text: str,
97-
calls: List[Dict[str, Any]]
98-
) -> OpenAIAssistantMessage:
81+
def _convert_to_openai_message(self, normal_text: str, calls: List[Dict[str, Any]]) -> OpenAIAssistantMessage:
9982
"""
10083
Convert parsing results to OpenAI format assistant message
10184
@@ -108,61 +91,46 @@ def _convert_to_openai_message(
10891
"""
10992
if not calls:
11093
# No tool calls, return plain text response
111-
return OpenAIAssistantMessage(
112-
role="assistant",
113-
content=normal_text,
114-
tool_calls=None
115-
)
94+
return OpenAIAssistantMessage(role="assistant", content=normal_text, tool_calls=None)
11695

11796
# Convert tool calls to OpenAI format
11897
openai_tool_calls = []
11998
for i, call in enumerate(calls):
12099
openai_tool_call = OpenAIToolCall(
121100
id=f"call_{i}_{call.get('name', 'unknown')}",
122101
type="function",
123-
function={
124-
"name": call.get('name', ''),
125-
"arguments": call.get('parameters', '{}')
126-
}
102+
function={"name": call.get("name", ""), "arguments": call.get("parameters", "{}")},
127103
)
128104
openai_tool_calls.append(openai_tool_call)
129105

130106
result = OpenAIAssistantMessage(
131-
role="assistant",
132-
content=normal_text if normal_text.strip() else None,
133-
tool_calls=openai_tool_calls
107+
role="assistant", content=normal_text if normal_text.strip() else None, tool_calls=openai_tool_calls
134108
)
135109
return result
136110

137-
138-
def _call_to_action_sglang(self, calls: List[Any],
139-
text_response: str) -> Action:
111+
def _call_to_action_sglang(self, calls: List[Any], text_response: str) -> Action:
140112
"""
141113
Convert sglang tool calls to Action object
142114
143115
This method replicates the original call_to_action_sglang logic,
144116
ensuring compatibility with existing code.
145117
"""
146118
# Default action if no action found
147-
action = Action(name=RESPOND_ACTION_NAME,
148-
kwargs={"content": text_response})
119+
action = Action(name=RESPOND_ACTION_NAME, kwargs={"content": text_response})
149120

150121
if calls:
151122
if len(calls) > 1:
152123
logger.debug("Multiple tool calls identified, only taking first.")
153124

154125
tool_call = calls[0]
155-
126+
156127
try:
157128
params = json.loads(tool_call["parameters"])
158129

159130
if not isinstance(params, dict):
160131
logger.warning(f"{params} does not follow dict structure for action")
161132
else:
162-
action = Action(
163-
name=tool_call["name"],
164-
kwargs=params
165-
)
133+
action = Action(name=tool_call["name"], kwargs=params)
166134
except json.JSONDecodeError as e:
167135
logger.warning(f"Failed to parse parameters as JSON: {e}")
168136

@@ -180,21 +148,19 @@ def get_openai_tools_format(self) -> List[Dict[str, Any]]:
180148
openai_tool = {
181149
"type": "function",
182150
"function": {
183-
"name": tool['function']['name'],
184-
"description": tool['function']['description'],
185-
"parameters": tool['function']['parameters']
186-
}
151+
"name": tool["function"]["name"],
152+
"description": tool["function"]["description"],
153+
"parameters": tool["function"]["parameters"],
154+
},
187155
}
188156
openai_tools.append(openai_tool)
189157

190158
return openai_tools
191159

192160

193-
194161
# Usage examples and factory functions
195162
def create_openai_adapter(
196-
tools_info: List[Dict[str, Any]],
197-
parser_type: str = "qwen25"
163+
tools_info: List[Dict[str, Any]], parser_type: str = "qwen25"
198164
) -> OpenAICompatibleToolCallAdapter:
199165
"""
200166
Factory function to create OpenAI compatible tool call adapter

examples/tau-bench/sglang_tool_parser.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@
44
from sglang.srt.managers.io_struct import Function, Tool
55

66

7-
def parse_tools(
8-
response: str, tools: List[Dict[str, Any]], parser: str = 'qwen25'
9-
):
7+
def parse_tools(response: str, tools: List[Dict[str, Any]], parser: str = "qwen25"):
108
"""
119
This function mimics the function call parser API from
1210
https://github.com/sgl-project/sglang/blob/main/python/sglang/srt/entrypoints/http_server.py#L952
1311
But running locally
1412
"""
15-
tools_list = [Tool(function=Function(
16-
name=tool['function']['name'],
17-
description=tool['function']['description'],
18-
parameters=tool['function']['parameters']
13+
tools_list = [
14+
Tool(
15+
function=Function(
16+
name=tool["function"]["name"],
17+
description=tool["function"]["description"],
18+
parameters=tool["function"]["parameters"],
1919
),
20-
type=tool['type']
20+
type=tool["type"],
2121
)
2222
for tool in tools
2323
]
@@ -27,7 +27,5 @@ def parse_tools(
2727

2828
return {
2929
"normal_text": normal_text,
30-
"calls": [
31-
call.model_dump() for call in calls
32-
], # Convert pydantic objects to dictionaries
33-
}
30+
"calls": [call.model_dump() for call in calls], # Convert pydantic objects to dictionaries
31+
}

examples/tau-bench/tau1_mock.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def main():
3131
with open(output_path, "w") as f:
3232
for i, task in enumerate(env_instance.tasks):
3333
row = {"index": i, "metadata": task.model_dump()}
34-
f.write(json.dumps(row) + "\n") # <-- one JSON object per line
34+
f.write(json.dumps(row) + "\n") # <-- one JSON object per line
3535
print(f"Saved preprocessed task indices for {env} ({s}) to {output_path}")
3636

3737

0 commit comments

Comments
 (0)