Skip to content

Commit

Permalink
docs: add course work params
Browse files Browse the repository at this point in the history
  • Loading branch information
ValeryVerkhoturov committed Aug 13, 2023
1 parent cdc3cbf commit b3f80b2
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 41 deletions.
3 changes: 2 additions & 1 deletion course-work/init/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.idea
.env
.env
output
22 changes: 21 additions & 1 deletion course-work/init/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions course-work/init/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ python = "^3.10"
jupyter = "^1.0.0"
python-dotenv = "^1.0.0"
toml = "^0.10.2"
tqdm = "^4.66.1"


[build-system]
Expand Down
176 changes: 137 additions & 39 deletions course-work/init/yandex-gpt-generation.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,36 @@
},
{
"cell_type": "code",
"execution_count": 46,
"execution_count": 77,
"outputs": [],
"source": [
"min_tokens_key = \"min_tokens\"\n",
"max_tokens_key = \"max_tokens\"\n",
"\n",
"description_key = \"description\"\n",
"\n",
"subsections_key = \"subsections\"\n",
"subsubsections_key = \"subsubsections\"\n",
"\n",
"has_subconclusion_key = \"has_subconclusion\"\n",
"subconclusion_name = \"Вывод по разделу\"\n",
"is_subconclusion_key = \"is_subconclusion\"\n",
"\n",
"is_supersection_key = \"is_supersection\"\n",
"disable_subsections_generation_key = \"disable_subsections_generation\""
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-08-13T19:23:24.305415Z",
"start_time": "2023-08-13T19:23:24.301550Z"
}
},
"id": "ff2c0d1b2a8ec9f5"
},
{
"cell_type": "code",
"execution_count": 78,
"outputs": [],
"source": [
"theme = \"Веб-сервис Бюро находок\"\n",
Expand All @@ -29,9 +58,12 @@
"sections = [\n",
" {\n",
" \"name\": \"Введение\",\n",
" \"min_tokens\": int(1.5 * TOKENS_PER_PAGE),\n",
" \"max_tokens\": 2 * TOKENS_PER_PAGE,\n",
" \"description\":\n",
" is_supersection_key: True,\n",
" has_subconclusion_key: False,\n",
" disable_subsections_generation_key: True,\n",
" min_tokens_key: int(1.5 * TOKENS_PER_PAGE),\n",
" max_tokens_key: 2 * TOKENS_PER_PAGE,\n",
" description_key:\n",
"\"\"\"\n",
"Во введении отражается актуальность, цель и задачи ВКР. Введение содержит:\n",
"− обоснование выбора темы работы и ее актуальности; \n",
Expand All @@ -43,9 +75,12 @@
" },\n",
" {\n",
" \"name\": \"Аналитический раздел\",\n",
" \"min_tokens\": 10 * TOKENS_PER_PAGE,\n",
" \"max_tokens\": 15 * TOKENS_PER_PAGE,\n",
" \"description\":\n",
" is_supersection_key: False,\n",
" has_subconclusion_key: True,\n",
" disable_subsections_generation_key: False,\n",
" min_tokens_key: 10 * TOKENS_PER_PAGE,\n",
" max_tokens_key: 15 * TOKENS_PER_PAGE,\n",
" description_key:\n",
"\"\"\"\n",
"Первый раздел посвящен анализу предметной области и объекта производственно-технологической профессиональной деятельности. В нем приводят основные обзорно-аналитические материалы для приводимых в последующих раз- делах решений поставленных производственно-технологических задач. Материал должен раскрыть состояние предметной области, оценить выявленные проблемы, выбрать способ решения и средства достижения цели. В результате анализа должна быть сформулирована цель и поставлена задача. При изложении материала можно использовать CASE-средства моделирования процессов (например, средства разработки IDEF0-диаграмм), если это необходимо для раскрытия темы.\n",
"Структура раздела, может быть следующей:\n",
Expand All @@ -56,39 +91,75 @@
" },\n",
" {\n",
" \"name\": \"Специальный раздел\",\n",
" \"min_tokens\": 15 * TOKENS_PER_PAGE,\n",
" \"max_tokens\": 20 * TOKENS_PER_PAGE,\n",
" \"description\": \n",
" is_supersection_key: False,\n",
" has_subconclusion_key: True,\n",
" disable_subsections_generation_key: False,\n",
" min_tokens_key: 15 * TOKENS_PER_PAGE,\n",
" max_tokens_key: 20 * TOKENS_PER_PAGE,\n",
" description_key: \n",
"\"\"\"\n",
"Специальный раздел является основой ВКР. В этом разделе раскрываются особенности решения поставленной задачи: от описания метода решения поставленной задачи (при необходимости обоснование выбора метода), проектирования структурных, функциональных и принципиальных схем, моделей до разработки алгоритмов. При изложении материала можно использовать CASE-средства, например, средства разработки UML-диаграмм, если это необходимо для раскрытия темы.\n",
"Конкретное содержание специального раздела определяется темой бакалаврской работы.\n",
"\"\"\"\n",
" },\n",
" {\n",
" \"name\": \"Технологический раздел\",\n",
" \"min_tokens\": 10 * TOKENS_PER_PAGE,\n",
" \"max_tokens\": 15 * TOKENS_PER_PAGE,\n",
" \"description\": \n",
" is_supersection_key: False,\n",
" has_subconclusion_key: True,\n",
" disable_subsections_generation_key: False,\n",
" min_tokens_key: 10 * TOKENS_PER_PAGE,\n",
" max_tokens_key: 15 * TOKENS_PER_PAGE,\n",
" description_key: \n",
"\"\"\"\n",
"Технологический раздел ВКР выполняется как описание результатов реализации разрабатываемого решения по видам обеспечения: информационное обеспечение, программное обеспечение, техническое обеспечение. Описание Информационного обеспечения включает технологические процессы сбора и обработки информации для решения поставленных задач с использованием как существующих, так и разработанных средств, описание модели базы данных. При описании Программного обеспечения приводится обоснование среды реализации программного обеспечения, результаты апробации разработанного комплекса программ, описание интерфейса взаимодействия (графа диалога) и др. В параграфе «техническое обеспечение» приводится архитектура комплекса технических средств и их спецификация и др.\n",
"В отдельный методический раздел могут выноситься руководство пользователя, руководство администратора, руководство программиста и другие нормативные разработки, регламентирующие эксплуатацию информационной си- стемы.\n",
"\"\"\"\n",
" },\n",
" {\n",
" \"name\": \"Экономический раздел\",\n",
" \"min_tokens\": 1 * TOKENS_PER_PAGE,\n",
" \"max_tokens\": 5 * TOKENS_PER_PAGE,\n",
" \"description\": \n",
" is_supersection_key: False,\n",
" has_subconclusion_key: False,\n",
" disable_subsections_generation_key: True,\n",
" subsections_key: [\n",
" {\n",
" \"name\": \"Планирование разработки программного продукта\", \n",
" is_subconclusion_key: False\n",
" },\n",
" {\n",
" \"name\": \"Составление сметы затрат на разработку\", \n",
" is_subconclusion_key: False,\n",
" subsubsections_key: [\n",
" {\n",
" \"name\": \"Материальные затраты\",\n",
" },\n",
" {\n",
" \"name\": \"Затраты на оплату труда\",\n",
" },\n",
" {\n",
" \"name\": \"Амортизационные отчисления\",\n",
" },\n",
" {\n",
" \"name\": \"Прочие расходы\",\n",
" }\n",
" ]\n",
" },\n",
" ],\n",
" min_tokens_key: 1 * TOKENS_PER_PAGE,\n",
" max_tokens_key: 5 * TOKENS_PER_PAGE,\n",
" description_key: \n",
"\"\"\"\n",
"В экономическом разделе приводятся материалы по расчету показателей, обосновывающих экономическую целесообразность выполнения проектных работ, а также, расчет показателей экономической эффективности.\n",
"В разделе могут быть приведены материалы, отражающие организацию процесса проектирования объекта проектной деятельности.\n",
"\"\"\"\n",
" },\n",
" {\n",
" \"name\": \"Заключение\",\n",
" \"min_tokens\": 1 * TOKENS_PER_PAGE,\n",
" \"max_tokens\": 3 * TOKENS_PER_PAGE,\n",
" \"description\": \n",
" is_supersection_key: True,\n",
" has_subconclusion_key: False,\n",
" disable_subsections_generation_key: True,\n",
" min_tokens_key: 1 * TOKENS_PER_PAGE,\n",
" max_tokens_key: 3 * TOKENS_PER_PAGE,\n",
" description_key: \n",
"\"\"\"\n",
"В заключении дается краткая характеристика результатов, полученных в ходе выполнения выпускной квалификационной работы; какие задачи были решены лично автором; методы исследования проблемы; даются итоговые выводы по всем разделам работы; указывается новизна и возможность внедрения проекта.\n",
"\"\"\"\n",
Expand All @@ -98,30 +169,41 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-08-13T17:29:34.929738Z",
"start_time": "2023-08-13T17:29:34.910486Z"
"end_time": "2023-08-13T19:23:24.862724Z",
"start_time": "2023-08-13T19:23:24.851965Z"
}
},
"id": "76bb90e62b319c0e"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"execution_count": 83,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 6/6 [00:29<00:00, 4.85s/it]\n"
]
}
],
"source": [
"from yagpt import TextGeneration, Message\n",
"import re\n",
"from tqdm import tqdm\n",
"\n",
"subsections_key = \"subsections\"\n",
"subsubsections_key = \"subsubsections\"\n",
"\n",
"for progress, section in enumerate(sections):\n",
"for section in tqdm(sections):\n",
" if section[disable_subsections_generation_key]:\n",
" continue\n",
" data = TextGeneration.instruct(f\"Напиши подразделы для раздела {section['name']}, \"\n",
" f\"основываясь на теме курсовой работы и описании раздела.\\n\\n\"\n",
" f\"Тема курсовой: {section['name']}\\n\\n\"\n",
" f\"Описание раздела: {section['description']}\\n\\n\"\n",
" f\"основываясь на описании курсовой работы и описании раздела.\"\n",
" f\"В подразделы нельзя включать `введение` и `заключение`.\\n\\n\"\n",
" f\"Описание курсовой работы:\\n{description}\\n\\n\"\n",
" f\"Описание раздела:\\n{section[description_key]}\\n\\n\"\n",
" f\"Подразделы:\\n1.\", \"\", 0.01, retries=3)[\"result\"][\"alternatives\"][0][\"text\"]\n",
" matches = re.findall(\"([\\d+\\.]+) (.+)?\\n\", data)\n",
" if (len(matches) == 0):\n",
" print(\"No generated subsections for\", section['name'])\n",
" section[subsections_key] = []\n",
" for match in matches:\n",
" nesting_level = match[0].count('.')\n",
Expand All @@ -131,16 +213,26 @@
" title= title[:-1]\n",
" \n",
" if nesting_level == 1:\n",
" section[subsections_key].append({\"name\": title, subsubsections_key: []})\n",
" section[subsections_key].append({\"name\": title, is_subconclusion_key: False})\n",
" \n",
" elif nesting_level == 2 and len(section[subsections_key]) > 0:\n",
" \n",
" if subsubsections_key not in section[subsections_key][-1].keys():\n",
" section[subsections_key][-1][subsubsections_key] = [] \n",
" \n",
" (section[subsections_key][-1][subsubsections_key]\n",
" .append({\"name\": title}))\n",
" print(match)\n",
" print(f\"Progress: {progress / len(section) * 100}%\")\n",
" \n",
" if section[has_subconclusion_key]:\n",
" section[subsections_key].append({\"name\": subconclusion_name, is_subconclusion_key: True})\n",
" "
],
"metadata": {
"collapsed": false
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-08-13T19:36:46.232985Z",
"start_time": "2023-08-13T19:36:17.149796Z"
}
},
"id": "567c3ea6b730805c"
},
Expand All @@ -159,18 +251,24 @@
},
{
"cell_type": "code",
"execution_count": 45,
"execution_count": 84,
"outputs": [],
"source": [
"import toml\n",
"with open(\"course_work.toml\", \"w\") as file:\n",
" toml.dump({\"sections\": sections}, file)\n"
"import os\n",
"\n",
"directory = \"output\"\n",
"if not os.path.exists(directory):\n",
" os.makedirs(directory)\n",
"\n",
"with open(f\"{directory}/course_work.toml\", \"w\") as file:\n",
" toml.dump({\"theme\": theme, \"description\": description, \"sections\": sections}, file)\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-08-13T17:27:04.431996Z",
"start_time": "2023-08-13T17:27:04.423343Z"
"end_time": "2023-08-13T19:37:14.166722Z",
"start_time": "2023-08-13T19:37:14.159332Z"
}
},
"id": "4333be321d19bee"
Expand Down

0 comments on commit b3f80b2

Please sign in to comment.