nsmcp::ChatCompletionsRun method request (protected)
<instance of nsmcp::ChatCompletionsRun> request body apiKey
Defined in /usr/local/ns/tcl/nsmcp/question-chat-completions.tcl
- Parameters:
- body (required)
- apiKey (required)
- Testcases:
- No testcase defined.
Source code: :check if {[string bytelength $body] > 2*[${:backend} cget -maxHistoryBytes]} {error "API request size limit reached; start a new conversation"} incr :requestsStarted set :requestUsage {} # Publish incomplete coverage before each request, retaining any usage # from earlier rounds if this request fails or times out. :emit [dict create type usage usage [dict merge ${:usageTotals} [dict create scope turn source chat-completions apiRequests ${:requestsStarted} requestsWithUsage ${:requestsWithUsage} complete false]]] set :lineBuffer {}; set :eventData {}; set :firstLine true set :done false; set :finish {}; set :content {}; set :reasoning {} set :hasReasoning false; set :calls {} set key [${:backend} streamOpen] set request {} set response {} set headers [ns_set create Content-Type application/json Accept text/event-stream Authorization "Bearer $apiKey"] try { set remaining [expr {max(0.001, (${:deadline}-[clock milliseconds])/1000.0)}] # Consume through the callback without retaining a second body. set discard [expr {$::tcl_platform(platform) eq "windows" ? "NUL" : "/dev/null"}] set request [ns_http queue -method POST -headers $headers -body $body -outputfile $discard -spoolsize 0 -timeout $remaining -expire $remaining -response_header_callback [list ${:backend} streamHeaders $key] -response_data_callback [list ${:backend} streamData $key] [${:backend} cget -apiUrl]] while {1} { :check :drain $key if {${:done}} {break} if {[lindex [ns_http list $request] end] ne "running"} { set code [catch {ns_http wait $request} reply] set request {} if {$code} {error "API request failed during HTTP transport"} set response $reply :drain $key break } ns_sleep 0.05 } if {!${:done}} {error "API stream ended without its completion marker"} if {${:finish} ni {stop tool_calls}} {error "API completion is incomplete (finish reason: ${:finish})"} if {${:finish} eq "tool_calls" && ${:calls} eq ""} {error "API requested tool execution without any calls"} if {${:finish} eq "stop" && ${:calls} ne ""} {error "API tool calls lack a tool_calls finish reason"} } finally { if {$request ne ""} {catch {ns_http cancel $request}} ${:backend} streamClose $key ns_set free $headers if {[dict exists $response headers]} {ns_set free [dict get $response headers]} }XQL Not present: Generic, PostgreSQL, Oracle
![[i]](/resources/acs-subsite/ZoomIn16.gif)