Files
2025-11-30 08:25:09 +08:00

362 lines
8.8 KiB
Markdown

# Common Errors and Solutions
This reference documents known issues with OpenAI Agents SDK and their workarounds.
---
## Error 1: Zod Schema Type Errors with Tool Parameters
**Issue**: Type errors occur when using Zod schemas as tool parameters, even when structurally compatible.
**GitHub Issue**: [#188](https://github.com/openai/openai-agents-js/issues/188)
**Symptoms**:
```typescript
// This causes TypeScript errors
const myTool = tool({
name: 'my_tool',
parameters: myZodSchema, // ❌ Type error
execute: async (input) => { /* ... */ },
});
```
**Workaround**:
```typescript
// Define schema inline
const myTool = tool({
name: 'my_tool',
parameters: z.object({
field1: z.string(),
field2: z.number(),
}), // ✅ Works
execute: async (input) => { /* ... */ },
});
// Or use type assertion (temporary fix)
const myTool = tool({
name: 'my_tool',
parameters: myZodSchema as any, // ⚠️ Loses type safety
execute: async (input) => { /* ... */ },
});
```
**Status**: Known issue as of SDK v0.2.1
**Expected Fix**: Future SDK version
---
## Error 2: MCP Server Tracing Errors
**Issue**: "No existing trace found" error when initializing RealtimeAgent with MCP servers.
**GitHub Issue**: [#580](https://github.com/openai/openai-agents-js/issues/580)
**Symptoms**:
```
UnhandledPromiseRejection: Error: No existing trace found
at RealtimeAgent.init with MCP server
```
**Workaround**:
```typescript
// Ensure tracing is initialized before creating agent
import { initializeTracing } from '@openai/agents/tracing';
await initializeTracing();
// Then create realtime agent with MCP
const agent = new RealtimeAgent({
// ... agent config with MCP servers
});
```
**Status**: Reported October 2025
**Affects**: @openai/agents-realtime v0.0.8 - v0.1.9
---
## Error 3: MaxTurnsExceededError
**Issue**: Agent enters infinite loop and hits turn limit.
**Cause**: Agent keeps calling tools or delegating without reaching conclusion.
**Symptoms**:
```
MaxTurnsExceededError: Agent exceeded maximum turns (10)
```
**Solutions**:
1. **Increase maxTurns**:
```typescript
const result = await run(agent, input, {
maxTurns: 20, // Increase limit
});
```
2. **Improve Instructions**:
```typescript
const agent = new Agent({
instructions: `You are a helpful assistant.
IMPORTANT: After using tools or delegating, provide a final answer.
Do not endlessly loop or delegate back and forth.`,
});
```
3. **Add Exit Criteria**:
```typescript
const agent = new Agent({
instructions: `Answer the question using up to 3 tool calls.
After 3 tool calls, synthesize a final answer.`,
});
```
**Prevention**: Write clear instructions with explicit completion criteria.
---
## Error 4: ToolCallError (Transient Failures)
**Issue**: Tool execution fails temporarily (network, rate limits, external API issues).
**Symptoms**:
```
ToolCallError: Failed to execute tool 'search_api'
```
**Solution**: Implement retry logic with exponential backoff.
```typescript
import { ToolCallError } from '@openai/agents';
async function runWithRetry(agent, input, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
return await run(agent, input);
} catch (error) {
if (error instanceof ToolCallError && attempt < maxRetries) {
const delay = 1000 * Math.pow(2, attempt - 1);
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
throw error;
}
}
}
```
**See Template**: `templates/shared/error-handling.ts`
---
## Error 5: GuardrailExecutionError with Fallback
**Issue**: Guardrail itself fails (e.g., guardrail agent unavailable).
**Symptoms**:
```
GuardrailExecutionError: Guardrail 'safety_check' failed to execute
```
**Solution**: Implement fallback guardrails.
```typescript
import { GuardrailExecutionError } from '@openai/agents';
const primaryGuardrail = { /* ... */ };
const fallbackGuardrail = { /* simple keyword filter */ };
const agent = new Agent({
inputGuardrails: [primaryGuardrail],
});
try {
const result = await run(agent, input);
} catch (error) {
if (error instanceof GuardrailExecutionError && error.state) {
// Retry with fallback guardrail
agent.inputGuardrails = [fallbackGuardrail];
const result = await run(agent, error.state);
}
}
```
**See Template**: `templates/text-agents/agent-guardrails-input.ts`
---
## Error 6: Schema Mismatch (outputType vs Actual Output)
**Issue**: Agent returns data that doesn't match declared `outputType` schema.
**Cause**: Model sometimes deviates from schema despite instructions.
**Symptoms**:
```
Validation Error: Output does not match schema
```
**Solutions**:
1. **Add Validation Instructions**:
```typescript
const agent = new Agent({
instructions: `You MUST return data matching this exact schema.
Double-check your output before finalizing.`,
outputType: mySchema,
});
```
2. **Use Stricter Models**:
```typescript
const agent = new Agent({
model: 'gpt-4o', // More reliable than gpt-4o-mini for structured output
outputType: mySchema,
});
```
3. **Catch and Retry**:
```typescript
try {
const result = await run(agent, input);
// Validate output
mySchema.parse(result.finalOutput);
} catch (error) {
// Retry with stronger prompt
const retryResult = await run(agent,
`CRITICAL: Your previous output was invalid. Return valid JSON matching the schema exactly. ${input}`
);
}
```
---
## Error 7: Ollama Integration Failures
**Issue**: TypeScript Agent SDK fails to connect with Ollama models.
**GitHub Issue**: [#136](https://github.com/openai/openai-agents-js/issues/136)
**Symptoms**:
```
TypeError: Cannot read properties of undefined (reading 'completions')
```
**Cause**: SDK designed for OpenAI API format; Ollama requires adapter.
**Workaround**: Use Vercel AI SDK adapter or stick to OpenAI-compatible models.
**Status**: Experimental support; not officially supported.
---
## Error 8: Built-in webSearchTool Intermittent Errors
**Issue**: Built-in `webSearchTool()` sometimes throws exceptions.
**Symptoms**: Unpredictable failures when invoking web search.
**Workaround**:
```typescript
// Use custom search tool with error handling
const customSearchTool = tool({
name: 'search',
description: 'Search the web',
parameters: z.object({ query: z.string() }),
execute: async ({ query }) => {
try {
// Your search API (Tavily, Google, etc.)
const results = await fetch(`https://api.example.com/search?q=${query}`);
return await results.json();
} catch (error) {
return { error: 'Search temporarily unavailable' };
}
},
});
```
**Status**: Known issue in early SDK versions.
---
## Error 9: Agent Builder Export Bugs
**Issue**: Code exported from Agent Builder has bugs (template string escaping, state typing).
**Source**: [OpenAI Community](https://community.openai.com/t/bugs-in-agent-builder-exported-code-typescript-template-string-escaping-state-typing-and-property-naming/1362119)
**Symptoms**: Exported code doesn't compile or run.
**Solution**: Manually review and fix exported code before use.
---
## General Error Handling Pattern
**Comprehensive error handling template**:
```typescript
import {
MaxTurnsExceededError,
InputGuardrailTripwireTriggered,
OutputGuardrailTripwireTriggered,
ToolCallError,
GuardrailExecutionError,
ModelBehaviorError,
} from '@openai/agents';
try {
const result = await run(agent, input, { maxTurns: 10 });
return result;
} catch (error) {
if (error instanceof MaxTurnsExceededError) {
// Agent hit turn limit - logic issue
console.error('Agent looped too many times');
throw error;
} else if (error instanceof InputGuardrailTripwireTriggered) {
// Input blocked by guardrail - don't retry
console.error('Input blocked:', error.outputInfo);
return { error: 'Input not allowed' };
} else if (error instanceof OutputGuardrailTripwireTriggered) {
// Output blocked by guardrail - don't retry
console.error('Output blocked:', error.outputInfo);
return { error: 'Response blocked for safety' };
} else if (error instanceof ToolCallError) {
// Tool failed - retry with backoff
console.error('Tool failed:', error.toolName);
return retryWithBackoff(agent, input);
} else if (error instanceof GuardrailExecutionError) {
// Guardrail failed - use fallback
console.error('Guardrail failed');
return runWithFallbackGuardrail(agent, input);
} else if (error instanceof ModelBehaviorError) {
// Unexpected model behavior - don't retry
console.error('Model behavior error');
throw error;
} else {
// Unknown error
console.error('Unknown error:', error);
throw error;
}
}
```
**See Template**: `templates/shared/error-handling.ts`
---
**Last Updated**: 2025-10-26
**Sources**:
- [GitHub Issues](https://github.com/openai/openai-agents-js/issues)
- [OpenAI Community](https://community.openai.com/)
- SDK Documentation