diff --git a/.gitignore b/.gitignore index 37226fc..1f25dbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ .*.sw? -DS_Store +.DS_Store run compile_commands.json *.txt build/ cythoned/ __pycache__/ -data* +data/ diff --git a/bridge.pyx b/bridge.pyx index 9a55ffb..e4dbc75 100644 --- a/bridge.pyx +++ b/bridge.pyx @@ -7,6 +7,7 @@ from libc.stdlib cimport malloc, realloc from libc.string cimport memcpy import library as nn +import flask tokenizers = {} @@ -44,6 +45,10 @@ cdef public char *greeting(): return f'The value is {3**3**3}'.encode('utf-8') +cdef public void serve(): + nn.app.run(port=8448) + + cdef public int get_tokens(WordList* wl, const char *filename): fnu = filename.decode('utf-8') if fnu not in tokenizers: diff --git a/library.py b/library.py index 20e3ea8..c49eaad 100644 --- a/library.py +++ b/library.py @@ -2,15 +2,18 @@ import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' import numpy as np +import flask import tensorflow as tf tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) # STFU! +from nltk.tokenize import word_tokenize as wt from mynet import onehot HERE = os.path.abspath(os.path.dirname(__file__)) -CORPUS = os.path.join(HERE, 'melville-moby_dick.txt') -VOCAB = os.path.join(HERE, 'vocab.txt') +DATA = os.path.join(HERE, 'data') +CORPUS = os.path.join(DATA, 'corpus.txt') +VOCAB = os.path.join(DATA, 'vocab.txt') vocab = { w: i for i, w in enumerate(open(VOCAB).read().splitlines(keepends=False)) @@ -18,6 +21,14 @@ vocab = { inv_vocab = sorted(vocab, key=vocab.get) +app = flask.Flask(__name__) + + +@app.route('/') +def webfront(): + return 'Hello world!' + + def word_tokenize(s: str): l = ''.join(c.lower() if c.isalpha() else ' ' for c in s) return l.split() diff --git a/main.c b/main.c index 977bed8..b85a76f 100644 --- a/main.c +++ b/main.c @@ -40,6 +40,7 @@ typedef enum{ FILTERER, BATCHER, LEARNER, + VISUALIZER, DISPATCHER } Role; @@ -72,7 +73,10 @@ size_t number_of(Role what) { - number_of(TOKENIZER) - number_of(FILTERER) - number_of(BATCHER) - - number_of(DISPATCHER); + - number_of(DISPATCHER) + - number_of(VISUALIZER); + case VISUALIZER: + return 1; case DISPATCHER: return 1; } @@ -320,7 +324,7 @@ void dispatcher() { } combo_weights(&wl, wls, lpr); set_net_weights(frank, &wl); - // INFO_PRINTF("Frank: %f\n", eval_net(frank)); + INFO_PRINTF("Frank: %f\n", eval_net(frank)); } Py_DECREF(frank); free_weightlist(&wl); @@ -329,6 +333,12 @@ void dispatcher() { free(round); } +void visualizer() { + INFO_PRINTF("Starting visualizer %d\n", getpid()); + serve(); +} + + int main (int argc, const char **argv) { MPI_Init(NULL, NULL); @@ -358,6 +368,9 @@ int main (int argc, const char **argv) { case DISPATCHER: dispatcher(); break; + case VISUALIZER: + visualizer(); + break; default: INFO_PRINTLN("DYING HORRIBLY!"); }