Skip to main content

ape-openai

OpenAI integration for APE (AI Programmatic Execution).

What is ape-openai?

ape-openai bridges APE's deterministic validation layer with OpenAI's function calling API. It prevents hallucinations in function parameters by enforcing strict type checking and constraints before execution.

Why ape-openai?

OpenAI's function calling is powerful but can be unreliable:

  • Function parameters can be incorrectly formatted
  • Type mismatches cause runtime errors
  • Missing required fields break execution
  • No validation before calling your code

ape-openai solves this by adding APE as a validation layer:

OpenAI → JSON parameters → APE validation → Deterministic execution ✓

Installation

# Core package (schema conversion + execution)
pip install ape-openai

# With OpenAI SDK (for code generation)
pip install ape-openai[openai]

# Development dependencies
pip install ape-openai[dev]

Prerequisites:

  • Python >= 3.11
  • ape-lang >= 0.2.0

Test Coverage

✅ All tests passing

  • Total tests: 49
  • Last verified via pytest discovery

See ../ape/docs/APE_TESTING_GUARANTEES.md for details on what these tests guarantee.

The test suite covers:

  • Schema conversion (APE → OpenAI)
  • Executor (OpenAI → APE runtime)
  • Utils (error formatting, validation)
  • End-to-end integration
  • Generator (NL → APE code)

To verify test counts:

pytest packages/ape-openai/tests --collect-only -q

Quick Start

from openai import OpenAI
from ape_openai import ApeOpenAIFunction

# 1. Create Ape task file
# calculator.ape:
# task add:
#     inputs: a: Integer, b: Integer
#     outputs: sum: Integer
#     constraints: a > 0, b > 0
#     steps: sum = a + b

# 2. Load as OpenAI function
func = ApeOpenAIFunction.from_ape_file("calculator.ape", "add")

# 3. Get OpenAI function schema
function_schema = func.to_openai_function()

# 4. Use with OpenAI
client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Add 5 and 3"}],
    functions=[function_schema],
    function_call="auto"
)

# 5. Execute with APE validation
if response.choices[0].message.function_call:
    func_call = response.choices[0].message.function_call
    result = func.execute(func_call.arguments)
    print(f"Result: {result}")  # 8

API Reference

Schema Conversion

ape_task_to_openai_schema(task: ApeTask) -> dict

Converts APE task to OpenAI function schema.

from ape_openai import ape_task_to_openai_schema, ApeTask

task = ApeTask(
    name="calculate_tax",
    inputs={"amount": "float", "rate": "float"},
    output="float",
    description="Calculate tax amount"
)

schema = ape_task_to_openai_schema(task)
# {
#     "name": "calculate_tax",
#     "description": "Calculate tax amount",
#     "parameters": {
#         "type": "object",
#         "properties": {
#             "amount": {"type": "number"},
#             "rate": {"type": "number"}
#         },
#         "required": ["amount", "rate"]
#     }
# }

Execution

execute_openai_call(module, function_name, arguments) -> Any

Execute OpenAI function call with APE validation.

from ape import compile
from ape_openai import execute_openai_call

module = compile("calculator.ape")
result = execute_openai_call(module, "add", '{"a": 5, "b": 3}')

High-Level Wrapper

ApeOpenAIFunction

Complete integration wrapper.

func = ApeOpenAIFunction.from_ape_file("calc.ape", "multiply")

# Get schema
schema = func.to_openai_function()

# Execute
result = func.execute({"a": 4, "b": 7})

Features

  • ✅ Schema conversion: APE → OpenAI function format
  • ✅ Type validation: Strict parameter checking
  • ✅ Error handling: Clear error messages
  • ✅ Code generation: Natural language → APE (experimental)
  • ✅ Full type support: String, Integer, Float, Boolean, List, Dict

Type Mapping

Ape Type OpenAI Type
String string
Integer integer
Float number
Boolean boolean
List array
Dict object

Advanced Usage

Code Generation

Generate APE code from natural language:

from ape_openai import generate_ape_from_nl

code = generate_ape_from_nl(
    "Create a function that calculates compound interest",
    model="gpt-4o"
)
print(code)

Error Handling

from ape_openai import ApeOpenAIFunction
from ape import ApeExecutionError

func = ApeOpenAIFunction.from_ape_file("calc.ape", "divide")

try:
    result = func.execute({"a": 10, "b": 0})
except ApeExecutionError as e:
    print(f"Execution failed: {e}")

Examples

See the examples/ directory for complete examples:

  • Basic function calling
  • Multi-function conversations
  • Error handling patterns
  • Code generation workflows

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black .

# Type checking
mypy src/

License

MIT License - see LICENSE file for details.

Links

Metadata

Release files for ape-openai 1.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ape-openai 1.0.7
File Size Uploaded
ape_openai-1.0.7.tar.gz 15.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ape-openai 1.0.7
File Interpreter ABI Platform
ape_openai-1.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 26.6 kB

Release files / ape_openai-1.0.7.tar.gz

Download URL ape_openai-1.0.7.tar.gz
Size 15.9 kB
Tags Source
SHA-256 checksum
How to use checksums
34d8062a113ac4a9626b0e63374e1f08d82ce973ed6bd130a92a437c2b6281df
BLAKE2b-256 checksum
How to use checksums
4e73738f3f0c5eec8bfff2b22f6c6bf9e53103f8364e706f3a793566a46c1f93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release files / ape_openai-1.0.7-py3-none-any.whl

Download URL ape_openai-1.0.7-py3-none-any.whl
Size 10.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
38503f1782335f65b0f1442b6ee567422162b5fde4b2f933fe9e27d05d8861c2
BLAKE2b-256 checksum
How to use checksums
c002fd081d8ccaff2607527a590e06dd7bd49856299914bd2d3868ecb100d5d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

1.0.7 This release

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page