File size: 2,336 Bytes
6cf18af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import os
import psutil
import logging
from pathlib import Path


logging.basicConfig(
    format='%(asctime)s %(levelname)-8s %(message)s',
    level=logging.INFO,
    datefmt='%m/%d %H:%M:%S')
logger = logging.getLogger(__name__)


def log_sys_info():
    cpu_cores = psutil.cpu_count()
    # cpu_freq = '{:.2f}'.format(psutil.cpu_freq().max / 1000) + 'GHz'
    cpu_percent = '{:.2f}'.format(psutil.cpu_percent()) + '%'
    mem = psutil.virtual_memory()
    mem_total = '{:.2f}'.format(mem.total / 1024 / 1024 / 1024) + 'GB'
    mem_used = '{:.2f}'.format(mem.used / 1024 / 1024 / 1024) + 'GB'
    mem_percent = '{:.2f}'.format(mem.percent) + '%'
    disk = psutil.disk_usage('.')
    disk_total = '{:.2f}'.format(disk.total / 1024 / 1024 / 1024) + 'GB'
    disk_used = '{:.2f}'.format(disk.used / 1024 / 1024 / 1024) + 'GB'
    disk_percent = '{:.2f}'.format(disk.percent) + '%'

    logger.info('======== SYSTEM INFO =========')
    logger.info(f'CPU: {cpu_cores} cores, {cpu_percent} used')
    logger.info(f'RAM: {mem_used} / {mem_total}, {mem_percent} used')
    logger.info(f'DISK: {disk_used} / {disk_total}, {disk_percent} used')
    logger.info('==============================')


class CHAT_DB:
    def __init__(self):
        self.prompts = {}
        self.results = {}
        self.index = 1
        self.lockfile = '.lock'

    def set(self, index, prompt=None, result=None):
        assert prompt or result
        if prompt:
            if index in self.prompts:
                raise ValueError('Prompt already exists')
            self.prompts[index] = prompt
            self.index += 1
        if result:
            self.results[index] = result

    def lock(self):
        if not os.path.exists(self.lockfile):
            Path(self.lockfile).touch(exist_ok=True)

    def unlock(self):
        if os.path.exists(self.lockfile):
            os.remove(self.lockfile)

    def islocked(self):
        return os.path.exists(self.lockfile)

    def clean(self):
        if len(self.prompts) > 100:
            self.prompts = dict(list(self.prompts.items())[-100:])
        k = list(set(self.prompts.keys()).intersection(set(self.results.keys())))  # keys to preserve
        self.prompts = {i: self.prompts[i] for i in k}
        self.results = {i: self.results[i] for i in k}
        log_sys_info()


db = CHAT_DB()