HomeVideos

Building Intelligent Research Agents with Manus - Ivan Leo, Manus AI (now Meta Superintelligence)

Now Playing

Building Intelligent Research Agents with Manus - Ivan Leo, Manus AI (now Meta Superintelligence)

Transcript

1986 segments

0:00

[Music]

0:14

[Music]

0:20

Yeah, I think I can just start. Um so

0:23

the way this workshop will just be run

0:24

is we'll show a few demos of what we

0:26

built with Manis what we have at the

0:29

moment and then um if you guys have any

0:31

questions at any point in time feel free

0:32

to stop me um throughout this whole

0:34

workshop what we're going to be using is

0:36

the new manus API and it will go

0:38

basically will reproduce our original

0:39

Slackbot um so if you use our new Madis

0:42

app you can actually now use Madness in

0:44

Slack uh so hopefully it works since I'm

0:46

doing it live I'm a little worried but

0:49

uh let's see

0:51

So

0:53

I think a common question that a lot of

0:54

people are asking is what is manis and

0:56

what does manness actually do right

0:58

which is quite fair because at this

1:01

point we kind of do everything. If you

1:03

go to our website uh you see this really

1:05

long description that says manis is the

1:08

action engine that goes beyond answers

1:10

to execute task automate workflows

1:12

extend human reach. Um, if you search

1:15

for what is Manus and the new

1:17

announcements that we've made, you may

1:18

have seen Madness 1.5, manus 1.5 flight

1:21

saying that we're now faster. Um,

1:24

there's an increase in quality gain,

1:26

some user satisfaction increase, and

1:28

that we've rearchitected our models. Um,

1:31

or you might just seen a lot of stuff

1:33

that we talked about where we talked

1:34

about the fact that building AI agents

1:35

is just really difficult, right? And

1:37

it's something we've learned as we

1:38

scaled the number of conversations that

1:40

we have every day to millions and and

1:42

beyond, right? Because now we have

1:44

things like infrastructure, we have

1:46

sandboxes, we have reliability, and all

1:48

these different like considerations to

1:50

take care of.

1:52

But really what we want to do at Manis

1:53

is build a general AI agent that you

1:56

want to use in a variety of different

1:57

ways. And we really want to meet users

1:59

where they're at. And from day one,

2:01

we've been designing Manners with this

2:02

in mind. Whether you like to use Mannis

2:04

in your mailbox, whether you like it in

2:06

Slack, whether you have your own custom

2:08

programmatic workflow or you just like

2:10

to use the iOS app on the go, which I

2:12

quite enjoy. Um, we've kind of built

2:15

Manis to do that. And because of that,

2:19

um, we have a lot of different ways to

2:21

use Manis. Currently, we have the web

2:24

application, we have the Slack app, we

2:26

have the API that we just launched,

2:28

which we'll be working through today. We

2:30

have a new browser operator. We have two

2:33

days ago we launched a new Microsoft 365

2:36

integration which means that in the far

2:38

future or in the near future hopefully

2:40

um when you're writing a word document

2:42

or you're doing a presentation or you're

2:44

doing anything in in the Microsoft suite

2:46

if you just add mattis uh we'll edit

2:48

your powerpoints we'll fix your j your

2:51

janky excel uh templates or you know

2:54

just whatever needs to be done. And

2:55

lastly we also have mail madness.

2:58

And so I'll just be walking through four

3:00

different demos that we built with Manis

3:02

and you can kind of see what we've been

3:04

building for the last few months since

3:05

we launched Manis 1.5.

3:09

One of the things that I Let me see if

3:12

this works. Right. So I've been learning

3:15

French for about a year and honestly

3:17

speaking I I'm pretty bad at it. It's

3:20

not an easy language and what I really

3:23

wanted to do was to find a way whereby I

3:25

could practice it every day. as managers

3:27

to build me an application where you

3:29

know I could practice this and so the

3:32

way it works is that you know throughout

3:33

my day on my on my phone I'm just going

3:35

to key in a bunch of random prompts or

3:37

random things in mind like hey today I

3:39

had this thought today I'm stressed

3:40

about this workshop that I'm currently

3:42

conducting and once you key this in

3:45

manus then takes a language model and

3:47

finds the exact problems with what I've

3:49

written for example over here you can

3:51

see that there's an inline correction

3:52

here whereby you know life is live

3:55

forward but understood backwards, right?

3:57

And manice is nice enough to give me a

4:00

entire corrected version. But let's say

4:02

for example, I don't quite know what

4:03

this word means. Well, I can just add it

4:06

over here and say what is defy,

4:09

right?

4:10

And this is because every single Manis

4:12

web application ships with a fully

4:14

featured language model that you can

4:17

call whether it's structured outputs

4:19

that you want to use whether it's

4:21

whisper to transcribe audio or even in

4:23

this case just you know inline

4:25

corrections with structured outputs. Um

4:27

you can even integrate any sort of

4:29

provider you care about. In this case I

4:31

chose to use 11 labs because I have some

4:33

extra credits and

4:35

hope this works.

4:42

So the beauty about this is that I

4:44

didn't do a single thing and actually

4:46

the the cool part that I enjoy is that

4:48

as I'm interacting with this it kind of

4:50

creates a profile for me. It seems that

4:52

you're 28 working at manners where you

4:54

build agents and hey like you know you

4:56

your biggest strength is your

4:57

willingness to tackle a lot of these

4:59

abstract ideas and but you're really bad

5:01

at anything related to distance and time

5:03

which I get but the beauty about this is

5:06

that with you know manis like with new 1

5:10

manus 1.5 you're able to build these

5:11

really complex operations from scratch

5:14

and you know I think that's pretty cool.

5:17

I would never have bothered to code this

5:18

up. Oh, sorry.

5:19

>> Was that part of Manus' settings or the

5:22

app?

5:22

>> Uh, so this was just me prompting Manis

5:25

on the go as I was bought in between

5:26

talks at AIE. Um, so

5:30

>> user preference.

5:30

>> Yeah. Yeah. So this is just me. I just

5:32

told Manis, hey, can you keep in mind

5:34

because you know I would say things

5:35

about myself like, oh, I have a dog,

5:37

whatnot. But in languages like French,

5:40

you know, you need to bear in mind like

5:41

what's your gender? You need to have all

5:43

these like agreements. And it's kind of

5:44

nice when you get like writing ideas on

5:46

top that Manis gives every day or the

5:48

language model we invoke every day um

5:51

that gives you suggestions on what to

5:52

write.

5:54

And so this is an example of what the

5:56

new web development platform can do. Let

5:59

me just back to my slides. So another

6:02

thing that we can do is mailman where we

6:03

can use the app. So for example if I'm

6:06

using my phone uh let me try to connect

6:09

it right now. So say for example here

6:12

let's say we connect to my phone and we

6:13

go like let's say I have a morning task

6:16

at data do right um and you can just do

6:20

things like maybe I just want to for

6:22

this to reply and just say like

6:26

uh I think my keyboard is kind of

6:28

disabled on the screen sharing for some

6:30

weird reason but basically um you're

6:32

able to essentially take a lot of these

6:34

task and get manage to do them for you

6:36

right and this is an example of how you

6:39

we're able to meet users where they're

6:41

at. The newest one which I think is

6:43

pretty cool is our new browser operator.

6:46

And so I think let me just boot up the

6:48

Madness application.

6:50

And so

6:52

let's say for example we can say, "Hey

6:54

man, I'm currently at the AWS Hang 27 in

6:58

New York. I would love to get a coffee

7:00

after this. I'm jetlagged from Singapore

7:01

where I've flown over 20 hours and I

7:04

just want something really general. I

7:05

just really simple coffee. I just want

7:07

to drop by and and grab something. I'm

7:10

not pretty. I kind of just want

7:12

something simple, maybe an Americano,

7:13

and that should be good,

7:16

right? And so what you actually see is

7:18

that as Mannis is executing a lot of

7:20

this with the new remote browser

7:21

operator, um it'll think for a while. It

7:23

go through a bunch of different things

7:25

and it'll actually kickstart a browser

7:27

tab on my computer that I've set it up

7:29

on. So what this means is that for you

7:32

if you're using any sort of thing like

7:33

LinkedIn, if you're using like um you

7:36

know your Instagram, you have all these

7:38

like platforms you're logged in that you

7:39

can't access through a sandbox browser

7:42

like browser base. This completely

7:44

changes like everything that you're

7:45

using right because now Oh

7:50

man, listen. My bad. Man, can you use my

7:54

browser please? Thank you.

8:00

Oh yeah. So actually this by right

8:02

managed to have used like a browser that

8:04

I have on my computer.

8:07

Let's give it a bit of time to run.

8:14

Yeah. And so this actually kickstarts a

8:15

tab on my computer. Right. And so for

8:18

specific task whereby you need to use

8:20

these authenticated platform just

8:26

uh

8:28

a while for the computer to boot up.

8:31

Yeah. So you can see that it actually

8:33

opened a tab in my computer over here.

8:34

It looked on Google Maps. It pulled it

8:36

up, right? And what we're seeing this

8:38

actually mean is that what's really cool

8:40

about this is you spin up multiple

8:41

instances of this in parallel, right? So

8:43

you can imagine for someone with a Mac

8:45

Mini running in their basement, all you

8:47

got to do is just say every day a

8:48

schedule task, hey manners, use this and

8:50

it'll get it done for you. And these are

8:52

all things that you can do through the

8:53

API, right? Because we built a general

8:56

AI agent first and then web development

8:59

capabilities second, we can also do some

9:01

pretty crazy things. For example, um if

