in anthropic-java-core/src/main/kotlin/com/anthropic/services/blocking/beta/MessageServiceImpl.kt [47:175]
override fun createStreaming(
params: MessageCreateParams,
requestOptions: RequestOptions,
): StreamResponse<BetaRawMessageStreamEvent> =
// post /v1/messages?beta=true
withRawResponse().createStreaming(params, requestOptions).parse()
override fun countTokens(
params: MessageCountTokensParams,
requestOptions: RequestOptions,
): BetaMessageTokensCount =
// post /v1/messages/count_tokens?beta=true
withRawResponse().countTokens(params, requestOptions).parse()
class WithRawResponseImpl internal constructor(private val clientOptions: ClientOptions) :
MessageService.WithRawResponse {
private val errorHandler: Handler<JsonValue> = errorHandler(clientOptions.jsonMapper)
private val batches: BatchService.WithRawResponse by lazy {
BatchServiceImpl.WithRawResponseImpl(clientOptions)
}
override fun batches(): BatchService.WithRawResponse = batches
private val createHandler: Handler<BetaMessage> =
jsonHandler<BetaMessage>(clientOptions.jsonMapper).withErrorHandler(errorHandler)
override fun create(
params: MessageCreateParams,
requestOptions: RequestOptions,
): HttpResponseFor<BetaMessage> {
val request =
HttpRequest.builder()
.method(HttpMethod.POST)
.addPathSegments("v1", "messages")
.putQueryParam("beta", "true")
.body(json(clientOptions.jsonMapper, params._body()))
.build()
.prepare(clientOptions, params)
val requestOptions =
requestOptions
.applyDefaults(RequestOptions.from(clientOptions))
.applyDefaultTimeoutFromMaxTokens(params.maxTokens(), isStreaming = false)
val response = clientOptions.httpClient.execute(request, requestOptions)
return response.parseable {
response
.use { createHandler.handle(it) }
.also {
if (requestOptions.responseValidation!!) {
it.validate()
}
}
}
}
private val createStreamingHandler: Handler<StreamResponse<BetaRawMessageStreamEvent>> =
sseHandler(clientOptions.jsonMapper)
.mapJson<BetaRawMessageStreamEvent>()
.withErrorHandler(errorHandler)
override fun createStreaming(
params: MessageCreateParams,
requestOptions: RequestOptions,
): HttpResponseFor<StreamResponse<BetaRawMessageStreamEvent>> {
val request =
HttpRequest.builder()
.method(HttpMethod.POST)
.addPathSegments("v1", "messages")
.putQueryParam("beta", "true")
.body(
json(
clientOptions.jsonMapper,
params
._body()
.toBuilder()
.putAdditionalProperty("stream", JsonValue.from(true))
.build(),
)
)
.build()
.prepare(clientOptions, params)
val requestOptions =
requestOptions
.applyDefaults(RequestOptions.from(clientOptions))
.applyDefaultTimeoutFromMaxTokens(params.maxTokens(), isStreaming = true)
val response = clientOptions.httpClient.execute(request, requestOptions)
return response.parseable {
response
.let { createStreamingHandler.handle(it) }
.let { streamResponse ->
if (requestOptions.responseValidation!!) {
streamResponse.map { it.validate() }
} else {
streamResponse
}
}
}
}
private val countTokensHandler: Handler<BetaMessageTokensCount> =
jsonHandler<BetaMessageTokensCount>(clientOptions.jsonMapper)
.withErrorHandler(errorHandler)
override fun countTokens(
params: MessageCountTokensParams,
requestOptions: RequestOptions,
): HttpResponseFor<BetaMessageTokensCount> {
val request =
HttpRequest.builder()
.method(HttpMethod.POST)
.addPathSegments("v1", "messages", "count_tokens")
.putQueryParam("beta", "true")
.body(json(clientOptions.jsonMapper, params._body()))
.build()
.prepare(clientOptions, params)
val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions))
val response = clientOptions.httpClient.execute(request, requestOptions)
return response.parseable {
response
.use { countTokensHandler.handle(it) }
.also {
if (requestOptions.responseValidation!!) {
it.validate()
}
}
}
}
}