NeMo-Guardrails
NeMo-Guardrails copied to clipboard
staticmethod and classmethod action decorators fix
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.