9:04

you look at the this uh demo that I

9:07

built over here. So,

9:11

one of the things that I found really

9:13

confusing about the AIE is that there's

9:14

a lot of different events. I kind of

9:16

want to make sure I hit all of them,

9:17

right? And I found the website a bit

9:20

confusing personally. And so, what I I

9:23

told Manis to do was, "Hey, Manis, can

9:25

you go to the website? Can you look at

9:27

the browser? Can you open a single

9:30

event? And then can you scrape

9:32

everything there for me?" And so, what

9:33

Manis did is that it actually scraped

9:34

every single thing on the single brow on

9:36

their website. It put into a JSON file

9:38

and then it loaded it into this website

9:40

for me. Um, you may notice a very

9:42

brutalist theme and that's because I

9:44

really like Chroma's website design. So

9:45

everything I build looks like Chroma to

9:47

some degree. But what you get out of

9:50

this is that let's say I am interested

9:52

in 2026, the year the IDE died. Well,

9:55

you can see that the description has

9:57

been scraped. I can add to my Google

9:58

calendar in one click. And I also have

10:00

similar events over here, right? For

10:03

example, if I'm interested in the year

10:04

the IDE died, maybe I want to check out

10:06

AMC code or AGI the path forward.

10:08

Everything that I did over here was just

10:10

built by me prompting Manis because I

10:12

was like, hey, I like this event.

10:14

Anything else I should pay attention to,

10:16

right? Everything here is because

10:18

Manners can build in with external

10:19

platforms such as Chroma. Um, and all I

10:22

did was give it a Chroma API key, an

10:24

OpenAI key, so it can do embeddings. And

10:26

now we have this. Now, my favorite

10:28

feature is that after starring

10:30

everything that I'm curious about, I can

10:32

scroll up. I can go to my timeline and

10:36

then instantly I see a list of

10:37

everything over here that is happening

10:40

for the day custom to me. And so,

10:42

yesterday I was really happy to actually

10:44

check out the new talks by Will Brown

10:46

and the applied compute guys which were

10:48

really technical. And this is an example

10:50

of what you can build with the web

10:51

development framework that we've put

10:53

together. We also have support for

10:55

things like stripe which because we ship

10:57

with a full docker image you can install

10:59

anything on it. Uh some of my favorite

11:01

examples, you've you've used anything a

11:03

bit more complex, you need a Reddis Q,

11:05

you can actually just install Reddis on

11:06

the web app and use BMQ and you're good

11:09

to go, right? Um Stripe integrations, if

11:13

you use a lot of other platforms because

11:15

they're not full Docker images, they're

11:17

not full applications, they're just

11:18

giving you a nice front end, you're not

11:20

actually able to do things like web

11:22

hooks or more complex integrations, but

11:24

we can support that. And if you use our

11:26

Stripe integration, for example, we

11:28

automatically set up web hooks for you.

11:29

We ways to test it, right? Manners can

11:31

receive the web hooks. And in the

11:33

future, we'll be rolling out things like

11:35

autoscaling, warm deployments, all the

11:38

important things that you need in order

11:39

to essentially build a single MVP idea,

11:42

right? You can integrate anything you

11:44

want. You can add any packages you want.

11:47

And please don't abuse this platform,

11:48

guys. I kind of like my job.

11:51

We It's It's been uh we worked very hard

11:53

to try to keep it uh good and cheap for

11:55

everybody, you know. Um, but most

11:57

importantly, it's like it really is the

11:59

fact that if you build a general AI

12:00

agent instead of verticalized products,

12:03

you can do so much more. And I think

12:04

that's kind of what I'm driving at here,

12:06

right? Imagine building this six months

12:08

ago. I would have to build a web

12:10

application. After I built a web

12:12

application, then I need to set up my

12:13

Chroma account. I need to get my Chroma

12:15

DB setup. Then I need to maybe find

12:17

cloud code, boot it up. After I put it

12:20

together, I now need to think about,

12:21

hey, whether I deploy it with manage, it

12:24

kind of just works. And that's kind of

12:26

the beauty of it and things will get

12:27

better, right? Uh so I talked a lot

12:29

about what Manis is and so I guess I

12:33

should move on a little bit to the manis

12:34

API which is what most people came here

12:36

for. And so what is the manus API? Well

12:41

earlier you've seen a few different

12:42

examples whereby you know we've used

12:44

manis to build websites. We've used

12:46

Manis to do things like remote browser

12:48

operation and you know manus also ships

12:50

with the ability to query things like

12:52

the notion your custom MCPS whatever

12:54

sort of like you know code they need

12:56

written because every single manage chat

12:58

ships with its own sandbox and so you

13:01

get the exact same things with the API

13:03

so so what are some things that we built

13:06

internally right the Slackbot is the

13:08

thing that's public facing our Zapia

13:10

integration is built on our API our N8

13:13

integration is also built on our on our

13:15

API Okay. And we built a lot of our own

13:18

support bots in house whereby before

13:21

anyone looks at it, if it's something

13:23

that's important, manice can go to the

13:25

chat, click on every single message, and

13:28

at the end it gives a full report with

13:29

screenshots because it has a browser of

13:32

everything that you can do. And so I

13:34

really liked what I built internally and

13:36

so I thought, why don't we build it

13:37

together, right? Um, this isn't very

13:40

complicated and I I kind of hope Stripe

13:42

and Modal work nicely. So we'll see. I

13:45

hopefully fingers crossed. Um but

13:46

through this we're going to work through

13:47

a lot of the simple ideas. Um we'll be

13:50

looking at a few different notebooks. If

13:52

you want to sort of um see the notebooks

13:55

um I have them over here at this link.

13:57

So a tiny URL slashmanis API workshop.

14:01

And so in order for you to get started

14:03

with that you'll need a manus API key.

14:05

Um if you have a normal manus account

14:07

the billing for the API is exactly the

14:08

same as if you took a chat. So whatever

14:12

you would spend for the same query in a

14:13

manus chat on a web app, the API would

14:16

cost the same. And really for now, this

14:18

is a this is what we want you to do

14:20

because we want Manners to meet you

14:22

where you're at, right? We don't want

14:24

you have to worry about if I use the

14:25

API, is it more expensive or less

14:26

expensive? Is the chat different? Should

14:28

I use the Slack integration? We want you

14:30

to be able to we want to provide a

14:32

custom customizable way for you to be

14:34

able to work with Manis. And so um this

14:37

is the tiny URL link and I'm just going

14:39

to proceed on to the next bit.

14:44

So the first thing we're going to do is

14:45

going to look at some of the API

14:46

fundamentals. Um so I have the API over

14:50

here. Um you need these three

14:51

environment variables. I tried to make

14:53

it very easy for you to set up Slack

14:55

even though it is a pain in the ass. Um

14:58

so here are the five notebooks I'll be

15:00

working through. And if you scroll down

15:02

a fair bit, I have the screenshots on

15:04

how you can actually get your own Slack

15:06

tokens. Um,

15:08

so let's begin.

15:10

So the first thing you need is basically

15:13

a manis API key. And once you have the

15:17

API key, you need to put it in this

15:19

envir.

15:21

I've provided basically the ENV

15:23

variables you need in av.

15:25

But you basically need a manus API key,

15:27

a slackbot token, and a slack signing

15:29

secret.

15:31

So, let's load it in.

15:33

Okay, I kind of need to

15:36

Holy that was tough. Um, so you

15:38

can see that now that we've loaded it in

15:40

from our EMD file. Um, let's test it

15:44

out. So,

15:47

we're just going to check what files

15:48

we've uploaded prior to this. And

15:50

because this is a fresh account, we

15:51

haven't uploaded any files. Um, you're

15:53

just going to get object lists if not

15:54

normally have a data property. And so,

15:57

this means that our API key is working

15:58

as intended. Um, one of the benefits of

16:01

using the Manis account is that we often

16:03

have a lot of clients that come to us

16:04

saying that I have sensitive files. I

16:06

have things that, you know, I want to

16:08

make sure no one else is able to see.

16:09

And so, every file that you upload to

16:11

the manage API, files API, it's

16:13

basically going to be deleted

16:14

automatically in 48 hours. And so, that

16:18

means that whatever sort of temporary

16:19

file you're using, if you delete the

16:21

session, you can delete the file at any

16:23

time. But if you forget like, oh, I

16:24

upload this file, maybe I want to use it

16:26

later, we will delete it for you, right?

16:28

you have to delete the session for that

16:29

file to be gone.

16:32

Okay, cool. So, we validated that the

16:33

API key works. So, let's create our

16:35

first task. Um, I'm just going to be

16:38

using the pure request here where I make

16:41

a core request, but in our documentation

16:43

at open.mmanis.ai,

16:45

we do also have support for things like

16:47

the OpenAI responses SDK if that's

16:49

something you're using. Um, if you're

16:51

using any sort of AI framework, I I've

16:53

heard a few at this conference like AI

16:54

SDK, Copilot, AG UI or something like

16:57

that. Um, there a whole bunch of them.

16:59

Please feel free to reach out to me. I'm

17:01

happy to try to see how we can make that

17:02

work. So, let's try our first query,

17:05

right? Um, let's ask Mannis, what is 2

17:08

plus2? Please provide a brief answer.

17:10

So, let's

17:12

run it. And when you run your first

17:15

Madness API task, you see that you get a

17:17

few things back. You get a task ID. you

17:20

get a task title and you also get a task

17:22

URL and so these three things are really

17:26

important particularly the task ID the

17:28

reason for that is that when you

17:29

interact with manice and you're using

17:30

