Skip to content

Commit cfff413

Browse files
committed
Config stuff taken out
1 parent 8d3663e commit cfff413

File tree

3 files changed

+41
-33
lines changed

3 files changed

+41
-33
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.cequence.openaiscala.service
2+
3+
import com.typesafe.config.{Config, ConfigFactory}
4+
5+
/**
6+
* Trait providing OpenAI configuration loading capabilities.
7+
*
8+
* Configuration can be customized via the OPENAI_SCALA_CLIENT_CONFIG_FILE environment
9+
* variable. If not set, defaults to "openai-scala-client.conf".
10+
*/
11+
trait HasOpenAIConfig {
12+
13+
/**
14+
* The configuration prefix used for all OpenAI client settings.
15+
*/
16+
protected val configPrefix = "openai-scala-client"
17+
18+
/**
19+
* The configuration file name. Can be overridden via the OPENAI_SCALA_CLIENT_CONFIG_FILE
20+
* environment variable.
21+
*/
22+
protected val configFileName: String =
23+
sys.env.getOrElse("OPENAI_SCALA_CLIENT_CONFIG_FILE", "openai-scala-client.conf")
24+
25+
/**
26+
* The loaded OpenAI client configuration from the specified config file.
27+
*/
28+
protected lazy val clientConfig: Config =
29+
ConfigFactory.load(configFileName)
30+
}

openai-core/src/main/scala/io/cequence/openaiscala/service/OpenAIChatCompletionExtra.scala

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ import play.api.libs.json.{Format, JsObject, JsValue, Json}
1717

1818
import scala.concurrent.{ExecutionContext, Future}
1919
import com.fasterxml.jackson.core.JsonProcessingException
20-
import com.typesafe.config.Config
2120
import io.cequence.openaiscala.OpenAIScalaClientException
2221
import io.cequence.openaiscala.domain.JsonSchema.JsonSchemaOrMap
2322
import io.cequence.wsclient.JsonUtil
2423

25-
object OpenAIChatCompletionExtra extends OpenAIServiceConsts {
24+
object OpenAIChatCompletionExtra extends OpenAIServiceConsts with HasOpenAIConfig {
2625

2726
protected val logger: Logger =
2827
LoggerFactory.getLogger(this.getClass.getSimpleName.stripSuffix("$"))
@@ -129,7 +128,6 @@ object OpenAIChatCompletionExtra extends OpenAIServiceConsts {
129128
retryOnAnyError: Boolean = false,
130129
taskNameForLogging: Option[String] = None,
131130
jsonSchemaModels: Seq[String] = Nil,
132-
config: Option[Config] = None,
133131
enforceJsonSchemaMode: Boolean = false,
134132
parseJson: String => JsValue = defaultParseJsonOrRepair
135133
)(
@@ -146,7 +144,6 @@ object OpenAIChatCompletionExtra extends OpenAIServiceConsts {
146144
settings,
147145
taskNameForLoggingFinal,
148146
jsonSchemaModels,
149-
config,
150147
enforceJsonSchemaMode
151148
)
152149
} else {
@@ -206,41 +203,30 @@ object OpenAIChatCompletionExtra extends OpenAIServiceConsts {
206203
}
207204
}
208205

209-
private lazy val defaultConfig = loadDefaultConfig()
210-
211-
private def getJsonSchemaModels(
212-
jsonSchemaModels: Seq[String],
213-
config: Option[Config]
214-
): Seq[String] = {
206+
private def getJsonSchemaModelsFromConfig(): Seq[String] = {
215207
import scala.collection.JavaConverters._
216-
val cfg = config.getOrElse(defaultConfig)
217208
val configPath = s"$configPrefix.models-supporting-json-schema"
218-
val configModels = if (cfg.hasPath(configPath)) {
219-
cfg.getStringList(configPath).asScala.toSeq
209+
if (clientConfig.hasPath(configPath)) {
210+
clientConfig.getStringList(configPath).asScala.toSeq
220211
} else {
221212
Nil
222213
}
223-
224-
if (jsonSchemaModels.isEmpty) {
225-
configModels
226-
} else if (config.isDefined) {
227-
// Both explicit models and custom config provided - merge and deduplicate
228-
(jsonSchemaModels ++ configModels).distinct
229-
} else {
230-
// Only explicit models provided
231-
jsonSchemaModels
232-
}
233214
}
234215

235216
def handleOutputJsonSchema(
236217
messages: Seq[BaseMessage],
237218
settings: CreateChatCompletionSettings,
238219
taskNameForLogging: String,
239220
jsonSchemaModels: Seq[String] = Nil,
240-
config: Option[Config] = None,
241221
enforceJsonSchemaMode: Boolean = false
242222
): (Seq[BaseMessage], CreateChatCompletionSettings) = {
243-
val jsonSchemaModelsFinal = getJsonSchemaModels(jsonSchemaModels, config)
223+
// Use explicitly provided JSON schema models if available,
224+
// otherwise fall back to models configured in openai-scala-client.conf
225+
val jsonSchemaModelsFinal =
226+
if (jsonSchemaModels.nonEmpty)
227+
jsonSchemaModels
228+
else
229+
getJsonSchemaModelsFromConfig()
244230

245231
val jsonSchemaDef = settings.jsonSchema.getOrElse(
246232
throw new IllegalArgumentException("JSON schema is not defined but expected.")

openai-core/src/main/scala/io/cequence/openaiscala/service/OpenAIServiceConsts.scala

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.cequence.openaiscala.service
22

3-
import com.typesafe.config.{Config, ConfigFactory}
43
import io.cequence.openaiscala.domain.ModelId
54
import io.cequence.openaiscala.domain.settings._
65
import io.cequence.openaiscala.domain.responsesapi.{
@@ -15,13 +14,6 @@ trait OpenAIServiceConsts {
1514

1615
protected val defaultCoreUrl = "https://api.openai.com/v1/"
1716

18-
protected val configPrefix = "openai-scala-client"
19-
20-
protected val configFileName = "openai-scala-client.conf"
21-
22-
protected def loadDefaultConfig(): Config =
23-
ConfigFactory.load(configFileName)
24-
2517
object DefaultSettings {
2618

2719
val CreateJsonCompletion = CreateCompletionSettings(

0 commit comments

Comments
 (0)