File size: 1,266 Bytes
6dec997
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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;
    }
  };
}