omega/app/utils.py

69 lines
1.8 KiB
Python

import sys
import logging
from app.core.config import settings
from app.constants import CONTEXT_SIZE, UNKNOWN_IDX, ALPHABET
char_to_index = {char: idx for idx, char in enumerate(ALPHABET)}
def setup_logger():
logger = logging.getLogger()
verbosity = settings.VERBOSITY
level_map = {
"DEBUG": logging.DEBUG,
"INFO": logging.INFO,
"WARNING": logging.WARNING,
"ERROR": logging.ERROR,
"CRITICAL": logging.CRITICAL,
}
log_level = level_map.get(verbosity)
logger.setLevel(log_level)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(log_level)
formatter = logging.Formatter("[%(levelname)s] - %(name)s:%(lineno)d - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
if sys.platform == "win32":
import win32con
import win32gui
import win32api
import win32process
def make_window_non_activating(win):
hwnd = int(win.winId())
ex_style = win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE)
# Add styles
ex_style |= win32con.WS_EX_NOACTIVATE
ex_style |= win32con.WS_EX_TOPMOST
ex_style |= win32con.WS_EX_TOOLWINDOW # optional: hide from Alt+Tab
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE, ex_style)
# Force update
win32gui.SetWindowPos(
hwnd, win32con.HWND_TOPMOST,
0, 0, 0, 0,
win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_NOACTIVATE
)
def tokenize(text: str) -> list[int]:
"""Convert last CONTEXT_SIZE chars to integer indices."""
text = text.lower()[-CONTEXT_SIZE:] # trim to context length
padded = [' '] * (CONTEXT_SIZE - len(text)) + list(text)
return [
char_to_index.get(c, UNKNOWN_IDX)
for c in padded
]