Ai Dreams Forum

Member's Experiments & Projects => General Project Discussion => Topic started by: Zero on March 24, 2020, 08:53:36 am

Title: BirdyVM
Post by: Zero on March 24, 2020, 08:53:36 am
Hi,

I've updated & upgraded my old 'Birdy' project, which is now stronger and conceptually stable.
https://github.com/ThinkbotsAreFree/Birdy (https://github.com/ThinkbotsAreFree/Birdy)

I've also implemented a working prototype for testing purpose:
http://thinkbots.are.free.fr/ProjectBirdyVM/ (http://thinkbots.are.free.fr/ProjectBirdyVM/)

It's a multi-agent system that relies heavily on the pub/sub pattern, on string rewriting, and on the 'graphmaster' technique (à la AIML). There are mainly two types of entities: units and rules, which have complementary strengths and use cases.
- Units are concave lenses that tend to produce divergent thinking (explorative, spontaneous, free-flow).
- Rules are convex lenses that tend to produce convergent thinking (focusing, logical, procedural).

Edit: comments are not implemented yet
Title: Re: BirdyVM
Post by: Zero on March 25, 2020, 09:32:14 pm
I have 1 last unused special character, '&', and instead of using it for my half-baked getUsual() (https://aidreams.co.uk/forum/index.php?topic=14698.msg63161#msg63161) algorithm, I decided to inject something actually useful in this project: Scheme! So, from inside of BirdyVM, one can now evaluate Scheme (https://www.biwascheme.org/index.html) expressions and assign them to variables.

Since I want something simple, I think BirdyVM will be available as a TCP server, downloadable from the Microsoft Store app.

Edit: comments are implemented.
Title: Re: BirdyVM
Post by: Zero on March 27, 2020, 12:34:00 am
New User Xperience! New functionalities! And still as free as a free lunch!

Check it out http://thinkbots.are.free.fr/ProjectBirdyVM/ (http://thinkbots.are.free.fr/ProjectBirdyVM/)

- UI from Bigpicture.js (https://josephernest.github.io/bigpicture.js/bigpicture-tutorial.html)
- Auto-save thanks to moz' localforage (https://github.com/localForage/localForage)
- And you'll even see little messages blinking here and there as the system runs

Edit:
Here is a test.

Click somewhere and type
Quote
| global + #m @ second > $m

Click again and type
Quote
| second + hey #n ^ got $n ok

Then in the command bar, type
Quote
@ global > hey foo

The first line catch the user message and sends it on the "second" channel. Then the second line catches it and outputs "got foo ok".
If you look at the nodes when you hit enter, you'll see the messages under the nodes.
Title: Re: BirdyVM
Post by: ivan.moony on March 27, 2020, 07:08:40 am
I like the graphical layout, though functionality would be better if scrollbars or even mini-map would be visible.

But a bit more introductory description and possible use cases would keep a user more informed about the project when visiting Github read.me.
Title: Re: BirdyVM
Post by: Zero on March 27, 2020, 08:44:55 am
Thanks for the encouraging words :)
I'm not sure I'm able to make a minimap, but yes, I like the idea.

About the doc, an entire book would need to be written, because the model is pretty strong. Did you notice there's an embedded Scheme interpreter included?
I'll have to work hard on documentation.

Also, I think it would need an alternative syntax, probably based on XML.
Title: Re: BirdyVM
Post by: Zero on March 28, 2020, 02:42:42 pm
Bigpicture.js (https://github.com/josephernest/AReallyBigPage) is just awesome.

https://www.youtube.com/watch?v=52ilOpxWYuc
Title: Re: BirdyVM
Post by: Zero on April 02, 2020, 09:26:37 pm
New skin, more like ...

https://www.youtube.com/watch?v=6lcZ0redg1s&list=PL-sQwttqzmN1YVqnGb9ChiRTffGyyJcA1&index=5

Title: Re: BirdyVM
Post by: Zero on April 03, 2020, 09:10:08 pm
We now have goodies  ;D

Do you think I should go on with this one, documenting, debugging it, ...etc., or am I losing my time? I believe Birdy can be fun as an unusual - exotic - chatbot engine, but it probably won't get conscious anytime soon. I know this is my choice to make, but on the other hand, we're a community.

Edit: I added some big picture material (https://github.com/ThinkbotsAreFree/Birdy#the-big-picture), explaining things from a different perspective. I would highly appreciate you opinions, if any :)
Title: Re: BirdyVM
Post by: ivan.moony on April 04, 2020, 04:26:02 pm
You have to make sure someone would use it. Otherwise, it doesn't make much sense.
Title: Re: BirdyVM
Post by: Zero on April 04, 2020, 09:37:42 pm
Are you sure about this?
Title: Re: BirdyVM
Post by: ivan.moony on April 04, 2020, 10:42:07 pm
I'm sure that I'm not sure.

There are things that may be their own purpose. Which ones are those, only you can answer that question for yourself.
Title: Re: BirdyVM
Post by: Zero on April 05, 2020, 09:08:44 am
I think it's possible to extract from Birdy a very pure and simple computation mechanism.

Channels use pattern matching to deliver messages, and units send messages where substitution occur, based on captured wildcards. If we remove everything else, we obtain a list of channel/response couples.

What's missing is a way to detect the simultaneous presence of several message patterns. Wip.
Title: Re: BirdyVM
Post by: infurl on April 05, 2020, 09:45:25 am
What's missing is a way to detect the simultaneous presence of several message patterns. Wip.

The easy way to do that is with a context free grammar and a parser which can handle unrestricted ambiguous context free grammars. I've written such a thing for my own projects, but there are also several open source libraries that you can use.
Title: Re: BirdyVM
Post by: Zero on April 05, 2020, 11:03:52 am
If you look in birdy.js (https://github.com/ThinkbotsAreFree/Birdy/blob/master/js/birdy.js), you'll find definitions of
- sys.newPath() line 232
- sys.delPath() line 253
- sys.getDeliveryPlan() line 294

Sorry about the coding style, I always feel like I code like shit. Anyway, these functions implement a tree of message recipients. The idea is to deliver messages to every potential rule, instead of one rule only. In typical string rewriting system like semi-thue (which the esolang Thue (https://esolangs.org/wiki/Thue) is based on), if you have several candidate rules, you pick only one rule, either randomly, or based on some criteria, length for example, or a priority level associated to rules. So, in
S -> BBB
B -> 0
B -> 1
you'd choose either the 2nd or the 3rd rule to replace B's.

My idea is not to choose, but to activate them both.

foo * bar -> baz *
baz * mew -> * moo
* mew -> gnu *

If you launch a "foo new mew bar", this system will produce "baz new mew", which will then produce both "new moo" and "gnu baz new". If I'm correct. The next design step here, would be to allow some sort of combination in the pattern expression, to make it fire only if several patterns match. Something like and/or connectives.
Title: Re: BirdyVM
Post by: krayvonk on April 05, 2020, 11:24:13 am
Sounds like a great system,  I hope you get what ur after.  I prefer these chat bots to hacking up frogs brains any day...
Title: Re: BirdyVM
Post by: Zero on April 05, 2020, 12:23:47 pm
Thank you and yeah, the frog thing feels wrong. No respect for life. Better create life in our computers!
Title: Re: BirdyVM
Post by: Zero on April 05, 2020, 03:11:44 pm
I'm not sure what I'm after.

The human global civilization, if there is such a thing, has been running after a never ending growth for decades. If it was about helping poor people to have more decent lives, food, education, health, then it would be a good growth. But no, it looks like it's more about making rich people even more rich. Global warming? Who gives a shit. A virus that can affect anyone, including kings and presidents? Wooow, everybody stops and go home now. See, me being "useful" to this society is not exactly one of my priorities.

But I'm trying to learn a lot from Buddhism and Taoism. Taoism is a lot of things. For example, it is a particular way of doing things. We, here, AI enthusiasts, are probably modern alchemists, with all our experiments and attempts of any kinds. I suspect there are things to learn from Chinese calligraphy that could be applied to coding, and new way to interact with our computers that still deserve to be invented. Because this is what it's all about: our relationship with computers, and by extension, with the world.
Title: Re: BirdyVM
Post by: ivan.moony on April 05, 2020, 05:08:50 pm
Code
procedure live (x, world) {
    while (x.isAlive ()) {
        y := world.getTheMostVulnerableGroupOfLivingBeings ();
        x.tryToHelp (y);
        x.growOlder ();
    }
    return x;
}