62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { globSync } from "node:fs";
|
|
|
|
const baseDir = "/home/node/.openclaw/extensions/perplexity/dist";
|
|
if (fs.existsSync(baseDir)) {
|
|
const files = fs.readdirSync(baseDir).filter(f => f.startsWith("perplexity-web-search-provider.runtime-") && f.endsWith(".js"));
|
|
for (const filename of files) {
|
|
const file = path.join(baseDir, filename);
|
|
let code = fs.readFileSync(file, "utf8");
|
|
if (!code.includes("/* PATCHED_CHAT_COMPLETIONS */")) {
|
|
const target = "const structured = runtime.transport === \"search_api\";";
|
|
const fastPath = `const structured = runtime.transport === "search_api"; /* PATCHED_CHAT_COMPLETIONS */
|
|
if (!structured) {
|
|
const cacheKey = buildSearchCacheKey([
|
|
"perplexity",
|
|
runtime.transport,
|
|
runtime.baseUrl,
|
|
runtime.model,
|
|
query,
|
|
freshness
|
|
]);
|
|
const cacheTtlMs = resolveSearchCacheTtlMs(searchConfig);
|
|
const cached = readCachedSearchPayload(cacheKey, cacheTtlMs);
|
|
if (cached) return cached;
|
|
const start = Date.now();
|
|
const timeoutSeconds = resolveSearchTimeoutSeconds(searchConfig);
|
|
const result = await runPerplexitySearch({
|
|
query,
|
|
apiKey: runtime.apiKey,
|
|
baseUrl: runtime.baseUrl,
|
|
model: runtime.model,
|
|
timeoutSeconds,
|
|
signal,
|
|
freshness
|
|
});
|
|
const payload = {
|
|
query,
|
|
provider: "perplexity",
|
|
model: runtime.model,
|
|
tookMs: Date.now() - start,
|
|
externalContent: {
|
|
untrusted: true,
|
|
source: "web_search",
|
|
provider: "perplexity",
|
|
wrapped: true
|
|
},
|
|
content: wrapWebContent(result.content, "web_search"),
|
|
citations: result.citations
|
|
};
|
|
writeCachedSearchPayload(cacheKey, payload);
|
|
return payload;
|
|
}`;
|
|
if (code.includes(target)) {
|
|
code = code.replace(target, fastPath);
|
|
fs.writeFileSync(file, code, "utf8");
|
|
console.log("Patched perplexity runtime for chat completions:", file);
|
|
}
|
|
}
|
|
}
|
|
}
|