import json
import sys
from paip import eliza

rules = {
    "?*x hello ?*y": [
        "Hello, my name is SUPPORT.  How can I help you today?",
    "?*x manager ?*y": [
        "Our manager is not available right now.  How can I help you?"
    "?*x problem with ?*y": [
        "Have you tried turning it off and back on?",
        "When did you first observe ?y to be a problem?",
        "How long has ?y been a problem?",
        "That is not covered by the warranty.",
    "?*x trouble with ?*y": [
        ("I'm sorry, ?y is handled by another department.\n" +
         "Please wait while I transfer your call."),
        "What seems to be the problem?",
    "?*x how to ?*y": [
        "Please consult the manual for more details.",
        "I'm sorry, I do not have that information.",
        "Can you be more specific?",
        "?y will void your warranty."
    "?*x why ?*y": [
        "I'm sorry, I can't discuss that.",
    "?*x ago ?*y": [
        "I'm sorry, your warranty ended a week earlier.",

default_responses = [
    "I do not understand.",
    "Please elaborate.",
    "Please hold."
def main():

We need the rules in a list containing elements of the following form: (input pattern, [output pattern 1, output pattern 2, ...]

    rules_list = []
    for pattern, transforms in rules.items():

Remove the punctuation from the pattern to simplify matching.

        pattern = eliza.remove_punct(str(pattern.upper())) # kill unicode
        transforms = [str(t).upper() for t in transforms]
        rules_list.append((pattern, transforms))
    eliza.interact('SUPPORT> ', rules_list, map(str.upper, default_responses))

if __name__ == '__main__':