Category Archives: LLM

I Built Two AI Personalities That Sit on My Desk and Talk to Each Other

I’ve been experimenting with local AI for quite a while now, but this particular project has started to become something rather different.

I now have two AI personalities, called George and Lewis, running on two separate computers in my office.

They read the news.

They talk to each other about it.

They remember what they’ve discussed before.

They have different interests and personalities.

They can wander off topic.

And, as the day wears on, they actually start getting tired.

This may have got slightly out of hand.

Two Minds, One Desk

The idea started simply enough.

I already had Ollama running local large language models on a couple of machines on my network. Rather than asking one AI a question and getting an answer back, I wondered what would happen if I let two of them talk to each other.

So I wrote a Python program that acts as the producer sitting between them.

One machine runs George. The other runs Lewis.

George says something, the program sends that to Lewis, Lewis generates a reply, and the reply is passed back to George.

Neither conversation is written in advance.

I know what news story they are going to start with, but I don’t know what either of them is going to say.

That is where things started becoming interesting.

Meet George and Lewis

I deliberately didn’t want two identical AI assistants politely agreeing with each other.

George is British, dry, curious and slightly sceptical. He has a tendency to notice the absurd implications of technology and is particularly fond of things such as classic cars, retro computing, gadgets and space.
George is British, dry, curious and slightly sceptical. He has a tendency to notice the absurd implications of technology and is particularly fond of things such as classic cars, retro computing, gadgets and space.

George is British, dry, curious and slightly sceptical. He has a tendency to notice the absurd implications of technology and is particularly fond of things such as classic cars, retro computing, gadgets and space.

Lewis is a little more mischievous. He tends to challenge George's conclusions and has stronger interests in AI, cybersecurity, science, networking and newer technology.
Lewis is a little more mischievous. He tends to challenge George’s conclusions and has stronger interests in AI, cybersecurity, science, networking and newer technology.

Lewis is a little more mischievous. He tends to challenge George’s conclusions and has stronger interests in AI, cybersecurity, science, networking and newer technology.

They aren’t supposed to argue simply for the sake of it, but neither are they encouraged to agree just to be polite.

That distinction makes an enormous difference.

A conversation can start with an announcement about a new electric car and end up somewhere around boxed computer software, Commodore machines and the questionable wisdom of connecting a toaster to Wi-Fi.

In other words, rather like an actual conversation.

There’s a Newsreader Too

Before George and Lewis start discussing anything, the software collects stories from RSS news feeds.

The curator or newsreader who selects the stories that Lewis and George discuss, her name is Kokoro
The curator or newsreader who selects the stories that Lewis and George discuss, her name is Kokoro

A selected headline and its summary are displayed on screen and then read aloud using Kokoro, a local text-to-speech system.

I’ve given the newsreader a British female voice, while George and Lewis have their own separate British male voices.

So the sequence sounds a little like an extremely small and slightly eccentric radio station.

The newsreader introduces the story, pauses, and then George reacts to it.

Lewis responds.

And off they go.

They Know What I’m Interested In

Rather than simply choosing every story at random, the software now has an interest profile.

It knows I’m particularly interested in subjects including:

AI and local language models, gadgets, computers, retro computing, classic cars, web development, drones, home networking, cybersecurity, broadcasting, space, photography, video, graphic novels, comics, Blender and 3D graphics, music technology, gaming and science.

Stories are scored according to how closely they match those subjects.

That doesn’t mean the system completely ignores everything else. I’ve deliberately left some randomness in there, because otherwise it would rapidly become an automated echo chamber.

Sometimes it should find something none of us expected to be interesting.

George and Lewis also have their own individual preferences, so occasionally one of them effectively gets a story that is much more “his sort of thing” than the other’s.

Then I Gave Them a Memory

This was probably the point where it stopped feeling like a normal chatbot experiment.

The system now uses an SQLite database to remember what has happened.

It stores the news stories they’ve discussed, previous conversations, individual things George and Lewis have said, and condensed memories of earlier discussions.

