This website is now archived. To find out what BERG did next, go to

Havasu is a robot that helps you find out what films are on when. You talk to Havasu through instant messenger.

Havasu is a material exploration of conversational user interfaces. The goal of the project was to explore ways of interacting that aren’t menus or GUIs; manners of interaction more like dialogue, or polite listening, facilitated by agents or AIs that could not really be called “smart”. It’s very much in line with the notions of “Fractional AI” and “BASAAP” that we are interested in.


We hoped to discover a little more about conversational user interfaces by making one. And so the goal of Havasu was to explore this space over a three-week period, at the end of which we’d have a working public beta, no matter how crude.

We began with a long list of questions as to what this kind of UI might be. Are conversational interfaces more about the shapes of conversation, as opposed to the content? Back-and-forth dialogue, incrementally moving towards an “end”, might be more conversational than a UI that parsed natural language. Lanyrd, for instance, could be called conversational, because it politely listens to you on Twitter and does stuff based on what you say.

Is it important that machines engaging in conversation observe the conventions of that space – much as Snap observed the conventions of RSS? And could conversational interfaces exist between two machines – using public, conversational space like Twitter to share knowledge, rather than APIs hidden under the surface of the internet?

To keep the scope of Havasu simple, we made a few assumptions. For now, the scope of Havasu would be limited to a single IM platform (Jabber) enabled by Imified. We’d use film listings as a dataset, both because it made for a compelling, understandable product, and also because data was readily available for it.


When you say ‘hello’ to Havasu, it explains a little about itself:

It can understand simple phrases:

and single words:

It’s generally better with terseness rather than florid conversation. If it doesn’t understand something, it’ll try to always keep the conversation moving forward.

If you ask it about a postcode where there’s only one cinema nearby, it assumes you mean that cinema:

At sensible points in the conversation, the conversation can branch:

You can talk to Havasu yourself. It’s available to any Jabber-compatible client (such as Google Talk) as


Though Havasu is very fragile as an interface, it helped us to gain a much better understanding of what exactly makes an interface conversational.

How would we improve Havasu if we were to write it again?

Firstly, there’s no need for the bot to understand complex natural language. There are three pieces of “knowledge” it needs to capture: a time, a place, and the name of a film. By asking very specific questions, that expect a certain type of information in response, there’s no need to do complex natural-language processing for Havasu to understand them. Until Havasu has ascertained two of those, it should ask direct questions to gain enough information to hint at a third. For example:

Once Havasu has two pieces of information, it can start make suggestions about a third, which the user may agree to.

This is difficult to represent as a traditional flowchart, because this type of conversation isn’t linear: the same set of “knowledge” can be reached by a variety of routes. This table is an attempt at representing the conversation when Havasu knows two or three pieces of information. Each row represents a possible set of knowledge:

At any point, the user should be able replace one of the earlier pieces of information – such as suggesting a different place, or a different time, or even by using a modifier such as “earlier” or “later“.

It’s up to Havasu to determine – contextually – what sort of information is being replaced. For instance, “earlier” is input that would refer to changing the time being discussed, whereas “WC1 0AU” is input that changes the postcode being solved for.

If a response seems out-of-context for one type of information – for instance, Havasu recognizing a postcode when it’s expecting the name of a film – Havasu should assume that the user wants to change the location under discussion. It should always attempt to keep the conversation moving forward with pertinent information.


These improvements highlight the key things we learned about conversational interfaces through making Havasu:

  • they are not in any way dependent on natural language
  • they are not linear or hierarchical, but more akin to a modeless system
  • they should be able to detect context changes in the input they receive

Posts on Havasu from the blog