From a920ddaa49bd8334f961ecc85ada55bdc45e5224 Mon Sep 17 00:00:00 2001 From: mikavehns Date: Sat, 1 Apr 2023 11:49:01 +0200 Subject: [PATCH] 0.8.0 --- .idea/BookGPT.iml | 2 +- .idea/encodings.xml | 1 + .idea/vcs.xml | 1 - src/__pycache__/book.cpython-310.pyc | Bin 6096 -> 5764 bytes src/__pycache__/prompts.cpython-310.pyc | Bin 0 -> 2498 bytes src/categories/__init__.py | 5 - .../__pycache__/__init__.cpython-310.pyc | Bin 358 -> 0 bytes .../__pycache__/biography.cpython-310.pyc | Bin 6969 -> 0 bytes .../__pycache__/history.cpython-310.pyc | Bin 6849 -> 0 bytes .../__pycache__/science.cpython-310.pyc | Bin 6820 -> 0 bytes .../selfimprovement.cpython-310.pyc | Bin 6608 -> 0 bytes .../__pycache__/travel.cpython-310.pyc | Bin 6822 -> 0 bytes src/categories/biography.py | 113 ----------------- src/categories/history.py | 114 ----------------- src/categories/science.py | 118 ------------------ src/categories/selfimprovement.py | 114 ----------------- src/categories/travel.py | 114 ----------------- src/utils/__pycache__/utils.cpython-310.pyc | Bin 1206 -> 1516 bytes 18 files changed, 2 insertions(+), 580 deletions(-) create mode 100644 src/__pycache__/prompts.cpython-310.pyc delete mode 100644 src/categories/__init__.py delete mode 100644 src/categories/__pycache__/__init__.cpython-310.pyc delete mode 100644 src/categories/__pycache__/biography.cpython-310.pyc delete mode 100644 src/categories/__pycache__/history.cpython-310.pyc delete mode 100644 src/categories/__pycache__/science.cpython-310.pyc delete mode 100644 src/categories/__pycache__/selfimprovement.cpython-310.pyc delete mode 100644 src/categories/__pycache__/travel.cpython-310.pyc delete mode 100644 src/categories/biography.py delete mode 100644 src/categories/history.py delete mode 100644 src/categories/science.py delete mode 100644 src/categories/selfimprovement.py delete mode 100644 src/categories/travel.py diff --git a/.idea/BookGPT.iml b/.idea/BookGPT.iml index d2d6f45..9952949 100644 --- a/.idea/BookGPT.iml +++ b/.idea/BookGPT.iml @@ -2,7 +2,7 @@ - + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index a289cf3..081c6ca 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,5 +3,6 @@ + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index c5cf0b1..94a25f7 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,6 +2,5 @@ - \ No newline at end of file diff --git a/src/__pycache__/book.cpython-310.pyc b/src/__pycache__/book.cpython-310.pyc index cd72bae502e5982295ffd6e3376cbf32eee47ea5..c61f49692f954c472f463e2facf3ecf0acd4ced0 100644 GIT binary patch literal 5764 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 diff --git a/src/__pycache__/prompts.cpython-310.pyc b/src/__pycache__/prompts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c5873ad94ce9c34eca1a9eae30a163174efdad8 GIT binary patch literal 2498 zcmcguU27yo6rFsa*?|=i@%iq&m_QuR#~@-h=rRzqA(=%Cfu*LqW~NMaRa;e^o+ji6 z?VGKK>+s{cJG!lW+RJE!=#M zKmRE%`QU1hZ(VKW+gIE9&gI}>SNy&+82n-@5>ApZbUdN36oG1|g7h@A_Qqp9=Vx+N zN*72O%A6EInFZBS>#uxpRTe5IbFx*?%1A#Zj+x<5{3Mh#e{%+y?El-Z)dl0O;_M=xr+YeT*@RWXz9p6!r~V z{mi71pzc|$EtZ?&0$>{`a=O`S#RVsgzswbVvt z&?G@Y%+l#Xgz<2A!d+v0PjrpEP0jCcfk8AVv&P6Q06YspnqO@b1A}Qq%u_#nh6^br$cFwv)D+;MTSv9h zno4I`TMpy*oR7X)OR# z>NVoSPfg4j|M zEv$ubCjBRnETc@^9?>W!86|aXy0HL3k+E3OKRFjckeI{!aSMx=71|(3kM+Z~7&p(w zAN?`d4wueYJ!;cnC5$7YD;0>C&*d4cKdPDGfZg#1dU zVBFScUBK2Bng^j)H|R=aPitEhIIP_s@NUG#`9!jg1dIiLHn8{d8Q_2dC?m_n%;n$7A|Y z!P|2cVz;6=eK(ogsSXce&xX}Q^n_ogJVv5$xy1Ntbr{3i#wG;0f?aG{r~P9M%gi~K zh%Wipb{$fVfo1Y2!Q`9R6v7*N^NNXmKE&%Wup7B;W6{EolK{71O#4tDqUw*Lm0(_}IL literal 0 HcmV?d00001 diff --git a/src/categories/__init__.py b/src/categories/__init__.py deleted file mode 100644 index 76e4d16..0000000 --- a/src/categories/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .selfimprovement import SelfImprovement -from .biography import Biography -from .science import Science -from .history import History -from .travel import Travel diff --git a/src/categories/__pycache__/__init__.cpython-310.pyc b/src/categories/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 8bd8b10e6a9924495aed37cd0ef5bb1f700f0799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmYk2zfQw25Qpvjb5pe{uaSkR3kV@719U-^(#f(Eg~X&5b{w5UrM?k70#AaJm5Eni z!j}qBTR#838$O+F=kqD?>*DjHdh_=e!s!Y;-1y_L)TE}G7|JQd9O%G=JREbVBNOv@ z%#ltE<7~{ao|u%UJ|{WJ*f;f>j1G%j>gToT!0x4yZSPy@O4$a=Zg=p&@=D3Jk{BP9 z>n&h6*+RLO`Z1dh3+DyuUjR5LPoMrA5F#^o)Ij8EV7sFUVx*)WWsrDyCxG8DmY?O_ zrPu(@VvK4Vak~~PYhUg+Tj8J*RoTnNf|5=Yg=$q_6zAPxm|PiKziN4nFLY>|kr~B( GMt=b|2wbB8 diff --git a/src/categories/__pycache__/biography.cpython-310.pyc b/src/categories/__pycache__/biography.cpython-310.pyc deleted file mode 100644 index 4c7637e27f7517d3a4abcc2ef0890544c638d614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6969 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 OTNZbnu1l%fM&rLP=u8s; diff --git a/src/categories/__pycache__/history.cpython-310.pyc b/src/categories/__pycache__/history.cpython-310.pyc deleted file mode 100644 index 33c927f1c5d2665dafc7fcd15f93be723eac828c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6849 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 diff --git a/src/categories/__pycache__/science.cpython-310.pyc b/src/categories/__pycache__/science.cpython-310.pyc deleted file mode 100644 index a79e7afae87544382b16b836e656ac673cfe0bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6820 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 diff --git a/src/categories/__pycache__/selfimprovement.cpython-310.pyc b/src/categories/__pycache__/selfimprovement.cpython-310.pyc deleted file mode 100644 index 4753ff657426d6d13654d0e846cbfd303ec64225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6608 zcmcgwORpS974GiodED`R`Nr`JCv*bD4ESCQNI`OfNpON?5m^yVgcuo(%3U=xecjX5 zsp`3p)?|U~1)D6gMwa3w8~y?OkQP}XA+l#d%))%9`Y}EC&UK6wrAJ*;-Cd7!s=o7` zb4sqQbuC;E|NS@r^YfPV4|=Fy4LrPsTmJ+Fx40cz{runV+jw?DXVU05CT`!gt(z8a zaQC6b-3Ly;$?ZED4yI#EApttwgf83%sW30X9nvXStcSiJJ0 zx`X=$ZhZ;G%$`{TYv!P|XAP9j%thHSyX2&qnU=)96$MGa!XOo1G8VZ4xlr`=TFexi zc#G0qgRW4>Nb1R9`4xIcW{kOBwIPlvbaWKcz=Ou+c*mqL3y^m+RhpY*UYzfC&sDS> zszpVciVliiGjnMNmVNuPr3jKw-nen??)yrPpz*_kcO666JGkagY++2kH)*Dv5n6S&S=$2BP%^&0(i z8oM%>u!8|h5;2LBK{TD*6RO|cXIPhEa3FYpONm4s4rDYC2fm1tKt@>$riA9lmS6>Q z8bH5_N@DF|0XSgI9ikl$g5a%B+Pe)71KxG99PRYe3f4D8qCMs*p<@|o;SDi`0n6L( z-#P}YeEu9+d7VsGi^!NTL2R)XbeO6rZ~qlDq??I2NVYlK3nD+*zIyeiqoKL}`HSH1 z*!?ePuN4)&cGeQnC;(r)h{x;{ts!y8REd6+H z5k+govFktgOSj|v$HARmItumr0LONitkdkUp)Bh&IGh>w`A^tm{5$w>JZe5B$Ks|R zF77SuN)jZYSk401>U;EzcInldbB4~_4W$Bd$ik1YwI?I*iAy}kevLibF+`a6(qlOd zxpxl~$`XHk=rN#YA|_Ii*9*Z1rzbd zf!H(LA1H4mS%`O#ydXCc4DZ8WPw3^^PGl17u>^E!`T?_YUno2-s0>g_=sXhD#1JH5 z_u)n$yo`2w4fPVhP~&S`k^LV9?CjrGL4l6IJ zFYwE35q*R~xJ`pW_fgwmu$lhxI0g&Xs28@XYF7A9Gk@W^o)fdr9yh&IgKdaNtDIhw zBTrwa$6|!sO0@SZSOYyF;uZBWR)vw3?s)G48PyO4aD7BP#x`Q%2gASznh=uIp$+)! zL`{7nE$%U*U=1_?cn~NQT7!%|*q2U33^0ya4*eXBu$%~DhN0XioR-kU5aoP?&m4wF zl$%>07ur_=91B2AKrTfO1ye9MSk0a|H1;+j>lsRaYJ?LteHW(Cq;Lg+5|xV)+W%)13lXT! zji^-Vgz@X#{}r;NKd%|mylspq`?)P9y_f^WaC3>bf}PXXN+SXr?+3})EKm+|;!MK~ z(CUeOh5Z4fwAAjtX{)LrkC-K#a#8a!Nf1Mk=kYK#Cp?AA4PqIFR3rs*KA$g z?yo>Ib)&xG<$(_ z;5@#*Ck&*e^g>Ai03vG8Wf9{95#CRxA>f1vt{R4*MLcW_g`J?*4x(BUD^QMQ z(z(ptl|f_@KEx3wZ1CtC%@O}1w|R&+?^qA)$M(l9 zd~@-w4R*GTvUmDQm z1Y2};R(xT*fagLI@r}5_TS>`@B@xdPtgqGi6@V&d``Z2A2jp&xO(}B4JUW~EtZJ|I zwQl-K_qQs*LFLhntr~ghRxN}v6yROXVfn@}zg9T3G0Sty6R4a3qJ99tFggNR=6J+# zi2NAA{F2x`;DRy?1o>rHQCeRm^A$?SHIfnXL*<4l5sE#AOj{f0ynLcpbB8;S&= z$Q~#$g3LJUK|aiL_*Vkg;IJ>ka9gSoi;&aheSA3<3VyiQhf*4NQzbdFE@aZsSn|Un z^GCE5PBrD%-aFEx=z?S=HO%%=*8N>F*UFvtI!E2-YxMmx72ijZwemQhaF-23-1h-N15W4LEAGN)oT)Y!v4s6OoK1&pKdjb%@={nx>Yk{%z9c z6>9Ag*QxK(Gm*4vQ1K%w=E|BHoslXR1^IS!{do6Psrzn5JLLSBtqc#f-wrm!h#O5krhmGVX%N?s@Z`xap{{cC=#jXGV diff --git a/src/categories/__pycache__/travel.cpython-310.pyc b/src/categories/__pycache__/travel.cpython-310.pyc deleted file mode 100644 index ff815b1fc6ddc56aae8c27d408b4238785f77e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6822 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 Dgmo4= diff --git a/src/categories/biography.py b/src/categories/biography.py deleted file mode 100644 index 17cb858..0000000 --- a/src/categories/biography.py +++ /dev/null @@ -1,113 +0,0 @@ -import openai -import retrying -from typing import List, Dict - -class Biography: - """ - This class is used to generate a self-help book. - """ - - def __init__(self, chapter_amount: int, words_per_chapter: int, topic: str, language: str): - """ - Initialize the class. - :param chapter_amount: The amount of chapters in the book. - :param words_per_chapter: The amount of words per chapter. - :param topic: The topic of the book. - """ - - self.chapter_amount = chapter_amount - self.words_per_chapter = words_per_chapter - self.topic = topic - self.language = language - - @staticmethod - @retrying.retry(stop_max_attempt_number=5, wait_fixed=1000, retry_on_exception=lambda e: isinstance(e, openai.error.ServiceUnavailableError or openai.error.RateLimitError)) - def get_response(prompt: str): - """ - Gets a response from the API. - :param prompt: The prompt to send to the API. - :return: The response from the API. - """ - - return openai.Completion.create( - engine="text-davinci-003", - prompt=prompt, - temperature=0.7, - max_tokens=1500, - top_p=1, - frequency_penalty=0, - presence_penalty=0 - ).choices[0].text - - def get_title(self): - """ - Gets the title of the book. - :return: The title of the book. - """ - - return self.get_response( - f"Generate a title for a biography book on {self.topic} in {self.language}. " - f"The title should be compelling and memorable, and should accurately reflect the content and purpose of the book. " - f"The book will contain the life story and accomplishments of the person being featured. " - f"The title should be inspiring and informative, and should encourage readers to learn about the subject's life and contributions.") - - def get_chapters(self, title: str): - """ - Gets the chapters of the book. - :param title: The title of the book. - :return: The chapters of the book. - """ - - return self.get_response( - f"Generate a list of the size {self.chapter_amount} of chapter titles for a biography book called {title}. " - f"Each chapter should cover a specific period in the subject's life and should be structured as a series of " - f"lessons or steps that the reader can follow to understand the events and experiences that shaped the subject's life. " - f"The chapter titles should be descriptive and should clearly convey the main focus of each chapter. " - f"The chapters should be engaging and informative, and should encourage the reader to learn about the subject's life and accomplishments and should be written in {self.language}.") - - def get_structure(self, title: str, chapters: List[str]): - """ - Gets the structure of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :return: The structure of the book. - """ - - return self.get_response( - f"Generate a structure plan for a biography book called {title} in {self.language}. " - f"The book should contain {self.chapter_amount} chapters, with the following titles: {','.join(chapters)} " - f"Each chapter should be structured as a chronology of the subject's life, including significant events, achievements, and challenges. " - f"The chapters should include quotes, photographs, and personal anecdotes to help the reader understand and relate to the subject. " - f"The book should be inspiring and engaging, and should offer insight into the subject's character and legacy. " - f"\n\nFor each chapter, create a list of paragraph titles and corresponding recommended word counts in the following format: " - f"'paragraph_title---word_amount.' The paragraph titles should not include the word 'paragraph' or a number. " - f"The total recommended word count for all paragraphs in each chapter should add up to {self.words_per_chapter} words. " - f"In order to prevent any individual paragraph from being too long, " - f"try to divide the content into multiple paragraphs, each with a recommended word count.") - - def get_paragraph(self, title: str, chapters: list[str], paragraphs: List[List[Dict[str, str]]], - paragraph_index: int, chapter_index: int): - """ - Gets a paragraph of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :param paragraphs: The paragraphs of the book. - :param paragraph_index: The index of the paragraph. - :param chapter_index: The index of the chapter. - :return: The paragraph of the book. - """ - - paragraphs = paragraphs[chapter_index] - titles = '\n'.join([paragraph["title"] + ' - ' + paragraph["word_count"] for paragraph in paragraphs]) - paragraph = paragraphs[paragraph_index] - return self.get_response( - f"Write the content for Chapter {chapter_index + 1} in {self.language} of a biography called {title}. The chapter is called {chapters[chapter_index]}, " - f"and should focus on discussing a significant period in the subject's life, including their experiences, achievements, and challenges. " - f"The chapter should include a clear explanation of the historical context and background, as well as supporting evidence and examples to illustrate the subject's life and accomplishments. " - f"The chapter should also provide analysis and interpretation of the events and trends discussed, and may include primary sources for readers to examine. " - f"The chapter should be written in a clear and engaging style, and should be well-organized and easy to follow. " - f"\n\nThe chapter contains the following paragraphs:\n{titles}\nWrite the content for paragraph {paragraph_index + 1}, " - f"with the title '{paragraph['title']}.' The paragraph should have the recommended word count of {paragraph['word_count']} words. " - f"In order to effectively convey the main ideas and concepts of the paragraph, be sure to include relevant historical information, " - f"anecdotes, and other sources. Use a clear and engaging writing style that will keep the reader interested and informed. " - f"The paragraph should be well-structured and coherent, with a clear introduction, body, and conclusion. Do not write a title.") diff --git a/src/categories/history.py b/src/categories/history.py deleted file mode 100644 index 5aa693f..0000000 --- a/src/categories/history.py +++ /dev/null @@ -1,114 +0,0 @@ -import openai -import retrying -from typing import List, Dict - - -class History: - """ - This class is used to generate a self-help book. - """ - - def __init__(self, chapter_amount: int, words_per_chapter: int, topic: str, language: str): - """ - Initialize the class. - :param chapter_amount: The amount of chapters in the book. - :param words_per_chapter: The amount of words per chapter. - :param topic: The topic of the book. - """ - - self.chapter_amount = chapter_amount - self.words_per_chapter = words_per_chapter - self.topic = topic - self.language = language - - @staticmethod - @retrying.retry(stop_max_attempt_number=5, wait_fixed=1000, retry_on_exception=lambda e: isinstance(e, openai.error.ServiceUnavailableError or openai.error.RateLimitError)) - def get_response(prompt: str): - """ - Gets a response from the API. - :param prompt: The prompt to send to the API. - :return: The response from the API. - """ - - return openai.Completion.create( - engine="text-davinci-003", - prompt=prompt, - temperature=0.7, - max_tokens=1500, - top_p=1, - frequency_penalty=0, - presence_penalty=0 - ).choices[0].text - - def get_title(self): - """ - Gets the title of the book. - :return: The title of the book. - """ - - return self.get_response( - f"Generate a title for a history book on {self.topic} in {self.language}. " - f"The title should be captivating and memorable, and should accurately reflect the content and purpose of the book. " - f"The book will contain historical events, figures, and analysis to help readers understand the topic. " - f"The title should be engaging and educational, and should encourage readers to learn about the past.") - - def get_chapters(self, title: str): - """ - Gets the chapters of the book. - :param title: The title of the book. - :return: The chapters of the book. - """ - - return self.get_response( - f"Generate a list of the size {self.chapter_amount} of chapter titles for a history book called {title} in {self.language}. " - f"Each chapter should cover a specific time period or event and should be structured as a series of " - f"lessons or steps that the reader can follow to understand the context and significance of the event. " - f"The chapter titles should be descriptive and should clearly convey the main focus of each chapter. " - f"The chapters should be engaging and educational, and should encourage the reader to learn about the past and how it has shaped the present.") - - def get_structure(self, title: str, chapters: List[str]): - """ - Gets the structure of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :return: The structure of the book. - """ - - return self.get_response( - f"Generate a structure plan for a history book called {title} in {self.language}. " - f"The book should contain {self.chapter_amount} chapters, with the following titles: {','.join(chapters)} " - f"Each chapter should be structured as a series of events or themes that the reader can follow to gain a comprehensive understanding of a specific time period or topic. " - f"The chapters should include primary sources, maps, and images to help the reader visualize and understand the events. " - f"The book should be informative and engaging, and should encourage the reader to continue learning about history. " - f"\n\nFor each chapter, create a list of paragraph titles and corresponding recommended word counts in the following format: " - f"'paragraph_title---word_amount.' The paragraph titles should not include the word 'paragraph' or a number. " - f"The total recommended word count for all paragraphs in each chapter should add up to {self.words_per_chapter} words. " - f"In order to prevent any individual section from being too long, " - f"try to divide the content into multiple sections, each with a recommended word count.") - - def get_paragraph(self, title: str, chapters: List[str], paragraphs: List[List[Dict[str, str]]], - paragraph_index: int, chapter_index: int): - """ - Gets a paragraph of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :param paragraphs: The paragraphs of the book. - :param paragraph_index: The index of the paragraph. - :param chapter_index: The index of the chapter. - :return: The paragraph of the book. - """ - - paragraphs = paragraphs[chapter_index] - titles = '\n'.join([paragraph["title"] + ' - ' + paragraph["word_count"] for paragraph in paragraphs]) - paragraph = paragraphs[paragraph_index] - return self.get_response( - f"Write the content for Chapter {chapter_index + 1} in {self.language} of a history book called {title}. The chapter is called {chapters[chapter_index]}, " - f"and should focus on discussing significant events, people, and trends in history related to the topic. " - f"The chapter should include a clear explanation of the historical context and background, as well as supporting evidence and examples to illustrate the importance of the topic. " - f"The chapter should also provide analysis and interpretation of the events and trends discussed, and may include primary sources for readers to examine. " - f"The chapter should be written in a clear and engaging style, and should be well-organized and easy to follow. " - f"\n\nThe chapter contains the following paragraphs:\n{titles}\nWrite the content for paragraph {paragraph_index + 1}, " - f"with the title '{paragraph['title']}.' The paragraph should have the recommended word count of {paragraph['word_count']} words. " - f"In order to effectively convey the main ideas and concepts of the paragraph, be sure to include relevant historical information, " - f"anecdotes, and other sources. Use a clear and engaging writing style that will keep the reader interested and informed. " - f"The paragraph should be well-structured and coherent, with a clear introduction, body, and conclusion. Do not write a title.") diff --git a/src/categories/science.py b/src/categories/science.py deleted file mode 100644 index 736dcac..0000000 --- a/src/categories/science.py +++ /dev/null @@ -1,118 +0,0 @@ -import openai -import retrying -from typing import List, Dict - - -class Science: - """ - This class is used to generate a self-help book. - """ - - def __init__(self, chapter_amount: int, words_per_chapter: int, topic: str, language: str): - """ - Initialize the class. - :param chapter_amount: The amount of chapters in the book. - :param words_per_chapter: The amount of words per chapter. - :param topic: The topic of the book. - """ - - self.chapter_amount = chapter_amount - self.words_per_chapter = words_per_chapter - self.topic = topic - self.language = language - - @staticmethod - @retrying.retry(stop_max_attempt_number=5, wait_fixed=1000, retry_on_exception=lambda e: isinstance(e, openai.error.ServiceUnavailableError or openai.error.RateLimitError)) - def get_response(prompt: str): - """ - Gets a response from the API. - :param prompt: The prompt to send to the API. - :return: The response from the API. - """ - - return openai.Completion.create( - engine="text-davinci-003", - prompt=prompt, - temperature=0.7, - max_tokens=1500, - top_p=1, - frequency_penalty=0, - presence_penalty=0 - ).choices[0].text - - def get_title(self): - """ - Gets the title of the book. - :return: The title of the book. - """ - - return self.get_response(f"Generate a title for a science book on {self.topic} in {self.language}. " - f"The title should be engaging and memorable, and should " - f"accurately reflect the content and purpose of the book. " - f"The book will contain scientific information, experiments, " - f"and research to help readers understand and learn about the topic. " - f"The title should be informative and educational, and should inspire " - f"readers to further explore the subject.") - - def get_chapters(self, title: str): - """ - Gets the chapters of the book. - :param title: The title of the book. - :return: The chapters of the book. - """ - - return self.get_response( - f"Generate a list of the size {self.chapter_amount} of chapter titles for a science book on the topic {self.topic}, called {title} in {self.language}. " - f"Each chapter should cover a specific aspect of the topic and should be structured as a " - f"series of lessons or explanations that the reader can follow to gain a deeper understanding of the subject. " - f"The chapter titles should be descriptive and should clearly convey the main focus of each chapter. " - f"The chapters should be informative and educational, and should encourage the reader to think critically about the topic.") - - def get_structure(self, title: str, chapters: List[str]): - """ - Gets the structure of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :return: The structure of the book. - """ - - return self.get_response(f"Generate a structure plan for a science book called {title} in {self.language}. " - f"The book should contain {self.chapter_amount} chapters, with the following titles: " - f"{','.join(chapters)}. Each chapter should cover a specific topic in science and " - f"be structured as a series of lessons or sections that explain the key concepts and ideas. " - f"The chapters should include examples, illustrations, and case studies to help the reader " - f"understand and apply the concepts. The book should be informative and accurate, " - f"and should encourage the reader to think critically about the topic." - f"\n\nFor each chapter, create a list of paragraph titles and corresponding recommended" - f" word counts in the following format: 'paragraph_title---word_amount.' " - f"The section titles should not include the word 'paragraph' or a number. " - f"The total recommended word count for all sections in each chapter should add up to {self.words_per_chapter} words. " - f"In order to prevent any individual section from being too long, try to divide the " - f"content into multiple sections, each with a recommended word count.") - - def get_paragraph(self, title: str, chapters: List[str], paragraphs: List[List[Dict[str, str]]], - paragraph_index: int, chapter_index: int): - """ - Gets a paragraph of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :param paragraphs: The paragraphs of the book. - :param paragraph_index: The index of the paragraph. - :param chapter_index: The index of the chapter. - :return: The paragraph of the book. - """ - - paragraphs = paragraphs[chapter_index] - titles = '\n'.join([paragraph["title"] + ' - ' + paragraph["word_count"] for paragraph in paragraphs]) - paragraph = paragraphs[paragraph_index] - return self.get_response( - f"Write the content for Chapter {chapter_index + 1} in {self.language} of a science book called {title}. The chapter is called {chapters[chapter_index]}, " - f"and should focus on discussing scientific theories, principles, and research findings related to the topic. " - f"The chapter should include a clear explanation of the key concepts, as well as supporting evidence and examples to illustrate their importance. " - f"The chapter should also provide practical applications of the concepts, and may include hands-on activities or exercises for readers to try. " - f"The chapter should be written in a clear and concise style, and should be well-organized and easy to follow. " - f"\n\nThe chapter contains the following paragraphs:\n{titles}\nWrite the content for paragraph {paragraph_index + 1}, " - f"with the title '{paragraph['title']}.' The paragraph should have the recommended word count of {paragraph['word_count']} words. " - f"In order to effectively convey the main ideas and concepts of the paragraph, be sure to include relevant data, " - f"experiments, and other scientific evidence. Use a logical and scientific writing style that will keep the reader engaged and informed. " - f"The paragraph should be well-structured and coherent, with a clear introduction, body, and conclusion. Do not write a title.") diff --git a/src/categories/selfimprovement.py b/src/categories/selfimprovement.py deleted file mode 100644 index 2c6cc45..0000000 --- a/src/categories/selfimprovement.py +++ /dev/null @@ -1,114 +0,0 @@ -import openai -import retrying -from typing import List, Dict - - -class SelfImprovement: - """ - This class is used to generate a self-improvement book. - """ - - def __init__(self, chapter_amount: int, words_per_chapter: int, topic: str, language: str): - """ - Initialize the class. - :param chapter_amount: The amount of chapters in the book. - :param words_per_chapter: The amount of words per chapter. - :param topic: The topic of the book. - """ - - self.chapter_amount = chapter_amount - self.words_per_chapter = words_per_chapter - self.topic = topic - self.language = language - - @staticmethod - @retrying.retry(stop_max_attempt_number=5, wait_fixed=1000, retry_on_exception=lambda e: isinstance(e, openai.error.ServiceUnavailableError or openai.error.RateLimitError)) - def get_response(prompt: str): - """ - Gets a response from the API. - :param prompt: The prompt to send to the API. - :return: The response from the API. - """ - - return openai.Completion.create( - engine="text-davinci-003", - prompt=prompt, - temperature=0.7, - max_tokens=1500, - top_p=1, - frequency_penalty=0, - presence_penalty=0 - ).choices[0].text - - def get_title(self): - """ - Gets the title of the book. - :return: The title of the book. - """ - - return self.get_response( - f"Generate a title for a self-improvement book on {self.topic} in {self.language}. " - f"The title should be catchy and memorable, and should accurately reflect the content and purpose of the book. " - f"The book will contain practical advice, exercises, and case studies to help readers achieve their goals and improve their lives. " - f"The title should be motivating and empowering, and should encourage readers to take action.") - - def get_chapters(self, title: str): - """ - Gets the chapters of the book. - :param title: The title of the book. - :return: The chapters of the book. - """ - - return self.get_response( - f"Generate a list of the size {self.chapter_amount} of chapter titles for a self-improvement book called {title} in {self.language}. " - f"Each chapter should cover a specific topic and should be structured as a series of " - f"lessons or steps that the reader can follow to achieve a specific goal. " - f"The chapter titles should be descriptive and should clearly convey the main focus of each chapter. " - f"The chapters should be motivational and empowering, and should encourage the reader to take action.") - - def get_structure(self, title: str, chapters: list[str]): - """ - Gets the structure of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :return: The structure of the book. - """ - - return self.get_response( - f"Generate a structure plan for a self-improvement book called {title} in {self.language}. " - f"The book should contain {self.chapter_amount} chapters, with the following titles: {','.join(chapters)} " - f"Each chapter should be structured as a series of lessons or steps that the reader can follow to achieve a specific goal. " - f"The chapters should include practical tips, exercises, and case studies to help the reader apply the concepts. " - f"The book should be motivational and empowering, and should encourage the reader to take action." - f"\n\nFor each chapter, create a list of paragraph titles and corresponding recommended word counts in the following format: " - f"'paragraph_title---word_amount.' The paragraph titles should not include the word 'paragraph' or a number. " - f"The total recommended word count for all paragraphs in each chapter should add up to {self.words_per_chapter} words. " - f"In order to prevent any individual paragraph from being too long, " - f"try to divide the content into multiple paragraphs, each with a recommended word count.") - - def get_paragraph(self, title: str, chapters: List[str], paragraphs: List[List[Dict[str, str]]], - paragraph_index: int, chapter_index: int): - """ - Gets a paragraph of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :param paragraphs: The paragraphs of the book. - :param paragraph_index: The index of the paragraph. - :param chapter_index: The index of the chapter. - :return: The paragraph of the book. - """ - - paragraphs = paragraphs[chapter_index] - titles = '\n'.join([paragraph["title"] + ' - ' + paragraph["word_count"] for paragraph in paragraphs]) - paragraph = paragraphs[paragraph_index] - return self.get_response( - f"Generate the content for Chapter {chapter_index + 1} in {self.language} of a self-improvement book called {title}. " - f"The chapter is called {chapters[chapter_index]}, " - f"and should be structured as a series of lessons or steps that the reader can follow to achieve a specific goal. " - f"It should include practical tips, exercises, and case studies to help the reader apply the concepts. " - f"The chapter should be motivational and empowering, and should encourage the reader to take action." - f"\n\nThe chapter contains the following paragraphs:\n{titles}\nWrite the content for paragraph {paragraph_index + 1}, " - f"with the title '{paragraph['title']}.' The paragraph should have the recommended word count of {paragraph['word_count']} words. " - f"In order to effectively convey the main ideas and concepts of the paragraph, be sure to include relevant examples, " - f"anecdotes, and supporting evidence. Use a clear and engaging writing style that will keep the reader motivated and engaged. " - f"The paragraph should be well-organized and coherent, with a clear introduction, body, and conclusion. Do not write a title.") diff --git a/src/categories/travel.py b/src/categories/travel.py deleted file mode 100644 index d83ff9c..0000000 --- a/src/categories/travel.py +++ /dev/null @@ -1,114 +0,0 @@ -import openai -import retrying -from typing import List, Dict - - -class Travel: - """ - This class is used to generate a self-help book. - """ - - def __init__(self, chapter_amount: int, words_per_chapter: int, topic: str, language: str): - """ - Initialize the class. - :param chapter_amount: The amount of chapters in the book. - :param words_per_chapter: The amount of words per chapter. - :param topic: The topic of the book. - """ - - self.chapter_amount = chapter_amount - self.words_per_chapter = words_per_chapter - self.topic = topic - self.language = language - - @staticmethod - @retrying.retry(stop_max_attempt_number=5, wait_fixed=1000, retry_on_exception=lambda e: isinstance(e, openai.error.ServiceUnavailableError or openai.error.RateLimitError)) - def get_response(prompt: str): - """ - Gets a response from the API. - :param prompt: The prompt to send to the API. - :return: The response from the API. - """ - - return openai.Completion.create( - engine="text-davinci-003", - prompt=prompt, - temperature=0.7, - max_tokens=1500, - top_p=1, - frequency_penalty=0, - presence_penalty=0 - ).choices[0].text - - def get_title(self): - """ - Gets the title of the book. - :return: The title of the book. - """ - - return self.get_response( - f"Generate a title for a travel book on {self.topic} in {self.language}. " - f"The title should be exciting and memorable, and should accurately reflect the content and purpose of the book. " - f"The book will contain travel stories, tips, and recommendations for destinations in the specified region. " - f"The title should be enticing and practical, and should encourage readers to embark on their own travels.") - - def get_chapters(self, title: str): - """ - Gets the chapters of the book. - :param title: The title of the book. - :return: The chapters of the book. - """ - - return self.get_response( - f"Generate a list of the size {self.chapter_amount} of chapter titles for a travel book called {title} in {self.language}. " - f"Each chapter should cover a specific destination or theme and should be structured as a series of " - f"lessons or steps that the reader can follow to plan and execute a successful trip. " - f"The chapter titles should be descriptive and should clearly convey the main focus of each chapter. " - f"The chapters should be informative and inspiring, and should encourage the reader to explore new destinations and cultures.") - - def get_structure(self, title: str, chapters: List[str]): - """ - Gets the structure of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :return: The structure of the book. - """ - - return self.get_response( - f"Generate a structure plan for a travel book called {title} in {self.language}. " - f"The book should contain {self.chapter_amount} chapters, with the following titles: {','.join(chapters)} " - f"Each chapter should be structured as a guide to a specific destination or region, including information on culture, attractions, and practical tips for travelers. " - f"The chapters should include maps, photographs, and recommendations for accommodation, transportation, and activities. " - f"The book should be informative and inspiring, and should encourage the reader to explore the world and experience new cultures. " - f"\n\nFor each chapter, create a list of paragraph titles and corresponding recommended word counts in the following format: " - f"'paragraph_title---word_amount.' The paragraph titles should not include the word 'paragraph' or a number. " - f"The total recommended word count for all paragraphs in each chapter should add up to {self.words_per_chapter} words. " - f"In order to prevent any individual paragraph from being too long, " - f"try to divide the content into multiple paragraphs, each with a recommended word count.") - - def get_paragraph(self, title: str, chapters: List[str], paragraphs: List[List[Dict[str, str]]], - paragraph_index: int, chapter_index: int): - """ - Gets a paragraph of the book. - :param title: The title of the book. - :param chapters: The chapters of the book. - :param paragraphs: The paragraphs of the book. - :param paragraph_index: The index of the paragraph. - :param chapter_index: The index of the chapter. - :return: The paragraph of the book. - """ - - paragraphs = paragraphs[chapter_index] - titles = '\n'.join([paragraph["title"] + ' - ' + paragraph["word_count"] for paragraph in paragraphs]) - paragraph = paragraphs[paragraph_index] - return self.get_response( - f"Write the content for Chapter {chapter_index + 1} in {self.language} of a travel book called {title}. The chapter is called {chapters[chapter_index]}, " - f"and should focus on discussing a specific destination, including its culture, history, and attractions. " - f"The chapter should include a clear explanation of the location and its significance, as well as supporting evidence and examples to illustrate the experiences and attractions that can be found there. " - f"The chapter should also provide practical information and tips for travelers, such as where to stay, what to eat, and how to get around. " - f"The chapter should be written in a clear and engaging style, and should be well-organized and easy to follow. " - f"\n\nThe chapter contains the following paragraphs:\n{titles}\nWrite the content for paragraph {paragraph_index + 1}, " - f"with the title '{paragraph['title']}.' The paragraph should have the recommended word count of {paragraph['word_count']} words. " - f"In order to effectively convey the main ideas and concepts of the paragraph, be sure to include relevant information, " - f"anecdotes, and other sources. Use a clear and engaging writing style that will keep the reader interested and informed. " - f"The paragraph should be well-structured and coherent, with a clear introduction, body, and conclusion. Do not write a title.") diff --git a/src/utils/__pycache__/utils.cpython-310.pyc b/src/utils/__pycache__/utils.cpython-310.pyc index 8e9db1142bed26c93ba33bdc38e823f6566daa6b..c32283891269e44866e553f501a62536e0b7ec66 100644 GIT binary patch delta 695 zcmZWm%}N|W5bo-3cYDX#alxO+Do6|lmf*qUDqeDt9K7gh2$5lW90zB1mY$Xn5%%Iu za)|Q+dNW5a##hK8=fJ*z2zdh!NmVa<*)-Hw)m>fneO-Ou`ZF7p?Y75o{k(mQf6H&d z>ZcF5(@aCo!m)=CaL;pIh)@92Z7sCCfKcig-MC=kjBaX$zM)&%L*LZ1+DET6?6Y3* zMD6#!!$_tF2m5y)1AzJZ1l|q?KEgT#unZmOa`|j169d9zQ7q8jqgABWvTJtE zZioQ(dN5K&WKMMXxsP#s5+5FAd1B`A`WO~48mTm~hsUR)1Q z&h?@xn3o8z>SwVv+;G>;YdUrLHx#*11;iCcHc3m9CDjTh-0&4w!V?@Cf6eB&n*OKP zGV4^jh!D!u+RD(ExzBX-HC@^gpDP=)ZB4yTZ5O3J&66E!S#=N;Q{aOqR7*)EefbYl CN`oW- delta 384 zcmaFEy^WJEpO=@50SM-^?n?g2JdsbvNDatKVMt-jVTfW#;YeXhVQyiJVoYI4VQpcE zVoG64VF%L8DU87knw&2|TKzV5@G&w9PM*$aB+UclvjA~1h@r&D$0)%lz$nGU^1Fy< z@(HFL(t<$YA}}EYWZmMj$;m7(NzTtLu;ZINo7qDbO