1.1.7 • Published 4 years ago

tfjs-node-lambda-helpers v1.1.7

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

tfjs-node-lambda-helpers

When using tfjs-node-lambda, you have to deal with environments, release urls, releases, and timeouts. This package takes care of all of that for you.

Installation

npm install --save --save-exact tfjs-node-lambda tfjs-node-lambda-helpers
npm install --save-dev --save-exact @tensorflow/tfjs-node @tensorflow/tfjs

Related libraries

Usage

Please note that the lambda will return a 503 SERVICE_UNAVAILABLE error until tf is fully loaded to prevent errors from timing out. On the client, simply retry the request until the lambda is ready.

Tensorflow

import type { NextApiRequest, NextApiResponse } from 'next';
import { PrepareTf } from 'tfjs-node-lambda-helpers';
const prepareTf = PrepareTf();

export default async (req: NextApiRequest, res: NextApiResponse) => {
  const ready = await prepareTf.next();
  if (!ready.done) {
    return res.status(ready.value.statusCode).json(ready.value);
  }
  const tf = ready.value;

  tf.tensor([1, 2, 3, 4]).print();

  return res.status(200).json({ version: tf.version });
};

Lobe.ai

In Vercel’s dashboard, be sure Settings > Environment Variables > Automatically expose System Environment Variables is checked so that process.env.VERCEL_URL is not undefined.

import type { NextApiRequest, NextApiResponse } from 'next';
import axios from 'axios';
import { PrepareLobe, isLambda, LobeModel } from 'tfjs-node-lambda-helpers';

const baseUrl = isLambda()
  ? `https://${process.env.VERCEL_URL}`
  : `http://localhost:3000`;
const prepareLobe = PrepareLobe(`${baseUrl}/static/model`);

let model: LobeModel;

export default async (req: NextApiRequest, res: NextApiResponse) => {
  if (req.method !== 'POST') {
    return res.status(405).json({ message: 'Method Not Allowed' });
  }

  const lobe = await prepareLobe.next();
  if (!lobe.done) {
    return res.status(lobe.value.statusCode).json(lobe.value);
  } else {
    if (!model) {
      model = lobe.value;
    }
  }
  const imageUrl = req.body.imageUrl;

  const response = await axios.get(imageUrl, {
    responseType: 'arraybuffer',
  });
  const results = model.predict(response.data);

  return res.status(200).json({ results: results.Confidences });
};

Example

Checkout a full example at tfjs-node-lambda-example.

Behind the scenes

Our goals:

  • No configuration
  • Fast development experience
  • Prevent Lambda from timing out on initial load

Read the source code.

Contributing

We welcome contributions!

tfjs-node-lambda-releases is soft deprecated. Due to file size limitations, 6 releases are too big to be published on npm. Use the assets on GitHub Releases instead.

1.1.7

4 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago