Compare commits

..

No commits in common. "master" and "v0.10" have entirely different histories.

14 changed files with 1267 additions and 1451 deletions

View File

@ -21,8 +21,7 @@ services:
environment: environment:
- SOLUTION_MAX_TRIALS=5 - SOLUTION_MAX_TRIALS=5
- MESSAGE_MAX_CONTACTS=100 - MESSAGE_MAX_CONTACTS=100
- REQUIRE_FULL_EXTRACT=true - REQUIRE_FULL_EXTRACT=false
- REQUIRE_FULL_SOLVE=true
- MANAGEMENT_URL=http://management - MANAGEMENT_URL=http://management
- AGENTS_PROCESS=http://agent_all:8000 - AGENTS_PROCESS=http://agent_all:8000
- AGENTS_SOLVE=http://agent_all:8000 - AGENTS_SOLVE=http://agent_all:8000

View File

@ -20,8 +20,7 @@ day_tag=$(date '+%Y-%m-%d')
images_a=$(docker image ls "$IMAGE_REGISTRY/$IMAGE_OWNER/$IMAGE_NAME_AGENT" --format '{{.Repository}}:{{.Tag}}') images_a=$(docker image ls "$IMAGE_REGISTRY/$IMAGE_OWNER/$IMAGE_NAME_AGENT" --format '{{.Repository}}:{{.Tag}}')
images_b=$(docker image ls "$IMAGE_REGISTRY/$IMAGE_OWNER/$IMAGE_NAME_MGMT" --format '{{.Repository}}:{{.Tag}}') images_b=$(docker image ls "$IMAGE_REGISTRY/$IMAGE_OWNER/$IMAGE_NAME_MGMT" --format '{{.Repository}}:{{.Tag}}')
echo "$images_a echo "$images_a\n$images_b" | while read image_url ;
$images_b" | while read image_url ;
do do
image_name="${image_url##*/}" image_name="${image_url##*/}"

View File

