GitXplorerGitXplorer
U

unstructured-api-tools

public
28 stars
11 forks
3 issues

Commits

List of commits on branch main.
Verified
022bb027db333649e2c324d74ed06da413e8f3fd

feat: allow a pipeline to optionally use the FastAPI Request object (#175)

aawalker4 committed 2 years ago
Verified
bfcf89f6239a43813433bd5e2916dfcac3fc6e9c

chore: updating env var processing for CORS (#174)

aamanda103 committed 2 years ago
Verified
a5324d154122ac776beaf1ab71005acff6302e87

chore: adding optional cors to pipeline api (#172)

aamanda103 committed 2 years ago
Verified
f00abf5c804fd84e7e8a7d5e3c691d383ad5c4c7

chore: Filter out logs on /healthcheck (#171)

aawalker4 committed 2 years ago
Verified
b7a7eedc1ce4db0ae5a7323d5a864496b8df6d39

chore: sync version-sync.sh across repos (#166)

nnatygyoon committed 2 years ago
Verified
2b043ab4dcad15bdc39ca4df2e111b85f3744d70

chore: add msg and json file types (#169)

rryannikolaidis committed 2 years ago

README

The README file for this repository.

Open-Source Pre-Processing Tools for Unstructured Data

The unstructured_api_tools library includes utilities for converting pipeline notebooks into REST API applications. unstructured_api_tools is intended for use in conjunction with pipeline repos. See pipeline-sec-filings for an example of a repo that uses unstructured_api_tools.

Installation

To install the library, run pip install unstructured_api_tools.

Developer Quick Start

  • Using pyenv to manage virtualenv's is recommended

    • Mac install instructions. See here for more detailed instructions.
      • brew install pyenv-virtualenv
      • pyenv install 3.8.15
    • Linux instructions are available here.
  • Create a virtualenv to work in and activate it, e.g. for one named unstructured_api_tools:

    pyenv virtualenv 3.8.15 unstructured_api_tools
    pyenv activate unstructured_api_tools

  • Run make install-project-local

Usage

Use the CLI command to convert pipeline notebooks to scripts, for example:

unstructured_api_tools convert-pipeline-notebooks \
  --input-directory pipeline-family-sec-filings/pipeline-notebooks \
  --output-directory pipeline-family-sec-filings/prepline_sec_filings/api \
  --pipeline-family sec-filings \
  --semver 0.2.1

If you do not provide the pipeline-family and semver arguments, those values are parsed from preprocessing-pipeline-family.yaml. You can provide the preprocessing-pipeline-family.yaml file explicitly with --config-filename or the PIPELINE_FAMILY_CONFIG environment variable. If neither of those is specified, the fallback is to use the preprocessing-pipeline-family.yaml file in the current working directory.

The API file undergoes black, flake8 and mypy checks after being generated. If you want flake8 to ignore specific errors, you can specify them through the CLI with --flake8-ignore F401, E402. See the flake8 docs for a full list of error codes.

Conversion from pipeline_api to FastAPI

The command described in Usage generates a FastAPI API route for each pipeline_api function defined in the notebook. The signature of the pipeline_api method determines what parameters the generated FastAPI accepts.

Currently, only plain text file uploads are supported and as such the first argument must always be text, but support for multiple files and binary files is coming soon!

In addition, any number of string array parameters may be specified. Any kwarg beginning with m_ indicates a multi-value string parameter that is accepted by the FastAPI API.

For example, in a notebook containing:

def pipeline_api(text, m_subject=[], m_name=[]):

text represents the content of a file posted to the FastAPI API, and the m_subject and m_name keyword args represent optional parameters that may be posted to the API as well, both allowing multiple string parameters. A curl request against such an API could look like this:

curl -X 'POST' \
  'https://<hostname>/<pipeline-family-name>/<pipeline-family-version>/<api-name>' \
  -H 'accept: application/json'  \
  -H 'Content-Type: multipart/form-data' \
  -F 'file=@file-to-process.txt' \
  -F 'subject=art' \
  -F 'subject=history'
  -F 'subject=math' \
  -F 'name=feynman'

In addition, you can specify the response type if pipeline_api can support both "application/json" and "text/csv" as return types.

For example, in a notebook containing a kwarg response_type:

def pipeline_api(text, response_type="text/csv", m_subject=[], m_name=[]):

The consumer of the API may then specify "text/csv" as the requested response content type with the usual HTTP Accept header, e.g. Accept: application/json or Accept: text/csv.

Security Policy

See our security policy for information on how to report security vulnerabilities.

Learn more

Section Description
Company Website Unstructured.io product and company info