Upgrade the request body field Function, use the Tool field for function calls.
Browse files- models.py +21 -1
- request.py +19 -4
- utils.py +0 -1
models.py
CHANGED
|
@@ -17,6 +17,15 @@ class Tool(BaseModel):
|
|
| 17 |
type: str
|
| 18 |
function: Function
|
| 19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
class ImageUrl(BaseModel):
|
| 21 |
url: str
|
| 22 |
|
|
@@ -29,7 +38,18 @@ class Message(BaseModel):
|
|
| 29 |
role: str
|
| 30 |
name: Optional[str] = None
|
| 31 |
arguments: Optional[str] = None
|
| 32 |
-
content: Union[str, List[ContentItem]]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
class RequestModel(BaseModel):
|
| 35 |
model: str
|
|
|
|
| 17 |
type: str
|
| 18 |
function: Function
|
| 19 |
|
| 20 |
+
class FunctionCall(BaseModel):
|
| 21 |
+
name: str
|
| 22 |
+
arguments: str
|
| 23 |
+
|
| 24 |
+
class ToolCall(BaseModel):
|
| 25 |
+
id: str
|
| 26 |
+
type: str
|
| 27 |
+
function: FunctionCall
|
| 28 |
+
|
| 29 |
class ImageUrl(BaseModel):
|
| 30 |
url: str
|
| 31 |
|
|
|
|
| 38 |
role: str
|
| 39 |
name: Optional[str] = None
|
| 40 |
arguments: Optional[str] = None
|
| 41 |
+
content: Optional[Union[str, List[ContentItem]]] = None
|
| 42 |
+
tool_calls: Optional[List[ToolCall]] = None
|
| 43 |
+
|
| 44 |
+
class Message(BaseModel):
|
| 45 |
+
role: str
|
| 46 |
+
name: Optional[str] = None
|
| 47 |
+
content: Optional[Union[str, List[ContentItem]]] = None
|
| 48 |
+
tool_calls: Optional[List[ToolCall]] = None
|
| 49 |
+
tool_call_id: Optional[str] = None
|
| 50 |
+
|
| 51 |
+
class Config:
|
| 52 |
+
extra = "allow" # 允许额外的字段
|
| 53 |
|
| 54 |
class RequestModel(BaseModel):
|
| 55 |
model: str
|
request.py
CHANGED
|
@@ -126,7 +126,8 @@ async def get_gpt_payload(request, engine, provider):
|
|
| 126 |
|
| 127 |
messages = []
|
| 128 |
for msg in request.messages:
|
| 129 |
-
|
|
|
|
| 130 |
if isinstance(msg.content, list):
|
| 131 |
content = []
|
| 132 |
for item in msg.content:
|
|
@@ -138,9 +139,23 @@ async def get_gpt_payload(request, engine, provider):
|
|
| 138 |
content.append(image_message)
|
| 139 |
else:
|
| 140 |
content = msg.content
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
else:
|
| 145 |
messages.append({"role": msg.role, "content": content})
|
| 146 |
|
|
|
|
| 126 |
|
| 127 |
messages = []
|
| 128 |
for msg in request.messages:
|
| 129 |
+
tool_calls = None
|
| 130 |
+
tool_call_id = None
|
| 131 |
if isinstance(msg.content, list):
|
| 132 |
content = []
|
| 133 |
for item in msg.content:
|
|
|
|
| 139 |
content.append(image_message)
|
| 140 |
else:
|
| 141 |
content = msg.content
|
| 142 |
+
tool_calls = msg.tool_calls
|
| 143 |
+
tool_call_id = msg.tool_call_id
|
| 144 |
+
|
| 145 |
+
if tool_calls:
|
| 146 |
+
tool_calls_list = []
|
| 147 |
+
for tool_call in tool_calls:
|
| 148 |
+
tool_calls_list.append({
|
| 149 |
+
"id": tool_call.id,
|
| 150 |
+
"type": tool_call.type,
|
| 151 |
+
"function": {
|
| 152 |
+
"name": tool_call.function.name,
|
| 153 |
+
"arguments": tool_call.function.arguments
|
| 154 |
+
}
|
| 155 |
+
})
|
| 156 |
+
messages.append({"role": msg.role, "tool_calls": tool_calls_list})
|
| 157 |
+
elif tool_call_id:
|
| 158 |
+
messages.append({"role": msg.role, "tool_call_id": tool_call_id, "content": content})
|
| 159 |
else:
|
| 160 |
messages.append({"role": msg.role, "content": content})
|
| 161 |
|
utils.py
CHANGED
|
@@ -12,7 +12,6 @@ def update_config(config_data):
|
|
| 12 |
model_dict[model] = model
|
| 13 |
if type(model) == dict:
|
| 14 |
model_dict.update({new: old for old, new in model.items()})
|
| 15 |
-
# model_dict.update({old: old for old, new in model.items()})
|
| 16 |
provider['model'] = model_dict
|
| 17 |
config_data['providers'][index] = provider
|
| 18 |
api_keys_db = config_data['api_keys']
|
|
|
|
| 12 |
model_dict[model] = model
|
| 13 |
if type(model) == dict:
|
| 14 |
model_dict.update({new: old for old, new in model.items()})
|
|
|
|
| 15 |
provider['model'] = model_dict
|
| 16 |
config_data['providers'][index] = provider
|
| 17 |
api_keys_db = config_data['api_keys']
|