Spaces:
Configuration error
Configuration error
| import { Tool } from 'langchain/tools' | |
| import fetch from 'node-fetch' | |
| export const desc = `Use this when you want to POST to a website. | |
| Input should be a json string with two keys: "url" and "data". | |
| The value of "url" should be a string, and the value of "data" should be a dictionary of | |
| key-value pairs you want to POST to the url as a JSON body. | |
| Be careful to always use double quotes for strings in the json string | |
| The output will be the text response of the POST request.` | |
| export interface Headers { | |
| [key: string]: string | |
| } | |
| export interface Body { | |
| [key: string]: any | |
| } | |
| export interface RequestParameters { | |
| headers?: Headers | |
| body?: Body | |
| url?: string | |
| description?: string | |
| maxOutputLength?: number | |
| } | |
| export class RequestsPostTool extends Tool { | |
| name = 'requests_post' | |
| url = '' | |
| description = desc | |
| maxOutputLength = Infinity | |
| headers = {} | |
| body = {} | |
| constructor(args?: RequestParameters) { | |
| super() | |
| this.url = args?.url ?? this.url | |
| this.headers = args?.headers ?? this.headers | |
| this.body = args?.body ?? this.body | |
| this.description = args?.description ?? this.description | |
| this.maxOutputLength = args?.maxOutputLength ?? this.maxOutputLength | |
| } | |
| /** @ignore */ | |
| async _call(input: string) { | |
| try { | |
| let inputUrl = '' | |
| let inputBody = {} | |
| if (Object.keys(this.body).length || this.url) { | |
| if (this.url) inputUrl = this.url | |
| if (Object.keys(this.body).length) inputBody = this.body | |
| } else { | |
| const { url, data } = JSON.parse(input) | |
| inputUrl = url | |
| inputBody = data | |
| } | |
| if (process.env.DEBUG === 'true') console.info(`Making POST API call to ${inputUrl} with body ${JSON.stringify(inputBody)}`) | |
| const res = await fetch(inputUrl, { | |
| method: 'POST', | |
| headers: this.headers, | |
| body: JSON.stringify(inputBody) | |
| }) | |
| const text = await res.text() | |
| return text.slice(0, this.maxOutputLength) | |
| } catch (error) { | |
| return `${error}` | |
| } | |
| } | |
| } | |