This commit is contained in:
Magnus Bender 2024-10-31 15:14:52 +01:00
parent 784488e05b
commit e7910021dd
Signed by: bender
GPG Key ID: 5149A211831F2BD7
4 changed files with 331 additions and 235 deletions

View File

@ -192,22 +192,45 @@ class ExtractAgent(BasicAgent):
"""
@validate_call
def store_extracted(self, data:RiddleData, extracted:ExtractedData) -> str:
def store_extracted(self, data:RiddleData, extracted:ExtractedData, allow_overwrite:bool=True) -> str:
"""
Stores the newly extracted data (in `extracted`) from `data` (i.e., `data.file_plain`)
and returns the filename to use in `data.file_extracted`.
If there already exists an extracted file for this `data`, the file will be overwritten if `allow_overwrite=True`.
Generally the system will check, if the contents of the current file are equal to the contents to write.
File with equal content will not be written again.
"""
# get path and name
path_name = data.file_plain[:data.file_plain.rfind('.')]
candidate = "{}.json".format(path_name)
cnt = 0
while os.path.isfile(candidate):
cnt += 1
candidate = "{}-{}.json".format(path_name, cnt)
# data to write
data = extracted.model_dump_json()
# check for file
if os.path.isfile(candidate):
# get current content
with open(candidate, 'r') as f:
content = f.read()
# files equal -> no need to rewrite
if content == data:
return candidate
# not equal and overwrite not allowed
elif not allow_overwrite:
# get non-existent file name
cnt = 0
while os.path.isfile(candidate):
cnt += 1
candidate = "{}-{}.json".format(path_name, cnt)
# write file
with open(candidate, 'w+') as f:
f.write(extracted.model_dump_json())
f.write(data)
return candidate

File diff suppressed because one or more lines are too long

View File

@ -355,110 +355,133 @@
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="nd">@validate_call</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="k">def</span> <span class="nf">store_extracted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">,</span> <span class="n">extracted</span><span class="p">:</span><span class="n">ExtractedData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="k">def</span> <span class="nf">store_extracted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">,</span> <span class="n">extracted</span><span class="p">:</span><span class="n">ExtractedData</span><span class="p">,</span> <span class="n">allow_overwrite</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a><span class="sd"> Stores the newly extracted data (in `extracted`) from `data` (i.e., `data.file_plain`) </span>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a><span class="sd"> and returns the filename to use in `data.file_extracted`.</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">path_name</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">[:</span><span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)]</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">)</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">while</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">,</span> <span class="n">cnt</span><span class="p">)</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a><span class="sd"> If there already exists an extracted file for this `data`, the file will be overwritten if `allow_overwrite=True`.</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="sd"> Generally the system will check, if the contents of the current file are equal to the contents to write. </span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a><span class="sd"> File with equal content will not be written again.</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="c1"># get path and name</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">path_name</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">[:</span><span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)]</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">)</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;w+&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">extracted</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">())</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="c1"># data to write</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">data</span> <span class="o">=</span> <span class="n">extracted</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">()</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="c1"># check for file</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="k">class</span> <span class="nc">ExtractTextAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a><span class="sd"> An extraction agent for text, create a subclass for your agent.</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">TEXT</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a><span class="k">class</span> <span class="nc">ExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a><span class="sd"> An extraction agent for audio, create a subclass for your agent.</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">AUDIO</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="c1"># get current content</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="c1"># files equal -&gt; no need to rewrite</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">content</span> <span class="o">==</span> <span class="n">data</span><span class="p">:</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="c1"># not equal and overwrite not allowed</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">allow_overwrite</span><span class="p">:</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="c1"># get non-existent file name</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">while</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">,</span> <span class="n">cnt</span><span class="p">)</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a><span class="k">class</span> <span class="nc">ExtractImageAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a><span class="sd"> An extraction agent for images, create a subclass for your agent.</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">IMAGE</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="k">class</span> <span class="nc">SolveAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="sd"> A solve agent, create a subclass for your agent.</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">SOLVE</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty solution/ explanation after handling&quot;</span><span class="p">)</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solve</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="nd">@abstractmethod</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="nd">@validate_call</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">RiddleData</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="k">class</span> <span class="nc">GatekeeperAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> A gatekeeper agent, create a subclass for your agent.</span>
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">GATEKEEPER</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">)</span>
</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">accepted</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="k">if</span> <span class="n">solution</span><span class="o">.</span><span class="n">review</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty review after handling&quot;</span><span class="p">)</span>
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>
</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">validate</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span> <span class="o">=</span> <span class="n">solution</span><span class="o">.</span><span class="n">accepted</span>
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="nd">@abstractmethod</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="nd">@validate_call</span>
</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span><span class="n">Riddle</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a><span class="sd"> Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`.</span>
</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="c1"># write file</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;w+&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a><span class="k">class</span> <span class="nc">ExtractTextAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="sd"> An extraction agent for text, create a subclass for your agent.</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">TEXT</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a><span class="k">class</span> <span class="nc">ExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a><span class="sd"> An extraction agent for audio, create a subclass for your agent.</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">AUDIO</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="k">class</span> <span class="nc">ExtractImageAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a><span class="sd"> An extraction agent for images, create a subclass for your agent.</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">IMAGE</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="k">class</span> <span class="nc">SolveAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="sd"> A solve agent, create a subclass for your agent.</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">SOLVE</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty solution/ explanation after handling&quot;</span><span class="p">)</span>
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>
</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solve</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>
</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="nd">@abstractmethod</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="nd">@validate_call</span>
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">RiddleData</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a><span class="k">class</span> <span class="nc">GatekeeperAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a><span class="sd"> A gatekeeper agent, create a subclass for your agent.</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">GATEKEEPER</span>
</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>
</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>
</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">)</span>
</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">accepted</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>
</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="k">if</span> <span class="n">solution</span><span class="o">.</span><span class="n">review</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty review after handling&quot;</span><span class="p">)</span>
</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>
</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">validate</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span> <span class="o">=</span> <span class="n">solution</span><span class="o">.</span><span class="n">accepted</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>
</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="nd">@abstractmethod</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="nd">@validate_call</span>
</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span><span class="n">Riddle</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a><span class="sd"> Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`.</span>
</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>
@ -944,24 +967,47 @@ By changing a status, different steps can be (de-)selected.</p>
</span><span id="ExtractAgent-193"><a href="#ExtractAgent-193"><span class="linenos">193</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractAgent-194"><a href="#ExtractAgent-194"><span class="linenos">194</span></a>
</span><span id="ExtractAgent-195"><a href="#ExtractAgent-195"><span class="linenos">195</span></a> <span class="nd">@validate_call</span>
</span><span id="ExtractAgent-196"><a href="#ExtractAgent-196"><span class="linenos">196</span></a> <span class="k">def</span> <span class="nf">store_extracted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">,</span> <span class="n">extracted</span><span class="p">:</span><span class="n">ExtractedData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ExtractAgent-196"><a href="#ExtractAgent-196"><span class="linenos">196</span></a> <span class="k">def</span> <span class="nf">store_extracted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">,</span> <span class="n">extracted</span><span class="p">:</span><span class="n">ExtractedData</span><span class="p">,</span> <span class="n">allow_overwrite</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ExtractAgent-197"><a href="#ExtractAgent-197"><span class="linenos">197</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractAgent-198"><a href="#ExtractAgent-198"><span class="linenos">198</span></a><span class="sd"> Stores the newly extracted data (in `extracted`) from `data` (i.e., `data.file_plain`) </span>
</span><span id="ExtractAgent-199"><a href="#ExtractAgent-199"><span class="linenos">199</span></a><span class="sd"> and returns the filename to use in `data.file_extracted`.</span>
</span><span id="ExtractAgent-200"><a href="#ExtractAgent-200"><span class="linenos">200</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractAgent-201"><a href="#ExtractAgent-201"><span class="linenos">201</span></a>
</span><span id="ExtractAgent-202"><a href="#ExtractAgent-202"><span class="linenos">202</span></a> <span class="n">path_name</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">[:</span><span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)]</span>
</span><span id="ExtractAgent-203"><a href="#ExtractAgent-203"><span class="linenos">203</span></a>
</span><span id="ExtractAgent-204"><a href="#ExtractAgent-204"><span class="linenos">204</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">)</span>
</span><span id="ExtractAgent-205"><a href="#ExtractAgent-205"><span class="linenos">205</span></a> <span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="ExtractAgent-206"><a href="#ExtractAgent-206"><span class="linenos">206</span></a> <span class="k">while</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="ExtractAgent-207"><a href="#ExtractAgent-207"><span class="linenos">207</span></a> <span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="ExtractAgent-208"><a href="#ExtractAgent-208"><span class="linenos">208</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">,</span> <span class="n">cnt</span><span class="p">)</span>
</span><span id="ExtractAgent-200"><a href="#ExtractAgent-200"><span class="linenos">200</span></a>
</span><span id="ExtractAgent-201"><a href="#ExtractAgent-201"><span class="linenos">201</span></a><span class="sd"> If there already exists an extracted file for this `data`, the file will be overwritten if `allow_overwrite=True`.</span>
</span><span id="ExtractAgent-202"><a href="#ExtractAgent-202"><span class="linenos">202</span></a><span class="sd"> Generally the system will check, if the contents of the current file are equal to the contents to write. </span>
</span><span id="ExtractAgent-203"><a href="#ExtractAgent-203"><span class="linenos">203</span></a><span class="sd"> File with equal content will not be written again.</span>
</span><span id="ExtractAgent-204"><a href="#ExtractAgent-204"><span class="linenos">204</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractAgent-205"><a href="#ExtractAgent-205"><span class="linenos">205</span></a>
</span><span id="ExtractAgent-206"><a href="#ExtractAgent-206"><span class="linenos">206</span></a> <span class="c1"># get path and name</span>
</span><span id="ExtractAgent-207"><a href="#ExtractAgent-207"><span class="linenos">207</span></a> <span class="n">path_name</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">[:</span><span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)]</span>
</span><span id="ExtractAgent-208"><a href="#ExtractAgent-208"><span class="linenos">208</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">)</span>
</span><span id="ExtractAgent-209"><a href="#ExtractAgent-209"><span class="linenos">209</span></a>
</span><span id="ExtractAgent-210"><a href="#ExtractAgent-210"><span class="linenos">210</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;w+&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="ExtractAgent-211"><a href="#ExtractAgent-211"><span class="linenos">211</span></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">extracted</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">())</span>
</span><span id="ExtractAgent-210"><a href="#ExtractAgent-210"><span class="linenos">210</span></a> <span class="c1"># data to write</span>
</span><span id="ExtractAgent-211"><a href="#ExtractAgent-211"><span class="linenos">211</span></a> <span class="n">data</span> <span class="o">=</span> <span class="n">extracted</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">()</span>
</span><span id="ExtractAgent-212"><a href="#ExtractAgent-212"><span class="linenos">212</span></a>
</span><span id="ExtractAgent-213"><a href="#ExtractAgent-213"><span class="linenos">213</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span><span id="ExtractAgent-213"><a href="#ExtractAgent-213"><span class="linenos">213</span></a> <span class="c1"># check for file</span>
</span><span id="ExtractAgent-214"><a href="#ExtractAgent-214"><span class="linenos">214</span></a> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="ExtractAgent-215"><a href="#ExtractAgent-215"><span class="linenos">215</span></a>
</span><span id="ExtractAgent-216"><a href="#ExtractAgent-216"><span class="linenos">216</span></a> <span class="c1"># get current content</span>
</span><span id="ExtractAgent-217"><a href="#ExtractAgent-217"><span class="linenos">217</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="ExtractAgent-218"><a href="#ExtractAgent-218"><span class="linenos">218</span></a> <span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span><span id="ExtractAgent-219"><a href="#ExtractAgent-219"><span class="linenos">219</span></a>
</span><span id="ExtractAgent-220"><a href="#ExtractAgent-220"><span class="linenos">220</span></a> <span class="c1"># files equal -&gt; no need to rewrite</span>
</span><span id="ExtractAgent-221"><a href="#ExtractAgent-221"><span class="linenos">221</span></a> <span class="k">if</span> <span class="n">content</span> <span class="o">==</span> <span class="n">data</span><span class="p">:</span>
</span><span id="ExtractAgent-222"><a href="#ExtractAgent-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span><span id="ExtractAgent-223"><a href="#ExtractAgent-223"><span class="linenos">223</span></a>
</span><span id="ExtractAgent-224"><a href="#ExtractAgent-224"><span class="linenos">224</span></a> <span class="c1"># not equal and overwrite not allowed</span>
</span><span id="ExtractAgent-225"><a href="#ExtractAgent-225"><span class="linenos">225</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">allow_overwrite</span><span class="p">:</span>
</span><span id="ExtractAgent-226"><a href="#ExtractAgent-226"><span class="linenos">226</span></a> <span class="c1"># get non-existent file name</span>
</span><span id="ExtractAgent-227"><a href="#ExtractAgent-227"><span class="linenos">227</span></a> <span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="ExtractAgent-228"><a href="#ExtractAgent-228"><span class="linenos">228</span></a> <span class="k">while</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="ExtractAgent-229"><a href="#ExtractAgent-229"><span class="linenos">229</span></a> <span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="ExtractAgent-230"><a href="#ExtractAgent-230"><span class="linenos">230</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">,</span> <span class="n">cnt</span><span class="p">)</span>
</span><span id="ExtractAgent-231"><a href="#ExtractAgent-231"><span class="linenos">231</span></a>
</span><span id="ExtractAgent-232"><a href="#ExtractAgent-232"><span class="linenos">232</span></a> <span class="c1"># write file</span>
</span><span id="ExtractAgent-233"><a href="#ExtractAgent-233"><span class="linenos">233</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;w+&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="ExtractAgent-234"><a href="#ExtractAgent-234"><span class="linenos">234</span></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="ExtractAgent-235"><a href="#ExtractAgent-235"><span class="linenos">235</span></a>
</span><span id="ExtractAgent-236"><a href="#ExtractAgent-236"><span class="linenos">236</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span></pre></div>
@ -1051,36 +1097,63 @@ By changing a status, different steps can be (de-)selected.</p>
<div class="decorator">@validate_call</div>
<span class="def">def</span>
<span class="name">store_extracted</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">data</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#RiddleData">ums.utils.types.RiddleData</a></span>,</span><span class="param"> <span class="n">extracted</span><span class="p">:</span> <span class="n"><a href="../utils/schema.html#ExtractedData">ums.utils.schema.ExtractedData</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<span class="name">store_extracted</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">data</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#RiddleData">ums.utils.types.RiddleData</a></span>,</span><span class="param"> <span class="n">extracted</span><span class="p">:</span> <span class="n"><a href="../utils/schema.html#ExtractedData">ums.utils.schema.ExtractedData</a></span>,</span><span class="param"> <span class="n">allow_overwrite</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="ExtractAgent.store_extracted-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ExtractAgent.store_extracted"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractAgent.store_extracted-195"><a href="#ExtractAgent.store_extracted-195"><span class="linenos">195</span></a> <span class="nd">@validate_call</span>
</span><span id="ExtractAgent.store_extracted-196"><a href="#ExtractAgent.store_extracted-196"><span class="linenos">196</span></a> <span class="k">def</span> <span class="nf">store_extracted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">,</span> <span class="n">extracted</span><span class="p">:</span><span class="n">ExtractedData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ExtractAgent.store_extracted-196"><a href="#ExtractAgent.store_extracted-196"><span class="linenos">196</span></a> <span class="k">def</span> <span class="nf">store_extracted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">,</span> <span class="n">extracted</span><span class="p">:</span><span class="n">ExtractedData</span><span class="p">,</span> <span class="n">allow_overwrite</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ExtractAgent.store_extracted-197"><a href="#ExtractAgent.store_extracted-197"><span class="linenos">197</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractAgent.store_extracted-198"><a href="#ExtractAgent.store_extracted-198"><span class="linenos">198</span></a><span class="sd"> Stores the newly extracted data (in `extracted`) from `data` (i.e., `data.file_plain`) </span>
</span><span id="ExtractAgent.store_extracted-199"><a href="#ExtractAgent.store_extracted-199"><span class="linenos">199</span></a><span class="sd"> and returns the filename to use in `data.file_extracted`.</span>
</span><span id="ExtractAgent.store_extracted-200"><a href="#ExtractAgent.store_extracted-200"><span class="linenos">200</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractAgent.store_extracted-201"><a href="#ExtractAgent.store_extracted-201"><span class="linenos">201</span></a>
</span><span id="ExtractAgent.store_extracted-202"><a href="#ExtractAgent.store_extracted-202"><span class="linenos">202</span></a> <span class="n">path_name</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">[:</span><span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)]</span>
</span><span id="ExtractAgent.store_extracted-203"><a href="#ExtractAgent.store_extracted-203"><span class="linenos">203</span></a>
</span><span id="ExtractAgent.store_extracted-204"><a href="#ExtractAgent.store_extracted-204"><span class="linenos">204</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">)</span>
</span><span id="ExtractAgent.store_extracted-205"><a href="#ExtractAgent.store_extracted-205"><span class="linenos">205</span></a> <span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="ExtractAgent.store_extracted-206"><a href="#ExtractAgent.store_extracted-206"><span class="linenos">206</span></a> <span class="k">while</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="ExtractAgent.store_extracted-207"><a href="#ExtractAgent.store_extracted-207"><span class="linenos">207</span></a> <span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="ExtractAgent.store_extracted-208"><a href="#ExtractAgent.store_extracted-208"><span class="linenos">208</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">,</span> <span class="n">cnt</span><span class="p">)</span>
</span><span id="ExtractAgent.store_extracted-200"><a href="#ExtractAgent.store_extracted-200"><span class="linenos">200</span></a>
</span><span id="ExtractAgent.store_extracted-201"><a href="#ExtractAgent.store_extracted-201"><span class="linenos">201</span></a><span class="sd"> If there already exists an extracted file for this `data`, the file will be overwritten if `allow_overwrite=True`.</span>
</span><span id="ExtractAgent.store_extracted-202"><a href="#ExtractAgent.store_extracted-202"><span class="linenos">202</span></a><span class="sd"> Generally the system will check, if the contents of the current file are equal to the contents to write. </span>
</span><span id="ExtractAgent.store_extracted-203"><a href="#ExtractAgent.store_extracted-203"><span class="linenos">203</span></a><span class="sd"> File with equal content will not be written again.</span>
</span><span id="ExtractAgent.store_extracted-204"><a href="#ExtractAgent.store_extracted-204"><span class="linenos">204</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractAgent.store_extracted-205"><a href="#ExtractAgent.store_extracted-205"><span class="linenos">205</span></a>
</span><span id="ExtractAgent.store_extracted-206"><a href="#ExtractAgent.store_extracted-206"><span class="linenos">206</span></a> <span class="c1"># get path and name</span>
</span><span id="ExtractAgent.store_extracted-207"><a href="#ExtractAgent.store_extracted-207"><span class="linenos">207</span></a> <span class="n">path_name</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">[:</span><span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)]</span>
</span><span id="ExtractAgent.store_extracted-208"><a href="#ExtractAgent.store_extracted-208"><span class="linenos">208</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">)</span>
</span><span id="ExtractAgent.store_extracted-209"><a href="#ExtractAgent.store_extracted-209"><span class="linenos">209</span></a>
</span><span id="ExtractAgent.store_extracted-210"><a href="#ExtractAgent.store_extracted-210"><span class="linenos">210</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;w+&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="ExtractAgent.store_extracted-211"><a href="#ExtractAgent.store_extracted-211"><span class="linenos">211</span></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">extracted</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">())</span>
</span><span id="ExtractAgent.store_extracted-210"><a href="#ExtractAgent.store_extracted-210"><span class="linenos">210</span></a> <span class="c1"># data to write</span>
</span><span id="ExtractAgent.store_extracted-211"><a href="#ExtractAgent.store_extracted-211"><span class="linenos">211</span></a> <span class="n">data</span> <span class="o">=</span> <span class="n">extracted</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">()</span>
</span><span id="ExtractAgent.store_extracted-212"><a href="#ExtractAgent.store_extracted-212"><span class="linenos">212</span></a>
</span><span id="ExtractAgent.store_extracted-213"><a href="#ExtractAgent.store_extracted-213"><span class="linenos">213</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span><span id="ExtractAgent.store_extracted-213"><a href="#ExtractAgent.store_extracted-213"><span class="linenos">213</span></a> <span class="c1"># check for file</span>
</span><span id="ExtractAgent.store_extracted-214"><a href="#ExtractAgent.store_extracted-214"><span class="linenos">214</span></a> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="ExtractAgent.store_extracted-215"><a href="#ExtractAgent.store_extracted-215"><span class="linenos">215</span></a>
</span><span id="ExtractAgent.store_extracted-216"><a href="#ExtractAgent.store_extracted-216"><span class="linenos">216</span></a> <span class="c1"># get current content</span>
</span><span id="ExtractAgent.store_extracted-217"><a href="#ExtractAgent.store_extracted-217"><span class="linenos">217</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="ExtractAgent.store_extracted-218"><a href="#ExtractAgent.store_extracted-218"><span class="linenos">218</span></a> <span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span><span id="ExtractAgent.store_extracted-219"><a href="#ExtractAgent.store_extracted-219"><span class="linenos">219</span></a>
</span><span id="ExtractAgent.store_extracted-220"><a href="#ExtractAgent.store_extracted-220"><span class="linenos">220</span></a> <span class="c1"># files equal -&gt; no need to rewrite</span>
</span><span id="ExtractAgent.store_extracted-221"><a href="#ExtractAgent.store_extracted-221"><span class="linenos">221</span></a> <span class="k">if</span> <span class="n">content</span> <span class="o">==</span> <span class="n">data</span><span class="p">:</span>
</span><span id="ExtractAgent.store_extracted-222"><a href="#ExtractAgent.store_extracted-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span><span id="ExtractAgent.store_extracted-223"><a href="#ExtractAgent.store_extracted-223"><span class="linenos">223</span></a>
</span><span id="ExtractAgent.store_extracted-224"><a href="#ExtractAgent.store_extracted-224"><span class="linenos">224</span></a> <span class="c1"># not equal and overwrite not allowed</span>
</span><span id="ExtractAgent.store_extracted-225"><a href="#ExtractAgent.store_extracted-225"><span class="linenos">225</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">allow_overwrite</span><span class="p">:</span>
</span><span id="ExtractAgent.store_extracted-226"><a href="#ExtractAgent.store_extracted-226"><span class="linenos">226</span></a> <span class="c1"># get non-existent file name</span>
</span><span id="ExtractAgent.store_extracted-227"><a href="#ExtractAgent.store_extracted-227"><span class="linenos">227</span></a> <span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="ExtractAgent.store_extracted-228"><a href="#ExtractAgent.store_extracted-228"><span class="linenos">228</span></a> <span class="k">while</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
</span><span id="ExtractAgent.store_extracted-229"><a href="#ExtractAgent.store_extracted-229"><span class="linenos">229</span></a> <span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="ExtractAgent.store_extracted-230"><a href="#ExtractAgent.store_extracted-230"><span class="linenos">230</span></a> <span class="n">candidate</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">.json&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path_name</span><span class="p">,</span> <span class="n">cnt</span><span class="p">)</span>
</span><span id="ExtractAgent.store_extracted-231"><a href="#ExtractAgent.store_extracted-231"><span class="linenos">231</span></a>
</span><span id="ExtractAgent.store_extracted-232"><a href="#ExtractAgent.store_extracted-232"><span class="linenos">232</span></a> <span class="c1"># write file</span>
</span><span id="ExtractAgent.store_extracted-233"><a href="#ExtractAgent.store_extracted-233"><span class="linenos">233</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;w+&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="ExtractAgent.store_extracted-234"><a href="#ExtractAgent.store_extracted-234"><span class="linenos">234</span></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="ExtractAgent.store_extracted-235"><a href="#ExtractAgent.store_extracted-235"><span class="linenos">235</span></a>
</span><span id="ExtractAgent.store_extracted-236"><a href="#ExtractAgent.store_extracted-236"><span class="linenos">236</span></a> <span class="k">return</span> <span class="n">candidate</span>
</span></pre></div>
<div class="docstring"><p>Stores the newly extracted data (in <code>extracted</code>) from <code>data</code> (i.e., <code>data.file_plain</code>)
and returns the filename to use in <code>data.file_extracted</code>.</p>
<p>If there already exists an extracted file for this <code>data</code>, the file will be overwritten if <code>allow_overwrite=True</code>.
Generally the system will check, if the contents of the current file are equal to the contents to write.
File with equal content will not be written again.</p>
</div>
@ -1109,13 +1182,13 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#ExtractTextAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractTextAgent-216"><a href="#ExtractTextAgent-216"><span class="linenos">216</span></a><span class="k">class</span> <span class="nc">ExtractTextAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="ExtractTextAgent-217"><a href="#ExtractTextAgent-217"><span class="linenos">217</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractTextAgent-218"><a href="#ExtractTextAgent-218"><span class="linenos">218</span></a><span class="sd"> An extraction agent for text, create a subclass for your agent.</span>
</span><span id="ExtractTextAgent-219"><a href="#ExtractTextAgent-219"><span class="linenos">219</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractTextAgent-220"><a href="#ExtractTextAgent-220"><span class="linenos">220</span></a>
</span><span id="ExtractTextAgent-221"><a href="#ExtractTextAgent-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractTextAgent-222"><a href="#ExtractTextAgent-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">TEXT</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractTextAgent-239"><a href="#ExtractTextAgent-239"><span class="linenos">239</span></a><span class="k">class</span> <span class="nc">ExtractTextAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="ExtractTextAgent-240"><a href="#ExtractTextAgent-240"><span class="linenos">240</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractTextAgent-241"><a href="#ExtractTextAgent-241"><span class="linenos">241</span></a><span class="sd"> An extraction agent for text, create a subclass for your agent.</span>
</span><span id="ExtractTextAgent-242"><a href="#ExtractTextAgent-242"><span class="linenos">242</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractTextAgent-243"><a href="#ExtractTextAgent-243"><span class="linenos">243</span></a>
</span><span id="ExtractTextAgent-244"><a href="#ExtractTextAgent-244"><span class="linenos">244</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractTextAgent-245"><a href="#ExtractTextAgent-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">TEXT</span>
</span></pre></div>
@ -1134,8 +1207,8 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#ExtractTextAgent.extract_type"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractTextAgent.extract_type-221"><a href="#ExtractTextAgent.extract_type-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractTextAgent.extract_type-222"><a href="#ExtractTextAgent.extract_type-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">TEXT</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractTextAgent.extract_type-244"><a href="#ExtractTextAgent.extract_type-244"><span class="linenos">244</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractTextAgent.extract_type-245"><a href="#ExtractTextAgent.extract_type-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">TEXT</span>
</span></pre></div>
@ -1174,13 +1247,13 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#ExtractAudioAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractAudioAgent-224"><a href="#ExtractAudioAgent-224"><span class="linenos">224</span></a><span class="k">class</span> <span class="nc">ExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="ExtractAudioAgent-225"><a href="#ExtractAudioAgent-225"><span class="linenos">225</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractAudioAgent-226"><a href="#ExtractAudioAgent-226"><span class="linenos">226</span></a><span class="sd"> An extraction agent for audio, create a subclass for your agent.</span>
</span><span id="ExtractAudioAgent-227"><a href="#ExtractAudioAgent-227"><span class="linenos">227</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractAudioAgent-228"><a href="#ExtractAudioAgent-228"><span class="linenos">228</span></a>
</span><span id="ExtractAudioAgent-229"><a href="#ExtractAudioAgent-229"><span class="linenos">229</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractAudioAgent-230"><a href="#ExtractAudioAgent-230"><span class="linenos">230</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">AUDIO</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractAudioAgent-247"><a href="#ExtractAudioAgent-247"><span class="linenos">247</span></a><span class="k">class</span> <span class="nc">ExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="ExtractAudioAgent-248"><a href="#ExtractAudioAgent-248"><span class="linenos">248</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractAudioAgent-249"><a href="#ExtractAudioAgent-249"><span class="linenos">249</span></a><span class="sd"> An extraction agent for audio, create a subclass for your agent.</span>
</span><span id="ExtractAudioAgent-250"><a href="#ExtractAudioAgent-250"><span class="linenos">250</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractAudioAgent-251"><a href="#ExtractAudioAgent-251"><span class="linenos">251</span></a>
</span><span id="ExtractAudioAgent-252"><a href="#ExtractAudioAgent-252"><span class="linenos">252</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractAudioAgent-253"><a href="#ExtractAudioAgent-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">AUDIO</span>
</span></pre></div>
@ -1199,8 +1272,8 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#ExtractAudioAgent.extract_type"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractAudioAgent.extract_type-229"><a href="#ExtractAudioAgent.extract_type-229"><span class="linenos">229</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractAudioAgent.extract_type-230"><a href="#ExtractAudioAgent.extract_type-230"><span class="linenos">230</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">AUDIO</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractAudioAgent.extract_type-252"><a href="#ExtractAudioAgent.extract_type-252"><span class="linenos">252</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractAudioAgent.extract_type-253"><a href="#ExtractAudioAgent.extract_type-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">AUDIO</span>
</span></pre></div>
@ -1239,13 +1312,13 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#ExtractImageAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractImageAgent-232"><a href="#ExtractImageAgent-232"><span class="linenos">232</span></a><span class="k">class</span> <span class="nc">ExtractImageAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="ExtractImageAgent-233"><a href="#ExtractImageAgent-233"><span class="linenos">233</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractImageAgent-234"><a href="#ExtractImageAgent-234"><span class="linenos">234</span></a><span class="sd"> An extraction agent for images, create a subclass for your agent.</span>
</span><span id="ExtractImageAgent-235"><a href="#ExtractImageAgent-235"><span class="linenos">235</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractImageAgent-236"><a href="#ExtractImageAgent-236"><span class="linenos">236</span></a>
</span><span id="ExtractImageAgent-237"><a href="#ExtractImageAgent-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractImageAgent-238"><a href="#ExtractImageAgent-238"><span class="linenos">238</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">IMAGE</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractImageAgent-255"><a href="#ExtractImageAgent-255"><span class="linenos">255</span></a><span class="k">class</span> <span class="nc">ExtractImageAgent</span><span class="p">(</span><span class="n">ExtractAgent</span><span class="p">):</span>
</span><span id="ExtractImageAgent-256"><a href="#ExtractImageAgent-256"><span class="linenos">256</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ExtractImageAgent-257"><a href="#ExtractImageAgent-257"><span class="linenos">257</span></a><span class="sd"> An extraction agent for images, create a subclass for your agent.</span>
</span><span id="ExtractImageAgent-258"><a href="#ExtractImageAgent-258"><span class="linenos">258</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ExtractImageAgent-259"><a href="#ExtractImageAgent-259"><span class="linenos">259</span></a>
</span><span id="ExtractImageAgent-260"><a href="#ExtractImageAgent-260"><span class="linenos">260</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractImageAgent-261"><a href="#ExtractImageAgent-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">IMAGE</span>
</span></pre></div>
@ -1264,8 +1337,8 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#ExtractImageAgent.extract_type"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractImageAgent.extract_type-237"><a href="#ExtractImageAgent.extract_type-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractImageAgent.extract_type-238"><a href="#ExtractImageAgent.extract_type-238"><span class="linenos">238</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">IMAGE</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ExtractImageAgent.extract_type-260"><a href="#ExtractImageAgent.extract_type-260"><span class="linenos">260</span></a> <span class="k">def</span> <span class="nf">extract_type</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">RiddleDataType</span><span class="p">:</span>
</span><span id="ExtractImageAgent.extract_type-261"><a href="#ExtractImageAgent.extract_type-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="n">RiddleDataType</span><span class="o">.</span><span class="n">IMAGE</span>
</span></pre></div>
@ -1304,33 +1377,33 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#SolveAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SolveAgent-241"><a href="#SolveAgent-241"><span class="linenos">241</span></a><span class="k">class</span> <span class="nc">SolveAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="SolveAgent-242"><a href="#SolveAgent-242"><span class="linenos">242</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent-243"><a href="#SolveAgent-243"><span class="linenos">243</span></a><span class="sd"> A solve agent, create a subclass for your agent.</span>
</span><span id="SolveAgent-244"><a href="#SolveAgent-244"><span class="linenos">244</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="SolveAgent-245"><a href="#SolveAgent-245"><span class="linenos">245</span></a>
</span><span id="SolveAgent-246"><a href="#SolveAgent-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="SolveAgent-247"><a href="#SolveAgent-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">SOLVE</span>
</span><span id="SolveAgent-248"><a href="#SolveAgent-248"><span class="linenos">248</span></a>
</span><span id="SolveAgent-249"><a href="#SolveAgent-249"><span class="linenos">249</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="SolveAgent-250"><a href="#SolveAgent-250"><span class="linenos">250</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="SolveAgent-251"><a href="#SolveAgent-251"><span class="linenos">251</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
</span><span id="SolveAgent-252"><a href="#SolveAgent-252"><span class="linenos">252</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="SolveAgent-253"><a href="#SolveAgent-253"><span class="linenos">253</span></a>
</span><span id="SolveAgent-254"><a href="#SolveAgent-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="SolveAgent-255"><a href="#SolveAgent-255"><span class="linenos">255</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty solution/ explanation after handling&quot;</span><span class="p">)</span>
</span><span id="SolveAgent-256"><a href="#SolveAgent-256"><span class="linenos">256</span></a>
</span><span id="SolveAgent-257"><a href="#SolveAgent-257"><span class="linenos">257</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="SolveAgent-258"><a href="#SolveAgent-258"><span class="linenos">258</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solve</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="SolveAgent-259"><a href="#SolveAgent-259"><span class="linenos">259</span></a>
</span><span id="SolveAgent-260"><a href="#SolveAgent-260"><span class="linenos">260</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="SolveAgent-261"><a href="#SolveAgent-261"><span class="linenos">261</span></a>
</span><span id="SolveAgent-262"><a href="#SolveAgent-262"><span class="linenos">262</span></a> <span class="nd">@abstractmethod</span>
</span><span id="SolveAgent-263"><a href="#SolveAgent-263"><span class="linenos">263</span></a> <span class="nd">@validate_call</span>
</span><span id="SolveAgent-264"><a href="#SolveAgent-264"><span class="linenos">264</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">RiddleData</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="SolveAgent-265"><a href="#SolveAgent-265"><span class="linenos">265</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent-266"><a href="#SolveAgent-266"><span class="linenos">266</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="SolveAgent-267"><a href="#SolveAgent-267"><span class="linenos">267</span></a><span class="sd"> &quot;&quot;&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SolveAgent-264"><a href="#SolveAgent-264"><span class="linenos">264</span></a><span class="k">class</span> <span class="nc">SolveAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="SolveAgent-265"><a href="#SolveAgent-265"><span class="linenos">265</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent-266"><a href="#SolveAgent-266"><span class="linenos">266</span></a><span class="sd"> A solve agent, create a subclass for your agent.</span>
</span><span id="SolveAgent-267"><a href="#SolveAgent-267"><span class="linenos">267</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="SolveAgent-268"><a href="#SolveAgent-268"><span class="linenos">268</span></a>
</span><span id="SolveAgent-269"><a href="#SolveAgent-269"><span class="linenos">269</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="SolveAgent-270"><a href="#SolveAgent-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">SOLVE</span>
</span><span id="SolveAgent-271"><a href="#SolveAgent-271"><span class="linenos">271</span></a>
</span><span id="SolveAgent-272"><a href="#SolveAgent-272"><span class="linenos">272</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="SolveAgent-273"><a href="#SolveAgent-273"><span class="linenos">273</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="SolveAgent-274"><a href="#SolveAgent-274"><span class="linenos">274</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
</span><span id="SolveAgent-275"><a href="#SolveAgent-275"><span class="linenos">275</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End solve: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="SolveAgent-276"><a href="#SolveAgent-276"><span class="linenos">276</span></a>
</span><span id="SolveAgent-277"><a href="#SolveAgent-277"><span class="linenos">277</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">solution</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">explanation</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="SolveAgent-278"><a href="#SolveAgent-278"><span class="linenos">278</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty solution/ explanation after handling&quot;</span><span class="p">)</span>
</span><span id="SolveAgent-279"><a href="#SolveAgent-279"><span class="linenos">279</span></a>
</span><span id="SolveAgent-280"><a href="#SolveAgent-280"><span class="linenos">280</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="SolveAgent-281"><a href="#SolveAgent-281"><span class="linenos">281</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solve</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="SolveAgent-282"><a href="#SolveAgent-282"><span class="linenos">282</span></a>
</span><span id="SolveAgent-283"><a href="#SolveAgent-283"><span class="linenos">283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="SolveAgent-284"><a href="#SolveAgent-284"><span class="linenos">284</span></a>
</span><span id="SolveAgent-285"><a href="#SolveAgent-285"><span class="linenos">285</span></a> <span class="nd">@abstractmethod</span>
</span><span id="SolveAgent-286"><a href="#SolveAgent-286"><span class="linenos">286</span></a> <span class="nd">@validate_call</span>
</span><span id="SolveAgent-287"><a href="#SolveAgent-287"><span class="linenos">287</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">RiddleData</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="SolveAgent-288"><a href="#SolveAgent-288"><span class="linenos">288</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent-289"><a href="#SolveAgent-289"><span class="linenos">289</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="SolveAgent-290"><a href="#SolveAgent-290"><span class="linenos">290</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>
@ -1349,8 +1422,8 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#SolveAgent.agent_capability"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SolveAgent.agent_capability-246"><a href="#SolveAgent.agent_capability-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="SolveAgent.agent_capability-247"><a href="#SolveAgent.agent_capability-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">SOLVE</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SolveAgent.agent_capability-269"><a href="#SolveAgent.agent_capability-269"><span class="linenos">269</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="SolveAgent.agent_capability-270"><a href="#SolveAgent.agent_capability-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">SOLVE</span>
</span></pre></div>
@ -1372,12 +1445,12 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#SolveAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SolveAgent.handle-262"><a href="#SolveAgent.handle-262"><span class="linenos">262</span></a> <span class="nd">@abstractmethod</span>
</span><span id="SolveAgent.handle-263"><a href="#SolveAgent.handle-263"><span class="linenos">263</span></a> <span class="nd">@validate_call</span>
</span><span id="SolveAgent.handle-264"><a href="#SolveAgent.handle-264"><span class="linenos">264</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">RiddleData</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="SolveAgent.handle-265"><a href="#SolveAgent.handle-265"><span class="linenos">265</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent.handle-266"><a href="#SolveAgent.handle-266"><span class="linenos">266</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="SolveAgent.handle-267"><a href="#SolveAgent.handle-267"><span class="linenos">267</span></a><span class="sd"> &quot;&quot;&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SolveAgent.handle-285"><a href="#SolveAgent.handle-285"><span class="linenos">285</span></a> <span class="nd">@abstractmethod</span>
</span><span id="SolveAgent.handle-286"><a href="#SolveAgent.handle-286"><span class="linenos">286</span></a> <span class="nd">@validate_call</span>
</span><span id="SolveAgent.handle-287"><a href="#SolveAgent.handle-287"><span class="linenos">287</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">RiddleData</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="SolveAgent.handle-288"><a href="#SolveAgent.handle-288"><span class="linenos">288</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent.handle-289"><a href="#SolveAgent.handle-289"><span class="linenos">289</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="SolveAgent.handle-290"><a href="#SolveAgent.handle-290"><span class="linenos">290</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>
@ -1410,37 +1483,37 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#GatekeeperAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent-269"><a href="#GatekeeperAgent-269"><span class="linenos">269</span></a><span class="k">class</span> <span class="nc">GatekeeperAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="GatekeeperAgent-270"><a href="#GatekeeperAgent-270"><span class="linenos">270</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-271"><a href="#GatekeeperAgent-271"><span class="linenos">271</span></a><span class="sd"> A gatekeeper agent, create a subclass for your agent.</span>
</span><span id="GatekeeperAgent-272"><a href="#GatekeeperAgent-272"><span class="linenos">272</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-273"><a href="#GatekeeperAgent-273"><span class="linenos">273</span></a>
</span><span id="GatekeeperAgent-274"><a href="#GatekeeperAgent-274"><span class="linenos">274</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="GatekeeperAgent-275"><a href="#GatekeeperAgent-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">GATEKEEPER</span>
</span><span id="GatekeeperAgent-276"><a href="#GatekeeperAgent-276"><span class="linenos">276</span></a>
</span><span id="GatekeeperAgent-277"><a href="#GatekeeperAgent-277"><span class="linenos">277</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="GatekeeperAgent-278"><a href="#GatekeeperAgent-278"><span class="linenos">278</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="GatekeeperAgent-279"><a href="#GatekeeperAgent-279"><span class="linenos">279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-280"><a href="#GatekeeperAgent-280"><span class="linenos">280</span></a>
</span><span id="GatekeeperAgent-281"><a href="#GatekeeperAgent-281"><span class="linenos">281</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-282"><a href="#GatekeeperAgent-282"><span class="linenos">282</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">)</span>
</span><span id="GatekeeperAgent-283"><a href="#GatekeeperAgent-283"><span class="linenos">283</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">accepted</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-284"><a href="#GatekeeperAgent-284"><span class="linenos">284</span></a>
</span><span id="GatekeeperAgent-285"><a href="#GatekeeperAgent-285"><span class="linenos">285</span></a> <span class="k">if</span> <span class="n">solution</span><span class="o">.</span><span class="n">review</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="GatekeeperAgent-286"><a href="#GatekeeperAgent-286"><span class="linenos">286</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty review after handling&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-287"><a href="#GatekeeperAgent-287"><span class="linenos">287</span></a>
</span><span id="GatekeeperAgent-288"><a href="#GatekeeperAgent-288"><span class="linenos">288</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="GatekeeperAgent-289"><a href="#GatekeeperAgent-289"><span class="linenos">289</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">validate</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="GatekeeperAgent-290"><a href="#GatekeeperAgent-290"><span class="linenos">290</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span> <span class="o">=</span> <span class="n">solution</span><span class="o">.</span><span class="n">accepted</span>
</span><span id="GatekeeperAgent-291"><a href="#GatekeeperAgent-291"><span class="linenos">291</span></a>
</span><span id="GatekeeperAgent-292"><a href="#GatekeeperAgent-292"><span class="linenos">292</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="GatekeeperAgent-293"><a href="#GatekeeperAgent-293"><span class="linenos">293</span></a>
</span><span id="GatekeeperAgent-294"><a href="#GatekeeperAgent-294"><span class="linenos">294</span></a> <span class="nd">@abstractmethod</span>
</span><span id="GatekeeperAgent-295"><a href="#GatekeeperAgent-295"><span class="linenos">295</span></a> <span class="nd">@validate_call</span>
</span><span id="GatekeeperAgent-296"><a href="#GatekeeperAgent-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span><span class="n">Riddle</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="GatekeeperAgent-297"><a href="#GatekeeperAgent-297"><span class="linenos">297</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-298"><a href="#GatekeeperAgent-298"><span class="linenos">298</span></a><span class="sd"> Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`.</span>
</span><span id="GatekeeperAgent-299"><a href="#GatekeeperAgent-299"><span class="linenos">299</span></a><span class="sd"> &quot;&quot;&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent-292"><a href="#GatekeeperAgent-292"><span class="linenos">292</span></a><span class="k">class</span> <span class="nc">GatekeeperAgent</span><span class="p">(</span><span class="n">BasicAgent</span><span class="p">):</span>
</span><span id="GatekeeperAgent-293"><a href="#GatekeeperAgent-293"><span class="linenos">293</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-294"><a href="#GatekeeperAgent-294"><span class="linenos">294</span></a><span class="sd"> A gatekeeper agent, create a subclass for your agent.</span>
</span><span id="GatekeeperAgent-295"><a href="#GatekeeperAgent-295"><span class="linenos">295</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-296"><a href="#GatekeeperAgent-296"><span class="linenos">296</span></a>
</span><span id="GatekeeperAgent-297"><a href="#GatekeeperAgent-297"><span class="linenos">297</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="GatekeeperAgent-298"><a href="#GatekeeperAgent-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">GATEKEEPER</span>
</span><span id="GatekeeperAgent-299"><a href="#GatekeeperAgent-299"><span class="linenos">299</span></a>
</span><span id="GatekeeperAgent-300"><a href="#GatekeeperAgent-300"><span class="linenos">300</span></a> <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="GatekeeperAgent-301"><a href="#GatekeeperAgent-301"><span class="linenos">301</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="GatekeeperAgent-302"><a href="#GatekeeperAgent-302"><span class="linenos">302</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-303"><a href="#GatekeeperAgent-303"><span class="linenos">303</span></a>
</span><span id="GatekeeperAgent-304"><a href="#GatekeeperAgent-304"><span class="linenos">304</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Start validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-305"><a href="#GatekeeperAgent-305"><span class="linenos">305</span></a> <span class="n">solution</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">riddle</span><span class="p">)</span>
</span><span id="GatekeeperAgent-306"><a href="#GatekeeperAgent-306"><span class="linenos">306</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;End validate: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">solution</span><span class="o">.</span><span class="n">accepted</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-307"><a href="#GatekeeperAgent-307"><span class="linenos">307</span></a>
</span><span id="GatekeeperAgent-308"><a href="#GatekeeperAgent-308"><span class="linenos">308</span></a> <span class="k">if</span> <span class="n">solution</span><span class="o">.</span><span class="n">review</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="o">.</span><span class="n">review</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="GatekeeperAgent-309"><a href="#GatekeeperAgent-309"><span class="linenos">309</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Riddle </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">: Empty review after handling&quot;</span><span class="p">)</span>
</span><span id="GatekeeperAgent-310"><a href="#GatekeeperAgent-310"><span class="linenos">310</span></a>
</span><span id="GatekeeperAgent-311"><a href="#GatekeeperAgent-311"><span class="linenos">311</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="GatekeeperAgent-312"><a href="#GatekeeperAgent-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">validate</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="GatekeeperAgent-313"><a href="#GatekeeperAgent-313"><span class="linenos">313</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span> <span class="o">=</span> <span class="n">solution</span><span class="o">.</span><span class="n">accepted</span>
</span><span id="GatekeeperAgent-314"><a href="#GatekeeperAgent-314"><span class="linenos">314</span></a>
</span><span id="GatekeeperAgent-315"><a href="#GatekeeperAgent-315"><span class="linenos">315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_response</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="GatekeeperAgent-316"><a href="#GatekeeperAgent-316"><span class="linenos">316</span></a>
</span><span id="GatekeeperAgent-317"><a href="#GatekeeperAgent-317"><span class="linenos">317</span></a> <span class="nd">@abstractmethod</span>
</span><span id="GatekeeperAgent-318"><a href="#GatekeeperAgent-318"><span class="linenos">318</span></a> <span class="nd">@validate_call</span>
</span><span id="GatekeeperAgent-319"><a href="#GatekeeperAgent-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span><span class="n">Riddle</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="GatekeeperAgent-320"><a href="#GatekeeperAgent-320"><span class="linenos">320</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-321"><a href="#GatekeeperAgent-321"><span class="linenos">321</span></a><span class="sd"> Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`.</span>
</span><span id="GatekeeperAgent-322"><a href="#GatekeeperAgent-322"><span class="linenos">322</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>
@ -1459,8 +1532,8 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#GatekeeperAgent.agent_capability"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent.agent_capability-274"><a href="#GatekeeperAgent.agent_capability-274"><span class="linenos">274</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="GatekeeperAgent.agent_capability-275"><a href="#GatekeeperAgent.agent_capability-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">GATEKEEPER</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent.agent_capability-297"><a href="#GatekeeperAgent.agent_capability-297"><span class="linenos">297</span></a> <span class="k">def</span> <span class="nf">agent_capability</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">AgentCapability</span><span class="p">:</span>
</span><span id="GatekeeperAgent.agent_capability-298"><a href="#GatekeeperAgent.agent_capability-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="n">AgentCapability</span><span class="o">.</span><span class="n">GATEKEEPER</span>
</span></pre></div>
@ -1482,12 +1555,12 @@ and returns the filename to use in <code>data.file_extracted</code>.</p>
</div>
<a class="headerlink" href="#GatekeeperAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent.handle-294"><a href="#GatekeeperAgent.handle-294"><span class="linenos">294</span></a> <span class="nd">@abstractmethod</span>
</span><span id="GatekeeperAgent.handle-295"><a href="#GatekeeperAgent.handle-295"><span class="linenos">295</span></a> <span class="nd">@validate_call</span>
</span><span id="GatekeeperAgent.handle-296"><a href="#GatekeeperAgent.handle-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span><span class="n">Riddle</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="GatekeeperAgent.handle-297"><a href="#GatekeeperAgent.handle-297"><span class="linenos">297</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent.handle-298"><a href="#GatekeeperAgent.handle-298"><span class="linenos">298</span></a><span class="sd"> Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`.</span>
</span><span id="GatekeeperAgent.handle-299"><a href="#GatekeeperAgent.handle-299"><span class="linenos">299</span></a><span class="sd"> &quot;&quot;&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent.handle-317"><a href="#GatekeeperAgent.handle-317"><span class="linenos">317</span></a> <span class="nd">@abstractmethod</span>
</span><span id="GatekeeperAgent.handle-318"><a href="#GatekeeperAgent.handle-318"><span class="linenos">318</span></a> <span class="nd">@validate_call</span>
</span><span id="GatekeeperAgent.handle-319"><a href="#GatekeeperAgent.handle-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">riddle</span><span class="p">:</span><span class="n">Riddle</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleSolution</span><span class="p">:</span>
</span><span id="GatekeeperAgent.handle-320"><a href="#GatekeeperAgent.handle-320"><span class="linenos">320</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent.handle-321"><a href="#GatekeeperAgent.handle-321"><span class="linenos">321</span></a><span class="sd"> Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`.</span>
</span><span id="GatekeeperAgent.handle-322"><a href="#GatekeeperAgent.handle-322"><span class="linenos">322</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>

View File

@ -949,7 +949,7 @@ is set to <code>'allow'</code>.</li>
</div>
<div id="RiddleData.file_plain" class="classattr">
<div class="attr variable">
<span class="name">file_plain</span><span class="annotation">: Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x1029c23e0&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x102a73100&gt;, json_schema_input_type=PydanticUndefined)]</span>
<span class="name">file_plain</span><span class="annotation">: Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x104aaa3e0&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x104b5b100&gt;, json_schema_input_type=PydanticUndefined)]</span>
</div>
@ -965,7 +965,7 @@ The file must exist.</p>
</div>
<div id="RiddleData.file_extracted" class="classattr">
<div class="attr variable">
<span class="name">file_extracted</span><span class="annotation">: Optional[Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x1029c23e0&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x102a73100&gt;, json_schema_input_type=PydanticUndefined)]]</span>
<span class="name">file_extracted</span><span class="annotation">: Optional[Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x104aaa3e0&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x104b5b100&gt;, json_schema_input_type=PydanticUndefined)]]</span>
</div>