NeMo-Guardrails icon indicating copy to clipboard operation
NeMo-Guardrails copied to clipboard

staticmethod and classmethod action decorators fix

Open piotrm0 opened this issue 1 year ago • 0 comments

action decorator does not preserve the decorator argument options if applied to staticmethods or classmethods. For example:

import os

from nemoguardrails import LLMRails
from nemoguardrails import RailsConfig
from nemoguardrails.actions.actions import action

os.environ["OPENAI_API_KEY"]="sk-..."

config = RailsConfig.from_path(".")
rails = LLMRails(config)

@action(name="func")
def test_func():
    return "hello"

class Test:
    @action(name="method")
    def test_method(self):
        return "method"

    @action(name="staticmethod")
    @staticmethod
    def test_staticmethod():
        return "static"

    @action(name="classmethod")
    @classmethod
    def test_classmethod(cls):
        return "class"

rails.register_action(test_func)
rails.register_action(Test().test_method)
rails.register_action(Test.test_staticmethod)
rails.register_action(Test.test_classmethod)

assert "func" in rails.runtime.registered_actions
assert "method" in rails.runtime.registered_actions
assert "staticmethod" in rails.runtime.registered_actions
assert "classmethod" in rails.runtime.registered_actions

The last two assertions will fail. This PR makes them pass.

piotrm0 avatar May 01 '24 00:05 piotrm0