@promptbook/remote-server 0.105.0-7 → 0.105.0-9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,6 @@
1
+ import { string_javascript_name } from '../../_packages/types.index';
1
2
  import type { AgentModelRequirements } from '../../book-2.0/agent-source/AgentModelRequirements';
3
+ import { ToolFunction } from '../../scripting/javascript/JavascriptExecutionToolsOptions';
2
4
  import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
3
5
  /**
4
6
  * USE SEARCH ENGINE commitment definition
@@ -32,6 +34,10 @@ export declare class UseSearchEngineCommitmentDefinition extends BaseCommitmentD
32
34
  */
33
35
  get documentation(): string;
34
36
  applyToAgentModelRequirements(requirements: AgentModelRequirements, content: string): AgentModelRequirements;
37
+ /**
38
+ * Gets the `web_search` tool function implementation.
39
+ */
40
+ getToolFunctions(): Record<string_javascript_name, ToolFunction>;
35
41
  }
36
42
  /**
37
43
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -15,7 +15,7 @@ export declare const BOOK_LANGUAGE_VERSION: string_semantic_version;
15
15
  export declare const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version;
16
16
  /**
17
17
  * Represents the version string of the Promptbook engine.
18
- * It follows semantic versioning (e.g., `0.105.0-6`).
18
+ * It follows semantic versioning (e.g., `0.105.0-8`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/remote-server",
3
- "version": "0.105.0-7",
3
+ "version": "0.105.0-9",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -95,7 +95,7 @@
95
95
  "module": "./esm/index.es.js",
96
96
  "typings": "./esm/typings/src/_packages/remote-server.index.d.ts",
97
97
  "peerDependencies": {
98
- "@promptbook/core": "0.105.0-7"
98
+ "@promptbook/core": "0.105.0-9"
99
99
  },
100
100
  "dependencies": {
101
101
  "colors": "1.4.0",
package/umd/index.umd.js CHANGED
@@ -47,7 +47,7 @@
47
47
  * @generated
48
48
  * @see https://github.com/webgptorg/promptbook
49
49
  */
50
- const PROMPTBOOK_ENGINE_VERSION = '0.105.0-7';
50
+ const PROMPTBOOK_ENGINE_VERSION = '0.105.0-9';
51
51
  /**
52
52
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
53
53
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -11565,6 +11565,46 @@
11565
11565
  * Note: [💞] Ignore a discrepancy between file name and entity name
11566
11566
  */
11567
11567
 
11568
+ /**
11569
+ * A search engine implementation that uses the SerpApi to fetch Google search results.
11570
+ *
11571
+ * @private <- TODO: !!!! Export via some package
11572
+ */
11573
+ class SerpSearchEngine {
11574
+ get title() {
11575
+ return 'SerpApi Search Engine';
11576
+ }
11577
+ get description() {
11578
+ return 'Search engine that uses SerpApi to fetch Google search results';
11579
+ }
11580
+ checkConfiguration() {
11581
+ if (!process.env.SERP_API_KEY) {
11582
+ throw new Error('SERP_API_KEY is not configured');
11583
+ }
11584
+ }
11585
+ async search(query) {
11586
+ const apiKey = process.env.SERP_API_KEY;
11587
+ if (!apiKey) {
11588
+ throw new Error('SERP_API_KEY is not configured');
11589
+ }
11590
+ const url = new URL('https://serpapi.com/search');
11591
+ url.searchParams.set('q', query);
11592
+ url.searchParams.set('api_key', apiKey);
11593
+ url.searchParams.set('engine', 'google');
11594
+ const response = await fetch(url.toString());
11595
+ if (!response.ok) {
11596
+ const body = await response.text();
11597
+ throw new Error(`SerpApi failed with status ${response.status}: ${response.statusText}\n${body}`);
11598
+ }
11599
+ const data = (await response.json());
11600
+ return (data.organic_results || []).map((item) => ({
11601
+ title: item.title,
11602
+ url: item.link,
11603
+ snippet: item.snippet || '',
11604
+ }));
11605
+ }
11606
+ }
11607
+
11568
11608
  /**
11569
11609
  * USE SEARCH ENGINE commitment definition
11570
11610
  *
@@ -11641,18 +11681,13 @@
11641
11681
  ? existingTools
11642
11682
  : [
11643
11683
  ...existingTools,
11644
- { type: 'web_search' },
11645
- // <- Note: [🔰] This is just using simple native search tool by OpenAI @see https://platform.openai.com/docs/guides/tools-web-search
11646
- // In future we will use proper MCP search tool:
11647
- /*
11648
-
11649
11684
  {
11650
11685
  name: 'web_search',
11651
- description: spaceTrim(`
11652
- Search the internet for information.
11653
- Use this tool when you need to find up-to-date information or facts that you don't know.
11654
- ${!content ? '' : `Search scope / instructions: ${content}`}
11655
- `),
11686
+ description: spaceTrim$1.spaceTrim(`
11687
+ Search the internet for information.
11688
+ Use this tool when you need to find up-to-date information or facts that you don't know.
11689
+ ${!content ? '' : `Search scope / instructions: ${content}`}
11690
+ `),
11656
11691
  parameters: {
11657
11692
  type: 'object',
11658
11693
  properties: {
@@ -11664,7 +11699,6 @@
11664
11699
  required: ['query'],
11665
11700
  },
11666
11701
  },
11667
- */
11668
11702
  ];
11669
11703
  // Return requirements with updated tools and metadata
11670
11704
  return {
@@ -11676,6 +11710,33 @@
11676
11710
  },
11677
11711
  };
11678
11712
  }
11713
+ /**
11714
+ * Gets the `web_search` tool function implementation.
11715
+ */
11716
+ getToolFunctions() {
11717
+ return {
11718
+ async web_search(args) {
11719
+ console.log('!!!! [Tool] web_search called', { args });
11720
+ const { query } = args;
11721
+ if (!query) {
11722
+ throw new Error('Search query is required');
11723
+ }
11724
+ const searchEngine = new SerpSearchEngine();
11725
+ const results = await searchEngine.search(query);
11726
+ return spaceTrim$1.spaceTrim((block) => `
11727
+ Search results for "${query}":
11728
+
11729
+ ${block(results
11730
+ .map((result) => spaceTrim$1.spaceTrim(`
11731
+ - **${result.title}**
11732
+ ${result.url}
11733
+ ${result.snippet}
11734
+ `))
11735
+ .join('\n\n'))}
11736
+ `);
11737
+ },
11738
+ };
11739
+ }
11679
11740
  }
11680
11741
  /**
11681
11742
  * Note: [💞] Ignore a discrepancy between file name and entity name