{"version":3,"sources":["../../src/googleai/deep-research.ts"],"sourcesContent":["/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ActionMetadata, modelActionMetadata, z } from 'genkit';\nimport {\n  BackgroundModelAction,\n  ModelInfo,\n  ModelReference,\n  modelRef,\n} from 'genkit/model';\nimport { backgroundModel as pluginBackgroundModel } from 'genkit/plugin';\nimport {\n  ensureToolIds,\n  fromInteraction,\n  toInteractionSteps,\n  toInteractionTool,\n} from '../common/interaction-converters.mjs';\nimport {\n  InteractionAllowedTools,\n  InteractionTool,\n  ResponseModality,\n} from '../common/interaction-types.mjs';\nimport { cleanSchema, isKnownKey } from '../common/utils.mjs';\nimport {\n  cancelInteraction,\n  createInteraction,\n  getInteraction,\n} from './client.mjs';\nimport {\n  ClientOptions,\n  CreateInteractionRequest,\n  GoogleAIPluginOptions,\n  Model,\n} from './types.mjs';\nimport {\n  applyContextOverrides,\n  calculateApiKey,\n  checkApiKey,\n  checkModelName,\n  extractVersion,\n  isStringArray,\n  modelName,\n} from './utils.mjs';\n\nexport const DeepResearchConfigSchema = z\n  .object({\n    apiKey: z\n      .string()\n      .describe('Override the API key provided at plugin initialization.')\n      .optional(),\n    baseUrl: z\n      .string()\n      .describe(\n        'Overrides the plugin-configured or default baseUrl, if specified.'\n      )\n      .optional(),\n    apiVersion: z\n      .string()\n      .describe(\n        'Overrides the plugin-configured or default apiVersion, if specified.'\n      )\n      .optional(),\n    thinkingSummaries: z\n      .enum(['AUTO', 'NONE'])\n      .describe('Whether to include thought summaries in the response.')\n      .optional(),\n    previousInteractionId: z\n      .string()\n      .describe('The ID of the previous interaction, if any.')\n      .optional(),\n    store: z\n      .boolean()\n      .describe(\n        'Whether to store the response and request for later retrieval.'\n      )\n      .optional(),\n    responseModalities: z\n      .array(z.enum(['TEXT', 'IMAGE', 'AUDIO']))\n      .describe('The modalities to be used in response.')\n      .optional(),\n    visualization: z\n      .enum(['AUTO', 'OFF'])\n      .describe('Whether to enable agent-generated charts and images.')\n      .optional(),\n    collaborativePlanning: z\n      .boolean()\n      .describe(\n        'Whether to enable multi-turn plan review before research begins.'\n      )\n      .optional(),\n    // TODO(V2): Remove googleSearch, urlContext, and codeExecution wrappers\n    // and rely entirely on `config.tools` being passed through.\n    googleSearch: z\n      .union([z.boolean(), z.object({}).passthrough()])\n      .describe(\n        'Search the public web. Enabled by default if no tools are provided.'\n      )\n      .optional(),\n    urlContext: z\n      .union([z.boolean(), z.object({}).passthrough()])\n      .describe(\n        'Read and summarize web page content. Enabled by default if no tools are provided.'\n      )\n      .optional(),\n    codeExecution: z\n      .union([z.boolean(), z.object({}).passthrough()])\n      .describe(\n        'Execute code to perform calculations and data analysis. Enabled by default if no tools are provided.'\n      )\n      .optional(),\n    fileSearch: z\n      .object({\n        fileSearchStoreNames: z.array(z.string()),\n      })\n      .passthrough()\n      .optional(),\n    mcpServers: z\n      .array(\n        z\n          .object({\n            name: z.string().optional(),\n            url: z.string().optional(),\n            headers: z.record(z.string()).optional(),\n            allowedTools: z\n              .union([\n                z.array(z.string()),\n                z.array(\n                  z.object({\n                    mode: z\n                      .enum(['auto', 'any', 'none', 'validated'])\n                      .optional(),\n                    tools: z.array(z.string()).optional(),\n                  })\n                ),\n              ])\n              .optional(),\n          })\n          .passthrough()\n      )\n      .optional(),\n  })\n  .passthrough();\nexport type DeepResearchConfigSchemaType = typeof DeepResearchConfigSchema;\nexport type DeepResearchConfig = z.infer<DeepResearchConfigSchemaType>;\n\n// This contains all the DeepResearch config schema types\ntype ConfigSchemaType = DeepResearchConfigSchemaType;\n\nfunction commonRef(\n  name: string,\n  info?: ModelInfo,\n  configSchema: ConfigSchemaType = DeepResearchConfigSchema\n): ModelReference<ConfigSchemaType> {\n  return modelRef({\n    name: `googleai/${name}`,\n    configSchema,\n    info:\n      info ??\n      ({\n        supports: {\n          multiturn: true,\n          media: false,\n          tools: false,\n          toolChoice: false,\n          systemRole: false,\n          output: ['text'],\n          longRunning: true,\n        },\n      } as ModelInfo),\n  });\n}\n\nconst GENERIC_MODEL = commonRef('deep-research');\n\nconst ADVANCED_DEEP_RESEARCH_INFO = {\n  supports: {\n    multiturn: true,\n    media: true,\n    tools: true,\n    toolChoice: false,\n    systemRole: false,\n    output: ['text', 'media'],\n    longRunning: true,\n  },\n} as ModelInfo;\n\nconst KNOWN_MODELS = {\n  'deep-research-preview-04-2026': commonRef(\n    'deep-research-preview-04-2026',\n    ADVANCED_DEEP_RESEARCH_INFO\n  ),\n  'deep-research-max-preview-04-2026': commonRef(\n    'deep-research-max-preview-04-2026',\n    ADVANCED_DEEP_RESEARCH_INFO\n  ),\n} as const;\nexport type KnownModels = keyof typeof KNOWN_MODELS; // For autocomplete\n\n// Models we no longer suggest, but that still work: they still resolve and\n// are still registered as actions, but aren't in the KnownModels type, so\n// they don't show up in autocomplete. Set `stage` on each one (keeping the\n// default `supports`).\nconst HIDDEN_MODELS = {\n  // Deprecated; shuts down on Oct 23 2026 (changelog, Oct 8 2026). Replaced\n  // by deep-research-preview-04-2026 and deep-research-max-preview-04-2026.\n  'deep-research-pro-preview-12-2025': commonRef(\n    'deep-research-pro-preview-12-2025',\n    { ...GENERIC_MODEL.info, stage: 'deprecated' }\n  ),\n} as const;\n\nconst ALL_MODELS = {\n  ...HIDDEN_MODELS,\n  ...KNOWN_MODELS,\n};\n\nexport type DeepResearchModelName = `deep-research-${string}`;\nexport function isDeepResearchModelName(\n  value?: string\n): value is DeepResearchModelName {\n  return !!value?.startsWith('deep-research-');\n}\n\nexport function model(\n  version: string,\n  config: DeepResearchConfig = {}\n): ModelReference<ConfigSchemaType> {\n  const name = checkModelName(version);\n\n  if (isKnownKey(name, ALL_MODELS)) {\n    return ALL_MODELS[name].withConfig(config);\n  }\n\n  return modelRef({\n    name: `googleai/${name}`,\n    config,\n    configSchema: DeepResearchConfigSchema,\n    info: { ...GENERIC_MODEL.info },\n  });\n}\n\nexport function listActions(models: Model[]): ActionMetadata[] {\n  return (\n    models\n      .filter((m) => isDeepResearchModelName(modelName(m.name)))\n      // Filter out deprecated\n      .filter((m) => !m.description || !m.description.includes('deprecated'))\n      .map((m) => {\n        const ref = model(m.name);\n        return modelActionMetadata({\n          name: ref.name,\n          info: ref.info,\n          configSchema: ref.configSchema,\n        });\n      })\n  );\n}\n\nexport function listKnownModels(options?: GoogleAIPluginOptions) {\n  return Object.keys(ALL_MODELS).map((name: string) =>\n    defineModel(name, options)\n  );\n}\n\nexport function defineModel(\n  name: string,\n  pluginOptions?: GoogleAIPluginOptions\n): BackgroundModelAction<DeepResearchConfigSchemaType> {\n  checkApiKey(pluginOptions?.apiKey);\n  const ref = model(name);\n  const clientOptions: ClientOptions = {\n    apiVersion: pluginOptions?.apiVersion,\n    baseUrl: pluginOptions?.baseUrl,\n    customHeaders: pluginOptions?.customHeaders,\n    experimental_debugTraces: pluginOptions?.experimental_debugTraces,\n  };\n\n  return pluginBackgroundModel({\n    name: ref.name,\n    ...ref.info,\n    configSchema: ref.configSchema,\n    async start(request, options) {\n      const {\n        apiKey: apiKeyConfig,\n        baseUrl,\n        apiVersion,\n        thinkingSummaries,\n        visualization,\n        collaborativePlanning,\n        previousInteractionId,\n        store,\n        responseModalities,\n        googleSearch,\n        urlContext,\n        codeExecution,\n        fileSearch,\n        mcpServers,\n        ...rest\n      } = request.config || {};\n      const newClientOptions = applyContextOverrides(\n        {\n          ...clientOptions,\n          apiKey: calculateApiKey(pluginOptions?.apiKey, apiKeyConfig),\n          baseUrl: baseUrl || clientOptions.baseUrl,\n          apiVersion: apiVersion || clientOptions.apiVersion,\n        },\n        options?.context\n      );\n\n      const messages = structuredClone(request.messages);\n      // Deep Research does not support system instructions, so we map them to\n      // user messages.\n      for (const message of messages) {\n        if (message.role === 'system') {\n          message.role = 'user';\n        }\n      }\n\n      const tools: InteractionTool[] = [];\n      if (request.tools?.length) {\n        for (const tool of request.tools) {\n          tools.push(toInteractionTool(tool));\n        }\n      }\n\n      // TODO(v2): Remove these explicit tool pushes for googleSearch, urlContext, and codeExecution.\n      if (googleSearch) {\n        tools.push({\n          type: 'google_search',\n          ...(googleSearch === true ? {} : googleSearch),\n        } as InteractionTool);\n      }\n      if (urlContext) {\n        tools.push({\n          type: 'url_context',\n          ...(urlContext === true ? {} : urlContext),\n        } as InteractionTool);\n      }\n      if (codeExecution) {\n        tools.push({\n          type: 'code_execution',\n          ...(codeExecution === true ? {} : codeExecution),\n        } as InteractionTool);\n      }\n      if (fileSearch) {\n        const { fileSearchStoreNames, ...restFileSearch } = fileSearch;\n        tools.push({\n          type: 'file_search',\n          file_search_store_names: fileSearchStoreNames,\n          ...restFileSearch,\n        } as InteractionTool);\n      }\n      if (mcpServers) {\n        for (const mcpServer of mcpServers) {\n          const { allowedTools, ...restMcp } = mcpServer;\n          let allowed_tools: InteractionAllowedTools[] | undefined = undefined;\n          if (allowedTools && allowedTools.length > 0) {\n            // A plain list of tool names is shorthand for one entry with no\n            // mode.\n            allowed_tools = isStringArray(allowedTools)\n              ? [{ tools: allowedTools }]\n              : allowedTools;\n          }\n          tools.push({\n            type: 'mcp_server',\n            ...restMcp,\n            ...(allowed_tools ? { allowed_tools } : {}),\n          });\n        }\n      }\n\n      let responseFormat: any = undefined;\n      if (\n        request.output?.format === 'json' ||\n        request.output?.contentType === 'application/json'\n      ) {\n        responseFormat = {\n          type: 'text',\n          mime_type: 'application/json',\n        };\n        if (request.output.schema) {\n          responseFormat.schema = cleanSchema(request.output.schema);\n        }\n      }\n\n      let responseModalitiesConverted: ResponseModality[] | undefined;\n      if (responseModalities) {\n        responseModalitiesConverted = responseModalities.map(\n          (m) => m.toLowerCase() as ResponseModality\n        );\n      }\n\n      const req: CreateInteractionRequest = {\n        agent: extractVersion(ref),\n        input: toInteractionSteps(ensureToolIds(messages)),\n        background: true,\n        agent_config: {\n          type: 'deep-research',\n          thinking_summaries: thinkingSummaries?.toLowerCase() as\n            | 'auto'\n            | 'none'\n            | undefined,\n          visualization: visualization?.toLowerCase() as\n            | 'auto'\n            | 'off'\n            | undefined,\n          collaborative_planning: collaborativePlanning,\n        },\n        previous_interaction_id: previousInteractionId,\n        store,\n        tools: tools.length ? tools : undefined,\n        response_format: responseFormat,\n        response_modalities: responseModalitiesConverted,\n        ...rest,\n      };\n\n      const response = await createInteraction(\n        newClientOptions.apiKey,\n        req,\n        newClientOptions\n      );\n\n      return fromInteraction(response);\n    },\n    async check(operation, options) {\n      const checkOptions = applyContextOverrides(\n        {\n          ...clientOptions,\n          apiKey: calculateApiKey(pluginOptions?.apiKey, undefined),\n        },\n        options?.context\n      );\n\n      const response = await getInteraction(\n        checkOptions.apiKey,\n        operation.id,\n        checkOptions\n      );\n\n      return fromInteraction(response);\n    },\n    async cancel(operation, options) {\n      const cancelOptions = applyContextOverrides(\n        {\n          ...clientOptions,\n          apiKey: calculateApiKey(pluginOptions?.apiKey, undefined),\n        },\n        options?.context\n      );\n\n      const response = await cancelInteraction(\n        cancelOptions.apiKey,\n        operation.id,\n        cancelOptions\n      );\n\n      return fromInteraction(response);\n    },\n  });\n}\n\nexport const TEST_ONLY = { KNOWN_MODELS, HIDDEN_MODELS, GENERIC_MODEL };\n"],"mappings":"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","names":[]}