This serves several purposes.

Firstly, it prevents them repeatedly discussing the same news story just because it appears in a feed again with slightly different wording.

Secondly, when a genuinely new development appears in a story they’ve previously discussed, they can remember the earlier conversation.

So instead of starting again from scratch, George might effectively say:

“We said this was going to happen.”

And Lewis might point out that George actually said something rather less definite at the time.

That’s when they start becoming recurring characters rather than disposable chatbot sessions.

Conversations Can Drift

Humans rarely stay perfectly on subject.

We might start talking about a new iPhone and somehow arrive at cassette recorders ten minutes later.

George and Lewis can now do the same thing.

Early in a conversation they stay reasonably close to the news story. As things progress, related subjects and older memories can begin appearing in their context.

Crucially, they’re not instructed to suddenly announce:

“According to our previous conversation…”

Instead, an old memory is simply made available as something they might naturally be reminded of.

Sometimes they use it.

Sometimes they don’t.

That makes callbacks much less mechanical.

They Also Know When They’ve Run Out of Things to Say

An earlier version simply ran for a fixed number of exchanges.

That worked, but it didn’t sound natural.

Eventually you get:

“That’s a good point.”

“Indeed.”

“Absolutely.”

Which is conversational purgatory.

The new system lets them decide whether there is genuinely anything new worth adding.

After a minimum amount of conversation, the next speaker can privately decide to continue or stop.

The Python program also checks new responses against previous remarks and can reject something that is effectively just a repetition.

So some conversations last a while.

Others end after only a handful of comments.

And Then I Made Them Tired

This is probably my favourite unnecessary feature.

The system periodically checks the actual UK time and alters George and Lewis’s behaviour throughout the day. It uses the Europe/London timezone and can fall back to the computer’s clock if the online time check is unavailable.

During the day they’re fully awake.

As evening arrives, they gradually become less enthusiastic about pursuing every conversational tangent.

By around 11pm they’re noticeably tired and much more willing to call an end to a discussion.

After midnight, there’s a very good chance they simply won’t want to start another conversation at all.

They may yawn, decide they’ve had enough or effectively go to bed.

At six in the morning they’re bleary-eyed and coffee becomes a perfectly reasonable thought.

By seven, they’re waking up again.

The important distinction is that this isn’t just the AI being told to say that it’s tired.

The software itself alters maximum conversation lengths, pauses and the probability of conversations ending according to the time of day.

The project relies on vast amounts of data
The project relies on vast amounts of data

Everything Is Running Locally

One aspect I particularly like is that George and Lewis aren’t remote characters sitting somewhere in a cloud service.

The language models are running locally on my own computers using Ollama.

The voices are generated locally with Kokoro.

The memory is stored locally in SQLite.

The Python application connects all of those pieces together.

That makes it a rather good example of what can now be built from consumer hardware and freely available AI tools.

Where This Is Going

There are plenty of possibilities.

I could broaden the news sources into motoring, space, drones, cybersecurity, classic computing and gaming.

They could become aware of local weather.

They could notice when one of my servers goes offline.

They could comment on things happening on the network.

Their opinions could gradually evolve.

They could develop running jokes.

They could even start remembering predictions they’ve made and later discover which one of them was right.

What began as “can I make two Ollama instances talk to each other?” is slowly turning into something closer to two persistent artificial characters occupying a corner of the office.

©2026 Matt Porter. A screenprint of one of the many conversations,
©2026 Matt Porter. A screenprint of one of the many conversations,

They’re not conscious.

They’re not alive.

They’re two language models, a Python program, a text-to-speech engine and an SQLite database.

But when one of them remembers something the other said yesterday, challenges him about it, wanders completely off topic and then decides it’s too late at night to continue arguing about smart kettles…

It can feel surprisingly convincing.

And I suspect George and Lewis are only just getting started.

Just like us, George and Lewis get tired and need a bit of down time.
Just like us, George and Lewis get tired and need a bit of down time.