::nsmcp::ChatCompletionsBackend ::nsmcp::ChatCompletionsBackend describe init run streamClose streamData streamDrain streamHeaders streamOpen ::nsmcp::QuestionBackend ::nsmcp::QuestionBackend canonicalResult describe run ::nsmcp::ChatCompletionsBackend->::nsmcp::QuestionBackend ::nsmcp::CodexQuestionBackend ::nsmcp::CodexQuestionBackend describe run ::nsmcp::CodexQuestionBackend->::nsmcp::QuestionBackend ::nx::Object ::nx::Object __default_accessor __default_method_call_protection __object_configureparameter __resolve_method_path contains copy delete object method delete object property delete object variable destroy_on_cleanup info consts info info info lookup parameters info lookup slots info lookup syntax info lookup variables info object method args info object method body info object method callprotection info object method debug info object method definition info object method definitionhandle info object method deprecated info object method exists info object method handle info object method origin info object method parameters info object method registrationhandle info object method returns info object method submethods info object method syntax info object method type info object slots info object variables info variable definition info variable name info variable parameter move object alias object forward object method object property object variable private protected public qn require namespace require object method require private object method require protected object method require public object method serialize ::nsmcp::QuestionBackend->::nx::Object

Class ::nsmcp::ChatCompletionsBackend

::nsmcp::ChatCompletionsBackend[i] 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.tcl

Class Relations

  • class: ::nx::Class[i]
  • superclass: ::nsmcp::QuestionBackend[i]
::nx::Class create ::nsmcp::ChatCompletionsBackend \
     -superclass ::nsmcp::QuestionBackend

Methods (to be applied on instances)

  • describe (scripted, public)

     <instance of nsmcp::ChatCompletionsBackend[i]> 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[i]> 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
    }
  • streamClose (scripted, public)

     <instance of nsmcp::ChatCompletionsBackend[i]> streamClose key
    Parameters:
    key (required)

    Testcases:
    No testcase defined.
    ns_mutex lock ${:mutex}
    try {nsv_unset -nocomplain ${:streamStore} $key} finally {ns_mutex unlock ${:mutex}}
  • streamData (scripted, public)

     <instance of nsmcp::ChatCompletionsBackend[i]> 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}}
    # The request discards its normal output. Returning TCL_OK also works
    # with cores whose queued callback evaluator does not propagate BREAK.
    return
  • streamDrain (scripted, public)

     <instance of nsmcp::ChatCompletionsBackend[i]> 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}}
  • streamHeaders (scripted, public)

     <instance of nsmcp::ChatCompletionsBackend[i]> 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}}
  • streamOpen (scripted, public)

     <instance of nsmcp::ChatCompletionsBackend[i]> 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