openai-options.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { Schema } from "effect"
  2. import type { LLMRequest, ReasoningEffort, TextVerbosity as TextVerbosityValue } from "../../schema"
  3. import { ReasoningEfforts, TextVerbosity } from "../../schema"
  4. export const OpenAIReasoningEfforts = ReasoningEfforts.filter(
  5. (effort): effort is Exclude<ReasoningEffort, "max"> => effort !== "max",
  6. )
  7. export type OpenAIReasoningEffort = (typeof OpenAIReasoningEfforts)[number]
  8. const REASONING_EFFORTS = new Set<string>(ReasoningEfforts)
  9. const OPENAI_REASONING_EFFORTS = new Set<string>(OpenAIReasoningEfforts)
  10. const TEXT_VERBOSITY = new Set<string>(["low", "medium", "high"])
  11. export const OpenAIReasoningEffort = Schema.Literals(OpenAIReasoningEfforts)
  12. export const OpenAITextVerbosity = TextVerbosity
  13. const isAnyReasoningEffort = (effort: unknown): effort is ReasoningEffort =>
  14. typeof effort === "string" && REASONING_EFFORTS.has(effort)
  15. export const isReasoningEffort = (effort: unknown): effort is OpenAIReasoningEffort =>
  16. typeof effort === "string" && OPENAI_REASONING_EFFORTS.has(effort)
  17. const isTextVerbosity = (value: unknown): value is TextVerbosityValue =>
  18. typeof value === "string" && TEXT_VERBOSITY.has(value)
  19. const options = (request: LLMRequest) => request.providerOptions?.openai
  20. export const store = (request: LLMRequest): boolean | undefined => {
  21. const value = options(request)?.store
  22. return typeof value === "boolean" ? value : undefined
  23. }
  24. export const reasoningEffort = (request: LLMRequest): ReasoningEffort | undefined => {
  25. const value = options(request)?.reasoningEffort
  26. return isAnyReasoningEffort(value) ? value : undefined
  27. }
  28. export const reasoningSummary = (request: LLMRequest): "auto" | undefined => {
  29. return options(request)?.reasoningSummary === "auto" ? "auto" : undefined
  30. }
  31. export const encryptedReasoning = (request: LLMRequest) =>
  32. options(request)?.includeEncryptedReasoning === true ? true : undefined
  33. export const promptCacheKey = (request: LLMRequest) => {
  34. const value = options(request)?.promptCacheKey
  35. return typeof value === "string" ? value : undefined
  36. }
  37. export const textVerbosity = (request: LLMRequest) => {
  38. const value = options(request)?.textVerbosity
  39. return isTextVerbosity(value) ? value : undefined
  40. }
  41. export * as OpenAIOptions from "./openai-options"