Weasel Architecture

1

Alexander Isenko

13.02.2018

In-House presentation @ iteratec

Architecture #1

2

13.02.2018

Alexander Isenko

Architecture

3

13.02.2018

  • Only one input for MVP
  • Every input has a custom processing block
  • it parses the input into a Domain-specific Language
  • created based on what the Sources accept
    • e.g 'Software Concept' for iteraSkill

Alexander Isenko

DSL

4

13.02.2018

\mathcal{S} = \{ sources \} \text{ e.g (iteraSkill, iteraChat)}
S={sources} e.g (iteraSkill, iteraChat)\mathcal{S} = \{ sources \} \text{ e.g (iteraSkill, iteraChat)}
\mathcal{R} = \{ rule_s | rule_s \in s, s \in \mathcal{S} \} \text{ e.g all rules}
R={rulesruless,sS} e.g all rules\mathcal{R} = \{ rule_s | rule_s \in s, s \in \mathcal{S} \} \text{ e.g all rules}
data Query = QIS IteraSkillQuery Query
           | QW  WikiQuery Query
           | None
    
data IteraSkillQuery = WhoKnows  String
                     | GetPerson String

whoKnowsRule :: [String] -> IteraSkillQuery
whoKnowsRule ("Who" : "knows" : lang : _) = WhoKnows lang

whoIsRule :: [String] -> IteraSkillQuery
whoIsRule ("Who" : "is" : person : _) = GetPerson person
Q = \{ q\;|\;q \leftarrow \text{rule}(w)\land \text{Accept}(\text{rule}(w)), \forall \text{rule} \in \mathcal{R}, w = \text{input} \}
Q={qqrule(w)Accept(rule(w)),ruleR,w=input}Q = \{ q\;|\;q \leftarrow \text{rule}(w)\land \text{Accept}(\text{rule}(w)), \forall \text{rule} \in \mathcal{R}, w = \text{input} \}

Alexander Isenko

DSL

5

13.02.2018

data Query = QIS IteraSkillQuery Query
           | QW  WikiQuery Query
           | None

parseQuery :: Query -> IO ()
parseQuery (OIS query rest) =
    sendIteraSkillAPIRequest query >> parseQuery rest
parseQuery (OW  query rest) =
    sendWikiAPIRequest       query >> parseQuery rest
parseQuery None             = return ()
data Query = QIS IteraSkillQuery Query
           | QW  WikiQuery Query
           | QComplex IteraSkillQuery WikiQuery Query
           | None

parseQuery :: Query -> IO ()
parseQuery (OIS query rest) =
    sendIteraSkillAPIRequest query >> parseQuery rest
parseQuery (OW  query rest) =
    sendWikiAPIRequest       query >> parseQuery rest
parseQuery (QComplex isq wq) =
    sendIteraSkillAPIRequest isq
>>  sendWikiAPIRequest wq >> parseQuery rest
parseQuery None             = return ()

Alexander Isenko

API Access

6

13.02.2018

  • every source has a custom query format

 

  • after the formatting, we can send the API request

 

  • they are totally separate and don't depend on each other

Alexander Isenko

Content Processing

7

13.02.2018

  • every source has a visualisation concept

 

  • it's going to be sorted visualized based on our rules

 

  • this creates our final view which will be shown to the user

 

 

Alexander Isenko

Content Processing

7

13.02.2018

  • every source has a visualisation concept

 

  • it's going to be sorted visualized based on our rules

 

  • this creates our final view which will be shown to the user

 

 

Alexander Isenko

Full Architecture

8

13.02.2018

Alexander Isenko