Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for OpenAI-Organization header #676

Merged
merged 1 commit into from Mar 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -44,14 +44,14 @@ constructor(
@JvmSynthetic
suspend inline fun <reified A> prompt(
prompt: Prompt<CreateChatCompletionRequestModel>,
chat: ChatApi = fromEnvironment { baseUrl -> ChatApi(baseUrl) },
chat: ChatApi = fromEnvironment(::ChatApi),
): A = chat.prompt(prompt, this@Conversation, serializer())

@AiDsl
@JvmSynthetic
suspend inline fun promptMessage(
prompt: Prompt<CreateChatCompletionRequestModel>,
chat: ChatApi = fromEnvironment { baseUrl -> ChatApi(baseUrl) },
chat: ChatApi = fromEnvironment(::ChatApi),
): String = chat.promptMessage(prompt, this@Conversation)

@AiDsl
Expand Down
Expand Up @@ -6,17 +6,23 @@ import com.xebia.functional.xef.AIError
import com.xebia.functional.xef.env.getenv

private const val KEY_ENV_VAR = "OPENAI_TOKEN"
private const val ORG_ENV_VAR = "OPENAI_ORG"
private const val HOST_ENV_VAR = "OPENAI_HOST"

fun <T : ApiClient> fromEnvironment(builder: (String) -> T): T {
fun <T : ApiClient> fromEnvironment(builder: (String, String?) -> T): T {
val token =
getenv(KEY_ENV_VAR) ?: throw AIError.Env.OpenAI(nonEmptyListOf("missing $KEY_ENV_VAR env var"))
return fromToken(token, builder)
val org = getenv(ORG_ENV_VAR)
return fromToken(token, org, builder)
}

fun <T : ApiClient> fromToken(token: String, builder: (String) -> T): T {
fun <T : ApiClient> fromToken(
token: String,
org: String? = null,
builder: (String, String?) -> T
): T {
val host = getenv(HOST_ENV_VAR)
val api = builder(host ?: ApiClient.BASE_URL)
val api = builder(host ?: ApiClient.BASE_URL, org)
api.setBearerToken(token)
return api
}
@@ -1,6 +1,5 @@
package com.xebia.functional.xef.llm.assistants

import com.xebia.functional.openai.apis.AssistantApi
import com.xebia.functional.openai.apis.AssistantsApi
import com.xebia.functional.openai.infrastructure.ApiClient
import com.xebia.functional.openai.models.AssistantObject
Expand All @@ -25,24 +24,21 @@ class Assistant(
val assistantId: String,
val toolsConfig: List<Tool.Companion.ToolConfig<*, *>> = emptyList(),
private val assistantsApi: AssistantsApi = fromEnvironment(::AssistantsApi),
private val api: AssistantApi = fromEnvironment(::AssistantApi)
) {

constructor(
assistantObject: AssistantObject,
toolsConfig: List<Tool.Companion.ToolConfig<*, *>> = emptyList(),
assistantsApi: AssistantsApi = fromEnvironment(::AssistantsApi),
api: AssistantApi = fromEnvironment(::AssistantApi)
) : this(assistantObject.id, toolsConfig, assistantsApi, api)
) : this(assistantObject.id, toolsConfig, assistantsApi)

suspend fun get(): AssistantObject = assistantsApi.getAssistant(assistantId).body()

suspend fun modify(modifyAssistantRequest: ModifyAssistantRequest): Assistant =
Assistant(
api.modifyAssistant(assistantId, modifyAssistantRequest).body(),
assistantsApi.modifyAssistant(assistantId, modifyAssistantRequest).body(),
toolsConfig,
assistantsApi,
api
assistantsApi
)

suspend inline fun getToolRegistered(name: String, args: String): JsonElement =
Expand Down Expand Up @@ -78,7 +74,6 @@ class Assistant(
metadata: JsonObject? = null,
toolsConfig: List<Tool.Companion.ToolConfig<*, *>> = emptyList(),
assistantsApi: AssistantsApi = fromEnvironment(::AssistantsApi),
api: AssistantApi = fromEnvironment(::AssistantApi)
): Assistant =
Assistant(
CreateAssistantRequest(
Expand All @@ -91,25 +86,22 @@ class Assistant(
metadata = metadata
),
toolsConfig,
assistantsApi,
api
assistantsApi
)

suspend operator fun invoke(
request: CreateAssistantRequest,
toolsConfig: List<Tool.Companion.ToolConfig<*, *>> = emptyList(),
assistantsApi: AssistantsApi = fromEnvironment(::AssistantsApi),
api: AssistantApi = fromEnvironment(::AssistantApi)
): Assistant {
val response = assistantsApi.createAssistant(request)
return Assistant(response.body(), toolsConfig, assistantsApi, api)
return Assistant(response.body(), toolsConfig, assistantsApi)
}

suspend fun fromConfig(
request: String,
toolsConfig: List<Tool.Companion.ToolConfig<*, *>> = emptyList(),
assistantsApi: AssistantsApi = fromEnvironment(::AssistantsApi),
api: AssistantApi = fromEnvironment(::AssistantApi)
assistantsApi: AssistantsApi = fromEnvironment(::AssistantsApi)
): Assistant {
val parsed = Yaml.Default.decodeYamlMapFromString(request)
val assistantRequest =
Expand Down Expand Up @@ -164,7 +156,6 @@ class Assistant(
assistantId = assistantRequest.assistantId,
toolsConfig = toolsConfig,
assistantsApi = assistantsApi,
api = api
)
// list all assistants and get their files
// list all the org files
Expand Down Expand Up @@ -194,7 +185,6 @@ class Assistant(
),
toolsConfig = toolsConfig,
assistantsApi = assistantsApi,
api = api
)
}

Expand Down
2 changes: 1 addition & 1 deletion openai-client/client/.openapi-generator/VERSION
@@ -1 +1 @@
7.2.0
7.3.0

This file was deleted.

Expand Up @@ -46,20 +46,23 @@ open class AssistantsApi : ApiClient {

constructor(
baseUrl: String = ApiClient.BASE_URL,
org: String? = null,
httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : super(
baseUrl = baseUrl,
org = org,
httpClientEngine = httpClientEngine,
httpClientConfig = httpClientConfig,
jsonBlock = jsonSerializer
)

constructor(
baseUrl: String,
org: String?,
httpClient: HttpClient
) : super(baseUrl = baseUrl, httpClient = httpClient)
) : super(baseUrl = baseUrl, org = org, httpClient = httpClient)

/**
* Cancels a run that is &#x60;in_progress&#x60;.
Expand Down
Expand Up @@ -24,20 +24,23 @@ open class AudioApi : ApiClient {

constructor(
baseUrl: String = ApiClient.BASE_URL,
org: String? = null,
httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : super(
baseUrl = baseUrl,
org = org,
httpClientEngine = httpClientEngine,
httpClientConfig = httpClientConfig,
jsonBlock = jsonSerializer
)

constructor(
baseUrl: String,
org: String?,
httpClient: HttpClient
) : super(baseUrl = baseUrl, httpClient = httpClient)
) : super(baseUrl = baseUrl, org = org, httpClient = httpClient)

/**
* Generates audio from the input text.
Expand Down
Expand Up @@ -21,20 +21,23 @@ open class ChatApi : ApiClient {

constructor(
baseUrl: String = ApiClient.BASE_URL,
org: String? = null,
httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : super(
baseUrl = baseUrl,
org = org,
httpClientEngine = httpClientEngine,
httpClientConfig = httpClientConfig,
jsonBlock = jsonSerializer
)

constructor(
baseUrl: String,
org: String?,
httpClient: HttpClient
) : super(baseUrl = baseUrl, httpClient = httpClient)
) : super(baseUrl = baseUrl, org = org, httpClient = httpClient)

/**
* Creates a model response for the given chat conversation.
Expand Down
Expand Up @@ -21,20 +21,23 @@ open class CompletionsApi : ApiClient {

constructor(
baseUrl: String = ApiClient.BASE_URL,
org: String? = null,
httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : super(
baseUrl = baseUrl,
org = org,
httpClientEngine = httpClientEngine,
httpClientConfig = httpClientConfig,
jsonBlock = jsonSerializer
)

constructor(
baseUrl: String,
org: String?,
httpClient: HttpClient
) : super(baseUrl = baseUrl, httpClient = httpClient)
) : super(baseUrl = baseUrl, org = org, httpClient = httpClient)

/**
* Creates a completion for the provided prompt and parameters.
Expand Down

This file was deleted.