A set of tools for easily interacting with LLMs.
Project description
Install
uv add py-ai-toolkit
WHAT
A set of tools for easily interacting with LLMs.
WHY
Building AI-driven software leans upon a number of utilities, such as prompt building and LLM calling via HTTP requests. Additionally, writing agents and workflows can prove particularly challenging using conventional code structures.
HOW
This simple library offers a set of predefined functions for:
- Easy prompting - you need only provide a path
- Calling LLMs - instructor takes care of that for us
- Modifying response models - we use Pydantic (duh)
Additionally, we provide grafo out of the box for convenient workflow building.
About Grafo
Grafo (see Recommended Docs below) is a library for building executable DAGs where each node contains a coroutine. Since the DAG abstraction fits particularly well into AI-driven building, we have provided the BaseWorkflow class with the following methods:
taskfor LLM callingredirectto help you manage redirections in yourgrafoworkflows
Examples
Simple text:
from py_ai_toolkit import AIT
ait = AIT("gpt-5")
path = "./prompt.md"
response = ait.chat(path)
print(response.completion)
print(response.content)
Structured response:
from py_ai_toolkit import AIT
from pydantic import BaseModel
class Purchase(BaseModel):
product: str
quantity: int
ait = AIT("gpt-5")
path = "./prompt.md" # PROMPT: {{ message }}
message = "I want to buy 5 apples"
response = ait.asend(response_model=Fruit, path=path, message=message)
Structured response with model type injection:
from py_ai_toolkit import AIT
from pydantic import BaseModel
class Purchase(BaseModel):
product: str
quantity: int
ait = AIT("gpt-5")
path = "./prompt.md" # PROMPT: {{ message }}
message = "I want to buy 5 apples"
available_fruits = ["apple", "banana", "orange"]
FruitModel = ait.inject_types(Purchase, [
("product", Literal[tuple(available_fruits)])
])
response = ait.asend(response_model=Purchase, path=path, message=message)
Simple workflow:
from py_ai_toolkit import AIT, BaseWorkflow, BaseValidation, Node, TreeExecutor
from pydantic import BaseModel
from typing import Literal
class Purchase(BaseModel):
product: str
quantity: int
ait = AIT("gpt-5")
prompts_path = "./"
message = "I want to buy 5 apples"
available_fruits = ["apple", "banana", "orange"]
FruitModel = ait.inject_types(Purchase, [
("product", Literal[tuple(available_fruits)])
])
class PurchaseWorkflow(BaseWorkflow):
def __init__(...):
...
async def run(self, message) -> Purchase:
purchase_node = Node[FruitModel](
uuid="fruit purchase node",
coroutine=self.task,
kwargs=dict(
path=f"{prompts_path}/purchase.md",
response_model=FruitModel,
message=message,
)
)
validation_node = self.create_validation_node(
input=message,
output=purchase_node.output,
issues=["The identified purchase matches the user's request."],
source_node=purchase_node,
)
await purchase_node.connect(validation_node)
executor = TreeExecutor(uuid="Purchase Workflow", roots=[purchase_node])
await executor.run()
if not purchase_node.output or not validation_node.output:
raise ValueError("Purchase validation failed.")
if not validation_node.output.valid:
raise ValueError("Purchase failed validation.")
return purchase_node.output
Recommended Docs
instructorhttps://python.useinstructor.com/jinja2https://jinja.palletsprojects.com/en/stable/pydantichttps://docs.pydantic.dev/latest/grafohttps://github.com/paulomtts/grafo
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 py_ai_toolkit-0.5.0.tar.gz.
File metadata
- Download URL: py_ai_toolkit-0.5.0.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3bc1994a6db9b98fea9e164c59cb106ea5b39d5238af2291e542523e5f6e75e
|
|
| MD5 |
aede89c5ee96e439c0404d71655ab3ab
|
|
| BLAKE2b-256 |
52007467a658cc3a8f7ccd809dd6db9584b10721b81b001178fa1600428cbba1
|
File details
Details for the file py_ai_toolkit-0.5.0-py3-none-any.whl.
File metadata
- Download URL: py_ai_toolkit-0.5.0-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09f67b5d7d8309c0c880a010e6dfd272df4e7014b9349fef7fa98b22cd00b4fa
|
|
| MD5 |
cd3fb6a90635ab80fad7cfc144b5050c
|
|
| BLAKE2b-256 |
11963e0d8b8402b5e74b87c484c2fa6d42ece2b5e9add44fb7401abd5cc74918
|