manice as part of your workflow part of

17:32

your application you might get things

17:34

where manage will ask you for certain

17:36

bits of clarification like I'm sorry

17:37

like I need to understand a bit more

17:39

what do you exactly want or come back to

17:40

you and with some sort of data and you

17:42

want to actually give some follow-up

17:44

feedback and so by keeping the task ID

17:45

around you're able to push to the same

17:47

session

17:49

So, let's click a bit on this task title

17:51

that we've gotten back.

17:54

And

17:59

I need to Oh, did I use the wrong API

18:02

key? I think I used the wrong API key,

18:04

guys. I'm sorry. I will load a new API

18:07

key for myself.

18:09

I think it's this other one. Oh, yeah.

18:14

Yeah. So you can see what is one what is

18:16

2 plus two and then you got four right.

18:19

So this is the basically we when you

18:22

don't specify a chat mode we have a

18:24

router on the back end that tries to

18:25

determine if you need to use basic

18:27

simple chat or the full-fledged manus

18:29

agent and I think this is something

18:30

that's pretty uh simple but if you want

18:32

full fine grain access we can those are

18:35

parameters you can set on the API.

18:38

So

18:40

if you've looked at the agent profile,

18:42

right, the basically the profile, the uh

18:45

payload that we sent over, you may

18:46

notice this agent profile, manus 1.5. We

18:49

talked about it briefly at the start,

18:51

but there are two kind of models that we

18:53

currently use in manus. One is manus 1.5

18:56

and one is manus 1.5 light. For a lot of

18:58

these more complex tasks, we highly

19:00

recommend using manus 1.5. For example,

19:02

both of the websites earlier were coded

19:03

1.5. If you have very simple queries,

19:06

things that you want to execute a bit

19:07

faster, we recommend 1.5 light. So for

19:10

this workshop, we're going to be using

19:11

1.5 light because we want a faster

19:12

response, but also a lot of the things

19:14

that we are working with are not that

19:16

complex.

19:18

And so

19:20

with this new agent, you have a lot of

19:21

things like unlimited context

19:23

management. So what that means that once

19:24

you go beyond the sort of length context

19:26

window of a normal model itself, like

19:29

whatever model we're using under the

19:30

hood, we do a lot of smart context

19:32

management. And because for us when we

19:35

design nice we try to make sure that the

19:37

KV caching is very high. If you read our

19:39

article on you know context management

19:41

by peak or CTO in um tune um most of

19:44

this means that for you the responses

19:46

are fast and quick and so the easiest

19:48

way is just to say you can just pull man

19:51

right so let's start another task look

19:53

up the weather in New York City and then

19:54

ask me a question about it right

20:02

okay so you can see that the task was

20:03

created successfully and you get a task

20:06

ID a task title and task URL Now, if you

20:08

want to just pull this, it's pretty

20:10

straightforward. Um, there are basically

20:13

three states that the manage agent can

20:14

be in. They're going to be either

20:17

running, pending, completed, or error.

20:21

Um, ideally, you never see error. Error

20:23

is a very rare case. You also have

20:24

completed that means the manage agent is

20:26

done. Pending is when it's it requires

20:28

more input from you. And so, currently,

20:32

we're pulling over here and we're seeing

20:33

that the task is still running. The

20:35

progress of this is it task. Take a look

20:38

at it.

20:39

The weather in New York City over here.

20:43

So, Mannis is currently waiting for a

20:44

response from us. So, I've looked up the

20:46

weather forecast. My question for you is

20:48

given the rainy forecast for Monday or

20:49

Tuesday, would you prefer to plan an

20:51

indoor activity or an outdoor activity

20:52

for one of those days? Right? So, we see

20:55

here's all the here's what you get back

20:57

when you actually query the information

20:58

on the task. You get the credits you've

21:00

used. You get the response back. This is

21:03

sort of similar to the OpenAI responses

21:05

SDK, but basically we expose everything

21:07

to you. And so you get back basically

21:10

your messages and the messages that

21:11

Manis sent to you. And so let's say in

21:16

this case, if we look at the original

21:17

chat, man said that given the rainy

21:19

forecast, would you prefer to plan an

21:21

indoor activity or an outdoor activity

21:22

for one of those days? And if so, which

21:24

day and what kind of activity would you

21:26

prefer? Well, I guess in this case, um I

21:30

guess I'll

21:32

I guess I'll prefer an indoor activity

21:34

on Tuesday. I'll probably choose

21:36

probably an indoor activity

21:39

on Tuesday.

21:41

So, we let it run for a bit.

21:44

And you can see that the the same sort

21:46

of message was pushed to the same chat.

21:48

And what this allows you to do is ensure

21:49

that as you're running more and more

21:51

complex workflows, you're able to ensure

21:52

that all of your context is kept within

21:54

the same chat.

21:57

And so you can use the same polling

21:58

interval. This is a very simple pattern.

22:00

As you're prototyping in the Manis API,

22:02

polling is the easiest way to get

22:04

started. And then in the third notebook,

22:06

we're going to look at basically how to

22:07

use web hooks. Um but for now, I think

22:09

polling is pretty straightforward. Um

22:10

you basically just check to see what is

22:12

the current status of the task given the

22:13

four sort of statuses that we talked

22:15

about running, pending, completed, and

22:17

error. We take those and you can

22:19

determine what to do next in your

22:20

application.

22:23

So this is essentially the first core

22:25

mechanic of the manage API. We talked

22:27

about authenticating your connection to

22:28

the manage API. Creating your first

22:31

task, managing the entire asynchronous

22:33

life cycle from running a task, you

22:35

know, really doing like the initial

22:36

polling and then we also talked about

22:38

how to push to the same task. So what's

22:41

really important when you work with any

22:42

sort of language model is you need some

22:44

sort of context, right? Um, sometimes

22:46

that might be a PDF of your own

22:48

policies. Sometimes that might be, you

22:50

know, some sort of system you want to

22:51

upload. So, we have three different ways

22:53

to do so in the manage API, right? As

22:56

usual, I've defined a small library over

22:58

here, env.y that does basically the same

23:01

things that we did in the previous

23:02

notebooks. So, you can see over here,

23:04

all we do is we just test given a files

23:07

API and then we return the env key.

23:12

So, let's see how this works.

23:15

It's loaded into us.

23:18

So now we have our API key and the base

23:20

URL loaded in. So what I really love

23:23

watching is Rick and Morty. And for a

23:25

long time it was one of the funniest

23:26

shows that I enjoyed. And actually they

23:27

have a free API. And so what we can do

23:29

is we can grab the first maybe 100

23:32

characters from Rick and Morty and let's

23:34

get mad to figure out like what exactly

23:36

Rick and Morty how their characters have

23:38

been. So we fetched everything and we

23:40

can just save it to a Rick and

23:42

Morty.json file, right? Rick and Morty.

23:44

Jason. So this is how how it looks like.

23:46

We have every single character. We have

23:48

the episodes that they've been alive

23:49

for. And over here you have Morty, you

23:53

have Rick status, and you have the

23:56

origin, their current location, and a

23:57

short image about them, right? And so

24:01

with the manus um AP, we support this

24:03

thing. We support file uploads. And this

24:05

is much more useful if you have

24:07

sensitive files, files that are much

24:08

larger than normal. And so this what we

24:10

basically do is if you give us an API

24:12

key if you give us let's say if you send

24:14

a request to us and say hey I want to

24:16

upload a file in this case it's called

24:17

Rick and Morty characters

24:18

correctors.json

24:19

what we're going to do is we're going to

24:20

check on our database going to save it

24:22

and then we're going to give you an ST

24:23

link and so what this allows you to do

24:25

is be able to upload much larger files

24:28

and all you got to do is do a put

24:29

request. So we've created this file and

24:31

you can see the file ID is basically

24:33

file JQ

24:34

you get a file ID that starts a file

24:36

basically and then we're going to tell

24:38

manis using the attach Rick and Morty

24:40

correct data set let's create a simple

24:42

and visually appealing website and so

24:46

we've uploaded the file and let's take a

24:48

look at the anis website over

24:59

Just check. I think it's in my other

25:01

account.

25:03

Yeah. So

25:06

you see over here that basically Rick

25:07

and Morty we've uploaded the file. If

25:10

you upload any images, any PDFs, we

25:12

already come out of the box for for

25:13

things like paring a PDFs, looking at

25:15

handling all that multimodal content. So

25:18

that's really useful for you, right? So

25:21

let's manage this is going to run. It's

25:23

going to create his website. We'll check

25:24

back in a bit. But this is basically the

25:26

first files API. And if you have large

25:27

files that you know you might want

25:29

automatically deleted at some point,

25:31

this is a really useful way to do so.

25:34

The next way that you can do so you also

25:36

have the ability to delete this file at

25:37

any point in time and this is an API

25:39

call that you can run. Next way you can

25:41

do so is if let's say you're using a URL

25:43

attachment, right? A lot of times you

25:44

might have a brow that comes from

25:46

something like circleback, right? You've

25:48

you've just done a call, you have a

25:50

transcript, you want to send it over to

25:51

Manis. And so we actually do support um

25:54

raw call transcripts. So what I've done

25:56

is I have basically created a fake

25:58

transcript.

26:02

Yeah. Uh so I think this file was

26:04

deleted by me accidentally.

26:07

That was good. Warren Buffett.

26:14

So thankfully Burkshshire had way like a

26:19

bunch of investor letters and so we can

26:21

just provide a PDF link.

26:26

So instead of a transcript maybe this

26:28

we're just going to just do like Warren

26:29

Buffett.

26:31

This should work.

26:34

This works. And then maybe we want to at

26:38

this point we want to analyze given this

26:40

investor letter that we have. Can you

26:43

help me parse out you help me summarize

26:46

it and give me some insights into what

26:50

the company is looking to do.

26:55

Right. So,

27:06

so now we can start a task um that

27:08

automatically out of the box works with

27:10

these public urls. One of the things

27:12

that I actually wanted to show over here

27:13

is that with a lot of these um basic

27:17

task um any of the connections that you

27:18

have in manis for example Gmail notion

27:20

that you've already configured ahead of

27:22

time these all work out of the box and

27:24

all you need to do is basically go to

27:25

manis um let's say our website is over

27:28

here you look at the connection over

27:31

here if you go to manage connectors you

27:33

can use any of these connectors just by

27:35

copying this UID over here if you copy

27:37

the UID and you add it as part of the

27:39

connectors payload um it will work out

27:40

of the box for

27:43

We also support things like basic

27:45

before. Um, so this example over here,

27:47

we just had a simple 404 page. Um, this

27:49

was a screenshot that I took of a page

27:51

that man has created. And so what we

27:54

want to do over here is create a

27:55

automated automat automated bug

27:57

investigation task. Right? A user has

28:00

reported that the settings page isn't

28:01

working. Let's give this B64 encoded

28:03

image to manage and let's see how it can

28:05

figure it out. Right? Can you beat Dara?

28:07

Here's a website that we've created

28:09

ahead of time. And can you figure out

28:11

what exactly are the problems with this?

28:13

Right.

28:15

So, this is a simple Manis web app that

28:17

I've created. Um, actually, if you go to

28:18

the settings page, you get a 404. There

28:20

also other few pages that also have

28:22

404s. So, let's see how Manis performs

28:24

in a bit.

28:26

>> So, if you look at our Rick and Morty

28:28

character data set, manus sort of

28:30

characterize all of this in a pretty

28:32

cool website, right? You have the gender

28:35

distribution. You have male, female,

28:36

unknown. Rick Sanchez is obviously alive

28:39

as is Morty since it's Rick and Morty.

28:42

And you have all these other characters

28:43

that's that are uniquely sort of

28:45

characterized and visualized over here.

28:47

For a lot of these internal tools, you

28:48

can imagine that if you have a lot of

28:50

data you want to search through, you can

28:51

create a simple website just to

28:52

visualize all of them out of the box.

28:54

And that's pretty useful.

28:56

Similarly for this investor letter you

28:58

can see that we uploaded it and man has

29:03

actually detected that even though I

29:04

called it call transcript.json it looked

29:06

at said that the file is a PDF not a

29:08

JSON text and then it completed a

29:11

analysis of Warren Buffett's investor

29:12

letter and it gave like this whole

29:14

analysis at the end. One pretty cool

29:17

thing is that we can take this um simple

29:22

we have the task ID and so we go back to

29:23

basics over here. Previously we had a

29:26

thing whereby we said you go to request

29:30

get URL.

29:46

Let's see. I think just grab this

29:48

picture here instead.

30:08

Um this is not working as I thought it

30:11

would. Um

30:14

what I wanted to show was actually that

30:16

if we go to this specific um one over

30:18

here, if we go to manice

30:21

actually return

30:25

just want to show like the

30:28

not JSON.

30:37

Yeah. So actually if you look at the

30:39

output over here you notice that over

30:41

there man has created a markdown file

30:43

and based off the markdown file you can

30:45

actually you get back the full file URL

30:47

the file name the mime type this is

30:49

really useful if you want to do some

30:50

sort of processing down the line with it

30:52

right and so with this we've covered

30:54

things like how to use the files API

30:56

we've looked at basically how to up use

30:57

publicly available URLs in manice and

30:59

we've also talked about how to basically

31:01

be able to use basically for encoded

31:03

images and so let's think a bit about

31:05

web hooks right So in the previous

31:08

example, we created a task with manness.

31:11

We uploaded some files and the way that

31:12

we tried to determine that, you know,

31:14

the the thing was basically completed

31:17

was that we pulled it every 20 seconds.

31:19

As you're scaling out to more and more

31:20

tasks, what you really want is what's

31:22

called a web hook. What a web hook does

31:24

is that when your task is completed,

31:26

we'll send you an API um request and

31:28

that will basically notify you that the

31:30

task is done. So a really easy pattern

31:32

over here is that you want to wait for

31:34

the task to be completed. you get the

31:35

web hook and you get all the information

31:36

about the current task.

31:39

So in this case, this is really useful

31:41

because if you're building any sort of

31:42

complex application, if you want to use

31:44

this task at scale, it's not really

31:46

viable for you to be able to sit there

31:47

and just keep holding the API. It's

31:49

going to be a bit complicated and I

31:51

think not the best practice for you.

31:52

You're going to basically have a lot of

31:53

workers spinning. But if you use like

31:55

web hooks, uh this is a much more

31:56

sustainable way for you to do whatever

31:58

sort of agent you're building at a much

32:00

cheaper cost.

32:02

Okay, so I'm going to just use modal

32:05

over here because it's a bit simpler.

32:06

I'll have the modal code on the right

32:08

and then I'll have the manus uh notebook

32:10

on the left. Let me just load up my

32:13

virtual environment.

32:15

And

32:16

basically what modal provides is it

32:18

provides you the ability to deploy

32:20

simple like um Python applications. Um

32:22

in this case it's a fast API endpoint.

32:25

And so

32:28

mod surf server.py.

32:31

So what you can see if if you run mod

32:33

surfs server.py is that we now get a

32:35

public endpoint that we can use, right?

32:37

And this is pretty straightforward. Um

32:39

if you run it on your own computer with

32:40

modal, if you set up an account, you get

32:42

$5 free. This basically gives you like

32:44

an endpoint that you can now hit, right?

32:46

And so let's get the Oh, I think someone

32:48

already hit my end point.

32:52

That's a bit stressful. Okay, guys.

32:54

Please be nice to my end point. Um, but

32:56

you can see that over here um in these

32:58

over here. Oh, wow. Another person's

33:00

hitting my end point. Uh, all right

33:02

guys. Anyway,

33:04

>> maybe it's streaming in. That's kind of

33:06

awkward, but uh anyway. Yes. So, um, if

33:10

you basically want to register an

33:11

endpoint web hook manus and you register

33:13

web hook with us, when a task is created

33:15

and when a task is stopped, we will send

33:17

you two web hooks. And what this allows

33:18

you to do on the front end is that then

33:20

you know when you send a request to us

33:22

whenever we started processing your task

33:24

and when your task has been completed.

33:26

Um the typical manage task is going to

33:27

take roughly three to five minutes and

33:29

if you have something that's a bit more

33:30

complicated this is going to be you're

33:32

not going to want to send that and pull

33:33

and so the web hooks are a good way to

33:35

do so. So let's see over here how we can

33:38

mimic a web hook that manage send over

33:40

here you have a test payload message

33:42

ended. I think that's what people were

33:43

running with my uh URL. And so um you

33:47

can see now that this is a really useful

33:49

pattern because if I'm building and I

33:50

have like hundred man tasks running at

33:52

once, right? I don't want to keep

33:54

pulling for all of them. And so with a

33:55

web hook, I can easily receive a lot of

33:57

these notifications as they're running.

34:00

So let's register this web hook with

34:02

Manis. So all we got to do is basically

34:05

post to Manis. Um I you have a base URL

34:08

that we have uh manus

34:11

api.mmanis

34:13

imi let me just double check I think I

34:16

have that the base URL is api.mmanis.ai

34:19

AI/V1. And so if you post that, then you

34:23

will register a web hook successfully.

34:25

And in this specific case, the web hook

34:27

we want to register is this one over

34:28

here. You go to the Manis um

34:32

connector setting over here,

34:34

integrations built with manus API. Um

34:36

you see that this is it will appear

34:38

basically over here the new webbook that

34:41

you've registered. And so whenever you

34:42

create a task, it will automatically

34:44

send you a notification over there.

34:47

So let's create a simple task. Hold on,

34:49

people are still sending me. Um, and so

34:52

let's create a simple task over and then

34:58

try to get it working. Yeah. So we

35:02

created what is 2 plus2 provide a brief

35:04

answer. This is over here. We seen that

35:07

the task is running and it's going to

35:09

think a little then it kind of just runs

35:13

like echo 2 plus2 VC or whatever that is

35:16

and then it will send you an answer. And

35:17

so you can see over here that now that

35:19

the task is completed, you get the full

35:21

payload over here.

35:24

This is kind of what it looks like. And

35:26

if let's say we paste this

35:32

JSON

35:45

but basically you get back um at this

35:47

point you get the ID of that you have.

35:49

So what this means is if if you have

35:50

multiple sort of manage tasks that

35:52

running you can identify them by the

35:53

task ID. You can also get back the

35:55

current task URL. You get the output of

35:58

it which in this case the status is

36:00

completed. We sent that we sent to

36:02

manage what is 2 plus2 please provide a

36:03

brief answer and then we said let me

36:06

calculate that for you and people are

36:08

really running it quite a fair bit. Um

36:11

and so now that we've actually processed

36:14

the web poker notification um what we

36:17

might want to do is we want to just get

36:19

the entire conversation history. And so

36:21

to do so, we can set a simple secret

36:23

over here. And so what this allows you

36:25

to do is that when you're running your

36:26

modal server, you basically are able to

36:28

make a request to the Madness API and

36:30

get back um a list of every single um

36:32

chat message that's been happening in

36:34

there. I've done this ahead of time and

36:35

so

36:37

we can just

36:39

put this over here.

36:43

So all this does is that if it's done,

36:45

it just get a full request and it gets t

36:47

details. And so what you saw with there

36:48

was basically what happens uh when we do

36:50

this ahead of time.

36:52

So now let's um so that is basically web

36:56

hooks.

36:56

>> Yeah.

36:57

>> So in the previous so right now we've

36:59

looked at how to create a task. Uh we've

37:00

looked at basically how to upload files

37:03

and then we've also covered like how to

37:04

use a web hook. Um

37:07

so let's now look at basically how to

37:09

use slack which I think will be a lot

37:10

more fun. So in the previous notebook we

37:13

looked at how to use web hook. So case

37:14

we're going to start integrating on

37:15

slack. I've created a Slack workspace

37:17

for myself. Uh it's just on I personal.

37:20

And so in this small channel over here,

37:22

we're going to be interacting with our

37:23

manage chatbot.

37:26

So first thing you want to do is you

37:28

want to make sure that you have your

37:29

Slack um signing secrets. These are

37:33

basically I have instructions on the

37:34

read me on how to get the bot signing

37:36

secrets. Then you want to basically test

37:38

it. Slack provides a off test.

37:42

So in Ivan personal for the bot mani you

37:44

can basically test to see that your

37:46

secrets are working as intended and so

37:48

this is really important because if your

37:49

environment variables are not correctly

37:51

set up then you're not going to be able

37:52

to do this.

37:55

Okay cool let's run this bit by bit. So

37:58

we're going to just start by defining a

38:00

simple um slide simple bot over here.

38:05

Just going to call this

38:08

bot. Y

38:11

and so let's run mod surf chat.

38:17

And so when you run this black ipy,

38:21

you'll find that what you need to do

38:23

then is

38:26

we've initialized a simple model app.

38:28

We've added some dependencies. We have

38:30

the slack secret over here that we

38:32

stored ahead of time. And then we just

38:34

have a single endpoint over here that's

38:35

called slash web hooks slack. And so you

38:39

will have something like this where you

38:40

have like a simple like endpoint that

38:42

you can hit. And so in my case um this

38:44

will be the endpoint that I have right.

38:47

And so you can see that if we hit this

38:49

endpoint over here

38:55

it takes a while to run

38:58

but basically get back status. Okay. And

38:59

so what this means that this is a

39:00

publicly available like endpoint for you

39:02

to hit. So when you mention anyone on

39:05

Slack, for example, over here, um before

39:07

our bot is configured, if you just

39:08

something like money like what's up,

39:11

um you're going to get a message from

39:13

Slack similar to how the manage API

39:15

worked, you're going to get a web hook

39:17

with some sort of payload. And this

39:18

enables you to essentially be able to um

39:21

look at the input and you're going to

39:23

get something like um

39:28

so you're going to get like some sort of

39:29

information from stack, right? So we

39:31

have this um

39:35

over here. Let's go to Slack API.

39:37

Slack.apps,

39:40

right?

39:42

So we want to just make sure that

39:46

so previously we made sure that the

39:47

Slack that that our server was able to

39:49

receive a response. And so the next step

39:51

that we're going to do is we're going to

39:52

make sure that our server is able to be

39:53

registered as a web on Slack. when you

39:55

actually make a request to Slack, you

39:57

need to make sure that when you respond,

39:58

you actually get back you get back a

39:59

challenge URL. So,

40:03

this is what you can see. We just rerun

40:06

this. And we have this URL over here.

40:08

And then we're just going to put

40:12

inside the event subscription,

40:21

right? Right. So this is verified and

40:23

what happened was that you know Slack

40:25

basically sent us in the API request and

40:28

we were able to successfully respond to

40:30

it with a challenge.

40:32

And so if you see like a verified over

40:34

here you just need to save the changes

40:35

and that should work you

40:44

see.

40:48

Right.

40:57

Then once you've done this,

41:00

we mentioned our bot in Slack. Let me

41:02

just check.

41:10

We should get a API request from stack.

41:13

And so you can see that this was the

41:15

mention over here. So over here I said

41:18

add money what's up and over here you

41:19

see here's a text what's up right

41:22

and what you find is that if you just

41:24

get the raw text you're going to get the

41:25

user ID and that is something that you

41:27

want to parse out in the response

41:30

cool so let's try to figure out how to

41:32

respond to Slack over here right if I'm

41:35

just going to copy and paste this entire

41:36

Slack event that we previously

41:49

So this is the Slack. I'm just going to

41:51

paste the Slack event over here so that

41:53

we're able to

41:55

have it for context. And

41:58

when we want to send a response back to

42:00

Slack, what we need is basically the

42:02

channel that was sent in the thread TS.

42:04

And so that's how Slack identifies the

42:06

right item. And so let's get it from you

42:08

can really get it over here. So

42:12

you want to get the channel

42:18

then you want to get the event. Yes.

42:20

Right.

42:24

So let's send a response. And you can

42:26

see that in Slack over here we got a

42:28

response that said hello world. And so

42:30

this is really kind of how your

42:31

application will work. If you're

42:33

building a Slack bot, you get a you get

42:34

an API request from Slack and then once

42:36

you get the API request from Slack, you

42:38

do something and then you return it

42:39

back. One of the things to note when

42:41

you're building on Slack is just that

42:42

you need to send a response in roughly

42:44

like 3 seconds. Uh if not, they're going

42:46

to try again. And so if you're building

42:47

any sort of Slack bot, you want to

42:49

ideally keep some sort of server warm.

42:54

So let's try again to maybe, you know,

42:57

in this case, we're going to send some

42:59

files over here. So let's say we want to

43:01

send

43:03

the bookshyway Bshireway 2025 investor

43:07

letter. Well with Slack what you can do

43:09

is you can basically just upload the

43:11

file first. And so let's try uploading

43:13

it to the right channel

43:19

and let's upload it here.

43:22

So now we have it uploaded to the

43:24

channel. We have an ID and we can

43:25

actually post the same message over here

43:35

box. So I've added so previously you saw

43:37

that we got a Slack file ID and then

43:39

when you have the Slack file ID when you

43:41

post a message you just upload a file we

43:42

get back a list of ids and that is

43:45

included as part of the attachment

43:46

itself. And so let's say over here we're

43:49

going to take this the channel that we

43:50

previously used

43:54

the event. Yes,

44:02

this does not find.

44:12

Yeah. So if you look back at this chat

44:14

over here, you can see that we sent we

44:15

essentially first one over here uploaded

44:17

it to the channel and then the second

44:18

one at the bottom over here basically

44:20

sent the same thing over there with

44:21

hello world. Um one of the problems you

44:23

find over here is that we actually

44:24

didn't upload it to the right thread,

44:26

right? We uploaded to the channel and so

44:28

when you're working with files in Slack,

44:30

you need to make sure that you keep this

44:31

in mind. And so this is um basically how

44:34

you work with files in Slack. And so

44:36

let's now try to get Mattis involved

44:39

over here.

44:42

Okay. So now we're going to build slide

44:46

integration.

45:02

So up ahead we had these functions over

45:05

here and so we can just use them to just

45:08

add it in.

45:28

Okay.

45:45

We're going to add this Slack message

45:47

over here using at night event. That's

45:49

from the Slack SDK.

46:11

So we previously defined a function

46:13

called postlike message and so let's

46:15

make sure that we have that running.

46:25

Then we had a bunch of different helper

46:27

functions up here. So let's uh make sure

46:29

that we also copy them. Right.

46:36

So data class is not defined. All I need

46:38

to do over here is just define a data

46:40

class. Then file I file ID.

46:50

Cool. So, now that we've added in a

46:52

whole bunch of these different things

46:53

that we previously had, um,

46:58

let's see how this works on the main

47:00

Slack. Uh,

47:04

we just add this portion up here.

47:20

So with this what our goal is to

47:21

basically to reproduce what we did in

47:22

the notebook manually. So let's try to

47:24

see if this works out of manner group is

47:27

not defined.

47:47

So now that we've started up then

48:03

so we had a small bug over there and so

48:06

previously what we did in the previous

48:07

portion was that we tried to basically

48:09

uh get Slack working with a web and so

48:12

what I did wrongly was just that if I

48:17

I didn't define like the manage URL and

48:20

so let's just have it run over here.

48:24

So you can see that now we have a

48:26

response of what we did manually just

48:28

copying it bit by bit right and so this

48:30

mean with this we've now figured out how

48:32

to basically work with slack if I send a

48:34

message I can get a web hook and I can

48:35

process it with my modal server right

48:38

this is a really simple sort of approach

48:40

but it's really useful when it comes to

48:41

doing anything else you can imagine that

48:43

for you if let's say you're doing some

48:44

sort of complex processing you might get

48:47

the user's information get some sort of

48:48

metadata from the user fetch the prior

48:50

conversations and then actually start

48:52

sending the task over to manage to start

48:54

executing

48:56

So let's now see how we can actually get

48:58

this running with manus. So

49:01

I have a function over here called

49:03

create a manus task. It does something

49:04

very similar to what we did previously

49:05

which was that we'll post a request to

49:07

manice. We would have a basically an

49:09

environment variable that we send it

49:10

along with and then we would then in

49:12

this case just send a prompt. Right? So

49:14

let's test it out. create a manage task

49:18

and then instead of this over here,

49:22

we're gonna create a manage task.

49:28

Then we're going to take in event

49:39

task ids like this and then we say file

49:41

created successfully. You can view it

49:42

here.

49:44

So I'm just going to add a simple um

49:47

wake up function so that we can just

49:48

wake this um SP.

49:53

>> So let me just go back to the web app.

49:57

Sure it's running. It's woken up. And

49:58

then let's try to kick off a task in

50:00

Madness.

50:05

What's the status in New York?

50:15

Oh, so now we've uh got a post request

50:18

and manus replies with the fact that

50:20

hey, we've created a task successfully

50:22

with Mattis. So, let's take a look at

50:23

this task and see how it's been. Task

50:26

should appear inside here. What's the

50:28

weather in New York? Right? So, one

50:29

thing you've noticed is that we don't

50:31

actually get the response. Right? We can

50:32

send these um current task over to

50:34

manage. We can pick some of these task

50:36

off, but we don't get the response. So,

50:38

let's see how we can

50:44

fix that. Yeah.

50:47

So,

50:51

what we're going to be doing is we're

50:53

just going to be checking over here.

50:59

Sorry, let me let me go back. Sorry,

51:00

guys. I'm just a bit stressed out today.

51:02

Okay. Anyway, one thing that um we saw

51:05

just now over there was that this is

51:06

kind of an ugly setup. And so what we're

51:08

going to be doing is just making it a

51:09

little bit prettier. Um if you notice in

51:11

the text you get the basically the ID of

51:13

the um user. In this case when I tag

51:15

Manny add Manny you sort of there was

51:17

this really ugly section over here where

51:19

it said um you look at the text you get

51:22

this 09 FDL. If you use the Slack API

51:25

what you find is that you're basically

51:26

able to get a list of all the users and

51:28

you can then do some parsing. You might

51:29

have some additional data on like what

51:32

exactly that this user represents in

51:33

your database. But over here, we'll just

51:35

try to make it a bit prettier for now.

51:38

So, we're just going to update the post

51:40

like

51:43

Slack message.

51:46

So,

51:48

we're going to just update this message

51:50

over here.

51:56

Then, we have a bunch of these different

51:58

types. So, we just need to update them.

52:01

Then, from typing, we'll just add

52:02

optional

52:06

Then the Slack response up here.

52:10

Slack response.

52:13

Yeah, we just need to import the Slack

52:15

response. So we get something that's

52:16

typed. And that should be

52:21

And so

52:24

now we post a message. We have blocks.

52:26

Um,

52:53

so we're just going to make this a

52:55

little bit nicer. over here with Manis.

52:57

And so what this means is that over

52:59

here, Slack has this wonderful thing

53:00

they ship called Slack Blockit. So you

53:02

can c if you've used a lot of these

53:04

Slack bots previously, you'll find that

53:05

they ship these nice little buttons. And

53:07

so you can actually do that out of the

53:08

box with this thing called blockhead. So

53:11

what we'll be doing over here is we're

53:12

just going to add this thing called we

53:13

started working on our request. And then

53:15

we'll add the URL over here and a little

53:16

emoji called view on web. And the URL

53:19

over here would just be the task URL

53:20

that we have. And so with the post like

53:23

message, we can just add blocks to be

53:24

blocks.

53:27

And so

53:29

since the blocks will be sent over, I

53:31

think we can let's see if this works.

53:34

Let's hope this works.

53:37

And then I'm just going to go back and

53:39

remove the original. Since we're no

53:41

longer using the text, we can just use

53:42

the box. And so let's remove that.

53:45

Let's wake up our server a fair bit over

53:47

here.

53:53

wake up our server. Make sure it's

53:55

running.

54:00

I'm just going to ping

54:05

what's up.

54:08

Cool. And so, oh, additional argument.

54:12

So, I just put over here. We can just

54:15

put like text

54:17

was created. I think we don't need it.

54:20

text over here because it's good to go.

54:22

Yeah, let me try it again.

54:38

So, this um essentially you can see that

54:40

now we have a much nicer enriched sort

54:42

of UI and if you click on this um you'll

54:44

be able to essentially see like a

54:46

message over here. Hey, I'm Manis. your

54:48

friendly UI, friendly um chat assistant.

54:51

What do you need from a me today? Right.

54:54

Cool. So, with this, we walked through

54:56

how to create a Slack um task. Manners

54:58

can now actually receive a message from

55:00

Slack. And so, one thing that's pretty

55:02

useful if you've looked at basically any

55:03

of our our Slack bot is that it can take

55:05

multiple conversations. I send a

55:06

message, man responds, I send another

55:09

message. Um yeah, so what you want to do

55:11

is you want to just enable multi-turn

55:12

conversations. And so the way you want

55:14

to be able to to do so is that you want

55:17

a way just basically to store if you've

55:19

seen this thread before, right? Because

55:21

if every time you send a message and you

55:23

want to post to the same thread, you

55:24

need to kind of keep track of that. And

55:26

so what we'll be using over here is just

55:28

a simple dictionary that Moto ships

55:29

with. If you're using anything like

55:30

Cloudflare, you can use like a KV store.

55:33

If you're using some sort of database,

55:34

these are things you can load into the

55:36

database. But that's basically um what

55:38

you can use out of the box. And so Moto

55:41

has a pretty uh good dictionary um out

55:43

of the box that we're going to be using,

55:44

but I think it's good to get a rough

55:46

sense for how it sort of works. And so

55:50

what we'll be doing is just be adding

55:51

two simple endpoints uh that we can use

55:53

to post and set um these requests.

55:57

One set. And so we'll be adding them to

55:59

our actual server.

56:02

Let me just fix this.

56:09

So we just need to make sure this uh

56:11

demo tick is added inside this.

56:17

Yeah. Okay. Cool. So now we have added

56:20

these two new endpoints and so we'll

56:22

kind of get a sense for how the modal

56:24

dig works before we actually start going

56:25

into how to use it with the other chats.

56:28

So

56:30

over here um let's say when we get a

56:32

chat previously we talked about how

56:33

you're going to get some sort of

56:34

response. You get a task ID, you get a

56:35

task URL, but we also kind of want to

56:37

store things like what is the Slack

56:39

channel, what is the Slack thread ts,

56:42

what is the Slack user, what is the

56:43

status of the current job, etc. And so

56:46

by using something simple like a

56:47

dictionary where we can serialize basic

56:49

key value stores, we're able to do this

56:51

quite simply out of the box.

56:54

So let's see over here um let's say we

56:57

start a simple manage task, right?

57:02

And we get back some of the task data.

57:04

We get the

57:07

over here we look at the stored value.

57:09

We store the task. We just put a random

57:11

you know like task ID over here and then

57:14

we store like task ID, task URL, Slack

57:16

channel etc. But you can also get back

57:19

when you retrieve this. So when you hit

57:20

the same endpoint, right? This gives you

57:22

back what you want. And so this is

57:24

essentially how the model dictionary

57:25

works. Simple KV store. And so that is a

57:28

relatively simple way to use it. And so

57:30

let's try to use this model dictionary

57:32

so that we can actually push to the same

57:33

task. Right?

57:36

So let's first delete these two um

57:38

endpoints that we have

57:45

and then let's create a new task map

57:47

over here

57:50

that we can basically use

57:53

store basically a mapping of a tread ID

57:56

tread ts to a task.

58:00

So let's uh we already have a function

58:02

to create the manners task and so all we

58:05

need to do is that you know um up here

58:09

like what we mentioned earlier when you

58:11

actually mention a bot in Slack right

58:13

you're going to get this weird um thing

58:15

and so what we want to do is we want to

58:16

just basically parse it out

58:26

right so here's a simple function that

58:28

we just parse it out Um, we'll then

58:30

check in the thread map whether or not

58:32

this thread ID has been seen before. And

58:34

this is because when we get the web hook

58:35

from Slack, we're going to see the

58:36

thread TS. And if we've seen this thread

58:39

before, we want to basically push it to

58:40

the same task using the task ID

58:42

parameter, right? And if we've really

58:45

seen it before, we're just going to add

58:46

a simple reaction over here, which is

58:48

just, you know, the goo the eyes that

58:49

you've seen a lot of Slack bots have.

58:51

You know, if we, hey, I'm on it. I've

58:52

notified, you know, this works out of

58:54

the box. All right, cool. Let us copy

58:58

this,

59:06

right? And then we have this new

59:08

function called handle manage task

59:12

handle select message. And so this will

59:15

essentially

59:17

replace what we previously had over

59:18

here. Right?

59:23

Cool. Let me see if this works. I right

59:26

let's we have a new server let's boot it

59:29

up again let's go to slack and let's

59:31

just say

59:34

hey man what's up right and then our

59:38

server boots up it will respond you can

59:40

see over here we created a new task with

59:42

shred ID and then let's say we go into

59:44

this task itself and we say that okay um

59:47

add any

59:50

what's the

59:52

temperature

59:58

in New York, right? And so we push it to

60:00

the same task. So task ID, create manus

60:03

task, got an unexpected one. Okay,

60:05

sorry, this is on me. Um, so all we need

60:08

to do is we just need to update the

60:10

create manus task over here. So it takes

60:12

a task ID parameter.

60:34

Then what we want to do is we just want

60:35

to take this JSON over here. We're going

60:37

to make sure that if let's say we

60:38

provide a task ID, we add it to the JSON

60:40

payload that we sent along.

60:59

Let's call it

61:05

>> cool. Let's uh give it a while for our

61:07

server to restart. Let's boot it up

61:09

again and then let's give this a shot.

61:12

We could just send the same thing again.

61:14

Wouldn't issue. So

61:18

this will hopefully you can see that

61:20

right now we have this reaction. That

61:22

means that you know we've read from the

61:23

dictionary. We've seen that this is a

61:25

thread that we've seen before. And

61:27

basically what we do is we push it to

61:29

the same task using this this task ID.

61:31

Right? So let's take a look at the live

61:32

task that's currently being executed.

61:35

You can see that this is essentially

61:37

we've with our first message. We've then

61:39

push it the same follow-up message over

61:41

to the same thread. And this allows you

61:43

to basically be able to work with a lot

61:44

of these uh simple integrations like out

61:46

of the box.

61:53

And so right now um one of the problems

61:56

is that you know the final answer never

61:59

makes it back to the user in Slack. And

62:01

so what we need to do is what we did

62:03

previously um when we were basically you

62:05

know working with web hooks is that when

62:07

we get a web hook address from manus we

62:09

need to make sure that we push it um

62:11

make a essentially we we post it back

62:13

right over to the same thread and so

62:15

that we respond correctly and so just

62:17

give me a while let me code it up and

62:18

then we can walk through the code.

63:13

Then the last bit we just need to upload

63:15

the let's just say upload files.

63:19

That should work. Hopefully

63:22

upload files just need to be uploaded.

63:23

So it also takes an hts

63:27

over here.

63:40

Okay, cool. So, the entire so and then

63:43

we just need to add the final endpoint.

63:45

Sorry, please bear me for a bit and then

63:48

we can walk through the code for a

63:49

while.

63:51

Cool.

63:58

Cool. So with this now we have a a way

64:00

whereby you know when manus actually

64:02

gives a response it's actually able to

64:03

respond to you. So let's let's try let's

64:06

try it out and then we're going to walk

64:07

through the code of what we've exactly

64:08

implemented like step by step over here.

64:11

So as usual um let's

64:14

wake up the server a little bit and then

64:16

we're just going to say at money what's

64:18

up

64:23

right. Um, same thing as usual. It's

64:25

going to hit our endpoint and we're

64:26

going to create a new task and we get a

64:28

response over here, right? Started

64:30

working a task. Task ID is this and view

64:32

the live task. It's just going to

64:35

execute um as usual. And then once it's

64:38

had a response, we should get back the

64:41

web hook slack.

64:44

[Music]

64:46

Let me just see what's should be getting

64:49

back this response at web hooksman.

64:58

Let me just uh debug this for a bit.

65:17

I'm just gonna bounce ahead over here. I

65:19

feel like I'm encountering some

65:20

technical difficulties, but I just want

65:21

to explain a little bit of what I'm

65:23

happening. I'm really sorry. Um,

65:25

basically what's happening over here is

65:26

that we have a simple um Slack bot,

65:28

right? And as as Mannis is sending us a

65:31

response, it's basically going to be

65:32

able to have um what we essentially are

65:35

all of the different um bits of markdown

65:38

that Mannis is giving and sending back

65:39

to us. Right? So this is really useful

65:41

because a lot of times manage will

65:43

output markdowns such as tables, text,

65:45

images, etc. And you really want to make

65:47

sure that's rendered nicely. Uh it's a

65:49

bit complex in Stripe to be able I'm

65:51

sorry, a bit complex in Slack to be able

65:53

to do this. And so what you have to do

65:56

is do a bit of transformation. And so

65:58

what we've essentially done if you look

65:59

at the notebook is

66:02

first when we actually create a new task

66:04

we save it inside this task info map

66:06

right we then convert it over to a slack

66:09

markdown format and what this does is

66:11

that it basically just passes some of

66:13

the existing markdown and so that it's

66:15

compatible with with with Slack. Slack

66:17

has some unique markdown formatting

66:19

issues and so we just need to make sure

66:20

it's consistent and then we then take

66:22

this markdown and format it into slide

66:24

blocks. Uh we then also up previously we

66:27

had a upload file as a function and what

66:29

you notice that we uploaded a file. It

66:31

was always uploaded to the main uh

66:33

channel but not to the tread. And so how

66:35

you can solve this is by passing in

66:37

basically both a thread and a channel um

66:40

parameter. And so what this means is

66:42

that when Slack uploads the file it will

66:43

go not only to the channel but the right

66:45

thread. So this is really useful in that

66:47

sense.

66:49

So I think in the next portion we're

66:51

just going to try to implement it so

66:53

that you can sort of um basically have

66:55

it a process and invoice. I'm just going

66:57

to use the final um code that I've

66:59

written ahead of time so that you know

67:01

in case of any technical difficulties

67:02

again. Um but I just wanted to pause

67:06

here and see if there's any issue any

67:08

questions about how to work with the

67:09

API.

67:12

Cool.

68:13

So, let me just test to see if this is

68:15

working.

68:17

Just going to maybe

68:22

think I had a bunch of uh images that I

68:25

gave previously. So, I'm just gonna take

68:27

a take this uh picture of a bunch of

68:29

bagels that I bought previously.

68:33

Uh been eating a lot of bagels since

68:34

I've gotten here. So, those are pretty

68:36

good, actually, cuz uh like I was really

68:39

surprised by um how good a lot of the

68:41

bagels were. Um but the other day, I

68:43

feel like I got I got scammed a little

68:44

cuz I I ate a bagel that was like 90%

68:46

cream cheese, like 10% salmon, and I was

68:50

a bit sad about that. And so, um yeah.

68:52

So really like what this does is that if

68:54

you look over here the first thing that

68:57

we get is you get a slack web hook, you

69:01

create the file, you create the manness

69:03

event and then we're going to post a

69:05

reply and over here you can see hey

69:06

we've started working on your request.

69:08

Um if we go over to the manus app over

69:10

here um you see that we have this thing

69:12

called a connector right and this is

69:14

basically notion that's out of the box.

69:17

What I've done is that I've created Oh,

69:18

sorry. This actually Let me just create

69:21

go to the fake one.

69:27

Yep. Anyway, um, so we actually have a a

69:29

notion where we have like the these like

69:31

company policies and I've created like a

69:33

fake company policy for you to reference

69:35

and so what you see over here is you

69:36

have all this information like the

69:38

company home like what exactly is

69:40

happening and manage is actually able to

69:43

look at the notion look at the

69:44

connectors and actually give a response

69:45

for how exactly this um is sort of

69:48

related to my actual like claims policy

69:50

and this is really useful if you're

69:52

building anything related to some sort

69:53

of internal deep research sort of API

69:56

because you're constantly going want to

69:57

be able to reference certain things that

69:59

you have. You can see that the file over

70:01

here was uploaded successfully and then

70:04

man is able to use OCR to basically

70:06

extract all the details on the receipt

70:08

in some of the previous tests that you

70:10

know you can you can see that there were

70:12

a lot of tests. Um, you can basically

70:15

see that, you know, I just spent like uh

70:17

$30 on cats in New York. Is that the

70:19

cover? And man is basically able to

70:20

respond, look at the company policy

70:22

that's in notion, which you know, anyone

70:24

in your company can edit, right? Notion

70:26

is a pretty accessible sort of platform

70:28

and then they can take that and actually

70:29

edit it out of the box. So, as Manis is

70:32

generating its response, we're waiting

70:34

for the final web hook to be sent. And

70:36

so,

70:38

let's give it a bit of time.

70:42

Yeah. And so what you kind of expect to

70:44

see is that if you give, let's say, can

70:46

you help me update this basic invoice?

70:48

Can you find the shop details, please?

70:49

Thank you. And then manager is just

70:51

going to ask, hey, can you give me a bit

70:52

updates?

70:54

This one over here, you can see like if

70:56

you look at the invoice, you know, what

70:58

are the summary details? The merchant

71:00

Tomkin SQL, what's the amount? Can you

71:02

update it using a markdown table

71:04

instead? And it was basically able to go

71:06

to the the right page over here.

71:08

realized that you know the exact receipt

71:10

that I had was basically from the dates

71:13

of like 18 to the 28 and then I was able

71:15

to update the right notion page and

71:16

basically say that hey these are all of

71:18

the different expenses these are

71:19

actually my expenses for the last few

71:21

days um and you can break it down based

71:24

on this fictitious company policy. So I

71:29

think this was a bit of a more complex

71:31

uh project and I think at the end there

71:32

was some issues with live coding but I I

71:35

just want to basically bring it back and

71:37

try to say that um the manage API is

71:39

basically a really easy way for you to

71:41

build a lot of these complex um

71:43

applications out of the box right um you

71:47

look at the Rick and Morty dashboard

71:48

that we had um you can see that this is

71:51

pretty pretty cool right like and if you

71:54

look at the let's go back to the slides

71:57

It's

71:59

my slide somewhere.

72:10

Yeah. So, a lot of what you can actually

72:12

build out of the box with the manus API

72:14

is that these are things that we've

72:15

learned out of the box scaling the

72:17

number of conversations that we deal

72:18

with every day to millions of

72:20

conversations. Right? So what this means

72:22

is that if you use the manage API, you

72:24

do have the ability to use any sort of

72:26

integration that we ship with. You can

72:28

provide your own sort of keys. You can

72:30

really just you know um add any sort of

72:33

custom code that you have, upload these

72:35

files, toolkits for manners to use. And

72:37

this means that without you having to

72:38

deal with all that stuff, you can

72:40

actually focus on the core business

72:41

logic that you care about. And so um if

72:44

you have any API inquiries about the

72:46

Manis API, um feel free to reach me at

72:48

ivanlio manis.ai. And then if you're

72:50

interested in joining the manis team, we

72:52

are hiring uh right now. Um and so feel

72:55

free to reach out to me or just chat

72:57

with me here. I'm happy to take any

72:59

questions about the API. And um thanks

73:01

so much for taking the time to listen to

73:03

this. I'm curious how you think about

73:06

educating people about all the possible

73:08

use cases for the API and how to stitch

73:10

all these things together to solve their

73:12

problems because I imagine a lot of this

73:14

is new to people and it doesn't quite

73:16

click immediately that oh I could use

73:17

the mass API to solve my problems.

73:22

>> Yeah, I think the easiest way to get

73:24

started before you move to the API is

73:26

actually to play with our web app

73:27

because the web app has everything

73:28

nicely set up. you know, you don't need

73:29

to do web hooks, you don't do

73:30

integration. And so a lot of times what

73:32

I'll recommend doing is saying, hey, I

73:34

have a problem or something I'm

73:35

repeatedly doing. Um, you look at the

73:38

basically the web app, you try a few

73:40

times and manage can get it done pretty

73:41

well and then you want to start looking

73:43

at the API, testing a bunch of these

73:45

requests, seeing how what you need to

73:47

provide, what sort of context, and then

73:48

getting that nailed down consistently.

73:50

Um, I think the that's how I would

73:53

approach it. Uh, so use a really simple

73:54

way, a simple sandbox, and you use that

73:56

to basically get started. Yeah.

73:58

Um, is there any other questions that I

74:00

can help with?

74:05

>> No, you can go ahead.

74:06

>> So, so no question on the API, but can

74:09

you tell us very quickly how you created

74:12

that site? What were the steps the the

74:15

conference site? You redid that, right?

74:17

>> I actually So, if you can talk a little

74:19

bit about that. Uh,

74:20

>> sure. I can show the manage chat

74:21

actually. I think that's more fun. Um,

74:36

script.

74:39

Yeah, let's give it a while for this

74:41

site to load, I think. Uh, so we can see

74:44

like this is basically the full chat

74:45

that's running. It'll take a while to

74:47

load because there's quite a lot of

74:48

conversations that need to be loaded up.

74:50

But basically what I did is I just said

74:52

like hey can you start with this? Can

74:53

you scrape all the events? There should

74:54

be like 70 plus talks. I think the time

74:57

is on like EST. Can you build a website

74:58

that's like clean brutalist design

75:00

search bar at the top like add to

75:02

calendar I mean star events and make it

75:04

work on mobile too. And actually I tried

75:07

to use like a bunch

75:09

man has a lot of cute like emojis but I

75:11

tried to use a lot of these different

75:12

like services like mix bread for a while

75:15

and then I looked at chroma and then it

75:17

just gave you like API key. But really

75:19

what you can see over here is that this

75:20

is a iterative process where you're

75:22

using manners as a way to basically

75:25

handle a lot of these complex edge cases

75:27

that a simple agent that might work out

75:29

of the box for simple websites might not

75:31

be able to do, right? And so

75:35

after I gave it like set of events, you

75:37

can see like manage just wrote a simple

75:39

Python script. It converted all of the

75:42

individual PM am stuff whatnot and it

75:45

just converted all to UTC and then it

75:47

just scraped everything in the end. And

75:49

one of the things that was really cool

75:51

that I saw was just that um if you look

75:54

at the page uh it kind of tried to

75:56

expand

76:01

scrolling scrolling really far. Yeah. So

76:03

basically ran a lot of JavaScript. It

76:04

tried to match like what it expanded. It

76:06

read the HTML and then from there it was

76:08

able to actually get the right set of

76:10

events. And so I think over here you can

76:13

see it's very specific use case I had in

76:15

mind. I want to make sense of events. Um

76:17

and I think the best way to work with a

76:20

lot of these is just to have just try

76:22

see what the manage agent can do and

76:23

then thereafter like try to put it

76:25

together. Yeah.

76:30

>> Go ahead. You can ask.

76:32

Uh so thanks Ivan amazing demo and

76:35

thanks for such a tidy and clean

76:36

notebook. Uh I'm going to go back and

76:39

try it straight away in my own company

76:40

because like I've been meaning to do

76:41

support agents and this is an amazing

76:43

demo. I just wanted to ask uh where does

76:46

all this information because all so

76:48

sensitive where does it live and can we

76:50

like get it deleted later or anything

76:52

like that?

76:53

>> Sorry. What do you mean by what is this?

76:54

>> Oh like right now who's reading my

76:56

transcripts? Oh,

76:58

>> I think like when it comes to if you say

77:00

like who's reading a transcript, you

77:01

mean like all these chats?

77:02

>> Yeah.

77:03

>> So like user privacy is really important

77:05

for us and so for us like we can't read

77:07

any of the chats. Yeah. The only chats

77:09

we read are when you share about hey man

77:11

this isn't working and then we go in and

77:12

check it out. Um I think all of your

77:14

data is housed in the US and so there's

77:16

no sort of like worry about that. Yeah.

77:23

>> Start with that. Sure.

77:26

All right. So, I know you built this

77:29

really cool page. What would be really

77:31

cool like if you could have those events

77:33

like put it in directly into your

77:34

calendar? So, and also my another

77:37

question was like like what's the most

77:40

interesting use case you have seen the

77:42

manus people using the manus API or just

77:45

the platform

77:48

>> API is pretty new. So, I think we're

77:49

sort of like exploring and seeing what

77:51

people are using it for. a lot of people

77:52

are using it for research trying to like

77:54

really access a lot of like to make

77:56

sense of a lot of data and I think like

77:58

that is basically like leaning a lot of

78:00

the advantages that manis has um in

78:03

terms of the sort of advantages that

78:04

manis I think like the cool things um I

78:07

really like pickle ball I don't know if

78:08

anyone here plays it but it's like

78:10

pretty popular but it's really

78:12

competitive in Singapore to basically

78:13

get like pickle ball slots and you can

78:15

only book them through the government

78:17

it's a Singapore thing and so what I got

78:19

managed to do is I wrote like a Python

78:21

script that spun up like six selenium

78:23

instances and it scraped like the entire

78:24

government website and then they said

78:26

like in two weeks you could play pickle

78:28

ball at this location and and I thought

78:30

that was pretty cool because I think

78:31

that's one of the benefits you get by

78:33

using an general agent with it own

78:35

sandbox with it own ability to basically

78:36

spin up these like code to run it to

78:38

test it um and if you use the API that's

78:41

what you get out of the box yeah

78:43

>> is it possible to use the my browser

78:45

through the API and if so how would it

78:48

determine which browser to

78:51

Yeah, I think um when it comes to my

78:53

browser, I think um that will be uh

78:56

something that we'll look into. So

78:58

because my browser requires you not only

78:59

choose the browser but also approve it

79:00

because you don't want to randomly spin

79:01

up tabs on your browser. Um so we'll be

79:04

working on basically improving the

79:05

permission system. So you can do things

79:07

like the um like why research um the

79:10

browser and all these other bits of

79:12

things that you need to authorize. um

79:13

because user permissions is something

79:15

that we want to try to think carefully

79:16

about and so we want to make sure we

79:18

have it done well before we ship it out

79:19

but that's in the road map soon. Uh we

79:21

also have um in a maybe two weeks um

79:24

you'll be able to let's say manis

79:26

generates like a markdown or manage

79:28

generates like slides for you they will

79:30

all be able to be converted to the same

79:31

form as you see on the UI. So what this

79:33

means is that let's say you give mana

79:35

say hey I'm really interested I would

79:37

like to pitch my company I would like to

79:39

pitch something to someone right who

79:41

does all the research puts slides

79:43

together and using the same API you can

79:45

download a full PvPX file you can export

79:47

it however you want as a PDF I think

79:50

that's really useful or even like

79:51

markdown to PDF and so we have a lot of

79:53

these same uh requ um features in mind

79:56

to ensure feature parity um so that you

79:59

get essentially the same experience on

80:00

the API and the UI. Yeah,

80:03

>> that was really informative. Thanks very

80:05

much. So my question is about like uh so

80:08

if I'm doing some research on some

80:09

topics, I don't want always to like give

80:12

it like the background, the context um

80:14

in every conversation since it's linked

80:16

to like uh you know my accounts API

80:19

keys. Um my question was um if it's

80:23

possible to like remember it's you know

80:25

me have like a memory or like for me to

80:28

decide like in every conversation do I

80:30

want to you know remember um you know

80:33

just draw memory from like my other

80:35

conversations or um you know like a

80:38

temporary mode stuff like that.

80:40

>> Yeah, I think a memory is something

80:42

that's really interesting. Uh it's

80:43

something that we're actively looking

80:44

at. Um and so I think for now it's not

80:47

possible but maybe in the near future.

80:48

So, for now, you have to be a bit more

80:50

explicit when working with Mattis,

80:51

unfortunately. Yeah. Um, are there any

80:54

other questions I can help with?

80:58

Uh, cool. If not, then uh I'll just be

81:00

over here at the front. Uh, we also have

81:01

another colleague from Manis Y over

81:03

there. If you need like any help with

81:05

API with the API or just asking

81:06

questions on manis in general. Uh, thank

81:08

you so much for taking the time to

81:09

listen to me today and sorry about the

81:11

technical difficulties.

81:15

[Music]

81:28

Heat.

Interactive Summary

The workshop introduces the Manis API, a general AI agent that executes tasks and automates workflows across platforms like web, Slack, and Microsoft 365. Demonstrations include a French learning app, a browser operator, and a web development framework for data scraping. The presentation covers API fundamentals: task creation, context management, various file uploads (including URLs and Base64 images), and webhook integration, emphasizing how Manis simplifies building complex AI applications by handling underlying infrastructure.

Suggested questions

6 ready-made prompts