Nechba commited on
Commit
c9eca86
·
verified ·
1 Parent(s): b1caa41

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +162 -153
utils.py CHANGED
@@ -1,153 +1,162 @@
1
- import google.generativeai as genai
2
-
3
- genai.configure(api_key="AIzaSyCdIOCNM7NmCeu5TS30TxZx6ldN4gSDoTI")
4
- def call_ai_api(prompt):
5
- # Set up the model
6
- generation_config = {
7
- "temperature": 1,
8
- "top_p": 0.95,
9
- "max_output_tokens": 5000000,
10
- }
11
- model = genai.GenerativeModel(model_name="gemini-1.5-pro-latest",
12
- generation_config=generation_config)
13
- response = model.generate_content(prompt)
14
- return response.text
15
-
16
-
17
- def generer_prompt_seo(titre_article, mot_cle_principal, ton_cible, mots_cles_associes):
18
- mots_cles_lexicaux = mots_cles_associes
19
- prompt = f"""
20
- CONTEXTE:
21
- Veuillez écrire un article de 1500 - 2000 mots. N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
22
- Vous êtes un rédacteur SEO chargé de composer un article de blog optimisé pour le SEO sur le sujet suivant.
23
- Voici les informations et directives à suivre :
24
-
25
- Titre de l'article : {titre_article}
26
- Mot-clé principal : {mot_cle_principal}
27
- Ton et/ou public cible : {ton_cible}
28
- Mots-clés lexicaux à inclure : {mots_cles_lexicaux}
29
-
30
- INSTRUCTIONS:
31
- NOMBRE DE MOTS : 1000 à 1500
32
- ### Règles de rédaction :
33
- N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
34
- 1. Structure de l'article avec des titres hiérarchisés.
35
- 2. Optimisation du mot-clé principal (densité d'environ 1,5%, utilisation dans le titre SEO, méta description, et répartition uniforme).
36
- 3. Inclusion de sous-titres et de mots-clés LSI pour enrichir le contenu sans bourrage de mots-clés.
37
- 4. Titres et méta descriptions attractifs avec appels à l'action.
38
- 5. Ton informatif et engageant, avec une variété de vocabulaire.
39
- 6. Introduction et conclusion engageantes avec le mot-clé principal.
40
- 7. Section FAQ avec trois questions/réponses courtes.
41
- 8. Au moins un lien externe vers une source crédible.
42
- N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
43
- Assurez que l'article soit lisible, bien structuré et visuellement attrayant.
44
- """
45
- return prompt
46
- def generate_seo_prompt(article_title, main_keyword, target_tone, associated_keywords):
47
- lexical_keywords = associated_keywords
48
- prompt = f"""
49
- CONTEXT:
50
- Please write an article of 1500 - 2000 words. Feel free to take your time to think about your response, I need a long article.
51
- You are an SEO writer tasked with composing an SEO-optimized blog article on the following topic.
52
- Here are the information and guidelines to follow:
53
-
54
- Article title: {article_title}
55
- Main keyword: {main_keyword}
56
- Target tone and/or audience: {target_tone}
57
- Lexical keywords to include: {lexical_keywords}
58
-
59
- INSTRUCTIONS:
60
- WORD COUNT: 1000 to 1500
61
- ### Writing rules:
62
- Feel free to take your time to think about your response, I need a long article.
63
- 1. Structure the article with hierarchical headings.
64
- 2. Optimize the main keyword (density of about 1.5%, use in the SEO title, meta description, and evenly distributed).
65
- 3. Include subheadings and LSI keywords to enrich the content without keyword stuffing.
66
- 4. Attractive titles and meta descriptions with calls to action.
67
- 5. Informative and engaging tone, with a variety of vocabulary.
68
- 6. Engaging introduction and conclusion with the main keyword.
69
- 7. FAQ section with three short questions/answers.
70
- 8. At least one external link to a credible source.
71
- Feel free to take your time to think about your response, I need a long article.
72
- Ensure that the article is readable, well-structured, and visually appealing.
73
- """
74
- return prompt
75
-
76
-
77
- def create_pipeline_fr(titre_article, mot_cle_principal, ton_cible):
78
- # Initial AI API call
79
- mots_cles_champ_lexical=generer_mots(titre_article,mot_cle_principal)
80
- pp=generer_prompt_seo(titre_article, mot_cle_principal, ton_cible, mots_cles_champ_lexical)
81
- rep = call_ai_api(pp)
82
- # Second AI API call with additional elaboration request
83
- prompt2 = f"D'après le prompt {pp}, j'ai eu le résultat suivant : {rep}. Élaborer plus que ça."
84
- rep2 = call_ai_api(prompt2)
85
-
86
- # Third AI API call with further instructions
87
- prompt3 = (f"D'après le prompt {pp}, j'ai eu le résultat suivant : {rep}. Élaborer plus que ça. {rep2} "
88
- "Le texte est toujours beaucoup trop court. Aussi, il n'y a aucune gestion des titres, le premier est un H2, "
89
- "et les sous-titres sont balisés comme des paragraphes. Concernant le lien tout à la fin, il faudrait qu'il soit intégré au texte. "
90
- "Dernier point, la meta description ne doit pas apparaître quand on demande un article.")
91
- rep3 = call_ai_api(prompt3)
92
-
93
- # Fourth AI API call to fix title issues and meta description
94
- prompt4 = ("Fix ça : Mauvaise gestion des titres, le premier titre doit être un H1. Le mot-clé principal n'est pas assez utilisé, il faut une densité de 1,5%. "
95
- "Le titre ne doit contenir une majuscule que sur le premier mot de la phrase, pas sur les autres. "
96
- "La meta description ne doit pas être rédigée. " + rep3)
97
- rep4 = call_ai_api(prompt4)
98
-
99
- # Fifth AI API call to fix keyword density and internal link
100
- prompt5 = (f"Fix ça - Le mot-clé principal : {mot_cle_principal} n'est pas assez utilisé, il faut une densité de 1,5% environ. "
101
- "Ajoute un lien à l'intérieur d'un texte, et rends le FAQ après la conclusion. et n'ajoute pas de remarque a la fin je veux que dans la sortie que du texte " + rep4)
102
- rep5 = call_ai_api(prompt5)
103
-
104
- # Sixth AI API call to ensure the text length
105
- prompt6 = ("Trop court, seulement j'aurai besoin de 1500 mots minimum attendu. "
106
- "Laisse la même structure de texte, ajoute juste du contenu. " + rep5)
107
- rep6 = call_ai_api(prompt6)
108
-
109
- return rep6
110
-
111
- def create_pipeline(article_title, main_keyword, target_tone):
112
- # Initial AI API call
113
- lexical_field_keywords=generate_words(article_title, main_keyword)
114
- pp = generate_seo_prompt(article_title, main_keyword, target_tone, lexical_field_keywords)
115
-
116
- rep = call_ai_api(pp)
117
-
118
- # Second AI API call with additional elaboration request
119
- prompt2 = f"Based on the prompt {pp}, I got the following result: {rep}. Elaborate further."
120
- rep2 = call_ai_api(prompt2)
121
-
122
- # Third AI API call with further instructions
123
- prompt3 = (f"Based on the prompt {pp}, I got the following result: {rep}. Elaborate further. {rep2} "
124
- "The text is still way too short. Also, there is no title management, the first title is an H2, "
125
- "and the subtitles are marked as paragraphs. Regarding the link at the end, it should be integrated into the text. "
126
- "Lastly, the meta description should not appear when requesting an article.")
127
- rep3 = call_ai_api(prompt3)
128
-
129
- # Fourth AI API call to fix title issues and meta description
130
- prompt4 = ("Fix this: Poor title management, the first title must be an H1. The main keyword is not used enough, it should have a density of 1.5%. "
131
- "The title should only have a capital letter on the first word of the sentence, not on the others. "
132
- "The meta description should not be written. " + rep3)
133
- rep4 = call_ai_api(prompt4)
134
-
135
- # Fifth AI API call to fix keyword density and internal link
136
- prompt5 = (f"Fix this - The main keyword: {main_keyword} is not used enough, it should have a density of about 1.5%. "
137
- "Add a link inside the text, and place the FAQ after the conclusion. " + rep4)
138
- rep5 = call_ai_api(prompt5)
139
-
140
- # Sixth AI API call to ensure the text length
141
- prompt6 = ("Too short, I need a minimum of 1500 words expected. "
142
- "Keep the same text structure, just add more content. " + rep5)
143
- rep6 = call_ai_api(prompt6)
144
-
145
- return rep6
146
-
147
- def generer_mots(titre_article,mot_cle_principal):
148
- words=call_ai_api("Generes moi des mots-clés similaires a partir de ca ( SEULEMENT DES MOTS OU GROUPE DE MOTS séparés par virgules ) :"+titre_article+" et "+mot_cle_principal)
149
- return words
150
-
151
- def generate_words(article_title, main_keyword):
152
- words = call_ai_api("Generate similar keywords from these (ONLY WORDS OR GROUPS OF WORDS separated by commas): " + article_title + " and " + main_keyword)
153
- return words
 
 
 
 
 
 
 
 
 
 
1
+ import google.generativeai as genai
2
+
3
+ genai.configure(api_key="AIzaSyCdIOCNM7NmCeu5TS30TxZx6ldN4gSDoTI")
4
+ def call_ai_api(prompt):
5
+ # Set up the model
6
+ generation_config = {
7
+ "temperature": 1,
8
+ "top_p": 0.95,
9
+ "max_output_tokens": 5000000,
10
+ }
11
+ model = genai.GenerativeModel(model_name="gemini-1.5-pro-latest",
12
+ generation_config=generation_config)
13
+ response = model.generate_content(prompt)
14
+ return response.text
15
+
16
+
17
+ def generer_prompt_seo(titre_article, mot_cle_principal, ton_cible, mots_cles_associes,optional_text):
18
+ mots_cles_lexicaux = mots_cles_associes
19
+ if optional_text :
20
+ p=f"""Données optionnel sur l'article : {optional_text}"""
21
+ else:
22
+ p=""
23
+ prompt = f"""
24
+ CONTEXTE:
25
+ Veuillez écrire un article de 1500 - 2000 mots. N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
26
+ Vous êtes un rédacteur SEO chargé de composer un article de blog optimisé pour le SEO sur le sujet suivant.
27
+ Voici les informations et directives à suivre :
28
+
29
+ Titre de l'article : {titre_article}
30
+ Mot-clé principal : {mot_cle_principal}
31
+ Ton et/ou public cible : {ton_cible}
32
+ Mots-clés lexicaux à inclure : {mots_cles_lexicaux}"""
33
+ +p+"""
34
+
35
+ INSTRUCTIONS:
36
+ NOMBRE DE MOTS : 1000 à 1500
37
+ ### Règles de rédaction :
38
+ N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
39
+ 1. Structure de l'article avec des titres hiérarchisés.
40
+ 2. Optimisation du mot-clé principal (densité d'environ 1,5%, utilisation dans le titre SEO, méta description, et répartition uniforme).
41
+ 3. Inclusion de sous-titres et de mots-clés LSI pour enrichir le contenu sans bourrage de mots-clés.
42
+ 4. Titres et méta descriptions attractifs avec appels à l'action.
43
+ 5. Ton informatif et engageant, avec une variété de vocabulaire.
44
+ 6. Introduction et conclusion engageantes avec le mot-clé principal.
45
+ 7. Section FAQ avec trois questions/réponses courtes.
46
+ 8. Au moins un lien externe vers une source crédible.
47
+ N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
48
+ Assurez que l'article soit lisible, bien structuré et visuellement attrayant.
49
+ """
50
+ return prompt
51
+ def generate_seo_prompt(article_title, main_keyword, target_tone, associated_keywords,optional_text):
52
+ lexical_keywords = associated_keywords
53
+ if optional_text :
54
+ p=f"""Optional article data : {optional_text}"""
55
+ else:
56
+ p=""
57
+ prompt = f"""
58
+ CONTEXT:
59
+ Please write an article of 1500 - 2000 words. Feel free to take your time to think about your response, I need a long article.
60
+ You are an SEO writer tasked with composing an SEO-optimized blog article on the following topic.
61
+ Here are the information and guidelines to follow:
62
+
63
+ Article title: {article_title}
64
+ Main keyword: {main_keyword}
65
+ Target tone and/or audience: {target_tone}
66
+ Lexical keywords to include: {lexical_keywords}"""+p+"""
67
+
68
+ INSTRUCTIONS:
69
+ WORD COUNT: 1000 to 1500
70
+ ### Writing rules:
71
+ Feel free to take your time to think about your response, I need a long article.
72
+ 1. Structure the article with hierarchical headings.
73
+ 2. Optimize the main keyword (density of about 1.5%, use in the SEO title, meta description, and evenly distributed).
74
+ 3. Include subheadings and LSI keywords to enrich the content without keyword stuffing.
75
+ 4. Attractive titles and meta descriptions with calls to action.
76
+ 5. Informative and engaging tone, with a variety of vocabulary.
77
+ 6. Engaging introduction and conclusion with the main keyword.
78
+ 7. FAQ section with three short questions/answers.
79
+ 8. At least one external link to a credible source.
80
+ Feel free to take your time to think about your response, I need a long article.
81
+ Ensure that the article is readable, well-structured, and visually appealing.
82
+ """
83
+ return prompt
84
+
85
+
86
+ def create_pipeline_fr(titre_article, mot_cle_principal, ton_cible):
87
+ # Initial AI API call
88
+ mots_cles_champ_lexical=generer_mots(titre_article,mot_cle_principal)
89
+ pp=generer_prompt_seo(titre_article, mot_cle_principal, ton_cible, mots_cles_champ_lexical)
90
+ rep = call_ai_api(pp)
91
+ # Second AI API call with additional elaboration request
92
+ prompt2 = f"D'après le prompt {pp}, j'ai eu le résultat suivant : {rep}. Élaborer plus que ça."
93
+ rep2 = call_ai_api(prompt2)
94
+
95
+ # Third AI API call with further instructions
96
+ prompt3 = (f"D'après le prompt {pp}, j'ai eu le résultat suivant : {rep}. Élaborer plus que ça. {rep2} "
97
+ "Le texte est toujours beaucoup trop court. Aussi, il n'y a aucune gestion des titres, le premier est un H2, "
98
+ "et les sous-titres sont balisés comme des paragraphes. Concernant le lien tout à la fin, il faudrait qu'il soit intégré au texte. "
99
+ "Dernier point, la meta description ne doit pas apparaître quand on demande un article.")
100
+ rep3 = call_ai_api(prompt3)
101
+
102
+ # Fourth AI API call to fix title issues and meta description
103
+ prompt4 = ("Fix ça : Mauvaise gestion des titres, le premier titre doit être un H1. Le mot-clé principal n'est pas assez utilisé, il faut une densité de 1,5%. "
104
+ "Le titre ne doit contenir une majuscule que sur le premier mot de la phrase, pas sur les autres. "
105
+ "La meta description ne doit pas être rédigée. " + rep3)
106
+ rep4 = call_ai_api(prompt4)
107
+
108
+ # Fifth AI API call to fix keyword density and internal link
109
+ prompt5 = (f"Fix ça - Le mot-clé principal : {mot_cle_principal} n'est pas assez utilisé, il faut une densité de 1,5% environ. "
110
+ "Ajoute un lien à l'intérieur d'un texte, et rends le FAQ après la conclusion. et n'ajoute pas de remarque a la fin je veux que dans la sortie que du texte " + rep4)
111
+ rep5 = call_ai_api(prompt5)
112
+
113
+ # Sixth AI API call to ensure the text length
114
+ prompt6 = ("Trop court, seulement j'aurai besoin de 1500 mots minimum attendu. "
115
+ "Laisse la même structure de texte, ajoute juste du contenu. " + rep5)
116
+ rep6 = call_ai_api(prompt6)
117
+
118
+ return rep6
119
+
120
+ def create_pipeline(article_title, main_keyword, target_tone):
121
+ # Initial AI API call
122
+ lexical_field_keywords=generate_words(article_title, main_keyword)
123
+ pp = generate_seo_prompt(article_title, main_keyword, target_tone, lexical_field_keywords)
124
+
125
+ rep = call_ai_api(pp)
126
+
127
+ # Second AI API call with additional elaboration request
128
+ prompt2 = f"Based on the prompt {pp}, I got the following result: {rep}. Elaborate further."
129
+ rep2 = call_ai_api(prompt2)
130
+
131
+ # Third AI API call with further instructions
132
+ prompt3 = (f"Based on the prompt {pp}, I got the following result: {rep}. Elaborate further. {rep2} "
133
+ "The text is still way too short. Also, there is no title management, the first title is an H2, "
134
+ "and the subtitles are marked as paragraphs. Regarding the link at the end, it should be integrated into the text. "
135
+ "Lastly, the meta description should not appear when requesting an article.")
136
+ rep3 = call_ai_api(prompt3)
137
+
138
+ # Fourth AI API call to fix title issues and meta description
139
+ prompt4 = ("Fix this: Poor title management, the first title must be an H1. The main keyword is not used enough, it should have a density of 1.5%. "
140
+ "The title should only have a capital letter on the first word of the sentence, not on the others. "
141
+ "The meta description should not be written. " + rep3)
142
+ rep4 = call_ai_api(prompt4)
143
+
144
+ # Fifth AI API call to fix keyword density and internal link
145
+ prompt5 = (f"Fix this - The main keyword: {main_keyword} is not used enough, it should have a density of about 1.5%. "
146
+ "Add a link inside the text, and place the FAQ after the conclusion. " + rep4)
147
+ rep5 = call_ai_api(prompt5)
148
+
149
+ # Sixth AI API call to ensure the text length
150
+ prompt6 = ("Too short, I need a minimum of 1500 words expected. "
151
+ "Keep the same text structure, just add more content. " + rep5)
152
+ rep6 = call_ai_api(prompt6)
153
+
154
+ return rep6
155
+
156
+ def generer_mots(titre_article,mot_cle_principal):
157
+ words=call_ai_api("Generes moi des mots-clés similaires a partir de ca ( SEULEMENT DES MOTS OU GROUPE DE MOTS séparés par virgules ) :"+titre_article+" et "+mot_cle_principal)
158
+ return words
159
+
160
+ def generate_words(article_title, main_keyword):
161
+ words = call_ai_api("Generate similar keywords from these (ONLY WORDS OR GROUPS OF WORDS separated by commas): " + article_title + " and " + main_keyword)
162
+ return words