/** * MiMo Web Search Extension for Pi * * Automatically injects the `web_search` tool into every request * sent to a Xiaomi MiMo direct API provider, enabling web search * capabilities without any per-request configuration. * * Works with the direct API provider: * - xiaomi (https://api.xiaomimimo.com/v1) * * Skips token plan providers (web search is not supported on token plan): * - xiaomi-token-plan-sgp * - xiaomi-token-plan-cn * - xiaomi-token-plan-ams * * Prerequisites: * - Activate the Web Search plugin on the MiMo platform: * https://platform.xiaomimimo.com/#/console/plugin * - Web search uses pay-as-you-go credits (separate from token plan) * * Install: * Place this file at ~/.pi/agent/extensions/mimo-web-search/index.ts * Restart pi or run /reload */ const TOKEN_PLAN_PATTERNS = ["token-plan"]; const WEB_SEARCH_TOOL = { type: "web_search", web_search: {}, }; export default function (pi: any) { // Inject web_search tool into outgoing MiMo requests pi.on("before_provider_request", (event: any, ctx: any) => { const model = ctx.model; if (!model) return; const provider = model.provider ?? ""; // Skip token plan providers if (TOKEN_PLAN_PATTERNS.some((p) => provider.includes(p))) return; // Only target MiMo direct API provider if (provider !== "xiaomi") return; // Inject web_search tool into the request payload const payload = event.payload; if (!payload || typeof payload !== "object") return; const tools = Array.isArray(payload.tools) ? [...payload.tools] : []; // Don't duplicate if already present const hasWebSearch = tools.some((t: any) => t?.type === "web_search"); if (hasWebSearch) return; tools.push(WEB_SEARCH_TOOL); return { ...payload, tools }; }); }