Skip to main content

A small utility to generate JSON schemas for python functions.

Project description

Function schema

PyPI version

This is a small utility to generate JSON schemas for python functions. With power of type annotations, it is possible to generate a schema for a function without describing it twice.

At this moment, extracting schema from a function is only useful for OpenAI API function-call feature. But it can be used for other purposes for example to generate documentation in the future.

Installation

pip install function-schema

Usage

from typing import Annotated, Optional
import enum

def get_weather(
    city: Annotated[str, "The city to get the weather for"],
    unit: Annotated[
        Optional[str],
        "The unit to return the temperature in",
        enum.Enum("Unit", "celcius fahrenheit")
    ] = "celcius",
) -> str:
    """Returns the weather for the given city."""
    return f"Weather for {city} is 20°C"

Function description is taken from the docstring. Type hinting with typing.Annotated for annotate additional information about the parameters and return type.

  • type can be typing.Union, typing.Optional. (T | None for python 3.10+)
  • string value of Annotated is used as a description
  • enum value of Annotated is used as an enum schema
import json
from function_schema import get_function_schema

schema = get_function_schema(get_weather)
print(json.dumps(schema, indent=2))

Will output:

{
  "name": "get_weather",
  "description": "Returns the weather for the given city.",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "The city to get the weather for"
      },
      "unit": {
        "type": "string",
        "description": "The unit to return the temperature in",
        "enum": [
          "celcius",
          "fahrenheit"
        ],
        "default": "celcius"
      }
    },
  }
  "required": [
    "city"
  ]
}

You can use this schema to make a function call in OpenAI API:

import openai
openai.api_key = "sk-..."

result = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
      {"role": "user", "content": "What's the weather like in Seoul?"}
    ],
    functions=[
        get_function_schema(get_weather)
    ],
    function_call="auto",
)

CLI usage

function_schema mymodule.py my_function

License

MIT License

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

function_schema-0.2.0.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

function_schema-0.2.0-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file function_schema-0.2.0.tar.gz.

File metadata

  • Download URL: function_schema-0.2.0.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for function_schema-0.2.0.tar.gz
Algorithm Hash digest
SHA256 00a5a8acf1c4cfa9665ea684245d736db075b1ebb30645537f35c4350bf99b41
MD5 faa38431b15b420b69ad80b2ca2ae957
BLAKE2b-256 c92e059107c6b65305324b8ba8fab7ced90857a00cee26c81017513f7c243a46

See more details on using hashes here.

File details

Details for the file function_schema-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for function_schema-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 205b89d3309a4802ab1febce9f28892ec87c1c10b241527424cbb7ca764650b1
MD5 c923cb19e8dfda45e62b21b2a5acac0e
BLAKE2b-256 c7f319f994343497eb1b851cb29743aafac76e41b3a01b2ec6e71634115c5ca3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page