Function calling capabilities for LLMs that don't natively support them
Project description
Tools4All
A drop-in replacement for the Ollama Python library that adds function calling capabilities to LLMs that don't natively support them.
🎯 Goal
Tools4All attempts to enables function calling to non capable Ollama served LLMs. It works by:
- Extending ollama.Client and overriding the chat method
- Detecting if the LLM is capable of function calling
- Injecting tool descriptions into the system prompt if the LLM is not capable of function calling
- Parsing the LLM's response to extract tool calls and inject them into ollama.ChatResponse
- Parsing role "tool" message items to extract tool results
This approach allows function calling with models that lack native tool support.
Installation
pip install tools4all
Use as you would use ollama python library
📦 Dependencies
ollama: Python client for Ollamapydantic: Data validation and settings managementrich: For pretty printing (optional)
Basic Usage
from tools4all import Client
# Actual function that may be called
def get_weather(location):
# Your implementation here
return f"The weather in {location} is sunny."
# Define the tool description
tool = {
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g., San Francisco, CA"
}
},
"required": ["location"]
}
}
}
# Create a Tools4All client
client = Client(host='http://127.0.0.1:11434')
# Process a user prompt
prompt = "What's the weather like in San Francisco?"
model = "myllm:latest" # set the ollama model to use
client.chat(
messages=[
{"role": "user", "content": prompt}
],
tools=[tool],
model=model
)
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgements
Project details
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 tools4all-0.2.0.tar.gz.
File metadata
- Download URL: tools4all-0.2.0.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2dbb0d07ada85824d6bbfb0720a33df6cc357de1e0ab37306f53b6a263767ea5
|
|
| MD5 |
11307f02878e9e42f9af70858c0ccbd9
|
|
| BLAKE2b-256 |
362d8817f54fb3b86b2718851dfe6df82e775cf1b96a7c77a9459dc4ba55cd38
|
File details
Details for the file tools4all-0.2.0-py3-none-any.whl.
File metadata
- Download URL: tools4all-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2dbb527c0237fc52d73c437d6bfbfcd978ae9ef28a2659aea66da6ce32e47efc
|
|
| MD5 |
83fa1317ca36b61acfd93a8b6e1bd0a4
|
|
| BLAKE2b-256 |
d08e0824dcb54166c1fc4999fd144ba9797c8892363078f1507f3ad3d026a207
|