Add structured-output support (#4793)

Add samples and docs.
This commit is contained in:
pakrym-oai
2025-10-05 18:17:50 -07:00
committed by GitHub
parent a90a58f7a1
commit 90fe5e4a7e
15 changed files with 291 additions and 26 deletions

View File

@@ -5,13 +5,9 @@ import { stdin as input, stdout as output } from "node:process";
import { Codex } from "@openai/codex-sdk";
import type { ThreadEvent, ThreadItem } from "@openai/codex-sdk";
import path from "node:path";
import { codexPathOverride } from "./helpers.ts";
const codexPathOverride =
process.env.CODEX_EXECUTABLE ??
path.join(process.cwd(), "..", "..", "codex-rs", "target", "debug", "codex");
const codex = new Codex({ codexPathOverride });
const codex = new Codex({ codexPathOverride: codexPathOverride() });
const thread = codex.startThread();
const rl = createInterface({ input, output });

View File

@@ -0,0 +1,6 @@
import path from "node:path";
export function codexPathOverride() {
return process.env.CODEX_EXECUTABLE ??
path.join(process.cwd(), "..", "..", "codex-rs", "target", "debug", "codex");
}

View File

@@ -0,0 +1,22 @@
#!/usr/bin/env -S NODE_NO_WARNINGS=1 pnpm ts-node-esm --files
import { Codex } from "@openai/codex-sdk";
import { codexPathOverride } from "./helpers.ts";
const codex = new Codex({ codexPathOverride: codexPathOverride() });
const thread = codex.startThread();
const schema = {
type: "object",
properties: {
summary: { type: "string" },
status: { type: "string", enum: ["ok", "action_required"] },
},
required: ["summary", "status"],
additionalProperties: false,
} as const;
const turn = await thread.run("Summarize repository status", { outputSchema: schema });
console.log(turn.finalResponse);

View File

@@ -0,0 +1,19 @@
#!/usr/bin/env -S NODE_NO_WARNINGS=1 pnpm ts-node-esm --files
import { Codex } from "@openai/codex-sdk";
import { codexPathOverride } from "./helpers.ts";
import z from "zod";
import zodToJsonSchema from "zod-to-json-schema";
const codex = new Codex({ codexPathOverride: codexPathOverride() });
const thread = codex.startThread();
const schema = z.object({
summary: z.string(),
status: z.enum(["ok", "action_required"]),
});
const turn = await thread.run("Summarize repository status", {
outputSchema: zodToJsonSchema(schema, { target: "openAi" }),
});
console.log(turn.finalResponse);