summaryrefslogtreecommitdiff
path: root/integration-tests/google_web_search.test.js
blob: 31747421d3d858595f2564a26bbdd87daad9fc6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

import { test } from 'node:test';
import { strict as assert } from 'assert';
import { TestRig, printDebugInfo, validateModelOutput } from './test-helper.js';

test('should be able to search the web', async () => {
  const rig = new TestRig();
  await rig.setup('should be able to search the web');

  let result;
  try {
    result = await rig.run(`what is the weather in London`);
  } catch (error) {
    // Network errors can occur in CI environments
    if (
      error.message.includes('network') ||
      error.message.includes('timeout')
    ) {
      console.warn('Skipping test due to network error:', error.message);
      return; // Skip the test
    }
    throw error; // Re-throw if not a network error
  }

  const foundToolCall = await rig.waitForToolCall('google_web_search');

  // Add debugging information
  if (!foundToolCall) {
    const allTools = printDebugInfo(rig, result);

    // Check if the tool call failed due to network issues
    const failedSearchCalls = allTools.filter(
      (t) =>
        t.toolRequest.name === 'google_web_search' && !t.toolRequest.success,
    );
    if (failedSearchCalls.length > 0) {
      console.warn(
        'google_web_search tool was called but failed, possibly due to network issues',
      );
      console.warn(
        'Failed calls:',
        failedSearchCalls.map((t) => t.toolRequest.args),
      );
      return; // Skip the test if network issues
    }
  }

  assert.ok(foundToolCall, 'Expected to find a call to google_web_search');

  // Validate model output - will throw if no output, warn if missing expected content
  const hasExpectedContent = validateModelOutput(
    result,
    ['weather', 'london'],
    'Google web search test',
  );

  // If content was missing, log the search queries used
  if (!hasExpectedContent) {
    const searchCalls = rig
      .readToolLogs()
      .filter((t) => t.toolRequest.name === 'google_web_search');
    if (searchCalls.length > 0) {
      console.warn(
        'Search queries used:',
        searchCalls.map((t) => t.toolRequest.args),
      );
    }
  }
});