nsmcp::QuestionService object method setup (public)

 nsmcp::QuestionService[i] setup moduleDirectory

Defined in /usr/local/ns/tcl/nsmcp/question-service.tcl

Configure question backends and the question service at startup. Honor enableQuestions, validate the tool registry and credentials, and establish the configured provider implementations.

Parameters:
moduleDirectory (required)
Installed module directory used to resolve backend helpers.
Returns:
The startup setup result, or an empty result when questions are disabled.

Testcases:
No testcase defined.
Source code:
if {![ns_config -bool ${:section} enableQuestions false]} {
    return
}
if {![nsf::object::exists ::nsmcp::tools]} {
    error "Questions require the configured nsmcp HTTP endpoint"
}
set backend [ns_config ${:section} questionBackend codex]
if {$backend ni {codex chat-completions}} {
    error "Unsupported question backend: $backend"
}
set lifetime [ns_baseunit -time [ns_config ${:section} questionLifetime 1h]]
if {$lifetime < 1} {
    error "questionLifetime must be positive"
}
set maxBytes [ns_baseunit -size [ns_config ${:section} questionMaxBytes 2MiB]]
set maxEvidence [ns_baseunit -size [ns_config ${:section} questionMaxEvidenceBytes 16MiB]]
if {$maxBytes<65536 || $maxEvidence<1024} {
    error "questionMaxBytes requires at least 64KiB; questionMaxEvidenceBytes requires at least 1KiB"
}
set evidenceDirectory [ns_config ${:section} questionEvidenceDirectory [file join [ns_info home] data nsmcp-question-evidence [ns_info server]]]
if {[file pathtype $evidenceDirectory] ne "absolute"} {
    error "questionEvidenceDirectory must be absolute"
}
:createBackend $backend $moduleDirectory ::nsmcp::questionBackend
set backends [dict create $backend ::nsmcp::questionBackend]
set errors {}
foreach candidate {codex chat-completions} {
    if {$candidate eq $backend} {
        continue
    }
    set object ::nsmcp::questionBackend_[string map {- _} $candidate]
    if {[catch {
        :createBackend $candidate $moduleDirectory $object
    } reason]} {
        if {[nsf::object::exists $object]} {
            $object destroy
        }
        dict set errors $candidate [string range $reason 0 1023]
    } else {
        dict set backends $candidate $object
    }
}
:create ::nsmcp::questions -backend ::nsmcp::questionBackend  -backends $backends -backendErrors $errors -questionLog [ns_config -bool ${:section} questionLog true]  -store nsmcp:questions:[ns_info server] -queue nsmcp-questions-[ns_info server]  -lifetime $lifetime -maxBytes $maxBytes -maxEvidenceBytes $maxEvidence -evidenceDirectory $evidenceDirectory  -maxConversations [ns_config -int -min 1 ${:section} questionMaxConversations 20]  -maxTurns [ns_config -int -min 1 ${:section} questionMaxTurns 20]
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: