Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e634bb946a |
@@ -122,6 +122,15 @@ type ExperienceRecord struct {
|
|||||||
VerificationEvidence []EvidenceRef
|
VerificationEvidence []EvidenceRef
|
||||||
ConfidenceMillis int64
|
ConfidenceMillis int64
|
||||||
RecordedAtUnixMillis int64
|
RecordedAtUnixMillis int64
|
||||||
|
ProblemStatement string
|
||||||
|
AttemptRef string
|
||||||
|
WhyAttempted string
|
||||||
|
ApplicabilityConditions []string
|
||||||
|
ContextScopeRef string
|
||||||
|
EpisodeRef string
|
||||||
|
GoalRef string
|
||||||
|
TaskRef string
|
||||||
|
WhySucceededOrFailed string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReflectionCandidate records that broader reflection may be warranted.
|
// ReflectionCandidate records that broader reflection may be warranted.
|
||||||
@@ -163,3 +172,13 @@ type BeliefAssessment struct {
|
|||||||
EvidenceRefs []EvidenceRef
|
EvidenceRefs []EvidenceRef
|
||||||
AssessedAtUnixMillis int64
|
AssessedAtUnixMillis int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EpisodeID ids.ID
|
||||||
|
type Episode struct {
|
||||||
|
ID EpisodeID
|
||||||
|
PrincipalID string
|
||||||
|
ExperienceRefs []ExperienceRecordID
|
||||||
|
Summary string
|
||||||
|
Outcome OutcomeClass
|
||||||
|
RecordedAtUnixMillis int64
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"task_file":"dev/tasks/GEN2-007-general-freshness-volatility-temporal-applicability-and-revalidation.json","task_id":"GEN2-007","task_revision":1}
|
{"task_file":"dev/tasks/GEN2-008-promote-episode-and-experience-v2-including-negative-experience.json","task_id":"GEN2-008","task_revision":1}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package domain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
||||||
|
"git.cin.su/m/Assistant/platform/ids"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func BuildEpisode(experiences []epistemics.ExperienceRecord, summary string, at int64) (epistemics.Episode, error) {
|
||||||
|
if len(experiences) == 0 || strings.TrimSpace(summary) == "" || at < 1 {
|
||||||
|
return epistemics.Episode{}, ErrInvalidExperience
|
||||||
|
}
|
||||||
|
refs := make([]epistemics.ExperienceRecordID, 0, len(experiences))
|
||||||
|
outcome := epistemics.OutcomeUnknown
|
||||||
|
for _, e := range experiences {
|
||||||
|
if _, err := NewExperienceRecord(e); err != nil {
|
||||||
|
return epistemics.Episode{}, err
|
||||||
|
}
|
||||||
|
refs = append(refs, e.ID)
|
||||||
|
if e.ActualOutcome != epistemics.OutcomeSuccess {
|
||||||
|
outcome = e.ActualOutcome
|
||||||
|
}
|
||||||
|
}
|
||||||
|
id, err := ids.New()
|
||||||
|
if err != nil {
|
||||||
|
return epistemics.Episode{}, err
|
||||||
|
}
|
||||||
|
return epistemics.Episode{ID: epistemics.EpisodeID(id), ExperienceRefs: refs, Summary: summary, Outcome: outcome, RecordedAtUnixMillis: at}, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package domain_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
||||||
|
"git.cin.su/m/Assistant/modules/epistemics/domain"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestEpisodeIsRebuildableFromExperience(t *testing.T) {
|
||||||
|
e := epistemics.ExperienceRecord{ID: "e", SourceKind: epistemics.ExperienceSourceInteraction, OriginalIntentID: "i", SourceUtteranceID: "u", HelpMethod: epistemics.HelpMethodFallback, ExpectedOutcome: epistemics.OutcomeSuccess, ActualOutcome: epistemics.OutcomeFailed, RecordedAtUnixMillis: 1}
|
||||||
|
ep, err := domain.BuildEpisode([]epistemics.ExperienceRecord{e}, "failed attempt", 1)
|
||||||
|
if err != nil || len(ep.ExperienceRefs) != 1 || ep.Outcome != epistemics.OutcomeFailed {
|
||||||
|
t.Fatalf("episode=%#v err=%v", ep, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user