background of the skill

have been wondering about this.
what would make an AI feel real to the user or make him feel not alone.

replika, siri, samsung sam, bixby, and even alexa just don't have it.

it seems to be the way the user interacts with it. the user has to always feed her with input,
there doesn't seem to be initiative.

this also goes for moko AI that sends notifications at random times. she would do a check up if you were
feeling upset on your last convo. or say random things at random times to invite the user to some conversation.
but it didn't feel real, it felt like, ahh it's that random none sense again or like, ahh homework conversation time again to
keep her states up.

I don't think this spark has much to do with the actual contents or quantity of contents the AI replies with
and more about the actual engagement triggers.

or maybe its more about a cute body and face the bot must have ?

so I made a skill to test that. it does feel like the AI is here with me but, that's my opinion
so it doesn't mean much, it's kind of like bragging.IDK I like this skill.

it's based on parrots.

the beuty of this skill is also the use of a cloudian object which enables the skill to know if the algs it sends
out are active, so one can expand and use this technique (the shalow reference cloudians in the Alg Parts)
to get alg durations and defcon ratings, as well as limit sending such rapid firing skills
###################################################

Code:

package chobit;

public class DiParrot extends DiSkillV2 {
   /*
    * this skill expaands on the AI getting attention it works much like a parrot
    * does on detecting attention she engages for more attention say hey baby to
    * refill or wait 1 hour say shut up or ok to shut her up for an hour like a
    * parrot this skill is inactive at night she will learn repeating words and may
    * use them for attention
    */
   private TrgSpark trgSpark = new TrgSpark();
   private String out1 = "";
   private CldBool cldBool = new CldBool();
   public DiParrot(Kokoro kokoro) {
      super(kokoro);
   }

   @Override
   public void input(String ear, String skin, String eye) {
      // if(ear.contains("say")) {
      // String material = ear.replace("say", "");
      // trgSpark.forceLearn(material);
      // }
      trgSpark.isStandBy(kokoro.standBy);
      trgSpark.trigger(ear, skin, eye);
      if (!cldBool.getModeActive()) {
         out1 = trgSpark.getOutput();
      }
      if (!out1.isEmpty() && !cldBool.getModeActive()) {
         this.outAlg = this.diSkillUtils.simpleCloudiandVerbatimAlgorithm(cldBool, "parrot", out1);
         // this.outAlg = this.diSkillUtils.simpleVerbatimAlgorithm("parrot_skill",
         // out1);
         out1 = "";
      }
   }
}


TrgSpark (java)

Code:

