Reasoning
Responses API Beta
The Responses API Beta supports advanced reasoning capabilities, allowing models to show their internal reasoning process with configurable effort levels.
Reasoning Configuration
Configure reasoning behavior using the reasoning parameter:
responses-reasoning-01.js
const response = await fetch("https://novapai.ai/api/v1/responses", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_NOVASTACK_AI_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "openai/o4-mini",
input: "What is the meaning of life?",
reasoning: {
effort: "high",
},
max_output_tokens: 9000,
}),
});
const result = await response.json();
console.log(result);Reasoning Effort Levels
The effort parameter controls how much computational effort the model puts into reasoning:
| Effort Level | Description |
|---|---|
minimal | Basic reasoning with minimal computational effort |
low | Light reasoning for simple problems |
medium | Balanced reasoning for moderate complexity |
high | Deep reasoning for complex problems |
Complex Reasoning Example
For complex mathematical or logical problems:
responses-reasoning-02.js
const response = await fetch("https://novapai.ai/api/v1/responses", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_NOVASTACK_AI_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "openai/o4-mini",
input: [
{
type: "message",
role: "user",
content: [
{
type: "input_text",
text: "Was 1995 30 years ago? Please show your reasoning.",
},
],
},
],
reasoning: {
effort: "high",
},
max_output_tokens: 9000,
}),
});
const result = await response.json();
console.log(result);Reasoning in Conversation Context
Include reasoning in multi-turn conversations:
responses-reasoning-03.js
const response = await fetch("https://novapai.ai/api/v1/responses", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_NOVASTACK_AI_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "openai/o4-mini",
input: [
{
type: "message",
role: "user",
content: [
{
type: "input_text",
text: "What is your favorite color?",
},
],
},
{
type: "message",
role: "assistant",
id: "msg_abc123",
status: "completed",
content: [
{
type: "output_text",
text: "I don't have a favorite color.",
annotations: [],
},
],
},
{
type: "message",
role: "user",
content: [
{
type: "input_text",
text: "How many Earths can fit on Mars?",
},
],
},
],
reasoning: {
effort: "high",
},
max_output_tokens: 9000,
}),
});
const result = await response.json();
console.log(result);Streaming Reasoning
Enable streaming to see reasoning develop in real-time:
responses-reasoning-04.js
const response = await fetch("https://novapai.ai/api/v1/responses", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_NOVASTACK_AI_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "openai/o4-mini",
input:
"Solve this step by step: If a train travels 60 mph for 2.5 hours, how far does it go?",
reasoning: {
effort: "medium",
},
stream: true,
max_output_tokens: 9000,
}),
});
const reader = response.body?.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split("\n");
for (const line of lines) {
if (line.startsWith("data: ")) {
const data = line.slice(6);
if (data === "[DONE]") return;
try {
const parsed = JSON.parse(data);
if (parsed.type === "response.reasoning.delta") {
console.log("Reasoning:", parsed.delta);
}
} catch (e) {
// Skip invalid JSON
}
}
}
}Response with Reasoning
When reasoning is enabled, the response includes reasoning information:
responses-reasoning-05.json
{
"id": "resp_1234567890",
"object": "response",
"created_at": 1234567890,
"model": "openai/o4-mini",
"output": [
{
"type": "reasoning",
"id": "rs_abc123",
"encrypted_content": "gAAAAABotI9-FK1PbhZhaZk4yMrZw3XDI1AWFaKb9T0NQq7LndK6zaRB...",
"summary": [
"First, I need to determine the current year",
"Then calculate the difference from 1995",
"Finally, compare that to 30 years"
]
},
{
"type": "message",
"id": "msg_xyz789",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Yes. In 2025, 1995 was 30 years ago. In fact, as of today (Aug 31, 2025), it's exactly 30 years since Aug 31, 1995.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 15,
"output_tokens": 85,
"output_tokens_details": {
"reasoning_tokens": 45
},
"total_tokens": 100
},
"status": "completed"
}Best Practices
. **Choose appropriate effort levels**: Use `high` for complex problems, `low` for simple tasks
. **Consider token usage**: Reasoning increases token consumption
. **Use streaming**: For long reasoning chains, streaming provides better user experience
. **Include context**: Provide sufficient context for the model to reason effectivelyNext Steps
- Explore Tool Calling with reasoning
- Learn about Web Search integration
- Review Basic Usage fundamentals