Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/hip-needles-love.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@openai/agents-core': patch
---

Update internal module in agents-core to accept a custom logger
7 changes: 4 additions & 3 deletions packages/agents-core/src/runImplementation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
RunToolCallItem,
RunToolCallOutputItem,
} from './items';
import logger from './logger';
import logger, { Logger } from './logger';
import { ModelResponse, ModelSettings } from './model';
import { ComputerTool, FunctionTool, Tool, FunctionToolResult } from './tool';
import { AgentInputItem, UnknownContext } from './types';
Expand Down Expand Up @@ -695,7 +695,9 @@ export async function executeComputerActions(
actions: ToolRunComputer[],
runner: Runner,
runContext: RunContext,
customLogger: Logger | undefined = undefined,
): Promise<RunItem[]> {
const _logger = customLogger ?? logger;
const results: RunItem[] = [];
for (const action of actions) {
const computer = action.computer.computer;
Expand All @@ -712,7 +714,7 @@ export async function executeComputerActions(
try {
output = await _runComputerActionAndScreenshot(computer, toolCall);
} catch (err) {
logger.error('Failed to execute computer action:', err);
_logger.error('Failed to execute computer action:', err);
output = '';
}

Expand Down Expand Up @@ -930,7 +932,6 @@ export async function checkForFinalOutputFromTools<
return toolUseBehavior(state._context, toolResults);
}

logger.error('Invalid toolUseBehavior: ', toolUseBehavior);
throw new UserError(`Invalid toolUseBehavior: ${toolUseBehavior}`, state);
}

Expand Down
4 changes: 4 additions & 0 deletions packages/agents-core/test/run.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import {
run,
Runner,
setDefaultModelProvider,
setTraceProcessors,
setTracingDisabled,
BatchTraceProcessor,
} from '../src';
import { RunStreamEvent } from '../src/events';
import { handoff } from '../src/handoff';
Expand All @@ -25,6 +27,7 @@ import {
FakeModel,
fakeModelMessage,
FakeModelProvider,
FakeTracingExporter,
TEST_MODEL_MESSAGE,
TEST_MODEL_RESPONSE_BASIC,
TEST_TOOL,
Expand Down Expand Up @@ -425,6 +428,7 @@ describe('Runner.run', () => {

it('does nothing when no input guardrails are configured', async () => {
setTracingDisabled(false);
setTraceProcessors([new BatchTraceProcessor(new FakeTracingExporter())]);
const agent = new Agent({
name: 'NoIG',
model: new FakeModel([
Expand Down
2 changes: 2 additions & 0 deletions packages/agents-core/test/runImplementation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import * as protocol from '../src/types/protocol';
import { Runner } from '../src/run';
import { RunContext } from '../src/runContext';
import { setDefaultModelProvider } from '../src';
import { Logger } from '../src/logger';

beforeAll(() => {
setTracingDisabled(true);
Expand Down Expand Up @@ -627,6 +628,7 @@ describe('executeComputerActions', () => {
[call],
new Runner({ tracingDisabled: true }),
new RunContext(),
{ error: (_: string) => {} } as unknown as Logger,
),
);

Expand Down
8 changes: 4 additions & 4 deletions packages/agents-core/test/runState.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,21 +50,21 @@ describe('RunState', () => {
expect(JSON.parse(str)).toEqual(json);
});

it('throws error if schema version is missing or invalid', () => {
it('throws error if schema version is missing or invalid', async () => {
const context = new RunContext();
const agent = new Agent({ name: 'Agent1' });
const state = new RunState(context, 'input1', agent, 2);
const jsonVersion = state.toJSON() as any;
delete jsonVersion.$schemaVersion;

const str = JSON.stringify(jsonVersion);
expect(async () => await RunState.fromString(agent, str)).rejects.toThrow(
await expect(() => RunState.fromString(agent, str)).rejects.toThrow(
'Run state is missing schema version',
);

jsonVersion.$schemaVersion = '0.1';
expect(
async () => await RunState.fromString(agent, JSON.stringify(jsonVersion)),
await expect(() =>
RunState.fromString(agent, JSON.stringify(jsonVersion)),
).rejects.toThrow(
`Run state schema version 0.1 is not supported. Please use version ${CURRENT_SCHEMA_VERSION}`,
);
Expand Down
76 changes: 74 additions & 2 deletions packages/agents-core/test/shims/mcp-stdio/node.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,29 @@
import { describe, test, expect } from 'vitest';
import { describe, test, expect, vi, afterAll, beforeAll } from 'vitest';
import { NodeMCPServerStdio } from '../../../src/shims/mcp-stdio/node';
import { TransportSendOptions } from '@modelcontextprotocol/sdk/shared/transport';
import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';

describe('NodeMCPServerStdio', () => {
beforeAll(() => {
vi.mock(
'@modelcontextprotocol/sdk/client/stdio.js',
async (importOriginal) => {
return {
...(await importOriginal()),
StdioClientTransport: MockStdioClientTransport,
};
},
);
vi.mock(
'@modelcontextprotocol/sdk/client/index.js',
async (importOriginal) => {
return {
...(await importOriginal()),
Client: MockClient,
};
},
);
});
test('should be available', async () => {
const server = new NodeMCPServerStdio({
name: 'test',
Expand All @@ -11,6 +33,56 @@ describe('NodeMCPServerStdio', () => {
expect(server).toBeDefined();
expect(server.name).toBe('test');
expect(server.cacheToolsList).toBe(true);
await expect(server.connect()).rejects.toThrow();
await server.connect();
await server.close();
});

afterAll(() => {
vi.clearAllMocks();
});
});

class MockStdioClientTransport {
options: {
command: string;
args: string[];
env: Record<string, string>;
cwd: string;
};
constructor(options: {
command: string;
args: string[];
env: Record<string, string>;
cwd: string;
}) {
this.options = options;
}
start(): Promise<void> {
return Promise.resolve();
}
send(
_message: JSONRPCMessage,
_options?: TransportSendOptions,
): Promise<void> {
return Promise.resolve();
}
close(): Promise<void> {
return Promise.resolve();
}
}

class MockClient {
options: {
name: string;
version: string;
};
constructor(options: { name: string; version: string }) {
this.options = options;
}
connect(): Promise<void> {
return Promise.resolve();
}
close(): Promise<void> {
return Promise.resolve();
}
}
9 changes: 8 additions & 1 deletion packages/agents-core/test/stubs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import type { Computer } from '../src/computer';
import type { Environment } from '../src/computer';
import * as protocol from '../src/types/protocol';
import { Usage } from '../src/usage';
import { Span, Trace, TracingExporter } from '../src';

export const TEST_MODEL_MESSAGE: protocol.AssistantMessageItem = {
id: '123',
Expand Down Expand Up @@ -93,7 +94,7 @@ export class FakeComputer implements Computer {
dimensions: [number, number] = [1, 1];

async screenshot(): Promise<string> {
return '';
return 'img';
}
async click(_x: number, _y: number, _button: any): Promise<void> {}
async doubleClick(_x: number, _y: number): Promise<void> {}
Expand Down Expand Up @@ -134,3 +135,9 @@ export class FakeModelProvider implements ModelProvider {
return new FakeModel([TEST_MODEL_RESPONSE_BASIC]);
}
}

export class FakeTracingExporter implements TracingExporter {
export(_items: (Trace | Span<any>)[], _signal?: AbortSignal): Promise<void> {
return Promise.resolve();
}
}
2 changes: 1 addition & 1 deletion packages/agents-extensions/test/aiSdk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ describe('AiSdkModel.getStreamedResponse', () => {
}),
);

expect(async () => {
await expect(async () => {
const iter = model.getStreamedResponse({
input: 'hi',
tools: [],
Expand Down
1 change: 0 additions & 1 deletion packages/agents-extensions/test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ describe('TwilioRealtimeTransportLayer', () => {
const call = sendEventSpy.mock.calls.find(
(c) => c[0]?.type === 'conversation.item.truncate',
);
console.log('call', call);
expect(call?.[0].audio_end_ms).toBe(50);
});
});