Spaces:
Build error
Build error
import { htmlToText } from "html-to-text"; | |
import { Tool } from "langchain/tools"; | |
export interface Headers { | |
[key: string]: string; | |
} | |
export interface RequestTool { | |
headers: Headers; | |
maxOutputLength?: number; | |
timeout: number; | |
} | |
export class HttpGetTool extends Tool implements RequestTool { | |
name = "http_get"; | |
maxOutputLength = Infinity; | |
timeout = 10000; | |
constructor( | |
public headers: Headers = {}, | |
{ maxOutputLength }: { maxOutputLength?: number } = {}, | |
{ timeout }: { timeout?: number } = {}, | |
) { | |
super(...arguments); | |
this.maxOutputLength = maxOutputLength ?? this.maxOutputLength; | |
this.timeout = timeout ?? this.timeout; | |
} | |
/** @ignore */ | |
async _call(input: string) { | |
try { | |
const res = await this.fetchWithTimeout( | |
input, | |
{ | |
headers: this.headers, | |
}, | |
this.timeout, | |
); | |
let text = await res.text(); | |
text = htmlToText(text); | |
text = text.slice(0, this.maxOutputLength); | |
console.log(text); | |
return text; | |
} catch (error) { | |
console.error(error); | |
return (error as Error).toString(); | |
} | |
} | |
async fetchWithTimeout( | |
resource: RequestInfo | URL, | |
options = {}, | |
timeout: number = 30000, | |
) { | |
const controller = new AbortController(); | |
const id = setTimeout(() => controller.abort(), timeout); | |
const response = await fetch(resource, { | |
...options, | |
signal: controller.signal, | |
}); | |
clearTimeout(id); | |
return response; | |
} | |
description = `A portal to the internet. Use this when you need to get specific content from a website. | |
Input should be a url string (i.e. "https://www.google.com"). The output will be the text response of the GET request.`; | |
} | |