Add your description here
Project description
Funcall
Don't repeat yourself!
Funcall is a Python library that simplifies the use of function calling, especially with OpenAI and Pydantic. Its core goal is to eliminate repetitive schema definitions and boilerplate, letting you focus on your logic instead of writing the same code again and again.
Motivation
If you use only the OpenAI SDK, enabling function call support requires you to:
- Write your function logic
- Manually define a schema for each function
- Pass the schema through the
toolsparameter - Parse and handle the function call results yourself
This process is repetitive and error-prone. Funcall automates schema generation and function call handling, so you only need to define your function once.
Features
- Automatically generate schemas from your function signatures and Pydantic models
- Integrate easily with OpenAI's function calling API
- No more manual, repetitive schema definitions—just define your function once
- Easy to extend and use in your own projects
Installation
pip install funcall
Usage Example
import openai
from openai.types.responses import ResponseFunctionToolCall
from pydantic import BaseModel, Field
from funcall import Funcall
# Define your data model once
class AddForm(BaseModel):
a: float = Field(description="The first number")
b: float = Field(description="The second number")
# Define your function once, no need to repeat schema elsewhere
def add(data: AddForm) -> float:
"""Calculate the sum of two numbers"""
return data.a + data.b
fc = Funcall([add])
resp = openai.responses.create(
model="gpt-4.1",
input="Use function call to calculate the sum of 114 and 514",
tools=fc.get_tools(), # Automatically generates the schema
)
for o in resp.output:
if isinstance(o, ResponseFunctionToolCall):
result = fc.handle_function_call(o) # Automatically handles the function call
print(result) # 628.0
Funcall can read the type hints and docstrings to generate the schema automatically:
[
{
"type": "function",
"name": "add",
"description": "Calculate the sum of two numbers",
"parameters": {
"type": "object",
"properties": {
"a": {
"type": "number",
"description": "The first number"
},
"b": {
"type": "number",
"description": "The second number"
}
},
"required": ["a", "b"],
"additionalProperties": false
},
"strict": true
}
]
See the examples/ directory for more usage examples.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file funcall-0.2.0.tar.gz.
File metadata
- Download URL: funcall-0.2.0.tar.gz
- Upload date:
- Size: 61.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3477497feed18132147470e515d3fc857a3f5ae8c0eb34e018541ac96b34bca
|
|
| MD5 |
8a92312c0033136b986a29a66e68e84d
|
|
| BLAKE2b-256 |
e79d693760d58f521056ae7f93873a65d6c1a936bb2840b01408259b61d85523
|
File details
Details for the file funcall-0.2.0-py3-none-any.whl.
File metadata
- Download URL: funcall-0.2.0-py3-none-any.whl
- Upload date:
- Size: 3.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47994809598e01a15f77579f8201dc547a58bcbcf2cd3f31bfba2f2344c15b9d
|
|
| MD5 |
0a7e02e141131dbf323132a2134b5108
|
|
| BLAKE2b-256 |
4487f5da3131775d18a6c067b3efcf28340b26ca69df549e3c0b1224c6e6d342
|