Hi Sunama,
Could you perhaps tell me what you did exactly? Cause I can't seem to find the log in which something goes wrong due to out of order processing. That said, I don't suppose it's hard with the web-based version to get such a behaviour at the moment. I am getting the type of time-outs that is suggesting me the server is over-used.
You are correct though, Aici currently doesn't have anything in place to make certain that the input order is preserved during execution (which it should).
Disabling the send button itself would perhaps be a bit to much. What would happen if there was no reply? It's parallel processing method makes it not so evident to keep track of which thread belongs to which input (though it is possible to add if really required). That together with the fact that multiple users can chat at the same time, makes it not so convenient to disable the send button during processing.
In a nutshell, I said "my name is abu". (1)
The very next thing I typed was, "what is my name?" (2)
Your AI then replied that it doesnt know what my name is. (3)
I then wrote again, "my name is abu". (4)
"What is my name?" (5).
It then gave the correct answer.
Now, what was happening (and correct me if I'm wrong), is that your AI was able to answer the question correctly in both cases. BUT, it couldnt do so, when I typed in (2). This was because (1) was still being processed. After processing for (1) was completed, it could then answer my name.
Had you disabled the send message button (until (1) had been processed), it would've been able to answer my question (2).
The key here is to perhaps inform the user, somehow, that (1) is still being processed, so your AI cannot answer questions regarding the information provided in (1). The easiest method for this is to deactivate the send message button, until the AI has replied to (1).
If you allow multiple users to type information into AI, all at the same time, you are going to run into problems.
My suggestion is to first get your AI replying to input from 1 user. Once it has mastered this, you can then program it to answer queries from multiple users. Programs are best constructed when you build them step by step. Rather than building a program with an IQ of 1000, it is best to build the program with an IQ of 1. Then add to the code to enable its IQ to rise to 2. Then further add to the code, so it now has an IQ of 3 and so on.
The idea being that with every new version, your program is becoming increasingly advanced. Eventually, you will reach a point where your program has the "wow" factor and you can sell/market this for financial gain. This is the model which I am using.
"Disabling the send button itself would perhaps be a bit to much. What would happen if there was no reply?"I'm using message numbers and response numbers.
What this means is that every client and server have a record of the amount of responses received/sent. They both have sync up. If 1 message is lost, a request is made to resend the last message.
I have set a time of 3s for the client to wait for a reply from the server. If no reply is received, the client resends the message to the server. When the server receives this message, if the message is new then it will store it and generate a reply. If it is message which has previously received, it will merely ignore it.
The above technique is what I have used in my own client.
Also, I am still very interested in licensing your AI.
I am developing my own AI and monitoring your development. My plan is to see what features your AI possesses and mine lacks. I shall then license only those features.
At present, my AI does not possess any algorithms which relate to "is a" and "has a", which I believe your AI already possesses. If your algorithm is working well for working out "is a" and "has a" relationships, then I may not bother wasting time on developing those algorithms for my AI. I shall license yours.
My worry is that your AI does seem very slow to generate answers. No doubt this is purely because your AI is much more complicated than mine. What hardware are you running your server (for the web chat) on?
Have you optimised your code for speed yet, at all? Is the current response generation time as fast as you are likely to get or do you feel that you will be able to make response generation faster?