New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

gfa

Package Overview
Dependencies
Maintainers
0
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gfa

LLM-powered command-line tool that generates structured data based on Zod schemas and serves it as a REST API

  • 0.3.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
6
decreased by-68.42%
Maintainers
0
Weekly downloads
 
Created
Source

gfa

gfa (generate-fake-api) is a LLM-powered command-line tool that generates structured data based on Zod schemas and serves it as a REST API. You can think of it as an AI-driven json-server. Just define a seed file with the resources you want to generate, and gfa will take care of the rest.

tl;dr

You define a seed file with the resources you want to generate:

import type { Seed } from "gfa";
import { z } from "zod";

export default {
  posts: {
    prompt: "Generate 3 blog posts. The title should be between 5 and 10 words and the body should be between 50 and 100 words.",
    schema: z.object({
      id: z.number(),
      title: z.string(),
      body: z.string(),
    }),
  },
} satisfies Seed;

You get a fake REST API with the resources you defined:

$ npx gfa seed.ts
✔ Resources generated (total tokens: 453)

Serving API on http://localhost:3000 (Press Ctrl-C to quit)

Available routes:
GET     /api/posts
GET     /api/posts/:id
POST    /api/posts
PUT     /api/posts/:id
PATCH   /api/posts/:id
DELETE  /api/posts/:id

Usage

gfa currently supports the following AI providers for generating data:

You need an API key from one of these providers to use gfa. Once you have your API key, set it as an environment variable, either OPENAI_API_KEY or ANTHROPIC_API_KEY, using the export command. For example:

export OPENAI_API_KEY=your-api-key

After setting the API key, install the dependencies in your project:

npm install gfa zod --save-dev

Next, create a seed file. The seed file should export an object that satisfies the Seed type from gfa. The seed object should have keys that represent the resources you want to generate. Each resource should have a schema key that describes the shape of the resource using a ZodObject instance. Resources can also have an optional prompt key that describes the prompt to generate the resource. Resources are considered to be plural by default, i.e., they are arrays of objects. If you want to generate a single object instead of an array, you can set the single key to true.

Here is an example seed file:

import type { Seed } from "gfa";
import { z } from "zod";

export default {
  posts: {
    prompt: "Generate 3 posts",
    schema: z.object({
      id: z.number(),
      title: z.string(),
      views: z.number(),
    }),
  },
  comments: {
    prompt: "Generate 5 comments. postIds should be between 1 and 3",
    schema: z.object({
      id: z.number(),
      text: z.string(),
      postId: z.number(),
    }),
  },
  profile: {
    single: true,
    prompt: "Generate a profile",
    schema: z.object({
      name: z.string(),
    }),
  },
} satisfies Seed;

Now you can run the gfa command to generate resources and serve the API:

$ npx gfa seed.ts
✔ Resources generated (total tokens: 383)

Serving API on http://localhost:3000 (Press Ctrl-C to quit)

Available routes:
GET     /api/posts
GET     /api/posts/:id
POST    /api/posts
PUT     /api/posts/:id
PATCH   /api/posts/:id
DELETE  /api/posts/:id
GET     /api/comments
GET     /api/comments/:id
POST    /api/comments
PUT     /api/comments/:id
PATCH   /api/comments/:id
DELETE  /api/comments/:id
GET     /api/profile
PUT     /api/profile
PATCH   /api/profile

The API is now running at http://localhost:3000. You can interact with it using curl or a tool like Postman. Here is an example request using curl:

$ curl -s http://localhost:3000/api/posts | jq .
[
  {
    "id": 1,
    "title": "Exploring the Wonders of Nature",
    "views": 150
  },
  {
    "id": 2,
    "title": "The Future of Technology: Trends to Watch",
    "views": 200
  },
  {
    "id": 3,
    "title": "Healthy Eating: Tips for a Balanced Diet",
    "views": 120
  }
]
$ curl -s 'http://localhost:3000/api/posts?page=2&per_page=2' | jq .
[
  {
    "id": 3,
    "title": "Healthy Eating: Tips for a Balanced Diet",
    "views": 120
  }
]

Options

-m, --modelId

Specifies the model ID to use for generating data. The default is gpt-4o-2024-08-06. For a list of available model IDs, see the Available Model Ids section.

npx gfa seed.ts --modelId 'gpt-4o-mini'

--regenerate

Generates new data for the resources specified in the seed file even if the data already exists.

npx gfa seed.ts --regenerate

-p, --port

Specifies the port on which to serve the API. The default is 3000.

npx gfa seed.ts --port 8888

-s, --serve

Specifies the resources path to serve. If the option is set, gfa will not generate new data but will serve the data from the specified path. The path should be point to a JSON file that contains the following structure:

{
  "resource_a": [
    {
      "id": 1,
      "name": "Resource A 1"
    },
    {
      "id": 2,
      "name": "Resource A 2"
    }
  ],
  "resource_b": {
    "description": "Resource B"
  },
  ...
}

Note that data in arrays should have an id field. Without an id field, some routes (e.g., GET /resource_a/[id]) will not function properly.

--basePath

Specifies the base path for the API. The base path, which defaults to /api, is prepended to all routes.

npx gfa seed.ts --basePath '/v1'

Now the API will be served on http://localhost:3000/v1.

Available Model Ids

  • Open AI
    • gpt-4o
    • gpt-4o-2024-05-13
    • gpt-4o-2024-08-06 (default)
    • gpt-4o-mini
    • gpt-4o-mini-2024-07-18
    • gpt-4-turbo
    • gpt-4-turbo-2024-04-09
    • gpt-4-turbo-preview
    • gpt-4-0125-preview
    • gpt-4-1106-preview
    • gpt-4
    • gpt-4-0613
    • gpt-3.5-turbo-0125
    • gpt-3.5-turbo
    • gpt-3.5-turbo-1106
  • Anthropic
    • claude-3-5-sonnet-20240620
    • claude-3-opus-20240229
    • claude-3-sonnet-20240229
    • claude-3-haiku-20240307

URL Parameters

page

GET /api/posts?page=2

per_page

GET /api/posts?per_page=5

FAQ

Where can I find the generated data?

gfa generates the data into the node_modules/gfa/dist directory. You can tweak the data or add more data to the generated files if you want.

If I modify the resources through the API, will the changes be saved?

Currently, gfa does not save the changes made to the resources through the API.

How much does it cost to use gfa?

The cost of using gfa varies based on the AI provider and the amount of data you generate. gfa displays the total number of tokens generated each time you run the command. For the details of the pricing, please refer to the pricing pages of the AI providers:

Keywords

FAQs

Package last updated on 11 Aug 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc