contract-kit / src /adapters.ts
edgemindroboticslabs's picture
Initial contract-kit library
6dec997 verified
import type { ContractModel, ContractModelContext } from "./types.js";
export type OpenAIResponsesLikeClient = {
responses: {
create(input: {
model: string;
input: string;
temperature?: number;
signal?: AbortSignal;
}): Promise<{ output_text?: string }>;
};
};
export function openAIResponsesAdapter(
client: OpenAIResponsesLikeClient,
options: { model: string; temperature?: number }
): ContractModel {
return {
async generate(prompt: string, context: ContractModelContext) {
const response = await client.responses.create({
model: options.model,
input: prompt,
temperature: options.temperature,
signal: context.signal
});
if (typeof response.output_text !== "string") {
throw new Error("OpenAI response did not include output_text.");
}
return response.output_text;
}
};
}
export function staticModel(responses: string[]): ContractModel {
let index = 0;
return {
async generate() {
const response = responses[index];
index = Math.min(index + 1, responses.length - 1);
if (response === undefined) {
throw new Error("No static model responses configured.");
}
return response;
}
};
}