Open1

Deno で CLI

yuheitomiyuheitomi

Deno で気軽に CLI。OpenAI を呼び出すコード。chmod +x して使う。Vercel AI SDK が使いやすい。

#! /usr/bin/env -S deno run -NE --env

import { parseArgs } from "node:util";
import { smoothStream, streamText } from "npm:ai";
import { openai } from "npm:@ai-sdk/openai";
import pc from "npm:picocolors";
import process from "node:process";

async function main() {
  const { values } = parseArgs({
    args: Deno.args,
    options: {
      message: {
        type: "string",
        short: "m",
      },
    },
    allowPositionals: false,
  });

  let message = "";
  if (!values.message) {
    const input = prompt("Enter a message:");
    if (!input) {
      console.error("No message provided");
      Deno.exit(1);
    }
    message = input;
  } else {
    message = values.message;
  }

  const { textStream } = streamText({
    model: openai("gpt-4o-2024-11-20"),
    prompt: message,
    experimental_transform: smoothStream({ chunking: "word" }),
  });

  for await (const chunk of textStream) {
    process.stdout.write(pc.green(chunk));
  }
}

if (import.meta.main) {
  await main();
}