Models: J
JournalEntry
Section titled “JournalEntry”sequence: intkind: strnode_id: str | None(nodeIdon the wire) (optional)payload: Any | None(optional)timestamp: AwareDatetime | str
JournalKind
Section titled “JournalKind”root: str
JudgeClass
Section titled “JudgeClass”id: strtenant_id: str(tenantIdon the wire)scope: kindgi.client.JudgeClassScope1 | kindgi.client.JudgeClassScope2 | kindgi.client.JudgeClassScope3name: strweight: floatdescription: str | None(optional)assertable_by: kindgi.client.JudgeClassAssertableByView | None(assertableByon the wire) (optional)created_at: AwareDatetime(createdAton the wire)updated_at: AwareDatetime(updatedAton the wire)unregistered_at: AwareDatetime | None(unregisteredAton the wire) (optional)
JudgeClassAssertableBy
Section titled “JudgeClassAssertableBy”Who may assert the class: every part that is set must hold. A class with one is restricted: a judgment recorded while it is carries restricted, and a comparison weighted restricted-only counts only those.
min_reviewer_role: Optional[Literal['standard', 'senior', 'admin']](minReviewerRoleon the wire) (optional)principal_kinds: list[Literal['user', 'service']] | None(principalKindson the wire) (optional)principal_ids: list[kindgi.client.PrincipalId] | None(principalIdson the wire) (optional)
JudgeClassAssertableByView
Section titled “JudgeClassAssertableByView”Who may assert the class, as the caller sees it: every part that is set must hold. principalIds is sent only to an admin on the class's scope; principalCount to everyone who reads it.
min_reviewer_role: Optional[Literal['standard', 'senior', 'admin']](minReviewerRoleon the wire) (optional)principal_kinds: list[Literal['user', 'service']] | None(principalKindson the wire) (optional)principal_ids: list[kindgi.client.PrincipalId] | None(principalIdson the wire) (optional)principal_count: int | None(principalCounton the wire) (optional)
JudgeClassCollectionPage
Section titled “JudgeClassCollectionPage”data: list[kindgi.client.JudgeClass]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
JudgeClassId
Section titled “JudgeClassId”root: str
JudgeClassScope1
Section titled “JudgeClassScope1”Where a judge class applies: the whole tenant, one project, or one agent in a project.
kind: Literal['tenant']
JudgeClassScope2
Section titled “JudgeClassScope2”Where a judge class applies: the whole tenant, one project, or one agent in a project.
kind: Literal['project']project_id: str(projectIdon the wire)
JudgeClassScope3
Section titled “JudgeClassScope3”Where a judge class applies: the whole tenant, one project, or one agent in a project.
kind: Literal['agent']project_id: str(projectIdon the wire)agent_id: str(agentIdon the wire)
Judged
Section titled “Judged”What people said about this item on the replay itself, once they judged it there.
yes_weight: float(yesWeighton the wire)total_weight: float(totalWeighton the wire)
JudgedComparisonResult
Section titled “JudgedComparisonResult”A comparison's result (a judged eval run's): the summary and each case. EvalRun.result stays an open object, since each kind has its own; the clients read it as this (TS comparisonOf(run), Python comparison_of(run)).
summary: kindgi.client.JudgedComparisonSummaryper_case: list[kindgi.client.ComparisonCaseResult](perCaseon the wire)
JudgedComparisonSummary
Section titled “JudgedComparisonSummary”What a comparison concluded: the candidate beside the recorded runs, the case counts, and the metrics. What a promotion gate reads.
eval_run_id: str(evalRunIdon the wire)status: Literal['completed', 'partial', 'failed']completed_at: AwareDatetime(completedAton the wire)suite: kindgi.client.Suite1candidate: kindgi.client.ComparisonCandidate1 | kindgi.client.ComparisonCandidate2baseline: kindgi.client.Baseline | kindgi.client.Baseline1scope: kindgi.client.Scopecases: intdiverged: intrefused_writes: int(refusedWriteson the wire)errors: interased: int | None(optional)rescore_of: str | None(rescoreOfon the wire) (optional)not_rescored: int | None(notRescoredon the wire) (optional)stopped: intreads: Literal['recorded', 'live']class_weights: Optional[Literal['as-recorded', 'restricted-only']](classWeightson the wire) (optional)sample: kindgi.client.EvalSample | None(optional)sampling: kindgi.client.Samplingrepetitions: intmetrics: kindgi.client.Metrics
JudgedEvalCase
Section titled “JudgedEvalCase”One case of a judged eval suite: a copy of a judged run with its items' judgments summed up.
case_id: str(caseIdon the wire)subject: kindgi.client.JudgedSubjectinput: Anycontext: kindgi.client.JudgedRunContext | None(optional)output: Anyitems: list[kindgi.client.JudgedItemSummary]erased: Optional[Literal[True]](optional)
JudgedEvalCaseCollectionPage
Section titled “JudgedEvalCaseCollectionPage”data: list[kindgi.client.JudgedEvalCase]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
JudgedItem
Section titled “JudgedItem”The judged item of a run's output.
key: strpointer: str | None(optional)rank: int | None(optional)
JudgedItemSummary
Section titled “JudgedItemSummary”The judgments of one item of a case's output, summed up.
key: strpointer: str | None(optional)rank: int | None(optional)yes: intno: intyes_weight: float(yesWeighton the wire)total_weight: float(totalWeighton the wire)restricted: kindgi.client.Restricted | None(optional)reasons: list[kindgi.client.Reason]
JudgedRunContext
Section titled “JudgedRunContext”What a judged run needs besides its input to be replayed, captured when it was first judged. For an agent turn: the conversation before it, what its retrievals returned, and the decision at its session approval gate. For a flow run: its tool calls with their results. For both: the env values its tools were sent.
history: list[Any] | None(optional)history_truncated: bool | None(historyTruncatedon the wire) (optional)retrieved: Any | None(optional)recalled: Any | None(optional)session_approval: kindgi.client.SessionApproval | None(sessionApprovalon the wire) (optional)flow: kindgi.client.Flow | None(optional)tool_env: dict[str, dict[str, str]] | None(toolEnvon the wire) (optional)replay_of: str | None(replayOfon the wire) (optional)
JudgedRunCopy
Section titled “JudgedRunCopy”The stored copy of a judged run's input and output, taken when it was first judged.
run_id: str(runIdon the wire)subject: kindgi.client.JudgedSubjectinput: Anycontext: kindgi.client.JudgedRunContext | None(optional)output: Anysegments: list[kindgi.client.ScopeSegment] | None(optional)captured_at: AwareDatetime(capturedAton the wire)
JudgedSubject
Section titled “JudgedSubject”What a judged run ran: an agent at a version, or a flow at a version.
kind: Literal['agent', 'flow']id: strversion: str
JudgingClassCount
Section titled “JudgingClassCount”judge_class_id: str | None(judgeClassIdon the wire)count: int
JudgingClassResult
Section titled “JudgingClassResult”judge_class_id: str | None(judgeClassIdon the wire)judgments: intyes: int
JudgingDismissBody
Section titled “JudgingDismissBody”reason: str | None(optional)
JudgingItemCan
Section titled “JudgingItemCan”What the caller may do with the item, by the check the routes make (write on the project, as judging the run needs).
dismiss: boolreopen: bool
JudgingItemRule
Section titled “JudgingItemRule”rule_id: str(ruleIdon the wire)version: int
JudgingProgress
Section titled “JudgingProgress”The live judgments on the run so far, by class.
total: intby_class: list[kindgi.client.JudgingClassCount](byClasson the wire)
JudgingQueueItem
Section titled “JudgingQueueItem”A queued run: never its content, only what it was and where it stands.
run_id: str(runIdon the wire)project_id: str(projectIdon the wire)agent_id: str | None(agentIdon the wire) (optional)agent_version: str | None(agentVersionon the wire) (optional)flow_id: str(flowIdon the wire)run_status: Literal['completed', 'failed', 'cancelled'](runStatuson the wire)completed_at: AwareDatetime(completedAton the wire)rules: list[kindgi.client.JudgingItemRule]wanted_class_ids: list[str](wantedClassIdson the wire)any_judgment: bool(anyJudgmenton the wire)progress: kindgi.client.JudgingProgressadded_at: AwareDatetime(addedAton the wire)state: Literal['open', 'judged', 'dismissed', 'erased']closed_at: AwareDatetime | None(closedAton the wire) (optional)closed_by: str | None(closedByon the wire) (optional)reason: str | None(optional)can: kindgi.client.JudgingItemCan
JudgingQueuePage
Section titled “JudgingQueuePage”data: list[kindgi.client.JudgingQueueItem]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)total: int
JudgingResultGroup
Section titled “JudgingResultGroup”One rule version's runs of one agent version. added = open + judged + dismissed + erased.
rule_version: int(ruleVersionon the wire)agent_version: str | None(agentVersionon the wire)added: intopen: intjudged: intdismissed: interased: intskipped_by_cap: int(skippedByCapon the wire)judgments: intruns_with_judgments: int | None(runsWithJudgmentson the wire) (optional)yes_share: float | None(yesShareon the wire)by_class: list[kindgi.client.JudgingClassResult](byClasson the wire)
JudgingRule
Section titled “JudgingRule”One version of a judging rule; the latest live one applies.
rule_id: str(ruleIdon the wire)project_id: str(projectIdon the wire)version: intname: strwhen: kindgi.client.JudgingRuleWhensample: floatmax_open: int | None(maxOpenon the wire) (optional)judge_class_id: str | None(judgeClassIdon the wire) (optional)enabled: boolcreated_by: str | None(createdByon the wire) (optional)created_at: AwareDatetime(createdAton the wire)unregistered_at: AwareDatetime | None(unregisteredAton the wire) (optional)
JudgingRulePage
Section titled “JudgingRulePage”data: list[kindgi.client.JudgingRule]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
JudgingRulePatch
Section titled “JudgingRulePatch”The fields to change; when is replaced whole.
name: str | None(optional)when: kindgi.client.JudgingRuleWhen | None(optional)sample: float | None(optional)max_open: int | None(maxOpenon the wire) (optional)judge_class_id: str | None(judgeClassIdon the wire) (optional)enabled: bool | None(optional)
JudgingRulePreview
Section titled “JudgingRulePreview”considered: intmatched: int
JudgingRuleResults
Section titled “JudgingRuleResults”rule_id: str(ruleIdon the wire)since: AwareDatetime | None(optional)groups: list[kindgi.client.JudgingResultGroup]
JudgingRuleSpec
Section titled “JudgingRuleSpec”A judging rule as written. It only lists runs: nothing here starts a model.
name: strwhen: kindgi.client.JudgingRuleWhensample: float | None(optional)max_open: int | None(maxOpenon the wire) (optional)judge_class_id: str | None(judgeClassIdon the wire) (optional)enabled: bool | None(optional)
JudgingRuleUnregisterResult
Section titled “JudgingRuleUnregisterResult”rule_id: str(ruleIdon the wire)unregistered: bool
JudgingRuleWhen
Section titled “JudgingRuleWhen”Which of a project's runs a rule matches as they end. Every field narrows; absent fields don't. agentIds or flowIds, not both. Top-level runs only (an agent's own runs, not its turns as a flow's step); replays never match.
agent_ids: list[str] | None(agentIdson the wire) (optional)flow_ids: list[str] | None(flowIdson the wire) (optional)versions: list[str] | None(optional)status: list[Literal['completed', 'failed', 'cancelled']] | None(optional)include_dry_runs: bool | None(includeDryRunson the wire) (optional)
Judgment
Section titled “Judgment”id: strtenant_id: str(tenantIdon the wire)project_id: str(projectIdon the wire)run_id: str(runIdon the wire)subject: kindgi.client.JudgedSubjectitem: kindgi.client.JudgedItemverdict: Literal['yes', 'no']reason: str | None(optional)judge_class_id: str | None(judgeClassIdon the wire) (optional)restricted: Optional[Literal[True]](optional)asserted_by: kindgi.client.JudgmentAssertedBy(assertedByon the wire)participant_id: str | None(participantIdon the wire) (optional)created_at: AwareDatetime(createdAton the wire)unregistered_at: AwareDatetime | None(unregisteredAton the wire) (optional)superseded_by: str | None(supersededByon the wire) (optional)
JudgmentAssertedBy
Section titled “JudgmentAssertedBy”Who asserted a judgment: the authenticated caller, never a typed name.
kind: Literal['user', 'service']id: str
JudgmentCollectionPage
Section titled “JudgmentCollectionPage”data: list[kindgi.client.Judgment]next_cursor: str | None(nextCursoron the wire) (optional)has_more: bool(hasMoreon the wire)
JudgmentWithCopies
Section titled “JudgmentWithCopies”A judgment with the stored copies of what was judged.
id: strtenant_id: str(tenantIdon the wire)project_id: str(projectIdon the wire)run_id: str(runIdon the wire)subject: kindgi.client.JudgedSubjectitem: kindgi.client.JudgedItemverdict: Literal['yes', 'no']reason: str | None(optional)judge_class_id: str | None(judgeClassIdon the wire) (optional)restricted: Optional[Literal[True]](optional)asserted_by: kindgi.client.JudgmentAssertedBy(assertedByon the wire)participant_id: str | None(participantIdon the wire) (optional)created_at: AwareDatetime(createdAton the wire)unregistered_at: AwareDatetime | None(unregisteredAton the wire) (optional)superseded_by: str | None(supersededByon the wire) (optional)run: kindgi.client.JudgedRunCopyitem_value: Any | None(itemValueon the wire) (optional)