All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.simiacryptus.jopenai.models.ChatModels.kt Maven / Gradle / Ivy

package com.simiacryptus.jopenai.models

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.databind.ser.std.StdSerializer
import com.simiacryptus.jopenai.ApiModel.Usage
import com.simiacryptus.jopenai.models.ChatModels.Companion.values

@JsonDeserialize(using = ChatModelsDeserializer::class)
@JsonSerialize(using = ChatModelsSerializer::class)
open class ChatModels(
  val name : String,
  modelName: String,
  maxTokens: Int,
  val provider: APIProvider,
  private val inputTokenPricePerK: Double,
  private val outputTokenPricePerK: Double,
) : OpenAITextModel(modelName, maxTokens) {
  override fun pricing(usage: Usage) =
    (usage.prompt_tokens * inputTokenPricePerK + usage.completion_tokens * outputTokenPricePerK) / 1000.0

  companion object {
    val GPT35Turbo = ChatModels(
      name = "GPT35Turbo",
      modelName = "gpt-3.5-turbo-0125",
      maxTokens = 16384,
      provider = APIProvider.OpenAI,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
/*
    val GPT4 = ChatModels(
      name = "GPT4",
      modelName = "gpt-4-32k",
      maxTokens = 32768,
      provider = APIProvider.OpenAI,
      inputTokenPricePerK = 0.06,
      outputTokenPricePerK = 0.12
    )
*/
    val GPT4Turbo = ChatModels(
      name = "GPT4Turbo",
      modelName = "gpt-4-turbo-preview",
      maxTokens = 128000,
      provider = APIProvider.OpenAI,
      inputTokenPricePerK = 0.01,
      outputTokenPricePerK = 0.03
    )
    val GPT4Vision = ChatModels(
      name = "GPT4Vision",
      modelName = "gpt-4-vision-preview",
      maxTokens = 8192,
      provider = APIProvider.OpenAI,
      inputTokenPricePerK = 0.01,
      outputTokenPricePerK = 0.03
    )

    private val SonarSmallChat = ChatModels(
      name = "SonarSmallChat",
      modelName = "sonar-small-chat",
      maxTokens = 16384,
      provider = APIProvider.Perplexity,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val SonarSmallOnline = ChatModels(
      name = "SonarSmallOnline",
      modelName = "sonar-small-online",
      maxTokens = 12000,
      provider = APIProvider.Perplexity,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val SonarMediumChat = ChatModels(
      name = "SonarMediumChat",
      modelName = "sonar-medium-chat",
      maxTokens = 16384,
      provider = APIProvider.Perplexity,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val SonarMediumOnline = ChatModels(
      name = "SonarMediumOnline",
      modelName = "sonar-medium-online",
      maxTokens = 12000,
      provider = APIProvider.Perplexity,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val Codellama70bInstruct = ChatModels(
      name = "Codellama70bInstruct",
      modelName = "codellama-70b-instruct",
      maxTokens = 16384,
      provider = APIProvider.Perplexity,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val Mistral7bInstruct = ChatModels(
      name = "Mistral7bInstruct",
      modelName = "mistral-7b-instruct",
      maxTokens = 16384,
      provider = APIProvider.Perplexity,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val Mixtral8x7bInstruct = ChatModels(
      name = "Mixtral8x7bInstruct",
      modelName = "mixtral-8x7b-instruct",
      maxTokens = 16384,
      provider = APIProvider.Perplexity,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val LLaMA270bChat = ChatModels(
      name = "LLaMA270bChat",
      modelName = "llama2-70b-4096",
      maxTokens = 4096,
      provider = APIProvider.Groq,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val Mixtral8x7bInstructV01 = ChatModels(
      name = "Mixtral8x7bInstructV01",
      modelName = "mixtral-8x7b-32768",
      maxTokens = 32768,
      provider = APIProvider.Groq,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

/*
    val Gemma7bIt = ChatModels(
      name = "Gemma7bIt",
      modelName = "Gemma-7b-it",
      maxTokens = 8192,
      provider = APIProvider.Groq,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
*/

    private val Zephyr7bBeta = ChatModels(
      name = "Zephyr7bBeta",
      modelName = "zephyr-7b-beta",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val DialoGPTLarge = ChatModels(
      name = "DialoGPTLarge",
      modelName = "DialoGPT-large",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val YarnMistral7b128k = ChatModels(
      name = "YarnMistral7b128k",
      modelName = "Yarn-Mistral-7b-128k",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
/*
    val PygmalionAI = ChatModels(
      name = "PygmalionAI",
      modelName = "PygmalionAI",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
*/
private val Pygmalion13b = ChatModels(
      name = "Pygmalion13b",
      modelName = "pygmalion-1.3b",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Opt67b = ChatModels(
      name = "Opt67b",
      modelName = "opt-6.7b",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val MistralLite = ChatModels(
      name = "MistralLite",
      modelName = "MistralLite",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Openchat35 = ChatModels(
      name = "Openchat35",
      modelName = "openchat_3.5",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val NeuralChat7bV3 = ChatModels(
      name = "NeuralChat7bV3",
      modelName = "neural-chat-7b-v3",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val OpenHermes25Mistral7B = ChatModels(
      name = "OpenHermes25Mistral7B",
      modelName = "OpenHermes-2.5-Mistral-7B",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Dolphin221Mistral7b = ChatModels(
      name = "Dolphin221Mistral7b",
      modelName = "dolphin-2.2.1-mistral-7b",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Mistral7BOpenOrca = ChatModels(
      name = "Mistral7BOpenOrca",
      modelName = "Mistral-7B-OpenOrca",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
//    val CodeLlama7bHf = ChatModels(
//      name = "CodeLlama7bHf",
//      modelName = "CodeLlama-7b-hf",
//      maxTokens = 16384,
//      provider = APIProvider.ModelsLab,
//      inputTokenPricePerK = 0.0005,
//      outputTokenPricePerK = 0.0015
//    )
private val DeepseekCoder67bInstruct = ChatModels(
      name = "DeepseekCoder67bInstruct",
      modelName = "deepseek-coder-6.7b-instruct",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Phi15 = ChatModels(
      name = "Phi15",
      modelName = "phi-1_5",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Zephyr7bAlpha = ChatModels(
      name = "Zephyr7bAlpha",
      modelName = "zephyr-7b-alpha",
      maxTokens = 16384,
      provider = APIProvider.ModelsLab,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    private val AWSLLaMA270bChat = ChatModels(
      name = "AWSLLaMA270bChat",
      modelName = "meta.llama2-70b-chat-v1",
      maxTokens = 2048,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val AWSLLaMA213bChat = ChatModels(
      name = "AWSLLaMA213bChat",
      modelName = "meta.llama2-13b-chat-v1",
      maxTokens = 2048,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Mistral7bInstructV02 = ChatModels(
      name = "Mistral7bInstructV02",
      modelName = "mistral.mistral-7b-instruct-v0:2",
      maxTokens = 2 * 1024,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Mixtral8x7bInstructV01AWS = ChatModels(
      name = "Mixtral8x7bInstructV01AWS",
      modelName = "mistral.mixtral-8x7b-instruct-v0:1",
      maxTokens = 2 * 1024,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
//    val AmazonTitanEmbedTextV1 = ChatModels(
//      name = "AmazonTitanEmbedTextV1",
//      modelName = "amazon.titan-embed-text-v1",
//      maxTokens = 16384,
//      provider = APIProvider.AWS,
//      inputTokenPricePerK = 0.0005,
//      outputTokenPricePerK = 0.0015
//    )
private val AmazonTitanTextLiteV1 = ChatModels(
      name = "AmazonTitanTextLiteV1",
      modelName = "amazon.titan-text-lite-v1",
      maxTokens = 4096,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val AmazonTitanTextExpressV1 = ChatModels(
      name = "AmazonTitanTextExpressV1",
      modelName = "amazon.titan-text-express-v1",
      maxTokens = 8192,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val CohereCommandTextV14 = ChatModels(
      name = "CohereCommandTextV14",
      modelName = "cohere.command-text-v14",
      maxTokens = 4000,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val AI21J2UltraV1 = ChatModels(
      name = "AI21J2UltraV1",
      modelName = "ai21.j2-ultra-v1",
      maxTokens = 8191,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val AI21J2MidV1 = ChatModels(
      name = "AI21J2MidV1",
      modelName = "ai21.j2-mid-v1",
      maxTokens = 8191,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Claude3Sonnet = ChatModels(
      name = "Claude3Sonnet",
      modelName = "anthropic.claude-3-sonnet-20240229-v1:0",
      maxTokens = 200000,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val Claude3Haiku = ChatModels(
      name = "Claude3Haiku",
      modelName = "anthropic.claude-3-haiku-20240307-v1:0",
      maxTokens = 200000,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val ClaudeV2_1 = ChatModels(
      name = "ClaudeV2",
      modelName = "anthropic.claude-v2:1",
      maxTokens = 100000,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val ClaudeV2 = ChatModels(
      name = "ClaudeV2",
      modelName = "anthropic.claude-v2",
      maxTokens = 100000,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )
    private val ClaudeV2Instant = ChatModels(
      name = "ClaudeV2",
      modelName = "anthropic.claude-instant-v1",
      maxTokens = 100000,
      provider = APIProvider.AWS,
      inputTokenPricePerK = 0.0005,
      outputTokenPricePerK = 0.0015
    )

    fun values() = mapOf(
      "GPT35Turbo" to GPT35Turbo,
//      "GPT4" to GPT4,
      "GPT4Turbo" to GPT4Turbo,
      "GPT4Vision" to GPT4Vision,
      "SonarSmallChat" to SonarSmallChat,
      "SonarSmallOnline" to SonarSmallOnline,
      "SonarMediumChat" to SonarMediumChat,
      "SonarMediumOnline" to SonarMediumOnline,
      "Codellama70bInstruct" to Codellama70bInstruct,
      "Mistral7bInstruct" to Mistral7bInstruct,
      "Mixtral8x7bInstruct" to Mixtral8x7bInstruct,
      "LLaMA270bChat" to LLaMA270bChat,
      "Mixtral8x7bInstructV01" to Mixtral8x7bInstructV01,
//      "Gemma7bIt" to Gemma7bIt,
      "Zephyr7bBeta" to Zephyr7bBeta,
      "DialoGPTLarge" to DialoGPTLarge,
      "YarnMistral7b128k" to YarnMistral7b128k,
//      "PygmalionAI" to PygmalionAI,
      "Pygmalion13b" to Pygmalion13b,
      "Opt67b" to Opt67b,
      "MistralLite" to MistralLite,
      "Openchat35" to Openchat35,
      "NeuralChat7bV3" to NeuralChat7bV3,
      "OpenHermes25Mistral7B" to OpenHermes25Mistral7B,
      "Dolphin221Mistral7b" to Dolphin221Mistral7b,
      "Mistral7BOpenOrca" to Mistral7BOpenOrca,
//      "CodeLlama7bHf" to CodeLlama7bHf,
      "DeepseekCoder67bInstruct" to DeepseekCoder67bInstruct,
      "Phi15" to Phi15,
      "Zephyr7bAlpha" to Zephyr7bAlpha,
      "AWSLLaMA270bChat" to AWSLLaMA270bChat,
      "AWSLLaMA213bChat" to AWSLLaMA213bChat,
      "Mistral7bInstructV02" to Mistral7bInstructV02,
      "Mixtral8x7bInstructV01AWS" to Mixtral8x7bInstructV01AWS,
//      "AmazonTitanEmbedTextV1" to AmazonTitanEmbedTextV1,
      "AmazonTitanTextLiteV1" to AmazonTitanTextLiteV1,
      "AmazonTitanTextExpressV1" to AmazonTitanTextExpressV1,
      "CohereCommandTextV14" to CohereCommandTextV14,
      "AI21J2UltraV1" to AI21J2UltraV1,
      "AI21J2MidV1" to AI21J2MidV1,
      "Claude3Sonnet" to Claude3Sonnet,
      "Claude3Haiku" to Claude3Haiku,
      "ClaudeV2_1" to ClaudeV2_1,
      "ClaudeV2" to ClaudeV2,
      "ClaudeV2Instant" to ClaudeV2Instant,
    )
  }
}

class ChatModelsSerializer : StdSerializer(ChatModels::class.java) {
  override fun serialize(value: ChatModels, gen: JsonGenerator, provider: SerializerProvider) {
    values().entries.find { it.value == value }?.key?.let { gen.writeString(it) }
  }
}

class ChatModelsDeserializer : JsonDeserializer() {
  override fun deserialize(p: JsonParser, ctxt: DeserializationContext): ChatModels {
    val modelName = p.readValueAs(String::class.java)
    return ChatModels.values()[modelName] ?: throw IllegalArgumentException("Unknown model name: $modelName")
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy