@hunterhod/payments
v0.1.2
Published
Easily monetize your generative AI projects with token-based payments
Downloads
1
Readme
Installation
npm i @hunterhod/payments
Usage
import BenchmarkPayments from '@benchmark/payments';
// Initialize the BenchmarkPayments library.
// The developer will be issued an API key upon signing up for BenchmarkPayments
// and can re-issue API keys from their BenchmarkPayments dashboard, similiar to
// how OpenAI manages API keys.
const benchmarkPayments = new BenchmarkPayments({
// API keys are always a UUID
apiKey: '550e8400-e29b-41d4-a716-446655440000',
});
// This function would be present in a server-side ExpressJS route
// Example file path: pages/api/chat.js
export default function handler(req, res) {
// Get a unique identifier for your user. Can be any string or number that
// is guaranteed to be unique. You will likely fetch the user ID from
// authentication cookies that you will probably have present in the request
// object.
// getUserIDFromRequestCookies() is a contrived function that is assumed to
// be implemented somewhere else in this example.
const userId = await getUserIDFromRequestCookies(req);
// Check to see if your user has credits avaiable to generate a response from
// the LLM.
if (benchmarkPayments.userHasCredits(userId)) {
// Generate a response from your LLM.
// getResponseFromLLM() is a contrived function that is assumed to
// be implemented somewhere else in this example.
const {
llmResponse,
numTokens
} = await getResponseFromLLM(req.body.messageFromUser);
// Deduct credits from user for the generation of the response.
// There is the possibility that the user could "overdraft" credits,
// but we allow this to happen since it would be hard to guess at
// how many credits the next content generation will require.
// Better to just detect "credits <= 0" and send them to the checkout
// page.
await benchmarkPayments.deductCreditsFromUser({
// 'tokens' can be used as a type if the developer merely wants to pass
// along their API costs to the user. They would expose the token count
// from a service provider like OpenAI in this case.
// 'generations' can be used as a type if the developer wants to charge
// the user for each time they generated a piece of content, regardless
// of the API costs.
type: 'tokens',
quantity: numTokens, // e.g. 24
});
// User has credits
res.status(200).json({ llmResponse: llmResponse });
} else {
// Take the user to a checkout page where they can purchase additional
// credits to continue using the application.
const paymentURL = await benchmarkPayments.getPaymentURLForUser(userId);
// HTTP 402 Payment Required
res.status(402).json({ paymentURL: paymentURL });
}
}