reasoning.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { BetaThinkingConfigParam } from "@anthropic-ai/sdk/resources/beta"
  2. import OpenAI from "openai"
  3. import type { ModelInfo, ProviderSettings } from "@roo-code/types"
  4. import { shouldUseReasoningBudget, shouldUseReasoningEffort } from "../../shared/api"
  5. type ReasoningEffort = "low" | "medium" | "high"
  6. export type OpenRouterReasoningParams = {
  7. effort?: ReasoningEffort
  8. max_tokens?: number
  9. exclude?: boolean
  10. }
  11. export type AnthropicReasoningParams = BetaThinkingConfigParam
  12. export type OpenAiReasoningParams = { reasoning_effort: OpenAI.Chat.ChatCompletionCreateParams["reasoning_effort"] }
  13. export type GetModelReasoningOptions = {
  14. model: ModelInfo
  15. reasoningBudget: number | undefined
  16. reasoningEffort: ReasoningEffort | undefined
  17. settings: ProviderSettings
  18. }
  19. export const getOpenRouterReasoning = ({
  20. model,
  21. reasoningBudget,
  22. reasoningEffort,
  23. settings,
  24. }: GetModelReasoningOptions): OpenRouterReasoningParams | undefined =>
  25. shouldUseReasoningBudget({ model, settings })
  26. ? { max_tokens: reasoningBudget }
  27. : shouldUseReasoningEffort({ model, settings })
  28. ? { effort: reasoningEffort }
  29. : undefined
  30. export const getAnthropicReasoning = ({
  31. model,
  32. reasoningBudget,
  33. settings,
  34. }: GetModelReasoningOptions): AnthropicReasoningParams | undefined =>
  35. shouldUseReasoningBudget({ model, settings }) ? { type: "enabled", budget_tokens: reasoningBudget! } : undefined
  36. export const getOpenAiReasoning = ({
  37. model,
  38. reasoningEffort,
  39. settings,
  40. }: GetModelReasoningOptions): OpenAiReasoningParams | undefined =>
  41. shouldUseReasoningEffort({ model, settings }) ? { reasoning_effort: reasoningEffort } : undefined