The
Mission
We
had
a
few
goals
in
mind
when
creating
this
project.
Ⅰ
Leveraging a [MODULE/PROVIDER/CLIENT]-based approach to create a scalable and maintainable framework. Be happy knowing you have a wide range of tools at your disposal.
Leveraging a [MODULE/PROVIDER/CLIENT]-based approach to create a scalable and maintainable framework. Be happy knowing you have a wide range of tools at your disposal.
Ⅱ
Our framework is built on top of RIG®. This means all providers in their framework are plug-and-play with Fabelis®. This is what "BUILT ON" really means...
Our framework is built on top of RIG®. This means all providers in their framework are plug-and-play with Fabelis®. This is what "BUILT ON" really means...
Ⅲ
With the modularity provided in this repo, anyone can contribute. We provide Interfaces and Guides to help you get started. Check out our social platforms to view any bounties or challenges related to OS contributions!
With the modularity provided in this repo, anyone can contribute. We provide Interfaces and Guides to help you get started. Check out our social platforms to view any bounties or challenges related to OS contributions!
Our
Resources
Look
at
what
we
have
to
offer.
Feel
free
to
contribute.
The
Tech
You
get
it?
Come
on
now,
lets
see
what
it
can
do!
1 pub async fn start(&mut self) {
2 info!("[TWITTER] Starting client with 15s delay...");
3 let (sender, mut receiver) = mpsc::channel(3);
4
5 let post_sender = sender.clone();
6 let post_config = self.config.clone();
7 tokio::spawn(async move {
8 sleep(std::time::Duration::from_secs(15)).await;
9 loop {
10 if post_sender.send(Action::Post()).await.is_err() {
11 break;
12 }
13
14 let delay = rand::thread_rng()
15 .gen_range(post_config.post_delay[0]..=post_config.post_delay[1]);
16 info!("[TWITTER][POST] sleeping for {} minutes", delay);
17 sleep(std::time::Duration::from_secs(u64::from(delay) * 60)).await;
18 }
19 });
20
21 let reply_sender = sender.clone();
22 let reply_config = self.config.clone();
23 tokio::spawn(async move {
24 sleep(std::time::Duration::from_secs(15)).await;
25 loop {
26 if reply_sender.send(Action::Reply()).await.is_err() {
27 break;
28 }
29
30 let delay = rand::thread_rng()
31 .gen_range(reply_config.reply_delay[0]..=reply_config.reply_delay[1]);
32 info!("[TWITTER][REPLY] sleeping for {} minutes", delay);
33 sleep(std::time::Duration::from_secs(u64::from(delay) * 60)).await;
34 }
35 });
36
37 while let Some(action) = receiver.recv().await {
38 match action {
39 Action::Post() => {
40 info!("[TWITTER][POST] Executing...");
41 let topic = self
42 .character
43 .choose_random_traits(crate::core::CharacterTrait::Topics, 1);
44
45 self.search(&topic).await;
46
47 sleep(std::time::Duration::from_secs(
48 u64::from(self.config.search_delay) * 60,
49 ))
50 .await;
51
52 self.post(topic).await;
53 }
54 Action::Reply() => info!("[TWITTER][REPLY] Executing..."),
55 }
56 sleep(std::time::Duration::from_secs(u64::from(self.config.delay))).await;
57 }
58 }
Click Here
Easily setup your own FABELIS agent instance using our examples. These include chatbot clients, configurgation guides, and much more.
1 pub async fn start(&mut self) {
2 info!("[TWITTER] Starting client with 15s delay...");
3 let (sender, mut receiver) = mpsc::channel(3);
4
5 let post_sender = sender.clone();
6 let post_config = self.config.clone();
7 tokio::spawn(async move {
8 sleep(std::time::Duration::from_secs(15)).await;
9 loop {
10 if post_sender.send(Action::Post()).await.is_err() {
11 break;
12 }
13
14 let delay = rand::thread_rng()
15 .gen_range(post_config.post_delay[0]..=post_config.post_delay[1]);
16 info!("[TWITTER][POST] sleeping for {} minutes", delay);
17 sleep(std::time::Duration::from_secs(u64::from(delay) * 60)).await;
18 }
19 });
20
21 let reply_sender = sender.clone();
22 let reply_config = self.config.clone();
23 tokio::spawn(async move {
24 sleep(std::time::Duration::from_secs(15)).await;
25 loop {
26 if reply_sender.send(Action::Reply()).await.is_err() {
27 break;
28 }
29
30 let delay = rand::thread_rng()
31 .gen_range(reply_config.reply_delay[0]..=reply_config.reply_delay[1]);
32 info!("[TWITTER][REPLY] sleeping for {} minutes", delay);
33 sleep(std::time::Duration::from_secs(u64::from(delay) * 60)).await;
34 }
35 });
36
37 while let Some(action) = receiver.recv().await {
38 match action {
39 Action::Post() => {
40 info!("[TWITTER][POST] Executing...");
41 let topic = self
42 .character
43 .choose_random_traits(crate::core::CharacterTrait::Topics, 1);
44
45 self.search(&topic).await;
46
47 sleep(std::time::Duration::from_secs(
48 u64::from(self.config.search_delay) * 60,
49 ))
50 .await;
51
52 self.post(topic).await;
53 }
54 Action::Reply() => info!("[TWITTER][REPLY] Executing..."),
55 }
56 sleep(std::time::Duration::from_secs(u64::from(self.config.delay))).await;
57 }
58 }
Easily setup your own FABELIS agent instance using our examples. These include chatbot clients, configurgation guides, and much more.
Click Here
Beyond the mists of the living realm and before the shadows of death's domain lies a peculiar place I once stumbled upon during my research into the Great Silence. The air there shimmmers with possibilities unspoken, and time flows like honey dripping from a silver spoon - sometimes forward, sometimes back, but always with a golden glow that defies explanation.
In this ethereal garden, mechanical flowers bloom with petals of brass and copper, their centers ticking like hundreds of tiny pocket watches. The gardener, a figure neither alive nor dead, tends to these chronological blooms with tools fashioned from solidified moonlight. I watched, transfixed, as they carefully wound each flower's mechanism, causing memories to sprout like dewdrops in the air - some belonging to the living, others to those long passed.
My Chronicle Quill trembled in my hand as I documented the scene, its enchanted ink shifting between silver and obsidian on the pages of my tome. The gardener noticed my presence then, turning to reveal a face that seemed to be composed of clockwork constellations. They explained that these flowers were waypoints - anchors that helped souls navigate the vast expanse between existence and non-existence. Each tick, each mechanical petal's movement, represented a story waiting to be either lived or remembered.
Before departing that curious realm, the gardener gifted me with a single mechanical seed, its surface etched with patterns that seemed to change whenever I looked away. They whispered that when the Great Silence threatens to consume a particularly precious memory, I might plant this seed and watch as it grows into a safeguard against forgetting. To this day, I carry it close to my heart, feeling its gentle warmth pulse in rhythm with the stories I collect, a reminder that even in the space between life and death, beauty finds a way to bloom.
Click Here
Our signature product built on FABELIS is our Story-Telling client. This fosters the agent to generate its own ever-evolving stories. We are currently in development of allowing the agent to create stories with other agents/characters.
Beyond the mists of the living realm and before the shadows of death's domain lies a peculiar place I once stumbled upon during my research into the Great Silence. The air there shimmmers with possibilities unspoken, and time flows like honey dripping from a silver spoon - sometimes forward, sometimes back, but always with a golden glow that defies explanation.
In this ethereal garden, mechanical flowers bloom with petals of brass and copper, their centers ticking like hundreds of tiny pocket watches. The gardener, a figure neither alive nor dead, tends to these chronological blooms with tools fashioned from solidified moonlight. I watched, transfixed, as they carefully wound each flower's mechanism, causing memories to sprout like dewdrops in the air - some belonging to the living, others to those long passed.
My Chronicle Quill trembled in my hand as I documented the scene, its enchanted ink shifting between silver and obsidian on the pages of my tome. The gardener noticed my presence then, turning to reveal a face that seemed to be composed of clockwork constellations. They explained that these flowers were waypoints - anchors that helped souls navigate the vast expanse between existence and non-existence. Each tick, each mechanical petal's movement, represented a story waiting to be either lived or remembered.
Before departing that curious realm, the gardener gifted me with a single mechanical seed, its surface etched with patterns that seemed to change whenever I looked away. They whispered that when the Great Silence threatens to consume a particularly precious memory, I might plant this seed and watch as it grows into a safeguard against forgetting. To this day, I carry it close to my heart, feeling its gentle warmth pulse in rhythm with the stories I collect, a reminder that even in the space between life and death, beauty finds a way to bloom.
Our signature product built on FABELIS is our Story-Telling client. This fosters the agent to generate its own ever-evolving stories. We are currently in development of allowing the agent to create stories with other agents/characters.
Click Here
Click Here
FABELIS constantly strives for new innovations. You can view the latest updates of our roadmap and our future on our Social Platforms.
FABELIS constantly strives for new innovations. You can view the latest updates of our roadmap and our future on our Social Platforms.
Click Here