Better_tool_calling / utils /functions.py
vaibhavard
first_commit
372d102
raw
history blame contribute delete
1.26 kB
import re
from function_support import _function
def extract_links(text):
url_pattern = r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
urls = re.findall(url_pattern, text)
return urls
def allocate(messages,model,functs):
if "gemini" not in model:
for msg in messages:
if isinstance(msg["content"],list):
msg["content"]=msg["content"][0]["text"]
for msg in messages:
if "tool" in msg["role"]:
msg["role"]="user"
msg["content"]=f"Tool {msg['name']} returned response: {msg['content']}. Now you must output the next tool Call or respond to user in natural language after the task has been completed. "
del msg['name']
del msg["tool_call_id"]
if "tool_calls" in msg:
add=""
for tools in msg["tool_calls"]:
add=f"""
```json
[
{{
"tool":"{tools["function"]["name"]}",
"tool_input":{tools["function"]["arguments"]}
}}
]
```"""
msg["content"]=add
del msg["tool_calls"]
if functs !=None:
function_call=_function(tools=functs)
messages.insert(1,{"role": "system", "content": function_call})