---
title: Vetting Preferences Entity Relationships
---
erDiagram
Property 1--0+ PropertyTenant : prefers
PropertyTenant {
integer id PK
uuid property_id FK
integer tenant_id FK
json info
}
PropertyTenant 0+--1 TenantType : "is prefered"
TenantType {
integer id PK
string type_id FK
string name
string defaultLabel
json config
}
TenantType 1+--1 PreferenceType : "belongs to"
PreferenceType {
string id PK
string label
CURI answered_by FK
json config
}
PreferenceType 1--1 "SeekerProfile->Property" : "is answered by"
The dialogue manager manages the inputs between the users and a form/task.
The following simple flow can express its operation:
---
title: Dialogue Manager
---
flowchart TD
S([Start])
S-->T{Any Incomplete Tasks?}
T-->|yes|NT[Choose incomplete Task]
T-->|no|D([Done])
NT-->P{Pre-condition Met?}
DB-->|reads|P
P-->|yes|A[Mark Active]
A-->RT{Remaining incomplete tasks?}
P-->|no|I[Mark Inactive]
I-->RT
RT-->|yes|NT
RT-->|no|AT{Any Active Tasks?}
AT-->|yes|CA[Choose An Active Task]
AT-->|NO|D
CA-->DO[Mark others incomplete]
DO-->ET[[Execute Task]]
ET-->|writes|DB
ET-->MC[Mark Task Complete]
MC-->T
DB[(State)]
There are two kinds of tasks in a dialogue: inform (or tell) and request (or ask).
The inform task is used to provide information to the user. This can be instructions, notices or warnings.
The request task is used to ask the user for information. And is usually paired with a form component. Upon completion, the user's response updates the dialogue state.
In some cases, the dialogue may need to account for some edge cases, save progress, or terminate early. Special tasks handle these. The usual set is:
- Terminate the dialogue with an optional message.
- Update the dialogue state.
- Query some external data.
- Mutate some external data.
The pre-condition is a set of conditions that must be met before the task can be executed. The easiest way to think of it is like a query run over the dialogue state. When the query has at least one match, the pre-condition is met.
A set of patterns represents queries; these patterns can be in the form of a triple (e.g. subject, predicate, object) or the shape of the data you expect (e.g. a JSON object). You can use these patterns to perform the same queries you could with SQL. This is possible due to the existence of logic variables and unification.
A logic variable is a string starting with a ?
and a name, e.g. ?id
, ?type
, etc. When a logic variable is encountered, the possible values for that variable are updated. From then on, whenever that variable appears, it must be one, some, or none of those values.