Skip to main content

Agent automatically figures out how to make API requests given API docs and user query in plain text

Project description

Ad-Hoc API

An Archytas tool that uses LLMs to interact with APIs given documentation. User explains what they want in plain english, and then the agent (using the APIs docs for context) writes python code to complete the task.

Installation

pip install adhoc-api

Usage

This is designed to be paired with an Archytas agent. You may omit the python tool, and the agent should instead return the source code to you rather than running it.

Here is a complete example of grabbing the HTML content of an API documentation page, converting it to markdown, and then having the adhoc-api tool interact with the API using the generated markdown documentation (see adhoc_api/examples/jokes.py for reference):

from archytas.react import ReActAgent, FailedTaskError
from archytas.tools import PythonTool
from easyrepl import REPL
from adhoc_api.tool import AdhocApi, APISpec

from bs4 import BeautifulSoup
import requests
from markdownify import markdownify


def main():    
    # set up the API spec for the JokeAPI
    gdc_api: APISpec = {
        'name': "JokesAPI",
        'description': 'JokeAPI is a REST API that serves uniformly and well formatted jokes.',
        'documentation': get_joke_api_documentation(),
    }

    # set up the tools and agent
    adhoc_api = AdhocApi(
        apis=[gdc_api],
        drafter_config={'model': 'gemini-1.5-flash-001'},
        finalizer_config={'model': 'gpt-4o'}
    )
    python = PythonTool()
    agent = ReActAgent(model='gpt-4o', tools=[adhoc_api, python], verbose=True)

    # REPL to interact with agent
    for query in REPL(history_file='.chat'):
        try:
            answer = agent.react(query)
            print(answer)
        except FailedTaskError as e:
            print(f"Error: {e}")


def get_joke_api_documentation() -> str:
    """Download the HTML of the joke API documentation page with soup and convert it to markdown."""
    url = 'https://sv443.net/jokeapi/v2/'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    markdown = markdownify(str(soup))
    
    return markdown


if __name__ == "__main__":
    main()

Then you can run the script and interact with the agent in the REPL:

$ python example.py

>>> Can you tell me what apis are available?
The available API is JokesAPI, which is a REST API that serves uniformly and well formatted jokes.

>>> Can you fetch a safe joke?
Here is a safe joke from the JokesAPI:

Category: Pun
Type: Two-part
Setup: What kind of doctor is Dr. Pepper?
Delivery: He's a fizzician.

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

adhoc_api-0.2.6.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

adhoc_api-0.2.6-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file adhoc_api-0.2.6.tar.gz.

File metadata

  • Download URL: adhoc_api-0.2.6.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.15 Linux/5.18.19-051819-generic

File hashes

Hashes for adhoc_api-0.2.6.tar.gz
Algorithm Hash digest
SHA256 d90e04589e6ec73dcdfba1ac02971d3532bfd198b7ff7fa835b9760b4a455e7a
MD5 8301b136669aa9f1963ef0bef3dd876f
BLAKE2b-256 eba9632bf9c11a044202b13916ab4b312a547c9264952eaec58a16998b5055f7

See more details on using hashes here.

File details

Details for the file adhoc_api-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: adhoc_api-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.15 Linux/5.18.19-051819-generic

File hashes

Hashes for adhoc_api-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 997b88c8a152b309d3d757a818c2deaa6ccb9483181e8d2f392af3db24b468d7
MD5 009e85d93fb030d55870a5df115f1161
BLAKE2b-256 8d9241b87cd2ecdb0820d42ecb42a73bfebf1a99f192866025a3ca85f6519608

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