Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -102,12 +102,19 @@ else:
|
|
102 |
"""
|
103 |
try:
|
104 |
# Create the system message for ChatGPT
|
105 |
-
|
106 |
"role": "system",
|
107 |
-
"content": '''You are
|
108 |
-
|
109 |
-
|
110 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
}]
|
112 |
|
113 |
# Initialize OpenAI client with basic configuration
|
@@ -125,19 +132,17 @@ else:
|
|
125 |
if not _issues and len(_items) > 0:
|
126 |
# Case 1: When there are NO issues but there ARE items
|
127 |
template = """
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
The website's homepage also references the following entities: {topics} that could be used to improve the SEO of the website further.
|
133 |
-
|
134 |
-
Third text block of the report.
|
135 |
-
Describe, if available, IN A SINGLE SENTENCE the {technologies} that the site appears to be using and what they do.
|
136 |
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
|
|
141 |
"""
|
142 |
prompt = PromptTemplate(
|
143 |
template=template,
|
@@ -153,19 +158,16 @@ else:
|
|
153 |
elif not _items:
|
154 |
# Case 2: When there are NO schema classes
|
155 |
template = """
|
156 |
-
|
157 |
-
|
|
|
158 |
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
THE OUTPUT MUST USE THE FOLLOWING TEMPLATE:
|
166 |
-
"first": "First text block",
|
167 |
-
"second": "Second text block with entities in <b>bold</b>",
|
168 |
-
"third": "Third text block with technologies in <i>italic</i>"
|
169 |
"""
|
170 |
prompt = PromptTemplate(
|
171 |
template=template,
|
@@ -179,23 +181,19 @@ else:
|
|
179 |
else:
|
180 |
# Case 3: When there ARE issues
|
181 |
template = """
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
"first": "First text block with schema classes in <i>italic</i>",
|
196 |
-
"second": "Second text block with issues in <u>underline</u>",
|
197 |
-
"third": "Third text block with entities in <b>bold</b>",
|
198 |
-
"fourth": "Fourth text block with technologies in <i>italic</i>"
|
199 |
"""
|
200 |
prompt = PromptTemplate(
|
201 |
template=template,
|
@@ -218,8 +216,7 @@ else:
|
|
218 |
response = client.chat.completions.create(
|
219 |
model="gpt-4o",
|
220 |
messages=messages,
|
221 |
-
temperature=0.
|
222 |
-
max_tokens=1500
|
223 |
)
|
224 |
if hasattr(response.choices[0].message, 'content'):
|
225 |
out = response.choices[0].message.content
|
@@ -240,6 +237,11 @@ else:
|
|
240 |
error_message = f"An unexpected error occurred: {str(e)}"
|
241 |
print(error_message) # Log the error for debugging
|
242 |
return error_message
|
|
|
|
|
|
|
|
|
|
|
243 |
|
244 |
# Call WooRank API to get the data (cached)
|
245 |
@st.cache_data
|
|
|
102 |
"""
|
103 |
try:
|
104 |
# Create the system message for ChatGPT
|
105 |
+
prefix_messages = [{
|
106 |
"role": "system",
|
107 |
+
"content": '''You are an SEO expert specializing in structured data analysis. Your task is to create JSON-formatted reports about websites' structured data.
|
108 |
+
|
109 |
+
Key requirements:
|
110 |
+
1. Always format output as a valid JSON object
|
111 |
+
2. Use the exact structure provided in the template
|
112 |
+
3. Include HTML formatting (<i>, <b>, <u>) as specified
|
113 |
+
4. Add relevant links to structured data (https://wordlift.io/blog/en/entity/structured-data/) and schema.org (https://wordlift.io/blog/en/entity/schema-org/) in the first section
|
114 |
+
5. Keep responses concise but informative
|
115 |
+
6. Ensure proper JSON escaping for quotes and special characters
|
116 |
+
|
117 |
+
Remember: The output must be a single, valid JSON object that can be parsed without additional processing.'''
|
118 |
}]
|
119 |
|
120 |
# Initialize OpenAI client with basic configuration
|
|
|
132 |
if not _issues and len(_items) > 0:
|
133 |
# Case 1: When there are NO issues but there ARE items
|
134 |
template = """
|
135 |
+
Based on the following data, create a JSON object with three parts:
|
136 |
+
1. {advice} and schema classes: {items}
|
137 |
+
2. Entities found: {topics}
|
138 |
+
3. Technologies: {technologies}
|
|
|
|
|
|
|
|
|
139 |
|
140 |
+
Structure your response as a valid JSON object with this exact format:
|
141 |
+
{{
|
142 |
+
"first": "Analysis of schema classes with classes marked in <i>italic</i>",
|
143 |
+
"second": "Description of entities marked in <b>bold</b>",
|
144 |
+
"third": "Description of technologies in <i>italic</i>"
|
145 |
+
}}
|
146 |
"""
|
147 |
prompt = PromptTemplate(
|
148 |
template=template,
|
|
|
158 |
elif not _items:
|
159 |
# Case 2: When there are NO schema classes
|
160 |
template = """
|
161 |
+
Create a JSON object for a website with no schema classes, based on:
|
162 |
+
1. Entities found: {topics}
|
163 |
+
2. Technologies: {technologies}
|
164 |
|
165 |
+
Structure your response as a valid JSON object with this exact format:
|
166 |
+
{{
|
167 |
+
"first": "Notice about missing schema classes",
|
168 |
+
"second": "Description of entities marked in <b>bold</b>",
|
169 |
+
"third": "Description of technologies in <i>italic</i>"
|
170 |
+
}}
|
|
|
|
|
|
|
|
|
171 |
"""
|
172 |
prompt = PromptTemplate(
|
173 |
template=template,
|
|
|
181 |
else:
|
182 |
# Case 3: When there ARE issues
|
183 |
template = """
|
184 |
+
Create a JSON object based on the following data:
|
185 |
+
1. {advice} and schema classes: {items}
|
186 |
+
2. Markup issues: {issues}
|
187 |
+
3. Entities found: {topics}
|
188 |
+
4. Technologies: {technologies}
|
189 |
|
190 |
+
Structure your response as a valid JSON object with this exact format:
|
191 |
+
{{
|
192 |
+
"first": "Analysis of schema classes with classes marked in <i>italic</i>",
|
193 |
+
"second": "Description of issues marked in <u>underline</u>",
|
194 |
+
"third": "Description of entities marked in <b>bold</b>",
|
195 |
+
"fourth": "Description of technologies in <i>italic</i>"
|
196 |
+
}}
|
|
|
|
|
|
|
|
|
197 |
"""
|
198 |
prompt = PromptTemplate(
|
199 |
template=template,
|
|
|
216 |
response = client.chat.completions.create(
|
217 |
model="gpt-4o",
|
218 |
messages=messages,
|
219 |
+
temperature=0.2,
|
|
|
220 |
)
|
221 |
if hasattr(response.choices[0].message, 'content'):
|
222 |
out = response.choices[0].message.content
|
|
|
237 |
error_message = f"An unexpected error occurred: {str(e)}"
|
238 |
print(error_message) # Log the error for debugging
|
239 |
return error_message
|
240 |
+
|
241 |
+
except Exception as e:
|
242 |
+
error_message = f"An unexpected error occurred: {str(e)}"
|
243 |
+
print(error_message) # Log the error for debugging
|
244 |
+
return error_message
|
245 |
|
246 |
# Call WooRank API to get the data (cached)
|
247 |
@st.cache_data
|