MCPcopy Create free account
hub / github.com/Zoo-Code-Org/Zoo-Code / createMessage

Method createMessage

src/api/providers/xai.ts:87–143  ·  view source on GitHub ↗
(
		systemPrompt: string,
		messages: Anthropic.Messages.MessageParam[],
		metadata?: ApiHandlerCreateMessageMetadata,
	)

Source from the content-addressed store, hash-verified

85 }
86
87 override async *createMessage(
88 systemPrompt: string,
89 messages: Anthropic.Messages.MessageParam[],
90 metadata?: ApiHandlerCreateMessageMetadata,
91 ): ApiStream {
92 const model = this.getModel()
93
94 // Convert directly from Anthropic format to Responses API input format
95 const input = convertToResponsesApiInput(messages)
96 const responseTools = this.mapResponseTools(metadata?.tools)
97
98 // Build request options
99 const requestBody: Record<string, any> = {
100 model: model.id,
101 instructions: systemPrompt,
102 input: input,
103 stream: true,
104 store: false, // Don't store responses server-side for privacy
105 include: ["reasoning.encrypted_content"],
106 }
107
108 if (model.maxTokens) {
109 requestBody.max_output_tokens = model.maxTokens
110 }
111
112 if (model.temperature !== undefined) {
113 requestBody.temperature = model.temperature
114 }
115
116 if (responseTools) {
117 requestBody.tools = responseTools
118 // Cast tool_choice since metadata uses Chat Completions types but Responses API has its own type
119 requestBody.tool_choice = (metadata?.tool_choice ?? "auto") as any
120 requestBody.parallel_tool_calls = metadata?.parallelToolCalls ?? true
121 }
122
123 // Pass reasoning effort for models that support it (e.g., mini models)
124 if (model.reasoning) {
125 requestBody.reasoning = model.reasoning
126 }
127
128 let stream: AsyncIterable<any>
129 try {
130 stream = (await this.client.responses.create({
131 ...requestBody,
132 stream: true,
133 } as any)) as unknown as AsyncIterable<any>
134 } catch (error) {
135 const errorMessage = error instanceof Error ? error.message : String(error)
136 const apiError = new ApiProviderError(errorMessage, this.providerName, model.id, "createMessage")
137 TelemetryService.instance.captureException(apiError)
138 throw handleOpenAIError(error, this.providerName)
139 }
140
141 const normalizeUsage = createUsageNormalizer()
142 yield* processResponsesApiStream(stream, normalizeUsage)
143 }
144

Callers

nothing calls this directly

Calls 9

getModelMethod · 0.95
mapResponseToolsMethod · 0.95
handleOpenAIErrorFunction · 0.90
createUsageNormalizerFunction · 0.90
captureExceptionMethod · 0.65
StringInterface · 0.50
createMethod · 0.45

Tested by

no test coverage detected