diff --git a/examples/math_plugin.py b/examples/math_plugin.py new file mode 100644 index 0000000..8637073 --- /dev/null +++ b/examples/math_plugin.py @@ -0,0 +1,26 @@ +from _context import sm + + +class MathPlugin: + def send_hook(self, conversation: sm.Conversation): + last_user_message = conversation.get_last_message(role="user") + if "calculate" in last_user_message.text.lower(): + expression = last_user_message.text.lower().replace("calculate", "").strip() + try: + result = eval(expression) + conversation.add_message( + role="assistant", text=f"The result is {result}." + ) + except Exception: + conversation.add_message( + role="assistant", + text="I'm sorry, I couldn't compute that expression.", + ) + + +conversation = sm.create_conversation(llm_model="gpt-4o", llm_provider="openai") +conversation.add_plugin(MathPlugin()) + +conversation.add_message("user", "Calculate 2 + 2 * 3") + +print(conversation.send()) diff --git a/simplemind/models.py b/simplemind/models.py index 63b836d..b7448c1 100644 --- a/simplemind/models.py +++ b/simplemind/models.py @@ -81,6 +81,10 @@ class Conversation(SMBaseModel): self.add_message(role="assistant", text=response.text, meta=response.meta) return response + def get_last_message(self, role: MESSAGE_ROLE) -> Optional[Message]: + """Get the last message with the given role.""" + return next((m for m in reversed(self.messages) if m.role == role), None) + def add_plugin(self, plugin: Any): """Add a plugin to the conversation.""" self.plugins.append(plugin)