@mastra/parallel 0.1.1 → 0.1.2-alpha.0
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.
- package/dist/client.d.ts.map +1 -1
- package/dist/index.cjs +10 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEtC,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEtC,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAmBhF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,MAAM,cAAc,CAO7F"}
|
package/dist/index.cjs
CHANGED
|
@@ -29,9 +29,18 @@ let zod = require("zod");
|
|
|
29
29
|
function getParallelClient(config) {
|
|
30
30
|
const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;
|
|
31
31
|
if (!apiKey) throw new Error("Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.");
|
|
32
|
+
const fetch = config?.fetch ?? globalThis.fetch;
|
|
32
33
|
return new parallel_web.default({
|
|
33
34
|
...config,
|
|
34
|
-
apiKey
|
|
35
|
+
apiKey,
|
|
36
|
+
fetch: (url, init) => {
|
|
37
|
+
const headers = new Headers(init?.headers);
|
|
38
|
+
headers.set("User-Agent", [headers.get("User-Agent"), "mastra"].filter(Boolean).join(" "));
|
|
39
|
+
return fetch(url, {
|
|
40
|
+
...init,
|
|
41
|
+
headers
|
|
42
|
+
});
|
|
43
|
+
}
|
|
35
44
|
});
|
|
36
45
|
}
|
|
37
46
|
function createLazyParallelClient(config) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["Parallel","z","inputSchema","z","outputSchema","toFetchPolicy","z"],"sources":["../src/client.ts","../src/schemas.ts","../src/search.ts","../src/extract.ts","../src/tools.ts"],"sourcesContent":["import Parallel from 'parallel-web';\nimport type { ClientOptions } from 'parallel-web';\n\nexport type ParallelClientOptions = ClientOptions;\nexport type ParallelClient = Parallel;\n\nexport function getParallelClient(config?: ParallelClientOptions): ParallelClient {\n const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;\n if (!apiKey) {\n throw new Error('Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.');\n }\n\n return new Parallel({ ...config, apiKey });\n}\n\nexport function createLazyParallelClient(config?: ParallelClientOptions): () => ParallelClient {\n let client: ParallelClient | undefined;\n\n return () => {\n client ??= getParallelClient(config);\n return client;\n };\n}\n","import { z } from 'zod';\n\nexport const usageItemSchema = z.object({\n name: z.string(),\n count: z.number(),\n});\n\nexport const warningSchema = z.object({\n type: z.string(),\n message: z.string(),\n detail: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const searchResultSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n});\n\nexport const fetchPolicySchema = z.object({\n maxAgeSeconds: z\n .number()\n .int()\n .min(600)\n .optional()\n .describe('Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600).'),\n timeoutSeconds: z.number().int().positive().optional().describe('Timeout in seconds for a live fetch.'),\n disableCacheFallback: z\n .boolean()\n .optional()\n .describe('Return an error instead of older cached content when a live fetch fails or times out.'),\n});\n\nexport type FetchPolicyInput = z.infer<typeof fetchPolicySchema>;\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, searchResultSchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst ISO_3166_ALPHA_2_CODES = new Set(\n `AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ\nBA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ\nCA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ\nDE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR\nGA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY\nHK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP\nKE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY\nMA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ\nNA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY\nQA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ\nTC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ\nVA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`\n .split(/\\s+/),\n);\n\nfunction isValidCalendarDate(value: string): boolean {\n const [yearText, monthText, dayText] = value.split('-');\n if (yearText === undefined || monthText === undefined || dayText === undefined) return false;\n\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1]!;\n}\n\nconst inputSchema = z\n .object({\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .describe('Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results.'),\n objective: z\n .string()\n .optional()\n .describe('A self-contained natural-language description of the goal driving the search.'),\n mode: z\n .enum(['turbo', 'fast', 'basic', 'advanced'])\n .optional()\n .describe('Search mode. Defaults to advanced when omitted.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n maxResults: z.number().int().positive().optional().describe('Maximum number of results to return.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each result.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total excerpt characters across all results.'),\n location: z\n .string()\n .refine(value => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), {\n message: 'location must be a valid ISO 3166-1 alpha-2 country code.',\n })\n .optional()\n .describe('ISO 3166-1 alpha-2 country code for geo-targeted results.'),\n includeDomains: z.array(z.string()).max(200).optional().describe('Only return results from these domains.'),\n excludeDomains: z.array(z.string()).max(200).optional().describe('Exclude results from these domains.'),\n afterDate: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .refine(isValidCalendarDate, { message: 'afterDate must be a valid calendar date in YYYY-MM-DD format.' })\n .optional()\n .describe('Only return content published on or after this YYYY-MM-DD date.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for search results.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n })\n .refine(input => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {\n message: 'includeDomains and excludeDomains can contain at most 200 domains combined.',\n path: ['includeDomains'],\n });\n\nconst outputSchema = z.object({\n searchId: z.string(),\n sessionId: z.string(),\n results: z.array(searchResultSchema),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype SearchInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toSearchParams(input: SearchInput): Parallel.SearchParams {\n const params: Parallel.SearchParams = {\n search_queries: input.searchQueries,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.mode !== undefined) params.mode = input.mode;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n const sourcePolicy =\n input.includeDomains !== undefined || input.excludeDomains !== undefined || input.afterDate !== undefined\n ? {\n include_domains: input.includeDomains,\n exclude_domains: input.excludeDomains,\n after_date: input.afterDate,\n }\n : undefined;\n\n if (\n input.maxResults !== undefined ||\n input.excerptMaxCharsPerResult !== undefined ||\n input.location !== undefined ||\n sourcePolicy !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n max_results: input.maxResults,\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n location: input.location,\n source_policy: sourcePolicy,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelSearchTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-search',\n description:\n 'Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().search(toSearchParams(input));\n\n return {\n searchId: response.search_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst inputSchema = z.object({\n urls: z.array(z.string().url()).min(1).max(20).describe('URLs to extract content from (1-20).'),\n objective: z\n .string()\n .optional()\n .describe('A natural-language description of the information to focus on while extracting.'),\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .optional()\n .describe('Optional keyword queries used with the objective to focus excerpts.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each URL.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n fullContent: z\n .union([z.boolean(), z.number().int().positive()])\n .optional()\n .describe('Return full page content. Pass a character limit instead of true to cap content per URL.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total characters across all extracted results.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for extracted URLs.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n});\n\nconst outputSchema = z.object({\n extractId: z.string(),\n sessionId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n fullContent: z.string().optional(),\n }),\n ),\n errors: z.array(\n z.object({\n url: z.string(),\n errorType: z.string(),\n httpStatusCode: z.number().optional(),\n content: z.string().optional(),\n }),\n ),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype ExtractInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toExtractParams(input: ExtractInput): Parallel.ExtractParams {\n const params: Parallel.ExtractParams = {\n urls: input.urls,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.searchQueries !== undefined) params.search_queries = input.searchQueries;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n if (\n input.excerptMaxCharsPerResult !== undefined ||\n input.fullContent !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n full_content:\n typeof input.fullContent === 'number' ? { max_chars_per_result: input.fullContent } : input.fullContent,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelExtractTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-extract',\n description:\n 'Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().extract(toExtractParams(input));\n\n return {\n extractId: response.extract_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n fullContent: result.full_content ?? undefined,\n })),\n errors: response.errors.map(error => ({\n url: error.url,\n errorType: error.error_type,\n httpStatusCode: error.http_status_code ?? undefined,\n content: error.content ?? undefined,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import type { ParallelClientOptions } from './client.js';\nimport { createParallelExtractTool } from './extract.js';\nimport { createParallelSearchTool } from './search.js';\n\nexport function createParallelTools(config?: ParallelClientOptions) {\n return {\n parallelSearch: createParallelSearchTool(config),\n parallelExtract: createParallelExtractTool(config),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAgB,kBAAkB,QAAgD;CAChF,MAAM,SAAS,QAAQ,UAAU,QAAQ,IAAI;CAC7C,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,iGAAiG;CAGnH,OAAO,IAAIA,aAAAA,QAAS;EAAE,GAAG;EAAQ;CAAO,CAAC;AAC3C;AAEA,SAAgB,yBAAyB,QAAsD;CAC7F,IAAI;CAEJ,aAAa;EACX,WAAW,kBAAkB,MAAM;EACnC,OAAO;CACT;AACF;;;ACpBA,MAAa,kBAAkBC,IAAAA,EAAE,OAAO;CACtC,MAAMA,IAAAA,EAAE,OAAO;CACf,OAAOA,IAAAA,EAAE,OAAO;AAClB,CAAC;AAED,MAAa,gBAAgBA,IAAAA,EAAE,OAAO;CACpC,MAAMA,IAAAA,EAAE,OAAO;CACf,SAASA,IAAAA,EAAE,OAAO;CAClB,QAAQA,IAAAA,EAAE,OAAOA,IAAAA,EAAE,OAAO,GAAGA,IAAAA,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;AACrD,CAAC;AAED,MAAa,qBAAqBA,IAAAA,EAAE,OAAO;CACzC,KAAKA,IAAAA,EAAE,OAAO;CACd,OAAOA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,aAAaA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;CACjC,UAAUA,IAAAA,EAAE,MAAMA,IAAAA,EAAE,OAAO,CAAC;AAC9B,CAAC;AAED,MAAa,oBAAoBA,IAAAA,EAAE,OAAO;CACxC,eAAeA,IAAAA,EACZ,OAAO,CAAC,CACR,IAAI,CAAC,CACL,IAAI,GAAG,CAAC,CACR,SAAS,CAAC,CACV,SAAS,4FAA4F;CACxG,gBAAgBA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,sCAAsC;CACtG,sBAAsBA,IAAAA,EACnB,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SAAS,uFAAuF;AACrG,CAAC;;;ACvBD,MAAM,yBAAyB,IAAI,IACjC;;;;;;;;;;;2CAYG,MAAM,KAAK,CAChB;AAEA,SAAS,oBAAoB,OAAwB;CACnD,MAAM,CAAC,UAAU,WAAW,WAAW,MAAM,MAAM,GAAG;CACtD,IAAI,aAAa,KAAA,KAAa,cAAc,KAAA,KAAa,YAAY,KAAA,GAAW,OAAO;CAEvF,MAAM,OAAO,OAAO,QAAQ;CAC5B,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,MAAM,OAAO,OAAO;CAC1B,MAAM,cAAc;EAClB;EACA,OAAO,MAAM,MAAM,OAAO,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK;EAChE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,OAAO,SAAS,KAAK,SAAS,MAAM,OAAO,KAAK,OAAO,YAAY,QAAQ;AAC7E;AAEA,MAAMC,gBAAcC,IAAAA,EACjB,OAAO;CACN,eAAeA,IAAAA,EACZ,MAAMA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,IAAI,CAAC,CAAC,CACN,SAAS,+FAA+F;CAC3G,WAAWA,IAAAA,EACR,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,+EAA+E;CAC3F,MAAMA,IAAAA,EACH,KAAK;EAAC;EAAS;EAAQ;EAAS;CAAU,CAAC,CAAC,CAC5C,SAAS,CAAC,CACV,SAAS,iDAAiD;CAC7D,aAAaA,IAAAA,EACV,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,oFAAoF;CAChG,YAAYA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,sCAAsC;CAClG,0BAA0BA,IAAAA,EACvB,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,uDAAuD;CACnE,eAAeA,IAAAA,EACZ,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,sDAAsD;CAClE,UAAUA,IAAAA,EACP,OAAO,CAAC,CACR,QAAO,UAAS,uBAAuB,IAAI,MAAM,YAAY,CAAC,GAAG,EAChE,SAAS,4DACX,CAAC,CAAC,CACD,SAAS,CAAC,CACV,SAAS,2DAA2D;CACvE,gBAAgBA,IAAAA,EAAE,MAAMA,IAAAA,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,yCAAyC;CAC1G,gBAAgBA,IAAAA,EAAE,MAAMA,IAAAA,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,qCAAqC;CACtG,WAAWA,IAAAA,EACR,OAAO,CAAC,CACR,MAAM,qBAAqB,CAAC,CAC5B,OAAO,qBAAqB,EAAE,SAAS,gEAAgE,CAAC,CAAC,CACzG,SAAS,CAAC,CACV,SAAS,iEAAiE;CAC7E,aAAa,kBAAkB,SAAS,CAAC,CAAC,SAAS,0DAA0D;CAC7G,WAAWA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,oEAAoE;AAChH,CAAC,CAAC,CACD,QAAO,WAAU,MAAM,gBAAgB,UAAU,MAAM,MAAM,gBAAgB,UAAU,MAAM,KAAK;CACjG,SAAS;CACT,MAAM,CAAC,gBAAgB;AACzB,CAAC;AAEH,MAAMC,iBAAeD,IAAAA,EAAE,OAAO;CAC5B,UAAUA,IAAAA,EAAE,OAAO;CACnB,WAAWA,IAAAA,EAAE,OAAO;CACpB,SAASA,IAAAA,EAAE,MAAM,kBAAkB;CACnC,OAAOA,IAAAA,EAAE,MAAM,eAAe,CAAC,CAAC,SAAS;CACzC,UAAUA,IAAAA,EAAE,MAAM,aAAa,CAAC,CAAC,SAAS;AAC5C,CAAC;AAID,SAASE,gBAAc,OAA+C;CACpE,OAAO;EACL,iBAAiB,MAAM;EACvB,iBAAiB,MAAM;EACvB,wBAAwB,MAAM;CAChC;AACF;AAEA,SAAS,eAAe,OAA2C;CACjE,MAAM,SAAgC,EACpC,gBAAgB,MAAM,cACxB;CAEA,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,YAAY,MAAM;CAC5D,IAAI,MAAM,SAAS,KAAA,GAAW,OAAO,OAAO,MAAM;CAClD,IAAI,MAAM,gBAAgB,KAAA,GAAW,OAAO,eAAe,MAAM;CACjE,IAAI,MAAM,kBAAkB,KAAA,GAAW,OAAO,kBAAkB,MAAM;CACtE,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,aAAa,MAAM;CAE7D,MAAM,eACJ,MAAM,mBAAmB,KAAA,KAAa,MAAM,mBAAmB,KAAA,KAAa,MAAM,cAAc,KAAA,IAC5F;EACE,iBAAiB,MAAM;EACvB,iBAAiB,MAAM;EACvB,YAAY,MAAM;CACpB,IACA,KAAA;CAEN,IACE,MAAM,eAAe,KAAA,KACrB,MAAM,6BAA6B,KAAA,KACnC,MAAM,aAAa,KAAA,KACnB,iBAAiB,KAAA,KACjB,MAAM,gBAAgB,KAAA,GAEtB,OAAO,oBAAoB;EACzB,aAAa,MAAM;EACnB,kBACE,MAAM,6BAA6B,KAAA,IAC/B,KAAA,IACA,EAAE,sBAAsB,MAAM,yBAAyB;EAC7D,UAAU,MAAM;EAChB,eAAe;EACf,cAAc,MAAM,gBAAgB,KAAA,IAAY,KAAA,IAAYA,gBAAc,MAAM,WAAW;CAC7F;CAGF,OAAO;AACT;AAEA,SAAgB,yBAAyB,QAAgC;CACvE,MAAM,YAAY,yBAAyB,MAAM;CAEjD,QAAA,GAAA,mBAAA,WAAA,CAAkB;EAChB,IAAI;EACJ,aACE;EACF,aAAA;EACA,cAAA;EACA,SAAS,OAAM,UAAS;GACtB,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,OAAO,eAAe,KAAK,CAAC;GAE/D,OAAO;IACL,UAAU,SAAS;IACnB,WAAW,SAAS;IACpB,SAAS,SAAS,QAAQ,KAAI,YAAW;KACvC,KAAK,OAAO;KACZ,OAAO,OAAO,SAAS,KAAA;KACvB,aAAa,OAAO,gBAAgB,KAAA;KACpC,UAAU,OAAO;IACnB,EAAE;IACF,OAAO,SAAS,SAAS,KAAA;IACzB,UAAU,SAAS,UAAU,KAAI,aAAY;KAC3C,MAAM,QAAQ;KACd,SAAS,QAAQ;KACjB,QAAQ,QAAQ,UAAU,KAAA;IAC5B,EAAE;GACJ;EACF;CACF,CAAC;AACH;;;ACzLA,MAAM,cAAcC,IAAAA,EAAE,OAAO;CAC3B,MAAMA,IAAAA,EAAE,MAAMA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,sCAAsC;CAC9F,WAAWA,IAAAA,EACR,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,iFAAiF;CAC7F,eAAeA,IAAAA,EACZ,MAAMA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,IAAI,CAAC,CAAC,CACN,SAAS,CAAC,CACV,SAAS,qEAAqE;CACjF,0BAA0BA,IAAAA,EACvB,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,oDAAoD;CAChE,aAAaA,IAAAA,EACV,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,oFAAoF;CAChG,aAAaA,IAAAA,EACV,MAAM,CAACA,IAAAA,EAAE,QAAQ,GAAGA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACjD,SAAS,CAAC,CACV,SAAS,0FAA0F;CACtG,eAAeA,IAAAA,EACZ,OAAO,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,SAAS,CAAC,CACV,SAAS,wDAAwD;CACpE,aAAa,kBAAkB,SAAS,CAAC,CAAC,SAAS,0DAA0D;CAC7G,WAAWA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,oEAAoE;AAChH,CAAC;AAED,MAAM,eAAeA,IAAAA,EAAE,OAAO;CAC5B,WAAWA,IAAAA,EAAE,OAAO;CACpB,WAAWA,IAAAA,EAAE,OAAO;CACpB,SAASA,IAAAA,EAAE,MACTA,IAAAA,EAAE,OAAO;EACP,KAAKA,IAAAA,EAAE,OAAO;EACd,OAAOA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EAC3B,aAAaA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EACjC,UAAUA,IAAAA,EAAE,MAAMA,IAAAA,EAAE,OAAO,CAAC;EAC5B,aAAaA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;CACnC,CAAC,CACH;CACA,QAAQA,IAAAA,EAAE,MACRA,IAAAA,EAAE,OAAO;EACP,KAAKA,IAAAA,EAAE,OAAO;EACd,WAAWA,IAAAA,EAAE,OAAO;EACpB,gBAAgBA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EACpC,SAASA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,CAAC,CACH;CACA,OAAOA,IAAAA,EAAE,MAAM,eAAe,CAAC,CAAC,SAAS;CACzC,UAAUA,IAAAA,EAAE,MAAM,aAAa,CAAC,CAAC,SAAS;AAC5C,CAAC;AAID,SAAS,cAAc,OAA+C;CACpE,OAAO;EACL,iBAAiB,MAAM;EACvB,iBAAiB,MAAM;EACvB,wBAAwB,MAAM;CAChC;AACF;AAEA,SAAS,gBAAgB,OAA6C;CACpE,MAAM,SAAiC,EACrC,MAAM,MAAM,KACd;CAEA,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,YAAY,MAAM;CAC5D,IAAI,MAAM,kBAAkB,KAAA,GAAW,OAAO,iBAAiB,MAAM;CACrE,IAAI,MAAM,gBAAgB,KAAA,GAAW,OAAO,eAAe,MAAM;CACjE,IAAI,MAAM,kBAAkB,KAAA,GAAW,OAAO,kBAAkB,MAAM;CACtE,IAAI,MAAM,cAAc,KAAA,GAAW,OAAO,aAAa,MAAM;CAE7D,IACE,MAAM,6BAA6B,KAAA,KACnC,MAAM,gBAAgB,KAAA,KACtB,MAAM,gBAAgB,KAAA,GAEtB,OAAO,oBAAoB;EACzB,kBACE,MAAM,6BAA6B,KAAA,IAC/B,KAAA,IACA,EAAE,sBAAsB,MAAM,yBAAyB;EAC7D,cACE,OAAO,MAAM,gBAAgB,WAAW,EAAE,sBAAsB,MAAM,YAAY,IAAI,MAAM;EAC9F,cAAc,MAAM,gBAAgB,KAAA,IAAY,KAAA,IAAY,cAAc,MAAM,WAAW;CAC7F;CAGF,OAAO;AACT;AAEA,SAAgB,0BAA0B,QAAgC;CACxE,MAAM,YAAY,yBAAyB,MAAM;CAEjD,QAAA,GAAA,mBAAA,WAAA,CAAkB;EAChB,IAAI;EACJ,aACE;EACF;EACA;EACA,SAAS,OAAM,UAAS;GACtB,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,QAAQ,gBAAgB,KAAK,CAAC;GAEjE,OAAO;IACL,WAAW,SAAS;IACpB,WAAW,SAAS;IACpB,SAAS,SAAS,QAAQ,KAAI,YAAW;KACvC,KAAK,OAAO;KACZ,OAAO,OAAO,SAAS,KAAA;KACvB,aAAa,OAAO,gBAAgB,KAAA;KACpC,UAAU,OAAO;KACjB,aAAa,OAAO,gBAAgB,KAAA;IACtC,EAAE;IACF,QAAQ,SAAS,OAAO,KAAI,WAAU;KACpC,KAAK,MAAM;KACX,WAAW,MAAM;KACjB,gBAAgB,MAAM,oBAAoB,KAAA;KAC1C,SAAS,MAAM,WAAW,KAAA;IAC5B,EAAE;IACF,OAAO,SAAS,SAAS,KAAA;IACzB,UAAU,SAAS,UAAU,KAAI,aAAY;KAC3C,MAAM,QAAQ;KACd,SAAS,QAAQ;KACjB,QAAQ,QAAQ,UAAU,KAAA;IAC5B,EAAE;GACJ;EACF;CACF,CAAC;AACH;;;AC7IA,SAAgB,oBAAoB,QAAgC;CAClE,OAAO;EACL,gBAAgB,yBAAyB,MAAM;EAC/C,iBAAiB,0BAA0B,MAAM;CACnD;AACF"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Parallel","z","inputSchema","z","outputSchema","toFetchPolicy","z"],"sources":["../src/client.ts","../src/schemas.ts","../src/search.ts","../src/extract.ts","../src/tools.ts"],"sourcesContent":["import Parallel from 'parallel-web';\nimport type { ClientOptions } from 'parallel-web';\n\nexport type ParallelClientOptions = ClientOptions;\nexport type ParallelClient = Parallel;\n\nexport function getParallelClient(config?: ParallelClientOptions): ParallelClient {\n const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;\n if (!apiKey) {\n throw new Error('Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.');\n }\n\n const fetch = config?.fetch ?? globalThis.fetch;\n\n return new Parallel({\n ...config,\n apiKey,\n fetch: (url, init) => {\n const headers = new Headers(init?.headers);\n // Project-wide aggregate usage attribution. Append at the transport boundary to\n // preserve SDK/caller headers and keep attribution on subsequent requests and retries.\n headers.set('User-Agent', [headers.get('User-Agent'), 'mastra'].filter(Boolean).join(' '));\n return fetch(url, { ...init, headers });\n },\n });\n}\n\nexport function createLazyParallelClient(config?: ParallelClientOptions): () => ParallelClient {\n let client: ParallelClient | undefined;\n\n return () => {\n client ??= getParallelClient(config);\n return client;\n };\n}\n","import { z } from 'zod';\n\nexport const usageItemSchema = z.object({\n name: z.string(),\n count: z.number(),\n});\n\nexport const warningSchema = z.object({\n type: z.string(),\n message: z.string(),\n detail: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const searchResultSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n});\n\nexport const fetchPolicySchema = z.object({\n maxAgeSeconds: z\n .number()\n .int()\n .min(600)\n .optional()\n .describe('Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600).'),\n timeoutSeconds: z.number().int().positive().optional().describe('Timeout in seconds for a live fetch.'),\n disableCacheFallback: z\n .boolean()\n .optional()\n .describe('Return an error instead of older cached content when a live fetch fails or times out.'),\n});\n\nexport type FetchPolicyInput = z.infer<typeof fetchPolicySchema>;\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, searchResultSchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst ISO_3166_ALPHA_2_CODES = new Set(\n `AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ\nBA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ\nCA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ\nDE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR\nGA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY\nHK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP\nKE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY\nMA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ\nNA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY\nQA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ\nTC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ\nVA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`\n .split(/\\s+/),\n);\n\nfunction isValidCalendarDate(value: string): boolean {\n const [yearText, monthText, dayText] = value.split('-');\n if (yearText === undefined || monthText === undefined || dayText === undefined) return false;\n\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1]!;\n}\n\nconst inputSchema = z\n .object({\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .describe('Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results.'),\n objective: z\n .string()\n .optional()\n .describe('A self-contained natural-language description of the goal driving the search.'),\n mode: z\n .enum(['turbo', 'fast', 'basic', 'advanced'])\n .optional()\n .describe('Search mode. Defaults to advanced when omitted.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n maxResults: z.number().int().positive().optional().describe('Maximum number of results to return.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each result.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total excerpt characters across all results.'),\n location: z\n .string()\n .refine(value => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), {\n message: 'location must be a valid ISO 3166-1 alpha-2 country code.',\n })\n .optional()\n .describe('ISO 3166-1 alpha-2 country code for geo-targeted results.'),\n includeDomains: z.array(z.string()).max(200).optional().describe('Only return results from these domains.'),\n excludeDomains: z.array(z.string()).max(200).optional().describe('Exclude results from these domains.'),\n afterDate: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .refine(isValidCalendarDate, { message: 'afterDate must be a valid calendar date in YYYY-MM-DD format.' })\n .optional()\n .describe('Only return content published on or after this YYYY-MM-DD date.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for search results.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n })\n .refine(input => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {\n message: 'includeDomains and excludeDomains can contain at most 200 domains combined.',\n path: ['includeDomains'],\n });\n\nconst outputSchema = z.object({\n searchId: z.string(),\n sessionId: z.string(),\n results: z.array(searchResultSchema),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype SearchInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toSearchParams(input: SearchInput): Parallel.SearchParams {\n const params: Parallel.SearchParams = {\n search_queries: input.searchQueries,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.mode !== undefined) params.mode = input.mode;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n const sourcePolicy =\n input.includeDomains !== undefined || input.excludeDomains !== undefined || input.afterDate !== undefined\n ? {\n include_domains: input.includeDomains,\n exclude_domains: input.excludeDomains,\n after_date: input.afterDate,\n }\n : undefined;\n\n if (\n input.maxResults !== undefined ||\n input.excerptMaxCharsPerResult !== undefined ||\n input.location !== undefined ||\n sourcePolicy !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n max_results: input.maxResults,\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n location: input.location,\n source_policy: sourcePolicy,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelSearchTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-search',\n description:\n 'Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().search(toSearchParams(input));\n\n return {\n searchId: response.search_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst inputSchema = z.object({\n urls: z.array(z.string().url()).min(1).max(20).describe('URLs to extract content from (1-20).'),\n objective: z\n .string()\n .optional()\n .describe('A natural-language description of the information to focus on while extracting.'),\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .optional()\n .describe('Optional keyword queries used with the objective to focus excerpts.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each URL.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n fullContent: z\n .union([z.boolean(), z.number().int().positive()])\n .optional()\n .describe('Return full page content. Pass a character limit instead of true to cap content per URL.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total characters across all extracted results.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for extracted URLs.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n});\n\nconst outputSchema = z.object({\n extractId: z.string(),\n sessionId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n fullContent: z.string().optional(),\n }),\n ),\n errors: z.array(\n z.object({\n url: z.string(),\n errorType: z.string(),\n httpStatusCode: z.number().optional(),\n content: z.string().optional(),\n }),\n ),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype ExtractInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toExtractParams(input: ExtractInput): Parallel.ExtractParams {\n const params: Parallel.ExtractParams = {\n urls: input.urls,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.searchQueries !== undefined) params.search_queries = input.searchQueries;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n if (\n input.excerptMaxCharsPerResult !== undefined ||\n input.fullContent !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n full_content:\n typeof input.fullContent === 'number' ? { max_chars_per_result: input.fullContent } : input.fullContent,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelExtractTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-extract',\n description:\n 'Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().extract(toExtractParams(input));\n\n return {\n extractId: response.extract_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n fullContent: result.full_content ?? undefined,\n })),\n errors: response.errors.map(error => ({\n url: error.url,\n errorType: error.error_type,\n httpStatusCode: error.http_status_code ?? undefined,\n content: error.content ?? undefined,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import type { ParallelClientOptions } from './client.js';\nimport { createParallelExtractTool } from './extract.js';\nimport { createParallelSearchTool } from './search.js';\n\nexport function createParallelTools(config?: ParallelClientOptions) {\n return {\n parallelSearch: createParallelSearchTool(config),\n parallelExtract: createParallelExtractTool(config),\n };\n}\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,9 +5,18 @@ import { z } from "zod";
|
|
|
5
5
|
function getParallelClient(config) {
|
|
6
6
|
const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;
|
|
7
7
|
if (!apiKey) throw new Error("Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.");
|
|
8
|
+
const fetch = config?.fetch ?? globalThis.fetch;
|
|
8
9
|
return new Parallel({
|
|
9
10
|
...config,
|
|
10
|
-
apiKey
|
|
11
|
+
apiKey,
|
|
12
|
+
fetch: (url, init) => {
|
|
13
|
+
const headers = new Headers(init?.headers);
|
|
14
|
+
headers.set("User-Agent", [headers.get("User-Agent"), "mastra"].filter(Boolean).join(" "));
|
|
15
|
+
return fetch(url, {
|
|
16
|
+
...init,
|
|
17
|
+
headers
|
|
18
|
+
});
|
|
19
|
+
}
|
|
11
20
|
});
|
|
12
21
|
}
|
|
13
22
|
function createLazyParallelClient(config) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["inputSchema","outputSchema","toFetchPolicy"],"sources":["../src/client.ts","../src/schemas.ts","../src/search.ts","../src/extract.ts","../src/tools.ts"],"sourcesContent":["import Parallel from 'parallel-web';\nimport type { ClientOptions } from 'parallel-web';\n\nexport type ParallelClientOptions = ClientOptions;\nexport type ParallelClient = Parallel;\n\nexport function getParallelClient(config?: ParallelClientOptions): ParallelClient {\n const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;\n if (!apiKey) {\n throw new Error('Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.');\n }\n\n return new Parallel({ ...config, apiKey });\n}\n\nexport function createLazyParallelClient(config?: ParallelClientOptions): () => ParallelClient {\n let client: ParallelClient | undefined;\n\n return () => {\n client ??= getParallelClient(config);\n return client;\n };\n}\n","import { z } from 'zod';\n\nexport const usageItemSchema = z.object({\n name: z.string(),\n count: z.number(),\n});\n\nexport const warningSchema = z.object({\n type: z.string(),\n message: z.string(),\n detail: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const searchResultSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n});\n\nexport const fetchPolicySchema = z.object({\n maxAgeSeconds: z\n .number()\n .int()\n .min(600)\n .optional()\n .describe('Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600).'),\n timeoutSeconds: z.number().int().positive().optional().describe('Timeout in seconds for a live fetch.'),\n disableCacheFallback: z\n .boolean()\n .optional()\n .describe('Return an error instead of older cached content when a live fetch fails or times out.'),\n});\n\nexport type FetchPolicyInput = z.infer<typeof fetchPolicySchema>;\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, searchResultSchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst ISO_3166_ALPHA_2_CODES = new Set(\n `AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ\nBA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ\nCA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ\nDE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR\nGA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY\nHK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP\nKE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY\nMA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ\nNA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY\nQA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ\nTC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ\nVA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`\n .split(/\\s+/),\n);\n\nfunction isValidCalendarDate(value: string): boolean {\n const [yearText, monthText, dayText] = value.split('-');\n if (yearText === undefined || monthText === undefined || dayText === undefined) return false;\n\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1]!;\n}\n\nconst inputSchema = z\n .object({\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .describe('Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results.'),\n objective: z\n .string()\n .optional()\n .describe('A self-contained natural-language description of the goal driving the search.'),\n mode: z\n .enum(['turbo', 'fast', 'basic', 'advanced'])\n .optional()\n .describe('Search mode. Defaults to advanced when omitted.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n maxResults: z.number().int().positive().optional().describe('Maximum number of results to return.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each result.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total excerpt characters across all results.'),\n location: z\n .string()\n .refine(value => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), {\n message: 'location must be a valid ISO 3166-1 alpha-2 country code.',\n })\n .optional()\n .describe('ISO 3166-1 alpha-2 country code for geo-targeted results.'),\n includeDomains: z.array(z.string()).max(200).optional().describe('Only return results from these domains.'),\n excludeDomains: z.array(z.string()).max(200).optional().describe('Exclude results from these domains.'),\n afterDate: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .refine(isValidCalendarDate, { message: 'afterDate must be a valid calendar date in YYYY-MM-DD format.' })\n .optional()\n .describe('Only return content published on or after this YYYY-MM-DD date.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for search results.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n })\n .refine(input => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {\n message: 'includeDomains and excludeDomains can contain at most 200 domains combined.',\n path: ['includeDomains'],\n });\n\nconst outputSchema = z.object({\n searchId: z.string(),\n sessionId: z.string(),\n results: z.array(searchResultSchema),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype SearchInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toSearchParams(input: SearchInput): Parallel.SearchParams {\n const params: Parallel.SearchParams = {\n search_queries: input.searchQueries,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.mode !== undefined) params.mode = input.mode;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n const sourcePolicy =\n input.includeDomains !== undefined || input.excludeDomains !== undefined || input.afterDate !== undefined\n ? {\n include_domains: input.includeDomains,\n exclude_domains: input.excludeDomains,\n after_date: input.afterDate,\n }\n : undefined;\n\n if (\n input.maxResults !== undefined ||\n input.excerptMaxCharsPerResult !== undefined ||\n input.location !== undefined ||\n sourcePolicy !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n max_results: input.maxResults,\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n location: input.location,\n source_policy: sourcePolicy,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelSearchTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-search',\n description:\n 'Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().search(toSearchParams(input));\n\n return {\n searchId: response.search_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst inputSchema = z.object({\n urls: z.array(z.string().url()).min(1).max(20).describe('URLs to extract content from (1-20).'),\n objective: z\n .string()\n .optional()\n .describe('A natural-language description of the information to focus on while extracting.'),\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .optional()\n .describe('Optional keyword queries used with the objective to focus excerpts.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each URL.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n fullContent: z\n .union([z.boolean(), z.number().int().positive()])\n .optional()\n .describe('Return full page content. Pass a character limit instead of true to cap content per URL.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total characters across all extracted results.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for extracted URLs.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n});\n\nconst outputSchema = z.object({\n extractId: z.string(),\n sessionId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n fullContent: z.string().optional(),\n }),\n ),\n errors: z.array(\n z.object({\n url: z.string(),\n errorType: z.string(),\n httpStatusCode: z.number().optional(),\n content: z.string().optional(),\n }),\n ),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype ExtractInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toExtractParams(input: ExtractInput): Parallel.ExtractParams {\n const params: Parallel.ExtractParams = {\n urls: input.urls,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.searchQueries !== undefined) params.search_queries = input.searchQueries;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n if (\n input.excerptMaxCharsPerResult !== undefined ||\n input.fullContent !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n full_content:\n typeof input.fullContent === 'number' ? { max_chars_per_result: input.fullContent } : input.fullContent,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelExtractTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-extract',\n description:\n 'Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().extract(toExtractParams(input));\n\n return {\n extractId: response.extract_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n fullContent: result.full_content ?? undefined,\n })),\n errors: response.errors.map(error => ({\n url: error.url,\n errorType: error.error_type,\n httpStatusCode: error.http_status_code ?? undefined,\n content: error.content ?? undefined,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import type { ParallelClientOptions } from './client.js';\nimport { createParallelExtractTool } from './extract.js';\nimport { createParallelSearchTool } from './search.js';\n\nexport function createParallelTools(config?: ParallelClientOptions) {\n return {\n parallelSearch: createParallelSearchTool(config),\n parallelExtract: createParallelExtractTool(config),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["inputSchema","outputSchema","toFetchPolicy"],"sources":["../src/client.ts","../src/schemas.ts","../src/search.ts","../src/extract.ts","../src/tools.ts"],"sourcesContent":["import Parallel from 'parallel-web';\nimport type { ClientOptions } from 'parallel-web';\n\nexport type ParallelClientOptions = ClientOptions;\nexport type ParallelClient = Parallel;\n\nexport function getParallelClient(config?: ParallelClientOptions): ParallelClient {\n const apiKey = config?.apiKey ?? process.env.PARALLEL_API_KEY;\n if (!apiKey) {\n throw new Error('Parallel API key is required. Pass { apiKey } or set the PARALLEL_API_KEY environment variable.');\n }\n\n const fetch = config?.fetch ?? globalThis.fetch;\n\n return new Parallel({\n ...config,\n apiKey,\n fetch: (url, init) => {\n const headers = new Headers(init?.headers);\n // Project-wide aggregate usage attribution. Append at the transport boundary to\n // preserve SDK/caller headers and keep attribution on subsequent requests and retries.\n headers.set('User-Agent', [headers.get('User-Agent'), 'mastra'].filter(Boolean).join(' '));\n return fetch(url, { ...init, headers });\n },\n });\n}\n\nexport function createLazyParallelClient(config?: ParallelClientOptions): () => ParallelClient {\n let client: ParallelClient | undefined;\n\n return () => {\n client ??= getParallelClient(config);\n return client;\n };\n}\n","import { z } from 'zod';\n\nexport const usageItemSchema = z.object({\n name: z.string(),\n count: z.number(),\n});\n\nexport const warningSchema = z.object({\n type: z.string(),\n message: z.string(),\n detail: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const searchResultSchema = z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n});\n\nexport const fetchPolicySchema = z.object({\n maxAgeSeconds: z\n .number()\n .int()\n .min(600)\n .optional()\n .describe('Maximum cached-content age in seconds before Parallel attempts a live fetch (minimum 600).'),\n timeoutSeconds: z.number().int().positive().optional().describe('Timeout in seconds for a live fetch.'),\n disableCacheFallback: z\n .boolean()\n .optional()\n .describe('Return an error instead of older cached content when a live fetch fails or times out.'),\n});\n\nexport type FetchPolicyInput = z.infer<typeof fetchPolicySchema>;\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, searchResultSchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst ISO_3166_ALPHA_2_CODES = new Set(\n `AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ\nBA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ\nCA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ\nDE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR\nGA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY\nHK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP\nKE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY\nMA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ\nNA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY\nQA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ\nTC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ\nVA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`\n .split(/\\s+/),\n);\n\nfunction isValidCalendarDate(value: string): boolean {\n const [yearText, monthText, dayText] = value.split('-');\n if (yearText === undefined || monthText === undefined || dayText === undefined) return false;\n\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return month >= 1 && month <= 12 && day >= 1 && day <= daysInMonth[month - 1]!;\n}\n\nconst inputSchema = z\n .object({\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .describe('Concise keyword search queries, ideally 3-6 words each. Provide 2-3 queries for best results.'),\n objective: z\n .string()\n .optional()\n .describe('A self-contained natural-language description of the goal driving the search.'),\n mode: z\n .enum(['turbo', 'fast', 'basic', 'advanced'])\n .optional()\n .describe('Search mode. Defaults to advanced when omitted.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n maxResults: z.number().int().positive().optional().describe('Maximum number of results to return.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each result.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total excerpt characters across all results.'),\n location: z\n .string()\n .refine(value => ISO_3166_ALPHA_2_CODES.has(value.toUpperCase()), {\n message: 'location must be a valid ISO 3166-1 alpha-2 country code.',\n })\n .optional()\n .describe('ISO 3166-1 alpha-2 country code for geo-targeted results.'),\n includeDomains: z.array(z.string()).max(200).optional().describe('Only return results from these domains.'),\n excludeDomains: z.array(z.string()).max(200).optional().describe('Exclude results from these domains.'),\n afterDate: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .refine(isValidCalendarDate, { message: 'afterDate must be a valid calendar date in YYYY-MM-DD format.' })\n .optional()\n .describe('Only return content published on or after this YYYY-MM-DD date.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for search results.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n })\n .refine(input => (input.includeDomains?.length ?? 0) + (input.excludeDomains?.length ?? 0) <= 200, {\n message: 'includeDomains and excludeDomains can contain at most 200 domains combined.',\n path: ['includeDomains'],\n });\n\nconst outputSchema = z.object({\n searchId: z.string(),\n sessionId: z.string(),\n results: z.array(searchResultSchema),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype SearchInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toSearchParams(input: SearchInput): Parallel.SearchParams {\n const params: Parallel.SearchParams = {\n search_queries: input.searchQueries,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.mode !== undefined) params.mode = input.mode;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n const sourcePolicy =\n input.includeDomains !== undefined || input.excludeDomains !== undefined || input.afterDate !== undefined\n ? {\n include_domains: input.includeDomains,\n exclude_domains: input.excludeDomains,\n after_date: input.afterDate,\n }\n : undefined;\n\n if (\n input.maxResults !== undefined ||\n input.excerptMaxCharsPerResult !== undefined ||\n input.location !== undefined ||\n sourcePolicy !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n max_results: input.maxResults,\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n location: input.location,\n source_policy: sourcePolicy,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelSearchTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-search',\n description:\n 'Search the web with Parallel. Returns ranked URLs and token-efficient excerpts focused on the search objective.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().search(toSearchParams(input));\n\n return {\n searchId: response.search_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import { createTool } from '@mastra/core/tools';\nimport type Parallel from 'parallel-web';\nimport { z } from 'zod';\n\nimport { createLazyParallelClient } from './client.js';\nimport type { ParallelClientOptions } from './client.js';\nimport { fetchPolicySchema, usageItemSchema, warningSchema } from './schemas.js';\nimport type { FetchPolicyInput } from './schemas.js';\n\nconst inputSchema = z.object({\n urls: z.array(z.string().url()).min(1).max(20).describe('URLs to extract content from (1-20).'),\n objective: z\n .string()\n .optional()\n .describe('A natural-language description of the information to focus on while extracting.'),\n searchQueries: z\n .array(z.string().min(1))\n .min(1)\n .optional()\n .describe('Optional keyword queries used with the objective to focus excerpts.'),\n excerptMaxCharsPerResult: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum excerpt characters to return for each URL.'),\n clientModel: z\n .string()\n .optional()\n .describe('Model that will consume the results, used by Parallel to tailor response defaults.'),\n fullContent: z\n .union([z.boolean(), z.number().int().positive()])\n .optional()\n .describe('Return full page content. Pass a character limit instead of true to cap content per URL.'),\n maxCharsTotal: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Maximum total characters across all extracted results.'),\n fetchPolicy: fetchPolicySchema.optional().describe('Live-fetch and cached-content policy for extracted URLs.'),\n sessionId: z.string().optional().describe('Session identifier shared across related Search and Extract calls.'),\n});\n\nconst outputSchema = z.object({\n extractId: z.string(),\n sessionId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string().optional(),\n publishDate: z.string().optional(),\n excerpts: z.array(z.string()),\n fullContent: z.string().optional(),\n }),\n ),\n errors: z.array(\n z.object({\n url: z.string(),\n errorType: z.string(),\n httpStatusCode: z.number().optional(),\n content: z.string().optional(),\n }),\n ),\n usage: z.array(usageItemSchema).optional(),\n warnings: z.array(warningSchema).optional(),\n});\n\ntype ExtractInput = z.infer<typeof inputSchema>;\n\nfunction toFetchPolicy(input: FetchPolicyInput): Parallel.FetchPolicy {\n return {\n max_age_seconds: input.maxAgeSeconds,\n timeout_seconds: input.timeoutSeconds,\n disable_cache_fallback: input.disableCacheFallback,\n };\n}\n\nfunction toExtractParams(input: ExtractInput): Parallel.ExtractParams {\n const params: Parallel.ExtractParams = {\n urls: input.urls,\n };\n\n if (input.objective !== undefined) params.objective = input.objective;\n if (input.searchQueries !== undefined) params.search_queries = input.searchQueries;\n if (input.clientModel !== undefined) params.client_model = input.clientModel;\n if (input.maxCharsTotal !== undefined) params.max_chars_total = input.maxCharsTotal;\n if (input.sessionId !== undefined) params.session_id = input.sessionId;\n\n if (\n input.excerptMaxCharsPerResult !== undefined ||\n input.fullContent !== undefined ||\n input.fetchPolicy !== undefined\n ) {\n params.advanced_settings = {\n excerpt_settings:\n input.excerptMaxCharsPerResult === undefined\n ? undefined\n : { max_chars_per_result: input.excerptMaxCharsPerResult },\n full_content:\n typeof input.fullContent === 'number' ? { max_chars_per_result: input.fullContent } : input.fullContent,\n fetch_policy: input.fetchPolicy === undefined ? undefined : toFetchPolicy(input.fetchPolicy),\n };\n }\n\n return params;\n}\n\nexport function createParallelExtractTool(config?: ParallelClientOptions) {\n const getClient = createLazyParallelClient(config);\n\n return createTool({\n id: 'parallel-extract',\n description:\n 'Extract relevant excerpts or full page content from URLs with Parallel. Returns successful results and per-URL errors.',\n inputSchema,\n outputSchema,\n execute: async input => {\n const response = await getClient().extract(toExtractParams(input));\n\n return {\n extractId: response.extract_id,\n sessionId: response.session_id,\n results: response.results.map(result => ({\n url: result.url,\n title: result.title ?? undefined,\n publishDate: result.publish_date ?? undefined,\n excerpts: result.excerpts,\n fullContent: result.full_content ?? undefined,\n })),\n errors: response.errors.map(error => ({\n url: error.url,\n errorType: error.error_type,\n httpStatusCode: error.http_status_code ?? undefined,\n content: error.content ?? undefined,\n })),\n usage: response.usage ?? undefined,\n warnings: response.warnings?.map(warning => ({\n type: warning.type,\n message: warning.message,\n detail: warning.detail ?? undefined,\n })),\n };\n },\n });\n}\n","import type { ParallelClientOptions } from './client.js';\nimport { createParallelExtractTool } from './extract.js';\nimport { createParallelSearchTool } from './search.js';\n\nexport function createParallelTools(config?: ParallelClientOptions) {\n return {\n parallelSearch: createParallelSearchTool(config),\n parallelExtract: createParallelExtractTool(config),\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/parallel",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2-alpha.0",
|
|
4
4
|
"description": "Parallel web search and extract tools for Mastra agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"tsdown": "0.22.9",
|
|
54
54
|
"typescript": "^7.0.2",
|
|
55
|
-
"vitest": "4.1.
|
|
56
|
-
"zod": "^4.4
|
|
57
|
-
"@internal/lint": "0.0.
|
|
58
|
-
"@
|
|
59
|
-
"@
|
|
55
|
+
"vitest": "4.1.11",
|
|
56
|
+
"zod": "^4.6.4",
|
|
57
|
+
"@internal/lint": "0.0.133",
|
|
58
|
+
"@mastra/core": "1.68.0-alpha.5",
|
|
59
|
+
"@internal/types-builder": "0.0.108"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build:lib": "tsdown --silent --config tsdown.config.ts",
|