57 lines
3.0 KiB
Go
57 lines
3.0 KiB
Go
package postgres
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
type EpistemicsRepository struct{ pool *pgxpool.Pool }
|
|
|
|
func OpenEpistemics(ctx context.Context, config ContinuityConfig) (*EpistemicsRepository, error) {
|
|
dsn := fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", config.Host, config.Port, config.Database, config.User, config.Password)
|
|
pool, err := pgxpool.New(ctx, dsn)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &EpistemicsRepository{pool: pool}, nil
|
|
}
|
|
|
|
func (r *EpistemicsRepository) Close() { r.pool.Close() }
|
|
|
|
func (r *EpistemicsRepository) SaveSystemExpectation(ctx context.Context, value epistemics.SystemExpectation) error {
|
|
_, err := r.pool.Exec(ctx, `INSERT INTO epistemics.system_expectations (
|
|
expectation_id, original_intent_id, source_utterance_id, expected_outcome, expected_effect,
|
|
confidence_millis, evidence_basis, recorded_at_unix_millis)
|
|
VALUES ($1,$2,$3,$4,$5,$6,$7,$8) ON CONFLICT DO NOTHING`,
|
|
value.ID, value.OriginalIntentID, value.SourceUtteranceID, value.ExpectedOutcome, value.ExpectedEffect,
|
|
value.ConfidenceMillis, value.EvidenceBasis, value.RecordedAtUnixMillis)
|
|
return err
|
|
}
|
|
|
|
func (r *EpistemicsRepository) SaveExperienceRecord(ctx context.Context, value epistemics.ExperienceRecord) error {
|
|
_, err := r.pool.Exec(ctx, `INSERT INTO epistemics.experience_records (
|
|
experience_id, source_kind, original_intent_id, source_utterance_id, context_refs, help_method, help_method_ref,
|
|
capability_implementation_ref, capability_usage_observation_ref, capability_gap_ref, skill_ref, expectation_id,
|
|
expected_outcome, actual_outcome, outcome_ref, outcome_detail, human_response_ref, correction_utterance_id,
|
|
verification_evidence, confidence_millis, recorded_at_unix_millis)
|
|
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21) ON CONFLICT DO NOTHING`,
|
|
value.ID, value.SourceKind, value.OriginalIntentID, value.SourceUtteranceID, value.ContextRefs, value.HelpMethod, value.HelpMethodRef,
|
|
value.CapabilityImplementationRef, value.CapabilityUsageObservationRef, value.CapabilityGapRef, value.SkillRef, value.ExpectationID,
|
|
value.ExpectedOutcome, value.ActualOutcome, value.OutcomeRef, value.OutcomeDetail, value.HumanResponseRef, value.CorrectionUtteranceID,
|
|
value.VerificationEvidence, value.ConfidenceMillis, value.RecordedAtUnixMillis)
|
|
return err
|
|
}
|
|
|
|
func (r *EpistemicsRepository) SaveReflectionCandidate(ctx context.Context, value epistemics.ReflectionCandidate) error {
|
|
_, err := r.pool.Exec(ctx, `INSERT INTO epistemics.reflection_candidates (
|
|
reflection_candidate_id, trigger, state, source_experience_id, original_intent_id, source_utterance_id,
|
|
summary, evidence_refs, requires_cognition, recorded_at_unix_millis, revision)
|
|
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11) ON CONFLICT DO NOTHING`,
|
|
value.ID, value.Trigger, value.State, value.SourceExperienceID, value.OriginalIntentID, value.SourceUtteranceID,
|
|
value.Summary, value.EvidenceRefs, value.RequiresCognition, value.RecordedAtUnixMillis, value.Revision)
|
|
return err
|
|
}
|