Class ::nsmcp::ChatCompletionsBackend
::nsmcp::ChatCompletionsBackend
create ... \
[ -apiKeyFile:required apiKeyFile:required ] \
[ -apiOptions (default "{} object {}") ] \
[ -apiUrl:required apiUrl:required ] \
[ -authenticator (default "::nsmcp::auth") ] \
[ -authorizer (default "::nsmcp::authorization") ] \
[ -maxApiRequests (default "16") ] \
[ -maxHistoryBytes (default "1048576") ] \
[ -maxOutputTokens (default "4096") ] \
[ -maxResponseBytes (default "8388608") ] \
[ -maxResultBytes (default "131072") ] \
[ -maxToolCalls (default "32") ] \
[ -model:required model:required ] \
[ -mutex mutex ] \
[ -registry (default "::nsmcp::tools") ] \
[ -streamStore (default "") ] \
[ -timeout (default "180") ] \
[ -tokenFile:required tokenFile:required ]
Defined in /usr/local/ns/tcl/nsmcp/question-chat-completions.tclClass Relations
- class: ::nx::Class
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- superclass: ::nsmcp::QuestionBackend
![[i]](/resources/acs-subsite/ZoomIn16.gif)
::nx::Class create ::nsmcp::ChatCompletionsBackend \
-superclass ::nsmcp::QuestionBackend
Methods (to be applied on instances)
describe (scripted, public)
<instance of nsmcp::ChatCompletionsBackend
> describe
- Testcases:
-
No testcase defined.
return [dict create backend chat-completions model ${:model} apiUrl ${:apiUrl} streaming true timeout ${:timeout} maxOutputTokens ${:maxOutputTokens} maxToolCalls ${:maxToolCalls} maxApiRequests ${:maxApiRequests}]run (scripted, public)
<instance of nsmcp::ChatCompletionsBackend
> run question state \
emit
- Parameters:
- question (required)
- state (required)
- emit (required)
- Testcases:
-
No testcase defined.
set runner [::nsmcp::ChatCompletionsRun new -backend [self] -emit $emit]
try {
return [$runner run $question $state]
} finally {
$runner destroy
} <instance of nsmcp::ChatCompletionsBackend
> streamClose key
- Parameters:
- key (required)
- Testcases:
-
No testcase defined.
ns_mutex lock ${:mutex}
try {nsv_unset -nocomplain ${:streamStore} $key} finally {ns_mutex unlock ${:mutex}} <instance of nsmcp::ChatCompletionsBackend
> streamData key \
fields
- Parameters:
- key (required)
- fields (required)
- Testcases:
-
No testcase defined.
ns_mutex lock ${:mutex}
try {
if {[nsv_get ${:streamStore} $key record]} {
set data [dict get $fields data]
dict incr record total [string bytelength $data]
if {[dict get $record total] > ${:maxResponseBytes}
|| [string bytelength [dict get $record data]] + [string bytelength $data] > 1048576} {
dict set record error "API response exceeded its buffer or response size limit"
} elseif {[dict get $record error] eq ""} {
dict append record data $data
}
nsv_set ${:streamStore} $key $record
}
} finally {ns_mutex unlock ${:mutex}}
return <instance of nsmcp::ChatCompletionsBackend
> streamDrain key
- Parameters:
- key (required)
- Testcases:
-
No testcase defined.
ns_mutex lock ${:mutex}
try {
set record [nsv_get ${:streamStore} $key]
set next $record
dict set next data {}
nsv_set ${:streamStore} $key $next
return $record
} finally {ns_mutex unlock ${:mutex}} <instance of nsmcp::ChatCompletionsBackend
> streamHeaders key \
fields
- Parameters:
- key (required)
- fields (required)
- Testcases:
-
No testcase defined.
ns_mutex lock ${:mutex}
try {
if {[nsv_get ${:streamStore} $key record]} {
dict set record status [dict get $fields status]
dict set record contentType [ns_set iget [dict get $fields headers] content-type]
nsv_set ${:streamStore} $key $record
}
} finally {ns_mutex unlock ${:mutex}} <instance of nsmcp::ChatCompletionsBackend
> streamOpen
- Testcases:
-
No testcase defined.
set key [ns_crypto::randombytes -encoding hex 16]
nsv_set ${:streamStore} $key {data {} total 0 status 0 contentType {} error {}}
return $key