Business Model

This client operates several dating services using a freemium model. In practice, users can access the service for free on a daily basis, but they are limited to five replies per day. To use the service further, the user must subscribe to a plan with a trial offer that includes 20 replies. Once the 20 replies are used, the subscription is automatically activated. With a subscription, the user receives a number of credits, which are consumed with each reply received. If the user runs out of credits, they can purchase extra credit packs to continue chatting while waiting for the next subscription renewal. The services are available in English and German, and operate in multiple countries: USA, UK, AU, DE, and AT. Some services are aimed at serious dating, others are adult-oriented and sexual in nature. Only male users pay for and interact with the animated profiles.

Global Settings

We start by creating two projects: one for adult services and another for mainstream services. On the mainstream services, we set the enableSexualTextContent parameter to false with the requests to prevent sexually explicit replies. Depending on the residence country of the animated profiles, we set the appropriate language parameter with its local variant, so the replies include country-specific expressions. For example, if the AI profile is in Australia, we set EN_AU as the language parameter. If it’s in England, we use EN_UK. We let DumGum handle the profile personality definition via the Soul Engine feature. But since we don’t want replies of 500 words, we set the maximum reply length to LONG, using the project configuration page. Still on the project configuration page, we enable the Multiple Messages Per Reply option. This splits one reply into several messages, making conversations more dynamic and natural. For example, instead of a single message like “Hey Anthony! How are you this morning? I’m exhausted, didn’t sleep well, it’s way too hot lately 🥵”, the reply will be split into multiple messages. We’ll receive “Hey Anthony! How are you this morning?” followed by “I’m exhausted, didn’t sleep well, it’s way too hot lately 🥵”. Since the Multiple Messages Per Reply option is enabled, we prefer using DumGum to manage the delay between replies. To do that, we set the parameter replyParameters.replyTypingDelay to NORMAL. This way, DumGum will send the messages itself with a realistic delay between them. For example, “Hey Anthony! How are you this morning?” will be received first, then “I’m exhausted, didn’t sleep well, it’s way too hot lately 🥵” will arrive 15 seconds later. To display typing indicators like “Mary is writing something…” on the chat interface, we use answer.processing events sent by DumGum when reply generation starts. This allows us to show typing before the reply is received. We set up specific monitoring for conversationStopReason. In particular, we forward cases of type USER_UNDERAGE to our internal moderation to deactivate the relevant accounts. For other cases, we regularly check the affected conversations to ensure there’s no misclassification.

Freemium Phase Settings

We choose to use the Smart model because it’s cheaper and its short-term memory of 20 messages is enough at this stage. Here’s an example request for the freemium phase using the Smart model for the mainstream services:
{
  "userProfileId": "user-123",
  "personaProfileId": "persona-456",
  "language": "EN_AU",
  "replyParameters": {
    "chatModel": "dating-smart-1",
    "enableSexualTextContent": false, // disables sexual replies
    "multipleMessagesPerReply": true,
    "replyTypingDelay": "NORMAL",
    "generatePersonality": true
  }
}

Trial & Subscription Phase Settings

We use the Smart model for conversations with fewer than 20 messages in the history. For conversations with more than 20 messages, we switch to the Pro version to benefit from long-term memory and strengthen user relationships. Here’s an example request for the trial or subscription phase using the Pro model:
{
  "userProfileId": "user-123",
  "personaProfileId": "persona-456",
  "language": "EN_AU",
  "replyParameters": {
    "chatModel": "dating-pro-1",
    "multipleMessagesPerReply": true,
    "replyTypingDelay": "NORMAL",
    "generatePersonality": true
  }
}