@ -280,7 +280,7 @@ class SolveAgent(BasicAgent):
if len(solution.solution) == 0 or len(solution.explanation) == 0: if len(solution.solution) == 0 or len(solution.explanation) == 0:
logger.info(f"Riddle {self._response.id}: Empty solution/ explanation after handling") logger.info(f"Riddle {self._response.id}: Empty solution/ explanation after handling")
self._response.solution.append(solution) self._response.solution = solution
self._response.status.solve.finished = True self._response.status.solve.finished = True
self._do_response = True self._do_response = True
@ -289,7 +289,7 @@ class SolveAgent(BasicAgent):
@validate_call @validate_call
def handle(self, riddle: Riddle, data: List[RiddleData]) -> RiddleSolution: def handle(self, riddle: Riddle, data: List[RiddleData]) -> RiddleSolution:
""" """
Solve the `riddle` using `data` and return a single solution. Solve the `riddle` using `data` and return a solution.
""" """
class GatekeeperAgent(BasicAgent): class GatekeeperAgent(BasicAgent):
@ -301,26 +301,25 @@ class GatekeeperAgent(BasicAgent):
return AgentCapability.GATEKEEPER return AgentCapability.GATEKEEPER
def _process(self): def _process(self):
if len(self._response.solution) == 0: if self._response.solution is None:
self._response.solution.append(RiddleSolution(solution="", explanation="")) self._response.solution = RiddleSolution(solution="", explanation="")
logger.debug(f"Start validate: {self._response.id}") logger.debug(f"Start validate: {self._response.id}")
solution = self.handle(self._response.solution, self._response.riddle) solution = self.handle(self._response.solution, self._response.riddle)
logger.debug(f"End validate: {self._response.id} ({solution.review}, {solution.accepted})")
for single_solution in solution: if solution.review is None or len(solution.review) == 0:
logger.debug(f"End validate: {self._response.id} ({single_solution.review}, {single_solution.accepted})") logger.info(f"Riddle {self._response.id}: Empty review after handling")
if single_solution.review is None or len(single_solution.review) == 0:
logger.info(f"Riddle {self._response.id}: Empty review after handling")
self._response.solution = solution self._response.solution = solution
self._response.status.validate.finished = True self._response.status.validate.finished = True
self._response.status.solved = any(single_solution.accepted for single_solution in solution) self._response.status.solved = solution.accepted
self._do_response = True self._do_response = True
@abstractmethod @abstractmethod
@validate_call @validate_call
def handle(self, solution:List[RiddleSolution], riddle:Riddle) -> List[RiddleSolution]: def handle(self, solution:RiddleSolution, riddle:Riddle) -> RiddleSolution:
""" """
Check the `solution` (multiple if multiple solver involved) of `riddle` and return solutions with populated `solution[i].accepted` and `solution[i].review`. Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`.
""" """

View File

@ -8,8 +8,6 @@
# source code released under the terms of GNU Public License Version 3 # source code released under the terms of GNU Public License Version 3
# https://www.gnu.org/licenses/gpl-3.0.txt # https://www.gnu.org/licenses/gpl-3.0.txt
import random
from typing import Callable, List from typing import Callable, List
from ums.agent import ExtractAudioAgent, ExtractImageAgent, ExtractTextAgent, SolveAgent, GatekeeperAgent from ums.agent import ExtractAudioAgent, ExtractImageAgent, ExtractTextAgent, SolveAgent, GatekeeperAgent
@ -61,14 +59,14 @@ class MySolveAgent(SolveAgent):
status.extract.required = False status.extract.required = False
self.sub_riddle(riddle=Riddle(context="Haha", question="Blubber"), status=status) self.sub_riddle(riddle=Riddle(context="Haha", question="Blubber"), status=status)
return RiddleSolution(solution="Huii", explanation=f"Blubb, {random.random()}") return RiddleSolution(solution="Huii", explanation="Blubb")
class MyGatekeeperAgent(GatekeeperAgent): class MyGatekeeperAgent(GatekeeperAgent):
def handle(self, solution: List[RiddleSolution], riddle: Riddle) -> RiddleSolution: def handle(self, solution: RiddleSolution, riddle: Riddle) -> RiddleSolution:
solution[0].accepted = True solution.accepted = True
solution[0].review = "Ok" solution.review = "Ok"
return solution return solution

View File

@ -15,7 +15,7 @@ import requests
from fastapi import BackgroundTasks from fastapi import BackgroundTasks
from ums.management.db import DB from ums.management.db import DB
from ums.utils import AgentMessage, AgentResponse, logger, RiddleData, RiddleSolution from ums.utils import AgentMessage, AgentResponse, logger, RiddleData
class MessageProcessor(): class MessageProcessor():
@ -23,7 +23,6 @@ class MessageProcessor():
MESSAGE_MAX_CONTACTS = int(os.environ.get('MESSAGE_MAX_CONTACTS', 100)) MESSAGE_MAX_CONTACTS = int(os.environ.get('MESSAGE_MAX_CONTACTS', 100))
REQUIRE_FULL_EXTRACT = os.environ.get('REQUIRE_FULL_EXTRACT', 'false').lower() == 'true' REQUIRE_FULL_EXTRACT = os.environ.get('REQUIRE_FULL_EXTRACT', 'false').lower() == 'true'
REQUIRE_FULL_SOLVE = os.environ.get('REQUIRE_FULL_SOLVE', 'false').lower() == 'true'
MANAGEMENT_URL = os.environ.get('MANAGEMENT_URL', 'http://127.0.0.1:80').strip().strip('/') MANAGEMENT_URL = os.environ.get('MANAGEMENT_URL', 'http://127.0.0.1:80').strip().strip('/')
@ -91,100 +90,54 @@ class MessageProcessor():
logger.warning(f"Message reached max number of contacts! {db_message.message.id}, {count}") logger.warning(f"Message reached max number of contacts! {db_message.message.id}, {count}")
return return
# check which step/ state the message requires the management to do
# -> IF
if db_message.message.status.extract.required and not db_message.message.status.extract.finished:
# send to extract agents
self._send_messages(self.AGENTS_PROCESS, db_message.message)
return
# combine different extractions in data items # combine different extractions in data items
# will update items in `db_message.message.data` # will update items in `db_message.message.data`
fully_extracted = self._add_extractions(db_message.message.id, db_message.message.data) fully_extracted = self._add_extractions(db_message.message.id, db_message.message.data)
if self.REQUIRE_FULL_EXTRACT and not fully_extracted: if (self.REQUIRE_FULL_EXTRACT and not fully_extracted) \
and not (db_message.message.status.extract.required and not db_message.message.status.extract.finished):
logger.warning(f"Postpone message, wait for full extract of items! {db_message.message.id}, {count}") logger.warning(f"Postpone message, wait for full extract of items! {db_message.message.id}, {count}")
return return
# -> EL IF # check which step/ state the message requires the management to do
if db_message.message.status.solve.required and not db_message.message.status.solve.finished: if db_message.message.status.extract.required and not db_message.message.status.extract.finished:
# send to extract agents
self._send_messages(self.AGENTS_PROCESS, db_message.message)
elif db_message.message.status.solve.required and not db_message.message.status.solve.finished:
# send to solve agents # send to solve agents
self._send_messages(self.AGENTS_SOLVE, db_message.message) self._send_messages(self.AGENTS_SOLVE, db_message.message)
return
# combine different solutions elif db_message.message.status.validate.required and not db_message.message.status.validate.finished:
# will add solutions received before to `db_message.message.solution`
fully_solved = self._add_solutions(db_message.message.id, db_message.message.solution, db_message.message.status.trial)
if self.REQUIRE_FULL_SOLVE and not fully_solved:
logger.warning(f"Postpone message, wait for all solutions of riddle! {db_message.message.id}, {count}")
return
# -> EL IF
if db_message.message.status.validate.required and not db_message.message.status.validate.finished:
# send to solve agents # send to solve agents
self._send_messages(self.AGENTS_GATEKEEPER, db_message.message) self._send_messages(self.AGENTS_GATEKEEPER, db_message.message)
return
# -> ELSE else: # all steps "done"
# all steps "done"
# validate not required? (then solved will never be set to true, thus set it here) # validate not required? (then solved will never be set to true, thus set it here)
if not db_message.message.status.validate.required: if not db_message.message.status.validate.required:
db_message.message.status.solved = True db_message.message.status.solved = True
if db_message.message.status.solved: if db_message.message.status.solved:
# yay, message is solved # yay, message is solved
self.db.set_solution(count=count, solution=True); self.db.set_solution(count=count, solution=True);
else: else:
# not solved, but all steps done # not solved, but all steps done
self.db.set_solution(count=count, solution=False); self.db.set_solution(count=count, solution=False);
# try again # try again
self._do_again(db_message.message) self._do_again(db_message.message)
def _hash_solution(self, s:RiddleSolution) -> int:
return hash((s.solution, s.explanation, tuple((d.file_plain, d.type) for d in s.used_data)))
def _add_solutions(self, riddle_id:str, solution:List[RiddleSolution], trial:int) -> bool:
# do not do anything, if all solutions available
if len(solution) >= len(self.AGENTS_SOLVE):
return True
contained = set(self._hash_solution(s) for s in solution)
# search db for solutions from before
for row in self.db.iterate(
id=riddle_id,
limit=min(self.db.len(id=riddle_id), 250)
):
# make sure to only use solutions from same "trial"
if row.message.status.trial == trial:
for s in row.message.solution:
h = self._hash_solution(s)
if h not in contained:
# add the 'new' solution
solution.append(s)
contained.add(h)
# all solutions found ?
if len(solution) >= len(self.AGENTS_SOLVE):
break
return len(solution) >= len(self.AGENTS_SOLVE)
def _hash_data(self, d:RiddleData) -> int: def _hash_data(self, d:RiddleData) -> int:
return hash((d.file_plain, d.type, d.prompt)) return hash((d.file_plain, d.type, d.prompt))
def _add_extractions(self, riddle_id:str, data:List[RiddleData]) -> bool: def _add_extractions(self, riddle_id:str, data:List[RiddleData]) -> bool:
# get all the data items without extraction # get all the data items without extraction
empty_data = {} empty_data = {}
for i, d in enumerate(data): for i, d in enumerate(data):
if d.file_extracted is None: if d.file_extracted is None:
empty_data[self._hash_data(d)] = i empty_data[self._hash_data(d)] = i
# do not do anything if fully extracted
if len(empty_data) == 0:
return True
# search db for extractions already available # search db for extractions already available
for row in self.db.iterate( for row in self.db.iterate(
id=riddle_id, id=riddle_id,
@ -225,13 +178,13 @@ class MessageProcessor():
# increment trial # increment trial
message.status.trial += 1 message.status.trial += 1
# append current solution(s) als old one(s) # append current solution als old one
if len(message.solution) > 0: if not message.solution is None:
message.riddle.solutions_before.extend( message.riddle.solutions_before.append(
message.solution message.solution
) )
# reset current solution # reset current solution
message.solution = [] message.solution = None
# add the riddle as new to management # add the riddle as new to management
self._send_message(self.MANAGEMENT_URL, message) self._send_message(self.MANAGEMENT_URL, message)

View File

@ -40,7 +40,7 @@
"question": "Get the name of the person.", "question": "Get the name of the person.",
"solutions_before": [] "solutions_before": []
}, },
"solution": [], "solution": null,
"data": [ "data": [
{ {
"type": "text", "type": "text",
@ -77,13 +77,13 @@
```json ```json
{ {
... ...
"solution": [{ "solution": {
"solution": "Otto", "solution": "Otto",
"explanation": "Written in line 6 after 'Name:'", "explanation": "Written in line 6 after 'Name:'",
"used_data": [], "used_data": [],
"accepted": false, "accepted": false,
"review": null "review": null
}], },
... ...
} }
``` ```
@ -98,11 +98,11 @@ from typing import List, Any
from typing_extensions import Annotated from typing_extensions import Annotated
from pydantic import ( from pydantic import (
BaseModel, BaseModel,
ValidationError, ValidationInfo, ValidationError, ValidationInfo,
ValidatorFunctionWrapHandler, ValidatorFunctionWrapHandler
WrapValidator, AfterValidator, BeforeValidator
) )
from pydantic.functional_validators import WrapValidator, AfterValidator
from ums.utils.const import SHARE_PATH from ums.utils.const import SHARE_PATH
from ums.utils.schema import ExtractionSchema from ums.utils.schema import ExtractionSchema
@ -268,12 +268,12 @@ class RiddleStatus(RiddleInformation):
""" """
The *main* solving step. The *main* solving step.
`AgentMessage.solution` shall contain an `RiddleSolution` afterwards. `AgentMessage.solution` shall be an `RiddleSolution` afterwards.
""" """
validate: RiddleSubStatus = RiddleSubStatus() validate: RiddleSubStatus = RiddleSubStatus()
""" """
The validation step, i.e., does the gatekeeper accept the solution(s) in `AgentMessage.solution`. The validation step, i.e., does the gatekeeper accept the solution in `AgentMessage.solution`.
""" """
trial: int = 0 trial: int = 0
@ -284,13 +284,9 @@ class RiddleStatus(RiddleInformation):
solved: bool = False solved: bool = False
""" """
True, after the gatekeeper accepts the solution(s) at `AgentMessage.solution` True, after the gatekeeper accepts the solution at `AgentMessage.solution`
""" """
def _transform_to_list(value : Any) -> List[Any]:
# type check of items is done next by pydantic
return value if isinstance(value, list) else [value]
class AgentMessage(RiddleInformation): class AgentMessage(RiddleInformation):
""" """
The basic message, which is sent be the agent and the management. The basic message, which is sent be the agent and the management.
@ -314,10 +310,9 @@ class AgentMessage(RiddleInformation):
The riddle to solve. The riddle to solve.
""" """
solution: Annotated[List[RiddleSolution], BeforeValidator(_transform_to_list)] = [] solution: RiddleSolution | None = None
""" """
The solutions of the riddle (or empty list if no solutions available) The solution of the riddle (or empty if no solution available)
(When assigning a single object of `RiddleSolution` will be convert to list with this single object.)
""" """
data: List[RiddleData] = [] data: List[RiddleData] = []

View File

@ -29,11 +29,6 @@ server {
try_files $uri $uri/ @dynamic; try_files $uri $uri/ @dynamic;
} }
location /share {
alias /ums-agenten/share;
autoindex on;
}
location @dynamic { location @dynamic {
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

File diff suppressed because one or more lines are too long

View File

@ -443,7 +443,7 @@
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</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-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</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-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</span></a> </span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</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">append</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> </span><span id="L-283"><a href="#L-283"><span class="linenos">283</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-284"><a href="#L-284"><span class="linenos">284</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-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</span></a> </span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</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-286"><a href="#L-286"><span class="linenos">286</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>
@ -452,7 +452,7 @@
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="nd">@validate_call</span> </span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="nd">@validate_call</span>
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</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-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a><span class="sd"> Solve the `riddle` using `data` and return a single solution.</span> </span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a><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"> &quot;&quot;&quot;</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> </span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>
</span><span id="L-295"><a href="#L-295"><span class="linenos">295</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-295"><a href="#L-295"><span class="linenos">295</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>
@ -464,29 +464,28 @@
</span><span id="L-301"><a href="#L-301"><span class="linenos">301</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-301"><a href="#L-301"><span class="linenos">301</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-302"><a href="#L-302"><span class="linenos">302</span></a> </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="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-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="k">if</span> <span class="nb">len</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="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="L-304"><a href="#L-304"><span class="linenos">304</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-305"><a href="#L-305"><span class="linenos">305</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">append</span><span class="p">(</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-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</span></a> </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="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-307"><a href="#L-307"><span class="linenos">307</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-308"><a href="#L-308"><span class="linenos">308</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-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</span></a> </span><span id="L-309"><a href="#L-309"><span class="linenos">309</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-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="k">for</span> <span class="n">single_solution</span> <span class="ow">in</span> <span class="n">solution</span><span class="p">:</span> </span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</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">single_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">single_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-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="n">single_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">single_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-312"><a href="#L-312"><span class="linenos">312</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-313"><a href="#L-313"><span class="linenos">313</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-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><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">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</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-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</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-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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="nb">any</span><span class="p">(</span><span class="n">single_solution</span><span class="o">.</span><span class="n">accepted</span> <span class="k">for</span> <span class="n">single_solution</span> <span class="ow">in</span> <span class="n">solution</span><span class="p">)</span> </span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> </span><span id="L-318"><a href="#L-318"><span class="linenos">318</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-319"><a href="#L-319"><span class="linenos">319</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-319"><a href="#L-319"><span class="linenos">319</span></a>
</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> </span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="nd">@abstractmethod</span>
</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="nd">@abstractmethod</span> </span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="nd">@validate_call</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="nd">@validate_call</span> </span><span id="L-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</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">List</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">List</span><span class="p">[</span><span class="n">RiddleSolution</span><span class="p">]:</span> </span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-324"><a href="#L-324"><span class="linenos">324</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-325"><a href="#L-325"><span class="linenos">325</span></a><span class="sd"> Check the `solution` (multiple if multiple solver involved) of `riddle` and return solutions with populated `solution[i].accepted` and `solution[i].review`.</span> </span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1402,7 +1401,7 @@ File with equal content will not be written again.</p>
</span><span id="SolveAgent-281"><a href="#SolveAgent-281"><span class="linenos">281</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-281"><a href="#SolveAgent-281"><span class="linenos">281</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-282"><a href="#SolveAgent-282"><span class="linenos">282</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-282"><a href="#SolveAgent-282"><span class="linenos">282</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-283"><a href="#SolveAgent-283"><span class="linenos">283</span></a> </span><span id="SolveAgent-283"><a href="#SolveAgent-283"><span class="linenos">283</span></a>
</span><span id="SolveAgent-284"><a href="#SolveAgent-284"><span class="linenos">284</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">append</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> </span><span id="SolveAgent-284"><a href="#SolveAgent-284"><span class="linenos">284</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-285"><a href="#SolveAgent-285"><span class="linenos">285</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-285"><a href="#SolveAgent-285"><span class="linenos">285</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-286"><a href="#SolveAgent-286"><span class="linenos">286</span></a> </span><span id="SolveAgent-286"><a href="#SolveAgent-286"><span class="linenos">286</span></a>
</span><span id="SolveAgent-287"><a href="#SolveAgent-287"><span class="linenos">287</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-287"><a href="#SolveAgent-287"><span class="linenos">287</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>
@ -1411,7 +1410,7 @@ File with equal content will not be written again.</p>
</span><span id="SolveAgent-290"><a href="#SolveAgent-290"><span class="linenos">290</span></a> <span class="nd">@validate_call</span> </span><span id="SolveAgent-290"><a href="#SolveAgent-290"><span class="linenos">290</span></a> <span class="nd">@validate_call</span>
</span><span id="SolveAgent-291"><a href="#SolveAgent-291"><span class="linenos">291</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-291"><a href="#SolveAgent-291"><span class="linenos">291</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-292"><a href="#SolveAgent-292"><span class="linenos">292</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="SolveAgent-292"><a href="#SolveAgent-292"><span class="linenos">292</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent-293"><a href="#SolveAgent-293"><span class="linenos">293</span></a><span class="sd"> Solve the `riddle` using `data` and return a single solution.</span> </span><span id="SolveAgent-293"><a href="#SolveAgent-293"><span class="linenos">293</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="SolveAgent-294"><a href="#SolveAgent-294"><span class="linenos">294</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="SolveAgent-294"><a href="#SolveAgent-294"><span class="linenos">294</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1458,12 +1457,12 @@ File with equal content will not be written again.</p>
</span><span id="SolveAgent.handle-290"><a href="#SolveAgent.handle-290"><span class="linenos">290</span></a> <span class="nd">@validate_call</span> </span><span id="SolveAgent.handle-290"><a href="#SolveAgent.handle-290"><span class="linenos">290</span></a> <span class="nd">@validate_call</span>
</span><span id="SolveAgent.handle-291"><a href="#SolveAgent.handle-291"><span class="linenos">291</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-291"><a href="#SolveAgent.handle-291"><span class="linenos">291</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-292"><a href="#SolveAgent.handle-292"><span class="linenos">292</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="SolveAgent.handle-292"><a href="#SolveAgent.handle-292"><span class="linenos">292</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="SolveAgent.handle-293"><a href="#SolveAgent.handle-293"><span class="linenos">293</span></a><span class="sd"> Solve the `riddle` using `data` and return a single solution.</span> </span><span id="SolveAgent.handle-293"><a href="#SolveAgent.handle-293"><span class="linenos">293</span></a><span class="sd"> Solve the `riddle` using `data` and return a solution.</span>
</span><span id="SolveAgent.handle-294"><a href="#SolveAgent.handle-294"><span class="linenos">294</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="SolveAgent.handle-294"><a href="#SolveAgent.handle-294"><span class="linenos">294</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
<div class="docstring"><p>Solve the <code>riddle</code> using <code>data</code> and return a single solution.</p> <div class="docstring"><p>Solve the <code>riddle</code> using <code>data</code> and return a solution.</p>
</div> </div>
@ -1501,29 +1500,28 @@ File with equal content will not be written again.</p>
</span><span id="GatekeeperAgent-302"><a href="#GatekeeperAgent-302"><span class="linenos">302</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-302"><a href="#GatekeeperAgent-302"><span class="linenos">302</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-303"><a href="#GatekeeperAgent-303"><span class="linenos">303</span></a> </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="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-304"><a href="#GatekeeperAgent-304"><span class="linenos">304</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-305"><a href="#GatekeeperAgent-305"><span class="linenos">305</span></a> <span class="k">if</span> <span class="nb">len</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="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="GatekeeperAgent-305"><a href="#GatekeeperAgent-305"><span class="linenos">305</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-306"><a href="#GatekeeperAgent-306"><span class="linenos">306</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">append</span><span class="p">(</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-306"><a href="#GatekeeperAgent-306"><span class="linenos">306</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-307"><a href="#GatekeeperAgent-307"><span class="linenos">307</span></a> </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="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-308"><a href="#GatekeeperAgent-308"><span class="linenos">308</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-309"><a href="#GatekeeperAgent-309"><span class="linenos">309</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-309"><a href="#GatekeeperAgent-309"><span class="linenos">309</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-310"><a href="#GatekeeperAgent-310"><span class="linenos">310</span></a> </span><span id="GatekeeperAgent-310"><a href="#GatekeeperAgent-310"><span class="linenos">310</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-311"><a href="#GatekeeperAgent-311"><span class="linenos">311</span></a> <span class="k">for</span> <span class="n">single_solution</span> <span class="ow">in</span> <span class="n">solution</span><span class="p">:</span> </span><span id="GatekeeperAgent-311"><a href="#GatekeeperAgent-311"><span class="linenos">311</span></a>
</span><span id="GatekeeperAgent-312"><a href="#GatekeeperAgent-312"><span class="linenos">312</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">single_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">single_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-312"><a href="#GatekeeperAgent-312"><span class="linenos">312</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-313"><a href="#GatekeeperAgent-313"><span class="linenos">313</span></a> <span class="k">if</span> <span class="n">single_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">single_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-313"><a href="#GatekeeperAgent-313"><span class="linenos">313</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-314"><a href="#GatekeeperAgent-314"><span class="linenos">314</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-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><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">_response</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span>
</span><span id="GatekeeperAgent-316"><a href="#GatekeeperAgent-316"><span class="linenos">316</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-316"><a href="#GatekeeperAgent-316"><span class="linenos">316</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-317"><a href="#GatekeeperAgent-317"><span class="linenos">317</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-317"><a href="#GatekeeperAgent-317"><span class="linenos">317</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-318"><a href="#GatekeeperAgent-318"><span class="linenos">318</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="nb">any</span><span class="p">(</span><span class="n">single_solution</span><span class="o">.</span><span class="n">accepted</span> <span class="k">for</span> <span class="n">single_solution</span> <span class="ow">in</span> <span class="n">solution</span><span class="p">)</span> </span><span id="GatekeeperAgent-318"><a href="#GatekeeperAgent-318"><span class="linenos">318</span></a>
</span><span id="GatekeeperAgent-319"><a href="#GatekeeperAgent-319"><span class="linenos">319</span></a> </span><span id="GatekeeperAgent-319"><a href="#GatekeeperAgent-319"><span class="linenos">319</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-320"><a href="#GatekeeperAgent-320"><span class="linenos">320</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-320"><a href="#GatekeeperAgent-320"><span class="linenos">320</span></a>
</span><span id="GatekeeperAgent-321"><a href="#GatekeeperAgent-321"><span class="linenos">321</span></a> </span><span id="GatekeeperAgent-321"><a href="#GatekeeperAgent-321"><span class="linenos">321</span></a> <span class="nd">@abstractmethod</span>
</span><span id="GatekeeperAgent-322"><a href="#GatekeeperAgent-322"><span class="linenos">322</span></a> <span class="nd">@abstractmethod</span> </span><span id="GatekeeperAgent-322"><a href="#GatekeeperAgent-322"><span class="linenos">322</span></a> <span class="nd">@validate_call</span>
</span><span id="GatekeeperAgent-323"><a href="#GatekeeperAgent-323"><span class="linenos">323</span></a> <span class="nd">@validate_call</span> </span><span id="GatekeeperAgent-323"><a href="#GatekeeperAgent-323"><span class="linenos">323</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-324"><a href="#GatekeeperAgent-324"><span class="linenos">324</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">List</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">List</span><span class="p">[</span><span class="n">RiddleSolution</span><span class="p">]:</span> </span><span id="GatekeeperAgent-324"><a href="#GatekeeperAgent-324"><span class="linenos">324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-325"><a href="#GatekeeperAgent-325"><span class="linenos">325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="GatekeeperAgent-325"><a href="#GatekeeperAgent-325"><span class="linenos">325</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-326"><a href="#GatekeeperAgent-326"><span class="linenos">326</span></a><span class="sd"> Check the `solution` (multiple if multiple solver involved) of `riddle` and return solutions with populated `solution[i].accepted` and `solution[i].review`.</span> </span><span id="GatekeeperAgent-326"><a href="#GatekeeperAgent-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent-327"><a href="#GatekeeperAgent-327"><span class="linenos">327</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1559,22 +1557,22 @@ File with equal content will not be written again.</p>
<div class="decorator">@validate_call</div> <div class="decorator">@validate_call</div>
<span class="def">def</span> <span class="def">def</span>
<span class="name">handle</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">solution</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span><span class="p">]</span>,</span><span class="param"> <span class="n">riddle</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#Riddle">ums.utils.types.Riddle</a></span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span><span class="p">]</span>:</span></span> <span class="name">handle</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">solution</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span>,</span><span class="param"> <span class="n">riddle</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#Riddle">ums.utils.types.Riddle</a></span></span><span class="return-annotation">) -> <span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span>:</span></span>
<label class="view-source-button" for="GatekeeperAgent.handle-view-source"><span>View Source</span></label> <label class="view-source-button" for="GatekeeperAgent.handle-view-source"><span>View Source</span></label>
</div> </div>
<a class="headerlink" href="#GatekeeperAgent.handle"></a> <a class="headerlink" href="#GatekeeperAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent.handle-322"><a href="#GatekeeperAgent.handle-322"><span class="linenos">322</span></a> <span class="nd">@abstractmethod</span> <div class="pdoc-code codehilite"><pre><span></span><span id="GatekeeperAgent.handle-321"><a href="#GatekeeperAgent.handle-321"><span class="linenos">321</span></a> <span class="nd">@abstractmethod</span>
</span><span id="GatekeeperAgent.handle-323"><a href="#GatekeeperAgent.handle-323"><span class="linenos">323</span></a> <span class="nd">@validate_call</span> </span><span id="GatekeeperAgent.handle-322"><a href="#GatekeeperAgent.handle-322"><span class="linenos">322</span></a> <span class="nd">@validate_call</span>
</span><span id="GatekeeperAgent.handle-324"><a href="#GatekeeperAgent.handle-324"><span class="linenos">324</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">List</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">List</span><span class="p">[</span><span class="n">RiddleSolution</span><span class="p">]:</span> </span><span id="GatekeeperAgent.handle-323"><a href="#GatekeeperAgent.handle-323"><span class="linenos">323</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-325"><a href="#GatekeeperAgent.handle-325"><span class="linenos">325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="GatekeeperAgent.handle-324"><a href="#GatekeeperAgent.handle-324"><span class="linenos">324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="GatekeeperAgent.handle-326"><a href="#GatekeeperAgent.handle-326"><span class="linenos">326</span></a><span class="sd"> Check the `solution` (multiple if multiple solver involved) of `riddle` and return solutions with populated `solution[i].accepted` and `solution[i].review`.</span> </span><span id="GatekeeperAgent.handle-325"><a href="#GatekeeperAgent.handle-325"><span class="linenos">325</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-327"><a href="#GatekeeperAgent.handle-327"><span class="linenos">327</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="GatekeeperAgent.handle-326"><a href="#GatekeeperAgent.handle-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
<div class="docstring"><p>Check the <code>solution</code> (multiple if multiple solver involved) of <code>riddle</code> and return solutions with populated <code>solution[i].accepted</code> and <code>solution[i].review</code>.</p> <div class="docstring"><p>Check the <code>solution</code> of <code>riddle</code> and return solution with populated <code>solution.accepted</code> and <code>solution.review</code>.</p>
</div> </div>

View File

@ -114,75 +114,73 @@
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="c1"># source code released under the terms of GNU Public License Version 3</span> </span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="c1"># source code released under the terms of GNU Public License Version 3</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="c1"># https://www.gnu.org/licenses/gpl-3.0.txt</span> </span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="c1"># https://www.gnu.org/licenses/gpl-3.0.txt</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a> </span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a>
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="kn">import</span> <span class="nn">random</span> </span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">List</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a> </span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="kn">from</span> <span class="nn">ums.agent</span> <span class="kn">import</span> <span class="n">ExtractAudioAgent</span><span class="p">,</span> <span class="n">ExtractImageAgent</span><span class="p">,</span> <span class="n">ExtractTextAgent</span><span class="p">,</span> <span class="n">SolveAgent</span><span class="p">,</span> <span class="n">GatekeeperAgent</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">List</span> </span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="kn">from</span> <span class="nn">ums.agent</span> <span class="kn">import</span> <span class="n">ExtractAudioAgent</span><span class="p">,</span> <span class="n">ExtractImageAgent</span><span class="p">,</span> <span class="n">ExtractTextAgent</span><span class="p">,</span> <span class="n">SolveAgent</span><span class="p">,</span> <span class="n">GatekeeperAgent</span> </span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="kn">from</span> <span class="nn">ums.utils</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">RiddleData</span><span class="p">,</span> <span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">RiddleStatus</span><span class="p">,</span> <span class="n">ExtractedData</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a> </span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a>
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="kn">from</span> <span class="nn">ums.utils</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">Riddle</span><span class="p">,</span> <span class="n">RiddleData</span><span class="p">,</span> <span class="n">RiddleSolution</span><span class="p">,</span> <span class="n">RiddleStatus</span><span class="p">,</span> <span class="n">ExtractedData</span> </span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a> </span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="sd"> Examples for simple agents.</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a>
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="sd"> Examples for simple agents.</span> </span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="sd"> Each agent is represented by its own class. The handling of tasks is done by `handle()` in each agent.</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a> </span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a>
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="sd"> Each agent is represented by its own class. The handling of tasks is done by `handle()` in each agent.</span> </span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="sd"> Finally `AGENT_CLASSES` contains the classes of the agents in a list. Via environmental variables this list is specified to the ums.agent system. </span>
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> </span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a><span class="sd"> Finally `AGENT_CLASSES` contains the classes of the agents in a list. Via environmental variables this list is specified to the ums.agent system. </span> </span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a><span class="k">class</span> <span class="nc">MyExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAudioAgent</span><span class="p">):</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> </span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a><span class="k">class</span> <span class="nc">MyExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAudioAgent</span><span class="p">):</span> </span><span id="L-26"><a href="#L-26"><span class="linenos">26</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> </span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Audio Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> </span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="k">return</span> <span class="n">data</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Audio Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a><span class="k">class</span> <span class="nc">MyExtractImageAgent</span><span class="p">(</span><span class="n">ExtractImageAgent</span><span class="p">):</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> </span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a><span class="k">class</span> <span class="nc">MyExtractImageAgent</span><span class="p">(</span><span class="n">ExtractImageAgent</span><span class="p">):</span> </span><span id="L-32"><a href="#L-32"><span class="linenos">32</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> </span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Image Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> </span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Image Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">extracted</span> <span class="o">=</span> <span class="n">ExtractedData</span><span class="p">(</span><span class="n">other</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;info&quot;</span><span class="p">:</span><span class="s2">&quot;just a test&quot;</span><span class="p">})</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> </span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">data</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">store_extracted</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">extracted</span><span class="p">)</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">extracted</span> <span class="o">=</span> <span class="n">ExtractedData</span><span class="p">(</span><span class="n">other</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;info&quot;</span><span class="p">:</span><span class="s2">&quot;just a test&quot;</span><span class="p">})</span> </span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="k">return</span> <span class="n">data</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">data</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">store_extracted</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">extracted</span><span class="p">)</span> </span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a>
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a><span class="k">class</span> <span class="nc">MyExtractTextAgent</span><span class="p">(</span><span class="n">ExtractTextAgent</span><span class="p">):</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> </span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a>
</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a><span class="k">class</span> <span class="nc">MyExtractTextAgent</span><span class="p">(</span><span class="n">ExtractTextAgent</span><span class="p">):</span> </span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="k">def</span> <span class="nf">before_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">:</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">send_it</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="kc">None</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> </span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The response will be:&quot;</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="k">def</span> <span class="nf">before_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">:</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">send_it</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="kc">None</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The response will be:&quot;</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span> </span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a>
</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="L-45"><a href="#L-45"><span class="linenos">45</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> </span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Text Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos">47</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> </span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="k">return</span> <span class="n">data</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Text Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a>
</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a>
</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a> </span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a><span class="k">class</span> <span class="nc">MySolveAgent</span><span class="p">(</span><span class="n">SolveAgent</span><span class="p">):</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a> </span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a>
</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a><span class="k">class</span> <span class="nc">MySolveAgent</span><span class="p">(</span><span class="n">SolveAgent</span><span class="p">):</span> </span><span id="L-52"><a href="#L-52"><span class="linenos">52</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-53"><a href="#L-53"><span class="linenos">53</span></a> </span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a>
</span><span id="L-54"><a href="#L-54"><span class="linenos">54</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-54"><a href="#L-54"><span class="linenos">54</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a> </span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_extracted</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span> </span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a>
</span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a> <span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_extracted</span><span class="p">(</span><span class="n">d</span><span class="p">))</span> </span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="s2">&quot;test&quot;</span><span class="p">:</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a> </span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a> <span class="n">status</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="s2">&quot;test&quot;</span><span class="p">:</span> </span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a> <span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a> <span class="n">status</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span> </span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sub_riddle</span><span class="p">(</span><span class="n">riddle</span><span class="o">=</span><span class="n">Riddle</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="s2">&quot;Haha&quot;</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s2">&quot;Blubber&quot;</span><span class="p">),</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a> <span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a>
</span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sub_riddle</span><span class="p">(</span><span class="n">riddle</span><span class="o">=</span><span class="n">Riddle</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="s2">&quot;Haha&quot;</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s2">&quot;Blubber&quot;</span><span class="p">),</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span> </span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a> <span class="k">return</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;Huii&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="s2">&quot;Blubb&quot;</span><span class="p">)</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a> </span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a>
</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a> <span class="k">return</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;Huii&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Blubb, </span><span class="si">{</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a>
</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a> </span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a><span class="k">class</span> <span class="nc">MyGatekeeperAgent</span><span class="p">(</span><span class="n">GatekeeperAgent</span><span class="p">):</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a> </span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a>
</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a><span class="k">class</span> <span class="nc">MyGatekeeperAgent</span><span class="p">(</span><span class="n">GatekeeperAgent</span><span class="p">):</span> </span><span id="L-67"><a href="#L-67"><span class="linenos">67</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-68"><a href="#L-68"><span class="linenos">68</span></a> </span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos">69</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">List</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-69"><a href="#L-69"><span class="linenos">69</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">review</span> <span class="o">=</span> <span class="s2">&quot;Ok&quot;</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a> <span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span> </span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a>
</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a> <span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">review</span> <span class="o">=</span> <span class="s2">&quot;Ok&quot;</span> </span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a> <span class="k">return</span> <span class="n">solution</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a> </span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a>
</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a> <span class="k">return</span> <span class="n">solution</span> </span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="n">AGENT_CLASSES</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a> </span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a> <span class="n">MyExtractAudioAgent</span><span class="p">,</span> <span class="n">MyExtractImageAgent</span><span class="p">,</span> <span class="n">MyExtractTextAgent</span><span class="p">,</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a><span class="n">AGENT_CLASSES</span> <span class="o">=</span> <span class="p">[</span> </span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a> <span class="n">MySolveAgent</span><span class="p">,</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a> <span class="n">MyExtractAudioAgent</span><span class="p">,</span> <span class="n">MyExtractImageAgent</span><span class="p">,</span> <span class="n">MyExtractTextAgent</span><span class="p">,</span> </span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a> <span class="n">MyGatekeeperAgent</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="n">MySolveAgent</span><span class="p">,</span> </span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a><span class="p">]</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a> <span class="n">MyGatekeeperAgent</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos">79</span></a><span class="p">]</span>
</span></pre></div> </span></pre></div>
@ -198,11 +196,11 @@
</div> </div>
<a class="headerlink" href="#MyExtractAudioAgent"></a> <a class="headerlink" href="#MyExtractAudioAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractAudioAgent-27"><a href="#MyExtractAudioAgent-27"><span class="linenos">27</span></a><span class="k">class</span> <span class="nc">MyExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAudioAgent</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractAudioAgent-25"><a href="#MyExtractAudioAgent-25"><span class="linenos">25</span></a><span class="k">class</span> <span class="nc">MyExtractAudioAgent</span><span class="p">(</span><span class="n">ExtractAudioAgent</span><span class="p">):</span>
</span><span id="MyExtractAudioAgent-28"><a href="#MyExtractAudioAgent-28"><span class="linenos">28</span></a> </span><span id="MyExtractAudioAgent-26"><a href="#MyExtractAudioAgent-26"><span class="linenos">26</span></a>
</span><span id="MyExtractAudioAgent-29"><a href="#MyExtractAudioAgent-29"><span class="linenos">29</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> </span><span id="MyExtractAudioAgent-27"><a href="#MyExtractAudioAgent-27"><span class="linenos">27</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="MyExtractAudioAgent-30"><a href="#MyExtractAudioAgent-30"><span class="linenos">30</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Audio Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="MyExtractAudioAgent-28"><a href="#MyExtractAudioAgent-28"><span class="linenos">28</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Audio Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="MyExtractAudioAgent-31"><a href="#MyExtractAudioAgent-31"><span class="linenos">31</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="MyExtractAudioAgent-29"><a href="#MyExtractAudioAgent-29"><span class="linenos">29</span></a> <span class="k">return</span> <span class="n">data</span>
</span></pre></div> </span></pre></div>
@ -221,9 +219,9 @@
</div> </div>
<a class="headerlink" href="#MyExtractAudioAgent.handle"></a> <a class="headerlink" href="#MyExtractAudioAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractAudioAgent.handle-29"><a href="#MyExtractAudioAgent.handle-29"><span class="linenos">29</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractAudioAgent.handle-27"><a href="#MyExtractAudioAgent.handle-27"><span class="linenos">27</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="MyExtractAudioAgent.handle-30"><a href="#MyExtractAudioAgent.handle-30"><span class="linenos">30</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Audio Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="MyExtractAudioAgent.handle-28"><a href="#MyExtractAudioAgent.handle-28"><span class="linenos">28</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Audio Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="MyExtractAudioAgent.handle-31"><a href="#MyExtractAudioAgent.handle-31"><span class="linenos">31</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="MyExtractAudioAgent.handle-29"><a href="#MyExtractAudioAgent.handle-29"><span class="linenos">29</span></a> <span class="k">return</span> <span class="n">data</span>
</span></pre></div> </span></pre></div>
@ -266,14 +264,14 @@
</div> </div>
<a class="headerlink" href="#MyExtractImageAgent"></a> <a class="headerlink" href="#MyExtractImageAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractImageAgent-33"><a href="#MyExtractImageAgent-33"><span class="linenos">33</span></a><span class="k">class</span> <span class="nc">MyExtractImageAgent</span><span class="p">(</span><span class="n">ExtractImageAgent</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractImageAgent-31"><a href="#MyExtractImageAgent-31"><span class="linenos">31</span></a><span class="k">class</span> <span class="nc">MyExtractImageAgent</span><span class="p">(</span><span class="n">ExtractImageAgent</span><span class="p">):</span>
</span><span id="MyExtractImageAgent-34"><a href="#MyExtractImageAgent-34"><span class="linenos">34</span></a> </span><span id="MyExtractImageAgent-32"><a href="#MyExtractImageAgent-32"><span class="linenos">32</span></a>
</span><span id="MyExtractImageAgent-35"><a href="#MyExtractImageAgent-35"><span class="linenos">35</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> </span><span id="MyExtractImageAgent-33"><a href="#MyExtractImageAgent-33"><span class="linenos">33</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="MyExtractImageAgent-36"><a href="#MyExtractImageAgent-36"><span class="linenos">36</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Image Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="MyExtractImageAgent-34"><a href="#MyExtractImageAgent-34"><span class="linenos">34</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Image Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="MyExtractImageAgent-37"><a href="#MyExtractImageAgent-37"><span class="linenos">37</span></a> </span><span id="MyExtractImageAgent-35"><a href="#MyExtractImageAgent-35"><span class="linenos">35</span></a>
</span><span id="MyExtractImageAgent-38"><a href="#MyExtractImageAgent-38"><span class="linenos">38</span></a> <span class="n">extracted</span> <span class="o">=</span> <span class="n">ExtractedData</span><span class="p">(</span><span class="n">other</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;info&quot;</span><span class="p">:</span><span class="s2">&quot;just a test&quot;</span><span class="p">})</span> </span><span id="MyExtractImageAgent-36"><a href="#MyExtractImageAgent-36"><span class="linenos">36</span></a> <span class="n">extracted</span> <span class="o">=</span> <span class="n">ExtractedData</span><span class="p">(</span><span class="n">other</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;info&quot;</span><span class="p">:</span><span class="s2">&quot;just a test&quot;</span><span class="p">})</span>
</span><span id="MyExtractImageAgent-39"><a href="#MyExtractImageAgent-39"><span class="linenos">39</span></a> <span class="n">data</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">store_extracted</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">extracted</span><span class="p">)</span> </span><span id="MyExtractImageAgent-37"><a href="#MyExtractImageAgent-37"><span class="linenos">37</span></a> <span class="n">data</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">store_extracted</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">extracted</span><span class="p">)</span>
</span><span id="MyExtractImageAgent-40"><a href="#MyExtractImageAgent-40"><span class="linenos">40</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="MyExtractImageAgent-38"><a href="#MyExtractImageAgent-38"><span class="linenos">38</span></a> <span class="k">return</span> <span class="n">data</span>
</span></pre></div> </span></pre></div>
@ -292,12 +290,12 @@
</div> </div>
<a class="headerlink" href="#MyExtractImageAgent.handle"></a> <a class="headerlink" href="#MyExtractImageAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractImageAgent.handle-35"><a href="#MyExtractImageAgent.handle-35"><span class="linenos">35</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractImageAgent.handle-33"><a href="#MyExtractImageAgent.handle-33"><span class="linenos">33</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="MyExtractImageAgent.handle-36"><a href="#MyExtractImageAgent.handle-36"><span class="linenos">36</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Image Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="MyExtractImageAgent.handle-34"><a href="#MyExtractImageAgent.handle-34"><span class="linenos">34</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Image Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="MyExtractImageAgent.handle-37"><a href="#MyExtractImageAgent.handle-37"><span class="linenos">37</span></a> </span><span id="MyExtractImageAgent.handle-35"><a href="#MyExtractImageAgent.handle-35"><span class="linenos">35</span></a>
</span><span id="MyExtractImageAgent.handle-38"><a href="#MyExtractImageAgent.handle-38"><span class="linenos">38</span></a> <span class="n">extracted</span> <span class="o">=</span> <span class="n">ExtractedData</span><span class="p">(</span><span class="n">other</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;info&quot;</span><span class="p">:</span><span class="s2">&quot;just a test&quot;</span><span class="p">})</span> </span><span id="MyExtractImageAgent.handle-36"><a href="#MyExtractImageAgent.handle-36"><span class="linenos">36</span></a> <span class="n">extracted</span> <span class="o">=</span> <span class="n">ExtractedData</span><span class="p">(</span><span class="n">other</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;info&quot;</span><span class="p">:</span><span class="s2">&quot;just a test&quot;</span><span class="p">})</span>
</span><span id="MyExtractImageAgent.handle-39"><a href="#MyExtractImageAgent.handle-39"><span class="linenos">39</span></a> <span class="n">data</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">store_extracted</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">extracted</span><span class="p">)</span> </span><span id="MyExtractImageAgent.handle-37"><a href="#MyExtractImageAgent.handle-37"><span class="linenos">37</span></a> <span class="n">data</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">store_extracted</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">extracted</span><span class="p">)</span>
</span><span id="MyExtractImageAgent.handle-40"><a href="#MyExtractImageAgent.handle-40"><span class="linenos">40</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="MyExtractImageAgent.handle-38"><a href="#MyExtractImageAgent.handle-38"><span class="linenos">38</span></a> <span class="k">return</span> <span class="n">data</span>
</span></pre></div> </span></pre></div>
@ -340,15 +338,15 @@
</div> </div>
<a class="headerlink" href="#MyExtractTextAgent"></a> <a class="headerlink" href="#MyExtractTextAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractTextAgent-42"><a href="#MyExtractTextAgent-42"><span class="linenos">42</span></a><span class="k">class</span> <span class="nc">MyExtractTextAgent</span><span class="p">(</span><span class="n">ExtractTextAgent</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractTextAgent-40"><a href="#MyExtractTextAgent-40"><span class="linenos">40</span></a><span class="k">class</span> <span class="nc">MyExtractTextAgent</span><span class="p">(</span><span class="n">ExtractTextAgent</span><span class="p">):</span>
</span><span id="MyExtractTextAgent-43"><a href="#MyExtractTextAgent-43"><span class="linenos">43</span></a> </span><span id="MyExtractTextAgent-41"><a href="#MyExtractTextAgent-41"><span class="linenos">41</span></a>
</span><span id="MyExtractTextAgent-44"><a href="#MyExtractTextAgent-44"><span class="linenos">44</span></a> <span class="k">def</span> <span class="nf">before_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">:</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">send_it</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="kc">None</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span><span id="MyExtractTextAgent-42"><a href="#MyExtractTextAgent-42"><span class="linenos">42</span></a> <span class="k">def</span> <span class="nf">before_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">:</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">send_it</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="kc">None</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="MyExtractTextAgent-45"><a href="#MyExtractTextAgent-45"><span class="linenos">45</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The response will be:&quot;</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span> </span><span id="MyExtractTextAgent-43"><a href="#MyExtractTextAgent-43"><span class="linenos">43</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The response will be:&quot;</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span>
</span><span id="MyExtractTextAgent-46"><a href="#MyExtractTextAgent-46"><span class="linenos">46</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="MyExtractTextAgent-44"><a href="#MyExtractTextAgent-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="MyExtractTextAgent-47"><a href="#MyExtractTextAgent-47"><span class="linenos">47</span></a> </span><span id="MyExtractTextAgent-45"><a href="#MyExtractTextAgent-45"><span class="linenos">45</span></a>
</span><span id="MyExtractTextAgent-48"><a href="#MyExtractTextAgent-48"><span class="linenos">48</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> </span><span id="MyExtractTextAgent-46"><a href="#MyExtractTextAgent-46"><span class="linenos">46</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="MyExtractTextAgent-49"><a href="#MyExtractTextAgent-49"><span class="linenos">49</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Text Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="MyExtractTextAgent-47"><a href="#MyExtractTextAgent-47"><span class="linenos">47</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Text Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="MyExtractTextAgent-50"><a href="#MyExtractTextAgent-50"><span class="linenos">50</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="MyExtractTextAgent-48"><a href="#MyExtractTextAgent-48"><span class="linenos">48</span></a> <span class="k">return</span> <span class="n">data</span>
</span></pre></div> </span></pre></div>
@ -367,9 +365,9 @@
</div> </div>
<a class="headerlink" href="#MyExtractTextAgent.before_response"></a> <a class="headerlink" href="#MyExtractTextAgent.before_response"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractTextAgent.before_response-44"><a href="#MyExtractTextAgent.before_response-44"><span class="linenos">44</span></a> <span class="k">def</span> <span class="nf">before_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">:</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">send_it</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="kc">None</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractTextAgent.before_response-42"><a href="#MyExtractTextAgent.before_response-42"><span class="linenos">42</span></a> <span class="k">def</span> <span class="nf">before_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">:</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">send_it</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="kc">None</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="MyExtractTextAgent.before_response-45"><a href="#MyExtractTextAgent.before_response-45"><span class="linenos">45</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The response will be:&quot;</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span> </span><span id="MyExtractTextAgent.before_response-43"><a href="#MyExtractTextAgent.before_response-43"><span class="linenos">43</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The response will be:&quot;</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span>
</span><span id="MyExtractTextAgent.before_response-46"><a href="#MyExtractTextAgent.before_response-46"><span class="linenos">46</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="MyExtractTextAgent.before_response-44"><a href="#MyExtractTextAgent.before_response-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="kc">True</span>
</span></pre></div> </span></pre></div>
@ -394,9 +392,9 @@ Thus, by overwriting this method, a response can be prevented.</p>
</div> </div>
<a class="headerlink" href="#MyExtractTextAgent.handle"></a> <a class="headerlink" href="#MyExtractTextAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractTextAgent.handle-48"><a href="#MyExtractTextAgent.handle-48"><span class="linenos">48</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyExtractTextAgent.handle-46"><a href="#MyExtractTextAgent.handle-46"><span class="linenos">46</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">data</span><span class="p">:</span> <span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RiddleData</span><span class="p">:</span>
</span><span id="MyExtractTextAgent.handle-49"><a href="#MyExtractTextAgent.handle-49"><span class="linenos">49</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Text Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span> </span><span id="MyExtractTextAgent.handle-47"><a href="#MyExtractTextAgent.handle-47"><span class="linenos">47</span></a> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Text Process:&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">file_plain</span><span class="p">)</span>
</span><span id="MyExtractTextAgent.handle-50"><a href="#MyExtractTextAgent.handle-50"><span class="linenos">50</span></a> <span class="k">return</span> <span class="n">data</span> </span><span id="MyExtractTextAgent.handle-48"><a href="#MyExtractTextAgent.handle-48"><span class="linenos">48</span></a> <span class="k">return</span> <span class="n">data</span>
</span></pre></div> </span></pre></div>
@ -438,19 +436,19 @@ Thus, by overwriting this method, a response can be prevented.</p>
</div> </div>
<a class="headerlink" href="#MySolveAgent"></a> <a class="headerlink" href="#MySolveAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MySolveAgent-53"><a href="#MySolveAgent-53"><span class="linenos">53</span></a><span class="k">class</span> <span class="nc">MySolveAgent</span><span class="p">(</span><span class="n">SolveAgent</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MySolveAgent-51"><a href="#MySolveAgent-51"><span class="linenos">51</span></a><span class="k">class</span> <span class="nc">MySolveAgent</span><span class="p">(</span><span class="n">SolveAgent</span><span class="p">):</span>
</span><span id="MySolveAgent-52"><a href="#MySolveAgent-52"><span class="linenos">52</span></a>
</span><span id="MySolveAgent-53"><a href="#MySolveAgent-53"><span class="linenos">53</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="MySolveAgent-54"><a href="#MySolveAgent-54"><span class="linenos">54</span></a> </span><span id="MySolveAgent-54"><a href="#MySolveAgent-54"><span class="linenos">54</span></a>
</span><span id="MySolveAgent-55"><a href="#MySolveAgent-55"><span class="linenos">55</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="MySolveAgent-55"><a href="#MySolveAgent-55"><span class="linenos">55</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
</span><span id="MySolveAgent-56"><a href="#MySolveAgent-56"><span class="linenos">56</span></a> </span><span id="MySolveAgent-56"><a href="#MySolveAgent-56"><span class="linenos">56</span></a> <span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_extracted</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="MySolveAgent-57"><a href="#MySolveAgent-57"><span class="linenos">57</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span> </span><span id="MySolveAgent-57"><a href="#MySolveAgent-57"><span class="linenos">57</span></a>
</span><span id="MySolveAgent-58"><a href="#MySolveAgent-58"><span class="linenos">58</span></a> <span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_extracted</span><span class="p">(</span><span class="n">d</span><span class="p">))</span> </span><span id="MySolveAgent-58"><a href="#MySolveAgent-58"><span class="linenos">58</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="s2">&quot;test&quot;</span><span class="p">:</span>
</span><span id="MySolveAgent-59"><a href="#MySolveAgent-59"><span class="linenos">59</span></a> </span><span id="MySolveAgent-59"><a href="#MySolveAgent-59"><span class="linenos">59</span></a> <span class="n">status</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span>
</span><span id="MySolveAgent-60"><a href="#MySolveAgent-60"><span class="linenos">60</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="s2">&quot;test&quot;</span><span class="p">:</span> </span><span id="MySolveAgent-60"><a href="#MySolveAgent-60"><span class="linenos">60</span></a> <span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="MySolveAgent-61"><a href="#MySolveAgent-61"><span class="linenos">61</span></a> <span class="n">status</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span> </span><span id="MySolveAgent-61"><a href="#MySolveAgent-61"><span class="linenos">61</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sub_riddle</span><span class="p">(</span><span class="n">riddle</span><span class="o">=</span><span class="n">Riddle</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="s2">&quot;Haha&quot;</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s2">&quot;Blubber&quot;</span><span class="p">),</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span>
</span><span id="MySolveAgent-62"><a href="#MySolveAgent-62"><span class="linenos">62</span></a> <span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="MySolveAgent-62"><a href="#MySolveAgent-62"><span class="linenos">62</span></a>
</span><span id="MySolveAgent-63"><a href="#MySolveAgent-63"><span class="linenos">63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sub_riddle</span><span class="p">(</span><span class="n">riddle</span><span class="o">=</span><span class="n">Riddle</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="s2">&quot;Haha&quot;</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s2">&quot;Blubber&quot;</span><span class="p">),</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span> </span><span id="MySolveAgent-63"><a href="#MySolveAgent-63"><span class="linenos">63</span></a> <span class="k">return</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;Huii&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="s2">&quot;Blubb&quot;</span><span class="p">)</span>
</span><span id="MySolveAgent-64"><a href="#MySolveAgent-64"><span class="linenos">64</span></a>
</span><span id="MySolveAgent-65"><a href="#MySolveAgent-65"><span class="linenos">65</span></a> <span class="k">return</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;Huii&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Blubb, </span><span class="si">{</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div> </span></pre></div>
@ -469,21 +467,21 @@ Thus, by overwriting this method, a response can be prevented.</p>
</div> </div>
<a class="headerlink" href="#MySolveAgent.handle"></a> <a class="headerlink" href="#MySolveAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MySolveAgent.handle-55"><a href="#MySolveAgent.handle-55"><span class="linenos">55</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> <div class="pdoc-code codehilite"><pre><span></span><span id="MySolveAgent.handle-53"><a href="#MySolveAgent.handle-53"><span class="linenos">53</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="MySolveAgent.handle-56"><a href="#MySolveAgent.handle-56"><span class="linenos">56</span></a> </span><span id="MySolveAgent.handle-54"><a href="#MySolveAgent.handle-54"><span class="linenos">54</span></a>
</span><span id="MySolveAgent.handle-57"><a href="#MySolveAgent.handle-57"><span class="linenos">57</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span> </span><span id="MySolveAgent.handle-55"><a href="#MySolveAgent.handle-55"><span class="linenos">55</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
</span><span id="MySolveAgent.handle-58"><a href="#MySolveAgent.handle-58"><span class="linenos">58</span></a> <span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_extracted</span><span class="p">(</span><span class="n">d</span><span class="p">))</span> </span><span id="MySolveAgent.handle-56"><a href="#MySolveAgent.handle-56"><span class="linenos">56</span></a> <span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_extracted</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="MySolveAgent.handle-59"><a href="#MySolveAgent.handle-59"><span class="linenos">59</span></a> </span><span id="MySolveAgent.handle-57"><a href="#MySolveAgent.handle-57"><span class="linenos">57</span></a>
</span><span id="MySolveAgent.handle-60"><a href="#MySolveAgent.handle-60"><span class="linenos">60</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="s2">&quot;test&quot;</span><span class="p">:</span> </span><span id="MySolveAgent.handle-58"><a href="#MySolveAgent.handle-58"><span class="linenos">58</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="s2">&quot;test&quot;</span><span class="p">:</span>
</span><span id="MySolveAgent.handle-61"><a href="#MySolveAgent.handle-61"><span class="linenos">61</span></a> <span class="n">status</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span> </span><span id="MySolveAgent.handle-59"><a href="#MySolveAgent.handle-59"><span class="linenos">59</span></a> <span class="n">status</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span>
</span><span id="MySolveAgent.handle-62"><a href="#MySolveAgent.handle-62"><span class="linenos">62</span></a> <span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="MySolveAgent.handle-60"><a href="#MySolveAgent.handle-60"><span class="linenos">60</span></a> <span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="MySolveAgent.handle-63"><a href="#MySolveAgent.handle-63"><span class="linenos">63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sub_riddle</span><span class="p">(</span><span class="n">riddle</span><span class="o">=</span><span class="n">Riddle</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="s2">&quot;Haha&quot;</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s2">&quot;Blubber&quot;</span><span class="p">),</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span> </span><span id="MySolveAgent.handle-61"><a href="#MySolveAgent.handle-61"><span class="linenos">61</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sub_riddle</span><span class="p">(</span><span class="n">riddle</span><span class="o">=</span><span class="n">Riddle</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="s2">&quot;Haha&quot;</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s2">&quot;Blubber&quot;</span><span class="p">),</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span>
</span><span id="MySolveAgent.handle-64"><a href="#MySolveAgent.handle-64"><span class="linenos">64</span></a> </span><span id="MySolveAgent.handle-62"><a href="#MySolveAgent.handle-62"><span class="linenos">62</span></a>
</span><span id="MySolveAgent.handle-65"><a href="#MySolveAgent.handle-65"><span class="linenos">65</span></a> <span class="k">return</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;Huii&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Blubb, </span><span class="si">{</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="MySolveAgent.handle-63"><a href="#MySolveAgent.handle-63"><span class="linenos">63</span></a> <span class="k">return</span> <span class="n">RiddleSolution</span><span class="p">(</span><span class="n">solution</span><span class="o">=</span><span class="s2">&quot;Huii&quot;</span><span class="p">,</span> <span class="n">explanation</span><span class="o">=</span><span class="s2">&quot;Blubb&quot;</span><span class="p">)</span>
</span></pre></div> </span></pre></div>
<div class="docstring"><p>Solve the <code>riddle</code> using <code>data</code> and return a single solution.</p> <div class="docstring"><p>Solve the <code>riddle</code> using <code>data</code> and return a solution.</p>
</div> </div>
@ -517,13 +515,13 @@ Thus, by overwriting this method, a response can be prevented.</p>
</div> </div>
<a class="headerlink" href="#MyGatekeeperAgent"></a> <a class="headerlink" href="#MyGatekeeperAgent"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyGatekeeperAgent-68"><a href="#MyGatekeeperAgent-68"><span class="linenos">68</span></a><span class="k">class</span> <span class="nc">MyGatekeeperAgent</span><span class="p">(</span><span class="n">GatekeeperAgent</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MyGatekeeperAgent-66"><a href="#MyGatekeeperAgent-66"><span class="linenos">66</span></a><span class="k">class</span> <span class="nc">MyGatekeeperAgent</span><span class="p">(</span><span class="n">GatekeeperAgent</span><span class="p">):</span>
</span><span id="MyGatekeeperAgent-69"><a href="#MyGatekeeperAgent-69"><span class="linenos">69</span></a> </span><span id="MyGatekeeperAgent-67"><a href="#MyGatekeeperAgent-67"><span class="linenos">67</span></a>
</span><span id="MyGatekeeperAgent-70"><a href="#MyGatekeeperAgent-70"><span class="linenos">70</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">List</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="MyGatekeeperAgent-68"><a href="#MyGatekeeperAgent-68"><span class="linenos">68</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="MyGatekeeperAgent-71"><a href="#MyGatekeeperAgent-71"><span class="linenos">71</span></a> <span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span> </span><span id="MyGatekeeperAgent-69"><a href="#MyGatekeeperAgent-69"><span class="linenos">69</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="MyGatekeeperAgent-72"><a href="#MyGatekeeperAgent-72"><span class="linenos">72</span></a> <span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">review</span> <span class="o">=</span> <span class="s2">&quot;Ok&quot;</span> </span><span id="MyGatekeeperAgent-70"><a href="#MyGatekeeperAgent-70"><span class="linenos">70</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">review</span> <span class="o">=</span> <span class="s2">&quot;Ok&quot;</span>
</span><span id="MyGatekeeperAgent-73"><a href="#MyGatekeeperAgent-73"><span class="linenos">73</span></a> </span><span id="MyGatekeeperAgent-71"><a href="#MyGatekeeperAgent-71"><span class="linenos">71</span></a>
</span><span id="MyGatekeeperAgent-74"><a href="#MyGatekeeperAgent-74"><span class="linenos">74</span></a> <span class="k">return</span> <span class="n">solution</span> </span><span id="MyGatekeeperAgent-72"><a href="#MyGatekeeperAgent-72"><span class="linenos">72</span></a> <span class="k">return</span> <span class="n">solution</span>
</span></pre></div> </span></pre></div>
@ -536,21 +534,21 @@ Thus, by overwriting this method, a response can be prevented.</p>
<div class="attr function"> <div class="attr function">
<span class="def">def</span> <span class="def">def</span>
<span class="name">handle</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">solution</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span><span class="p">]</span>,</span><span class="param"> <span class="n">riddle</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#Riddle">ums.utils.types.Riddle</a></span></span><span class="return-annotation">) -> <span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span>:</span></span> <span class="name">handle</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">solution</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span>,</span><span class="param"> <span class="n">riddle</span><span class="p">:</span> <span class="n"><a href="../utils/types.html#Riddle">ums.utils.types.Riddle</a></span></span><span class="return-annotation">) -> <span class="n"><a href="../utils/types.html#RiddleSolution">ums.utils.types.RiddleSolution</a></span>:</span></span>
<label class="view-source-button" for="MyGatekeeperAgent.handle-view-source"><span>View Source</span></label> <label class="view-source-button" for="MyGatekeeperAgent.handle-view-source"><span>View Source</span></label>
</div> </div>
<a class="headerlink" href="#MyGatekeeperAgent.handle"></a> <a class="headerlink" href="#MyGatekeeperAgent.handle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MyGatekeeperAgent.handle-70"><a href="#MyGatekeeperAgent.handle-70"><span class="linenos">70</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">List</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> <div class="pdoc-code codehilite"><pre><span></span><span id="MyGatekeeperAgent.handle-68"><a href="#MyGatekeeperAgent.handle-68"><span class="linenos">68</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="MyGatekeeperAgent.handle-71"><a href="#MyGatekeeperAgent.handle-71"><span class="linenos">71</span></a> <span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span> </span><span id="MyGatekeeperAgent.handle-69"><a href="#MyGatekeeperAgent.handle-69"><span class="linenos">69</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="MyGatekeeperAgent.handle-72"><a href="#MyGatekeeperAgent.handle-72"><span class="linenos">72</span></a> <span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">review</span> <span class="o">=</span> <span class="s2">&quot;Ok&quot;</span> </span><span id="MyGatekeeperAgent.handle-70"><a href="#MyGatekeeperAgent.handle-70"><span class="linenos">70</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">review</span> <span class="o">=</span> <span class="s2">&quot;Ok&quot;</span>
</span><span id="MyGatekeeperAgent.handle-73"><a href="#MyGatekeeperAgent.handle-73"><span class="linenos">73</span></a> </span><span id="MyGatekeeperAgent.handle-71"><a href="#MyGatekeeperAgent.handle-71"><span class="linenos">71</span></a>
</span><span id="MyGatekeeperAgent.handle-74"><a href="#MyGatekeeperAgent.handle-74"><span class="linenos">74</span></a> <span class="k">return</span> <span class="n">solution</span> </span><span id="MyGatekeeperAgent.handle-72"><a href="#MyGatekeeperAgent.handle-72"><span class="linenos">72</span></a> <span class="k">return</span> <span class="n">solution</span>
</span></pre></div> </span></pre></div>
<div class="docstring"><p>Check the <code>solution</code> (multiple if multiple solver involved) of <code>riddle</code> and return solutions with populated <code>solution[i].accepted</code> and <code>solution[i].review</code>.</p> <div class="docstring"><p>Check the <code>solution</code> of <code>riddle</code> and return solution with populated <code>solution.accepted</code> and <code>solution.review</code>.</p>
</div> </div>

View File

@ -111,173 +111,173 @@
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span> </span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">PERSIST_PATH</span><span class="p">,</span> <span class="s1">&#39;messages.db&#39;</span><span class="p">),</span> </span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">PERSIST_PATH</span><span class="p">,</span> <span class="s1">&#39;messages.db&#39;</span><span class="p">),</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">check_same_thread</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> </span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">check_same_thread</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">autocommit</span><span class="o">=</span><span class="kc">False</span> </span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="p">)</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="p">)</span> </span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">row_factory</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">row_factory</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span> </span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">atexit</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="k">lambda</span> <span class="n">db</span> <span class="p">:</span> <span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">atexit</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="k">lambda</span> <span class="n">db</span> <span class="p">:</span> <span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span> </span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> </span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span> </span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> </span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_assure_tables</span><span class="p">()</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_assure_tables</span><span class="p">()</span> </span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> </span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">def</span> <span class="nf">_assure_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">def</span> <span class="nf">_assure_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;CREATE TABLE IF NOT EXISTS Messages ( </span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;CREATE TABLE IF NOT EXISTS Messages ( </span> </span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="s2"> count INTEGER PRIMARY KEY AUTOINCREMENT,</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="s2"> count INTEGER PRIMARY KEY AUTOINCREMENT,</span> </span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="s2"> id TEXT, </span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="s2"> id TEXT, </span> </span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="s2"> sender TEXT,</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="s2"> sender TEXT,</span> </span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="s2"> recipient TEXT,</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="s2"> recipient TEXT,</span> </span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="s2"> time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="s2"> time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,</span> </span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="s2"> json BLOB,</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="s2"> json BLOB,</span> </span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="s2"> processed BOOL DEFAULT FALSE,</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="s2"> processed BOOL DEFAULT FALSE,</span> </span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="s2"> solution BOOL DEFAULT NULL</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="s2"> solution BOOL DEFAULT NULL</span> </span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="s2"> )&quot;&quot;&quot;</span><span class="p">)</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a><span class="s2"> )&quot;&quot;&quot;</span><span class="p">)</span> </span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> </span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="nd">@validate_call</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="nd">@validate_call</span> </span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">def</span> <span class="nf">add_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">def</span> <span class="nf">add_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;INSERT INTO Messages (</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;INSERT INTO Messages (</span> </span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd"> id, sender, recipient, json, processed</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="sd"> id, sender, recipient, json, processed</span> </span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="sd"> ) VALUES (</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="sd"> ) VALUES (</span> </span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</span> </span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd"> )&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">{</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="sd"> )&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">{</span> </span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;id&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;id&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;sender&quot;</span> <span class="p">:</span> <span class="n">sender</span><span class="p">,</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;sender&quot;</span> <span class="p">:</span> <span class="n">sender</span><span class="p">,</span> </span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;recipient&quot;</span> <span class="p">:</span> <span class="n">recipient</span><span class="p">,</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;recipient&quot;</span> <span class="p">:</span> <span class="n">recipient</span><span class="p">,</span> </span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;json&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;json&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span> </span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;processed&quot;</span> <span class="p">:</span> <span class="n">processed</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;processed&quot;</span> <span class="p">:</span> <span class="n">processed</span> </span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="p">})</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="p">})</span> </span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">new_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT LAST_INSERT_ROWID() as last&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">new_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT LAST_INSERT_ROWID() as last&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> </span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="n">new_count</span><span class="p">[</span><span class="s1">&#39;last&#39;</span><span class="p">]</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="n">new_count</span><span class="p">[</span><span class="s1">&#39;last&#39;</span><span class="p">]</span> </span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> </span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="nd">@validate_call</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="nd">@validate_call</span> </span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">def</span> <span class="nf">set_processed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">processed</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">bool</span><span class="p">:</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">def</span> <span class="nf">set_processed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">processed</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">bool</span><span class="p">:</span> </span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET processed = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">processed</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET processed = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">processed</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span> </span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">return</span> <span class="kc">False</span> </span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">finally</span><span class="p">:</span> </span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> </span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="nd">@validate_call</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="nd">@validate_call</span> </span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">def</span> <span class="nf">set_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">set_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET solution = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET solution = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span> </span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">return</span> <span class="kc">False</span> </span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">finally</span><span class="p">:</span> </span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> </span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span> </span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">()</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">()</span> </span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> </span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="nd">@validate_call</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="nd">@validate_call</span> </span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">iterate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">def</span> <span class="nf">iterate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> </span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> </span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="o">|</span><span class="nb">int</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="o">|</span><span class="nb">int</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span> </span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> </span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">where</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">where</span> <span class="o">=</span> <span class="p">[]</span> </span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;lim&quot;</span><span class="p">:</span> <span class="n">limit</span><span class="p">,</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;lim&quot;</span><span class="p">:</span> <span class="n">limit</span><span class="p">,</span> </span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;off&quot;</span><span class="p">:</span> <span class="n">offset</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="s2">&quot;off&quot;</span><span class="p">:</span> <span class="n">offset</span> </span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="p">}</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="p">}</span> </span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> </span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span> </span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">),</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">),</span> </span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">),</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">),</span> </span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">)</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">)</span> </span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="p">):</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="p">):</span> </span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> </span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> = :</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">n</span><span class="p">))</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> = :</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">n</span><span class="p">))</span> </span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">params</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">params</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> </span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="n">time_after</span><span class="p">:</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">time_after</span><span class="p">:</span> </span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &gt; :t_after&quot;</span><span class="p">)</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &gt; :t_after&quot;</span><span class="p">)</span> </span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_after&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_after</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_after&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_after</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span> </span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> </span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">time_before</span><span class="p">:</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="n">time_before</span><span class="p">:</span> </span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &lt; :t_before&quot;</span><span class="p">)</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &lt; :t_before&quot;</span><span class="p">)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_before&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_before</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_before&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_before</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span> </span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> </span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">where</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">where</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span> </span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;WHERE &quot;</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39; AND &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">where</span><span class="p">))</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;WHERE &quot;</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39; AND &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">where</span><span class="p">))</span> </span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> </span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> </span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span> </span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="s2">&quot;SELECT COUNT(*) as count FROM Messages </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="s2">&quot;SELECT COUNT(*) as count FROM Messages </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span> </span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">params</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">params</span> </span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> </span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">yield</span> <span class="n">count</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">yield</span> <span class="n">count</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span> </span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="s2">&quot;SELECT * FROM Messages </span><span class="si">{}</span><span class="s2"> ORDER BY time DESC, count DESC LIMIT :lim OFFSET :off&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">&quot;SELECT * FROM Messages </span><span class="si">{}</span><span class="s2"> ORDER BY time DESC, count DESC LIMIT :lim OFFSET :off&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span> </span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">params</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">params</span> </span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="p">):</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="p">):</span> </span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">allow_lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">allow_lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> </span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> </span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">len</span><span class="p">()</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> </span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> </span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">len</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">len</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="sd"> See `DB.iterate` for possible values of `kwargs`.</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> See `DB.iterate` for possible values of `kwargs`.</span> </span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> </span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">))</span> </span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> </span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">_create_row_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span><span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span><span class="p">,</span> <span class="n">allow_lazy</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="n">MessageDbRow</span><span class="p">:</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">_create_row_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span><span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span><span class="p">,</span> <span class="n">allow_lazy</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="n">MessageDbRow</span><span class="p">:</span> </span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span> </span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;json&#39;</span><span class="p">],</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;json&#39;</span><span class="p">],</span> </span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;require_file_exists&quot;</span><span class="p">:</span> <span class="ow">not</span> <span class="n">allow_lazy</span><span class="p">}</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;require_file_exists&quot;</span><span class="p">:</span> <span class="ow">not</span> <span class="n">allow_lazy</span><span class="p">}</span> </span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="p">)</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="p">)</span> </span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> </span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="n">allow_lazy</span><span class="p">:</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="n">allow_lazy</span><span class="p">:</span> </span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="p">(</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="p">(</span> </span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="nb">id</span><span class="o">=</span><span class="s2">&quot;error&quot;</span><span class="p">,</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="nb">id</span><span class="o">=</span><span class="s2">&quot;error&quot;</span><span class="p">,</span> </span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">riddle</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;context&quot;</span><span class="p">:</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span><span class="s2">&quot;question&quot;</span><span class="p">:</span><span class="s2">&quot;Failed to load from Database!&quot;</span><span class="p">}</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">riddle</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;context&quot;</span><span class="p">:</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span><span class="s2">&quot;question&quot;</span><span class="p">:</span><span class="s2">&quot;Failed to load from Database!&quot;</span><span class="p">}</span> </span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="p">)</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="p">)</span> </span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">raise</span> <span class="n">e</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">raise</span> <span class="n">e</span> </span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> </span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="p">(</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="p">(</span> </span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">count</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">],</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">count</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">],</span> </span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">sender</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;sender&#39;</span><span class="p">],</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">sender</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;sender&#39;</span><span class="p">],</span> </span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">recipient</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;recipient&#39;</span><span class="p">],</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">recipient</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;recipient&#39;</span><span class="p">],</span> </span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">time</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()),</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">time</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()),</span> </span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span> </span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">processed</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;processed&#39;</span><span class="p">],</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">processed</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;processed&#39;</span><span class="p">],</span> </span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">solution</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;solution&#39;</span><span class="p">]</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">solution</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;solution&#39;</span><span class="p">]</span> </span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="p">)</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="p">)</span> </span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> </span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">def</span> <span class="nf">by_count</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="o">|</span><span class="kc">None</span><span class="p">:</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">def</span> <span class="nf">by_count</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="o">|</span><span class="kc">None</span><span class="p">:</span> </span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span> </span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM Messages WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">count</span><span class="p">,))</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM Messages WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">count</span><span class="p">,))</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="p">)</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="p">)</span> </span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="kc">None</span> </span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
</span></pre></div> </span></pre></div>
@ -300,173 +300,172 @@
</span><span id="DB-27"><a href="#DB-27"><span class="linenos"> 27</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span><span id="DB-27"><a href="#DB-27"><span class="linenos"> 27</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="DB-28"><a href="#DB-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span> </span><span id="DB-28"><a href="#DB-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span>
</span><span id="DB-29"><a href="#DB-29"><span class="linenos"> 29</span></a> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">PERSIST_PATH</span><span class="p">,</span> <span class="s1">&#39;messages.db&#39;</span><span class="p">),</span> </span><span id="DB-29"><a href="#DB-29"><span class="linenos"> 29</span></a> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">PERSIST_PATH</span><span class="p">,</span> <span class="s1">&#39;messages.db&#39;</span><span class="p">),</span>
</span><span id="DB-30"><a href="#DB-30"><span class="linenos"> 30</span></a> <span class="n">check_same_thread</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> </span><span id="DB-30"><a href="#DB-30"><span class="linenos"> 30</span></a> <span class="n">check_same_thread</span><span class="o">=</span><span class="kc">False</span>
</span><span id="DB-31"><a href="#DB-31"><span class="linenos"> 31</span></a> <span class="n">autocommit</span><span class="o">=</span><span class="kc">False</span> </span><span id="DB-31"><a href="#DB-31"><span class="linenos"> 31</span></a> <span class="p">)</span>
</span><span id="DB-32"><a href="#DB-32"><span class="linenos"> 32</span></a> <span class="p">)</span> </span><span id="DB-32"><a href="#DB-32"><span class="linenos"> 32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">row_factory</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span>
</span><span id="DB-33"><a href="#DB-33"><span class="linenos"> 33</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">row_factory</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span> </span><span id="DB-33"><a href="#DB-33"><span class="linenos"> 33</span></a> <span class="n">atexit</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="k">lambda</span> <span class="n">db</span> <span class="p">:</span> <span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="DB-34"><a href="#DB-34"><span class="linenos"> 34</span></a> <span class="n">atexit</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="k">lambda</span> <span class="n">db</span> <span class="p">:</span> <span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span> </span><span id="DB-34"><a href="#DB-34"><span class="linenos"> 34</span></a>
</span><span id="DB-35"><a href="#DB-35"><span class="linenos"> 35</span></a> </span><span id="DB-35"><a href="#DB-35"><span class="linenos"> 35</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span>
</span><span id="DB-36"><a href="#DB-36"><span class="linenos"> 36</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span> </span><span id="DB-36"><a href="#DB-36"><span class="linenos"> 36</span></a>
</span><span id="DB-37"><a href="#DB-37"><span class="linenos"> 37</span></a> </span><span id="DB-37"><a href="#DB-37"><span class="linenos"> 37</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_assure_tables</span><span class="p">()</span>
</span><span id="DB-38"><a href="#DB-38"><span class="linenos"> 38</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_assure_tables</span><span class="p">()</span> </span><span id="DB-38"><a href="#DB-38"><span class="linenos"> 38</span></a>
</span><span id="DB-39"><a href="#DB-39"><span class="linenos"> 39</span></a> </span><span id="DB-39"><a href="#DB-39"><span class="linenos"> 39</span></a> <span class="k">def</span> <span class="nf">_assure_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="DB-40"><a href="#DB-40"><span class="linenos"> 40</span></a> <span class="k">def</span> <span class="nf">_assure_tables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span><span id="DB-40"><a href="#DB-40"><span class="linenos"> 40</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="DB-41"><a href="#DB-41"><span class="linenos"> 41</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="DB-41"><a href="#DB-41"><span class="linenos"> 41</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB-42"><a href="#DB-42"><span class="linenos"> 42</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB-42"><a href="#DB-42"><span class="linenos"> 42</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;CREATE TABLE IF NOT EXISTS Messages ( </span>
</span><span id="DB-43"><a href="#DB-43"><span class="linenos"> 43</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;CREATE TABLE IF NOT EXISTS Messages ( </span> </span><span id="DB-43"><a href="#DB-43"><span class="linenos"> 43</span></a><span class="s2"> count INTEGER PRIMARY KEY AUTOINCREMENT,</span>
</span><span id="DB-44"><a href="#DB-44"><span class="linenos"> 44</span></a><span class="s2"> count INTEGER PRIMARY KEY AUTOINCREMENT,</span> </span><span id="DB-44"><a href="#DB-44"><span class="linenos"> 44</span></a><span class="s2"> id TEXT, </span>
</span><span id="DB-45"><a href="#DB-45"><span class="linenos"> 45</span></a><span class="s2"> id TEXT, </span> </span><span id="DB-45"><a href="#DB-45"><span class="linenos"> 45</span></a><span class="s2"> sender TEXT,</span>
</span><span id="DB-46"><a href="#DB-46"><span class="linenos"> 46</span></a><span class="s2"> sender TEXT,</span> </span><span id="DB-46"><a href="#DB-46"><span class="linenos"> 46</span></a><span class="s2"> recipient TEXT,</span>
</span><span id="DB-47"><a href="#DB-47"><span class="linenos"> 47</span></a><span class="s2"> recipient TEXT,</span> </span><span id="DB-47"><a href="#DB-47"><span class="linenos"> 47</span></a><span class="s2"> time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,</span>
</span><span id="DB-48"><a href="#DB-48"><span class="linenos"> 48</span></a><span class="s2"> time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,</span> </span><span id="DB-48"><a href="#DB-48"><span class="linenos"> 48</span></a><span class="s2"> json BLOB,</span>
</span><span id="DB-49"><a href="#DB-49"><span class="linenos"> 49</span></a><span class="s2"> json BLOB,</span> </span><span id="DB-49"><a href="#DB-49"><span class="linenos"> 49</span></a><span class="s2"> processed BOOL DEFAULT FALSE,</span>
</span><span id="DB-50"><a href="#DB-50"><span class="linenos"> 50</span></a><span class="s2"> processed BOOL DEFAULT FALSE,</span> </span><span id="DB-50"><a href="#DB-50"><span class="linenos"> 50</span></a><span class="s2"> solution BOOL DEFAULT NULL</span>
</span><span id="DB-51"><a href="#DB-51"><span class="linenos"> 51</span></a><span class="s2"> solution BOOL DEFAULT NULL</span> </span><span id="DB-51"><a href="#DB-51"><span class="linenos"> 51</span></a><span class="s2"> )&quot;&quot;&quot;</span><span class="p">)</span>
</span><span id="DB-52"><a href="#DB-52"><span class="linenos"> 52</span></a><span class="s2"> )&quot;&quot;&quot;</span><span class="p">)</span> </span><span id="DB-52"><a href="#DB-52"><span class="linenos"> 52</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="DB-53"><a href="#DB-53"><span class="linenos"> 53</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="DB-53"><a href="#DB-53"><span class="linenos"> 53</span></a>
</span><span id="DB-54"><a href="#DB-54"><span class="linenos"> 54</span></a> </span><span id="DB-54"><a href="#DB-54"><span class="linenos"> 54</span></a> <span class="nd">@validate_call</span>
</span><span id="DB-55"><a href="#DB-55"><span class="linenos"> 55</span></a> <span class="nd">@validate_call</span> </span><span id="DB-55"><a href="#DB-55"><span class="linenos"> 55</span></a> <span class="k">def</span> <span class="nf">add_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="DB-56"><a href="#DB-56"><span class="linenos"> 56</span></a> <span class="k">def</span> <span class="nf">add_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="DB-56"><a href="#DB-56"><span class="linenos"> 56</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="DB-57"><a href="#DB-57"><span class="linenos"> 57</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="DB-57"><a href="#DB-57"><span class="linenos"> 57</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB-58"><a href="#DB-58"><span class="linenos"> 58</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB-58"><a href="#DB-58"><span class="linenos"> 58</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="DB-59"><a href="#DB-59"><span class="linenos"> 59</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="DB-59"><a href="#DB-59"><span class="linenos"> 59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;INSERT INTO Messages (</span>
</span><span id="DB-60"><a href="#DB-60"><span class="linenos"> 60</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;INSERT INTO Messages (</span> </span><span id="DB-60"><a href="#DB-60"><span class="linenos"> 60</span></a><span class="sd"> id, sender, recipient, json, processed</span>
</span><span id="DB-61"><a href="#DB-61"><span class="linenos"> 61</span></a><span class="sd"> id, sender, recipient, json, processed</span> </span><span id="DB-61"><a href="#DB-61"><span class="linenos"> 61</span></a><span class="sd"> ) VALUES (</span>
</span><span id="DB-62"><a href="#DB-62"><span class="linenos"> 62</span></a><span class="sd"> ) VALUES (</span> </span><span id="DB-62"><a href="#DB-62"><span class="linenos"> 62</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</span>
</span><span id="DB-63"><a href="#DB-63"><span class="linenos"> 63</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</span> </span><span id="DB-63"><a href="#DB-63"><span class="linenos"> 63</span></a><span class="sd"> )&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">{</span>
</span><span id="DB-64"><a href="#DB-64"><span class="linenos"> 64</span></a><span class="sd"> )&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">{</span> </span><span id="DB-64"><a href="#DB-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;id&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
</span><span id="DB-65"><a href="#DB-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;id&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span><span id="DB-65"><a href="#DB-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;sender&quot;</span> <span class="p">:</span> <span class="n">sender</span><span class="p">,</span>
</span><span id="DB-66"><a href="#DB-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;sender&quot;</span> <span class="p">:</span> <span class="n">sender</span><span class="p">,</span> </span><span id="DB-66"><a href="#DB-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;recipient&quot;</span> <span class="p">:</span> <span class="n">recipient</span><span class="p">,</span>
</span><span id="DB-67"><a href="#DB-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;recipient&quot;</span> <span class="p">:</span> <span class="n">recipient</span><span class="p">,</span> </span><span id="DB-67"><a href="#DB-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;json&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="DB-68"><a href="#DB-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;json&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span> </span><span id="DB-68"><a href="#DB-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;processed&quot;</span> <span class="p">:</span> <span class="n">processed</span>
</span><span id="DB-69"><a href="#DB-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;processed&quot;</span> <span class="p">:</span> <span class="n">processed</span> </span><span id="DB-69"><a href="#DB-69"><span class="linenos"> 69</span></a> <span class="p">})</span>
</span><span id="DB-70"><a href="#DB-70"><span class="linenos"> 70</span></a> <span class="p">})</span> </span><span id="DB-70"><a href="#DB-70"><span class="linenos"> 70</span></a> <span class="n">new_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT LAST_INSERT_ROWID() as last&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="DB-71"><a href="#DB-71"><span class="linenos"> 71</span></a> <span class="n">new_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT LAST_INSERT_ROWID() as last&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="DB-71"><a href="#DB-71"><span class="linenos"> 71</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="DB-72"><a href="#DB-72"><span class="linenos"> 72</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="DB-72"><a href="#DB-72"><span class="linenos"> 72</span></a>
</span><span id="DB-73"><a href="#DB-73"><span class="linenos"> 73</span></a> </span><span id="DB-73"><a href="#DB-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="n">new_count</span><span class="p">[</span><span class="s1">&#39;last&#39;</span><span class="p">]</span>
</span><span id="DB-74"><a href="#DB-74"><span class="linenos"> 74</span></a> <span class="k">return</span> <span class="n">new_count</span><span class="p">[</span><span class="s1">&#39;last&#39;</span><span class="p">]</span> </span><span id="DB-74"><a href="#DB-74"><span class="linenos"> 74</span></a>
</span><span id="DB-75"><a href="#DB-75"><span class="linenos"> 75</span></a> </span><span id="DB-75"><a href="#DB-75"><span class="linenos"> 75</span></a> <span class="nd">@validate_call</span>
</span><span id="DB-76"><a href="#DB-76"><span class="linenos"> 76</span></a> <span class="nd">@validate_call</span> </span><span id="DB-76"><a href="#DB-76"><span class="linenos"> 76</span></a> <span class="k">def</span> <span class="nf">set_processed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">processed</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">bool</span><span class="p">:</span>
</span><span id="DB-77"><a href="#DB-77"><span class="linenos"> 77</span></a> <span class="k">def</span> <span class="nf">set_processed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">processed</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">bool</span><span class="p">:</span> </span><span id="DB-77"><a href="#DB-77"><span class="linenos"> 77</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="DB-78"><a href="#DB-78"><span class="linenos"> 78</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="DB-78"><a href="#DB-78"><span class="linenos"> 78</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB-79"><a href="#DB-79"><span class="linenos"> 79</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB-79"><a href="#DB-79"><span class="linenos"> 79</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="DB-80"><a href="#DB-80"><span class="linenos"> 80</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="DB-80"><a href="#DB-80"><span class="linenos"> 80</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET processed = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">processed</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
</span><span id="DB-81"><a href="#DB-81"><span class="linenos"> 81</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET processed = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">processed</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span> </span><span id="DB-81"><a href="#DB-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="DB-82"><a href="#DB-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="DB-82"><a href="#DB-82"><span class="linenos"> 82</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="DB-83"><a href="#DB-83"><span class="linenos"> 83</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="DB-83"><a href="#DB-83"><span class="linenos"> 83</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="DB-84"><a href="#DB-84"><span class="linenos"> 84</span></a> <span class="k">return</span> <span class="kc">False</span> </span><span id="DB-84"><a href="#DB-84"><span class="linenos"> 84</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="DB-85"><a href="#DB-85"><span class="linenos"> 85</span></a> <span class="k">finally</span><span class="p">:</span> </span><span id="DB-85"><a href="#DB-85"><span class="linenos"> 85</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="DB-86"><a href="#DB-86"><span class="linenos"> 86</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="DB-86"><a href="#DB-86"><span class="linenos"> 86</span></a>
</span><span id="DB-87"><a href="#DB-87"><span class="linenos"> 87</span></a> </span><span id="DB-87"><a href="#DB-87"><span class="linenos"> 87</span></a> <span class="nd">@validate_call</span>
</span><span id="DB-88"><a href="#DB-88"><span class="linenos"> 88</span></a> <span class="nd">@validate_call</span> </span><span id="DB-88"><a href="#DB-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">set_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="DB-89"><a href="#DB-89"><span class="linenos"> 89</span></a> <span class="k">def</span> <span class="nf">set_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span><span id="DB-89"><a href="#DB-89"><span class="linenos"> 89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="DB-90"><a href="#DB-90"><span class="linenos"> 90</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="DB-90"><a href="#DB-90"><span class="linenos"> 90</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB-91"><a href="#DB-91"><span class="linenos"> 91</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB-91"><a href="#DB-91"><span class="linenos"> 91</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="DB-92"><a href="#DB-92"><span class="linenos"> 92</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="DB-92"><a href="#DB-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET solution = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
</span><span id="DB-93"><a href="#DB-93"><span class="linenos"> 93</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET solution = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span> </span><span id="DB-93"><a href="#DB-93"><span class="linenos"> 93</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="DB-94"><a href="#DB-94"><span class="linenos"> 94</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="DB-94"><a href="#DB-94"><span class="linenos"> 94</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="DB-95"><a href="#DB-95"><span class="linenos"> 95</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="DB-95"><a href="#DB-95"><span class="linenos"> 95</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="DB-96"><a href="#DB-96"><span class="linenos"> 96</span></a> <span class="k">return</span> <span class="kc">False</span> </span><span id="DB-96"><a href="#DB-96"><span class="linenos"> 96</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="DB-97"><a href="#DB-97"><span class="linenos"> 97</span></a> <span class="k">finally</span><span class="p">:</span> </span><span id="DB-97"><a href="#DB-97"><span class="linenos"> 97</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="DB-98"><a href="#DB-98"><span class="linenos"> 98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="DB-98"><a href="#DB-98"><span class="linenos"> 98</span></a>
</span><span id="DB-99"><a href="#DB-99"><span class="linenos"> 99</span></a> </span><span id="DB-99"><a href="#DB-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span>
</span><span id="DB-100"><a href="#DB-100"><span class="linenos">100</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span> </span><span id="DB-100"><a href="#DB-100"><span class="linenos">100</span></a> <span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">()</span>
</span><span id="DB-101"><a href="#DB-101"><span class="linenos">101</span></a> <span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">()</span> </span><span id="DB-101"><a href="#DB-101"><span class="linenos">101</span></a>
</span><span id="DB-102"><a href="#DB-102"><span class="linenos">102</span></a> </span><span id="DB-102"><a href="#DB-102"><span class="linenos">102</span></a> <span class="nd">@validate_call</span>
</span><span id="DB-103"><a href="#DB-103"><span class="linenos">103</span></a> <span class="nd">@validate_call</span> </span><span id="DB-103"><a href="#DB-103"><span class="linenos">103</span></a> <span class="k">def</span> <span class="nf">iterate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="DB-104"><a href="#DB-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">iterate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> </span><span id="DB-104"><a href="#DB-104"><span class="linenos">104</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="DB-105"><a href="#DB-105"><span class="linenos">105</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="DB-105"><a href="#DB-105"><span class="linenos">105</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="DB-106"><a href="#DB-106"><span class="linenos">106</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="DB-106"><a href="#DB-106"><span class="linenos">106</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="DB-107"><a href="#DB-107"><span class="linenos">107</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="DB-107"><a href="#DB-107"><span class="linenos">107</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span>
</span><span id="DB-108"><a href="#DB-108"><span class="linenos">108</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> </span><span id="DB-108"><a href="#DB-108"><span class="linenos">108</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="o">|</span><span class="nb">int</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span>
</span><span id="DB-109"><a href="#DB-109"><span class="linenos">109</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="o">|</span><span class="nb">int</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span> </span><span id="DB-109"><a href="#DB-109"><span class="linenos">109</span></a>
</span><span id="DB-110"><a href="#DB-110"><span class="linenos">110</span></a> </span><span id="DB-110"><a href="#DB-110"><span class="linenos">110</span></a> <span class="n">where</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="DB-111"><a href="#DB-111"><span class="linenos">111</span></a> <span class="n">where</span> <span class="o">=</span> <span class="p">[]</span> </span><span id="DB-111"><a href="#DB-111"><span class="linenos">111</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="DB-112"><a href="#DB-112"><span class="linenos">112</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span> </span><span id="DB-112"><a href="#DB-112"><span class="linenos">112</span></a> <span class="s2">&quot;lim&quot;</span><span class="p">:</span> <span class="n">limit</span><span class="p">,</span>
</span><span id="DB-113"><a href="#DB-113"><span class="linenos">113</span></a> <span class="s2">&quot;lim&quot;</span><span class="p">:</span> <span class="n">limit</span><span class="p">,</span> </span><span id="DB-113"><a href="#DB-113"><span class="linenos">113</span></a> <span class="s2">&quot;off&quot;</span><span class="p">:</span> <span class="n">offset</span>
</span><span id="DB-114"><a href="#DB-114"><span class="linenos">114</span></a> <span class="s2">&quot;off&quot;</span><span class="p">:</span> <span class="n">offset</span> </span><span id="DB-114"><a href="#DB-114"><span class="linenos">114</span></a> <span class="p">}</span>
</span><span id="DB-115"><a href="#DB-115"><span class="linenos">115</span></a> <span class="p">}</span> </span><span id="DB-115"><a href="#DB-115"><span class="linenos">115</span></a>
</span><span id="DB-116"><a href="#DB-116"><span class="linenos">116</span></a> </span><span id="DB-116"><a href="#DB-116"><span class="linenos">116</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="DB-117"><a href="#DB-117"><span class="linenos">117</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span> </span><span id="DB-117"><a href="#DB-117"><span class="linenos">117</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">),</span>
</span><span id="DB-118"><a href="#DB-118"><span class="linenos">118</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">),</span> </span><span id="DB-118"><a href="#DB-118"><span class="linenos">118</span></a> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">),</span>
</span><span id="DB-119"><a href="#DB-119"><span class="linenos">119</span></a> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">),</span> </span><span id="DB-119"><a href="#DB-119"><span class="linenos">119</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">)</span>
</span><span id="DB-120"><a href="#DB-120"><span class="linenos">120</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">)</span> </span><span id="DB-120"><a href="#DB-120"><span class="linenos">120</span></a> <span class="p">):</span>
</span><span id="DB-121"><a href="#DB-121"><span class="linenos">121</span></a> <span class="p">):</span> </span><span id="DB-121"><a href="#DB-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="DB-122"><a href="#DB-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> </span><span id="DB-122"><a href="#DB-122"><span class="linenos">122</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> = :</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">n</span><span class="p">))</span>
</span><span id="DB-123"><a href="#DB-123"><span class="linenos">123</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> = :</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">n</span><span class="p">))</span> </span><span id="DB-123"><a href="#DB-123"><span class="linenos">123</span></a> <span class="n">params</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="DB-124"><a href="#DB-124"><span class="linenos">124</span></a> <span class="n">params</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="DB-124"><a href="#DB-124"><span class="linenos">124</span></a>
</span><span id="DB-125"><a href="#DB-125"><span class="linenos">125</span></a> </span><span id="DB-125"><a href="#DB-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">time_after</span><span class="p">:</span>
</span><span id="DB-126"><a href="#DB-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">time_after</span><span class="p">:</span> </span><span id="DB-126"><a href="#DB-126"><span class="linenos">126</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &gt; :t_after&quot;</span><span class="p">)</span>
</span><span id="DB-127"><a href="#DB-127"><span class="linenos">127</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &gt; :t_after&quot;</span><span class="p">)</span> </span><span id="DB-127"><a href="#DB-127"><span class="linenos">127</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_after&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_after</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span>
</span><span id="DB-128"><a href="#DB-128"><span class="linenos">128</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_after&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_after</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span> </span><span id="DB-128"><a href="#DB-128"><span class="linenos">128</span></a>
</span><span id="DB-129"><a href="#DB-129"><span class="linenos">129</span></a> </span><span id="DB-129"><a href="#DB-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="n">time_before</span><span class="p">:</span>
</span><span id="DB-130"><a href="#DB-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="n">time_before</span><span class="p">:</span> </span><span id="DB-130"><a href="#DB-130"><span class="linenos">130</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &lt; :t_before&quot;</span><span class="p">)</span>
</span><span id="DB-131"><a href="#DB-131"><span class="linenos">131</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &lt; :t_before&quot;</span><span class="p">)</span> </span><span id="DB-131"><a href="#DB-131"><span class="linenos">131</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_before&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_before</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span>
</span><span id="DB-132"><a href="#DB-132"><span class="linenos">132</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_before&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_before</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span> </span><span id="DB-132"><a href="#DB-132"><span class="linenos">132</span></a>
</span><span id="DB-133"><a href="#DB-133"><span class="linenos">133</span></a> </span><span id="DB-133"><a href="#DB-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">where</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="DB-134"><a href="#DB-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">where</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span> </span><span id="DB-134"><a href="#DB-134"><span class="linenos">134</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;WHERE &quot;</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39; AND &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">where</span><span class="p">))</span>
</span><span id="DB-135"><a href="#DB-135"><span class="linenos">135</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;WHERE &quot;</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39; AND &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">where</span><span class="p">))</span> </span><span id="DB-135"><a href="#DB-135"><span class="linenos">135</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="DB-136"><a href="#DB-136"><span class="linenos">136</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="DB-136"><a href="#DB-136"><span class="linenos">136</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="DB-137"><a href="#DB-137"><span class="linenos">137</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> </span><span id="DB-137"><a href="#DB-137"><span class="linenos">137</span></a>
</span><span id="DB-138"><a href="#DB-138"><span class="linenos">138</span></a> </span><span id="DB-138"><a href="#DB-138"><span class="linenos">138</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB-139"><a href="#DB-139"><span class="linenos">139</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB-139"><a href="#DB-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span>
</span><span id="DB-140"><a href="#DB-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span> </span><span id="DB-140"><a href="#DB-140"><span class="linenos">140</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="DB-141"><a href="#DB-141"><span class="linenos">141</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="DB-141"><a href="#DB-141"><span class="linenos">141</span></a> <span class="s2">&quot;SELECT COUNT(*) as count FROM Messages </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span>
</span><span id="DB-142"><a href="#DB-142"><span class="linenos">142</span></a> <span class="s2">&quot;SELECT COUNT(*) as count FROM Messages </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span> </span><span id="DB-142"><a href="#DB-142"><span class="linenos">142</span></a> <span class="n">params</span>
</span><span id="DB-143"><a href="#DB-143"><span class="linenos">143</span></a> <span class="n">params</span> </span><span id="DB-143"><a href="#DB-143"><span class="linenos">143</span></a> <span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="DB-144"><a href="#DB-144"><span class="linenos">144</span></a> <span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="DB-144"><a href="#DB-144"><span class="linenos">144</span></a>
</span><span id="DB-145"><a href="#DB-145"><span class="linenos">145</span></a> </span><span id="DB-145"><a href="#DB-145"><span class="linenos">145</span></a> <span class="k">yield</span> <span class="n">count</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span>
</span><span id="DB-146"><a href="#DB-146"><span class="linenos">146</span></a> <span class="k">yield</span> <span class="n">count</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span> </span><span id="DB-146"><a href="#DB-146"><span class="linenos">146</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="DB-147"><a href="#DB-147"><span class="linenos">147</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="DB-147"><a href="#DB-147"><span class="linenos">147</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="DB-148"><a href="#DB-148"><span class="linenos">148</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="DB-148"><a href="#DB-148"><span class="linenos">148</span></a> <span class="s2">&quot;SELECT * FROM Messages </span><span class="si">{}</span><span class="s2"> ORDER BY time DESC, count DESC LIMIT :lim OFFSET :off&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span>
</span><span id="DB-149"><a href="#DB-149"><span class="linenos">149</span></a> <span class="s2">&quot;SELECT * FROM Messages </span><span class="si">{}</span><span class="s2"> ORDER BY time DESC, count DESC LIMIT :lim OFFSET :off&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span> </span><span id="DB-149"><a href="#DB-149"><span class="linenos">149</span></a> <span class="n">params</span>
</span><span id="DB-150"><a href="#DB-150"><span class="linenos">150</span></a> <span class="n">params</span> </span><span id="DB-150"><a href="#DB-150"><span class="linenos">150</span></a> <span class="p">):</span>
</span><span id="DB-151"><a href="#DB-151"><span class="linenos">151</span></a> <span class="p">):</span> </span><span id="DB-151"><a href="#DB-151"><span class="linenos">151</span></a> <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">allow_lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="DB-152"><a href="#DB-152"><span class="linenos">152</span></a> <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">allow_lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> </span><span id="DB-152"><a href="#DB-152"><span class="linenos">152</span></a>
</span><span id="DB-153"><a href="#DB-153"><span class="linenos">153</span></a> </span><span id="DB-153"><a href="#DB-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="DB-154"><a href="#DB-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="DB-154"><a href="#DB-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">len</span><span class="p">()</span>
</span><span id="DB-155"><a href="#DB-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> </span><span id="DB-155"><a href="#DB-155"><span class="linenos">155</span></a>
</span><span id="DB-156"><a href="#DB-156"><span class="linenos">156</span></a> </span><span id="DB-156"><a href="#DB-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">len</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="DB-157"><a href="#DB-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">len</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="DB-157"><a href="#DB-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="DB-158"><a href="#DB-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="DB-158"><a href="#DB-158"><span class="linenos">158</span></a><span class="sd"> See `DB.iterate` for possible values of `kwargs`.</span>
</span><span id="DB-159"><a href="#DB-159"><span class="linenos">159</span></a><span class="sd"> See `DB.iterate` for possible values of `kwargs`.</span> </span><span id="DB-159"><a href="#DB-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="DB-160"><a href="#DB-160"><span class="linenos">160</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="DB-160"><a href="#DB-160"><span class="linenos">160</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="DB-161"><a href="#DB-161"><span class="linenos">161</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> </span><span id="DB-161"><a href="#DB-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
</span><span id="DB-162"><a href="#DB-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">))</span> </span><span id="DB-162"><a href="#DB-162"><span class="linenos">162</span></a>
</span><span id="DB-163"><a href="#DB-163"><span class="linenos">163</span></a> </span><span id="DB-163"><a href="#DB-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">_create_row_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span><span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span><span class="p">,</span> <span class="n">allow_lazy</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="n">MessageDbRow</span><span class="p">:</span>
</span><span id="DB-164"><a href="#DB-164"><span class="linenos">164</span></a> <span class="k">def</span> <span class="nf">_create_row_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span><span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span><span class="p">,</span> <span class="n">allow_lazy</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="n">MessageDbRow</span><span class="p">:</span> </span><span id="DB-164"><a href="#DB-164"><span class="linenos">164</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="DB-165"><a href="#DB-165"><span class="linenos">165</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="DB-165"><a href="#DB-165"><span class="linenos">165</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span>
</span><span id="DB-166"><a href="#DB-166"><span class="linenos">166</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span> </span><span id="DB-166"><a href="#DB-166"><span class="linenos">166</span></a> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;json&#39;</span><span class="p">],</span>
</span><span id="DB-167"><a href="#DB-167"><span class="linenos">167</span></a> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;json&#39;</span><span class="p">],</span> </span><span id="DB-167"><a href="#DB-167"><span class="linenos">167</span></a> <span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;require_file_exists&quot;</span><span class="p">:</span> <span class="ow">not</span> <span class="n">allow_lazy</span><span class="p">}</span>
</span><span id="DB-168"><a href="#DB-168"><span class="linenos">168</span></a> <span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;require_file_exists&quot;</span><span class="p">:</span> <span class="ow">not</span> <span class="n">allow_lazy</span><span class="p">}</span> </span><span id="DB-168"><a href="#DB-168"><span class="linenos">168</span></a> <span class="p">)</span>
</span><span id="DB-169"><a href="#DB-169"><span class="linenos">169</span></a> <span class="p">)</span> </span><span id="DB-169"><a href="#DB-169"><span class="linenos">169</span></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="DB-170"><a href="#DB-170"><span class="linenos">170</span></a> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> </span><span id="DB-170"><a href="#DB-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="n">allow_lazy</span><span class="p">:</span>
</span><span id="DB-171"><a href="#DB-171"><span class="linenos">171</span></a> <span class="k">if</span> <span class="n">allow_lazy</span><span class="p">:</span> </span><span id="DB-171"><a href="#DB-171"><span class="linenos">171</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="p">(</span>
</span><span id="DB-172"><a href="#DB-172"><span class="linenos">172</span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">AgentMessage</span><span class="p">(</span> </span><span id="DB-172"><a href="#DB-172"><span class="linenos">172</span></a> <span class="nb">id</span><span class="o">=</span><span class="s2">&quot;error&quot;</span><span class="p">,</span>
</span><span id="DB-173"><a href="#DB-173"><span class="linenos">173</span></a> <span class="nb">id</span><span class="o">=</span><span class="s2">&quot;error&quot;</span><span class="p">,</span> </span><span id="DB-173"><a href="#DB-173"><span class="linenos">173</span></a> <span class="n">riddle</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;context&quot;</span><span class="p">:</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span><span class="s2">&quot;question&quot;</span><span class="p">:</span><span class="s2">&quot;Failed to load from Database!&quot;</span><span class="p">}</span>
</span><span id="DB-174"><a href="#DB-174"><span class="linenos">174</span></a> <span class="n">riddle</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;context&quot;</span><span class="p">:</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span><span class="s2">&quot;question&quot;</span><span class="p">:</span><span class="s2">&quot;Failed to load from Database!&quot;</span><span class="p">}</span> </span><span id="DB-174"><a href="#DB-174"><span class="linenos">174</span></a> <span class="p">)</span>
</span><span id="DB-175"><a href="#DB-175"><span class="linenos">175</span></a> <span class="p">)</span> </span><span id="DB-175"><a href="#DB-175"><span class="linenos">175</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="DB-176"><a href="#DB-176"><span class="linenos">176</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="DB-176"><a href="#DB-176"><span class="linenos">176</span></a> <span class="k">raise</span> <span class="n">e</span>
</span><span id="DB-177"><a href="#DB-177"><span class="linenos">177</span></a> <span class="k">raise</span> <span class="n">e</span> </span><span id="DB-177"><a href="#DB-177"><span class="linenos">177</span></a>
</span><span id="DB-178"><a href="#DB-178"><span class="linenos">178</span></a> </span><span id="DB-178"><a href="#DB-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="p">(</span>
</span><span id="DB-179"><a href="#DB-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="p">(</span> </span><span id="DB-179"><a href="#DB-179"><span class="linenos">179</span></a> <span class="n">count</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">],</span>
</span><span id="DB-180"><a href="#DB-180"><span class="linenos">180</span></a> <span class="n">count</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">],</span> </span><span id="DB-180"><a href="#DB-180"><span class="linenos">180</span></a> <span class="n">sender</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;sender&#39;</span><span class="p">],</span>
</span><span id="DB-181"><a href="#DB-181"><span class="linenos">181</span></a> <span class="n">sender</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;sender&#39;</span><span class="p">],</span> </span><span id="DB-181"><a href="#DB-181"><span class="linenos">181</span></a> <span class="n">recipient</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;recipient&#39;</span><span class="p">],</span>
</span><span id="DB-182"><a href="#DB-182"><span class="linenos">182</span></a> <span class="n">recipient</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;recipient&#39;</span><span class="p">],</span> </span><span id="DB-182"><a href="#DB-182"><span class="linenos">182</span></a> <span class="n">time</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()),</span>
</span><span id="DB-183"><a href="#DB-183"><span class="linenos">183</span></a> <span class="n">time</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()),</span> </span><span id="DB-183"><a href="#DB-183"><span class="linenos">183</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="DB-184"><a href="#DB-184"><span class="linenos">184</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span> </span><span id="DB-184"><a href="#DB-184"><span class="linenos">184</span></a> <span class="n">processed</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;processed&#39;</span><span class="p">],</span>
</span><span id="DB-185"><a href="#DB-185"><span class="linenos">185</span></a> <span class="n">processed</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;processed&#39;</span><span class="p">],</span> </span><span id="DB-185"><a href="#DB-185"><span class="linenos">185</span></a> <span class="n">solution</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;solution&#39;</span><span class="p">]</span>
</span><span id="DB-186"><a href="#DB-186"><span class="linenos">186</span></a> <span class="n">solution</span><span class="o">=</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;solution&#39;</span><span class="p">]</span> </span><span id="DB-186"><a href="#DB-186"><span class="linenos">186</span></a> <span class="p">)</span>
</span><span id="DB-187"><a href="#DB-187"><span class="linenos">187</span></a> <span class="p">)</span> </span><span id="DB-187"><a href="#DB-187"><span class="linenos">187</span></a>
</span><span id="DB-188"><a href="#DB-188"><span class="linenos">188</span></a> </span><span id="DB-188"><a href="#DB-188"><span class="linenos">188</span></a> <span class="k">def</span> <span class="nf">by_count</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="o">|</span><span class="kc">None</span><span class="p">:</span>
</span><span id="DB-189"><a href="#DB-189"><span class="linenos">189</span></a> <span class="k">def</span> <span class="nf">by_count</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="o">|</span><span class="kc">None</span><span class="p">:</span> </span><span id="DB-189"><a href="#DB-189"><span class="linenos">189</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB-190"><a href="#DB-190"><span class="linenos">190</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB-190"><a href="#DB-190"><span class="linenos">190</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="DB-191"><a href="#DB-191"><span class="linenos">191</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="DB-191"><a href="#DB-191"><span class="linenos">191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span>
</span><span id="DB-192"><a href="#DB-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span> </span><span id="DB-192"><a href="#DB-192"><span class="linenos">192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM Messages WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">count</span><span class="p">,))</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="DB-193"><a href="#DB-193"><span class="linenos">193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM Messages WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">count</span><span class="p">,))</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="DB-193"><a href="#DB-193"><span class="linenos">193</span></a> <span class="p">)</span>
</span><span id="DB-194"><a href="#DB-194"><span class="linenos">194</span></a> <span class="p">)</span> </span><span id="DB-194"><a href="#DB-194"><span class="linenos">194</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="DB-195"><a href="#DB-195"><span class="linenos">195</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="DB-195"><a href="#DB-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="DB-196"><a href="#DB-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div> </span></pre></div>
@ -506,26 +505,26 @@
</div> </div>
<a class="headerlink" href="#DB.add_message"></a> <a class="headerlink" href="#DB.add_message"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DB.add_message-55"><a href="#DB.add_message-55"><span class="linenos">55</span></a> <span class="nd">@validate_call</span> <div class="pdoc-code codehilite"><pre><span></span><span id="DB.add_message-54"><a href="#DB.add_message-54"><span class="linenos">54</span></a> <span class="nd">@validate_call</span>
</span><span id="DB.add_message-56"><a href="#DB.add_message-56"><span class="linenos">56</span></a> <span class="k">def</span> <span class="nf">add_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="DB.add_message-55"><a href="#DB.add_message-55"><span class="linenos">55</span></a> <span class="k">def</span> <span class="nf">add_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="DB.add_message-57"><a href="#DB.add_message-57"><span class="linenos">57</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="DB.add_message-56"><a href="#DB.add_message-56"><span class="linenos">56</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="DB.add_message-58"><a href="#DB.add_message-58"><span class="linenos">58</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB.add_message-57"><a href="#DB.add_message-57"><span class="linenos">57</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB.add_message-59"><a href="#DB.add_message-59"><span class="linenos">59</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="DB.add_message-58"><a href="#DB.add_message-58"><span class="linenos">58</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="DB.add_message-60"><a href="#DB.add_message-60"><span class="linenos">60</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;INSERT INTO Messages (</span> </span><span id="DB.add_message-59"><a href="#DB.add_message-59"><span class="linenos">59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;INSERT INTO Messages (</span>
</span><span id="DB.add_message-61"><a href="#DB.add_message-61"><span class="linenos">61</span></a><span class="sd"> id, sender, recipient, json, processed</span> </span><span id="DB.add_message-60"><a href="#DB.add_message-60"><span class="linenos">60</span></a><span class="sd"> id, sender, recipient, json, processed</span>
</span><span id="DB.add_message-62"><a href="#DB.add_message-62"><span class="linenos">62</span></a><span class="sd"> ) VALUES (</span> </span><span id="DB.add_message-61"><a href="#DB.add_message-61"><span class="linenos">61</span></a><span class="sd"> ) VALUES (</span>
</span><span id="DB.add_message-63"><a href="#DB.add_message-63"><span class="linenos">63</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</span> </span><span id="DB.add_message-62"><a href="#DB.add_message-62"><span class="linenos">62</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</span>
</span><span id="DB.add_message-64"><a href="#DB.add_message-64"><span class="linenos">64</span></a><span class="sd"> )&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">{</span> </span><span id="DB.add_message-63"><a href="#DB.add_message-63"><span class="linenos">63</span></a><span class="sd"> )&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">{</span>
</span><span id="DB.add_message-65"><a href="#DB.add_message-65"><span class="linenos">65</span></a> <span class="s2">&quot;id&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> </span><span id="DB.add_message-64"><a href="#DB.add_message-64"><span class="linenos">64</span></a> <span class="s2">&quot;id&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
</span><span id="DB.add_message-66"><a href="#DB.add_message-66"><span class="linenos">66</span></a> <span class="s2">&quot;sender&quot;</span> <span class="p">:</span> <span class="n">sender</span><span class="p">,</span> </span><span id="DB.add_message-65"><a href="#DB.add_message-65"><span class="linenos">65</span></a> <span class="s2">&quot;sender&quot;</span> <span class="p">:</span> <span class="n">sender</span><span class="p">,</span>
</span><span id="DB.add_message-67"><a href="#DB.add_message-67"><span class="linenos">67</span></a> <span class="s2">&quot;recipient&quot;</span> <span class="p">:</span> <span class="n">recipient</span><span class="p">,</span> </span><span id="DB.add_message-66"><a href="#DB.add_message-66"><span class="linenos">66</span></a> <span class="s2">&quot;recipient&quot;</span> <span class="p">:</span> <span class="n">recipient</span><span class="p">,</span>
</span><span id="DB.add_message-68"><a href="#DB.add_message-68"><span class="linenos">68</span></a> <span class="s2">&quot;json&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span> </span><span id="DB.add_message-67"><a href="#DB.add_message-67"><span class="linenos">67</span></a> <span class="s2">&quot;json&quot;</span> <span class="p">:</span> <span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="DB.add_message-69"><a href="#DB.add_message-69"><span class="linenos">69</span></a> <span class="s2">&quot;processed&quot;</span> <span class="p">:</span> <span class="n">processed</span> </span><span id="DB.add_message-68"><a href="#DB.add_message-68"><span class="linenos">68</span></a> <span class="s2">&quot;processed&quot;</span> <span class="p">:</span> <span class="n">processed</span>
</span><span id="DB.add_message-70"><a href="#DB.add_message-70"><span class="linenos">70</span></a> <span class="p">})</span> </span><span id="DB.add_message-69"><a href="#DB.add_message-69"><span class="linenos">69</span></a> <span class="p">})</span>
</span><span id="DB.add_message-71"><a href="#DB.add_message-71"><span class="linenos">71</span></a> <span class="n">new_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT LAST_INSERT_ROWID() as last&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="DB.add_message-70"><a href="#DB.add_message-70"><span class="linenos">70</span></a> <span class="n">new_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT LAST_INSERT_ROWID() as last&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="DB.add_message-72"><a href="#DB.add_message-72"><span class="linenos">72</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="DB.add_message-71"><a href="#DB.add_message-71"><span class="linenos">71</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span><span id="DB.add_message-73"><a href="#DB.add_message-73"><span class="linenos">73</span></a> </span><span id="DB.add_message-72"><a href="#DB.add_message-72"><span class="linenos">72</span></a>
</span><span id="DB.add_message-74"><a href="#DB.add_message-74"><span class="linenos">74</span></a> <span class="k">return</span> <span class="n">new_count</span><span class="p">[</span><span class="s1">&#39;last&#39;</span><span class="p">]</span> </span><span id="DB.add_message-73"><a href="#DB.add_message-73"><span class="linenos">73</span></a> <span class="k">return</span> <span class="n">new_count</span><span class="p">[</span><span class="s1">&#39;last&#39;</span><span class="p">]</span>
</span></pre></div> </span></pre></div>
@ -544,17 +543,17 @@
</div> </div>
<a class="headerlink" href="#DB.set_processed"></a> <a class="headerlink" href="#DB.set_processed"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DB.set_processed-76"><a href="#DB.set_processed-76"><span class="linenos">76</span></a> <span class="nd">@validate_call</span> <div class="pdoc-code codehilite"><pre><span></span><span id="DB.set_processed-75"><a href="#DB.set_processed-75"><span class="linenos">75</span></a> <span class="nd">@validate_call</span>
</span><span id="DB.set_processed-77"><a href="#DB.set_processed-77"><span class="linenos">77</span></a> <span class="k">def</span> <span class="nf">set_processed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">processed</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">bool</span><span class="p">:</span> </span><span id="DB.set_processed-76"><a href="#DB.set_processed-76"><span class="linenos">76</span></a> <span class="k">def</span> <span class="nf">set_processed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">processed</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">bool</span><span class="p">:</span>
</span><span id="DB.set_processed-78"><a href="#DB.set_processed-78"><span class="linenos">78</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="DB.set_processed-77"><a href="#DB.set_processed-77"><span class="linenos">77</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="DB.set_processed-79"><a href="#DB.set_processed-79"><span class="linenos">79</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB.set_processed-78"><a href="#DB.set_processed-78"><span class="linenos">78</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB.set_processed-80"><a href="#DB.set_processed-80"><span class="linenos">80</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="DB.set_processed-79"><a href="#DB.set_processed-79"><span class="linenos">79</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="DB.set_processed-81"><a href="#DB.set_processed-81"><span class="linenos">81</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET processed = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">processed</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span> </span><span id="DB.set_processed-80"><a href="#DB.set_processed-80"><span class="linenos">80</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET processed = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">processed</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
</span><span id="DB.set_processed-82"><a href="#DB.set_processed-82"><span class="linenos">82</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="DB.set_processed-81"><a href="#DB.set_processed-81"><span class="linenos">81</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="DB.set_processed-83"><a href="#DB.set_processed-83"><span class="linenos">83</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="DB.set_processed-82"><a href="#DB.set_processed-82"><span class="linenos">82</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="DB.set_processed-84"><a href="#DB.set_processed-84"><span class="linenos">84</span></a> <span class="k">return</span> <span class="kc">False</span> </span><span id="DB.set_processed-83"><a href="#DB.set_processed-83"><span class="linenos">83</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="DB.set_processed-85"><a href="#DB.set_processed-85"><span class="linenos">85</span></a> <span class="k">finally</span><span class="p">:</span> </span><span id="DB.set_processed-84"><a href="#DB.set_processed-84"><span class="linenos">84</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="DB.set_processed-86"><a href="#DB.set_processed-86"><span class="linenos">86</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="DB.set_processed-85"><a href="#DB.set_processed-85"><span class="linenos">85</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span></pre></div> </span></pre></div>
@ -573,17 +572,17 @@
</div> </div>
<a class="headerlink" href="#DB.set_solution"></a> <a class="headerlink" href="#DB.set_solution"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DB.set_solution-88"><a href="#DB.set_solution-88"><span class="linenos">88</span></a> <span class="nd">@validate_call</span> <div class="pdoc-code codehilite"><pre><span></span><span id="DB.set_solution-87"><a href="#DB.set_solution-87"><span class="linenos">87</span></a> <span class="nd">@validate_call</span>
</span><span id="DB.set_solution-89"><a href="#DB.set_solution-89"><span class="linenos">89</span></a> <span class="k">def</span> <span class="nf">set_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span><span id="DB.set_solution-88"><a href="#DB.set_solution-88"><span class="linenos">88</span></a> <span class="k">def</span> <span class="nf">set_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="DB.set_solution-90"><a href="#DB.set_solution-90"><span class="linenos">90</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> </span><span id="DB.set_solution-89"><a href="#DB.set_solution-89"><span class="linenos">89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</span><span id="DB.set_solution-91"><a href="#DB.set_solution-91"><span class="linenos">91</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB.set_solution-90"><a href="#DB.set_solution-90"><span class="linenos">90</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB.set_solution-92"><a href="#DB.set_solution-92"><span class="linenos">92</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="DB.set_solution-91"><a href="#DB.set_solution-91"><span class="linenos">91</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="DB.set_solution-93"><a href="#DB.set_solution-93"><span class="linenos">93</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET solution = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span> </span><span id="DB.set_solution-92"><a href="#DB.set_solution-92"><span class="linenos">92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;UPDATE Messages SET solution = ? WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
</span><span id="DB.set_solution-94"><a href="#DB.set_solution-94"><span class="linenos">94</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="DB.set_solution-93"><a href="#DB.set_solution-93"><span class="linenos">93</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="DB.set_solution-95"><a href="#DB.set_solution-95"><span class="linenos">95</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="DB.set_solution-94"><a href="#DB.set_solution-94"><span class="linenos">94</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="DB.set_solution-96"><a href="#DB.set_solution-96"><span class="linenos">96</span></a> <span class="k">return</span> <span class="kc">False</span> </span><span id="DB.set_solution-95"><a href="#DB.set_solution-95"><span class="linenos">95</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="DB.set_solution-97"><a href="#DB.set_solution-97"><span class="linenos">97</span></a> <span class="k">finally</span><span class="p">:</span> </span><span id="DB.set_solution-96"><a href="#DB.set_solution-96"><span class="linenos">96</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="DB.set_solution-98"><a href="#DB.set_solution-98"><span class="linenos">98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> </span><span id="DB.set_solution-97"><a href="#DB.set_solution-97"><span class="linenos">97</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</span></pre></div> </span></pre></div>
@ -602,56 +601,56 @@
</div> </div>
<a class="headerlink" href="#DB.iterate"></a> <a class="headerlink" href="#DB.iterate"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DB.iterate-103"><a href="#DB.iterate-103"><span class="linenos">103</span></a> <span class="nd">@validate_call</span> <div class="pdoc-code codehilite"><pre><span></span><span id="DB.iterate-102"><a href="#DB.iterate-102"><span class="linenos">102</span></a> <span class="nd">@validate_call</span>
</span><span id="DB.iterate-104"><a href="#DB.iterate-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">iterate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> </span><span id="DB.iterate-103"><a href="#DB.iterate-103"><span class="linenos">103</span></a> <span class="k">def</span> <span class="nf">iterate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="DB.iterate-105"><a href="#DB.iterate-105"><span class="linenos">105</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="DB.iterate-104"><a href="#DB.iterate-104"><span class="linenos">104</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="DB.iterate-106"><a href="#DB.iterate-106"><span class="linenos">106</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="DB.iterate-105"><a href="#DB.iterate-105"><span class="linenos">105</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="DB.iterate-107"><a href="#DB.iterate-107"><span class="linenos">107</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> </span><span id="DB.iterate-106"><a href="#DB.iterate-106"><span class="linenos">106</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="DB.iterate-108"><a href="#DB.iterate-108"><span class="linenos">108</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span> </span><span id="DB.iterate-107"><a href="#DB.iterate-107"><span class="linenos">107</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span>
</span><span id="DB.iterate-109"><a href="#DB.iterate-109"><span class="linenos">109</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="o">|</span><span class="nb">int</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span> </span><span id="DB.iterate-108"><a href="#DB.iterate-108"><span class="linenos">108</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="o">|</span><span class="nb">int</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">]:</span>
</span><span id="DB.iterate-110"><a href="#DB.iterate-110"><span class="linenos">110</span></a> </span><span id="DB.iterate-109"><a href="#DB.iterate-109"><span class="linenos">109</span></a>
</span><span id="DB.iterate-111"><a href="#DB.iterate-111"><span class="linenos">111</span></a> <span class="n">where</span> <span class="o">=</span> <span class="p">[]</span> </span><span id="DB.iterate-110"><a href="#DB.iterate-110"><span class="linenos">110</span></a> <span class="n">where</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="DB.iterate-112"><a href="#DB.iterate-112"><span class="linenos">112</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span> </span><span id="DB.iterate-111"><a href="#DB.iterate-111"><span class="linenos">111</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="DB.iterate-113"><a href="#DB.iterate-113"><span class="linenos">113</span></a> <span class="s2">&quot;lim&quot;</span><span class="p">:</span> <span class="n">limit</span><span class="p">,</span> </span><span id="DB.iterate-112"><a href="#DB.iterate-112"><span class="linenos">112</span></a> <span class="s2">&quot;lim&quot;</span><span class="p">:</span> <span class="n">limit</span><span class="p">,</span>
</span><span id="DB.iterate-114"><a href="#DB.iterate-114"><span class="linenos">114</span></a> <span class="s2">&quot;off&quot;</span><span class="p">:</span> <span class="n">offset</span> </span><span id="DB.iterate-113"><a href="#DB.iterate-113"><span class="linenos">113</span></a> <span class="s2">&quot;off&quot;</span><span class="p">:</span> <span class="n">offset</span>
</span><span id="DB.iterate-115"><a href="#DB.iterate-115"><span class="linenos">115</span></a> <span class="p">}</span> </span><span id="DB.iterate-114"><a href="#DB.iterate-114"><span class="linenos">114</span></a> <span class="p">}</span>
</span><span id="DB.iterate-116"><a href="#DB.iterate-116"><span class="linenos">116</span></a> </span><span id="DB.iterate-115"><a href="#DB.iterate-115"><span class="linenos">115</span></a>
</span><span id="DB.iterate-117"><a href="#DB.iterate-117"><span class="linenos">117</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span> </span><span id="DB.iterate-116"><a href="#DB.iterate-116"><span class="linenos">116</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="DB.iterate-118"><a href="#DB.iterate-118"><span class="linenos">118</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">),</span> </span><span id="DB.iterate-117"><a href="#DB.iterate-117"><span class="linenos">117</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">),</span>
</span><span id="DB.iterate-119"><a href="#DB.iterate-119"><span class="linenos">119</span></a> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">),</span> </span><span id="DB.iterate-118"><a href="#DB.iterate-118"><span class="linenos">118</span></a> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">),</span>
</span><span id="DB.iterate-120"><a href="#DB.iterate-120"><span class="linenos">120</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">)</span> </span><span id="DB.iterate-119"><a href="#DB.iterate-119"><span class="linenos">119</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">),</span> <span class="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">)</span>
</span><span id="DB.iterate-121"><a href="#DB.iterate-121"><span class="linenos">121</span></a> <span class="p">):</span> </span><span id="DB.iterate-120"><a href="#DB.iterate-120"><span class="linenos">120</span></a> <span class="p">):</span>
</span><span id="DB.iterate-122"><a href="#DB.iterate-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> </span><span id="DB.iterate-121"><a href="#DB.iterate-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="DB.iterate-123"><a href="#DB.iterate-123"><span class="linenos">123</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> = :</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">n</span><span class="p">))</span> </span><span id="DB.iterate-122"><a href="#DB.iterate-122"><span class="linenos">122</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> = :</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">n</span><span class="p">))</span>
</span><span id="DB.iterate-124"><a href="#DB.iterate-124"><span class="linenos">124</span></a> <span class="n">params</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="DB.iterate-123"><a href="#DB.iterate-123"><span class="linenos">123</span></a> <span class="n">params</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="DB.iterate-125"><a href="#DB.iterate-125"><span class="linenos">125</span></a> </span><span id="DB.iterate-124"><a href="#DB.iterate-124"><span class="linenos">124</span></a>
</span><span id="DB.iterate-126"><a href="#DB.iterate-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">time_after</span><span class="p">:</span> </span><span id="DB.iterate-125"><a href="#DB.iterate-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">time_after</span><span class="p">:</span>
</span><span id="DB.iterate-127"><a href="#DB.iterate-127"><span class="linenos">127</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &gt; :t_after&quot;</span><span class="p">)</span> </span><span id="DB.iterate-126"><a href="#DB.iterate-126"><span class="linenos">126</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &gt; :t_after&quot;</span><span class="p">)</span>
</span><span id="DB.iterate-128"><a href="#DB.iterate-128"><span class="linenos">128</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_after&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_after</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span> </span><span id="DB.iterate-127"><a href="#DB.iterate-127"><span class="linenos">127</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_after&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_after</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span>
</span><span id="DB.iterate-129"><a href="#DB.iterate-129"><span class="linenos">129</span></a> </span><span id="DB.iterate-128"><a href="#DB.iterate-128"><span class="linenos">128</span></a>
</span><span id="DB.iterate-130"><a href="#DB.iterate-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="n">time_before</span><span class="p">:</span> </span><span id="DB.iterate-129"><a href="#DB.iterate-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="n">time_before</span><span class="p">:</span>
</span><span id="DB.iterate-131"><a href="#DB.iterate-131"><span class="linenos">131</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &lt; :t_before&quot;</span><span class="p">)</span> </span><span id="DB.iterate-130"><a href="#DB.iterate-130"><span class="linenos">130</span></a> <span class="n">where</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;time &lt; :t_before&quot;</span><span class="p">)</span>
</span><span id="DB.iterate-132"><a href="#DB.iterate-132"><span class="linenos">132</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_before&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_before</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span> </span><span id="DB.iterate-131"><a href="#DB.iterate-131"><span class="linenos">131</span></a> <span class="n">params</span><span class="p">[</span><span class="s1">&#39;t_before&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time_before</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_DB_TIME_FORMAT</span><span class="p">)</span>
</span><span id="DB.iterate-133"><a href="#DB.iterate-133"><span class="linenos">133</span></a> </span><span id="DB.iterate-132"><a href="#DB.iterate-132"><span class="linenos">132</span></a>
</span><span id="DB.iterate-134"><a href="#DB.iterate-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">where</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span> </span><span id="DB.iterate-133"><a href="#DB.iterate-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">where</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="DB.iterate-135"><a href="#DB.iterate-135"><span class="linenos">135</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;WHERE &quot;</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39; AND &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">where</span><span class="p">))</span> </span><span id="DB.iterate-134"><a href="#DB.iterate-134"><span class="linenos">134</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;WHERE &quot;</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39; AND &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">where</span><span class="p">))</span>
</span><span id="DB.iterate-136"><a href="#DB.iterate-136"><span class="linenos">136</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="DB.iterate-135"><a href="#DB.iterate-135"><span class="linenos">135</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="DB.iterate-137"><a href="#DB.iterate-137"><span class="linenos">137</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> </span><span id="DB.iterate-136"><a href="#DB.iterate-136"><span class="linenos">136</span></a> <span class="n">where_clause</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="DB.iterate-138"><a href="#DB.iterate-138"><span class="linenos">138</span></a> </span><span id="DB.iterate-137"><a href="#DB.iterate-137"><span class="linenos">137</span></a>
</span><span id="DB.iterate-139"><a href="#DB.iterate-139"><span class="linenos">139</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB.iterate-138"><a href="#DB.iterate-138"><span class="linenos">138</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB.iterate-140"><a href="#DB.iterate-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span> </span><span id="DB.iterate-139"><a href="#DB.iterate-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span>
</span><span id="DB.iterate-141"><a href="#DB.iterate-141"><span class="linenos">141</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="DB.iterate-140"><a href="#DB.iterate-140"><span class="linenos">140</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="DB.iterate-142"><a href="#DB.iterate-142"><span class="linenos">142</span></a> <span class="s2">&quot;SELECT COUNT(*) as count FROM Messages </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span> </span><span id="DB.iterate-141"><a href="#DB.iterate-141"><span class="linenos">141</span></a> <span class="s2">&quot;SELECT COUNT(*) as count FROM Messages </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span>
</span><span id="DB.iterate-143"><a href="#DB.iterate-143"><span class="linenos">143</span></a> <span class="n">params</span> </span><span id="DB.iterate-142"><a href="#DB.iterate-142"><span class="linenos">142</span></a> <span class="n">params</span>
</span><span id="DB.iterate-144"><a href="#DB.iterate-144"><span class="linenos">144</span></a> <span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="DB.iterate-143"><a href="#DB.iterate-143"><span class="linenos">143</span></a> <span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="DB.iterate-145"><a href="#DB.iterate-145"><span class="linenos">145</span></a> </span><span id="DB.iterate-144"><a href="#DB.iterate-144"><span class="linenos">144</span></a>
</span><span id="DB.iterate-146"><a href="#DB.iterate-146"><span class="linenos">146</span></a> <span class="k">yield</span> <span class="n">count</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span> </span><span id="DB.iterate-145"><a href="#DB.iterate-145"><span class="linenos">145</span></a> <span class="k">yield</span> <span class="n">count</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">]</span>
</span><span id="DB.iterate-147"><a href="#DB.iterate-147"><span class="linenos">147</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="DB.iterate-146"><a href="#DB.iterate-146"><span class="linenos">146</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="DB.iterate-148"><a href="#DB.iterate-148"><span class="linenos">148</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span><span id="DB.iterate-147"><a href="#DB.iterate-147"><span class="linenos">147</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span><span id="DB.iterate-149"><a href="#DB.iterate-149"><span class="linenos">149</span></a> <span class="s2">&quot;SELECT * FROM Messages </span><span class="si">{}</span><span class="s2"> ORDER BY time DESC, count DESC LIMIT :lim OFFSET :off&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span> </span><span id="DB.iterate-148"><a href="#DB.iterate-148"><span class="linenos">148</span></a> <span class="s2">&quot;SELECT * FROM Messages </span><span class="si">{}</span><span class="s2"> ORDER BY time DESC, count DESC LIMIT :lim OFFSET :off&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">where_clause</span><span class="p">),</span>
</span><span id="DB.iterate-150"><a href="#DB.iterate-150"><span class="linenos">150</span></a> <span class="n">params</span> </span><span id="DB.iterate-149"><a href="#DB.iterate-149"><span class="linenos">149</span></a> <span class="n">params</span>
</span><span id="DB.iterate-151"><a href="#DB.iterate-151"><span class="linenos">151</span></a> <span class="p">):</span> </span><span id="DB.iterate-150"><a href="#DB.iterate-150"><span class="linenos">150</span></a> <span class="p">):</span>
</span><span id="DB.iterate-152"><a href="#DB.iterate-152"><span class="linenos">152</span></a> <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">allow_lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> </span><span id="DB.iterate-151"><a href="#DB.iterate-151"><span class="linenos">151</span></a> <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">allow_lazy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></pre></div> </span></pre></div>
@ -669,12 +668,12 @@
</div> </div>
<a class="headerlink" href="#DB.len"></a> <a class="headerlink" href="#DB.len"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DB.len-157"><a href="#DB.len-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">len</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> <div class="pdoc-code codehilite"><pre><span></span><span id="DB.len-156"><a href="#DB.len-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">len</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="DB.len-158"><a href="#DB.len-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="DB.len-157"><a href="#DB.len-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="DB.len-159"><a href="#DB.len-159"><span class="linenos">159</span></a><span class="sd"> See `DB.iterate` for possible values of `kwargs`.</span> </span><span id="DB.len-158"><a href="#DB.len-158"><span class="linenos">158</span></a><span class="sd"> See `DB.iterate` for possible values of `kwargs`.</span>
</span><span id="DB.len-160"><a href="#DB.len-160"><span class="linenos">160</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="DB.len-159"><a href="#DB.len-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="DB.len-161"><a href="#DB.len-161"><span class="linenos">161</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> </span><span id="DB.len-160"><a href="#DB.len-160"><span class="linenos">160</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="DB.len-162"><a href="#DB.len-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">))</span> </span><span id="DB.len-161"><a href="#DB.len-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
</span></pre></div> </span></pre></div>
@ -694,14 +693,14 @@
</div> </div>
<a class="headerlink" href="#DB.by_count"></a> <a class="headerlink" href="#DB.by_count"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DB.by_count-189"><a href="#DB.by_count-189"><span class="linenos">189</span></a> <span class="k">def</span> <span class="nf">by_count</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="o">|</span><span class="kc">None</span><span class="p">:</span> <div class="pdoc-code codehilite"><pre><span></span><span id="DB.by_count-188"><a href="#DB.by_count-188"><span class="linenos">188</span></a> <span class="k">def</span> <span class="nf">by_count</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="o">|</span><span class="kc">None</span><span class="p">:</span>
</span><span id="DB.by_count-190"><a href="#DB.by_count-190"><span class="linenos">190</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> </span><span id="DB.by_count-189"><a href="#DB.by_count-189"><span class="linenos">189</span></a> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="DB.by_count-191"><a href="#DB.by_count-191"><span class="linenos">191</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="DB.by_count-190"><a href="#DB.by_count-190"><span class="linenos">190</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="DB.by_count-192"><a href="#DB.by_count-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span> </span><span id="DB.by_count-191"><a href="#DB.by_count-191"><span class="linenos">191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_row_object</span><span class="p">(</span>
</span><span id="DB.by_count-193"><a href="#DB.by_count-193"><span class="linenos">193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM Messages WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">count</span><span class="p">,))</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> </span><span id="DB.by_count-192"><a href="#DB.by_count-192"><span class="linenos">192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM Messages WHERE count = ?&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">count</span><span class="p">,))</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</span><span id="DB.by_count-194"><a href="#DB.by_count-194"><span class="linenos">194</span></a> <span class="p">)</span> </span><span id="DB.by_count-193"><a href="#DB.by_count-193"><span class="linenos">193</span></a> <span class="p">)</span>
</span><span id="DB.by_count-195"><a href="#DB.by_count-195"><span class="linenos">195</span></a> <span class="k">except</span><span class="p">:</span> </span><span id="DB.by_count-194"><a href="#DB.by_count-194"><span class="linenos">194</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="DB.by_count-196"><a href="#DB.by_count-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="kc">None</span> </span><span id="DB.by_count-195"><a href="#DB.by_count-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div> </span></pre></div>

View File

@ -47,9 +47,6 @@
<li> <li>
<a class="variable" href="#MessageProcessor.REQUIRE_FULL_EXTRACT">REQUIRE_FULL_EXTRACT</a> <a class="variable" href="#MessageProcessor.REQUIRE_FULL_EXTRACT">REQUIRE_FULL_EXTRACT</a>
</li> </li>
<li>
<a class="variable" href="#MessageProcessor.REQUIRE_FULL_SOLVE">REQUIRE_FULL_SOLVE</a>
</li>
<li> <li>
<a class="variable" href="#MessageProcessor.MANAGEMENT_URL">MANAGEMENT_URL</a> <a class="variable" href="#MessageProcessor.MANAGEMENT_URL">MANAGEMENT_URL</a>
</li> </li>
@ -112,7 +109,7 @@
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">BackgroundTasks</span> </span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">BackgroundTasks</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> </span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">ums.management.db</span> <span class="kn">import</span> <span class="n">DB</span> </span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">ums.management.db</span> <span class="kn">import</span> <span class="n">DB</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">ums.utils</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">AgentResponse</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">RiddleData</span><span class="p">,</span> <span class="n">RiddleSolution</span> </span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">ums.utils</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">AgentResponse</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">RiddleData</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> </span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="k">class</span> <span class="nc">MessageProcessor</span><span class="p">():</span> </span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="k">class</span> <span class="nc">MessageProcessor</span><span class="p">():</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> </span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
@ -120,249 +117,202 @@
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">MESSAGE_MAX_CONTACTS</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MESSAGE_MAX_CONTACTS&#39;</span><span class="p">,</span> <span class="mi">100</span><span class="p">))</span> </span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">MESSAGE_MAX_CONTACTS</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MESSAGE_MAX_CONTACTS&#39;</span><span class="p">,</span> <span class="mi">100</span><span class="p">))</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> </span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">REQUIRE_FULL_EXTRACT</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;REQUIRE_FULL_EXTRACT&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span> </span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">REQUIRE_FULL_EXTRACT</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;REQUIRE_FULL_EXTRACT&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">REQUIRE_FULL_SOLVE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;REQUIRE_FULL_SOLVE&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span> </span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> </span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">MANAGEMENT_URL</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MANAGEMENT_URL&#39;</span><span class="p">,</span> <span class="s1">&#39;http://127.0.0.1:80&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">MANAGEMENT_URL</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MANAGEMENT_URL&#39;</span><span class="p">,</span> <span class="s1">&#39;http://127.0.0.1:80&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span> </span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> </span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">AGENTS_PROCESS</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">AGENTS_PROCESS</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span> </span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span> </span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_PROCESS&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_PROCESS&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span> </span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="p">))</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="p">))</span> </span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">AGENTS_SOLVE</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">AGENTS_SOLVE</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span> </span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span> </span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_SOLVE&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_SOLVE&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span> </span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="p">))</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="p">))</span> </span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">AGENTS_GATEKEEPER</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">AGENTS_GATEKEEPER</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span> </span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span> </span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_GATEKEEPER&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_GATEKEEPER&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span> </span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="p">))</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="p">))</span> </span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> </span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span> </span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span> </span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">management_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">)</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">management_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">)</span> </span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> </span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Process Agent (AGENTS_PROCESS) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Process Agent (AGENTS_PROCESS) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Solve Agent (AGENTS_SOLVE) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Solve Agent (AGENTS_SOLVE) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Gatekeeper Agent (AGENTS_GATEKEEPER) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Gatekeeper Agent (AGENTS_GATEKEEPER) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> </span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">def</span> <span class="nf">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span><span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">def</span> <span class="nf">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span><span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span> </span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^https?://([^:]*)(?::(\d+))?$&#39;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^https?://([^:]*)(?::(\d+))?$&#39;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span> </span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">return</span> <span class="s2">&quot;unknown&quot;</span> <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">return</span> <span class="s2">&quot;unknown&quot;</span> <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> </span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> </span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">def</span> <span class="nf">new_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">def</span> <span class="nf">new_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> </span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">receiver</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">receiver</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> </span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span> </span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span> </span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> </span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">background_tasks</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process_message</span><span class="p">,</span> <span class="n">db_count</span><span class="p">)</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">background_tasks</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process_message</span><span class="p">,</span> <span class="n">db_count</span><span class="p">)</span> </span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> </span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span> </span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">count</span><span class="o">=</span><span class="n">db_count</span><span class="p">,</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">count</span><span class="o">=</span><span class="n">db_count</span><span class="p">,</span> </span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">msg</span><span class="o">=</span><span class="s2">&quot;Added message to queue&quot;</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">msg</span><span class="o">=</span><span class="s2">&quot;Added message to queue&quot;</span> </span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="p">)</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="p">)</span> </span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> </span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span> </span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> </span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> </span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> </span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="p">)</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">)</span> </span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> </span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">def</span> <span class="nf">_process_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">ignore_processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">def</span> <span class="nf">_process_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">ignore_processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> </span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">db_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">db_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span> </span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> </span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">processed</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ignore_processed</span><span class="p">:</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">processed</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ignore_processed</span><span class="p">:</span> </span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="c1"># do not process processed messages again</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="c1"># do not process processed messages again</span> </span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">return</span> </span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> </span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="c1"># now message processed!</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="c1"># now message processed!</span> </span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> </span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> </span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="c1"># increment contacts counter</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="c1"># increment contacts counter</span> </span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">+=</span> <span class="mi">1</span> </span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">MESSAGE_MAX_CONTACTS</span><span class="p">:</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">MESSAGE_MAX_CONTACTS</span><span class="p">:</span> </span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Message reached max number of contacts! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Message reached max number of contacts! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> </span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> </span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="c1"># combine different extractions in data items</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="c1"># check which step/ state the message requires the management to do</span> </span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="c1"># will update items in `db_message.message.data`</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="c1"># -&gt; IF</span> </span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">fully_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_extractions</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span><span class="p">:</span> </span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">REQUIRE_FULL_EXTRACT</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fully_extracted</span><span class="p">)</span> \
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="c1"># send to extract agents</span> </span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span><span class="p">):</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Postpone message, wait for full extract of items! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> </span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> </span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="c1"># combine different extractions in data items</span> </span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="c1"># check which step/ state the message requires the management to do</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="c1"># will update items in `db_message.message.data`</span> </span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span><span class="p">:</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">fully_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_extractions</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">)</span> </span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="c1"># send to extract agents</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">REQUIRE_FULL_EXTRACT</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fully_extracted</span><span class="p">:</span> </span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Postpone message, wait for full extract of items! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">return</span> </span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">elif</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> </span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="c1"># send to solve agents</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="c1"># -&gt; EL IF</span> </span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span> </span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="c1"># send to solve agents</span> </span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="c1"># send to solve agents</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">return</span> </span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> </span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="c1"># combine different solutions</span> </span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">else</span><span class="p">:</span> <span class="c1"># all steps &quot;done&quot;</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="c1"># will add solutions received before to `db_message.message.solution`</span> </span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">fully_solved</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_solutions</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span><span class="p">)</span> </span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="c1"># validate not required? (then solved will never be set to true, thus set it here)</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">REQUIRE_FULL_SOLVE</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fully_solved</span><span class="p">:</span> </span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span><span class="p">:</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Postpone message, wait for all solutions of riddle! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="kc">True</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> </span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> </span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span><span class="p">:</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="c1"># -&gt; EL IF </span> </span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="c1"># yay, message is solved</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span> </span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">True</span><span class="p">);</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="c1"># send to solve agents</span> </span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="c1"># not solved, but all steps done</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">return</span> </span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">False</span><span class="p">);</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> </span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="c1"># -&gt; ELSE</span> </span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="c1"># try again</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="c1"># all steps &quot;done&quot;</span> </span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_again</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> </span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="c1"># validate not required? (then solved will never be set to true, thus set it here)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">_hash_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span><span class="p">:</span> </span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="n">d</span><span class="o">.</span><span class="n">file_plain</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">prompt</span><span class="p">))</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="kc">True</span> </span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> </span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">def</span> <span class="nf">_add_extractions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle_id</span><span class="p">:</span><span class="nb">str</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="nb">bool</span><span class="p">:</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span><span class="p">:</span> </span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="c1"># yay, message is solved</span> </span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="c1"># get all the data items without extraction</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">True</span><span class="p">);</span> </span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">empty_data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="c1"># not solved, but all steps done</span> </span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">False</span><span class="p">);</span> </span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span> <span class="o">=</span> <span class="n">i</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> </span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="c1"># try again</span> </span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="c1"># search db for extractions already available</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_again</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> </span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">,</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">_hash_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">limit</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">),</span> <span class="mi">250</span><span class="p">)</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="n">s</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">explanation</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">((</span><span class="n">d</span><span class="o">.</span><span class="n">file_plain</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">used_data</span><span class="p">)))</span> </span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="p">):</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> </span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="c1"># check for required extraction</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">_add_solutions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle_id</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">List</span><span class="p">[</span><span class="n">RiddleSolution</span><span class="p">],</span> <span class="n">trial</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">:</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="c1"># do not do anything, if all solutions available</span> </span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="c1"># already extracted ? </span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">):</span> </span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="c1"># extraction file exists ?</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="c1"># one of the items, we do not have extractions for ?</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> </span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="c1"># the same data item ?</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">contained</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_solution</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">solution</span><span class="p">)</span> </span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span> \
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> </span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;missing:&quot;</span><span class="p">)</span> \
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="c1"># search db for solutions from before </span> </span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="ow">in</span> <span class="n">empty_data</span><span class="p">:</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span> </span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="c1"># copy the reference to the extracted data</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">,</span> </span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">data</span><span class="p">[</span><span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]]</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">limit</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">),</span> <span class="mi">250</span><span class="p">)</span> </span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="c1"># remove from items we need extracted data for</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="p">):</span> </span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">del</span> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="c1"># make sure to only use solutions from same &quot;trial&quot;</span> </span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">==</span> <span class="n">trial</span><span class="p">:</span> </span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="c1"># break if all extractions found</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">solution</span><span class="p">:</span> </span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">h</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hash_solution</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> </span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">break</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">if</span> <span class="n">h</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">contained</span><span class="p">:</span> </span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="c1"># add the &#39;new&#39; solution</span> </span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="c1"># fully extracted</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> </span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">contained</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">h</span><span class="p">)</span> </span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">def</span> <span class="nf">_do_again</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">):</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> </span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">SOLUTION_MAX_TRIALS</span><span class="p">:</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="c1"># all solutions found ?</span> </span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="c1"># try again, recycle message</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">):</span> </span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">break</span> </span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="c1"># require steps again</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> </span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span><span class="p">:</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> </span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> </span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">def</span> <span class="nf">_hash_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">message</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">False</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="n">d</span><span class="o">.</span><span class="n">file_plain</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">prompt</span><span class="p">))</span> </span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> </span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">message</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">False</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">_add_extractions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle_id</span><span class="p">:</span><span class="nb">str</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="nb">bool</span><span class="p">:</span> </span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="c1"># get all the data items without extraction</span> </span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="c1"># increment trial</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">empty_data</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">):</span> </span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> </span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="c1"># append current solution als old one</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span> <span class="o">=</span> <span class="n">i</span> </span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">message</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-183"><a href="#L-183"><span class="linenos">183</span></a> </span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">message</span><span class="o">.</span><span class="n">riddle</span><span class="o">.</span><span class="n">solutions_before</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="c1"># do not do anything if fully extracted</span> </span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="p">)</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="c1"># reset current solution</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> </span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="c1"># search db for extractions already available</span> </span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span> </span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="c1"># add the riddle as new to management</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">,</span> </span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">limit</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">),</span> <span class="mi">250</span><span class="p">)</span> </span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="p">):</span> </span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="c1"># check for required extraction</span> </span><span id="L-193"><a href="#L-193"><span class="linenos">193</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;Unsolved riddle after max number of trials: </span><span class="si">{</span><span class="n">message</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-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">:</span> </span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="c1"># already extracted ? </span> </span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="k">def</span> <span class="nf">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipients</span><span class="p">:</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="c1"># extraction file exists ?</span> </span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="c1"># one of the items, we do not have extractions for ?</span> </span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">recipients</span><span class="p">:</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="c1"># the same data item ?</span> </span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">ok</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span> \ </span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="k">return</span> <span class="n">ok</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;missing:&quot;</span><span class="p">)</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="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="ow">in</span> <span class="n">empty_data</span><span class="p">:</span> </span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="k">def</span> <span class="nf">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="c1"># copy the reference to the extracted data</span> </span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">data</span><span class="p">[</span><span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]]</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> </span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">sender</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">management_name</span><span class="p">,</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="c1"># remove from items we need extracted data for</span> </span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">recipient</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">del</span> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span> </span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> </span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">processed</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="c1"># break if all extractions found</span> </span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="p">)</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</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">break</span> </span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> </span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="c1"># fully extracted</span> </span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> </span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">def</span> <span class="nf">_do_again</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">):</span> </span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="p">)</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">SOLUTION_MAX_TRIALS</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="c1"># try again, recycle message</span> </span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> </span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">db_count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="c1"># require steps again</span> </span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> </span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error sending message to: </span><span class="si">{</span><span class="n">recipient</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span> </span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">message</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">False</span> </span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">message</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">False</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="c1"># increment trial</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">+=</span> <span class="mi">1</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="c1"># append current solution(s) als old one(s)</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">message</span><span class="o">.</span><span class="n">riddle</span><span class="o">.</span><span class="n">solutions_before</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="p">)</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="c1"># reset current solution</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="p">[]</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="c1"># add the riddle as new to management</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">,</span> <span class="n">message</span><span class="p">)</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 class="k">else</span><span class="p">:</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</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;Unsolved riddle after max number of trials: </span><span class="si">{</span><span class="n">message</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-241"><a href="#L-241"><span class="linenos">241</span></a>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">def</span> <span class="nf">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipients</span><span class="p">:</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">recipients</span><span class="p">:</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">ok</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">message</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">ok</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">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">sender</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">management_name</span><span class="p">,</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">recipient</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">processed</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <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="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="p">)</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 class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">db_count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error sending message to: </span><span class="si">{</span><span class="n">recipient</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>
</span></pre></div> </span></pre></div>
@ -384,248 +334,201 @@
</span><span id="MessageProcessor-24"><a href="#MessageProcessor-24"><span class="linenos"> 24</span></a> <span class="n">MESSAGE_MAX_CONTACTS</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MESSAGE_MAX_CONTACTS&#39;</span><span class="p">,</span> <span class="mi">100</span><span class="p">))</span> </span><span id="MessageProcessor-24"><a href="#MessageProcessor-24"><span class="linenos"> 24</span></a> <span class="n">MESSAGE_MAX_CONTACTS</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MESSAGE_MAX_CONTACTS&#39;</span><span class="p">,</span> <span class="mi">100</span><span class="p">))</span>
</span><span id="MessageProcessor-25"><a href="#MessageProcessor-25"><span class="linenos"> 25</span></a> </span><span id="MessageProcessor-25"><a href="#MessageProcessor-25"><span class="linenos"> 25</span></a>
</span><span id="MessageProcessor-26"><a href="#MessageProcessor-26"><span class="linenos"> 26</span></a> <span class="n">REQUIRE_FULL_EXTRACT</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;REQUIRE_FULL_EXTRACT&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span> </span><span id="MessageProcessor-26"><a href="#MessageProcessor-26"><span class="linenos"> 26</span></a> <span class="n">REQUIRE_FULL_EXTRACT</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;REQUIRE_FULL_EXTRACT&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span>
</span><span id="MessageProcessor-27"><a href="#MessageProcessor-27"><span class="linenos"> 27</span></a> <span class="n">REQUIRE_FULL_SOLVE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;REQUIRE_FULL_SOLVE&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span> </span><span id="MessageProcessor-27"><a href="#MessageProcessor-27"><span class="linenos"> 27</span></a>
</span><span id="MessageProcessor-28"><a href="#MessageProcessor-28"><span class="linenos"> 28</span></a> </span><span id="MessageProcessor-28"><a href="#MessageProcessor-28"><span class="linenos"> 28</span></a> <span class="n">MANAGEMENT_URL</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MANAGEMENT_URL&#39;</span><span class="p">,</span> <span class="s1">&#39;http://127.0.0.1:80&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
</span><span id="MessageProcessor-29"><a href="#MessageProcessor-29"><span class="linenos"> 29</span></a> <span class="n">MANAGEMENT_URL</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MANAGEMENT_URL&#39;</span><span class="p">,</span> <span class="s1">&#39;http://127.0.0.1:80&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span> </span><span id="MessageProcessor-29"><a href="#MessageProcessor-29"><span class="linenos"> 29</span></a>
</span><span id="MessageProcessor-30"><a href="#MessageProcessor-30"><span class="linenos"> 30</span></a> </span><span id="MessageProcessor-30"><a href="#MessageProcessor-30"><span class="linenos"> 30</span></a> <span class="n">AGENTS_PROCESS</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span>
</span><span id="MessageProcessor-31"><a href="#MessageProcessor-31"><span class="linenos"> 31</span></a> <span class="n">AGENTS_PROCESS</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span> </span><span id="MessageProcessor-31"><a href="#MessageProcessor-31"><span class="linenos"> 31</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span>
</span><span id="MessageProcessor-32"><a href="#MessageProcessor-32"><span class="linenos"> 32</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span> </span><span id="MessageProcessor-32"><a href="#MessageProcessor-32"><span class="linenos"> 32</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_PROCESS&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span><span id="MessageProcessor-33"><a href="#MessageProcessor-33"><span class="linenos"> 33</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_PROCESS&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span> </span><span id="MessageProcessor-33"><a href="#MessageProcessor-33"><span class="linenos"> 33</span></a> <span class="p">))</span>
</span><span id="MessageProcessor-34"><a href="#MessageProcessor-34"><span class="linenos"> 34</span></a> <span class="p">))</span> </span><span id="MessageProcessor-34"><a href="#MessageProcessor-34"><span class="linenos"> 34</span></a> <span class="n">AGENTS_SOLVE</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span>
</span><span id="MessageProcessor-35"><a href="#MessageProcessor-35"><span class="linenos"> 35</span></a> <span class="n">AGENTS_SOLVE</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span> </span><span id="MessageProcessor-35"><a href="#MessageProcessor-35"><span class="linenos"> 35</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span>
</span><span id="MessageProcessor-36"><a href="#MessageProcessor-36"><span class="linenos"> 36</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span> </span><span id="MessageProcessor-36"><a href="#MessageProcessor-36"><span class="linenos"> 36</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_SOLVE&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span><span id="MessageProcessor-37"><a href="#MessageProcessor-37"><span class="linenos"> 37</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_SOLVE&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span> </span><span id="MessageProcessor-37"><a href="#MessageProcessor-37"><span class="linenos"> 37</span></a> <span class="p">))</span>
</span><span id="MessageProcessor-38"><a href="#MessageProcessor-38"><span class="linenos"> 38</span></a> <span class="p">))</span> </span><span id="MessageProcessor-38"><a href="#MessageProcessor-38"><span class="linenos"> 38</span></a> <span class="n">AGENTS_GATEKEEPER</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span>
</span><span id="MessageProcessor-39"><a href="#MessageProcessor-39"><span class="linenos"> 39</span></a> <span class="n">AGENTS_GATEKEEPER</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span> </span><span id="MessageProcessor-39"><a href="#MessageProcessor-39"><span class="linenos"> 39</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span>
</span><span id="MessageProcessor-40"><a href="#MessageProcessor-40"><span class="linenos"> 40</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span><span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">),</span> </span><span id="MessageProcessor-40"><a href="#MessageProcessor-40"><span class="linenos"> 40</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_GATEKEEPER&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span><span id="MessageProcessor-41"><a href="#MessageProcessor-41"><span class="linenos"> 41</span></a> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;AGENTS_GATEKEEPER&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span> </span><span id="MessageProcessor-41"><a href="#MessageProcessor-41"><span class="linenos"> 41</span></a> <span class="p">))</span>
</span><span id="MessageProcessor-42"><a href="#MessageProcessor-42"><span class="linenos"> 42</span></a> <span class="p">))</span> </span><span id="MessageProcessor-42"><a href="#MessageProcessor-42"><span class="linenos"> 42</span></a>
</span><span id="MessageProcessor-43"><a href="#MessageProcessor-43"><span class="linenos"> 43</span></a> </span><span id="MessageProcessor-43"><a href="#MessageProcessor-43"><span class="linenos"> 43</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="MessageProcessor-44"><a href="#MessageProcessor-44"><span class="linenos"> 44</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span> </span><span id="MessageProcessor-44"><a href="#MessageProcessor-44"><span class="linenos"> 44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="MessageProcessor-45"><a href="#MessageProcessor-45"><span class="linenos"> 45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span> </span><span id="MessageProcessor-45"><a href="#MessageProcessor-45"><span class="linenos"> 45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">management_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">)</span>
</span><span id="MessageProcessor-46"><a href="#MessageProcessor-46"><span class="linenos"> 46</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">management_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">)</span> </span><span id="MessageProcessor-46"><a href="#MessageProcessor-46"><span class="linenos"> 46</span></a>
</span><span id="MessageProcessor-47"><a href="#MessageProcessor-47"><span class="linenos"> 47</span></a> </span><span id="MessageProcessor-47"><a href="#MessageProcessor-47"><span class="linenos"> 47</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor-48"><a href="#MessageProcessor-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor-48"><a href="#MessageProcessor-48"><span class="linenos"> 48</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Process Agent (AGENTS_PROCESS) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor-49"><a href="#MessageProcessor-49"><span class="linenos"> 49</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Process Agent (AGENTS_PROCESS) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="MessageProcessor-49"><a href="#MessageProcessor-49"><span class="linenos"> 49</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor-50"><a href="#MessageProcessor-50"><span class="linenos"> 50</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor-50"><a href="#MessageProcessor-50"><span class="linenos"> 50</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Solve Agent (AGENTS_SOLVE) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor-51"><a href="#MessageProcessor-51"><span class="linenos"> 51</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Solve Agent (AGENTS_SOLVE) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="MessageProcessor-51"><a href="#MessageProcessor-51"><span class="linenos"> 51</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor-52"><a href="#MessageProcessor-52"><span class="linenos"> 52</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor-52"><a href="#MessageProcessor-52"><span class="linenos"> 52</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Gatekeeper Agent (AGENTS_GATEKEEPER) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor-53"><a href="#MessageProcessor-53"><span class="linenos"> 53</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Gatekeeper Agent (AGENTS_GATEKEEPER) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="MessageProcessor-53"><a href="#MessageProcessor-53"><span class="linenos"> 53</span></a>
</span><span id="MessageProcessor-54"><a href="#MessageProcessor-54"><span class="linenos"> 54</span></a> </span><span id="MessageProcessor-54"><a href="#MessageProcessor-54"><span class="linenos"> 54</span></a> <span class="k">def</span> <span class="nf">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span><span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="MessageProcessor-55"><a href="#MessageProcessor-55"><span class="linenos"> 55</span></a> <span class="k">def</span> <span class="nf">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span><span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span> </span><span id="MessageProcessor-55"><a href="#MessageProcessor-55"><span class="linenos"> 55</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^https?://([^:]*)(?::(\d+))?$&#39;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
</span><span id="MessageProcessor-56"><a href="#MessageProcessor-56"><span class="linenos"> 56</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^https?://([^:]*)(?::(\d+))?$&#39;</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span> </span><span id="MessageProcessor-56"><a href="#MessageProcessor-56"><span class="linenos"> 56</span></a> <span class="k">return</span> <span class="s2">&quot;unknown&quot;</span> <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="MessageProcessor-57"><a href="#MessageProcessor-57"><span class="linenos"> 57</span></a> <span class="k">return</span> <span class="s2">&quot;unknown&quot;</span> <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> </span><span id="MessageProcessor-57"><a href="#MessageProcessor-57"><span class="linenos"> 57</span></a>
</span><span id="MessageProcessor-58"><a href="#MessageProcessor-58"><span class="linenos"> 58</span></a> </span><span id="MessageProcessor-58"><a href="#MessageProcessor-58"><span class="linenos"> 58</span></a> <span class="k">def</span> <span class="nf">new_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="MessageProcessor-59"><a href="#MessageProcessor-59"><span class="linenos"> 59</span></a> <span class="k">def</span> <span class="nf">new_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> </span><span id="MessageProcessor-59"><a href="#MessageProcessor-59"><span class="linenos"> 59</span></a> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">receiver</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span>
</span><span id="MessageProcessor-60"><a href="#MessageProcessor-60"><span class="linenos"> 60</span></a> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">receiver</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> </span><span id="MessageProcessor-60"><a href="#MessageProcessor-60"><span class="linenos"> 60</span></a> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span>
</span><span id="MessageProcessor-61"><a href="#MessageProcessor-61"><span class="linenos"> 61</span></a> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span> </span><span id="MessageProcessor-61"><a href="#MessageProcessor-61"><span class="linenos"> 61</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="MessageProcessor-62"><a href="#MessageProcessor-62"><span class="linenos"> 62</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span> </span><span id="MessageProcessor-62"><a href="#MessageProcessor-62"><span class="linenos"> 62</span></a>
</span><span id="MessageProcessor-63"><a href="#MessageProcessor-63"><span class="linenos"> 63</span></a> </span><span id="MessageProcessor-63"><a href="#MessageProcessor-63"><span class="linenos"> 63</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="MessageProcessor-64"><a href="#MessageProcessor-64"><span class="linenos"> 64</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="MessageProcessor-64"><a href="#MessageProcessor-64"><span class="linenos"> 64</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-65"><a href="#MessageProcessor-65"><span class="linenos"> 65</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="MessageProcessor-65"><a href="#MessageProcessor-65"><span class="linenos"> 65</span></a> <span class="n">background_tasks</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process_message</span><span class="p">,</span> <span class="n">db_count</span><span class="p">)</span>
</span><span id="MessageProcessor-66"><a href="#MessageProcessor-66"><span class="linenos"> 66</span></a> <span class="n">background_tasks</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process_message</span><span class="p">,</span> <span class="n">db_count</span><span class="p">)</span> </span><span id="MessageProcessor-66"><a href="#MessageProcessor-66"><span class="linenos"> 66</span></a>
</span><span id="MessageProcessor-67"><a href="#MessageProcessor-67"><span class="linenos"> 67</span></a> </span><span id="MessageProcessor-67"><a href="#MessageProcessor-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span>
</span><span id="MessageProcessor-68"><a href="#MessageProcessor-68"><span class="linenos"> 68</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span> </span><span id="MessageProcessor-68"><a href="#MessageProcessor-68"><span class="linenos"> 68</span></a> <span class="n">count</span><span class="o">=</span><span class="n">db_count</span><span class="p">,</span>
</span><span id="MessageProcessor-69"><a href="#MessageProcessor-69"><span class="linenos"> 69</span></a> <span class="n">count</span><span class="o">=</span><span class="n">db_count</span><span class="p">,</span> </span><span id="MessageProcessor-69"><a href="#MessageProcessor-69"><span class="linenos"> 69</span></a> <span class="n">msg</span><span class="o">=</span><span class="s2">&quot;Added message to queue&quot;</span>
</span><span id="MessageProcessor-70"><a href="#MessageProcessor-70"><span class="linenos"> 70</span></a> <span class="n">msg</span><span class="o">=</span><span class="s2">&quot;Added message to queue&quot;</span> </span><span id="MessageProcessor-70"><a href="#MessageProcessor-70"><span class="linenos"> 70</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-71"><a href="#MessageProcessor-71"><span class="linenos"> 71</span></a> <span class="p">)</span> </span><span id="MessageProcessor-71"><a href="#MessageProcessor-71"><span class="linenos"> 71</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="MessageProcessor-72"><a href="#MessageProcessor-72"><span class="linenos"> 72</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> </span><span id="MessageProcessor-72"><a href="#MessageProcessor-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span>
</span><span id="MessageProcessor-73"><a href="#MessageProcessor-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span> </span><span id="MessageProcessor-73"><a href="#MessageProcessor-73"><span class="linenos"> 73</span></a> <span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="MessageProcessor-74"><a href="#MessageProcessor-74"><span class="linenos"> 74</span></a> <span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> </span><span id="MessageProcessor-74"><a href="#MessageProcessor-74"><span class="linenos"> 74</span></a> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="MessageProcessor-75"><a href="#MessageProcessor-75"><span class="linenos"> 75</span></a> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> </span><span id="MessageProcessor-75"><a href="#MessageProcessor-75"><span class="linenos"> 75</span></a> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="MessageProcessor-76"><a href="#MessageProcessor-76"><span class="linenos"> 76</span></a> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> </span><span id="MessageProcessor-76"><a href="#MessageProcessor-76"><span class="linenos"> 76</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-77"><a href="#MessageProcessor-77"><span class="linenos"> 77</span></a> <span class="p">)</span> </span><span id="MessageProcessor-77"><a href="#MessageProcessor-77"><span class="linenos"> 77</span></a>
</span><span id="MessageProcessor-78"><a href="#MessageProcessor-78"><span class="linenos"> 78</span></a> </span><span id="MessageProcessor-78"><a href="#MessageProcessor-78"><span class="linenos"> 78</span></a> <span class="k">def</span> <span class="nf">_process_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">ignore_processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="MessageProcessor-79"><a href="#MessageProcessor-79"><span class="linenos"> 79</span></a> <span class="k">def</span> <span class="nf">_process_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">ignore_processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> </span><span id="MessageProcessor-79"><a href="#MessageProcessor-79"><span class="linenos"> 79</span></a> <span class="n">db_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</span><span id="MessageProcessor-80"><a href="#MessageProcessor-80"><span class="linenos"> 80</span></a> <span class="n">db_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span> </span><span id="MessageProcessor-80"><a href="#MessageProcessor-80"><span class="linenos"> 80</span></a>
</span><span id="MessageProcessor-81"><a href="#MessageProcessor-81"><span class="linenos"> 81</span></a> </span><span id="MessageProcessor-81"><a href="#MessageProcessor-81"><span class="linenos"> 81</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">processed</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ignore_processed</span><span class="p">:</span>
</span><span id="MessageProcessor-82"><a href="#MessageProcessor-82"><span class="linenos"> 82</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">processed</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ignore_processed</span><span class="p">:</span> </span><span id="MessageProcessor-82"><a href="#MessageProcessor-82"><span class="linenos"> 82</span></a> <span class="c1"># do not process processed messages again</span>
</span><span id="MessageProcessor-83"><a href="#MessageProcessor-83"><span class="linenos"> 83</span></a> <span class="c1"># do not process processed messages again</span> </span><span id="MessageProcessor-83"><a href="#MessageProcessor-83"><span class="linenos"> 83</span></a> <span class="k">return</span>
</span><span id="MessageProcessor-84"><a href="#MessageProcessor-84"><span class="linenos"> 84</span></a> <span class="k">return</span> </span><span id="MessageProcessor-84"><a href="#MessageProcessor-84"><span class="linenos"> 84</span></a>
</span><span id="MessageProcessor-85"><a href="#MessageProcessor-85"><span class="linenos"> 85</span></a> </span><span id="MessageProcessor-85"><a href="#MessageProcessor-85"><span class="linenos"> 85</span></a> <span class="c1"># now message processed!</span>
</span><span id="MessageProcessor-86"><a href="#MessageProcessor-86"><span class="linenos"> 86</span></a> <span class="c1"># now message processed!</span> </span><span id="MessageProcessor-86"><a href="#MessageProcessor-86"><span class="linenos"> 86</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="MessageProcessor-87"><a href="#MessageProcessor-87"><span class="linenos"> 87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> </span><span id="MessageProcessor-87"><a href="#MessageProcessor-87"><span class="linenos"> 87</span></a>
</span><span id="MessageProcessor-88"><a href="#MessageProcessor-88"><span class="linenos"> 88</span></a> </span><span id="MessageProcessor-88"><a href="#MessageProcessor-88"><span class="linenos"> 88</span></a> <span class="c1"># increment contacts counter</span>
</span><span id="MessageProcessor-89"><a href="#MessageProcessor-89"><span class="linenos"> 89</span></a> <span class="c1"># increment contacts counter</span> </span><span id="MessageProcessor-89"><a href="#MessageProcessor-89"><span class="linenos"> 89</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="MessageProcessor-90"><a href="#MessageProcessor-90"><span class="linenos"> 90</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">+=</span> <span class="mi">1</span> </span><span id="MessageProcessor-90"><a href="#MessageProcessor-90"><span class="linenos"> 90</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">MESSAGE_MAX_CONTACTS</span><span class="p">:</span>
</span><span id="MessageProcessor-91"><a href="#MessageProcessor-91"><span class="linenos"> 91</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">contacts</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">MESSAGE_MAX_CONTACTS</span><span class="p">:</span> </span><span id="MessageProcessor-91"><a href="#MessageProcessor-91"><span class="linenos"> 91</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Message reached max number of contacts! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor-92"><a href="#MessageProcessor-92"><span class="linenos"> 92</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Message reached max number of contacts! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="MessageProcessor-92"><a href="#MessageProcessor-92"><span class="linenos"> 92</span></a> <span class="k">return</span>
</span><span id="MessageProcessor-93"><a href="#MessageProcessor-93"><span class="linenos"> 93</span></a> <span class="k">return</span> </span><span id="MessageProcessor-93"><a href="#MessageProcessor-93"><span class="linenos"> 93</span></a>
</span><span id="MessageProcessor-94"><a href="#MessageProcessor-94"><span class="linenos"> 94</span></a> </span><span id="MessageProcessor-94"><a href="#MessageProcessor-94"><span class="linenos"> 94</span></a> <span class="c1"># combine different extractions in data items</span>
</span><span id="MessageProcessor-95"><a href="#MessageProcessor-95"><span class="linenos"> 95</span></a> <span class="c1"># check which step/ state the message requires the management to do</span> </span><span id="MessageProcessor-95"><a href="#MessageProcessor-95"><span class="linenos"> 95</span></a> <span class="c1"># will update items in `db_message.message.data`</span>
</span><span id="MessageProcessor-96"><a href="#MessageProcessor-96"><span class="linenos"> 96</span></a> <span class="c1"># -&gt; IF</span> </span><span id="MessageProcessor-96"><a href="#MessageProcessor-96"><span class="linenos"> 96</span></a> <span class="n">fully_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_extractions</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
</span><span id="MessageProcessor-97"><a href="#MessageProcessor-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span><span class="p">:</span> </span><span id="MessageProcessor-97"><a href="#MessageProcessor-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">REQUIRE_FULL_EXTRACT</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fully_extracted</span><span class="p">)</span> \
</span><span id="MessageProcessor-98"><a href="#MessageProcessor-98"><span class="linenos"> 98</span></a> <span class="c1"># send to extract agents</span> </span><span id="MessageProcessor-98"><a href="#MessageProcessor-98"><span class="linenos"> 98</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span><span class="p">):</span>
</span><span id="MessageProcessor-99"><a href="#MessageProcessor-99"><span class="linenos"> 99</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="MessageProcessor-99"><a href="#MessageProcessor-99"><span class="linenos"> 99</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Postpone message, wait for full extract of items! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor-100"><a href="#MessageProcessor-100"><span class="linenos">100</span></a> <span class="k">return</span> </span><span id="MessageProcessor-100"><a href="#MessageProcessor-100"><span class="linenos">100</span></a> <span class="k">return</span>
</span><span id="MessageProcessor-101"><a href="#MessageProcessor-101"><span class="linenos">101</span></a> </span><span id="MessageProcessor-101"><a href="#MessageProcessor-101"><span class="linenos">101</span></a>
</span><span id="MessageProcessor-102"><a href="#MessageProcessor-102"><span class="linenos">102</span></a> <span class="c1"># combine different extractions in data items</span> </span><span id="MessageProcessor-102"><a href="#MessageProcessor-102"><span class="linenos">102</span></a> <span class="c1"># check which step/ state the message requires the management to do</span>
</span><span id="MessageProcessor-103"><a href="#MessageProcessor-103"><span class="linenos">103</span></a> <span class="c1"># will update items in `db_message.message.data`</span> </span><span id="MessageProcessor-103"><a href="#MessageProcessor-103"><span class="linenos">103</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span><span class="p">:</span>
</span><span id="MessageProcessor-104"><a href="#MessageProcessor-104"><span class="linenos">104</span></a> <span class="n">fully_extracted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_extractions</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">)</span> </span><span id="MessageProcessor-104"><a href="#MessageProcessor-104"><span class="linenos">104</span></a> <span class="c1"># send to extract agents</span>
</span><span id="MessageProcessor-105"><a href="#MessageProcessor-105"><span class="linenos">105</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">REQUIRE_FULL_EXTRACT</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fully_extracted</span><span class="p">:</span> </span><span id="MessageProcessor-105"><a href="#MessageProcessor-105"><span class="linenos">105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-106"><a href="#MessageProcessor-106"><span class="linenos">106</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Postpone message, wait for full extract of items! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="MessageProcessor-106"><a href="#MessageProcessor-106"><span class="linenos">106</span></a>
</span><span id="MessageProcessor-107"><a href="#MessageProcessor-107"><span class="linenos">107</span></a> <span class="k">return</span> </span><span id="MessageProcessor-107"><a href="#MessageProcessor-107"><span class="linenos">107</span></a> <span class="k">elif</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span>
</span><span id="MessageProcessor-108"><a href="#MessageProcessor-108"><span class="linenos">108</span></a> </span><span id="MessageProcessor-108"><a href="#MessageProcessor-108"><span class="linenos">108</span></a> <span class="c1"># send to solve agents</span>
</span><span id="MessageProcessor-109"><a href="#MessageProcessor-109"><span class="linenos">109</span></a> <span class="c1"># -&gt; EL IF</span> </span><span id="MessageProcessor-109"><a href="#MessageProcessor-109"><span class="linenos">109</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-110"><a href="#MessageProcessor-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span> </span><span id="MessageProcessor-110"><a href="#MessageProcessor-110"><span class="linenos">110</span></a>
</span><span id="MessageProcessor-111"><a href="#MessageProcessor-111"><span class="linenos">111</span></a> <span class="c1"># send to solve agents</span> </span><span id="MessageProcessor-111"><a href="#MessageProcessor-111"><span class="linenos">111</span></a> <span class="k">elif</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span>
</span><span id="MessageProcessor-112"><a href="#MessageProcessor-112"><span class="linenos">112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="MessageProcessor-112"><a href="#MessageProcessor-112"><span class="linenos">112</span></a> <span class="c1"># send to solve agents</span>
</span><span id="MessageProcessor-113"><a href="#MessageProcessor-113"><span class="linenos">113</span></a> <span class="k">return</span> </span><span id="MessageProcessor-113"><a href="#MessageProcessor-113"><span class="linenos">113</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-114"><a href="#MessageProcessor-114"><span class="linenos">114</span></a> </span><span id="MessageProcessor-114"><a href="#MessageProcessor-114"><span class="linenos">114</span></a>
</span><span id="MessageProcessor-115"><a href="#MessageProcessor-115"><span class="linenos">115</span></a> <span class="c1"># combine different solutions</span> </span><span id="MessageProcessor-115"><a href="#MessageProcessor-115"><span class="linenos">115</span></a> <span class="k">else</span><span class="p">:</span> <span class="c1"># all steps &quot;done&quot;</span>
</span><span id="MessageProcessor-116"><a href="#MessageProcessor-116"><span class="linenos">116</span></a> <span class="c1"># will add solutions received before to `db_message.message.solution`</span> </span><span id="MessageProcessor-116"><a href="#MessageProcessor-116"><span class="linenos">116</span></a>
</span><span id="MessageProcessor-117"><a href="#MessageProcessor-117"><span class="linenos">117</span></a> <span class="n">fully_solved</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_solutions</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span><span class="p">)</span> </span><span id="MessageProcessor-117"><a href="#MessageProcessor-117"><span class="linenos">117</span></a> <span class="c1"># validate not required? (then solved will never be set to true, thus set it here)</span>
</span><span id="MessageProcessor-118"><a href="#MessageProcessor-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">REQUIRE_FULL_SOLVE</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fully_solved</span><span class="p">:</span> </span><span id="MessageProcessor-118"><a href="#MessageProcessor-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span><span class="p">:</span>
</span><span id="MessageProcessor-119"><a href="#MessageProcessor-119"><span class="linenos">119</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Postpone message, wait for all solutions of riddle! </span><span class="si">{</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</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">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> </span><span id="MessageProcessor-119"><a href="#MessageProcessor-119"><span class="linenos">119</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="kc">True</span>
</span><span id="MessageProcessor-120"><a href="#MessageProcessor-120"><span class="linenos">120</span></a> <span class="k">return</span> </span><span id="MessageProcessor-120"><a href="#MessageProcessor-120"><span class="linenos">120</span></a>
</span><span id="MessageProcessor-121"><a href="#MessageProcessor-121"><span class="linenos">121</span></a> </span><span id="MessageProcessor-121"><a href="#MessageProcessor-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span><span class="p">:</span>
</span><span id="MessageProcessor-122"><a href="#MessageProcessor-122"><span class="linenos">122</span></a> <span class="c1"># -&gt; EL IF </span> </span><span id="MessageProcessor-122"><a href="#MessageProcessor-122"><span class="linenos">122</span></a> <span class="c1"># yay, message is solved</span>
</span><span id="MessageProcessor-123"><a href="#MessageProcessor-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="p">:</span> </span><span id="MessageProcessor-123"><a href="#MessageProcessor-123"><span class="linenos">123</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">True</span><span class="p">);</span>
</span><span id="MessageProcessor-124"><a href="#MessageProcessor-124"><span class="linenos">124</span></a> <span class="c1"># send to solve agents</span> </span><span id="MessageProcessor-124"><a href="#MessageProcessor-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="MessageProcessor-125"><a href="#MessageProcessor-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">,</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="MessageProcessor-125"><a href="#MessageProcessor-125"><span class="linenos">125</span></a> <span class="c1"># not solved, but all steps done</span>
</span><span id="MessageProcessor-126"><a href="#MessageProcessor-126"><span class="linenos">126</span></a> <span class="k">return</span> </span><span id="MessageProcessor-126"><a href="#MessageProcessor-126"><span class="linenos">126</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">False</span><span class="p">);</span>
</span><span id="MessageProcessor-127"><a href="#MessageProcessor-127"><span class="linenos">127</span></a> </span><span id="MessageProcessor-127"><a href="#MessageProcessor-127"><span class="linenos">127</span></a>
</span><span id="MessageProcessor-128"><a href="#MessageProcessor-128"><span class="linenos">128</span></a> <span class="c1"># -&gt; ELSE</span> </span><span id="MessageProcessor-128"><a href="#MessageProcessor-128"><span class="linenos">128</span></a> <span class="c1"># try again</span>
</span><span id="MessageProcessor-129"><a href="#MessageProcessor-129"><span class="linenos">129</span></a> <span class="c1"># all steps &quot;done&quot;</span> </span><span id="MessageProcessor-129"><a href="#MessageProcessor-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_again</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-130"><a href="#MessageProcessor-130"><span class="linenos">130</span></a> </span><span id="MessageProcessor-130"><a href="#MessageProcessor-130"><span class="linenos">130</span></a>
</span><span id="MessageProcessor-131"><a href="#MessageProcessor-131"><span class="linenos">131</span></a> <span class="c1"># validate not required? (then solved will never be set to true, thus set it here)</span> </span><span id="MessageProcessor-131"><a href="#MessageProcessor-131"><span class="linenos">131</span></a> <span class="k">def</span> <span class="nf">_hash_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="MessageProcessor-132"><a href="#MessageProcessor-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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">required</span><span class="p">:</span> </span><span id="MessageProcessor-132"><a href="#MessageProcessor-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="n">d</span><span class="o">.</span><span class="n">file_plain</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">prompt</span><span class="p">))</span>
</span><span id="MessageProcessor-133"><a href="#MessageProcessor-133"><span class="linenos">133</span></a> <span class="n">db_message</span><span class="o">.</span><span class="n">message</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="kc">True</span> </span><span id="MessageProcessor-133"><a href="#MessageProcessor-133"><span class="linenos">133</span></a>
</span><span id="MessageProcessor-134"><a href="#MessageProcessor-134"><span class="linenos">134</span></a> </span><span id="MessageProcessor-134"><a href="#MessageProcessor-134"><span class="linenos">134</span></a> <span class="k">def</span> <span class="nf">_add_extractions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle_id</span><span class="p">:</span><span class="nb">str</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="nb">bool</span><span class="p">:</span>
</span><span id="MessageProcessor-135"><a href="#MessageProcessor-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solved</span><span class="p">:</span> </span><span id="MessageProcessor-135"><a href="#MessageProcessor-135"><span class="linenos">135</span></a>
</span><span id="MessageProcessor-136"><a href="#MessageProcessor-136"><span class="linenos">136</span></a> <span class="c1"># yay, message is solved</span> </span><span id="MessageProcessor-136"><a href="#MessageProcessor-136"><span class="linenos">136</span></a> <span class="c1"># get all the data items without extraction</span>
</span><span id="MessageProcessor-137"><a href="#MessageProcessor-137"><span class="linenos">137</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">True</span><span class="p">);</span> </span><span id="MessageProcessor-137"><a href="#MessageProcessor-137"><span class="linenos">137</span></a> <span class="n">empty_data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="MessageProcessor-138"><a href="#MessageProcessor-138"><span class="linenos">138</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="MessageProcessor-138"><a href="#MessageProcessor-138"><span class="linenos">138</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
</span><span id="MessageProcessor-139"><a href="#MessageProcessor-139"><span class="linenos">139</span></a> <span class="c1"># not solved, but all steps done</span> </span><span id="MessageProcessor-139"><a href="#MessageProcessor-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="MessageProcessor-140"><a href="#MessageProcessor-140"><span class="linenos">140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_solution</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">solution</span><span class="o">=</span><span class="kc">False</span><span class="p">);</span> </span><span id="MessageProcessor-140"><a href="#MessageProcessor-140"><span class="linenos">140</span></a> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span> <span class="o">=</span> <span class="n">i</span>
</span><span id="MessageProcessor-141"><a href="#MessageProcessor-141"><span class="linenos">141</span></a> </span><span id="MessageProcessor-141"><a href="#MessageProcessor-141"><span class="linenos">141</span></a>
</span><span id="MessageProcessor-142"><a href="#MessageProcessor-142"><span class="linenos">142</span></a> <span class="c1"># try again</span> </span><span id="MessageProcessor-142"><a href="#MessageProcessor-142"><span class="linenos">142</span></a> <span class="c1"># search db for extractions already available</span>
</span><span id="MessageProcessor-143"><a href="#MessageProcessor-143"><span class="linenos">143</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_do_again</span><span class="p">(</span><span class="n">db_message</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> </span><span id="MessageProcessor-143"><a href="#MessageProcessor-143"><span class="linenos">143</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span>
</span><span id="MessageProcessor-144"><a href="#MessageProcessor-144"><span class="linenos">144</span></a> </span><span id="MessageProcessor-144"><a href="#MessageProcessor-144"><span class="linenos">144</span></a> <span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">,</span>
</span><span id="MessageProcessor-145"><a href="#MessageProcessor-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">_hash_solution</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span><span class="n">RiddleSolution</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="MessageProcessor-145"><a href="#MessageProcessor-145"><span class="linenos">145</span></a> <span class="n">limit</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">),</span> <span class="mi">250</span><span class="p">)</span>
</span><span id="MessageProcessor-146"><a href="#MessageProcessor-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="n">s</span><span class="o">.</span><span class="n">solution</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">explanation</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">((</span><span class="n">d</span><span class="o">.</span><span class="n">file_plain</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">used_data</span><span class="p">)))</span> </span><span id="MessageProcessor-146"><a href="#MessageProcessor-146"><span class="linenos">146</span></a> <span class="p">):</span>
</span><span id="MessageProcessor-147"><a href="#MessageProcessor-147"><span class="linenos">147</span></a> </span><span id="MessageProcessor-147"><a href="#MessageProcessor-147"><span class="linenos">147</span></a> <span class="c1"># check for required extraction</span>
</span><span id="MessageProcessor-148"><a href="#MessageProcessor-148"><span class="linenos">148</span></a> <span class="k">def</span> <span class="nf">_add_solutions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle_id</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">solution</span><span class="p">:</span><span class="n">List</span><span class="p">[</span><span class="n">RiddleSolution</span><span class="p">],</span> <span class="n">trial</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> </span><span id="MessageProcessor-148"><a href="#MessageProcessor-148"><span class="linenos">148</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">:</span>
</span><span id="MessageProcessor-149"><a href="#MessageProcessor-149"><span class="linenos">149</span></a> <span class="c1"># do not do anything, if all solutions available</span> </span><span id="MessageProcessor-149"><a href="#MessageProcessor-149"><span class="linenos">149</span></a> <span class="c1"># already extracted ? </span>
</span><span id="MessageProcessor-150"><a href="#MessageProcessor-150"><span class="linenos">150</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">):</span> </span><span id="MessageProcessor-150"><a href="#MessageProcessor-150"><span class="linenos">150</span></a> <span class="c1"># extraction file exists ?</span>
</span><span id="MessageProcessor-151"><a href="#MessageProcessor-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="MessageProcessor-151"><a href="#MessageProcessor-151"><span class="linenos">151</span></a> <span class="c1"># one of the items, we do not have extractions for ?</span>
</span><span id="MessageProcessor-152"><a href="#MessageProcessor-152"><span class="linenos">152</span></a> </span><span id="MessageProcessor-152"><a href="#MessageProcessor-152"><span class="linenos">152</span></a> <span class="c1"># the same data item ?</span>
</span><span id="MessageProcessor-153"><a href="#MessageProcessor-153"><span class="linenos">153</span></a> <span class="n">contained</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_solution</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">solution</span><span class="p">)</span> </span><span id="MessageProcessor-153"><a href="#MessageProcessor-153"><span class="linenos">153</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span> \
</span><span id="MessageProcessor-154"><a href="#MessageProcessor-154"><span class="linenos">154</span></a> </span><span id="MessageProcessor-154"><a href="#MessageProcessor-154"><span class="linenos">154</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;missing:&quot;</span><span class="p">)</span> \
</span><span id="MessageProcessor-155"><a href="#MessageProcessor-155"><span class="linenos">155</span></a> <span class="c1"># search db for solutions from before </span> </span><span id="MessageProcessor-155"><a href="#MessageProcessor-155"><span class="linenos">155</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="ow">in</span> <span class="n">empty_data</span><span class="p">:</span>
</span><span id="MessageProcessor-156"><a href="#MessageProcessor-156"><span class="linenos">156</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span> </span><span id="MessageProcessor-156"><a href="#MessageProcessor-156"><span class="linenos">156</span></a> <span class="c1"># copy the reference to the extracted data</span>
</span><span id="MessageProcessor-157"><a href="#MessageProcessor-157"><span class="linenos">157</span></a> <span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">,</span> </span><span id="MessageProcessor-157"><a href="#MessageProcessor-157"><span class="linenos">157</span></a> <span class="n">data</span><span class="p">[</span><span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]]</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span>
</span><span id="MessageProcessor-158"><a href="#MessageProcessor-158"><span class="linenos">158</span></a> <span class="n">limit</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">),</span> <span class="mi">250</span><span class="p">)</span> </span><span id="MessageProcessor-158"><a href="#MessageProcessor-158"><span class="linenos">158</span></a> <span class="c1"># remove from items we need extracted data for</span>
</span><span id="MessageProcessor-159"><a href="#MessageProcessor-159"><span class="linenos">159</span></a> <span class="p">):</span> </span><span id="MessageProcessor-159"><a href="#MessageProcessor-159"><span class="linenos">159</span></a> <span class="k">del</span> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span>
</span><span id="MessageProcessor-160"><a href="#MessageProcessor-160"><span class="linenos">160</span></a> <span class="c1"># make sure to only use solutions from same &quot;trial&quot;</span> </span><span id="MessageProcessor-160"><a href="#MessageProcessor-160"><span class="linenos">160</span></a>
</span><span id="MessageProcessor-161"><a href="#MessageProcessor-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">==</span> <span class="n">trial</span><span class="p">:</span> </span><span id="MessageProcessor-161"><a href="#MessageProcessor-161"><span class="linenos">161</span></a> <span class="c1"># break if all extractions found</span>
</span><span id="MessageProcessor-162"><a href="#MessageProcessor-162"><span class="linenos">162</span></a> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">solution</span><span class="p">:</span> </span><span id="MessageProcessor-162"><a href="#MessageProcessor-162"><span class="linenos">162</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor-163"><a href="#MessageProcessor-163"><span class="linenos">163</span></a> <span class="n">h</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hash_solution</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> </span><span id="MessageProcessor-163"><a href="#MessageProcessor-163"><span class="linenos">163</span></a> <span class="k">break</span>
</span><span id="MessageProcessor-164"><a href="#MessageProcessor-164"><span class="linenos">164</span></a> <span class="k">if</span> <span class="n">h</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">contained</span><span class="p">:</span> </span><span id="MessageProcessor-164"><a href="#MessageProcessor-164"><span class="linenos">164</span></a>
</span><span id="MessageProcessor-165"><a href="#MessageProcessor-165"><span class="linenos">165</span></a> <span class="c1"># add the &#39;new&#39; solution</span> </span><span id="MessageProcessor-165"><a href="#MessageProcessor-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="c1"># fully extracted</span>
</span><span id="MessageProcessor-166"><a href="#MessageProcessor-166"><span class="linenos">166</span></a> <span class="n">solution</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> </span><span id="MessageProcessor-166"><a href="#MessageProcessor-166"><span class="linenos">166</span></a>
</span><span id="MessageProcessor-167"><a href="#MessageProcessor-167"><span class="linenos">167</span></a> <span class="n">contained</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">h</span><span class="p">)</span> </span><span id="MessageProcessor-167"><a href="#MessageProcessor-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="nf">_do_again</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">):</span>
</span><span id="MessageProcessor-168"><a href="#MessageProcessor-168"><span class="linenos">168</span></a> </span><span id="MessageProcessor-168"><a href="#MessageProcessor-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">SOLUTION_MAX_TRIALS</span><span class="p">:</span>
</span><span id="MessageProcessor-169"><a href="#MessageProcessor-169"><span class="linenos">169</span></a> <span class="c1"># all solutions found ?</span> </span><span id="MessageProcessor-169"><a href="#MessageProcessor-169"><span class="linenos">169</span></a> <span class="c1"># try again, recycle message</span>
</span><span id="MessageProcessor-170"><a href="#MessageProcessor-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">):</span> </span><span id="MessageProcessor-170"><a href="#MessageProcessor-170"><span class="linenos">170</span></a>
</span><span id="MessageProcessor-171"><a href="#MessageProcessor-171"><span class="linenos">171</span></a> <span class="k">break</span> </span><span id="MessageProcessor-171"><a href="#MessageProcessor-171"><span class="linenos">171</span></a> <span class="c1"># require steps again</span>
</span><span id="MessageProcessor-172"><a href="#MessageProcessor-172"><span class="linenos">172</span></a> </span><span id="MessageProcessor-172"><a href="#MessageProcessor-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span><span class="p">:</span>
</span><span id="MessageProcessor-173"><a href="#MessageProcessor-173"><span class="linenos">173</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> </span><span id="MessageProcessor-173"><a href="#MessageProcessor-173"><span class="linenos">173</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="MessageProcessor-174"><a href="#MessageProcessor-174"><span class="linenos">174</span></a> </span><span id="MessageProcessor-174"><a href="#MessageProcessor-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span>
</span><span id="MessageProcessor-175"><a href="#MessageProcessor-175"><span class="linenos">175</span></a> <span class="k">def</span> <span class="nf">_hash_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span><span class="n">RiddleData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span><span id="MessageProcessor-175"><a href="#MessageProcessor-175"><span class="linenos">175</span></a> <span class="n">message</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">False</span>
</span><span id="MessageProcessor-176"><a href="#MessageProcessor-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="n">d</span><span class="o">.</span><span class="n">file_plain</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">prompt</span><span class="p">))</span> </span><span id="MessageProcessor-176"><a href="#MessageProcessor-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span>
</span><span id="MessageProcessor-177"><a href="#MessageProcessor-177"><span class="linenos">177</span></a> </span><span id="MessageProcessor-177"><a href="#MessageProcessor-177"><span class="linenos">177</span></a> <span class="n">message</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">False</span>
</span><span id="MessageProcessor-178"><a href="#MessageProcessor-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">_add_extractions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">riddle_id</span><span class="p">:</span><span class="nb">str</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="nb">bool</span><span class="p">:</span> </span><span id="MessageProcessor-178"><a href="#MessageProcessor-178"><span class="linenos">178</span></a>
</span><span id="MessageProcessor-179"><a href="#MessageProcessor-179"><span class="linenos">179</span></a> <span class="c1"># get all the data items without extraction</span> </span><span id="MessageProcessor-179"><a href="#MessageProcessor-179"><span class="linenos">179</span></a> <span class="c1"># increment trial</span>
</span><span id="MessageProcessor-180"><a href="#MessageProcessor-180"><span class="linenos">180</span></a> <span class="n">empty_data</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="MessageProcessor-180"><a href="#MessageProcessor-180"><span class="linenos">180</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="MessageProcessor-181"><a href="#MessageProcessor-181"><span class="linenos">181</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">):</span> </span><span id="MessageProcessor-181"><a href="#MessageProcessor-181"><span class="linenos">181</span></a>
</span><span id="MessageProcessor-182"><a href="#MessageProcessor-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> </span><span id="MessageProcessor-182"><a href="#MessageProcessor-182"><span class="linenos">182</span></a> <span class="c1"># append current solution als old one</span>
</span><span id="MessageProcessor-183"><a href="#MessageProcessor-183"><span class="linenos">183</span></a> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span> <span class="o">=</span> <span class="n">i</span> </span><span id="MessageProcessor-183"><a href="#MessageProcessor-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">message</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="MessageProcessor-184"><a href="#MessageProcessor-184"><span class="linenos">184</span></a> </span><span id="MessageProcessor-184"><a href="#MessageProcessor-184"><span class="linenos">184</span></a> <span class="n">message</span><span class="o">.</span><span class="n">riddle</span><span class="o">.</span><span class="n">solutions_before</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="MessageProcessor-185"><a href="#MessageProcessor-185"><span class="linenos">185</span></a> <span class="c1"># do not do anything if fully extracted</span> </span><span id="MessageProcessor-185"><a href="#MessageProcessor-185"><span class="linenos">185</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span>
</span><span id="MessageProcessor-186"><a href="#MessageProcessor-186"><span class="linenos">186</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor-186"><a href="#MessageProcessor-186"><span class="linenos">186</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-187"><a href="#MessageProcessor-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="kc">True</span> </span><span id="MessageProcessor-187"><a href="#MessageProcessor-187"><span class="linenos">187</span></a> <span class="c1"># reset current solution</span>
</span><span id="MessageProcessor-188"><a href="#MessageProcessor-188"><span class="linenos">188</span></a> </span><span id="MessageProcessor-188"><a href="#MessageProcessor-188"><span class="linenos">188</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="MessageProcessor-189"><a href="#MessageProcessor-189"><span class="linenos">189</span></a> <span class="c1"># search db for extractions already available</span> </span><span id="MessageProcessor-189"><a href="#MessageProcessor-189"><span class="linenos">189</span></a>
</span><span id="MessageProcessor-190"><a href="#MessageProcessor-190"><span class="linenos">190</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span> </span><span id="MessageProcessor-190"><a href="#MessageProcessor-190"><span class="linenos">190</span></a> <span class="c1"># add the riddle as new to management</span>
</span><span id="MessageProcessor-191"><a href="#MessageProcessor-191"><span class="linenos">191</span></a> <span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">,</span> </span><span id="MessageProcessor-191"><a href="#MessageProcessor-191"><span class="linenos">191</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-192"><a href="#MessageProcessor-192"><span class="linenos">192</span></a> <span class="n">limit</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">riddle_id</span><span class="p">),</span> <span class="mi">250</span><span class="p">)</span> </span><span id="MessageProcessor-192"><a href="#MessageProcessor-192"><span class="linenos">192</span></a>
</span><span id="MessageProcessor-193"><a href="#MessageProcessor-193"><span class="linenos">193</span></a> <span class="p">):</span> </span><span id="MessageProcessor-193"><a href="#MessageProcessor-193"><span class="linenos">193</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="MessageProcessor-194"><a href="#MessageProcessor-194"><span class="linenos">194</span></a> <span class="c1"># check for required extraction</span> </span><span id="MessageProcessor-194"><a href="#MessageProcessor-194"><span class="linenos">194</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;Unsolved riddle after max number of trials: </span><span class="si">{</span><span class="n">message</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="MessageProcessor-195"><a href="#MessageProcessor-195"><span class="linenos">195</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">row</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">data</span><span class="p">:</span> </span><span id="MessageProcessor-195"><a href="#MessageProcessor-195"><span class="linenos">195</span></a>
</span><span id="MessageProcessor-196"><a href="#MessageProcessor-196"><span class="linenos">196</span></a> <span class="c1"># already extracted ? </span> </span><span id="MessageProcessor-196"><a href="#MessageProcessor-196"><span class="linenos">196</span></a> <span class="k">def</span> <span class="nf">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipients</span><span class="p">:</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="MessageProcessor-197"><a href="#MessageProcessor-197"><span class="linenos">197</span></a> <span class="c1"># extraction file exists ?</span> </span><span id="MessageProcessor-197"><a href="#MessageProcessor-197"><span class="linenos">197</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="MessageProcessor-198"><a href="#MessageProcessor-198"><span class="linenos">198</span></a> <span class="c1"># one of the items, we do not have extractions for ?</span> </span><span id="MessageProcessor-198"><a href="#MessageProcessor-198"><span class="linenos">198</span></a> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">recipients</span><span class="p">:</span>
</span><span id="MessageProcessor-199"><a href="#MessageProcessor-199"><span class="linenos">199</span></a> <span class="c1"># the same data item ?</span> </span><span id="MessageProcessor-199"><a href="#MessageProcessor-199"><span class="linenos">199</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">ok</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-200"><a href="#MessageProcessor-200"><span class="linenos">200</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> <span class="ow">is</span> <span class="kc">None</span> \ </span><span id="MessageProcessor-200"><a href="#MessageProcessor-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="n">ok</span>
</span><span id="MessageProcessor-201"><a href="#MessageProcessor-201"><span class="linenos">201</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;missing:&quot;</span><span class="p">)</span> \ </span><span id="MessageProcessor-201"><a href="#MessageProcessor-201"><span class="linenos">201</span></a>
</span><span id="MessageProcessor-202"><a href="#MessageProcessor-202"><span class="linenos">202</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="ow">in</span> <span class="n">empty_data</span><span class="p">:</span> </span><span id="MessageProcessor-202"><a href="#MessageProcessor-202"><span class="linenos">202</span></a> <span class="k">def</span> <span class="nf">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="MessageProcessor-203"><a href="#MessageProcessor-203"><span class="linenos">203</span></a> <span class="c1"># copy the reference to the extracted data</span> </span><span id="MessageProcessor-203"><a href="#MessageProcessor-203"><span class="linenos">203</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span>
</span><span id="MessageProcessor-204"><a href="#MessageProcessor-204"><span class="linenos">204</span></a> <span class="n">data</span><span class="p">[</span><span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]]</span><span class="o">.</span><span class="n">file_extracted</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">file_extracted</span> </span><span id="MessageProcessor-204"><a href="#MessageProcessor-204"><span class="linenos">204</span></a> <span class="n">sender</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">management_name</span><span class="p">,</span>
</span><span id="MessageProcessor-205"><a href="#MessageProcessor-205"><span class="linenos">205</span></a> <span class="c1"># remove from items we need extracted data for</span> </span><span id="MessageProcessor-205"><a href="#MessageProcessor-205"><span class="linenos">205</span></a> <span class="n">recipient</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="MessageProcessor-206"><a href="#MessageProcessor-206"><span class="linenos">206</span></a> <span class="k">del</span> <span class="n">empty_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_hash_data</span><span class="p">(</span><span class="n">d</span><span class="p">)]</span> </span><span id="MessageProcessor-206"><a href="#MessageProcessor-206"><span class="linenos">206</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="MessageProcessor-207"><a href="#MessageProcessor-207"><span class="linenos">207</span></a> </span><span id="MessageProcessor-207"><a href="#MessageProcessor-207"><span class="linenos">207</span></a> <span class="n">processed</span><span class="o">=</span><span class="kc">False</span>
</span><span id="MessageProcessor-208"><a href="#MessageProcessor-208"><span class="linenos">208</span></a> <span class="c1"># break if all extractions found</span> </span><span id="MessageProcessor-208"><a href="#MessageProcessor-208"><span class="linenos">208</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-209"><a href="#MessageProcessor-209"><span class="linenos">209</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor-209"><a href="#MessageProcessor-209"><span class="linenos">209</span></a>
</span><span id="MessageProcessor-210"><a href="#MessageProcessor-210"><span class="linenos">210</span></a> <span class="k">break</span> </span><span id="MessageProcessor-210"><a href="#MessageProcessor-210"><span class="linenos">210</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="MessageProcessor-211"><a href="#MessageProcessor-211"><span class="linenos">211</span></a> </span><span id="MessageProcessor-211"><a href="#MessageProcessor-211"><span class="linenos">211</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="MessageProcessor-212"><a href="#MessageProcessor-212"><span class="linenos">212</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">empty_data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="c1"># fully extracted</span> </span><span id="MessageProcessor-212"><a href="#MessageProcessor-212"><span class="linenos">212</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="MessageProcessor-213"><a href="#MessageProcessor-213"><span class="linenos">213</span></a> </span><span id="MessageProcessor-213"><a href="#MessageProcessor-213"><span class="linenos">213</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="MessageProcessor-214"><a href="#MessageProcessor-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">_do_again</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">):</span> </span><span id="MessageProcessor-214"><a href="#MessageProcessor-214"><span class="linenos">214</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-215"><a href="#MessageProcessor-215"><span class="linenos">215</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">SOLUTION_MAX_TRIALS</span><span class="p">:</span> </span><span id="MessageProcessor-215"><a href="#MessageProcessor-215"><span class="linenos">215</span></a>
</span><span id="MessageProcessor-216"><a href="#MessageProcessor-216"><span class="linenos">216</span></a> <span class="c1"># try again, recycle message</span> </span><span id="MessageProcessor-216"><a href="#MessageProcessor-216"><span class="linenos">216</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="MessageProcessor-217"><a href="#MessageProcessor-217"><span class="linenos">217</span></a> </span><span id="MessageProcessor-217"><a href="#MessageProcessor-217"><span class="linenos">217</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">db_count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="MessageProcessor-218"><a href="#MessageProcessor-218"><span class="linenos">218</span></a> <span class="c1"># require steps again</span> </span><span id="MessageProcessor-218"><a href="#MessageProcessor-218"><span class="linenos">218</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="MessageProcessor-219"><a href="#MessageProcessor-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> </span><span id="MessageProcessor-219"><a href="#MessageProcessor-219"><span class="linenos">219</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="MessageProcessor-220"><a href="#MessageProcessor-220"><span class="linenos">220</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">extract</span><span class="o">.</span><span class="n">finished</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="MessageProcessor-220"><a href="#MessageProcessor-220"><span class="linenos">220</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error sending message to: </span><span class="si">{</span><span class="n">recipient</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor-221"><a href="#MessageProcessor-221"><span class="linenos">221</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span> </span><span id="MessageProcessor-221"><a href="#MessageProcessor-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="MessageProcessor-222"><a href="#MessageProcessor-222"><span class="linenos">222</span></a> <span class="n">message</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">False</span>
</span><span id="MessageProcessor-223"><a href="#MessageProcessor-223"><span class="linenos">223</span></a> <span class="k">if</span> <span class="n">message</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">required</span><span class="p">:</span>
</span><span id="MessageProcessor-224"><a href="#MessageProcessor-224"><span class="linenos">224</span></a> <span class="n">message</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">False</span>
</span><span id="MessageProcessor-225"><a href="#MessageProcessor-225"><span class="linenos">225</span></a>
</span><span id="MessageProcessor-226"><a href="#MessageProcessor-226"><span class="linenos">226</span></a> <span class="c1"># increment trial</span>
</span><span id="MessageProcessor-227"><a href="#MessageProcessor-227"><span class="linenos">227</span></a> <span class="n">message</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">trial</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="MessageProcessor-228"><a href="#MessageProcessor-228"><span class="linenos">228</span></a>
</span><span id="MessageProcessor-229"><a href="#MessageProcessor-229"><span class="linenos">229</span></a> <span class="c1"># append current solution(s) als old one(s)</span>
</span><span id="MessageProcessor-230"><a href="#MessageProcessor-230"><span class="linenos">230</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">solution</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor-231"><a href="#MessageProcessor-231"><span class="linenos">231</span></a> <span class="n">message</span><span class="o">.</span><span class="n">riddle</span><span class="o">.</span><span class="n">solutions_before</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
</span><span id="MessageProcessor-232"><a href="#MessageProcessor-232"><span class="linenos">232</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span>
</span><span id="MessageProcessor-233"><a href="#MessageProcessor-233"><span class="linenos">233</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-234"><a href="#MessageProcessor-234"><span class="linenos">234</span></a> <span class="c1"># reset current solution</span>
</span><span id="MessageProcessor-235"><a href="#MessageProcessor-235"><span class="linenos">235</span></a> <span class="n">message</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="MessageProcessor-236"><a href="#MessageProcessor-236"><span class="linenos">236</span></a>
</span><span id="MessageProcessor-237"><a href="#MessageProcessor-237"><span class="linenos">237</span></a> <span class="c1"># add the riddle as new to management</span>
</span><span id="MessageProcessor-238"><a href="#MessageProcessor-238"><span class="linenos">238</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-239"><a href="#MessageProcessor-239"><span class="linenos">239</span></a>
</span><span id="MessageProcessor-240"><a href="#MessageProcessor-240"><span class="linenos">240</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="MessageProcessor-241"><a href="#MessageProcessor-241"><span class="linenos">241</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;Unsolved riddle after max number of trials: </span><span class="si">{</span><span class="n">message</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="MessageProcessor-242"><a href="#MessageProcessor-242"><span class="linenos">242</span></a>
</span><span id="MessageProcessor-243"><a href="#MessageProcessor-243"><span class="linenos">243</span></a> <span class="k">def</span> <span class="nf">_send_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipients</span><span class="p">:</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="MessageProcessor-244"><a href="#MessageProcessor-244"><span class="linenos">244</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="MessageProcessor-245"><a href="#MessageProcessor-245"><span class="linenos">245</span></a> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">recipients</span><span class="p">:</span>
</span><span id="MessageProcessor-246"><a href="#MessageProcessor-246"><span class="linenos">246</span></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">ok</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_message</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor-247"><a href="#MessageProcessor-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">ok</span>
</span><span id="MessageProcessor-248"><a href="#MessageProcessor-248"><span class="linenos">248</span></a>
</span><span id="MessageProcessor-249"><a href="#MessageProcessor-249"><span class="linenos">249</span></a> <span class="k">def</span> <span class="nf">_send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="MessageProcessor-250"><a href="#MessageProcessor-250"><span class="linenos">250</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span>
</span><span id="MessageProcessor-251"><a href="#MessageProcessor-251"><span class="linenos">251</span></a> <span class="n">sender</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">management_name</span><span class="p">,</span>
</span><span id="MessageProcessor-252"><a href="#MessageProcessor-252"><span class="linenos">252</span></a> <span class="n">recipient</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="MessageProcessor-253"><a href="#MessageProcessor-253"><span class="linenos">253</span></a> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="MessageProcessor-254"><a href="#MessageProcessor-254"><span class="linenos">254</span></a> <span class="n">processed</span><span class="o">=</span><span class="kc">False</span>
</span><span id="MessageProcessor-255"><a href="#MessageProcessor-255"><span class="linenos">255</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-256"><a href="#MessageProcessor-256"><span class="linenos">256</span></a>
</span><span id="MessageProcessor-257"><a href="#MessageProcessor-257"><span class="linenos">257</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="MessageProcessor-258"><a href="#MessageProcessor-258"><span class="linenos">258</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">recipient</span><span class="p">),</span>
</span><span id="MessageProcessor-259"><a href="#MessageProcessor-259"><span class="linenos">259</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="MessageProcessor-260"><a href="#MessageProcessor-260"><span class="linenos">260</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="MessageProcessor-261"><a href="#MessageProcessor-261"><span class="linenos">261</span></a> <span class="p">)</span>
</span><span id="MessageProcessor-262"><a href="#MessageProcessor-262"><span class="linenos">262</span></a>
</span><span id="MessageProcessor-263"><a href="#MessageProcessor-263"><span class="linenos">263</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="MessageProcessor-264"><a href="#MessageProcessor-264"><span class="linenos">264</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">set_processed</span><span class="p">(</span><span class="n">db_count</span><span class="p">,</span> <span class="n">processed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="MessageProcessor-265"><a href="#MessageProcessor-265"><span class="linenos">265</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="MessageProcessor-266"><a href="#MessageProcessor-266"><span class="linenos">266</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="MessageProcessor-267"><a href="#MessageProcessor-267"><span class="linenos">267</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error sending message to: </span><span class="si">{</span><span class="n">recipient</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor-268"><a href="#MessageProcessor-268"><span class="linenos">268</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div> </span></pre></div>
@ -641,16 +544,16 @@
</div> </div>
<a class="headerlink" href="#MessageProcessor.__init__"></a> <a class="headerlink" href="#MessageProcessor.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageProcessor.__init__-44"><a href="#MessageProcessor.__init__-44"><span class="linenos">44</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MessageProcessor.__init__-43"><a href="#MessageProcessor.__init__-43"><span class="linenos">43</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="MessageProcessor.__init__-45"><a href="#MessageProcessor.__init__-45"><span class="linenos">45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span> </span><span id="MessageProcessor.__init__-44"><a href="#MessageProcessor.__init__-44"><span class="linenos">44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="MessageProcessor.__init__-46"><a href="#MessageProcessor.__init__-46"><span class="linenos">46</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">management_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">)</span> </span><span id="MessageProcessor.__init__-45"><a href="#MessageProcessor.__init__-45"><span class="linenos">45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">management_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">)</span>
</span><span id="MessageProcessor.__init__-47"><a href="#MessageProcessor.__init__-47"><span class="linenos">47</span></a> </span><span id="MessageProcessor.__init__-46"><a href="#MessageProcessor.__init__-46"><span class="linenos">46</span></a>
</span><span id="MessageProcessor.__init__-48"><a href="#MessageProcessor.__init__-48"><span class="linenos">48</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor.__init__-47"><a href="#MessageProcessor.__init__-47"><span class="linenos">47</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_PROCESS</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor.__init__-49"><a href="#MessageProcessor.__init__-49"><span class="linenos">49</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Process Agent (AGENTS_PROCESS) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="MessageProcessor.__init__-48"><a href="#MessageProcessor.__init__-48"><span class="linenos">48</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Process Agent (AGENTS_PROCESS) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor.__init__-50"><a href="#MessageProcessor.__init__-50"><span class="linenos">50</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor.__init__-49"><a href="#MessageProcessor.__init__-49"><span class="linenos">49</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_SOLVE</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor.__init__-51"><a href="#MessageProcessor.__init__-51"><span class="linenos">51</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Solve Agent (AGENTS_SOLVE) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="MessageProcessor.__init__-50"><a href="#MessageProcessor.__init__-50"><span class="linenos">50</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Solve Agent (AGENTS_SOLVE) found, this may be a problem!&quot;</span><span class="p">)</span>
</span><span id="MessageProcessor.__init__-52"><a href="#MessageProcessor.__init__-52"><span class="linenos">52</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="MessageProcessor.__init__-51"><a href="#MessageProcessor.__init__-51"><span class="linenos">51</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AGENTS_GATEKEEPER</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="MessageProcessor.__init__-53"><a href="#MessageProcessor.__init__-53"><span class="linenos">53</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Gatekeeper Agent (AGENTS_GATEKEEPER) found, this may be a problem!&quot;</span><span class="p">)</span> </span><span id="MessageProcessor.__init__-52"><a href="#MessageProcessor.__init__-52"><span class="linenos">52</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not Gatekeeper Agent (AGENTS_GATEKEEPER) found, this may be a problem!&quot;</span><span class="p">)</span>
</span></pre></div> </span></pre></div>
@ -692,18 +595,6 @@
</div>
<div id="MessageProcessor.REQUIRE_FULL_SOLVE" class="classattr">
<div class="attr variable">
<span class="name">REQUIRE_FULL_SOLVE</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#MessageProcessor.REQUIRE_FULL_SOLVE"></a>
</div> </div>
<div id="MessageProcessor.MANAGEMENT_URL" class="classattr"> <div id="MessageProcessor.MANAGEMENT_URL" class="classattr">
<div class="attr variable"> <div class="attr variable">
@ -786,25 +677,25 @@
</div> </div>
<a class="headerlink" href="#MessageProcessor.new_message"></a> <a class="headerlink" href="#MessageProcessor.new_message"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageProcessor.new_message-59"><a href="#MessageProcessor.new_message-59"><span class="linenos">59</span></a> <span class="k">def</span> <span class="nf">new_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MessageProcessor.new_message-58"><a href="#MessageProcessor.new_message-58"><span class="linenos">58</span></a> <span class="k">def</span> <span class="nf">new_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="MessageProcessor.new_message-60"><a href="#MessageProcessor.new_message-60"><span class="linenos">60</span></a> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">receiver</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> </span><span id="MessageProcessor.new_message-59"><a href="#MessageProcessor.new_message-59"><span class="linenos">59</span></a> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">receiver</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span>
</span><span id="MessageProcessor.new_message-61"><a href="#MessageProcessor.new_message-61"><span class="linenos">61</span></a> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span> </span><span id="MessageProcessor.new_message-60"><a href="#MessageProcessor.new_message-60"><span class="linenos">60</span></a> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span>
</span><span id="MessageProcessor.new_message-62"><a href="#MessageProcessor.new_message-62"><span class="linenos">62</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span> </span><span id="MessageProcessor.new_message-61"><a href="#MessageProcessor.new_message-61"><span class="linenos">61</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="MessageProcessor.new_message-63"><a href="#MessageProcessor.new_message-63"><span class="linenos">63</span></a> </span><span id="MessageProcessor.new_message-62"><a href="#MessageProcessor.new_message-62"><span class="linenos">62</span></a>
</span><span id="MessageProcessor.new_message-64"><a href="#MessageProcessor.new_message-64"><span class="linenos">64</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="MessageProcessor.new_message-63"><a href="#MessageProcessor.new_message-63"><span class="linenos">63</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="MessageProcessor.new_message-65"><a href="#MessageProcessor.new_message-65"><span class="linenos">65</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="MessageProcessor.new_message-64"><a href="#MessageProcessor.new_message-64"><span class="linenos">64</span></a> <span class="n">db_count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">add_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</span><span id="MessageProcessor.new_message-66"><a href="#MessageProcessor.new_message-66"><span class="linenos">66</span></a> <span class="n">background_tasks</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process_message</span><span class="p">,</span> <span class="n">db_count</span><span class="p">)</span> </span><span id="MessageProcessor.new_message-65"><a href="#MessageProcessor.new_message-65"><span class="linenos">65</span></a> <span class="n">background_tasks</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process_message</span><span class="p">,</span> <span class="n">db_count</span><span class="p">)</span>
</span><span id="MessageProcessor.new_message-67"><a href="#MessageProcessor.new_message-67"><span class="linenos">67</span></a> </span><span id="MessageProcessor.new_message-66"><a href="#MessageProcessor.new_message-66"><span class="linenos">66</span></a>
</span><span id="MessageProcessor.new_message-68"><a href="#MessageProcessor.new_message-68"><span class="linenos">68</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span> </span><span id="MessageProcessor.new_message-67"><a href="#MessageProcessor.new_message-67"><span class="linenos">67</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span>
</span><span id="MessageProcessor.new_message-69"><a href="#MessageProcessor.new_message-69"><span class="linenos">69</span></a> <span class="n">count</span><span class="o">=</span><span class="n">db_count</span><span class="p">,</span> </span><span id="MessageProcessor.new_message-68"><a href="#MessageProcessor.new_message-68"><span class="linenos">68</span></a> <span class="n">count</span><span class="o">=</span><span class="n">db_count</span><span class="p">,</span>
</span><span id="MessageProcessor.new_message-70"><a href="#MessageProcessor.new_message-70"><span class="linenos">70</span></a> <span class="n">msg</span><span class="o">=</span><span class="s2">&quot;Added message to queue&quot;</span> </span><span id="MessageProcessor.new_message-69"><a href="#MessageProcessor.new_message-69"><span class="linenos">69</span></a> <span class="n">msg</span><span class="o">=</span><span class="s2">&quot;Added message to queue&quot;</span>
</span><span id="MessageProcessor.new_message-71"><a href="#MessageProcessor.new_message-71"><span class="linenos">71</span></a> <span class="p">)</span> </span><span id="MessageProcessor.new_message-70"><a href="#MessageProcessor.new_message-70"><span class="linenos">70</span></a> <span class="p">)</span>
</span><span id="MessageProcessor.new_message-72"><a href="#MessageProcessor.new_message-72"><span class="linenos">72</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> </span><span id="MessageProcessor.new_message-71"><a href="#MessageProcessor.new_message-71"><span class="linenos">71</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="MessageProcessor.new_message-73"><a href="#MessageProcessor.new_message-73"><span class="linenos">73</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span> </span><span id="MessageProcessor.new_message-72"><a href="#MessageProcessor.new_message-72"><span class="linenos">72</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span>
</span><span id="MessageProcessor.new_message-74"><a href="#MessageProcessor.new_message-74"><span class="linenos">74</span></a> <span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> </span><span id="MessageProcessor.new_message-73"><a href="#MessageProcessor.new_message-73"><span class="linenos">73</span></a> <span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="MessageProcessor.new_message-75"><a href="#MessageProcessor.new_message-75"><span class="linenos">75</span></a> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> </span><span id="MessageProcessor.new_message-74"><a href="#MessageProcessor.new_message-74"><span class="linenos">74</span></a> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="MessageProcessor.new_message-76"><a href="#MessageProcessor.new_message-76"><span class="linenos">76</span></a> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> </span><span id="MessageProcessor.new_message-75"><a href="#MessageProcessor.new_message-75"><span class="linenos">75</span></a> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="MessageProcessor.new_message-77"><a href="#MessageProcessor.new_message-77"><span class="linenos">77</span></a> <span class="p">)</span> </span><span id="MessageProcessor.new_message-76"><a href="#MessageProcessor.new_message-76"><span class="linenos">76</span></a> <span class="p">)</span>
</span></pre></div> </span></pre></div>

View File

@ -261,7 +261,7 @@ It provides validation, allow JSON serialization and works well with <a href="ht
<span class="w"> </span><span class="nt">&quot;question&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Get the name of the person.&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;question&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Get the name of the person.&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;solutions_before&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span> <span class="w"> </span><span class="nt">&quot;solutions_before&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span>
<span class="w"> </span><span class="p">},</span> <span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nt">&quot;solution&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span> <span class="w"> </span><span class="nt">&quot;solution&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;data&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="w"> </span><span class="nt">&quot;data&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;text&quot;</span><span class="p">,</span>
@ -302,13 +302,13 @@ It provides validation, allow JSON serialization and works well with <a href="ht
<div class="pdoc-code codehilite"> <div class="pdoc-code codehilite">
<pre><span></span><code><span class="w"> </span><span class="p">{</span> <pre><span></span><code><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="err">...</span> <span class="w"> </span><span class="err">...</span>
<span class="w"> </span><span class="nt">&quot;solution&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span> <span class="w"> </span><span class="nt">&quot;solution&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;solution&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Otto&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;solution&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Otto&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;explanation&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Written in line 6 after &#39;Name:&#39;&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;explanation&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Written in line 6 after &#39;Name:&#39;&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;used_data&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span> <span class="w"> </span><span class="nt">&quot;used_data&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
<span class="w"> </span><span class="nt">&quot;accepted&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;accepted&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;review&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span> <span class="w"> </span><span class="nt">&quot;review&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
<span class="w"> </span><span class="p">}],</span> <span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="err">...</span> <span class="w"> </span><span class="err">...</span>
<span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="p">}</span>
</code></pre> </code></pre>
@ -361,7 +361,7 @@ It provides validation, allow JSON serialization and works well with <a href="ht
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="sd"> &quot;question&quot;: &quot;Get the name of the person.&quot;,</span> </span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="sd"> &quot;question&quot;: &quot;Get the name of the person.&quot;,</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="sd"> &quot;solutions_before&quot;: []</span> </span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="sd"> &quot;solutions_before&quot;: []</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="sd"> },</span> </span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="sd"> },</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="sd"> &quot;solution&quot;: [],</span> </span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="sd"> &quot;solution&quot;: null,</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="sd"> &quot;data&quot;: [</span> </span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="sd"> &quot;data&quot;: [</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="sd"> {</span> </span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="sd"> {</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="sd"> &quot;type&quot;: &quot;text&quot;,</span> </span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="sd"> &quot;type&quot;: &quot;text&quot;,</span>
@ -398,13 +398,13 @@ It provides validation, allow JSON serialization and works well with <a href="ht
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> ```json</span> </span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> ```json</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="sd"> {</span> </span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="sd"> {</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd"> ...</span> </span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd"> ...</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="sd"> &quot;solution&quot;: [{</span> </span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="sd"> &quot;solution&quot;: {</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> &quot;solution&quot;: &quot;Otto&quot;,</span> </span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> &quot;solution&quot;: &quot;Otto&quot;,</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> &quot;explanation&quot;: &quot;Written in line 6 after &#39;Name:&#39;&quot;,</span> </span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> &quot;explanation&quot;: &quot;Written in line 6 after &#39;Name:&#39;&quot;,</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="sd"> &quot;used_data&quot;: [],</span> </span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="sd"> &quot;used_data&quot;: [],</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="sd"> &quot;accepted&quot;: false,</span> </span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="sd"> &quot;accepted&quot;: false,</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="sd"> &quot;review&quot;: null</span> </span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="sd"> &quot;review&quot;: null</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="sd"> }],</span> </span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="sd"> },</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> ...</span> </span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> ...</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> }</span> </span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> }</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> ```</span> </span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> ```</span>
@ -419,11 +419,11 @@ It provides validation, allow JSON serialization and works well with <a href="ht
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="kn">from</span> <span class="nn">typing_extensions</span> <span class="kn">import</span> <span class="n">Annotated</span> </span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="kn">from</span> <span class="nn">typing_extensions</span> <span class="kn">import</span> <span class="n">Annotated</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> </span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="p">(</span> </span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">BaseModel</span><span class="p">,</span> </span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">BaseModel</span><span class="p">,</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">ValidationError</span><span class="p">,</span> <span class="n">ValidationInfo</span><span class="p">,</span> </span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">ValidationError</span><span class="p">,</span> <span class="n">ValidationInfo</span><span class="p">,</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">ValidatorFunctionWrapHandler</span><span class="p">,</span> </span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">ValidatorFunctionWrapHandler</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">WrapValidator</span><span class="p">,</span> <span class="n">AfterValidator</span><span class="p">,</span> <span class="n">BeforeValidator</span> </span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="p">)</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="p">)</span> </span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="kn">from</span> <span class="nn">pydantic.functional_validators</span> <span class="kn">import</span> <span class="n">WrapValidator</span><span class="p">,</span> <span class="n">AfterValidator</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> </span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="kn">from</span> <span class="nn">ums.utils.const</span> <span class="kn">import</span> <span class="n">SHARE_PATH</span> </span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="kn">from</span> <span class="nn">ums.utils.const</span> <span class="kn">import</span> <span class="n">SHARE_PATH</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="kn">from</span> <span class="nn">ums.utils.schema</span> <span class="kn">import</span> <span class="n">ExtractionSchema</span> </span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="kn">from</span> <span class="nn">ums.utils.schema</span> <span class="kn">import</span> <span class="n">ExtractionSchema</span>
@ -589,12 +589,12 @@ It provides validation, allow JSON serialization and works well with <a href="ht
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="sd"> The *main* solving step.</span> </span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="sd"> The *main* solving step.</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> </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="sd"> `AgentMessage.solution` shall contain an `RiddleSolution` afterwards.</span> </span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd"> `AgentMessage.solution` shall be an `RiddleSolution` afterwards.</span>
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</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 class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> </span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">validate</span><span class="p">:</span> <span class="n">RiddleSubStatus</span> <span class="o">=</span> <span class="n">RiddleSubStatus</span><span class="p">()</span> </span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">validate</span><span class="p">:</span> <span class="n">RiddleSubStatus</span> <span class="o">=</span> <span class="n">RiddleSubStatus</span><span class="p">()</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd"> The validation step, i.e., does the gatekeeper accept the solution(s) in `AgentMessage.solution`.</span> </span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd"> The validation step, i.e., does the gatekeeper accept the solution in `AgentMessage.solution`.</span>
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> </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="n">trial</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">trial</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
@ -605,124 +605,119 @@ It provides validation, allow JSON serialization and works well with <a href="ht
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> </span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="n">solved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="n">solved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a><span class="sd"> True, after the gatekeeper accepts the solution(s) at `AgentMessage.solution`</span> </span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a><span class="sd"> True, after the gatekeeper accepts the solution at `AgentMessage.solution`</span>
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a><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"> &quot;&quot;&quot;</span>
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> </span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a><span class="k">def</span> <span class="nf">_transform_to_list</span><span class="p">(</span><span class="n">value</span> <span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Any</span><span class="p">]:</span> </span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a><span class="k">class</span> <span class="nc">AgentMessage</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</span>
</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="c1"># type check of items is done next by pydantic</span> </span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">return</span> <span class="n">value</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> </span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a><span class="sd"> The basic message, which is sent be the agent and the management.</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> </span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a><span class="sd"> The objects will be JSON en- and decoded.</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a><span class="k">class</span> <span class="nc">AgentMessage</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</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 class="w"> </span><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="sd"> The basic message, which is sent be the agent and the management.</span> </span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a><span class="sd"> The objects will be JSON en- and decoded.</span> </span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</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-298"><a href="#L-298"><span class="linenos">298</span></a><span class="sd"> The riddle id, e.g., ``ex1``</span>
</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> </span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a><span class="sd"> This is a unique string and identifies the riddle.</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span> </span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a><span class="sd"> The riddle id, e.g., ``ex1``</span> </span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">sub_ids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a><span class="sd"> This is a unique string and identifies the riddle.</span> </span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a><span class="sd"> There might be cases, when an agent decided to split in riddle in multiple *smaller* steps.</span>
</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> </span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a><span class="sd"> Each *sub* riddle will then get its own id (i.e., ``ex1-sub1``) while the sub id is added here as reference.</span>
</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">sub_ids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> </span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>
</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a><span class="sd"> There might be cases, when an agent decided to split in riddle in multiple *smaller* steps.</span> </span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span>
</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a><span class="sd"> Each *sub* riddle will then get its own id (i.e., ``ex1-sub1``) while the sub id is added here as reference.</span> </span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a><span class="sd"> The riddle to solve.</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> </span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span> </span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>
</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">solution</span><span class="p">:</span> <span class="n">RiddleSolution</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a><span class="sd"> The riddle to solve.</span> </span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a><span class="sd"> The solution of the riddle (or empty if no solution available)</span>
</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> </span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">solution</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">RiddleSolution</span><span class="p">],</span> <span class="n">BeforeValidator</span><span class="p">(</span><span class="n">_transform_to_list</span><span class="p">)]</span> <span class="o">=</span> <span class="p">[]</span> </span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <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">=</span> <span class="p">[]</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a><span class="sd"> The solutions of the riddle (or empty list if no solutions available)</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"> (When assigning a single object of `RiddleSolution` will be convert to list with this single object.)</span> </span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a><span class="sd"> The data to get the solution from.</span>
</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> </span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>
</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <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">=</span> <span class="p">[]</span> </span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">status</span><span class="p">:</span> <span class="n">RiddleStatus</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span>
</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a><span class="sd"> The data to get the solution from.</span> </span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a><span class="sd"> The status of the riddle.</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> </span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>
</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">status</span><span class="p">:</span> <span class="n">RiddleStatus</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span> </span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">contacts</span> <span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a><span class="sd"> The status of the riddle.</span> </span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a><span class="sd"> A counter representing the number of contacts the management had with this message.</span>
</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a><span class="sd"> Each time the management processes the message, this counter is incremented by 1.</span>
</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> </span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a><span class="sd"> Using this counter the management is able to detect cycles and stop them.</span>
</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">contacts</span> <span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a><span class="sd"> A counter representing the number of contacts the management had with this message.</span> </span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a><span class="k">class</span> <span class="nc">AgentResponse</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</span>
</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a><span class="sd"> Each time the management processes the message, this counter is incremented by 1.</span> </span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="sd"> Using this counter the management is able to detect cycles and stop them.</span> </span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="sd"> Returned by the management when receiving an `AgentMessage`.</span>
</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> </span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>
</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="k">class</span> <span class="nc">AgentResponse</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</span> </span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span>
</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd"> Returned by the management when receiving an `AgentMessage`.</span> </span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd"> The count of the message (overall numeric id).</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> </span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>
</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span> </span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="sd"> The count of the message (overall numeric id).</span> </span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="sd"> An additional message.</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> </span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>
</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span> </span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">error</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a><span class="sd"> An additional message.</span> </span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a><span class="sd"> If an error occurred.</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> </span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>
</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">error</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">error_msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a><span class="sd"> If an error occurred.</span> </span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a><span class="sd"> Error message (if `error` )</span>
</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> </span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>
</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">error_msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span> </span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a><span class="k">class</span> <span class="nc">MessageDbRow</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a><span class="sd"> Error message (if `error` )</span> </span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a><span class="sd"> Object representing a database row.</span>
</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> </span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>
</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a><span class="k">class</span> <span class="nc">MessageDbRow</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span> </span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a><span class="sd"> Object representing a database row.</span> </span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a><span class="sd"> The count (primary key) of the item.</span>
</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> </span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span> </span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">sender</span> <span class="p">:</span> <span class="nb">str</span>
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a><span class="sd"> The count (primary key) of the item.</span> </span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a><span class="sd"> The sender of the message.</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> </span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>
</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">sender</span> <span class="p">:</span> <span class="nb">str</span> </span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">recipient</span> <span class="p">:</span> <span class="nb">str</span>
</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="sd"> The sender of the message.</span> </span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="sd"> The recipient of the message</span>
</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> </span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>
</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">recipient</span> <span class="p">:</span> <span class="nb">str</span> </span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">time</span> <span class="p">:</span> <span class="nb">int</span>
</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a><span class="sd"> The recipient of the message</span> </span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a><span class="sd"> The time (unix timestamp) the message was received/ sent.</span>
</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> </span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>
</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">time</span> <span class="p">:</span> <span class="nb">int</span> </span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">message</span> <span class="p">:</span> <span class="n">AgentMessage</span>
</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a><span class="sd"> The time (unix timestamp) the message was received/ sent.</span> </span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a><span class="sd"> The message received/ sent.</span>
</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> </span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>
</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">message</span> <span class="p">:</span> <span class="n">AgentMessage</span> </span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">processed</span> <span class="p">:</span> <span class="nb">bool</span>
</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a><span class="sd"> The message received/ sent.</span> </span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a><span class="sd"> Did the management process the message, i.e., did the tasks necessary for this message (mostly only relevant for received messages).</span>
</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> </span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">processed</span> <span class="p">:</span> <span class="nb">bool</span> </span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">solution</span> <span class="p">:</span> <span class="nb">bool</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a><span class="sd"> Did the management process the message, i.e., did the tasks necessary for this message (mostly only relevant for received messages).</span> </span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a><span class="sd"> Does this message contain a valid solution?</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a><span class="sd"> True if contains valid solution, False if solution not valid, Null/None if not applicable</span>
</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> </span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">solution</span> <span class="p">:</span> <span class="nb">bool</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a><span class="sd"> Does this message contain a valid solution?</span>
</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a><span class="sd"> True if contains valid solution, False if solution not valid, Null/None if not applicable</span>
</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -954,7 +949,7 @@ is set to <code>'allow'</code>.</li>
</div> </div>
<div id="RiddleData.file_plain" class="classattr"> <div id="RiddleData.file_plain" class="classattr">
<div class="attr variable"> <div class="attr variable">
<span class="name">file_plain</span><span class="annotation">: Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x104a52700&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x104b034c0&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 0x102682480&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x1027331a0&gt;, json_schema_input_type=PydanticUndefined)]</span>
</div> </div>
@ -970,7 +965,7 @@ The file must exist.</p>
</div> </div>
<div id="RiddleData.file_extracted" class="classattr"> <div id="RiddleData.file_extracted" class="classattr">
<div class="attr variable"> <div class="attr variable">
<span class="name">file_extracted</span><span class="annotation">: Optional[Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x104a52700&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x104b034c0&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 0x102682480&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x1027331a0&gt;, json_schema_input_type=PydanticUndefined)]]</span>
</div> </div>
@ -1410,12 +1405,12 @@ The file must exist.</p>
</span><span id="RiddleStatus-269"><a href="#RiddleStatus-269"><span class="linenos">269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="RiddleStatus-269"><a href="#RiddleStatus-269"><span class="linenos">269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="RiddleStatus-270"><a href="#RiddleStatus-270"><span class="linenos">270</span></a><span class="sd"> The *main* solving step.</span> </span><span id="RiddleStatus-270"><a href="#RiddleStatus-270"><span class="linenos">270</span></a><span class="sd"> The *main* solving step.</span>
</span><span id="RiddleStatus-271"><a href="#RiddleStatus-271"><span class="linenos">271</span></a> </span><span id="RiddleStatus-271"><a href="#RiddleStatus-271"><span class="linenos">271</span></a>
</span><span id="RiddleStatus-272"><a href="#RiddleStatus-272"><span class="linenos">272</span></a><span class="sd"> `AgentMessage.solution` shall contain an `RiddleSolution` afterwards.</span> </span><span id="RiddleStatus-272"><a href="#RiddleStatus-272"><span class="linenos">272</span></a><span class="sd"> `AgentMessage.solution` shall be an `RiddleSolution` afterwards.</span>
</span><span id="RiddleStatus-273"><a href="#RiddleStatus-273"><span class="linenos">273</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="RiddleStatus-273"><a href="#RiddleStatus-273"><span class="linenos">273</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="RiddleStatus-274"><a href="#RiddleStatus-274"><span class="linenos">274</span></a> </span><span id="RiddleStatus-274"><a href="#RiddleStatus-274"><span class="linenos">274</span></a>
</span><span id="RiddleStatus-275"><a href="#RiddleStatus-275"><span class="linenos">275</span></a> <span class="n">validate</span><span class="p">:</span> <span class="n">RiddleSubStatus</span> <span class="o">=</span> <span class="n">RiddleSubStatus</span><span class="p">()</span> </span><span id="RiddleStatus-275"><a href="#RiddleStatus-275"><span class="linenos">275</span></a> <span class="n">validate</span><span class="p">:</span> <span class="n">RiddleSubStatus</span> <span class="o">=</span> <span class="n">RiddleSubStatus</span><span class="p">()</span>
</span><span id="RiddleStatus-276"><a href="#RiddleStatus-276"><span class="linenos">276</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="RiddleStatus-276"><a href="#RiddleStatus-276"><span class="linenos">276</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="RiddleStatus-277"><a href="#RiddleStatus-277"><span class="linenos">277</span></a><span class="sd"> The validation step, i.e., does the gatekeeper accept the solution(s) in `AgentMessage.solution`.</span> </span><span id="RiddleStatus-277"><a href="#RiddleStatus-277"><span class="linenos">277</span></a><span class="sd"> The validation step, i.e., does the gatekeeper accept the solution in `AgentMessage.solution`.</span>
</span><span id="RiddleStatus-278"><a href="#RiddleStatus-278"><span class="linenos">278</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="RiddleStatus-278"><a href="#RiddleStatus-278"><span class="linenos">278</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="RiddleStatus-279"><a href="#RiddleStatus-279"><span class="linenos">279</span></a> </span><span id="RiddleStatus-279"><a href="#RiddleStatus-279"><span class="linenos">279</span></a>
</span><span id="RiddleStatus-280"><a href="#RiddleStatus-280"><span class="linenos">280</span></a> <span class="n">trial</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="RiddleStatus-280"><a href="#RiddleStatus-280"><span class="linenos">280</span></a> <span class="n">trial</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
@ -1426,7 +1421,7 @@ The file must exist.</p>
</span><span id="RiddleStatus-285"><a href="#RiddleStatus-285"><span class="linenos">285</span></a> </span><span id="RiddleStatus-285"><a href="#RiddleStatus-285"><span class="linenos">285</span></a>
</span><span id="RiddleStatus-286"><a href="#RiddleStatus-286"><span class="linenos">286</span></a> <span class="n">solved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="RiddleStatus-286"><a href="#RiddleStatus-286"><span class="linenos">286</span></a> <span class="n">solved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="RiddleStatus-287"><a href="#RiddleStatus-287"><span class="linenos">287</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="RiddleStatus-287"><a href="#RiddleStatus-287"><span class="linenos">287</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="RiddleStatus-288"><a href="#RiddleStatus-288"><span class="linenos">288</span></a><span class="sd"> True, after the gatekeeper accepts the solution(s) at `AgentMessage.solution`</span> </span><span id="RiddleStatus-288"><a href="#RiddleStatus-288"><span class="linenos">288</span></a><span class="sd"> True, after the gatekeeper accepts the solution at `AgentMessage.solution`</span>
</span><span id="RiddleStatus-289"><a href="#RiddleStatus-289"><span class="linenos">289</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="RiddleStatus-289"><a href="#RiddleStatus-289"><span class="linenos">289</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1460,7 +1455,7 @@ The file must exist.</p>
<div class="docstring"><p>The <em>main</em> solving step.</p> <div class="docstring"><p>The <em>main</em> solving step.</p>
<p><code><a href="#AgentMessage.solution">AgentMessage.solution</a></code> shall contain an <code><a href="#RiddleSolution">RiddleSolution</a></code> afterwards.</p> <p><code><a href="#AgentMessage.solution">AgentMessage.solution</a></code> shall be an <code><a href="#RiddleSolution">RiddleSolution</a></code> afterwards.</p>
</div> </div>
@ -1488,7 +1483,7 @@ The file must exist.</p>
</span></pre></div> </span></pre></div>
<div class="docstring"><p>The validation step, i.e., does the gatekeeper accept the solution(s) in <code><a href="#AgentMessage.solution">AgentMessage.solution</a></code>.</p> <div class="docstring"><p>The validation step, i.e., does the gatekeeper accept the solution in <code><a href="#AgentMessage.solution">AgentMessage.solution</a></code>.</p>
</div> </div>
@ -1515,7 +1510,7 @@ Each time the gatekeeper does not accept a solution of this riddle, the value is
</div> </div>
<a class="headerlink" href="#RiddleStatus.solved"></a> <a class="headerlink" href="#RiddleStatus.solved"></a>
<div class="docstring"><p>True, after the gatekeeper accepts the solution(s) at <code><a href="#AgentMessage.solution">AgentMessage.solution</a></code></p> <div class="docstring"><p>True, after the gatekeeper accepts the solution at <code><a href="#AgentMessage.solution">AgentMessage.solution</a></code></p>
</div> </div>
@ -1565,51 +1560,50 @@ Each time the gatekeeper does not accept a solution of this riddle, the value is
</div> </div>
<a class="headerlink" href="#AgentMessage"></a> <a class="headerlink" href="#AgentMessage"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AgentMessage-295"><a href="#AgentMessage-295"><span class="linenos">295</span></a><span class="k">class</span> <span class="nc">AgentMessage</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="AgentMessage-291"><a href="#AgentMessage-291"><span class="linenos">291</span></a><span class="k">class</span> <span class="nc">AgentMessage</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</span>
</span><span id="AgentMessage-296"><a href="#AgentMessage-296"><span class="linenos">296</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentMessage-292"><a href="#AgentMessage-292"><span class="linenos">292</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-297"><a href="#AgentMessage-297"><span class="linenos">297</span></a><span class="sd"> The basic message, which is sent be the agent and the management.</span> </span><span id="AgentMessage-293"><a href="#AgentMessage-293"><span class="linenos">293</span></a><span class="sd"> The basic message, which is sent be the agent and the management.</span>
</span><span id="AgentMessage-298"><a href="#AgentMessage-298"><span class="linenos">298</span></a><span class="sd"> The objects will be JSON en- and decoded.</span> </span><span id="AgentMessage-294"><a href="#AgentMessage-294"><span class="linenos">294</span></a><span class="sd"> The objects will be JSON en- and decoded.</span>
</span><span id="AgentMessage-299"><a href="#AgentMessage-299"><span class="linenos">299</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentMessage-295"><a href="#AgentMessage-295"><span class="linenos">295</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-300"><a href="#AgentMessage-300"><span class="linenos">300</span></a> </span><span id="AgentMessage-296"><a href="#AgentMessage-296"><span class="linenos">296</span></a>
</span><span id="AgentMessage-301"><a href="#AgentMessage-301"><span class="linenos">301</span></a> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span> </span><span id="AgentMessage-297"><a href="#AgentMessage-297"><span class="linenos">297</span></a> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span>
</span><span id="AgentMessage-302"><a href="#AgentMessage-302"><span class="linenos">302</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentMessage-298"><a href="#AgentMessage-298"><span class="linenos">298</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-303"><a href="#AgentMessage-303"><span class="linenos">303</span></a><span class="sd"> The riddle id, e.g., ``ex1``</span> </span><span id="AgentMessage-299"><a href="#AgentMessage-299"><span class="linenos">299</span></a><span class="sd"> The riddle id, e.g., ``ex1``</span>
</span><span id="AgentMessage-304"><a href="#AgentMessage-304"><span class="linenos">304</span></a><span class="sd"> This is a unique string and identifies the riddle.</span> </span><span id="AgentMessage-300"><a href="#AgentMessage-300"><span class="linenos">300</span></a><span class="sd"> This is a unique string and identifies the riddle.</span>
</span><span id="AgentMessage-305"><a href="#AgentMessage-305"><span class="linenos">305</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentMessage-301"><a href="#AgentMessage-301"><span class="linenos">301</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-306"><a href="#AgentMessage-306"><span class="linenos">306</span></a> </span><span id="AgentMessage-302"><a href="#AgentMessage-302"><span class="linenos">302</span></a>
</span><span id="AgentMessage-307"><a href="#AgentMessage-307"><span class="linenos">307</span></a> <span class="n">sub_ids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> </span><span id="AgentMessage-303"><a href="#AgentMessage-303"><span class="linenos">303</span></a> <span class="n">sub_ids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="AgentMessage-308"><a href="#AgentMessage-308"><span class="linenos">308</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentMessage-304"><a href="#AgentMessage-304"><span class="linenos">304</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-309"><a href="#AgentMessage-309"><span class="linenos">309</span></a><span class="sd"> There might be cases, when an agent decided to split in riddle in multiple *smaller* steps.</span> </span><span id="AgentMessage-305"><a href="#AgentMessage-305"><span class="linenos">305</span></a><span class="sd"> There might be cases, when an agent decided to split in riddle in multiple *smaller* steps.</span>
</span><span id="AgentMessage-310"><a href="#AgentMessage-310"><span class="linenos">310</span></a><span class="sd"> Each *sub* riddle will then get its own id (i.e., ``ex1-sub1``) while the sub id is added here as reference.</span> </span><span id="AgentMessage-306"><a href="#AgentMessage-306"><span class="linenos">306</span></a><span class="sd"> Each *sub* riddle will then get its own id (i.e., ``ex1-sub1``) while the sub id is added here as reference.</span>
</span><span id="AgentMessage-311"><a href="#AgentMessage-311"><span class="linenos">311</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentMessage-307"><a href="#AgentMessage-307"><span class="linenos">307</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-312"><a href="#AgentMessage-312"><span class="linenos">312</span></a> </span><span id="AgentMessage-308"><a href="#AgentMessage-308"><span class="linenos">308</span></a>
</span><span id="AgentMessage-313"><a href="#AgentMessage-313"><span class="linenos">313</span></a> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span> </span><span id="AgentMessage-309"><a href="#AgentMessage-309"><span class="linenos">309</span></a> <span class="n">riddle</span><span class="p">:</span> <span class="n">Riddle</span>
</span><span id="AgentMessage-314"><a href="#AgentMessage-314"><span class="linenos">314</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentMessage-310"><a href="#AgentMessage-310"><span class="linenos">310</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-315"><a href="#AgentMessage-315"><span class="linenos">315</span></a><span class="sd"> The riddle to solve.</span> </span><span id="AgentMessage-311"><a href="#AgentMessage-311"><span class="linenos">311</span></a><span class="sd"> The riddle to solve.</span>
</span><span id="AgentMessage-316"><a href="#AgentMessage-316"><span class="linenos">316</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentMessage-312"><a href="#AgentMessage-312"><span class="linenos">312</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-317"><a href="#AgentMessage-317"><span class="linenos">317</span></a> </span><span id="AgentMessage-313"><a href="#AgentMessage-313"><span class="linenos">313</span></a>
</span><span id="AgentMessage-318"><a href="#AgentMessage-318"><span class="linenos">318</span></a> <span class="n">solution</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">RiddleSolution</span><span class="p">],</span> <span class="n">BeforeValidator</span><span class="p">(</span><span class="n">_transform_to_list</span><span class="p">)]</span> <span class="o">=</span> <span class="p">[]</span> </span><span id="AgentMessage-314"><a href="#AgentMessage-314"><span class="linenos">314</span></a> <span class="n">solution</span><span class="p">:</span> <span class="n">RiddleSolution</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="AgentMessage-319"><a href="#AgentMessage-319"><span class="linenos">319</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentMessage-315"><a href="#AgentMessage-315"><span class="linenos">315</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-320"><a href="#AgentMessage-320"><span class="linenos">320</span></a><span class="sd"> The solutions of the riddle (or empty list if no solutions available)</span> </span><span id="AgentMessage-316"><a href="#AgentMessage-316"><span class="linenos">316</span></a><span class="sd"> The solution of the riddle (or empty if no solution available)</span>
</span><span id="AgentMessage-321"><a href="#AgentMessage-321"><span class="linenos">321</span></a><span class="sd"> (When assigning a single object of `RiddleSolution` will be convert to list with this single object.)</span> </span><span id="AgentMessage-317"><a href="#AgentMessage-317"><span class="linenos">317</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-318"><a href="#AgentMessage-318"><span class="linenos">318</span></a>
</span><span id="AgentMessage-319"><a href="#AgentMessage-319"><span class="linenos">319</span></a> <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">=</span> <span class="p">[]</span>
</span><span id="AgentMessage-320"><a href="#AgentMessage-320"><span class="linenos">320</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-321"><a href="#AgentMessage-321"><span class="linenos">321</span></a><span class="sd"> The data to get the solution from.</span>
</span><span id="AgentMessage-322"><a href="#AgentMessage-322"><span class="linenos">322</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentMessage-322"><a href="#AgentMessage-322"><span class="linenos">322</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-323"><a href="#AgentMessage-323"><span class="linenos">323</span></a> </span><span id="AgentMessage-323"><a href="#AgentMessage-323"><span class="linenos">323</span></a>
</span><span id="AgentMessage-324"><a href="#AgentMessage-324"><span class="linenos">324</span></a> <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">=</span> <span class="p">[]</span> </span><span id="AgentMessage-324"><a href="#AgentMessage-324"><span class="linenos">324</span></a> <span class="n">status</span><span class="p">:</span> <span class="n">RiddleStatus</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span>
</span><span id="AgentMessage-325"><a href="#AgentMessage-325"><span class="linenos">325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentMessage-325"><a href="#AgentMessage-325"><span class="linenos">325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-326"><a href="#AgentMessage-326"><span class="linenos">326</span></a><span class="sd"> The data to get the solution from.</span> </span><span id="AgentMessage-326"><a href="#AgentMessage-326"><span class="linenos">326</span></a><span class="sd"> The status of the riddle.</span>
</span><span id="AgentMessage-327"><a href="#AgentMessage-327"><span class="linenos">327</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentMessage-327"><a href="#AgentMessage-327"><span class="linenos">327</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-328"><a href="#AgentMessage-328"><span class="linenos">328</span></a> </span><span id="AgentMessage-328"><a href="#AgentMessage-328"><span class="linenos">328</span></a>
</span><span id="AgentMessage-329"><a href="#AgentMessage-329"><span class="linenos">329</span></a> <span class="n">status</span><span class="p">:</span> <span class="n">RiddleStatus</span> <span class="o">=</span> <span class="n">RiddleStatus</span><span class="p">()</span> </span><span id="AgentMessage-329"><a href="#AgentMessage-329"><span class="linenos">329</span></a> <span class="n">contacts</span> <span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="AgentMessage-330"><a href="#AgentMessage-330"><span class="linenos">330</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentMessage-330"><a href="#AgentMessage-330"><span class="linenos">330</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-331"><a href="#AgentMessage-331"><span class="linenos">331</span></a><span class="sd"> The status of the riddle.</span> </span><span id="AgentMessage-331"><a href="#AgentMessage-331"><span class="linenos">331</span></a><span class="sd"> A counter representing the number of contacts the management had with this message.</span>
</span><span id="AgentMessage-332"><a href="#AgentMessage-332"><span class="linenos">332</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentMessage-332"><a href="#AgentMessage-332"><span class="linenos">332</span></a><span class="sd"> Each time the management processes the message, this counter is incremented by 1.</span>
</span><span id="AgentMessage-333"><a href="#AgentMessage-333"><span class="linenos">333</span></a> </span><span id="AgentMessage-333"><a href="#AgentMessage-333"><span class="linenos">333</span></a><span class="sd"> Using this counter the management is able to detect cycles and stop them.</span>
</span><span id="AgentMessage-334"><a href="#AgentMessage-334"><span class="linenos">334</span></a> <span class="n">contacts</span> <span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="AgentMessage-334"><a href="#AgentMessage-334"><span class="linenos">334</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentMessage-335"><a href="#AgentMessage-335"><span class="linenos">335</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentMessage-336"><a href="#AgentMessage-336"><span class="linenos">336</span></a><span class="sd"> A counter representing the number of contacts the management had with this message.</span>
</span><span id="AgentMessage-337"><a href="#AgentMessage-337"><span class="linenos">337</span></a><span class="sd"> Each time the management processes the message, this counter is incremented by 1.</span>
</span><span id="AgentMessage-338"><a href="#AgentMessage-338"><span class="linenos">338</span></a><span class="sd"> Using this counter the management is able to detect cycles and stop them.</span>
</span><span id="AgentMessage-339"><a href="#AgentMessage-339"><span class="linenos">339</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1661,14 +1655,13 @@ Each <em>sub</em> riddle will then get its own id (i.e., <code>ex1-sub1</code>)
</div> </div>
<div id="AgentMessage.solution" class="classattr"> <div id="AgentMessage.solution" class="classattr">
<div class="attr variable"> <div class="attr variable">
<span class="name">solution</span><span class="annotation">: Annotated[List[<a href="#RiddleSolution">RiddleSolution</a>], BeforeValidator(func=&lt;function _transform_to_list at 0x104b03600&gt;, json_schema_input_type=PydanticUndefined)]</span> <span class="name">solution</span><span class="annotation">: <a href="#RiddleSolution">RiddleSolution</a> | None</span>
</div> </div>
<a class="headerlink" href="#AgentMessage.solution"></a> <a class="headerlink" href="#AgentMessage.solution"></a>
<div class="docstring"><p>The solutions of the riddle (or empty list if no solutions available) <div class="docstring"><p>The solution of the riddle (or empty if no solution available)</p>
(When assigning a single object of <code><a href="#RiddleSolution">RiddleSolution</a></code> will be convert to list with this single object.)</p>
</div> </div>
@ -1760,30 +1753,30 @@ Using this counter the management is able to detect cycles and stop them.</p>
</div> </div>
<a class="headerlink" href="#AgentResponse"></a> <a class="headerlink" href="#AgentResponse"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AgentResponse-341"><a href="#AgentResponse-341"><span class="linenos">341</span></a><span class="k">class</span> <span class="nc">AgentResponse</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="AgentResponse-336"><a href="#AgentResponse-336"><span class="linenos">336</span></a><span class="k">class</span> <span class="nc">AgentResponse</span><span class="p">(</span><span class="n">RiddleInformation</span><span class="p">):</span>
</span><span id="AgentResponse-337"><a href="#AgentResponse-337"><span class="linenos">337</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentResponse-338"><a href="#AgentResponse-338"><span class="linenos">338</span></a><span class="sd"> Returned by the management when receiving an `AgentMessage`.</span>
</span><span id="AgentResponse-339"><a href="#AgentResponse-339"><span class="linenos">339</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentResponse-340"><a href="#AgentResponse-340"><span class="linenos">340</span></a>
</span><span id="AgentResponse-341"><a href="#AgentResponse-341"><span class="linenos">341</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span>
</span><span id="AgentResponse-342"><a href="#AgentResponse-342"><span class="linenos">342</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentResponse-342"><a href="#AgentResponse-342"><span class="linenos">342</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentResponse-343"><a href="#AgentResponse-343"><span class="linenos">343</span></a><span class="sd"> Returned by the management when receiving an `AgentMessage`.</span> </span><span id="AgentResponse-343"><a href="#AgentResponse-343"><span class="linenos">343</span></a><span class="sd"> The count of the message (overall numeric id).</span>
</span><span id="AgentResponse-344"><a href="#AgentResponse-344"><span class="linenos">344</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentResponse-344"><a href="#AgentResponse-344"><span class="linenos">344</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentResponse-345"><a href="#AgentResponse-345"><span class="linenos">345</span></a> </span><span id="AgentResponse-345"><a href="#AgentResponse-345"><span class="linenos">345</span></a>
</span><span id="AgentResponse-346"><a href="#AgentResponse-346"><span class="linenos">346</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span> </span><span id="AgentResponse-346"><a href="#AgentResponse-346"><span class="linenos">346</span></a> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="AgentResponse-347"><a href="#AgentResponse-347"><span class="linenos">347</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentResponse-347"><a href="#AgentResponse-347"><span class="linenos">347</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentResponse-348"><a href="#AgentResponse-348"><span class="linenos">348</span></a><span class="sd"> The count of the message (overall numeric id).</span> </span><span id="AgentResponse-348"><a href="#AgentResponse-348"><span class="linenos">348</span></a><span class="sd"> An additional message.</span>
</span><span id="AgentResponse-349"><a href="#AgentResponse-349"><span class="linenos">349</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentResponse-349"><a href="#AgentResponse-349"><span class="linenos">349</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentResponse-350"><a href="#AgentResponse-350"><span class="linenos">350</span></a> </span><span id="AgentResponse-350"><a href="#AgentResponse-350"><span class="linenos">350</span></a>
</span><span id="AgentResponse-351"><a href="#AgentResponse-351"><span class="linenos">351</span></a> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span> </span><span id="AgentResponse-351"><a href="#AgentResponse-351"><span class="linenos">351</span></a> <span class="n">error</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="AgentResponse-352"><a href="#AgentResponse-352"><span class="linenos">352</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentResponse-352"><a href="#AgentResponse-352"><span class="linenos">352</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentResponse-353"><a href="#AgentResponse-353"><span class="linenos">353</span></a><span class="sd"> An additional message.</span> </span><span id="AgentResponse-353"><a href="#AgentResponse-353"><span class="linenos">353</span></a><span class="sd"> If an error occurred.</span>
</span><span id="AgentResponse-354"><a href="#AgentResponse-354"><span class="linenos">354</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentResponse-354"><a href="#AgentResponse-354"><span class="linenos">354</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentResponse-355"><a href="#AgentResponse-355"><span class="linenos">355</span></a> </span><span id="AgentResponse-355"><a href="#AgentResponse-355"><span class="linenos">355</span></a>
</span><span id="AgentResponse-356"><a href="#AgentResponse-356"><span class="linenos">356</span></a> <span class="n">error</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span> </span><span id="AgentResponse-356"><a href="#AgentResponse-356"><span class="linenos">356</span></a> <span class="n">error_msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="AgentResponse-357"><a href="#AgentResponse-357"><span class="linenos">357</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="AgentResponse-357"><a href="#AgentResponse-357"><span class="linenos">357</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentResponse-358"><a href="#AgentResponse-358"><span class="linenos">358</span></a><span class="sd"> If an error occurred.</span> </span><span id="AgentResponse-358"><a href="#AgentResponse-358"><span class="linenos">358</span></a><span class="sd"> Error message (if `error` )</span>
</span><span id="AgentResponse-359"><a href="#AgentResponse-359"><span class="linenos">359</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="AgentResponse-359"><a href="#AgentResponse-359"><span class="linenos">359</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AgentResponse-360"><a href="#AgentResponse-360"><span class="linenos">360</span></a>
</span><span id="AgentResponse-361"><a href="#AgentResponse-361"><span class="linenos">361</span></a> <span class="n">error_msg</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="AgentResponse-362"><a href="#AgentResponse-362"><span class="linenos">362</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AgentResponse-363"><a href="#AgentResponse-363"><span class="linenos">363</span></a><span class="sd"> Error message (if `error` )</span>
</span><span id="AgentResponse-364"><a href="#AgentResponse-364"><span class="linenos">364</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1889,46 +1882,46 @@ Using this counter the management is able to detect cycles and stop them.</p>
</div> </div>
<a class="headerlink" href="#MessageDbRow"></a> <a class="headerlink" href="#MessageDbRow"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageDbRow-366"><a href="#MessageDbRow-366"><span class="linenos">366</span></a><span class="k">class</span> <span class="nc">MessageDbRow</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span> <div class="pdoc-code codehilite"><pre><span></span><span id="MessageDbRow-361"><a href="#MessageDbRow-361"><span class="linenos">361</span></a><span class="k">class</span> <span class="nc">MessageDbRow</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
</span><span id="MessageDbRow-362"><a href="#MessageDbRow-362"><span class="linenos">362</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-363"><a href="#MessageDbRow-363"><span class="linenos">363</span></a><span class="sd"> Object representing a database row.</span>
</span><span id="MessageDbRow-364"><a href="#MessageDbRow-364"><span class="linenos">364</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-365"><a href="#MessageDbRow-365"><span class="linenos">365</span></a>
</span><span id="MessageDbRow-366"><a href="#MessageDbRow-366"><span class="linenos">366</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span>
</span><span id="MessageDbRow-367"><a href="#MessageDbRow-367"><span class="linenos">367</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="MessageDbRow-367"><a href="#MessageDbRow-367"><span class="linenos">367</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-368"><a href="#MessageDbRow-368"><span class="linenos">368</span></a><span class="sd"> Object representing a database row.</span> </span><span id="MessageDbRow-368"><a href="#MessageDbRow-368"><span class="linenos">368</span></a><span class="sd"> The count (primary key) of the item.</span>
</span><span id="MessageDbRow-369"><a href="#MessageDbRow-369"><span class="linenos">369</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="MessageDbRow-369"><a href="#MessageDbRow-369"><span class="linenos">369</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-370"><a href="#MessageDbRow-370"><span class="linenos">370</span></a> </span><span id="MessageDbRow-370"><a href="#MessageDbRow-370"><span class="linenos">370</span></a>
</span><span id="MessageDbRow-371"><a href="#MessageDbRow-371"><span class="linenos">371</span></a> <span class="n">count</span> <span class="p">:</span> <span class="nb">int</span> </span><span id="MessageDbRow-371"><a href="#MessageDbRow-371"><span class="linenos">371</span></a> <span class="n">sender</span> <span class="p">:</span> <span class="nb">str</span>
</span><span id="MessageDbRow-372"><a href="#MessageDbRow-372"><span class="linenos">372</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="MessageDbRow-372"><a href="#MessageDbRow-372"><span class="linenos">372</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-373"><a href="#MessageDbRow-373"><span class="linenos">373</span></a><span class="sd"> The count (primary key) of the item.</span> </span><span id="MessageDbRow-373"><a href="#MessageDbRow-373"><span class="linenos">373</span></a><span class="sd"> The sender of the message.</span>
</span><span id="MessageDbRow-374"><a href="#MessageDbRow-374"><span class="linenos">374</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="MessageDbRow-374"><a href="#MessageDbRow-374"><span class="linenos">374</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-375"><a href="#MessageDbRow-375"><span class="linenos">375</span></a> </span><span id="MessageDbRow-375"><a href="#MessageDbRow-375"><span class="linenos">375</span></a>
</span><span id="MessageDbRow-376"><a href="#MessageDbRow-376"><span class="linenos">376</span></a> <span class="n">sender</span> <span class="p">:</span> <span class="nb">str</span> </span><span id="MessageDbRow-376"><a href="#MessageDbRow-376"><span class="linenos">376</span></a> <span class="n">recipient</span> <span class="p">:</span> <span class="nb">str</span>
</span><span id="MessageDbRow-377"><a href="#MessageDbRow-377"><span class="linenos">377</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="MessageDbRow-377"><a href="#MessageDbRow-377"><span class="linenos">377</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-378"><a href="#MessageDbRow-378"><span class="linenos">378</span></a><span class="sd"> The sender of the message.</span> </span><span id="MessageDbRow-378"><a href="#MessageDbRow-378"><span class="linenos">378</span></a><span class="sd"> The recipient of the message</span>
</span><span id="MessageDbRow-379"><a href="#MessageDbRow-379"><span class="linenos">379</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="MessageDbRow-379"><a href="#MessageDbRow-379"><span class="linenos">379</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-380"><a href="#MessageDbRow-380"><span class="linenos">380</span></a> </span><span id="MessageDbRow-380"><a href="#MessageDbRow-380"><span class="linenos">380</span></a>
</span><span id="MessageDbRow-381"><a href="#MessageDbRow-381"><span class="linenos">381</span></a> <span class="n">recipient</span> <span class="p">:</span> <span class="nb">str</span> </span><span id="MessageDbRow-381"><a href="#MessageDbRow-381"><span class="linenos">381</span></a> <span class="n">time</span> <span class="p">:</span> <span class="nb">int</span>
</span><span id="MessageDbRow-382"><a href="#MessageDbRow-382"><span class="linenos">382</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="MessageDbRow-382"><a href="#MessageDbRow-382"><span class="linenos">382</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-383"><a href="#MessageDbRow-383"><span class="linenos">383</span></a><span class="sd"> The recipient of the message</span> </span><span id="MessageDbRow-383"><a href="#MessageDbRow-383"><span class="linenos">383</span></a><span class="sd"> The time (unix timestamp) the message was received/ sent.</span>
</span><span id="MessageDbRow-384"><a href="#MessageDbRow-384"><span class="linenos">384</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="MessageDbRow-384"><a href="#MessageDbRow-384"><span class="linenos">384</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-385"><a href="#MessageDbRow-385"><span class="linenos">385</span></a> </span><span id="MessageDbRow-385"><a href="#MessageDbRow-385"><span class="linenos">385</span></a>
</span><span id="MessageDbRow-386"><a href="#MessageDbRow-386"><span class="linenos">386</span></a> <span class="n">time</span> <span class="p">:</span> <span class="nb">int</span> </span><span id="MessageDbRow-386"><a href="#MessageDbRow-386"><span class="linenos">386</span></a> <span class="n">message</span> <span class="p">:</span> <span class="n">AgentMessage</span>
</span><span id="MessageDbRow-387"><a href="#MessageDbRow-387"><span class="linenos">387</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="MessageDbRow-387"><a href="#MessageDbRow-387"><span class="linenos">387</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-388"><a href="#MessageDbRow-388"><span class="linenos">388</span></a><span class="sd"> The time (unix timestamp) the message was received/ sent.</span> </span><span id="MessageDbRow-388"><a href="#MessageDbRow-388"><span class="linenos">388</span></a><span class="sd"> The message received/ sent.</span>
</span><span id="MessageDbRow-389"><a href="#MessageDbRow-389"><span class="linenos">389</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="MessageDbRow-389"><a href="#MessageDbRow-389"><span class="linenos">389</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-390"><a href="#MessageDbRow-390"><span class="linenos">390</span></a> </span><span id="MessageDbRow-390"><a href="#MessageDbRow-390"><span class="linenos">390</span></a>
</span><span id="MessageDbRow-391"><a href="#MessageDbRow-391"><span class="linenos">391</span></a> <span class="n">message</span> <span class="p">:</span> <span class="n">AgentMessage</span> </span><span id="MessageDbRow-391"><a href="#MessageDbRow-391"><span class="linenos">391</span></a> <span class="n">processed</span> <span class="p">:</span> <span class="nb">bool</span>
</span><span id="MessageDbRow-392"><a href="#MessageDbRow-392"><span class="linenos">392</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="MessageDbRow-392"><a href="#MessageDbRow-392"><span class="linenos">392</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-393"><a href="#MessageDbRow-393"><span class="linenos">393</span></a><span class="sd"> The message received/ sent.</span> </span><span id="MessageDbRow-393"><a href="#MessageDbRow-393"><span class="linenos">393</span></a><span class="sd"> Did the management process the message, i.e., did the tasks necessary for this message (mostly only relevant for received messages).</span>
</span><span id="MessageDbRow-394"><a href="#MessageDbRow-394"><span class="linenos">394</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="MessageDbRow-394"><a href="#MessageDbRow-394"><span class="linenos">394</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-395"><a href="#MessageDbRow-395"><span class="linenos">395</span></a> </span><span id="MessageDbRow-395"><a href="#MessageDbRow-395"><span class="linenos">395</span></a>
</span><span id="MessageDbRow-396"><a href="#MessageDbRow-396"><span class="linenos">396</span></a> <span class="n">processed</span> <span class="p">:</span> <span class="nb">bool</span> </span><span id="MessageDbRow-396"><a href="#MessageDbRow-396"><span class="linenos">396</span></a> <span class="n">solution</span> <span class="p">:</span> <span class="nb">bool</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="MessageDbRow-397"><a href="#MessageDbRow-397"><span class="linenos">397</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span> </span><span id="MessageDbRow-397"><a href="#MessageDbRow-397"><span class="linenos">397</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-398"><a href="#MessageDbRow-398"><span class="linenos">398</span></a><span class="sd"> Did the management process the message, i.e., did the tasks necessary for this message (mostly only relevant for received messages).</span> </span><span id="MessageDbRow-398"><a href="#MessageDbRow-398"><span class="linenos">398</span></a><span class="sd"> Does this message contain a valid solution?</span>
</span><span id="MessageDbRow-399"><a href="#MessageDbRow-399"><span class="linenos">399</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="MessageDbRow-399"><a href="#MessageDbRow-399"><span class="linenos">399</span></a><span class="sd"> True if contains valid solution, False if solution not valid, Null/None if not applicable</span>
</span><span id="MessageDbRow-400"><a href="#MessageDbRow-400"><span class="linenos">400</span></a> </span><span id="MessageDbRow-400"><a href="#MessageDbRow-400"><span class="linenos">400</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageDbRow-401"><a href="#MessageDbRow-401"><span class="linenos">401</span></a> <span class="n">solution</span> <span class="p">:</span> <span class="nb">bool</span><span class="o">|</span><span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="MessageDbRow-402"><a href="#MessageDbRow-402"><span class="linenos">402</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageDbRow-403"><a href="#MessageDbRow-403"><span class="linenos">403</span></a><span class="sd"> Does this message contain a valid solution?</span>
</span><span id="MessageDbRow-404"><a href="#MessageDbRow-404"><span class="linenos">404</span></a><span class="sd"> True if contains valid solution, False if solution not valid, Null/None if not applicable</span>
</span><span id="MessageDbRow-405"><a href="#MessageDbRow-405"><span class="linenos">405</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>

View File

@ -13,8 +13,7 @@
<ul> <ul>
<li><a href="/app/table" target="_blank">&nearr; Web App: Table</a></li> <li><a href="/app/table" target="_blank">&nearr; Web App: Table</a></li>
<li><a href="/app/new" target="_blank">&nearr; Web App: New Riddle</a></li> <li><a href="/app/new" target="_blank">&nearr; Web App: New Riddle</a></li>
<li><a href="/share/" target="_blank">&nearr; Data: Access the riddle files</a></li> <li><a href="/api/" target="_blank">&nearr; Documentation: API </a></li>
<li><a href="/api" target="_blank">&nearr; Documentation: API </a></li>
<li><a href="/docs/" target="_blank">&nearr; Documentation: Code </a></li> <li><a href="/docs/" target="_blank">&nearr; Documentation: Code </a></li>
</ul> </ul>
{% endblock %} {% endblock %}