Skip to main content

Helper functions for building lambda-style services on the IVCAP platform

Project description

ivcap-lambda: A python library for building lambda-style services on the IVCAP platform

Package renamed: ivcap-ai-tool has been renamed to ivcap-lambda to reflect that the library is useful for any lambda-style IVCAP service, not just AI agent tools. A compatibility shim is published under the old name — existing apps will continue to work but will see a DeprecationWarning prompting migration.

Coverity Scan Build Status

A python library containing various helper and middleware functions to simplify developing AI tools to be deployed on IVCAP.

Note: A template git repositiory using this library can be found on github ivcap-works/ivcap-python-ai-tool-template. You may clone that and start from there.

Content

Register a Tool Function

class Request(BaseModel):
    jschema: str = Field("urn:sd:schema:some_tool.request.1", alias="$schema")
    ...

class Result(BaseModel):
    jschema: str = Field("urn:sd:schema:some_tool.1", alias="$schema")
    ...

def some_tool(req: Request) -> Result:
    """
    Here should go a quite extensive description of what the tool can be
    used for so that an agent can work out if this tool is useful in
    a specific context.

    DO NOT ADD PARAMTER AND RETURN DECRIPTIONS -
       DESCRIBE THEM IN THE `Request` MODEL
    """
    ...

    return Result(...)

add_tool_api_route(app, "/", some_tool, opts=ToolOptions(tags=["Great Tool"]))

Start the Service

app = FastAPI(
  ..
)

if __name__ == "__main__":
    start_tool_server(app, some_tool)

JSON-RPC Middleware

This middleware will convert any POST / with a payload following the JSON-RPC specification to an internal POST /{method} and will return the result formatted according to the JSON-RPC spec.

from ivcap_fastapi import use_json_rpc_middleware

app = FastAPI(
  ..
)

use_json_rpc_middleware(app)

Try-Later Middleware

This middleware is supporting the use case where the execution of a requested service is taking longer than the caller is willing to wait. A typical use case is where the service is itself outsourcing the execution to some other long-running service but may immediately receive a reference to the eventual result.

In this case, raising a TryLaterException will return with a 204 status code and additional information on how to later check back for the result.

from ivcap_fastapi import TryLaterException, use_try_later_middleware
use_try_later_middleware(app)

@app.post("/big_job")
def big_job(req: Request) -> Response:
    jobID, expected_exec_time = scheduling_big_job(req)
    raise TryLaterException(f"/big_job/jobs/{jobID}", expected_exec_time)

@app.get("/big_job/jobs/{jobID}")
def get_job(jobID: str) -> Response:
    resp = find_result_for(job_id)
    return resp

Specifically, raising TryLaterException(location, delay) will return an HTTP response with a 204 status code with the additional HTTP headers Location and Retry-Later set to location and delay respectively.

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

ivcap_lambda-0.7.22.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ivcap_lambda-0.7.22-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file ivcap_lambda-0.7.22.tar.gz.

File metadata

  • Download URL: ivcap_lambda-0.7.22.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.14.5 Darwin/24.6.0

File hashes

Hashes for ivcap_lambda-0.7.22.tar.gz
Algorithm Hash digest
SHA256 bbc637f929eb68f512bcaf9751b3902c52adae87446f229d7d015a57733b5fad
MD5 91d13d3f2b4c2853777a7a4cdaef0d1f
BLAKE2b-256 a195919cc944a7dacf841492457e2cba70619caab4c782e489d25671a1e7f4c3

See more details on using hashes here.

File details

Details for the file ivcap_lambda-0.7.22-py3-none-any.whl.

File metadata

  • Download URL: ivcap_lambda-0.7.22-py3-none-any.whl
  • Upload date:
  • Size: 23.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.14.5 Darwin/24.6.0

File hashes

Hashes for ivcap_lambda-0.7.22-py3-none-any.whl
Algorithm Hash digest
SHA256 c549968030c85481cde31a290fd9982a671ad1a9cfd3e6317f6c58a91527357c
MD5 41547faa451472c8255dbf47c58eb84c
BLAKE2b-256 356cf30b90eb92f6295320c5c465078a77ef32ff0657c7ea9aea434cbf691a7f

See more details on using hashes here.

Supported by

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