Jelajahi Sumber

order analyser add parameters to the neuron only if needed

nico 8 tahun lalu
induk
melakukan
8d3cdca5a2
2 mengubah file dengan 45 tambahan dan 21 penghapusan
  1. 18 15
      brain.yml
  2. 27 6
      core/OrderAnalyser.py

+ 18 - 15
brain.yml

@@ -1,12 +1,15 @@
 ---
-  - name: "hello world"
-    neurons:
-      - say:
-          message:
-            - "Hello, I'm Jarvis"
-    signals:
-      - order: "hello"
-      - order: "je voudrais la musique {{song-name}} de {{ artist_name }}"
+#  - name: "hello world"
+#    neurons:
+#      - say:
+#          message:
+#            - "Bonjour monsieur"
+#          args:
+#            - song_name
+#            - artist_name
+#    signals:
+#      - order: "hello"
+#      - order: "je voudrais la musique {{song_name}} de {{ artist_name }}"
 
   - name: "say hello"
     neurons:
@@ -72,17 +75,17 @@
 
   - name: "Start steam"
     neurons:
-      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"kodi\",\"state\":\"stop\"}' http://192.168.0.17:5000/app"
-      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"steam\",\"state\":\"start\"}' http://192.168.0.17:5000/app"
+      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"kodi\",\"state\":\"stop\"}' http://192.168.0.17:8000/app"
+      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"steam\",\"state\":\"start\"}' http://192.168.0.17:8000/app"
       - say:
           message: "Lancement en cours, monsieur"
     signals:
-      - order: "lance steam"
+      - order: "lance Steam"
 
   - name: "Start Kodi"
     neurons:
-      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"steam\",\"state\":\"stop\"}' http://192.168.0.17:5000/app"
-      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"kodi\",\"state\":\"start\"}' http://192.168.0.17:5000/app"
+      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"steam\",\"state\":\"stop\"}' http://192.168.0.17:8000/app"
+      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"kodi\",\"state\":\"start\"}' http://192.168.0.17:8000/app"
       - say:
           message: "Lancement en cours, monsieur"
     signals:
@@ -90,7 +93,7 @@
 
   - name: "Start music"
     neurons:
-      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"music\",\"state\":\"start\"}' http://192.168.0.17:5000/app"
+      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"music\",\"state\":\"start\"}' http://192.168.0.17:8000/app"
       - say:
           message: "Musique lancée, monsieur"
     signals:
@@ -99,7 +102,7 @@
 
   - name: "Stop music"
     neurons:
-      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"music\",\"state\":\"stop\"}' http://192.168.0.17:5000/app"
+      - command: "curl -i --user admin:secret -H \"Content-Type: application/json\" -X POST -d '{\"app_name\":\"music\",\"state\":\"stop\"}' http://192.168.0.17:8000/app"
       - say:
           message: "Musique stoppé, monsieur"
     signals:

+ 27 - 6
core/OrderAnalyser.py

@@ -37,11 +37,35 @@ class OrderAnalyser:
                         synapses_found = True
                         logger.debug("Order found! Run neurons: %s" % synapse.neurons)
                         Utils.print_success("Order matched in the brain. Running synapse \"%s\"" % synapse.name)
-                        params = {}
+                        # if the order contains bracket, we get parameters said by the user
+                        params = None
                         if self._is_containing_bracket(signal.sentence):
                             params = self._associate_order_params_to_values(signal.sentence)
+                            logger.debug("Parameters for order: %s" % params)
+
                         for neuron in synapse.neurons:
-                            neuron.parameters = dict(neuron.parameters.items() + params.items())
+                            if isinstance(neuron.parameters, dict):
+                                if "args" in neuron.parameters:
+                                    print "the neuron wait for parameter"
+                                    # check that the user added parameters to his order
+                                    if params is None:
+                                        # TODO: raise an error and break the program?
+                                        Utils.print_danger("Error: The neuron %s is waiting for argument. "
+                                                           "Argument found in bracket in the given order" % neuron.name)
+                                    else:
+                                        # we add wanted arguments the existing neuron parameter dict
+                                        for arg in neuron.parameters["args"]:
+                                            if arg in params:
+                                                logger.debug("Parameter %s added to the current parameter "
+                                                             "of the neuron: %s" % (arg, neuron.name))
+                                                neuron.parameters[arg] = params[arg]
+                                            else:
+                                                # TODO: raise an error and break the program?
+                                                Utils.print_danger("Error: Argument \"%s\" not found in the"
+                                                                   " order" % arg)
+
+                            # neuron.parameters = dict(neuron.parameters.items() + params.items())
+                            print neuron.parameters
                             NeuroneLauncher.start_neurone(neuron)
 
         if not synapses_found:
@@ -60,8 +84,7 @@ class OrderAnalyser:
 
         cosine = get_cosine(user_vector, order_vector)
         logger.debug("the cosine : %s, pour user_vector: %s , order_vector: %s" % (cosine, self.order, order_to_test))
-        return cosine >= 0.5
-
+        return cosine >= 0.9
 
     def _associate_order_params_to_values(self, order_to_check):
         """
@@ -101,7 +124,6 @@ class OrderAnalyser:
             truncate_list_word_said = truncate_list_word_said[1:]
         return dictVar
 
-
     @staticmethod
     def _is_containing_bracket(sentence):
         # print "sentence to test %s" % sentence
@@ -117,4 +139,3 @@ class OrderAnalyser:
         ite = list.__iter__()
         next(ite, None)
         return next(ite, None)
-