1+ package com.commitchronicle.cli
2+
3+ enum class AIProvider (
4+ val displayName : String ,
5+ val models : List <AIModel >
6+ ) {
7+ OPENAI (" OpenAI" , listOf (
8+ AIModel (" gpt-4o" , " GPT-4o (Latest)" ),
9+ AIModel (" gpt-4o-mini" , " GPT-4o Mini (Latest)" ),
10+ AIModel (" gpt-4-turbo" , " GPT-4 Turbo" ),
11+ AIModel (" gpt-4" , " GPT-4" ),
12+ AIModel (" gpt-3.5-turbo" , " GPT-3.5 Turbo" )
13+ )),
14+ CLAUDE (" Claude" , listOf (
15+ AIModel (" claude-3-5-sonnet-20241022" , " Claude 3.5 Sonnet (Latest)" ),
16+ AIModel (" claude-3-5-haiku-20241022" , " Claude 3.5 Haiku (Latest)" ),
17+ AIModel (" claude-3-opus-20240229" , " Claude 3 Opus" ),
18+ AIModel (" claude-3-sonnet-20240229" , " Claude 3 Sonnet" ),
19+ AIModel (" claude-3-haiku-20240307" , " Claude 3 Haiku" )
20+ )),
21+ GEMINI (" Gemini" , listOf (
22+ AIModel (" gemini-2.0-flash" , " Gemini 2.0 Flash (Latest)" ),
23+ AIModel (" gemini-2.5-flash" , " Gemini 2.5 Flash (Latest)" ),
24+ AIModel (" gemini-2.5-pro" , " Gemini 2.5 Pro (Latest)" ),
25+ AIModel (" gemini-1.5-flash" , " Gemini 1.5 Flash (Deprecated)" ),
26+ AIModel (" gemini-1.5-pro" , " Gemini 1.5 Pro (Deprecated)" )
27+ )),
28+ PERPLEXITY (" Perplexity" , listOf (
29+ AIModel (" llama-3.1-sonar-small-128k-online" , " Llama 3.1 Sonar Small" ),
30+ AIModel (" llama-3.1-sonar-large-128k-online" , " Llama 3.1 Sonar Large" ),
31+ AIModel (" llama-3.1-sonar-huge-128k-online" , " Llama 3.1 Sonar Huge" )
32+ )),
33+ DEEPSEEK (" DeepSeek" , listOf (
34+ AIModel (" deepseek-chat" , " DeepSeek Chat" ),
35+ AIModel (" deepseek-coder" , " DeepSeek Coder" )
36+ ));
37+
38+ val key: String get() = name.lowercase()
39+ val defaultModel: AIModel get() = models.first()
40+
41+ companion object {
42+ fun fromKey (key : String ): AIProvider ? = values().find { it.key == key.lowercase() }
43+
44+ fun getProviderOptions (): List <Pair <String , String >> = values().map { it.key to it.displayName }
45+ }
46+ }
47+
48+ data class AIModel (
49+ val id : String ,
50+ val displayName : String
51+ ) {
52+ fun toPair (): Pair <String , String > = id to displayName
53+ }
54+
55+ enum class SupportedLanguage (
56+ val code : String ,
57+ val displayName : String
58+ ) {
59+ ENGLISH (" en" , " English" ),
60+ KOREAN (" ko" , " 한국어 (Korean)" ),
61+ CHINESE (" zh" , " 中文 (Chinese)" ),
62+ JAPANESE (" ja" , " 日本語 (Japanese)" );
63+
64+ fun toPair (): Pair <String , String > = code to displayName
65+
66+ companion object {
67+ fun getLanguageOptions (): List <Pair <String , String >> = values().map { it.toPair() }
68+
69+ fun fromCode (code : String ): SupportedLanguage ? = values().find { it.code == code }
70+ }
71+ }
0 commit comments