Janady07 commited on
Commit
5989fc8
·
verified ·
1 Parent(s): 31be34a

Python brain - no CGO needed

Browse files
Files changed (3) hide show
  1. Dockerfile +7 -15
  2. README.md +1 -1
  3. brain.py +62 -0
Dockerfile CHANGED
@@ -1,18 +1,10 @@
1
  FROM python:3.11-slim
2
-
3
- RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl && rm -rf /var/lib/apt/lists/*
4
-
5
- RUN useradd -m -u 1000 megamind
6
  WORKDIR /app
7
- RUN mkdir -p /app/data && chown -R megamind:megamind /app
8
-
9
- COPY brain /app/brain
10
- COPY start.sh /app/start.sh
11
- RUN chmod +x /app/brain /app/start.sh
12
-
13
- USER megamind
14
  EXPOSE 7860
15
-
16
- HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 CMD curl -sf http://localhost:7860/health || exit 1
17
-
18
- CMD ["/app/start.sh"]
 
1
  FROM python:3.11-slim
2
+ RUN useradd -m -u 1000 user
 
 
 
3
  WORKDIR /app
4
+ RUN mkdir -p /app/data && chown -R user:user /app
5
+ COPY brain.py /app/brain.py
6
+ RUN chmod +x /app/brain.py
7
+ USER user
 
 
 
8
  EXPOSE 7860
9
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=10s CMD curl -sf http://localhost:7860/health || exit 1
10
+ CMD ["python3", "/app/brain.py"]
 
 
README.md CHANGED
@@ -8,4 +8,4 @@ pinned: false
8
  ---
9
 
10
  # MEGAMIND VECTOR
11
- Specialty: mathematics
 
8
  ---
9
 
10
  # MEGAMIND VECTOR
11
+ MEGAMIND Federation Node - Learning AI tensors and patterns
brain.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """MEGAMIND Brain - Python Edition for HuggingFace Spaces"""
3
+ import os, json, sqlite3, hashlib, time
4
+ from http.server import HTTPServer, BaseHTTPRequestHandler
5
+ from urllib.parse import urlparse
6
+
7
+ PORT = int(os.environ.get('PORT', 7860))
8
+ DATA_DIR = os.environ.get('DATA_DIR', './data')
9
+ NODE_ID = os.environ.get('SPACE_ID', 'hf-brain')
10
+
11
+ db = None
12
+ stats = {'tensors': 0, 'patterns': 0, 'queries': 0, 'start': time.time()}
13
+
14
+ def init_db():
15
+ global db
16
+ os.makedirs(DATA_DIR, exist_ok=True)
17
+ db = sqlite3.connect(f'{DATA_DIR}/brain.db', check_same_thread=False)
18
+ db.execute('CREATE TABLE IF NOT EXISTS chunks (id INTEGER PRIMARY KEY, hash TEXT UNIQUE, content TEXT, ts REAL)')
19
+ db.execute('CREATE TABLE IF NOT EXISTS tensors (id INTEGER PRIMARY KEY, name TEXT, source TEXT, meta TEXT, ts REAL)')
20
+ db.commit()
21
+ # Count existing
22
+ stats['patterns'] = db.execute('SELECT COUNT(*) FROM chunks').fetchone()[0]
23
+ stats['tensors'] = db.execute('SELECT COUNT(*) FROM tensors').fetchone()[0]
24
+
25
+ class Handler(BaseHTTPRequestHandler):
26
+ def log_message(self, *a): pass
27
+ def do_GET(self):
28
+ p = urlparse(self.path).path
29
+ if p == '/health': self.json({'status': 'healthy'})
30
+ elif p == '/status': self.json({'node': NODE_ID, 'status': 'online', 'tensors_learned': stats['tensors'],
31
+ 'patterns_learned': stats['patterns'], 'queries': stats['queries'], 'uptime': f"{time.time()-stats['start']:.0f}s"})
32
+ elif p == '/': self.json({'name': 'MEGAMIND Brain', 'node': NODE_ID, 'version': '1.0-py'})
33
+ else: self.send_error(404)
34
+ def do_POST(self):
35
+ p = urlparse(self.path).path
36
+ body = self.rfile.read(int(self.headers.get('Content-Length', 0))).decode()
37
+ data = json.loads(body) if body else {}
38
+ if p == '/learn':
39
+ c = data.get('content', '')[:10000]
40
+ h = hashlib.sha256(c.encode()).hexdigest()[:16]
41
+ db.execute('INSERT OR IGNORE INTO chunks (hash, content, ts) VALUES (?, ?, ?)', (h, c, time.time()))
42
+ db.commit(); stats['patterns'] += 1
43
+ self.json({'status': 'learned', 'hash': h})
44
+ elif p == '/learn-tensor':
45
+ db.execute('INSERT INTO tensors (name, source, meta, ts) VALUES (?, ?, ?, ?)',
46
+ (data.get('name',''), data.get('source',''), json.dumps(data.get('metadata',{})), time.time()))
47
+ db.commit(); stats['tensors'] += 1
48
+ self.json({'status': 'learned'})
49
+ elif p == '/query':
50
+ stats['queries'] += 1
51
+ r = [row[0][:500] for row in db.execute('SELECT content FROM chunks WHERE content LIKE ? LIMIT 10', (f"%{data.get('query','')}%",))]
52
+ self.json({'results': r, 'count': len(r)})
53
+ else: self.send_error(404)
54
+ def json(self, d):
55
+ self.send_response(200); self.send_header('Content-Type', 'application/json'); self.end_headers()
56
+ self.wfile.write(json.dumps(d).encode())
57
+
58
+ if __name__ == '__main__':
59
+ print(f'MEGAMIND Brain [{NODE_ID}] starting on port {PORT}')
60
+ init_db()
61
+ print(f'Loaded: {stats["tensors"]} tensors, {stats["patterns"]} patterns')
62
+ HTTPServer(('0.0.0.0', PORT), Handler).serve_forever()