import os
import time
import json
from openai import OpenAI
from freeplay import Freeplay, RecordPayload, ResponseInfo, CallInfo
# A mock function that gets temperature for a location
def get_temperature(location: str) -> float:
return 72.5
fpclient = Freeplay(
freeplay_api_key=os.environ['FREEPLAY_API_KEY'],
api_base=f"{os.environ['FREEPLAY_API_URL']}/api"
)
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
project_id=os.environ['FREEPLAY_PROJECT_ID']
input_variables = {'location': "Boulder, CO"}
formatted_prompt = fpclient.prompts.get_formatted(
project_id=project_id,
template_name='my-openai-prompt',
environment='latest',
variables=input_variables
)
start = time.time()
completion = client.chat.completions.create(
messages=formatted_prompt.llm_prompt,
model=formatted_prompt.prompt_info.model,
tools=formatted_prompt.tool_schema,
**formatted_prompt.prompt_info.model_parameters
)
end = time.time()
# Append the completion to list of messages
messages = formatted_prompt.all_messages(completion.choices[0].message)
if completion.choices[0].message.tool_calls:
for tool_call in completion.choices[0].message.tool_calls:
if tool_call.function.name == "weather_of_location":
args = json.loads(tool_call.function.arguments)
temperature = get_temperature(args["location"])
tool_response_message = {
"tool_call_id": tool_call.id,
"role": "tool",
"content": str(temperature),
}
messages.append(tool_response_message)
session = fpclient.sessions.create()
fpclient.recordings.create(
RecordPayload(
project_id=project_id,
all_messages=messages,
session_info=session.session_info,
inputs=input_variables,
prompt_version_info=formatted_prompt.prompt_info,
call_info=CallInfo.from_prompt_info(formatted_prompt.prompt_info, start, end),
tool_schema=formatted_prompt.tool_schema,
response_info=ResponseInfo(is_complete=completion.choices[0].finish_reason == 'stop'),
)
)