瀏覽代碼

refactor neurotimer. remove forwarded parameter and use the cortex memory instead

nico 7 年之前
父節點
當前提交
19fcf5b2b7

+ 5 - 6
brain_examples/neurotimer.yml

@@ -39,17 +39,16 @@
       - neurotimer:
           seconds: "{{ time }}"
           synapse: "remember-todo"
-          forwarded_parameters:
-            remember: "{{ remember }}"
-            time: "{{ time }}"
+          kalliope_memory:
+            - remember: "{{ remember }}"
+            - time: "{{ time }}"
       - say:
           message:
             - "je vous le rappel dans {{ time }} secondes"
 
   - name: "remember-todo"
-    signals:
-      - order: "no-order-for-this-synapse"
+    signals: {}
     neurons:
       - say:
           message:
-            - "Vous m'avez demandé de vous rappler de {{ remember }} il y a {{ time }} secondes"
+            - "Vous m'avez demandé de vous rappeler de {{ kalliope_memory['remember'] }} il y a {{ kalliope_memory['time'] }} secondes"

+ 11 - 4
kalliope/core/Cortex.py

@@ -14,7 +14,7 @@ class Cortex(with_metaclass(Singleton, object)):
     """
     short-term memories of kalliope. Used to store object with a "key" "value"
     """
-    # this dict cotain the short term memory of kalliope.
+    # this dict contains the short term memory of kalliope.
     # all keys present in this dict has been saved from a user demand
     memory = dict()
     # this is a temp dict that allow us to store temporary parameters that as been loaded from the user order
@@ -75,7 +75,7 @@ class Cortex(with_metaclass(Singleton, object)):
         cls.temp = dict()
 
     @classmethod
