import type { ChatCompletionChunk } from 'openai/resources/chat/completions' import type { CompletionUsage } from 'openai/resources/completions' import { checkForForcedToolUsageOpenAI, createOpenAICompatibleStream } from '@/providers/utils' /** * Creates a ReadableStream from an xAI streaming response. * Uses the shared OpenAI-compatible streaming utility. */ export function createReadableStreamFromXAIStream( xaiStream: AsyncIterable, onComplete?: (content: string, usage: CompletionUsage) => void ): ReadableStream { return createOpenAICompatibleStream(xaiStream, 'xAI', onComplete) } /** * Creates a response format payload for xAI requests with JSON schema. */ export function createResponseFormatPayload( basePayload: any, allMessages: any[], responseFormat: any, currentMessages?: any[] ) { const payload = { ...basePayload, messages: currentMessages || allMessages, } if (responseFormat) { payload.response_format = { type: 'json_schema', json_schema: { name: responseFormat.name || 'structured_response', schema: responseFormat.schema || responseFormat, strict: responseFormat.strict !== false, }, } } return payload } /** * Checks if a forced tool was used in an xAI response. * Uses the shared OpenAI-compatible forced tool usage helper. */ export function checkForForcedToolUsage( response: any, toolChoice: string | { type: string; function?: { name: string }; name?: string; any?: any }, forcedTools: string[], usedForcedTools: string[] ): { hasUsedForcedTool: boolean; usedForcedTools: string[] } { return checkForForcedToolUsageOpenAI(response, toolChoice, 'xAI', forcedTools, usedForcedTools) }