Spaces:
Running
Running
#!/usr/bin/python3 | |
# -*- coding: utf-8 -*- | |
""" | |
https://platform.openai.com/docs/guides/function-calling | |
""" | |
import argparse | |
import json | |
import time | |
import openai | |
from openai import OpenAI | |
from openai.pagination import SyncCursorPage | |
from openai.types.beta.threads import ThreadMessage | |
from openai.types.beta.assistant import Assistant | |
from project_settings import environment, project_path | |
def get_args(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument( | |
"--openai_api_key", | |
default=environment.get("openai_api_key", default=None, dtype=str), | |
type=str | |
) | |
args = parser.parse_args() | |
return args | |
def get_current_weather(location, unit="fahrenheit"): | |
if "tokyo" in location.lower(): | |
return json.dumps({"location": location, "temperature": "10", "unit": "celsius"}) | |
elif "san francisco" in location.lower(): | |
return json.dumps({"location": location, "temperature": "72", "unit": "fahrenheit"}) | |
else: | |
return json.dumps({"location": location, "temperature": "22", "unit": "celsius"}) | |
available_functions = { | |
"get_current_weather": get_current_weather, | |
} | |
def main(): | |
""" | |
assistant.id: asst_9iUOSeG3dUgzBxYqfygvtKLi | |
thread.id: thread_9C4dDj5i4jDCtkMCujyBleOc | |
""" | |
args = get_args() | |
client = OpenAI( | |
api_key=args.openai_api_key | |
) | |
messages = [{"role": "user", "content": "What's the weather like in San Francisco, Tokyo, and Paris?"}] | |
tools = [ | |
{ | |
"type": "function", | |
"function": { | |
"name": "get_current_weather", | |
"description": "Get the current weather in a given location", | |
"parameters": { | |
"type": "object", | |
"properties": { | |
"location": { | |
"type": "string", | |
"description": "The city and state, e.g. San Francisco, CA", | |
}, | |
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}, | |
}, | |
"required": ["location"], | |
}, | |
}, | |
} | |
] | |
response = openai.chat.completions.create( | |
model="gpt-3.5-turbo-1106", | |
messages=messages, | |
tools=tools, | |
tool_choice="auto", # auto is default, but we'll be explicit | |
) | |
print(response.choices) | |
response_message = response.choices[0].message | |
tool_calls = response_message.tool_calls | |
print(tool_calls) | |
if tool_calls: | |
messages.append(response_message) | |
for tool_call in tool_calls: | |
function_name = tool_call.function.name | |
function_to_call = available_functions[function_name] | |
function_args = json.loads(tool_call.function.arguments) | |
function_response = function_to_call( | |
location=function_args.get("location"), | |
unit=function_args.get("unit"), | |
) | |
messages.append( | |
{ | |
"tool_call_id": tool_call.id, | |
"role": "tool", | |
"name": function_name, | |
"content": function_response, | |
} | |
) | |
second_response = openai.chat.completions.create( | |
model="gpt-3.5-turbo-1106", | |
messages=messages, | |
) | |
print("second_response: {}".format(second_response)) | |
return | |
if __name__ == '__main__': | |
main() | |