{"id":495645,"date":"2026-09-22T18:27:58","date_gmt":"2026-09-22T18:27:58","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=495645"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=495645","title":{"rendered":"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u044d\u043d\u0446\u0438\u043a\u043b\u043e\u043f\u0435\u0434\u0438\u0438 \u0444\u0430\u0437\u043e\u0432\u044b\u0445 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u0438\u0439"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/articles\/1080402\/\" rel=\"noopener nofollow\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0444\u043e\u0440\u043c\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438 \u0432 \u0432\u0438\u0434\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0434\u0435\u0435\u0439 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u043b \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0444\u043e\u0440\u043c\u0430\u0442: \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u043e\u0439 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0437 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440, \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0435\u0449\u0435 \u0438 \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<p>\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u2013 \u0432 \u0431\u0430\u0437\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u0435\u0435 4000 \u0434\u0432\u0443\u0445\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0432 \u043c\u043e\u0438\u0445 \u0441\u0438\u043b\u0430\u0445. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0432\u043e\u0439 \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0435\u0439 \u043d\u0430 \u0443\u043c, \u0431\u044b\u043b\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439:<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0 \u0411\u044b\u043b \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438;<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0 \u041d\u0435 \u0437\u0430\u043d\u044f\u043b \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438;<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u044b\u043b\u043e \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u044b\u043c.<\/p>\n<p>\u042f \u0432\u044b\u0431\u0440\u0430\u043b LM Studio \u0438 \u043d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043c\u043e\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u0435 (RTX 3090) \u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0422\u0430\u043a\u043e\u0432\u043e\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c gemma-4-31b.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b\u0430 \u0438\u0437 \u0431\u0430\u0437\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0441 \u043f\u0440\u043e\u0441\u044c\u0431\u043e\u0439 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0441\u044f \u0432 \u043d\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>import jsonimport sqlite3import refrom openai import OpenAIfrom Phase_calculator import *def extract_source(text):    match = re.search(        r'&lt;div\\s+class=\"formula\"&gt;(.*?)&lt;\/div[^&gt;]*&gt;',        text    )    if not match:        return None    formula = match.group(1).strip()    parts = formula.split()    if parts:        parts.pop()    return ' '.join(parts)def extract_temperatures_products(text):    # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 div    temp_blocks = re.findall(        r'&lt;div\\s+class=\"temper\"&gt;(.*?)&lt;\/div&gt;',        text,        flags=re.DOTALL    )    formula_blocks = re.findall(        r'&lt;div\\s+class=\"formula\"&gt;(.*?)&lt;\/div&gt;',        text,        flags=re.DOTALL    )    temperatures = []    products = []    # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b    for temp in temp_blocks:        temp = temp.strip()        # \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0431\u0443\u043a\u0432\u0443 K        temp = re.sub(r'(\\d+(?:\\.\\d+)?)\\s*K', r'\\1', temp, count=1)        # \u0443\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432\u043e\u043a\u0440\u0443\u0433 &amp;ndash;        temp = re.sub(r'\\s*&amp;ndash;\\s*', '&amp;ndash;', temp)        # \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 :        temp = temp.rstrip(':')        temperatures.append(temp)    # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b    for formula in formula_blocks:        formula = formula.strip()        # \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e &amp;rarr;        formula = re.sub(r'^&amp;rarr;\\s*', '', formula)        def round_number(match):            value = float(match.group(0))            nearest = round(value)            if abs(value - nearest) &lt; 0.01:                return str(nearest)            return match.group(0)        formula = re.sub(r'\\d+\\.\\d+|\\d+', round_number, formula)        products.append(formula)    return temperatures, productsdef generate_thermodynamic_comment(        html_text: str,        model_name: str = \"local-model\",        base_url: str = \"http:\/\/192.168.1.163:1234\/v1\",        api_key: str = \"lm-studio\"):    \"\"\"    \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0443\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0451\u0442\u0430    \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 HTML (&lt;p&gt;...&lt;\/p&gt;).    http:\/\/localhost:1234\/v1    API_URL = \"http:\/\/localhost:1234\/v1\/chat\/completions\"    API_URL = \"http:\/\/192.168.1.163:1234\/v1\/chat\/completions\"    \"\"\"    client = OpenAI(        base_url=base_url,        api_key=api_key    )    prompt = f\"\"\"\u0422\u044b \u044f\u0432\u043b\u044f\u0435\u0448\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u043c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0445\u0438\u043c\u0438\u0438,\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438\u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.\u0422\u0432\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0443\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c.\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044e:1. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435.2. \u041e\u0431\u044a\u0451\u043c \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 150\u2013300 \u0441\u043b\u043e\u0432.3. \u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u0443\u0447\u043d\u044b\u043c, \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443,   \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0438\u043b\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0443.4. \u041d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e.5. \u041d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0439 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435.6. \u041e\u0431\u044a\u044f\u0441\u043d\u044f\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b.7. \u0414\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435:   - \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0440\u043e\u0434\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432;   - \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439;   - \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b;   - \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0433\u0430\u0437\u043e\u0432\u043e\u0439 \u0444\u0430\u0437\u044b;   - \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432.8. \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0444\u0440\u0430\u0437\u044b \u0432\u0438\u0434\u0430:   \"\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f\", \"\u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\", \"\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435\".9. \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0441\u043f\u0438\u0441\u043a\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438.10. \u0412\u0435\u0440\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.11. \u0421\u0442\u0430\u0440\u0430\u0439\u0441\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0437 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442.12. \u0414\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.13. \u0415\u0441\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043a\u0438\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043e\u0431\u044a\u044f\u0441\u043d\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u044d\u0442\u043e\u0433\u043e.14. \u0415\u0441\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439 \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0440\u043e\u043b\u044c.HTML \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b:{html_text}\"\"\"    response = client.chat.completions.create(        model=model_name,        temperature=0.7,        messages=[            {                \"role\": \"system\",                \"content\": (                    \"\u0422\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u043e \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435, \"                    \"\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0445\u0438\u043c\u0438\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e.\"                )            },            {                \"role\": \"user\",                \"content\": prompt            }        ]    )    text = response.choices[0].message.content.strip()    # \u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u0432    paragraphs = re.split(r'\\n\\s*\\n', text)    paragraphs = [p.strip() for p in paragraphs if p.strip()]    # \u0415\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442    if len(paragraphs) == 1:        paragraphs = re.split(r'(?&lt;=\\.)\\s+(?=[\u0410-\u042fA-Z])', paragraphs[0])    html_result = \"\\n\".join(        f\"&lt;p&gt;{p}&lt;\/p&gt;\"        for p in paragraphs        if p.strip()    )    return html_resultdef create_neyro_db():    \"\"\"    \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0431\u0430\u0437\u0443 neyro.db \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 results.    \"\"\"    con = sqlite3.connect(\"neyro.db\")    cur = con.cursor()    cur.execute(\"\"\"        CREATE TABLE IF NOT EXISTS results (            id_elements INTEGER PRIMARY KEY,            html TEXT NOT NULL        )    \"\"\")    con.commit()    cur.close()    con.close()def save_html(element1, element2, html_text):    \"\"\"    \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 HTML-\u0442\u0435\u043a\u0441\u0442.    \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b    \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0411\u0414.    \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0435.    \"\"\"    # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432    if not isinstance(element1, int) or not isinstance(element2, int):        raise TypeError(\"\u041d\u043e\u043c\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438\")    # \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u0442\u043e\u0447\u043d\u043e \u043a\u0430\u043a \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435    elements = [element1, element2]    elements.sort()    key = 0    for i in range(len(elements)):        key += elements[-(i + 1)] &lt;&lt; (i * 8)    con = sqlite3.connect(\"neyro.db\")    cur = con.cursor()    # INSERT \u0438\u043b\u0438 UPDATE \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438    cur.execute(\"\"\"        INSERT OR REPLACE INTO results        (id_elements, html)        VALUES (?, ?)    \"\"\", (key, html_text))    con.commit()    cur.close()    con.close()    return key\"\"\" \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \"\"\"if __name__ == \"__main__\":    culc = Phase_calculator()    nomb = 0    kolvo = len(culc.elements)    for n1 in range(kolvo - 1):        for n2 in range(n1 + 1, kolvo + 1):            nomb += 1            r = culc.return_result([n1, n2], culc.is_gases)            lines = r.splitlines()            first_line = lines[0] if lines else \"\"            other_lines = \"\\n\".join(lines[1:])            first_line = extract_source(first_line)            temperatures, products = extract_temperatures_products(other_lines)            t_1 = (                f\"&lt;p&gt;\u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f 10 \u043c\u043e\u043b\u044c \"                f\"\u0430\u0442\u043e\u043c\u043e\u0432 {culc.elements[n1+1]} \u0438 10 \u043c\u043e\u043b\u044c \u0430\u0442\u043e\u043c\u043e\u0432 {culc.elements[n2+1]} \u0432 \u0433\u0430\u0437\u043e\u0432\u043e\u0439 \u0444\u0430\u0437\u0435, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0439: &lt;\/p&gt;\"                f\"&lt;ul&gt;&lt;li&gt;\u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0441\u043e\u0441\u0442\u0430\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440 \u043f\u0440\u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0438 1 \u0430\u0442\u043c.&lt;\/li&gt;\"                f\"&lt;li&gt;\u041a\u0430\u0436\u0434\u043e\u0435 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0430\u0437\u0430.&lt;\/li&gt;\"                f\"&lt;li&gt;\u0424\u0430\u0437\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0433\u0430\u0437\u0430-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0433\u0430\u0437\u043e\u0432\u044b\u0445 \u0440\u0430\u0441\u0442\u0432\u043e\u0440\u043e\u0432 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0430\u0437\u0430\u043c\u0438.&lt;\/li&gt;&lt;\/ul&gt;\"            )            t_2 = \"\"            for i in range(len(temperatures)):                t_2 = (                    f\"&lt;div class=\\\"reaction\\\"&gt;&lt;span&gt;{first_line}&lt;\/span&gt;\"                    f\"&lt;span class=\\\"arrow\\\"&gt;&lt;span class=\\\"condition\\\"&gt;{temperatures[i]}&lt;\/span&gt;&lt;\/span&gt;\"                    f\"&lt;span&gt;{products[i]}&lt;\/span&gt;&lt;\/div&gt;\"                )                t_1 += t_2            t_1 += f\"&lt;p&gt;\u0420\u0430\u0441\u0447\u0451\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &lt;a href=\\\"https:\/\/slobodovreactor.ru\/culculator\/\\\"&gt;\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u043d\u043e\u0433\u043e \u0444\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0430&lt;\/a&gt;.&lt;\/p&gt;\"            print(nomb)            print(t_1)            print()            comment = generate_thermodynamic_comment(t_1)            print(comment)            print(\"-----------------------------------------------------------\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043e\u043a\u043e\u043b\u043e \u043d\u0435\u0434\u0435\u043b\u0438. \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438\u0437-\u0437\u0430 \u0432\u044b\u043b\u0435\u0442\u0430 \u0432\u0438\u0434\u044f\u0445\u0438. \u041d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u0431\u0430\u0437\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430, \u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 \u0435\u0435 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0430 \u0432 \u0431\u044d\u043a\u0435\u043d\u0434. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c <a href=\"https:\/\/slobodovreactor.ru\/reactions\/\" rel=\"noopener nofollow\">\u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1085358\/\">https:\/\/habr.com\/ru\/articles\/1085358\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0444\u043e\u0440\u043c\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438 \u0432 \u0432\u0438\u0434\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0434\u0435\u0435\u0439 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u043b \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0444\u043e\u0440\u043c\u0430\u0442: \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u043e\u0439 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.\u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0437 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440, \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0435\u0449\u0435 \u0438 \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443.\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u2013 \u0432 \u0431\u0430\u0437\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u0435\u0435 4000 \u0434\u0432\u0443\u0445\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0432 \u043c\u043e\u0438\u0445 \u0441\u0438\u043b\u0430\u0445. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0432\u043e\u0439 \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438\u0434\u0435\u0435\u0439, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0435\u0439 \u043d\u0430 \u0443\u043c, \u0431\u044b\u043b\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438.\u041d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439:\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0 \u0411\u044b\u043b \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438;\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0 \u041d\u0435 \u0437\u0430\u043d\u044f\u043b \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438;\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u044b\u043b\u043e \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u044b\u043c.\u042f \u0432\u044b\u0431\u0440\u0430\u043b LM Studio \u0438 \u043d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043c\u043e\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u0435 (RTX 3090) \u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0422\u0430\u043a\u043e\u0432\u043e\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c gemma-4-31b.\u0414\u0430\u043b\u0435\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b\u0430 \u0438\u0437 \u0431\u0430\u0437\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0441 \u043f\u0440\u043e\u0441\u044c\u0431\u043e\u0439 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0441\u044f \u0432 \u043d\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:import jsonimport sqlite3import refrom openai import OpenAIfrom Phase_calculator import *def extract_source(text):    match = re.search(        r'&lt;div\\s+class=&#187;formula&#187;&gt;(.*?)&lt;\/div[^&gt;]*&gt;&#8217;,        text    )    if not match:        return None    formula = match.group(1).strip()    parts = formula.split()    if parts:        parts.pop()    return &#8216; &#8216;.join(parts)def extract_temperatures_products(text):    # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 div    temp_blocks = re.findall(        r'&lt;div\\s+class=&#187;temper&#187;&gt;(.*?)&lt;\/div&gt;&#8217;,        text,        flags=re.DOTALL    )    formula_blocks = re.findall(        r'&lt;div\\s+class=&#187;formula&#187;&gt;(.*?)&lt;\/div&gt;&#8217;,        text,        flags=re.DOTALL    )    temperatures = []    products = []    # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b    for temp in temp_blocks:        temp = temp.strip()        # \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0431\u0443\u043a\u0432\u0443 K        temp = re.sub(r'(\\d+(?:\\.\\d+)?)\\s*K&#8217;, r&#8217;\\1&#8242;, temp, count=1)        # \u0443\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432\u043e\u043a\u0440\u0443\u0433 &amp;ndash;        temp = re.sub(r&#8217;\\s*&amp;ndash;\\s*&#8217;, &#8216;&amp;ndash;&#8217;, temp)        # \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 :        temp = temp.rstrip(&#8216;:&#8217;)        temperatures.append(temp)    # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b    for formula in formula_blocks:        formula = formula.strip()        # \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e &amp;rarr;        formula = re.sub(r&#8217;^&amp;rarr;\\s*&#8217;, &#187;, formula)        def round_number(match):            value = float(match.group(0))            nearest = round(value)            if abs(value &#8212; nearest) &lt; 0.01:                return str(nearest)            return match.group(0)        formula = re.sub(r&#8217;\\d+\\.\\d+|\\d+&#8217;, round_number, formula)        products.append(formula)    return temperatures, productsdef generate_thermodynamic_comment(        html_text: str,        model_name: str = &#171;local-model&#187;,        base_url: str = &#171;http:\/\/192.168.1.163:1234\/v1&#187;,        api_key: str = &#171;lm-studio&#187;):    &#171;&#187;&#187;    \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0443\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0451\u0442\u0430    \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 HTML (&lt;p&gt;&#8230;&lt;\/p&gt;).    http:\/\/localhost:1234\/v1    API_URL = &#171;http:\/\/localhost:1234\/v1\/chat\/completions&#187;    API_URL = &#171;http:\/\/192.168.1.163:1234\/v1\/chat\/completions&#187;    &#171;&#187;&#187;    client = OpenAI(        base_url=base_url,        api_key=api_key    )    prompt = f&#187;&#187;&#187;\u0422\u044b \u044f\u0432\u043b\u044f\u0435\u0448\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u043c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0445\u0438\u043c\u0438\u0438,\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438\u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.\u0422\u0432\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0443\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c.\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044e:1. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435.2. \u041e\u0431\u044a\u0451\u043c \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 150\u2013300 \u0441\u043b\u043e\u0432.3. \u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u0443\u0447\u043d\u044b\u043c, \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443,   \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0438\u043b\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0443.4. \u041d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e.5. \u041d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0439 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435.6. \u041e\u0431\u044a\u044f\u0441\u043d\u044f\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b.7. \u0414\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435:   &#8212; \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0440\u043e\u0434\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432;   &#8212; \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439;   &#8212; \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b;   &#8212; \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0433\u0430\u0437\u043e\u0432\u043e\u0439 \u0444\u0430\u0437\u044b;   &#8212; \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432.8. \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0444\u0440\u0430\u0437\u044b \u0432\u0438\u0434\u0430:   &#171;\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f&#187;, &#171;\u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435&#187;, &#171;\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435&#187;.9. \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0441\u043f\u0438\u0441\u043a\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438.10. \u0412\u0435\u0440\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.11. \u0421\u0442\u0430\u0440\u0430\u0439\u0441\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0437 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442.12. \u0414\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.13. \u0415\u0441\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043a\u0438\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043e\u0431\u044a\u044f\u0441\u043d\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u044d\u0442\u043e\u0433\u043e.14. \u0415\u0441\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439 \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0440\u043e\u043b\u044c.HTML \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b:{html_text}&#187;&#187;&#187;    response = client.chat.completions.create(        model=model_name,        temperature=0.7,        messages=[            {                &#171;role&#187;: &#171;system&#187;,                &#171;content&#187;: (                    &#171;\u0422\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u043e \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435, &#187;                    &#171;\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0445\u0438\u043c\u0438\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e.&#187;                )            },            {                &#171;role&#187;: &#171;user&#187;,                &#171;content&#187;: prompt            }        ]    )    text = response.choices[0].message.content.strip()    # \u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u0432    paragraphs = re.split(r&#8217;\\n\\s*\\n&#8217;, text)    paragraphs = [p.strip() for p in paragraphs if p.strip()]    # \u0415\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442    if len(paragraphs) == 1:        paragraphs = re.split(r'(?&lt;=\\.)\\s+(?=[\u0410-\u042fA-Z])&#8217;, paragraphs[0])    html_result = &#171;\\n&#187;.join(        f&#187;&lt;p&gt;{p}&lt;\/p&gt;&#187;        for p in paragraphs        if p.strip()    )    return html_resultdef create_neyro_db():    &#171;&#187;&#187;    \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0431\u0430\u0437\u0443 neyro.db \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 results.    &#171;&#187;&#187;    con = sqlite3.connect(&#171;neyro.db&#187;)    cur = con.cursor()    cur.execute(&#171;&#187;&#187;        CREATE TABLE IF NOT EXISTS results (            id_elements INTEGER PRIMARY KEY,            html TEXT NOT NULL        )    &#171;&#187;&#187;)    con.commit()    cur.close()    con.close()def save_html(element1, element2, html_text):    &#171;&#187;&#187;    \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 HTML-\u0442\u0435\u043a\u0441\u0442.    \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b    \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0411\u0414.    \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0435.    &#171;&#187;&#187;    # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432    if not isinstance(element1, int) or not isinstance(element2, int):        raise TypeError(&#171;\u041d\u043e\u043c\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438&#187;)    # \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u0442\u043e\u0447\u043d\u043e \u043a\u0430\u043a \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435    elements = [element1, element2]    elements.sort()    key = 0    for i in range(len(elements)):        key += elements[-(i + 1)] &lt;&lt; (i * 8)    con = sqlite3.connect(&#171;neyro.db&#187;)    cur = con.cursor()    # INSERT \u0438\u043b\u0438 UPDATE \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438    cur.execute(&#171;&#187;&#187;        INSERT OR REPLACE INTO results        (id_elements, html)        VALUES (?, ?)    &#171;&#187;&#187;, (key, html_text))    con.commit()    cur.close()    con.close()    return key&#187;&#187;&#187; \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 &#171;&#187;&#187;if __name__ == &#171;__main__&#187;:    culc = Phase_calculator()    nomb = 0    kolvo = len(culc.elements)    for n1 in range(kolvo &#8212; 1):        for n2 in range(n1 + 1, kolvo + 1):            nomb += 1            r = culc.return_result([n1, n2], culc.is_gases)            lines = r.splitlines()            first_line = lines[0] if lines else &#171;&#187;            other_lines = &#171;\\n&#187;.join(lines[1:])            first_line = extract_source(first_line)            temperatures, products = extract_temperatures_products(other_lines)            t_1 = (                f&#187;&lt;p&gt;\u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f 10 \u043c\u043e\u043b\u044c &#187;                f&#187;\u0430\u0442\u043e\u043c\u043e\u0432 {culc.elements[n1+1]} \u0438 10 \u043c\u043e\u043b\u044c \u0430\u0442\u043e\u043c\u043e\u0432 {culc.elements[n2+1]} \u0432 \u0433\u0430\u0437\u043e\u0432\u043e\u0439 \u0444\u0430\u0437\u0435, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0439: &lt;\/p&gt;&#187;                f&#187;&lt;ul&gt;&lt;li&gt;\u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0441\u043e\u0441\u0442\u0430\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440 \u043f\u0440\u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0438 1 \u0430\u0442\u043c.&lt;\/li&gt;&#187;                f&#187;&lt;li&gt;\u041a\u0430\u0436\u0434\u043e\u0435 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0430\u0437\u0430.&lt;\/li&gt;&#187;                f&#187;&lt;li&gt;\u0424\u0430\u0437\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0433\u0430\u0437\u0430-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0433\u0430\u0437\u043e\u0432\u044b\u0445 \u0440\u0430\u0441\u0442\u0432\u043e\u0440\u043e\u0432 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0430\u0437\u0430\u043c\u0438.&lt;\/li&gt;&lt;\/ul&gt;&#187;            )            t_2 = &#171;&#187;            for i in range(len(temperatures)):                t_2 = (                    f&#187;&lt;div class=\\&#187;reaction\\&#187;&gt;&lt;span&gt;{first_line}&lt;\/span&gt;&#187;                    f&#187;&lt;span class=\\&#187;arrow\\&#187;&gt;&lt;span class=\\&#187;condition\\&#187;&gt;{temperatures[i]}&lt;\/span&gt;&lt;\/span&gt;&#187;                    f&#187;&lt;span&gt;{products[i]}&lt;\/span&gt;&lt;\/div&gt;&#187;                )                t_1 += t_2            t_1 += f&#187;&lt;p&gt;\u0420\u0430\u0441\u0447\u0451\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &lt;a href=\\&#187;https:\/\/slobodovreactor.ru\/culculator\/\\&#187;&gt;\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u043d\u043e\u0433\u043e \u0444\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0430&lt;\/a&gt;.&lt;\/p&gt;&#187;            print(nomb)            print(t_1)            print()            comment = generate_thermodynamic_comment(t_1)            print(comment)            print(&#171;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#171;)\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043e\u043a\u043e\u043b\u043e \u043d\u0435\u0434\u0435\u043b\u0438. \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438\u0437-\u0437\u0430 \u0432\u044b\u043b\u0435\u0442\u0430 \u0432\u0438\u0434\u044f\u0445\u0438. \u041d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u0431\u0430\u0437\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430, \u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 \u0435\u0435 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0430 \u0432 \u0431\u044d\u043a\u0435\u043d\u0434. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a.\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 https:\/\/habr.com\/ru\/articles\/1085358\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-495645","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/495645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=495645"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/495645\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=495645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=495645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=495645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}