Secured AI Backend Proxy

We prevent you from losing thousands of dollars by including a backend that securely handles your API key requests to the AI API.

Publish Server (3 min setup)

  1. Login on render.com with your Github account

  2. Create a new Web Service

  1. In this repository you'll find a KMP ai client and a NodeJS backend server. Create a Github repository and push the node js part on it.

  2. Connect your new NodeJS repository to render and the web service you created before.

  3. On every push the render web service will be updated

  4. Add your environement variables: HMAC_SECRET_KEY, OPENAI_API_KEY and REPLICATE_API_TOKEN

Use AI module in a KMP Project (Android, iOS, Desktop, Web) (3 min setup)

  1. Copy paste AI module in your project

  2. Add module in settings.gradle:

include(":ai")
  1. Add dependency in your build.gradle:

kotlin {
    ...

    sourceSets {
        commonMain.dependencies { 
            implementation(projects.ai)
        }
    }
}
  1. Add environement variables in local.properties : mobile_ai_api_hmac_secret_key and mobile_ai_url.

mobile_ai_api_hmac_secret_key should be the same the Render HMAC_SECRET_KEY and mobile_ai_url is the url given by render when you publish your web service.

  1. Add BuildKonfig in your project:

import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING

plugins {
    ...
    id("com.codingfeline.buildkonfig")
}

buildkonfig {
    packageName = "your.package.app"

    val props = Properties()

    try {
        props.load(file("../local.properties").inputStream())
    } catch (e: Exception) {
        // keys are private and can not be committed to git
    }

    defaultConfigs {
        buildConfigField(
            STRING,
            "MOBILE_AI_API_HMAC_SECRET_KEY",
            props["mobile_ai_api_hmac_secret_key"]?.toString() ?: ""
        )

        buildConfigField(
            STRING,
            "MOBILE_AI_URL",
            props["mobile_ai_url"]?.toString() ?: ""
        )
    }
}
  1. Now you can call ChatGpt, Dall-e, Whisper, OpenAI Vision and more :

Create the service :

val aIService = AIService(
    BuildKonfig.MOBILE_AI_URL,
    BuildKonfig.MOBILE_AI_API_HMAC_SECRET_KEY,
)

Inject it in Koin:

module {
    singleOf { 
        AIService(
            BuildKonfig.MOBILE_AI_URL,
            BuildKonfig.MOBILE_AI_API_HMAC_SECRET_KEY,
        )
    } 
}

Call ChatGpt:

scope.launch {
    aiService
        .chatgpt(
            model = model, // support gpt3.5 turbo, gpt4, etc
            messages = listOf(
                Message(
                    role = "system",
                    content = "Marv is a factual chatbot that is also sarcastic."
                ),
                Message(
                    role = "user",
                    content = userContent
                ),
            )
        )
        .onFailure {
            result = "We found an error ${it.message}"
        }
        .onSuccess {
            result = it
        }
}

Call Dall-e 3

scope.launch {
    aiService
        .dallee(prompt) // only dall-e 3 for now but you can easily change it
        .onFailure { error = "We found an erorr ${it.message}" }
        .onSuccess { resultUrl = it.data.firstOrNull()?.url }
        .also { loading = false }
}

Call OpenAI Vision

scope.launch {
    aiService
        .vision(
            prompt = prompt,
            url = url // image url to analyze
        )
        .onFailure {
            result = "We found an error ${it.message}"
        }
        .onSuccess {
            result = it
        }
}

Add AI module in a iOS Swift only Project

You can add the module in a iOS Swift only project the same way you add a KMP library to a iOS Swift only app. If you want more informations please ask at hey@appkickstarter.com

Add AI module in a Flutter Project

You can add the module in a Flutter project the same way you add a KMP library to a Flutter app. If you want more informations please ask at hey@appkickstarter.com

Last updated