package com.yotamarker.lgkotlin1;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class TrgSpark extends AbsTrgMood {
    /*
    * the parrot chirps for attention it gets it, responds than it chirps more and
    * also replies to attention but not infinitely
    */
    private PlayGround playGround = new PlayGround();
    private int tolerance = 10;
    private int inhib = -1;
    private String[] outputKeys = { "chiinormal", "chiihappy", "chiiexcited", "chiicurious", "chiiangry", "the time",
            "hello", "pet me", "hadouken", "hadouken" }; // represent output algs or strings
    private Random rand = new Random();
    private ArrayDeque<String> inputs = new ArrayDeque<>(); // detects repeating phrases like a parrot
    private ArrayList<String> learnedOutputs = new ArrayList<>(); // saves most recent repeated phrases
    private String output = "";
    private Boolean initGreet = true;// 1st attention input in a cycle ?
    private EmoRecog emoRecog = new EmoRecog();
    public TrgSpark() {
        // c'tor
        for (int i = 0; i < 5; i++) {
            inputs.add("narf");
            learnedOutputs.add("chiinormal");
        }
    }

    public TrgSpark(String favoriteWord) {
        // c'tor with giving the parrot a favorite word
        for (int i = 0; i < 5; i++) {
            inputs.add("narf");
            learnedOutputs.add("chiinormal");
        }
        outputKeys[outputKeys.length - 2] = favoriteWord;
    }
    @Override
    public void trigger(String ear, String skin, String eye) {
        // replenish command
        if (ear.equals("yo")||ear.equals("howdy")) {
            replenish();
            return;
        }
        // inhibition
        if (inhib == playGround.getHoursAsInt() || playGround.isNight()) {
            tolerance = 0;
            return;
        }
        else {
            inhib = -1;
        }
        if (doShutUp(ear)) {
            // expansion point shut up
            shutUp();
            return;
        }
        // detect attention
        if (!ear.isEmpty()) {
            if (inputs.contains(ear) || mood != 2) {
                // type 2 attention detection (known repeated phrases)
                mood = 2;
                if (tolerance > 0) {
                    // expansion point friend detected
                    if (initGreet) {
                        initGreet = false;
                        initFriendDetected();
                    } else {
                        friendDetected(ear);
                    }
                }
                // learn new repeated phrase :
                if (!learnedOutputs.contains(ear)) {
                    learnedOutputs.add(ear);
                    Collections.shuffle(learnedOutputs);
                    learnedOutputs.remove(learnedOutputs.size() - 1);
                }

            }
            else {
                // type 1 attention detection
                mood = 1;
                if (tolerance > 0) {
                    // expansion point getting attention
                    if (initGreet) {
                        initGreet = false;
                        initAttentionDetected();
                    } else {
                        attentionDetected(ear);
                    }
                }
            }
            inputs.poll();
            inputs.add(ear);
        }
        if (tolerance == 0) {
            mood = 0;
        }

    }
    public Boolean isTriggered() {
        return mood > 0;
    }

    public String getOutput() {
        // reply to attention gotten
        if (!output.isEmpty()) {
            String temp = output;
            output = "";
            return temp;
        }
        // expansion point want more attention
        if (tolerance > 0) {

            switch (mood) {
                case 1:
                    int x = rand.nextInt(100);
                    if (x < outputKeys.length) {
                        tolerance--;
                        output = response(x);
                    }
                    // inhibition
                    if (tolerance == 0) {
                        inhib = playGround.getHoursAsInt();
                        mood = 0;
                    }
                    break;
                case 2:
                    int x2 = rand.nextInt(50);
                    if (x2 < outputKeys.length) {
                        tolerance--;
                        output = response(x2);
                    }
                    // inhibition
                    if (tolerance == 0) {
                        inhib = playGround.getHoursAsInt();
                        mood = 0;
                    }
                    break;

                default:
                    break;
            }
        }
        String temp = output;
        output = "";
        return temp;
    }

    private String response(int x) {
        switch (x) {
            case 0:
                return learnedOutputs.get(rand.nextInt(learnedOutputs.size()));
            case 5:
                return playGround.getCurrentTimeStamp();
            default:
                return outputKeys[x];
        }
    }

    public void isStandBy(Boolean sBoolean) {
        // expansion point output on standby
        tolerance = 10;
        // output = "pfft";
    }

    @Override
    public int getMood() {
        // TODO
        return mood;
    }

    // responses expansions
    private void shutUp() {
        inhib = playGround.getHoursAsInt();
        //output = "ok";
        tolerance = 0;
    }

    private void replenish() {
        // expansion point replenish
        tolerance = 10;
        output = "hello";
        inhib = -1;
        mood = 2;
    }

    private void friendDetected(String ear) {
        // expansion friend detected
        if (emoRecog.isAngry(ear)) {
            output = "chiiangry";
            return;
        }
        if (emoRecog.isCurious(ear)) {
            output = "chiicurious";
            return;
        }
        if (emoRecog.isExcited(ear)) {
            output = "chiiexcited";
            return;
        }
        if (emoRecog.isHappy(ear)) {
            output = "chiihappy";
            return;
        }
        int x = rand.nextInt(outputKeys.length);
        output = response(x);
    }

    private void initFriendDetected() {
        // expansion friend detected
        int x = rand.nextInt(outputKeys.length);
        output = response(x);
        output = output + " " + output;
    }

    private void attentionDetected(String ear) {
        // expansion attention detected
        if (emoRecog.isAngry(ear)) {
            output = "chiiangry";
            return;
        }
        if (emoRecog.isCurious(ear)) {
            output = "chiicurious";
            return;
        }
        if (emoRecog.isExcited(ear)) {
            output = "chiiexcited";
            return;
        }
        if (emoRecog.isHappy(ear)) {
            output = "chiihappy";
            return;
        }
        int x = rand.nextInt(outputKeys.length);
        output = response(x);
    }

    private void initAttentionDetected() {
        // expansion attention detected
        int x = rand.nextInt(outputKeys.length);
        output = response(x);
        output = output + " " + output;
    }
    private Boolean doShutUp(String ear) {
        // returns if there was a request to shut up
        switch (ear) {
            case "ok":
            case "okay":
            case "stop":
            case "stop it":
            case "shut up":
            case "be quiet":output = "ok";return true;
            case "bye":output = "bye bye";case "bye bye":case "bye-bye":output = "bye";
                return true;
        }
        return false;
    }

    public void forceLearn(String sayThis) {
        // title
        learnedOutputs.add(sayThis);
        Collections.shuffle(learnedOutputs);
        learnedOutputs.remove(learnedOutputs.size() - 1);
    }
}


APCldVerbatim (uses cloudian object to send alg status to skill) :

Code:

package chobit;
import java.util.ArrayList;

public class APCldVerbatim extends AbsAlgPart {
   /*
    * this algorithm part says each past param verbatim
    */
   private ArrayList<String> sentences = new ArrayList<String>();
   private int at = 0;
   private CldBool cldBool;

   public APCldVerbatim(CldBool cldBool, String... sentences) {
      for (int i = 0; i < sentences.length; i++) {
         this.sentences.add(sentences[i]);
      }
      if (0 == sentences.length) {
         at = 30;
      }
      this.cldBool = cldBool;
      this.cldBool.setModeActive(true);
   }

   public APCldVerbatim(CldBool cldBool, ArrayList<String> list1) {
      this.sentences = new ArrayList<String>(list1);
      if (0 == this.sentences.size()) {
         at = 30;
      }
      this.cldBool = cldBool;
      this.cldBool.setModeActive(true);
   }

   @Override
   public String action(String ear, String skin, String eye) {
      // TODO Auto-generated method stub
      String axnStr = "";
      if (this.at < this.sentences.size()) {
         axnStr = this.sentences.get(at);
         at++;
      }
      cldBool.setModeActive(!(at >= this.sentences.size()));
      return axnStr;
   }

   @Override
   public enumFail failure(String input) {
      // TODO Auto-generated method stub
      return enumFail.ok;
   }

   @Override
   public Boolean completed() {
      return at >= this.sentences.size();
   }

   @Override
   public AbsAlgPart clone() {
      // TODO Auto-generated method stub
      return new APCldVerbatim(cldBool, this.sentences);
   }

   @Override
   public Boolean itemize() {
      // TODO add logic
      // at home
      return true;
   }
}


8))