Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a065382512 |
@@ -1,5 +1,7 @@
|
|||||||
package epistemics
|
package epistemics
|
||||||
|
|
||||||
|
import "git.cin.su/m/Assistant/platform/ids"
|
||||||
|
|
||||||
type BeliefState string
|
type BeliefState string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -9,19 +11,27 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Observation struct {
|
type Observation struct {
|
||||||
ID ObservationID
|
ID ObservationID
|
||||||
SourceSnapshot SourceSnapshotID
|
SourceSnapshot SourceSnapshotID
|
||||||
Excerpt SourceExcerptID
|
Excerpt SourceExcerptID
|
||||||
Text string
|
Text string
|
||||||
ObservedAt int64
|
ObservedAt int64
|
||||||
|
PrincipalID string
|
||||||
|
ContextScopeRef string
|
||||||
|
ObservationKind string
|
||||||
|
Payload string
|
||||||
|
ExtractorRef string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Claim struct {
|
type Claim struct {
|
||||||
ID ClaimID
|
ID ClaimID
|
||||||
Statement string
|
Statement string
|
||||||
ObservationID ObservationID
|
ObservationID ObservationID
|
||||||
CitationID CitationID
|
CitationID CitationID
|
||||||
Verification VerificationState
|
Verification VerificationState
|
||||||
|
PropositionID ids.ID
|
||||||
|
RevisedFrom *ClaimID
|
||||||
|
RecordedAtUnixMillis int64
|
||||||
}
|
}
|
||||||
|
|
||||||
type Belief struct {
|
type Belief struct {
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ type HelpMethodKind string
|
|||||||
type OutcomeClass string
|
type OutcomeClass string
|
||||||
type ReflectionTriggerKind string
|
type ReflectionTriggerKind string
|
||||||
type ReflectionCandidateState string
|
type ReflectionCandidateState string
|
||||||
|
type PropositionKind string
|
||||||
|
type BeliefAssessmentState string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
VerificationUnverified VerificationState = "UNVERIFIED"
|
VerificationUnverified VerificationState = "UNVERIFIED"
|
||||||
@@ -73,6 +75,12 @@ const (
|
|||||||
ReflectionCandidateEvaluating ReflectionCandidateState = "EVALUATING"
|
ReflectionCandidateEvaluating ReflectionCandidateState = "EVALUATING"
|
||||||
ReflectionCandidateSuperseded ReflectionCandidateState = "SUPERSEDED"
|
ReflectionCandidateSuperseded ReflectionCandidateState = "SUPERSEDED"
|
||||||
ReflectionCandidateResolved ReflectionCandidateState = "RESOLVED"
|
ReflectionCandidateResolved ReflectionCandidateState = "RESOLVED"
|
||||||
|
PropositionWorldFacet PropositionKind = "WORLD_FACET"
|
||||||
|
PropositionWorldRelation PropositionKind = "WORLD_RELATION"
|
||||||
|
PropositionOwnerDefined PropositionKind = "OWNER_DEFINED"
|
||||||
|
PropositionTextual PropositionKind = "TEXTUAL"
|
||||||
|
BeliefAssessmentCurrent BeliefAssessmentState = "CURRENT"
|
||||||
|
BeliefAssessmentSuperseded BeliefAssessmentState = "SUPERSEDED"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SystemExpectation records what Domovoy expected a meaningful help path to
|
// SystemExpectation records what Domovoy expected a meaningful help path to
|
||||||
@@ -134,3 +142,24 @@ type ReflectionCandidate struct {
|
|||||||
ClaimedBy string
|
ClaimedBy string
|
||||||
ClaimExpiresAtUnixMillis int64
|
ClaimExpiresAtUnixMillis int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Proposition struct {
|
||||||
|
ID ids.ID
|
||||||
|
Kind PropositionKind
|
||||||
|
SubjectRef string
|
||||||
|
PredicateRef string
|
||||||
|
ObjectValue string
|
||||||
|
ObjectRef string
|
||||||
|
Qualifiers []string
|
||||||
|
TextFallback string
|
||||||
|
}
|
||||||
|
|
||||||
|
type BeliefAssessment struct {
|
||||||
|
ID ids.ID
|
||||||
|
ClaimID ClaimID
|
||||||
|
Revision ids.Revision
|
||||||
|
State BeliefAssessmentState
|
||||||
|
ConfidenceMillis int64
|
||||||
|
EvidenceRefs []EvidenceRef
|
||||||
|
AssessedAtUnixMillis int64
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"task_file":"dev/tasks/GEN2-005-world-identity-resolution-and-version-environment-bindings.json","task_id":"GEN2-005","task_revision":1}
|
{"task_file":"dev/tasks/GEN2-006-normalize-epistemics-evidence-propositions-claims-and-belief-assessments.json","task_id":"GEN2-006","task_revision":1}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package domain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
||||||
|
"git.cin.su/m/Assistant/platform/ids"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ErrInvalidKnowledge = errors.New("invalid epistemic knowledge record")
|
||||||
|
|
||||||
|
func ValidateProposition(value epistemics.Proposition) error {
|
||||||
|
if value.ID == "" || value.Kind == "" || strings.TrimSpace(value.SubjectRef) == "" || (value.ObjectValue == "" && value.ObjectRef == "" && value.TextFallback == "") {
|
||||||
|
return ErrInvalidKnowledge
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ValidateBeliefAssessment(value epistemics.BeliefAssessment) error {
|
||||||
|
if value.ID == "" || value.ClaimID == "" || !value.Revision.Valid() || value.State == "" || value.ConfidenceMillis < 0 || value.ConfidenceMillis > 1000 || value.AssessedAtUnixMillis < 1 {
|
||||||
|
return ErrInvalidKnowledge
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBeliefAssessment(claim epistemics.ClaimID, confidence int64, state epistemics.BeliefAssessmentState, evidence []epistemics.EvidenceRef, at int64) (epistemics.BeliefAssessment, error) {
|
||||||
|
id, err := ids.New()
|
||||||
|
if err != nil {
|
||||||
|
return epistemics.BeliefAssessment{}, err
|
||||||
|
}
|
||||||
|
value := epistemics.BeliefAssessment{ID: id, ClaimID: claim, Revision: ids.InitialRevision, State: state, ConfidenceMillis: confidence, EvidenceRefs: append([]epistemics.EvidenceRef(nil), evidence...), AssessedAtUnixMillis: at}
|
||||||
|
if err := ValidateBeliefAssessment(value); err != nil {
|
||||||
|
return epistemics.BeliefAssessment{}, err
|
||||||
|
}
|
||||||
|
return value, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package domain_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
||||||
|
"git.cin.su/m/Assistant/modules/epistemics/domain"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestKnowledgeV2SeparatesPropositionAndReassessableBelief(t *testing.T) {
|
||||||
|
p := epistemics.Proposition{ID: "p", Kind: epistemics.PropositionWorldFacet, SubjectRef: "world:database:a", ObjectValue: "1.6.28"}
|
||||||
|
if err := domain.ValidateProposition(p); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
a, err := domain.NewBeliefAssessment("claim:a", 800, epistemics.BeliefAssessmentCurrent, []epistemics.EvidenceRef{"observation:a"}, 1)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
a.Revision++
|
||||||
|
if err := domain.ValidateBeliefAssessment(a); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user