Spaces:
Build error
Build error
Download app.py from ChenyuRabbitLove/function_calling_demo: direct link, hf CLI and curl.
- Browser
- Download file 3.24 kB
-
https://huggingface.co/spaces/ChenyuRabbitLove/function_calling_demo/resolve/main/app.py
- Command line
-
hf download hf://spaces/ChenyuRabbitLove/function_calling_demo/app.py
-
curl -L -o app.py https://huggingface.co/spaces/ChenyuRabbitLove/function_calling_demo/resolve/main/app.py
3.24 kB
| import os | |
| import json | |
| import gradio as gr | |
| from openai import OpenAI | |
| from tenacity import retry, wait_random_exponential, stop_after_attempt | |
| from functions_definition import get_functions, get_openai_function_tools | |
| OPENAI_KEY = os.getenv("OPENAI_KEY") | |
| client = OpenAI(api_key=OPENAI_KEY) | |
| def chat_completion_request(messages, tools=None, tool_choice=None): | |
| print(f"query message {messages}") | |
| try: | |
| response = client.chat.completions.create( | |
| model="gpt-4o", | |
| messages=messages, | |
| tools=tools, | |
| tool_choice=tool_choice, | |
| ) | |
| print(response.choices[0].message.content) | |
| return response | |
| except Exception as e: | |
| print("Unable to generate ChatCompletion response!") | |
| print(f"Exception: {e}") | |
| return e | |
| def respond( | |
| message, | |
| history: list[tuple[str, str]], | |
| ): | |
| messages = [ | |
| { | |
| "role": "system", | |
| "content": [{"type": "text", "text": "You are a helpful agent"}], | |
| } | |
| ] | |
| for val in history: | |
| if val[0]: | |
| messages.append( | |
| {"role": "user", "content": [{"type": "text", "text": val[0]}]} | |
| ) | |
| if val[1]: | |
| messages.append( | |
| {"role": "assistant", "content": [{"type": "text", "text": val[1]}]} | |
| ) | |
| messages.append({"role": "user", "content": [{"type": "text", "text": message}]}) | |
| response = chat_completion_request( | |
| messages, tools=get_openai_function_tools(), tool_choice="auto" | |
| ) | |
| response_message = response.choices[0].message | |
| tool_calls = response_message.tool_calls | |
| if tool_calls: | |
| available_functions = get_functions() | |
| 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( | |
| type=function_args.get("type"), | |
| ) | |
| messages.append( | |
| { | |
| "tool_call_id": tool_call.id, | |
| "role": "tool", | |
| "name": function_name, | |
| "content": function_response, | |
| } | |
| ) | |
| second_response = chat_completion_request(messages) | |
| messages.append( | |
| { | |
| "role": "assistant", | |
| "content": [ | |
| {"type": "text", "text": second_response.choices[0].message.content} | |
| ], | |
| } | |
| ) | |
| return second_response.choices[0].message.content | |
| messages.append( | |
| { | |
| "role": "assistant", | |
| "content": [{"type": "text", "text": response.choices[0].message.content}], | |
| } | |
| ) | |
| return response.choices[0].message.content | |
| """ | |
| For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface | |
| """ | |
| demo = gr.ChatInterface(respond, title="Function Calling Demo") | |
| if __name__ == "__main__": | |
| demo.launch() | |