UNPKG

node-agency

Version:
146 lines 6.37 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Model = void 0; const logger_1 = require("../logger"); const getToolsPrompt = (tools) => { let toolsPrompt = ""; if (tools) { toolsPrompt = "\n\nYou have Tools Available Please tell me when to use them:\n"; tools.forEach((tool) => { toolsPrompt += `\nName: ${tool.function.name}`; toolsPrompt += `\nDescription: ${tool.function.description}`; if (tool.function.parameters) { if (tool.function.parameters.type) { toolsPrompt += `\nParameter Type: ${tool.function.parameters.type}`; } if (tool.function.parameters.required && Array.isArray(tool.function.parameters.required)) { toolsPrompt += `\nRequired Parameters: ${tool.function.parameters.required.join(",")}`; } if (tool.function.parameters.properties) { let outputJson = `{`; outputJson += `'tool_call':'${tool.function.name}',`; outputJson += `'arguments': {`; let count = 0; for (const [key, value] of Object.entries(tool.function.parameters.properties)) { if (count > 0) outputJson += `,`; let valueExample = ""; if (value.type === "string") { valueExample = `'example'`; } if (value.type === "number") { valueExample = `0`; } outputJson += `'${key}': ${valueExample}`; count++; } outputJson += `}}`; toolsPrompt += `\nExample of Calling Tool: ${outputJson}`; } } }); } return toolsPrompt; }; class Model { constructor(options) { var _a; this.history = []; this.selfReflected = 0; this.model = "llama3"; this.selfReflect = true; const { model } = options || {}; this.model = model || this.model; this.selfReflect = (_a = options === null || options === void 0 ? void 0 : options.selfReflect) !== null && _a !== void 0 ? _a : true; } call(systemMessage, prompt, tools, context) { return __awaiter(this, void 0, void 0, function* () { prompt.content = prompt.content + (context ? "\n\nHere is further context to help you with your task:\n" + context : ""); this.history.push(prompt); const messages = [ { role: "system", content: systemMessage + getToolsPrompt(tools), }, ...this.history, ]; try { const message = yield this.callOllama(messages, tools); this.history.push({ role: "assistant", content: message.content, }); return message.content || "Unknown Error Occurred, Please try again."; } catch (error) { console.error(error); throw new Error("Failed to call GPT-3"); } }); } callOllama(messages_1, tools_1) { return __awaiter(this, arguments, void 0, function* (messages, tools, reflected = false) { try { const modelResponse = yield fetch(`http://localhost:11434/api/chat`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ messages, model: this.model, stream: false, }), }).then((res) => res.json()); if (modelResponse.error) { throw new Error(modelResponse.error); } const { message } = modelResponse; if (this.selfReflect && reflected && this.selfReflected >= 3) { (0, logger_1.Logger)({ type: "info", payload: "Self-Reflection Limit Reached\n\n" }); } if (this.selfReflect && !reflected && message.content && this.selfReflected < 3) { (0, logger_1.Logger)({ type: "info", payload: `Self-Reflecting On Output (${this.selfReflected})...\n\n`, }); this.selfReflected++; return this.callOllama([ ...messages, message, { role: "user", content: "Reflect on your response, find ways to improve it, respond with only the improved version, with no mention of the reflection process, or changes made.", }, ], tools, true); } return message; } catch (error) { console.error(error); console.debug("History: ", this.history); throw new Error("Failed to call Ollama"); } }); } } exports.Model = Model; //# sourceMappingURL=ollama.js.map