UNPKG

browser-use-typescript

Version:

A TypeScript-based browser automation framework

149 lines 4.34 kB
import { AIMessage, HumanMessage, SystemMessage, ToolMessage } from "@langchain/core/messages"; /** * Metadata for a message */ class MessageMetadata { tokens = 0; } /** * A message with its metadata */ class ManagedMessage { message; metadata; constructor(message, metadata = new MessageMetadata()) { this.message = message; this.metadata = metadata; } /** * Returns the JSON representation of the model. * Serializes the message property before encoding the overall object. */ toJSON() { const data = { message: this.message, metadata: this.metadata }; // Handle serialization of the message using langchain's serialization if available if (this.message.toJSON) { data.message = this.message.toJSON(); } return data; } /** * Create a ManagedMessage from JSON data */ static fromJSON(data) { let message; // Handle different message types if (data.message._type === "human") { message = new HumanMessage(data.message.content); } else if (data.message._type === "ai") { message = new AIMessage({ content: data.message.content, tool_calls: data.message.tool_calls }); } else if (data.message._type === "system") { message = new SystemMessage(data.message.content); } else if (data.message._type === "tool") { message = new ToolMessage({ content: data.message.content, tool_call_id: data.message.tool_call_id }); } else { // Default case message = new HumanMessage(data.message.content); } return new ManagedMessage(message, new MessageMetadata()); } } /** * History of messages with metadata */ class MessageHistory { messages = []; current_tokens = 0; /** * Add message with metadata to history */ addMessage(message, metadata, position) { const managedMessage = new ManagedMessage(message, metadata); if (position === undefined) { this.messages.push(managedMessage); } else { this.messages.splice(position, 0, managedMessage); } this.current_tokens += metadata.tokens; } /** * Add model output as AI message */ addModelOutput(output) { const toolCalls = [ { name: 'AgentOutput', args: output, id: '1', type: 'tool_call', } ]; const msg = new AIMessage({ content: '', tool_calls: toolCalls, }); this.addMessage(msg, new MessageMetadata()); // Estimate tokens for tool calls // Empty tool response const toolMessage = new ToolMessage({ content: '', tool_call_id: '1' }); this.addMessage(toolMessage, new MessageMetadata()); // Estimate tokens for empty response } /** * Get all messages */ getMessages() { return this.messages.map(m => m.message); } /** * Get total tokens in history */ getTotalTokens() { return this.current_tokens; } /** * Remove oldest non-system message */ removeOldestMessage() { for (let i = 0; i < this.messages.length; i++) { if (!(this.messages[i].message instanceof SystemMessage)) { this.current_tokens -= this.messages[i].metadata.tokens; this.messages.splice(i, 1); break; } } } /** * Remove last state message from history */ removeLastStateMessage() { if (this.messages.length > 2 && this.messages[this.messages.length - 1].message instanceof HumanMessage) { this.current_tokens -= this.messages[this.messages.length - 1].metadata.tokens; this.messages.pop(); } } } /** * Holds the state for MessageManager */ class MessageManagerState { history = new MessageHistory(); tool_id = 1; } export { MessageMetadata, ManagedMessage, MessageHistory, MessageManagerState }; //# sourceMappingURL=types.js.map