Save model defaults and optional adjudicatorPolicies atomically with account/model-pool CAS; model-role null clears, policy-slot null inherits; copyPlatformDefaults copies both models and policies once
PUT
/v1/model-role-preferences
const url = 'https://api.tansr.com/v1/model-role-preferences';const options = { method: 'PUT', headers: {'Content-Type': 'application/json'}, body: '{"expectedRevision":1,"expectedPolicyRevision":1,"expectedSelectionRevision":"example","copyPlatformDefaults":true,"adjudicatorPolicies":{"primary":{"tier":"low","budgets":{"maxRounds":1,"maxUsd":"example","maxCny":"example","callBudget":1},"escalation":{"mode":"parent"}},"backup":{"tier":"low","budgets":{"maxRounds":1,"maxUsd":"example","maxCny":"example","callBudget":1},"escalation":{"mode":"parent"}}},"preferences":{"main":{"primaryCatalogId":"example","backupCatalogId":"example"},"fast":{"primaryCatalogId":"example","backupCatalogId":"example"},"adjudicator":{"primaryCatalogId":"example","backupCatalogId":"example"}},"candidateCatalogIds":{"main":["example"],"fast":["example"],"adjudicator":["example"]}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://api.tansr.com/v1/model-role-preferences \ --header 'Content-Type: application/json' \ --data '{ "expectedRevision": 1, "expectedPolicyRevision": 1, "expectedSelectionRevision": "example", "copyPlatformDefaults": true, "adjudicatorPolicies": { "primary": { "tier": "low", "budgets": { "maxRounds": 1, "maxUsd": "example", "maxCny": "example", "callBudget": 1 }, "escalation": { "mode": "parent" } }, "backup": { "tier": "low", "budgets": { "maxRounds": 1, "maxUsd": "example", "maxCny": "example", "callBudget": 1 }, "escalation": { "mode": "parent" } } }, "preferences": { "main": { "primaryCatalogId": "example", "backupCatalogId": "example" }, "fast": { "primaryCatalogId": "example", "backupCatalogId": "example" }, "adjudicator": { "primaryCatalogId": "example", "backupCatalogId": "example" } }, "candidateCatalogIds": { "main": [ "example" ], "fast": [ "example" ], "adjudicator": [ "example" ] } }'Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
expectedRevision
required
integer
expectedPolicyRevision
required
integer
expectedSelectionRevision
string
copyPlatformDefaults
boolean
adjudicatorPolicies
object
primary
required
preferences
required
object
main
required
fast
required
candidateCatalogIds
object
main
required
Any of:
Array<string>
null
fast
required
Any of:
Array<string>
null
adjudicator
required
Any of:
Array<string>
null
Responses
Section titled “Responses”Saved preferences
Media typeapplication/json
object
defaultsEnabled
required
boolean
adjudicatorPolicies
required
Any of:
object
primary
required
null
adjudicatorPolicyDefaults
required
object
primary
required
effectiveAdjudicatorPolicies
required
Any of:
object
primary
required
backup
required
null
revision
required
integer
policyRevision
required
integer
preferences
required
object
main
required
fast
required
initialization
required
candidateSource
required
string
unavailable
required
platformRoles
required
Any of:
object
main
required
fast
required
null
available
required
candidateCatalogIds
required
object
main
required
Any of:
Array<string>
null
fast
required
Any of:
Array<string>
null
adjudicator
required
Any of:
Array<string>
null
roleCandidates
required
object
main
required
fast
required
modelSelection
required
object
inherited
required
boolean
catalogIds
required
Array<string>
revision
required
string
effective
required
Any of:
object
main
required
fast
required
null
adjudication
required
object
policyEnabled
required
boolean
profile
required
selection
required
object
available
required
canInherit
required
boolean
appliesToApplications
required
boolean
model
required
budgets
required
object
escalation
required
object
evidence
required
object
primary
required
object
app
required
backup
required
object
app
required
Example
{ "disabledReason": "platform_model_roles_not_initialized", "adjudicatorPolicies": { "primary": { "tier": "low", "escalation": { "mode": "parent" } }, "backup": { "tier": "low", "escalation": { "mode": "parent" } } }, "adjudicatorPolicyDefaults": { "primary": { "tier": "low", "escalation": { "mode": "parent" } }, "backup": { "tier": "low", "escalation": { "mode": "parent" } } }, "adjudicatorPolicyBudgetMode": "shared", "effectiveAdjudicatorPolicies": { "primary": { "tier": "low" }, "backup": { "tier": "low" }, "budgetMode": "shared" }, "initialization": { "version": 1, "source": "starter" }, "candidateSource": "owner_pool", "unavailable": [ { "reason": "catalog_missing" } ], "available": [ { "kind": "chat" } ], "roleCandidates": { "main": [ { "kind": "chat" } ], "fast": [ { "kind": "chat" } ], "adjudicator": [ { "kind": "chat" } ] }, "effective": { "main": { "source": "user", "diagnostics": [ "candidate_unavailable" ] }, "fast": { "source": "user", "diagnostics": [ "candidate_unavailable" ] }, "adjudicator": { "source": "user", "diagnostics": [ "candidate_unavailable" ] } }, "adjudication": { "profile": { "source": "organization_policy" }, "selection": { "available": [ { "scope": "user" } ] }, "model": { "reason": "fixed_profile_model" }, "evidence": { "primary": { "app": { "protocolState": "not_checked", "status": "matched", "report": { "protocol": "app" } }, "coding": { "protocolState": "not_checked", "status": "matched", "report": { "protocol": "app" } } }, "backup": { "app": { "protocolState": "not_checked", "status": "matched", "report": { "protocol": "app" } }, "coding": { "protocolState": "not_checked", "status": "matched", "report": { "protocol": "app" } } } } }}Invalid or unauthorized default choice, or model_role_configuration_not_initialized
Media typeapplication/json
object
error
required
object
code
required
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
string
message
required
string
requestId
required
string
detail
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}Forbidden
Media typeapplication/json
object
error
required
object
code
required
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
string
message
required
string
requestId
required
string
detail
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}Policy or preferences changed
Media typeapplication/json
object
error
required
object
code
required
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
string
message
required
string
requestId
required
string
detail
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}本文是否有帮助?
感谢反馈,我们会持续改进这篇文章。