( request: ProviderRequest, config: ResponsesProviderConfig )
| 53 | * Executes a Responses API request with tool-loop handling and streaming support. |
| 54 | */ |
| 55 | export async function executeResponsesProviderRequest( |
| 56 | request: ProviderRequest, |
| 57 | config: ResponsesProviderConfig |
| 58 | ): Promise<ProviderResponse | StreamingExecution> { |
| 59 | const { logger } = config |
| 60 | const fetchImpl = config.fetch ?? fetch |
| 61 | |
| 62 | logger.info(`Preparing ${config.providerLabel} request`, { |
| 63 | model: request.model, |
| 64 | hasSystemPrompt: !!request.systemPrompt, |
| 65 | hasMessages: !!request.messages?.length, |
| 66 | hasTools: !!request.tools?.length, |
| 67 | toolCount: request.tools?.length || 0, |
| 68 | hasResponseFormat: !!request.responseFormat, |
| 69 | stream: !!request.stream, |
| 70 | }) |
| 71 | |
| 72 | const allMessages: Message[] = [] |
| 73 | |
| 74 | if (request.systemPrompt) { |
| 75 | allMessages.push({ |
| 76 | role: 'system', |
| 77 | content: request.systemPrompt, |
| 78 | }) |
| 79 | } |
| 80 | |
| 81 | if (request.context) { |
| 82 | allMessages.push({ |
| 83 | role: 'user', |
| 84 | content: request.context, |
| 85 | }) |
| 86 | } |
| 87 | |
| 88 | if (request.messages) { |
| 89 | allMessages.push(...request.messages) |
| 90 | } |
| 91 | |
| 92 | const initialInput = buildResponsesInputFromMessages(allMessages, config.providerId) |
| 93 | |
| 94 | const basePayload: Record<string, unknown> = { |
| 95 | model: config.modelName, |
| 96 | } |
| 97 | |
| 98 | if (request.temperature !== undefined) basePayload.temperature = request.temperature |
| 99 | if (request.maxTokens != null) basePayload.max_output_tokens = request.maxTokens |
| 100 | |
| 101 | if (request.reasoningEffort !== undefined && request.reasoningEffort !== 'auto') { |
| 102 | basePayload.reasoning = { |
| 103 | effort: request.reasoningEffort, |
| 104 | summary: 'auto', |
| 105 | } |
| 106 | } |
| 107 | |
| 108 | if (request.verbosity !== undefined && request.verbosity !== 'auto') { |
| 109 | basePayload.text = { |
| 110 | ...((basePayload.text as Record<string, unknown>) ?? {}), |
| 111 | verbosity: request.verbosity, |
| 112 | } |
no test coverage detected