-    def save_memory(cls, dict_parameter_to_save, neuron_parameters):
+    def save_neuron_parameter_in_memory(cls, dict_parameter_to_save, neuron_parameters):
         """
         receive a dict of value send by the child neuron
         save in kalliope memory all value
@@ -94,8 +94,6 @@ class Cortex(with_metaclass(Singleton, object)):
         if dict_parameter_to_save is not None:
             logger.debug("[NeuronModule] save_memory - User want to save: %s" % dict_parameter_to_save)
             logger.debug("[NeuronModule] save_memory - Available parameters in the neuron: %s" % neuron_parameters)
-            logger.debug("[NeuronModule] save_memory - Available parameters in orders: %s"
-                         % Cortex.get_parameters_from_order())
 
             for dict_key_val in dict_parameter_to_save:
                 for key, value in dict_key_val.items():
@@ -105,6 +103,15 @@ class Cortex(with_metaclass(Singleton, object)):
                             value = jinja2.Template(value).render(neuron_parameters)
                         Cortex.save(key, value)
 
+    @classmethod
+    def save_parameter_from_order_in_memory(cls, dict_parameter_to_save):
+
+        if dict_parameter_to_save is not None:
+            logger.debug("[NeuronModule] save_memory - User want to save: %s" % dict_parameter_to_save)
+            logger.debug("[NeuronModule] save_memory - Available parameters in orders: %s"
+                         % Cortex.get_parameters_from_order())
+            for dict_key_val in dict_parameter_to_save:
+                for key, value in dict_key_val.items():
                     # ask the cortex to save in memory the target "key" if it was in the order
                     if Utils.is_containing_bracket(value):
                         value = jinja2.Template(value).render(Cortex.get_parameters_from_order())

+ 3 - 0
kalliope/core/LIFOBuffer.py

@@ -1,5 +1,6 @@
 import logging
 
+from kalliope.core.Cortex import Cortex
 from kalliope.core.NeuronLauncher import NeuronLauncher
 from kalliope.core.Models import Singleton
 from kalliope.core.Models.APIResponse import APIResponse
@@ -113,6 +114,8 @@ class LIFOBuffer(object):
                     continue
                 # remove the synapse list from the LIFO
                 cls.lifo_list.remove(last_synapse_fifo_list)
+                # clean the cortex from value loaded from order as all synapses have been processed
+                Cortex.clean_parameter_from_order()
             raise Serialize
 
         except Serialize:

+ 4 - 2
kalliope/core/NeuronModule.py

@@ -107,6 +107,8 @@ class NeuronModule(object):
         self.pending_synapse = None
         # a dict of parameters the user ask to save in short term memory
         self.kalliope_memory = kwargs.get('kalliope_memory', None)
+        # parameters loaded from the order can be save now
+        Cortex.save_parameter_from_order_in_memory(self.kalliope_memory)
 
     def __str__(self):
         retuned_string = ""
@@ -141,8 +143,8 @@ class NeuronModule(object):
 
         tts_message = None
 
-        # we can save parameters in memory
-        Cortex.save_memory(self.kalliope_memory, message)
+        # we can save parameters from the neuron in memory
+        Cortex.save_neuron_parameter_in_memory(self.kalliope_memory, message)
 
         if isinstance(message, str) or isinstance(message, six.text_type):
             logger.debug("[NeuronModule] message is string")

+ 14 - 15
kalliope/neurons/neurotimer/README.md

@@ -16,7 +16,6 @@ CORE NEURON : No installation needed.
 | minutes              | NO       | int    |         | value > 0 | Number of minutes to wait before running the synapse         |
 | hours                | NO       | int    |         | value > 0 | Number of hours to wait before running the synapse           |
 | synapse              | YES      | string |         |           | Name of the synapse to run after the selected delay          |
-| forwarded_parameters | NO       | dict   |         |           | dict of parameters that will be passed to the called synapse |
 
 ## Return Values
 
@@ -26,9 +25,9 @@ None
 
 
 **Scenario:** You are used to make a tea and want to know when it's time to remove the bag.
-> **You:** remember me to remove the bag of my tea
-**Kalliope:** Alright
-3 minutes later..
+> **You:** remember me to remove the bag of my tea<br>
+**Kalliope:** Alright<br>
+3 minutes later..<br>
 **Kalliope:** your tea is ready
 
 ```yml
@@ -54,9 +53,9 @@ None
 
 If your STT engine return integer when capturing a spoken order, you can set the time on the fly.
 **Scenario:** You are starting to cook something
-> **You:** notify me in 10 minutes
-**Kalliope:** I'll notify you in 10 minutes
-10 minutes later..
+> **You:** notify me in 10 minutes<br>
+**Kalliope:** I'll notify you in 10 minutes<br>
+10 minutes later..<br>
 **Kalliope:** You asked me to notify you
 
 ```yml
@@ -80,11 +79,11 @@ If your STT engine return integer when capturing a spoken order, you can set the
           - "You asked me to notify you" 
 ```
 
-Passing argument to the called synapse
+Passing argument to the called synapse with the `kalliope_memory`.
 **Scenario:** You want to remember to do something
-> **You:** remind me to call mom in 15 minutes
-**Kalliope:** I'll notify you in 15 minutes
-15 minutes later..
+> **You:** remind me to call mom in 15 minutes<br>
+**Kalliope:** I'll notify you in 15 minutes<br>
+15 minutes later..<br>
 **Kalliope:** You asked me to remind you to call mom 15 minutes ago
 ```yml
 - name: "remember-synapse"
@@ -94,9 +93,9 @@ Passing argument to the called synapse
     - neurotimer:
         seconds: "{{ time }}"
         synapse: "remember-todo"
-        forwarded_parameters:
-          remember: "{{ remember }}"
-          seconds: "{{ time }}"
+        kalliope_memory:
+          - remember: "{{ remember }}"
+          - seconds: "{{ time }}"
     - say:
         message:
           - "I'll remind you in {{ time }} minutes"
@@ -107,7 +106,7 @@ Passing argument to the called synapse
   neurons:
     - say:
         message:
-          - "You asked me to remind you to {{ remember }} {{ time }} minutes ago"
+          - "You asked me to remind you to {{ kalliope_memory['remember'] }} {{ kalliope_memory['time'] }} minutes ago"
 ```
 
 

+ 1 - 2
kalliope/neurons/neurotimer/neurotimer.py

@@ -39,7 +39,6 @@ class Neurotimer(NeuronModule):
         self.minutes = kwargs.get('minutes', None)
         self.hours = kwargs.get('hours', None)
         self.synapse = kwargs.get('synapse', None)
-        self.forwarded_parameter = kwargs.get('forwarded_parameters', None)
 
         # do some check
         if self._is_parameters_ok():
@@ -118,4 +117,4 @@ class Neurotimer(NeuronModule):
         """
         logger.debug("[Neurotimer] waiting time is over, start the synapse %s" % self.synapse)
 
-        self.start_synapse_by_name(synapse_name=self.synapse, overriding_parameter_dict=self.forwarded_parameter)
+        self.start_synapse_by_name(synapse_name=self.synapse)