Compare commits

...

6 Commits

Author SHA1 Message Date
8c36816800
(Re-)Enable Agent Build 2025-02-12 11:59:41 +01:00
c73d6c3967
Prevent Agent-Image from rebuild
All checks were successful
Build and push Docker images on git tags / build (push) Successful in 30m57s
2025-02-12 11:15:16 +01:00
ee95b67a83
Add Shared Files Listing to Management 2025-02-12 11:14:20 +01:00
536d90d5e6
Update docs after implement #4
All checks were successful
Build and push Docker images on git tags / build (push) Successful in 29m53s
2024-12-21 19:01:02 +01:00
42a4449472
Implement #4 2024-12-21 18:57:39 +01:00
4e98292160
Fix Push Script
All checks were successful
Build and push Docker images on git tags / build (push) Successful in 38s
2024-11-20 13:08:28 +01:00
14 changed files with 1452 additions and 1268 deletions

View File

@ -21,7 +21,8 @@ services:
environment: environment:
- SOLUTION_MAX_TRIALS=5 - SOLUTION_MAX_TRIALS=5
- MESSAGE_MAX_CONTACTS=100 - MESSAGE_MAX_CONTACTS=100
- REQUIRE_FULL_EXTRACT=false - REQUIRE_FULL_EXTRACT=true
- 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,7 +20,8 @@ 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\n$images_b" | while read image_url ; echo "$images_a
$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 = solution self._response.solution.append(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 solution. Solve the `riddle` using `data` and return a single solution.
""" """
class GatekeeperAgent(BasicAgent): class GatekeeperAgent(BasicAgent):
@ -301,25 +301,26 @@ class GatekeeperAgent(BasicAgent):
return AgentCapability.GATEKEEPER return AgentCapability.GATEKEEPER
def _process(self): def _process(self):
if self._response.solution is None: if len(self._response.solution) == 0:
self._response.solution = RiddleSolution(solution="", explanation="") self._response.solution.append(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})")
if solution.review is None or len(solution.review) == 0: for single_solution in solution:
logger.info(f"Riddle {self._response.id}: Empty review after handling") logger.debug(f"End validate: {self._response.id} ({single_solution.review}, {single_solution.accepted})")
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 = solution.accepted self._response.status.solved = any(single_solution.accepted for single_solution in solution)
self._do_response = True self._do_response = True
@abstractmethod @abstractmethod
@validate_call @validate_call
def handle(self, solution:RiddleSolution, riddle:Riddle) -> RiddleSolution: def handle(self, solution:List[RiddleSolution], riddle:Riddle) -> List[RiddleSolution]:
""" """
Check the `solution` of `riddle` and return solution with populated `solution.accepted` and `solution.review`. Check the `solution` (multiple if multiple solver involved) of `riddle` and return solutions with populated `solution[i].accepted` and `solution[i].review`.
""" """

View File

@ -8,6 +8,8 @@
# 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
@ -59,14 +61,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="Blubb") return RiddleSolution(solution="Huii", explanation=f"Blubb, {random.random()}")
class MyGatekeeperAgent(GatekeeperAgent): class MyGatekeeperAgent(GatekeeperAgent):
def handle(self, solution: RiddleSolution, riddle: Riddle) -> RiddleSolution: def handle(self, solution: List[RiddleSolution], riddle: Riddle) -> RiddleSolution:
solution.accepted = True solution[0].accepted = True
solution.review = "Ok" solution[0].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 from ums.utils import AgentMessage, AgentResponse, logger, RiddleData, RiddleSolution
class MessageProcessor(): class MessageProcessor():
@ -23,6 +23,7 @@ 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('/')
@ -90,54 +91,100 @@ 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
# combine different extractions in data items
# will update items in `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) \
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}")
return
# check which step/ state the message requires the management to do # 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: if db_message.message.status.extract.required and not db_message.message.status.extract.finished:
# send to extract agents # send to extract agents
self._send_messages(self.AGENTS_PROCESS, db_message.message) self._send_messages(self.AGENTS_PROCESS, db_message.message)
return
elif db_message.message.status.solve.required and not db_message.message.status.solve.finished: # combine different extractions in data items
# will update items in `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:
logger.warning(f"Postpone message, wait for full extract of items! {db_message.message.id}, {count}")
return
# -> EL IF
if 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
elif db_message.message.status.validate.required and not db_message.message.status.validate.finished: # combine different solutions
# 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: # all steps "done" # -> ELSE
# 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,
@ -178,13 +225,13 @@ class MessageProcessor():
# increment trial # increment trial
message.status.trial += 1 message.status.trial += 1
# append current solution als old one # append current solution(s) als old one(s)
if not message.solution is None: if len(message.solution) > 0:
message.riddle.solutions_before.append( message.riddle.solutions_before.extend(
message.solution message.solution
) )
# reset current solution # reset current solution
message.solution = None message.solution = []
# 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": null, "solution": [],
"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 be an `RiddleSolution` afterwards. `AgentMessage.solution` shall contain an `RiddleSolution` afterwards.
""" """
validate: RiddleSubStatus = RiddleSubStatus() validate: RiddleSubStatus = RiddleSubStatus()
""" """
The validation step, i.e., does the gatekeeper accept the solution in `AgentMessage.solution`. The validation step, i.e., does the gatekeeper accept the solution(s) in `AgentMessage.solution`.
""" """
trial: int = 0 trial: int = 0
@ -284,9 +284,13 @@ class RiddleStatus(RiddleInformation):
solved: bool = False solved: bool = False
""" """
True, after the gatekeeper accepts the solution at `AgentMessage.solution` True, after the gatekeeper accepts the solution(s) 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.
@ -310,9 +314,10 @@ class AgentMessage(RiddleInformation):
The riddle to solve. The riddle to solve.
""" """
solution: RiddleSolution | None = None solution: Annotated[List[RiddleSolution], BeforeValidator(_transform_to_list)] = []
""" """
The solution of the riddle (or empty if no solution available) The solutions of the riddle (or empty list if no solutions 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,6 +29,11 @@ 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">solution</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">append</span><span class="p">(</span><span class="n">solution</span><span class="p">)</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 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 single 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,28 +464,29 @@
</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="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-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-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-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-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 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-309"><a href="#L-309"><span class="linenos">309</span></a>
</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> </span><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-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-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-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-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-313"><a href="#L-313"><span class="linenos">313</span></a> </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-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-314"><a href="#L-314"><span class="linenos">314</span></a>
</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-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-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-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-317"><a href="#L-317"><span class="linenos">317</span></a> </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-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-318"><a href="#L-318"><span class="linenos">318</span></a>
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> </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-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="nd">@abstractmethod</span> </span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
</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-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="nd">@abstractmethod</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-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="nd">@validate_call</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-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-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-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"> &quot;&quot;&quot;</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-326"><a href="#L-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1401,7 +1402,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">solution</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">append</span><span class="p">(</span><span class="n">solution</span><span class="p">)</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>
@ -1410,7 +1411,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 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 single 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>
@ -1457,12 +1458,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 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 single 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 solution.</p> <div class="docstring"><p>Solve the <code>riddle</code> using <code>data</code> and return a single solution.</p>
</div> </div>
@ -1500,28 +1501,29 @@ 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="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-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-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-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-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 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-310"><a href="#GatekeeperAgent-310"><span class="linenos">310</span></a>
</span><span id="GatekeeperAgent-311"><a href="#GatekeeperAgent-311"><span class="linenos">311</span></a> </span><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-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-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-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-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-314"><a href="#GatekeeperAgent-314"><span class="linenos">314</span></a> </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-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-315"><a href="#GatekeeperAgent-315"><span class="linenos">315</span></a>
</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-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-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-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-318"><a href="#GatekeeperAgent-318"><span class="linenos">318</span></a> </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-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-319"><a href="#GatekeeperAgent-319"><span class="linenos">319</span></a>
</span><span id="GatekeeperAgent-320"><a href="#GatekeeperAgent-320"><span class="linenos">320</span></a> </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-321"><a href="#GatekeeperAgent-321"><span class="linenos">321</span></a> <span class="nd">@abstractmethod</span> </span><span id="GatekeeperAgent-321"><a href="#GatekeeperAgent-321"><span class="linenos">321</span></a>
</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-322"><a href="#GatekeeperAgent-322"><span class="linenos">322</span></a> <span class="nd">@abstractmethod</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-323"><a href="#GatekeeperAgent-323"><span class="linenos">323</span></a> <span class="nd">@validate_call</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-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-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-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-326"><a href="#GatekeeperAgent-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</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-327"><a href="#GatekeeperAgent-327"><span class="linenos">327</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div> </span></pre></div>
@ -1557,22 +1559,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"><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> <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>
<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-321"><a href="#GatekeeperAgent.handle-321"><span class="linenos">321</span></a> <span class="nd">@abstractmethod</span> <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>
</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-323"><a href="#GatekeeperAgent.handle-323"><span class="linenos">323</span></a> <span class="nd">@validate_call</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-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-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-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-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-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-326"><a href="#GatekeeperAgent.handle-326"><span class="linenos">326</span></a><span class="sd"> &quot;&quot;&quot;</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></pre></div> </span></pre></div>
<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 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> </div>

View File

@ -114,73 +114,75 @@
</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">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-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-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-12"><a href="#L-12"><span class="linenos">12</span></a>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a> </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-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-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-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="sd">&quot;&quot;&quot;</span> </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-17"><a href="#L-17"><span class="linenos">17</span></a><span class="sd"> Examples for simple agents.</span> </span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a>
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a> </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-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-19"><a href="#L-19"><span class="linenos">19</span></a><span class="sd"> Examples for simple agents.</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"> 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-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-22"><a href="#L-22"><span class="linenos">22</span></a><span class="sd">&quot;&quot;&quot;</span> </span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a>
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> </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-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-24"><a href="#L-24"><span class="linenos">24</span></a><span class="sd">&quot;&quot;&quot;</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">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-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-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-27"><a href="#L-27"><span class="linenos">27</span></a>
</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-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-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="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-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-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-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">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-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-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-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="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-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-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-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-36"><a href="#L-36"><span class="linenos">36</span></a>
</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-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-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="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-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-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-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">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-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-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-42"><a href="#L-42"><span class="linenos">42</span></a>
</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-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-44"><a href="#L-44"><span class="linenos">44</span></a> </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-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-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-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-46"><a href="#L-46"><span class="linenos">46</span></a>
</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-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-48"><a href="#L-48"><span class="linenos">48</span></a> </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-49"><a href="#L-49"><span class="linenos">49</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-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-50"><a href="#L-50"><span class="linenos">50</span></a>
</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">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-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-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">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-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-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-55"><a href="#L-55"><span class="linenos">55</span></a>
</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a> </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-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-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-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-58"><a href="#L-58"><span class="linenos">58</span></a>
</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-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-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-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-61"><a href="#L-61"><span class="linenos">61</span></a> </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-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-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-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><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-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-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><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-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-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-68"><a href="#L-68"><span class="linenos">68</span></a>
</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-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-70"><a href="#L-70"><span class="linenos">70</span></a> </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-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-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-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="n">AGENT_CLASSES</span> <span class="o">=</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">solution</span>
</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-74"><a href="#L-74"><span class="linenos">74</span></a>
</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-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-76"><a href="#L-76"><span class="linenos">76</span></a> <span class="n">MyGatekeeperAgent</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-77"><a href="#L-77"><span class="linenos">77</span></a><span class="p">]</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-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>
@ -196,11 +198,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-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> <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>
</span><span id="MyExtractAudioAgent-26"><a href="#MyExtractAudioAgent-26"><span class="linenos">26</span></a> </span><span id="MyExtractAudioAgent-28"><a href="#MyExtractAudioAgent-28"><span class="linenos">28</span></a>
</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-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-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-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-29"><a href="#MyExtractAudioAgent-29"><span class="linenos">29</span></a> <span class="k">return</span> <span class="n">data</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></pre></div> </span></pre></div>
@ -219,9 +221,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-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> <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>
</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-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-29"><a href="#MyExtractAudioAgent.handle-29"><span class="linenos">29</span></a> <span class="k">return</span> <span class="n">data</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></pre></div> </span></pre></div>
@ -264,14 +266,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-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> <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>
</span><span id="MyExtractImageAgent-32"><a href="#MyExtractImageAgent-32"><span class="linenos">32</span></a> </span><span id="MyExtractImageAgent-34"><a href="#MyExtractImageAgent-34"><span class="linenos">34</span></a>
</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-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-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-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-35"><a href="#MyExtractImageAgent-35"><span class="linenos">35</span></a> </span><span id="MyExtractImageAgent-37"><a href="#MyExtractImageAgent-37"><span class="linenos">37</span></a>
</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-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-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-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-38"><a href="#MyExtractImageAgent-38"><span class="linenos">38</span></a> <span class="k">return</span> <span class="n">data</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></pre></div> </span></pre></div>
@ -290,12 +292,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-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> <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>
</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-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-35"><a href="#MyExtractImageAgent.handle-35"><span class="linenos">35</span></a> </span><span id="MyExtractImageAgent.handle-37"><a href="#MyExtractImageAgent.handle-37"><span class="linenos">37</span></a>
</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-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-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-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-38"><a href="#MyExtractImageAgent.handle-38"><span class="linenos">38</span></a> <span class="k">return</span> <span class="n">data</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></pre></div> </span></pre></div>
@ -338,15 +340,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-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> <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>
</span><span id="MyExtractTextAgent-41"><a href="#MyExtractTextAgent-41"><span class="linenos">41</span></a> </span><span id="MyExtractTextAgent-43"><a href="#MyExtractTextAgent-43"><span class="linenos">43</span></a>
</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-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-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-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-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-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-45"><a href="#MyExtractTextAgent-45"><span class="linenos">45</span></a> </span><span id="MyExtractTextAgent-47"><a href="#MyExtractTextAgent-47"><span class="linenos">47</span></a>
</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-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-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-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-48"><a href="#MyExtractTextAgent-48"><span class="linenos">48</span></a> <span class="k">return</span> <span class="n">data</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></pre></div> </span></pre></div>
@ -365,9 +367,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-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> <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>
</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-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-44"><a href="#MyExtractTextAgent.before_response-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="kc">True</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></pre></div> </span></pre></div>
@ -392,9 +394,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-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> <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>
</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-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-48"><a href="#MyExtractTextAgent.handle-48"><span class="linenos">48</span></a> <span class="k">return</span> <span class="n">data</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></pre></div> </span></pre></div>
@ -436,19 +438,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-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> <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>
</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">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-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-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-56"><a href="#MySolveAgent-56"><span class="linenos">56</span></a>
</span><span id="MySolveAgent-57"><a href="#MySolveAgent-57"><span class="linenos">57</span></a> </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-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-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-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-59"><a href="#MySolveAgent-59"><span class="linenos">59</span></a>
</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-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-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-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-62"><a href="#MySolveAgent-62"><span class="linenos">62</span></a> </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-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-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-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>
@ -467,21 +469,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-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> <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>
</span><span id="MySolveAgent.handle-54"><a href="#MySolveAgent.handle-54"><span class="linenos">54</span></a> </span><span id="MySolveAgent.handle-56"><a href="#MySolveAgent.handle-56"><span class="linenos">56</span></a>
</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-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-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-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-57"><a href="#MySolveAgent.handle-57"><span class="linenos">57</span></a> </span><span id="MySolveAgent.handle-59"><a href="#MySolveAgent.handle-59"><span class="linenos">59</span></a>
</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-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-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-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-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-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-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-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-62"><a href="#MySolveAgent.handle-62"><span class="linenos">62</span></a> </span><span id="MySolveAgent.handle-64"><a href="#MySolveAgent.handle-64"><span class="linenos">64</span></a>
</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><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></pre></div> </span></pre></div>
<div class="docstring"><p>Solve the <code>riddle</code> using <code>data</code> and return a solution.</p> <div class="docstring"><p>Solve the <code>riddle</code> using <code>data</code> and return a single solution.</p>
</div> </div>
@ -515,13 +517,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-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> <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>
</span><span id="MyGatekeeperAgent-67"><a href="#MyGatekeeperAgent-67"><span class="linenos">67</span></a> </span><span id="MyGatekeeperAgent-69"><a href="#MyGatekeeperAgent-69"><span class="linenos">69</span></a>
</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-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-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-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-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-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-71"><a href="#MyGatekeeperAgent-71"><span class="linenos">71</span></a> </span><span id="MyGatekeeperAgent-73"><a href="#MyGatekeeperAgent-73"><span class="linenos">73</span></a>
</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><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></pre></div> </span></pre></div>
@ -534,21 +536,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"><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> <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>
<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-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> <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>
</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-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-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-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-71"><a href="#MyGatekeeperAgent.handle-71"><span class="linenos">71</span></a> </span><span id="MyGatekeeperAgent.handle-73"><a href="#MyGatekeeperAgent.handle-73"><span class="linenos">73</span></a>
</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><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></pre></div> </span></pre></div>
<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 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> </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><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-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="p">)</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-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-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="p">)</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-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-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="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-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-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><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-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-36"><a href="#L-36"><span class="linenos"> 36</span></a>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> </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-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-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="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-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-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-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-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-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-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="s2"> count INTEGER PRIMARY KEY AUTOINCREMENT,</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-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="s2"> id TEXT, </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-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="s2"> sender 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-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="s2"> recipient 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-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="s2"> time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,</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-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="s2"> json BLOB,</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-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="s2"> processed BOOL DEFAULT FALSE,</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-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="s2"> solution BOOL DEFAULT NULL</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-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-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="s2"> solution BOOL DEFAULT NULL</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-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-52"><a href="#L-52"><span class="linenos"> 52</span></a> </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-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="nd">@validate_call</span> </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">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-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="nd">@validate_call</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-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-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-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-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-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-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-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-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd"> id, sender, recipient, json, processed</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-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="sd"> ) VALUES (</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-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</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-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-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</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-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-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-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-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-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-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-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-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-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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="p">})</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-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-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="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-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-71"><a href="#L-71"><span class="linenos"> 71</span></a> </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-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-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><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-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="nd">@validate_call</span> </span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="nd">@validate_call</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-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-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-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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">try</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-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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">try</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-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-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">except</span><span class="p">:</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-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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">except</span><span class="p">:</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-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-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-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> </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-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="nd">@validate_call</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 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-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="nd">@validate_call</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-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-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-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-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">try</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-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-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">try</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-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-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">except</span><span class="p">:</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-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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">except</span><span class="p">:</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-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-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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> </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-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-98"><a href="#L-98"><span class="linenos"> 98</span></a>
</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-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-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 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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="nd">@validate_call</span> </span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
</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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="nd">@validate_call</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-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-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-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-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-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-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-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-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-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-108"><a href="#L-108"><span class="linenos">108</span></a> </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-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-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="n">params</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-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-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-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-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-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="p">}</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-114"><a href="#L-114"><span class="linenos">114</span></a> </span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="p">}</span>
</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-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="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-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-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-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-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-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-119"><a href="#L-119"><span class="linenos">119</span></a> <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-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-120"><a href="#L-120"><span class="linenos">120</span></a> <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-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-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-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-123"><a href="#L-123"><span class="linenos">123</span></a> </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-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-124"><a href="#L-124"><span class="linenos">124</span></a>
</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-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-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-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-127"><a href="#L-127"><span class="linenos">127</span></a> </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-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-128"><a href="#L-128"><span class="linenos">128</span></a>
</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-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-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-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-131"><a href="#L-131"><span class="linenos">131</span></a> </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-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-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 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-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-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">else</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-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-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> </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-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-137"><a href="#L-137"><span class="linenos">137</span></a>
</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-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-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-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-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-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-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">params</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-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-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">params</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="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
</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-144"><a href="#L-144"><span class="linenos">144</span></a>
</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-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-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-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">else</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-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-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">params</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-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="p">):</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-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-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="p">):</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="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-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-152"><a href="#L-152"><span class="linenos">152</span></a>
</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-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-154"><a href="#L-154"><span class="linenos">154</span></a> </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-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-155"><a href="#L-155"><span class="linenos">155</span></a>
</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-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-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-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-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> &quot;&quot;&quot;</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-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-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</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-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-161"><a href="#L-161"><span class="linenos">161</span></a> </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-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-162"><a href="#L-162"><span class="linenos">162</span></a>
</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-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-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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">try</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-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-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-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-167"><a href="#L-167"><span class="linenos">167</span></a> <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-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-168"><a href="#L-168"><span class="linenos">168</span></a> <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-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-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-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-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-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-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-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-173"><a href="#L-173"><span class="linenos">173</span></a> <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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">else</span><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-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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">else</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="k">raise</span> <span class="n">e</span>
</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-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="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-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-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-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-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-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-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-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-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-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-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-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-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-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-185"><a href="#L-185"><span class="linenos">185</span></a> <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-186"><a href="#L-186"><span class="linenos">186</span></a> </span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="p">)</span>
</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-187"><a href="#L-187"><span class="linenos">187</span></a>
</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-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-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">try</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-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-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">try</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-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-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="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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="k">except</span><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-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-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> </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></pre></div> </span></pre></div>
@ -300,172 +300,173 @@
</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><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-31"><a href="#DB-31"><span class="linenos"> 31</span></a> <span class="p">)</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-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-32"><a href="#DB-32"><span class="linenos"> 32</span></a> <span class="p">)</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-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-34"><a href="#DB-34"><span class="linenos"> 34</span></a> </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-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-35"><a href="#DB-35"><span class="linenos"> 35</span></a>
</span><span id="DB-36"><a href="#DB-36"><span class="linenos"> 36</span></a> </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-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-37"><a href="#DB-37"><span class="linenos"> 37</span></a>
</span><span id="DB-38"><a href="#DB-38"><span class="linenos"> 38</span></a> </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-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-39"><a href="#DB-39"><span class="linenos"> 39</span></a>
</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-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-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-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-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-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-43"><a href="#DB-43"><span class="linenos"> 43</span></a><span class="s2"> count INTEGER PRIMARY KEY AUTOINCREMENT,</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-44"><a href="#DB-44"><span class="linenos"> 44</span></a><span class="s2"> id TEXT, </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-45"><a href="#DB-45"><span class="linenos"> 45</span></a><span class="s2"> sender 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-46"><a href="#DB-46"><span class="linenos"> 46</span></a><span class="s2"> recipient 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-47"><a href="#DB-47"><span class="linenos"> 47</span></a><span class="s2"> time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,</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-48"><a href="#DB-48"><span class="linenos"> 48</span></a><span class="s2"> json BLOB,</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-49"><a href="#DB-49"><span class="linenos"> 49</span></a><span class="s2"> processed BOOL DEFAULT FALSE,</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-50"><a href="#DB-50"><span class="linenos"> 50</span></a><span class="s2"> solution BOOL DEFAULT NULL</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-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-51"><a href="#DB-51"><span class="linenos"> 51</span></a><span class="s2"> solution BOOL DEFAULT NULL</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-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-53"><a href="#DB-53"><span class="linenos"> 53</span></a> </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-54"><a href="#DB-54"><span class="linenos"> 54</span></a> <span class="nd">@validate_call</span> </span><span id="DB-54"><a href="#DB-54"><span class="linenos"> 54</span></a>
</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-55"><a href="#DB-55"><span class="linenos"> 55</span></a> <span class="nd">@validate_call</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-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-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-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-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-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-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-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-60"><a href="#DB-60"><span class="linenos"> 60</span></a><span class="sd"> id, sender, recipient, json, processed</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-61"><a href="#DB-61"><span class="linenos"> 61</span></a><span class="sd"> ) VALUES (</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-62"><a href="#DB-62"><span class="linenos"> 62</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</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-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-63"><a href="#DB-63"><span class="linenos"> 63</span></a><span class="sd"> :id, :sender, :recipient, :json, :processed</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-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-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-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-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-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-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-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-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-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-69"><a href="#DB-69"><span class="linenos"> 69</span></a> <span class="p">})</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-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-70"><a href="#DB-70"><span class="linenos"> 70</span></a> <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-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-72"><a href="#DB-72"><span class="linenos"> 72</span></a> </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-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-73"><a href="#DB-73"><span class="linenos"> 73</span></a>
</span><span id="DB-74"><a href="#DB-74"><span class="linenos"> 74</span></a> </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-75"><a href="#DB-75"><span class="linenos"> 75</span></a> <span class="nd">@validate_call</span> </span><span id="DB-75"><a href="#DB-75"><span class="linenos"> 75</span></a>
</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-76"><a href="#DB-76"><span class="linenos"> 76</span></a> <span class="nd">@validate_call</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-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-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-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-79"><a href="#DB-79"><span class="linenos"> 79</span></a> <span class="k">try</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-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-80"><a href="#DB-80"><span class="linenos"> 80</span></a> <span class="k">try</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-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-82"><a href="#DB-82"><span class="linenos"> 82</span></a> <span class="k">except</span><span class="p">:</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-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-83"><a href="#DB-83"><span class="linenos"> 83</span></a> <span class="k">except</span><span class="p">:</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-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-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-85"><a href="#DB-85"><span class="linenos"> 85</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="DB-86"><a href="#DB-86"><span class="linenos"> 86</span></a> </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-87"><a href="#DB-87"><span class="linenos"> 87</span></a> <span class="nd">@validate_call</span> </span><span id="DB-87"><a href="#DB-87"><span class="linenos"> 87</span></a>
</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-88"><a href="#DB-88"><span class="linenos"> 88</span></a> <span class="nd">@validate_call</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-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-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-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-91"><a href="#DB-91"><span class="linenos"> 91</span></a> <span class="k">try</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-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-92"><a href="#DB-92"><span class="linenos"> 92</span></a> <span class="k">try</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-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-94"><a href="#DB-94"><span class="linenos"> 94</span></a> <span class="k">except</span><span class="p">:</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-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-95"><a href="#DB-95"><span class="linenos"> 95</span></a> <span class="k">except</span><span class="p">:</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-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-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-97"><a href="#DB-97"><span class="linenos"> 97</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="DB-98"><a href="#DB-98"><span class="linenos"> 98</span></a> </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-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-99"><a href="#DB-99"><span class="linenos"> 99</span></a>
</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-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-101"><a href="#DB-101"><span class="linenos">101</span></a> </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-102"><a href="#DB-102"><span class="linenos">102</span></a> <span class="nd">@validate_call</span> </span><span id="DB-102"><a href="#DB-102"><span class="linenos">102</span></a>
</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-103"><a href="#DB-103"><span class="linenos">103</span></a> <span class="nd">@validate_call</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-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-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-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-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-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-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-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-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-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-109"><a href="#DB-109"><span class="linenos">109</span></a> </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-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-110"><a href="#DB-110"><span class="linenos">110</span></a>
</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-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-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-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-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-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-114"><a href="#DB-114"><span class="linenos">114</span></a> <span class="p">}</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-115"><a href="#DB-115"><span class="linenos">115</span></a> </span><span id="DB-115"><a href="#DB-115"><span class="linenos">115</span></a> <span class="p">}</span>
</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-116"><a href="#DB-116"><span class="linenos">116</span></a>
</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-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-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-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-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-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-120"><a href="#DB-120"><span class="linenos">120</span></a> <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-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-121"><a href="#DB-121"><span class="linenos">121</span></a> <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-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-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-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-124"><a href="#DB-124"><span class="linenos">124</span></a> </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-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-125"><a href="#DB-125"><span class="linenos">125</span></a>
</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-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-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-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-128"><a href="#DB-128"><span class="linenos">128</span></a> </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-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-129"><a href="#DB-129"><span class="linenos">129</span></a>
</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-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-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-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-132"><a href="#DB-132"><span class="linenos">132</span></a> </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-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-133"><a href="#DB-133"><span class="linenos">133</span></a>
</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-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-135"><a href="#DB-135"><span class="linenos">135</span></a> <span class="k">else</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-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-136"><a href="#DB-136"><span class="linenos">136</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="DB-137"><a href="#DB-137"><span class="linenos">137</span></a> </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-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-138"><a href="#DB-138"><span class="linenos">138</span></a>
</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-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-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-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-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-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-142"><a href="#DB-142"><span class="linenos">142</span></a> <span class="n">params</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-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-143"><a href="#DB-143"><span class="linenos">143</span></a> <span class="n">params</span>
</span><span id="DB-144"><a href="#DB-144"><span class="linenos">144</span></a> </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-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-145"><a href="#DB-145"><span class="linenos">145</span></a>
</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-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-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-147"><a href="#DB-147"><span class="linenos">147</span></a> <span class="k">else</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-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-149"><a href="#DB-149"><span class="linenos">149</span></a> <span class="n">params</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-150"><a href="#DB-150"><span class="linenos">150</span></a> <span class="p">):</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-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-151"><a href="#DB-151"><span class="linenos">151</span></a> <span class="p">):</span>
</span><span id="DB-152"><a href="#DB-152"><span class="linenos">152</span></a> </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-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-153"><a href="#DB-153"><span class="linenos">153</span></a>
</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-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-155"><a href="#DB-155"><span class="linenos">155</span></a> </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-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-156"><a href="#DB-156"><span class="linenos">156</span></a>
</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-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-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-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-159"><a href="#DB-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</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-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-160"><a href="#DB-160"><span class="linenos">160</span></a><span class="sd"> &quot;&quot;&quot;</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-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-162"><a href="#DB-162"><span class="linenos">162</span></a> </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-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-163"><a href="#DB-163"><span class="linenos">163</span></a>
</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-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-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-165"><a href="#DB-165"><span class="linenos">165</span></a> <span class="k">try</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-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-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-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-168"><a href="#DB-168"><span class="linenos">168</span></a> <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-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-169"><a href="#DB-169"><span class="linenos">169</span></a> <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-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-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-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-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-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-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-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-174"><a href="#DB-174"><span class="linenos">174</span></a> <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-175"><a href="#DB-175"><span class="linenos">175</span></a> <span class="k">else</span><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-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-176"><a href="#DB-176"><span class="linenos">176</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="DB-177"><a href="#DB-177"><span class="linenos">177</span></a> </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-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-178"><a href="#DB-178"><span class="linenos">178</span></a>
</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-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-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-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-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-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-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-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-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-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-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-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-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-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-186"><a href="#DB-186"><span class="linenos">186</span></a> <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-187"><a href="#DB-187"><span class="linenos">187</span></a> </span><span id="DB-187"><a href="#DB-187"><span class="linenos">187</span></a> <span class="p">)</span>
</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-188"><a href="#DB-188"><span class="linenos">188</span></a>
</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-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-190"><a href="#DB-190"><span class="linenos">190</span></a> <span class="k">try</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-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-191"><a href="#DB-191"><span class="linenos">191</span></a> <span class="k">try</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-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-193"><a href="#DB-193"><span class="linenos">193</span></a> <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-194"><a href="#DB-194"><span class="linenos">194</span></a> <span class="k">except</span><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-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-195"><a href="#DB-195"><span class="linenos">195</span></a> <span class="k">except</span><span class="p">:</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>
@ -505,26 +506,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-54"><a href="#DB.add_message-54"><span class="linenos">54</span></a> <span class="nd">@validate_call</span> <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>
</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-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-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-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-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-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-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-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-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-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-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-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-61"><a href="#DB.add_message-61"><span class="linenos">61</span></a><span class="sd"> ) VALUES (</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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-69"><a href="#DB.add_message-69"><span class="linenos">69</span></a> <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="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-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-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-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-72"><a href="#DB.add_message-72"><span class="linenos">72</span></a> </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-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><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></pre></div> </span></pre></div>
@ -543,17 +544,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-75"><a href="#DB.set_processed-75"><span class="linenos">75</span></a> <span class="nd">@validate_call</span> <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>
</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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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><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></pre></div> </span></pre></div>
@ -572,17 +573,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-87"><a href="#DB.set_solution-87"><span class="linenos">87</span></a> <span class="nd">@validate_call</span> <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>
</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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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><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></pre></div> </span></pre></div>
@ -601,56 +602,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-102"><a href="#DB.iterate-102"><span class="linenos">102</span></a> <span class="nd">@validate_call</span> <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>
</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-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-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-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-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-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-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-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-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-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-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-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-109"><a href="#DB.iterate-109"><span class="linenos">109</span></a> </span><span id="DB.iterate-110"><a href="#DB.iterate-110"><span class="linenos">110</span></a>
</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-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-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-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-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-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-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-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-114"><a href="#DB.iterate-114"><span class="linenos">114</span></a> <span class="p">}</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-115"><a href="#DB.iterate-115"><span class="linenos">115</span></a> </span><span id="DB.iterate-116"><a href="#DB.iterate-116"><span class="linenos">116</span></a>
</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-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-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-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-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-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-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-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-120"><a href="#DB.iterate-120"><span class="linenos">120</span></a> <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-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-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-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-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-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-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-124"><a href="#DB.iterate-124"><span class="linenos">124</span></a> </span><span id="DB.iterate-125"><a href="#DB.iterate-125"><span class="linenos">125</span></a>
</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-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-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-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-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-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-128"><a href="#DB.iterate-128"><span class="linenos">128</span></a> </span><span id="DB.iterate-129"><a href="#DB.iterate-129"><span class="linenos">129</span></a>
</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-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-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-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-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-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-132"><a href="#DB.iterate-132"><span class="linenos">132</span></a> </span><span id="DB.iterate-133"><a href="#DB.iterate-133"><span class="linenos">133</span></a>
</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-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-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-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-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-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-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-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-137"><a href="#DB.iterate-137"><span class="linenos">137</span></a> </span><span id="DB.iterate-138"><a href="#DB.iterate-138"><span class="linenos">138</span></a>
</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-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-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-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-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-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-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-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-142"><a href="#DB.iterate-142"><span class="linenos">142</span></a> <span class="n">params</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-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-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-144"><a href="#DB.iterate-144"><span class="linenos">144</span></a> </span><span id="DB.iterate-145"><a href="#DB.iterate-145"><span class="linenos">145</span></a>
</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-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-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-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-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-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-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-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-149"><a href="#DB.iterate-149"><span class="linenos">149</span></a> <span class="n">params</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-150"><a href="#DB.iterate-150"><span class="linenos">150</span></a> <span class="p">):</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-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><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></pre></div> </span></pre></div>
@ -668,12 +669,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-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> <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>
</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-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-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-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-159"><a href="#DB.len-159"><span class="linenos">159</span></a><span class="sd"> &quot;&quot;&quot;</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-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-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-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><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></pre></div> </span></pre></div>
@ -693,14 +694,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-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> <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>
</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-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-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-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-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-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-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-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-193"><a href="#DB.by_count-193"><span class="linenos">193</span></a> <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-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-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-195"><a href="#DB.by_count-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="kc">None</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></pre></div> </span></pre></div>

View File

@ -47,6 +47,9 @@
<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>
@ -109,7 +112,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><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-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>
@ -117,202 +120,249 @@
</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><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-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-27"><a href="#L-27"><span class="linenos"> 27</span></a>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> </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-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-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">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-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-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-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-32"><a href="#L-32"><span class="linenos"> 32</span></a> <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-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-33"><a href="#L-33"><span class="linenos"> 33</span></a> <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-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-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-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-36"><a href="#L-36"><span class="linenos"> 36</span></a> <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-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-37"><a href="#L-37"><span class="linenos"> 37</span></a> <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-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-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-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-40"><a href="#L-40"><span class="linenos"> 40</span></a> <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-41"><a href="#L-41"><span class="linenos"> 41</span></a> </span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="p">))</span>
</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-42"><a href="#L-42"><span class="linenos"> 42</span></a>
</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-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-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-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-45"><a href="#L-45"><span class="linenos"> 45</span></a> </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-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-46"><a href="#L-46"><span class="linenos"> 46</span></a>
</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-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-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-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-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-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-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-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-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-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-52"><a href="#L-52"><span class="linenos"> 52</span></a> </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-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-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="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-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-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-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-56"><a href="#L-56"><span class="linenos"> 56</span></a> </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-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-57"><a href="#L-57"><span class="linenos"> 57</span></a>
</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-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-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-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-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-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-61"><a href="#L-61"><span class="linenos"> 61</span></a> </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-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
</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-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">try</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-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-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="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-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-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="n">count</span><span class="o">=</span><span class="n">db_count</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-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-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-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">msg</span><span class="o">=</span><span class="s2">&quot;Added message to queue&quot;</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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <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-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-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-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-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-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-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-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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <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-76"><a href="#L-76"><span class="linenos"> 76</span></a> </span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">)</span>
</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-77"><a href="#L-77"><span class="linenos"> 77</span></a>
</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-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-79"><a href="#L-79"><span class="linenos"> 79</span></a> </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-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-80"><a href="#L-80"><span class="linenos"> 80</span></a>
</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-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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</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-83"><a href="#L-83"><span class="linenos"> 83</span></a> </span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">return</span>
</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-84"><a href="#L-84"><span class="linenos"> 84</span></a>
</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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="c1"># now message processed!</span>
</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="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-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="c1"># increment contacts counter</span> </span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
</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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="c1"># increment contacts counter</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-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-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-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-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</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-92"><a href="#L-92"><span class="linenos"> 92</span></a> </span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span>
</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-93"><a href="#L-93"><span class="linenos"> 93</span></a>
</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-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-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-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="c1"># -&gt; IF</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-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-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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="c1"># send to extract agents</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-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-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"># check which step/ state the message requires the management to do</span> </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-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-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-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="c1"># send to extract agents</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-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-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-105"><a href="#L-105"><span class="linenos">105</span></a> </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-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-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">return</span>
</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-107"><a href="#L-107"><span class="linenos">107</span></a>
</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-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="c1"># -&gt; EL IF</span>
</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="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-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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="c1"># send to solve agents</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-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-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-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">return</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="k">else</span><span class="p">:</span> <span class="c1"># all steps &quot;done&quot;</span> </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-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="c1"># will add solutions received before to `db_message.message.solution`</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-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-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-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-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-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-119"><a href="#L-119"><span class="linenos">119</span></a> </span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span>
</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-120"><a href="#L-120"><span class="linenos">120</span></a>
</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-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="c1"># -&gt; EL IF </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-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-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">else</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-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-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-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-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">return</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"># try again</span> </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-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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="c1"># all steps &quot;done&quot;</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="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-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-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-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-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="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-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-133"><a href="#L-133"><span class="linenos">133</span></a>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> </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-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-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="c1"># yay, message is solved</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-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-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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">else</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">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-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-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-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-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"># search db for extractions already available</span> </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-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-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-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-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 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-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-145"><a href="#L-145"><span class="linenos">145</span></a> <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-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="c1"># check for required extraction</span> </span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>
</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-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-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="c1"># already extracted ? </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-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="c1"># extraction file exists ?</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-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-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-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="c1"># the same data item ?</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 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-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-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-153"><a href="#L-153"><span class="linenos">153</span></a>
</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-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-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-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-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-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-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-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-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-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="p">):</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> </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-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="c1"># break if all extractions found</span> </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-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-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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">break</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-163"><a href="#L-163"><span class="linenos">163</span></a> </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-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-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-165"><a href="#L-165"><span class="linenos">165</span></a> </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-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-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-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-167"><a href="#L-167"><span class="linenos">167</span></a>
</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-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="c1"># all solutions found ?</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> </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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="c1"># require steps again</span> </span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">break</span>
</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-171"><a href="#L-171"><span class="linenos">171</span></a>
</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-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-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-173"><a href="#L-173"><span class="linenos">173</span></a>
</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-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-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-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-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-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">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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="c1"># increment trial</span> </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-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-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-180"><a href="#L-180"><span class="linenos">180</span></a> </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-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-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-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-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-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-183"><a href="#L-183"><span class="linenos">183</span></a>
</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-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-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="p">)</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-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="c1"># reset current solution</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-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-187"><a href="#L-187"><span class="linenos">187</span></a>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> </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-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-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-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-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-191"><a href="#L-191"><span class="linenos">191</span></a> </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-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">else</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="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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="c1"># check for required extraction</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> </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-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-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="c1"># already extracted ? </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-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="c1"># extraction file exists ?</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-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-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-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="c1"># the same data item ?</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-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-200"><a href="#L-200"><span class="linenos">200</span></a> </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-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-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-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-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-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-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-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-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-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-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-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-206"><a href="#L-206"><span class="linenos">206</span></a>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="p">)</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-208"><a href="#L-208"><span class="linenos">208</span></a> </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-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-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">break</span>
</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-210"><a href="#L-210"><span class="linenos">210</span></a>
</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-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-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-212"><a href="#L-212"><span class="linenos">212</span></a>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <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-214"><a href="#L-214"><span class="linenos">214</span></a> </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-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-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="c1"># try again, recycle message</span>
</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-216"><a href="#L-216"><span class="linenos">216</span></a>
</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-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="c1"># require steps again</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-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-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-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-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-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-221"><a href="#L-221"><span class="linenos">221</span></a> </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-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>
@ -334,201 +384,248 @@
</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><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-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-28"><a href="#MessageProcessor-28"><span class="linenos"> 28</span></a>
</span><span id="MessageProcessor-29"><a href="#MessageProcessor-29"><span class="linenos"> 29</span></a> </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-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-30"><a href="#MessageProcessor-30"><span class="linenos"> 30</span></a>
</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-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-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-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-33"><a href="#MessageProcessor-33"><span class="linenos"> 33</span></a> <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-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-34"><a href="#MessageProcessor-34"><span class="linenos"> 34</span></a> <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-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-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-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-37"><a href="#MessageProcessor-37"><span class="linenos"> 37</span></a> <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-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-38"><a href="#MessageProcessor-38"><span class="linenos"> 38</span></a> <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-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-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-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-41"><a href="#MessageProcessor-41"><span class="linenos"> 41</span></a> <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-42"><a href="#MessageProcessor-42"><span class="linenos"> 42</span></a> </span><span id="MessageProcessor-42"><a href="#MessageProcessor-42"><span class="linenos"> 42</span></a> <span class="p">))</span>
</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-43"><a href="#MessageProcessor-43"><span class="linenos"> 43</span></a>
</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-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-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-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-46"><a href="#MessageProcessor-46"><span class="linenos"> 46</span></a> </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-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-47"><a href="#MessageProcessor-47"><span class="linenos"> 47</span></a>
</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-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-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-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-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-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-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-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-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-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-53"><a href="#MessageProcessor-53"><span class="linenos"> 53</span></a> </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-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-54"><a href="#MessageProcessor-54"><span class="linenos"> 54</span></a>
</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-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-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-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-57"><a href="#MessageProcessor-57"><span class="linenos"> 57</span></a> </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-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-58"><a href="#MessageProcessor-58"><span class="linenos"> 58</span></a>
</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-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-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-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-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-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-62"><a href="#MessageProcessor-62"><span class="linenos"> 62</span></a> </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-63"><a href="#MessageProcessor-63"><span class="linenos"> 63</span></a> <span class="k">try</span><span class="p">:</span> </span><span id="MessageProcessor-63"><a href="#MessageProcessor-63"><span class="linenos"> 63</span></a>
</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-64"><a href="#MessageProcessor-64"><span class="linenos"> 64</span></a> <span class="k">try</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-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-66"><a href="#MessageProcessor-66"><span class="linenos"> 66</span></a> </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-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-67"><a href="#MessageProcessor-67"><span class="linenos"> 67</span></a>
</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-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-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-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-70"><a href="#MessageProcessor-70"><span class="linenos"> 70</span></a> <span class="p">)</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-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-71"><a href="#MessageProcessor-71"><span class="linenos"> 71</span></a> <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-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-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-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-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-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-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-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-76"><a href="#MessageProcessor-76"><span class="linenos"> 76</span></a> <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-77"><a href="#MessageProcessor-77"><span class="linenos"> 77</span></a> </span><span id="MessageProcessor-77"><a href="#MessageProcessor-77"><span class="linenos"> 77</span></a> <span class="p">)</span>
</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-78"><a href="#MessageProcessor-78"><span class="linenos"> 78</span></a>
</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-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-80"><a href="#MessageProcessor-80"><span class="linenos"> 80</span></a> </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-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-81"><a href="#MessageProcessor-81"><span class="linenos"> 81</span></a>
</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-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-83"><a href="#MessageProcessor-83"><span class="linenos"> 83</span></a> <span class="k">return</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-84"><a href="#MessageProcessor-84"><span class="linenos"> 84</span></a> </span><span id="MessageProcessor-84"><a href="#MessageProcessor-84"><span class="linenos"> 84</span></a> <span class="k">return</span>
</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-85"><a href="#MessageProcessor-85"><span class="linenos"> 85</span></a>
</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-86"><a href="#MessageProcessor-86"><span class="linenos"> 86</span></a> <span class="c1"># now message processed!</span>
</span><span id="MessageProcessor-87"><a href="#MessageProcessor-87"><span class="linenos"> 87</span></a> </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-88"><a href="#MessageProcessor-88"><span class="linenos"> 88</span></a> <span class="c1"># increment contacts counter</span> </span><span id="MessageProcessor-88"><a href="#MessageProcessor-88"><span class="linenos"> 88</span></a>
</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-89"><a href="#MessageProcessor-89"><span class="linenos"> 89</span></a> <span class="c1"># increment contacts counter</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-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-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-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-92"><a href="#MessageProcessor-92"><span class="linenos"> 92</span></a> <span class="k">return</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-93"><a href="#MessageProcessor-93"><span class="linenos"> 93</span></a> </span><span id="MessageProcessor-93"><a href="#MessageProcessor-93"><span class="linenos"> 93</span></a> <span class="k">return</span>
</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-94"><a href="#MessageProcessor-94"><span class="linenos"> 94</span></a>
</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-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-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-96"><a href="#MessageProcessor-96"><span class="linenos"> 96</span></a> <span class="c1"># -&gt; IF</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-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-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-98"><a href="#MessageProcessor-98"><span class="linenos"> 98</span></a> <span class="c1"># send to extract agents</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-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-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"># check which step/ state the message requires the management to do</span> </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-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-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-104"><a href="#MessageProcessor-104"><span class="linenos">104</span></a> <span class="c1"># send to extract agents</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-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-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-106"><a href="#MessageProcessor-106"><span class="linenos">106</span></a> </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-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-107"><a href="#MessageProcessor-107"><span class="linenos">107</span></a> <span class="k">return</span>
</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-108"><a href="#MessageProcessor-108"><span class="linenos">108</span></a>
</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-109"><a href="#MessageProcessor-109"><span class="linenos">109</span></a> <span class="c1"># -&gt; EL IF</span>
</span><span id="MessageProcessor-110"><a href="#MessageProcessor-110"><span class="linenos">110</span></a> </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-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-111"><a href="#MessageProcessor-111"><span class="linenos">111</span></a> <span class="c1"># send to solve agents</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-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-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-113"><a href="#MessageProcessor-113"><span class="linenos">113</span></a> <span class="k">return</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="k">else</span><span class="p">:</span> <span class="c1"># all steps &quot;done&quot;</span> </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-116"><a href="#MessageProcessor-116"><span class="linenos">116</span></a> </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-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-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-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-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-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-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-120"><a href="#MessageProcessor-120"><span class="linenos">120</span></a> </span><span id="MessageProcessor-120"><a href="#MessageProcessor-120"><span class="linenos">120</span></a> <span class="k">return</span>
</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-121"><a href="#MessageProcessor-121"><span class="linenos">121</span></a>
</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-122"><a href="#MessageProcessor-122"><span class="linenos">122</span></a> <span class="c1"># -&gt; EL IF </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-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-124"><a href="#MessageProcessor-124"><span class="linenos">124</span></a> <span class="k">else</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-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-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-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-126"><a href="#MessageProcessor-126"><span class="linenos">126</span></a> <span class="k">return</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"># try again</span> </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-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-129"><a href="#MessageProcessor-129"><span class="linenos">129</span></a> <span class="c1"># all steps &quot;done&quot;</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="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-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-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-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-133"><a href="#MessageProcessor-133"><span class="linenos">133</span></a> </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-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-134"><a href="#MessageProcessor-134"><span class="linenos">134</span></a>
</span><span id="MessageProcessor-135"><a href="#MessageProcessor-135"><span class="linenos">135</span></a> </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-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-136"><a href="#MessageProcessor-136"><span class="linenos">136</span></a> <span class="c1"># yay, message is solved</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-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-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-138"><a href="#MessageProcessor-138"><span class="linenos">138</span></a> <span class="k">else</span><span class="p">:</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-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-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-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-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"># search db for extractions already available</span> </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-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-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-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-144"><a href="#MessageProcessor-144"><span class="linenos">144</span></a>
</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-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-146"><a href="#MessageProcessor-146"><span class="linenos">146</span></a> <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-147"><a href="#MessageProcessor-147"><span class="linenos">147</span></a> <span class="c1"># check for required extraction</span> </span><span id="MessageProcessor-147"><a href="#MessageProcessor-147"><span class="linenos">147</span></a>
</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-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-149"><a href="#MessageProcessor-149"><span class="linenos">149</span></a> <span class="c1"># already extracted ? </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-150"><a href="#MessageProcessor-150"><span class="linenos">150</span></a> <span class="c1"># extraction file exists ?</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-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-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-152"><a href="#MessageProcessor-152"><span class="linenos">152</span></a> <span class="c1"># the same data item ?</span> </span><span id="MessageProcessor-152"><a href="#MessageProcessor-152"><span class="linenos">152</span></a>
</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-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-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-154"><a href="#MessageProcessor-154"><span class="linenos">154</span></a>
</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-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-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-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-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-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-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-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-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-159"><a href="#MessageProcessor-159"><span class="linenos">159</span></a> <span class="p">):</span>
</span><span id="MessageProcessor-160"><a href="#MessageProcessor-160"><span class="linenos">160</span></a> </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-161"><a href="#MessageProcessor-161"><span class="linenos">161</span></a> <span class="c1"># break if all extractions found</span> </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-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-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-163"><a href="#MessageProcessor-163"><span class="linenos">163</span></a> <span class="k">break</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-164"><a href="#MessageProcessor-164"><span class="linenos">164</span></a> </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-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-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-166"><a href="#MessageProcessor-166"><span class="linenos">166</span></a> </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-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-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-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-168"><a href="#MessageProcessor-168"><span class="linenos">168</span></a>
</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-169"><a href="#MessageProcessor-169"><span class="linenos">169</span></a> <span class="c1"># all solutions found ?</span>
</span><span id="MessageProcessor-170"><a href="#MessageProcessor-170"><span class="linenos">170</span></a> </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-171"><a href="#MessageProcessor-171"><span class="linenos">171</span></a> <span class="c1"># require steps again</span> </span><span id="MessageProcessor-171"><a href="#MessageProcessor-171"><span class="linenos">171</span></a> <span class="k">break</span>
</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-172"><a href="#MessageProcessor-172"><span class="linenos">172</span></a>
</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-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-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-174"><a href="#MessageProcessor-174"><span class="linenos">174</span></a>
</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-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-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-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-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-177"><a href="#MessageProcessor-177"><span class="linenos">177</span></a>
</span><span id="MessageProcessor-178"><a href="#MessageProcessor-178"><span class="linenos">178</span></a> </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-179"><a href="#MessageProcessor-179"><span class="linenos">179</span></a> <span class="c1"># increment trial</span> </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-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-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-181"><a href="#MessageProcessor-181"><span class="linenos">181</span></a> </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-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-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-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-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-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-184"><a href="#MessageProcessor-184"><span class="linenos">184</span></a>
</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-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-186"><a href="#MessageProcessor-186"><span class="linenos">186</span></a> <span class="p">)</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-187"><a href="#MessageProcessor-187"><span class="linenos">187</span></a> <span class="c1"># reset current solution</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-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-188"><a href="#MessageProcessor-188"><span class="linenos">188</span></a>
</span><span id="MessageProcessor-189"><a href="#MessageProcessor-189"><span class="linenos">189</span></a> </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-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-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-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-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-192"><a href="#MessageProcessor-192"><span class="linenos">192</span></a> </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-193"><a href="#MessageProcessor-193"><span class="linenos">193</span></a> <span class="k">else</span><span class="p">:</span> </span><span id="MessageProcessor-193"><a href="#MessageProcessor-193"><span class="linenos">193</span></a> <span class="p">):</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-194"><a href="#MessageProcessor-194"><span class="linenos">194</span></a> <span class="c1"># check for required extraction</span>
</span><span id="MessageProcessor-195"><a href="#MessageProcessor-195"><span class="linenos">195</span></a> </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-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-196"><a href="#MessageProcessor-196"><span class="linenos">196</span></a> <span class="c1"># already extracted ? </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-197"><a href="#MessageProcessor-197"><span class="linenos">197</span></a> <span class="c1"># extraction file exists ?</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-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-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-199"><a href="#MessageProcessor-199"><span class="linenos">199</span></a> <span class="c1"># the same data item ?</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-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-201"><a href="#MessageProcessor-201"><span class="linenos">201</span></a> </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-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-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-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-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-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-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-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-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-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-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-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-207"><a href="#MessageProcessor-207"><span class="linenos">207</span></a>
</span><span id="MessageProcessor-208"><a href="#MessageProcessor-208"><span class="linenos">208</span></a> <span class="p">)</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-209"><a href="#MessageProcessor-209"><span class="linenos">209</span></a> </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-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-210"><a href="#MessageProcessor-210"><span class="linenos">210</span></a> <span class="k">break</span>
</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-211"><a href="#MessageProcessor-211"><span class="linenos">211</span></a>
</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-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-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-213"><a href="#MessageProcessor-213"><span class="linenos">213</span></a>
</span><span id="MessageProcessor-214"><a href="#MessageProcessor-214"><span class="linenos">214</span></a> <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-215"><a href="#MessageProcessor-215"><span class="linenos">215</span></a> </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-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-216"><a href="#MessageProcessor-216"><span class="linenos">216</span></a> <span class="c1"># try again, recycle message</span>
</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-217"><a href="#MessageProcessor-217"><span class="linenos">217</span></a>
</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-218"><a href="#MessageProcessor-218"><span class="linenos">218</span></a> <span class="c1"># require steps again</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-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-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-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-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-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-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>
@ -544,16 +641,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__-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> <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>
</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__-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__-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__-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__-46"><a href="#MessageProcessor.__init__-46"><span class="linenos">46</span></a> </span><span id="MessageProcessor.__init__-47"><a href="#MessageProcessor.__init__-47"><span class="linenos">47</span></a>
</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__-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__-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__-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__-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__-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__-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__-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__-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__-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__-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><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></pre></div> </span></pre></div>
@ -595,6 +692,18 @@
</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">
@ -677,25 +786,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-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> <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>
</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-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-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-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-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-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-62"><a href="#MessageProcessor.new_message-62"><span class="linenos">62</span></a> </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-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-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-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-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-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-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-66"><a href="#MessageProcessor.new_message-66"><span class="linenos">66</span></a> </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-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-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-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-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-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-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-70"><a href="#MessageProcessor.new_message-70"><span class="linenos">70</span></a> <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="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-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-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-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-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-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-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-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-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-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-76"><a href="#MessageProcessor.new_message-76"><span class="linenos">76</span></a> <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></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="kc">null</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;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;: null,</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-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><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-104"><a href="#L-104"><span class="linenos">104</span></a><span class="p">)</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-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-105"><a href="#L-105"><span class="linenos">105</span></a><span class="p">)</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 be 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 contain 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 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(s) 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,119 +605,124 @@ 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 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(s) 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">class</span> <span class="nc">AgentMessage</span><span class="p">(</span><span class="n">RiddleInformation</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">_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-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="c1"># type check of items is done next by pydantic</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-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-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-293"><a href="#L-293"><span class="linenos">293</span></a>
</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-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-295"><a href="#L-295"><span class="linenos">295</span></a> </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-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-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-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-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-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-298"><a href="#L-298"><span class="linenos">298</span></a><span class="sd"> &quot;&quot;&quot;</span>
</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-299"><a href="#L-299"><span class="linenos">299</span></a>
</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-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-301"><a href="#L-301"><span class="linenos">301</span></a> </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-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-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-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-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-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-304"><a href="#L-304"><span class="linenos">304</span></a><span class="sd"> &quot;&quot;&quot;</span>
</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-305"><a href="#L-305"><span class="linenos">305</span></a>
</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-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-307"><a href="#L-307"><span class="linenos">307</span></a> </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-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-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-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-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-310"><a href="#L-310"><span class="linenos">310</span></a><span class="sd"> The riddle to solve.</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-311"><a href="#L-311"><span class="linenos">311</span></a><span class="sd"> &quot;&quot;&quot;</span> </span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> </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-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-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-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-314"><a href="#L-314"><span class="linenos">314</span></a><span class="sd"> The riddle to solve.</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-315"><a href="#L-315"><span class="linenos">315</span></a><span class="sd"> &quot;&quot;&quot;</span>
</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-316"><a href="#L-316"><span class="linenos">316</span></a>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> </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-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-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-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-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-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-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-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">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-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-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 status of the riddle.</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-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">contacts</span> <span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> </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-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"> A counter representing the number of contacts the management had with this message.</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-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-331"><a href="#L-331"><span class="linenos">331</span></a><span class="sd"> &quot;&quot;&quot;</span>
</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-332"><a href="#L-332"><span class="linenos">332</span></a>
</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-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-334"><a href="#L-334"><span class="linenos">334</span></a> </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-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-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-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-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-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-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-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="n">count</span> <span class="p">:</span> <span class="nb">int</span> </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-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"> The count of the message (overall numeric id).</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-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">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-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-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"> An additional message.</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-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">error</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span> </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-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"> If an error occurred.</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-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_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-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-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"> Error message (if `error` )</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-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="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-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-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"> Object representing a database row.</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-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="n">count</span> <span class="p">:</span> <span class="nb">int</span> </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-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"> The count (primary key) of the item.</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-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">sender</span> <span class="p">:</span> <span class="nb">str</span> </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-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 sender of the message.</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-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">recipient</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">sender</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 recipient of the message</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-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">time</span> <span class="p">:</span> <span class="nb">int</span> </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-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 time (unix timestamp) the message was received/ sent.</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-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">message</span> <span class="p">:</span> <span class="n">AgentMessage</span> </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-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 message received/ sent.</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-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">processed</span> <span class="p">:</span> <span class="nb">bool</span> </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-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"> 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-392"><a href="#L-392"><span class="linenos">392</span></a><span class="sd"> The message received/ sent.</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">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-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-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"> Does this message contain a valid solution?</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-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-398"><a href="#L-398"><span class="linenos">398</span></a><span class="sd"> &quot;&quot;&quot;</span>
</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-399"><a href="#L-399"><span class="linenos">399</span></a>
</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>
@ -949,7 +954,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 0x102682480&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x1027331a0&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 0x104a52700&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x104b034c0&gt;, json_schema_input_type=PydanticUndefined)]</span>
</div> </div>
@ -965,7 +970,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 0x102682480&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x1027331a0&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 0x104a52700&gt;), WrapValidator(func=&lt;function _ignore_file_missing at 0x104b034c0&gt;, json_schema_input_type=PydanticUndefined)]]</span>
</div> </div>
@ -1405,12 +1410,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 be 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 contain 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 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(s) 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>
@ -1421,7 +1426,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 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(s) 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>
@ -1455,7 +1460,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 be an <code><a href="#RiddleSolution">RiddleSolution</a></code> afterwards.</p> <p><code><a href="#AgentMessage.solution">AgentMessage.solution</a></code> shall contain an <code><a href="#RiddleSolution">RiddleSolution</a></code> afterwards.</p>
</div> </div>
@ -1483,7 +1488,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 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(s) in <code><a href="#AgentMessage.solution">AgentMessage.solution</a></code>.</p>
</div> </div>
@ -1510,7 +1515,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 at <code><a href="#AgentMessage.solution">AgentMessage.solution</a></code></p> <div class="docstring"><p>True, after the gatekeeper accepts the solution(s) at <code><a href="#AgentMessage.solution">AgentMessage.solution</a></code></p>
</div> </div>
@ -1560,50 +1565,51 @@ 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-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> <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>
</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-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-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-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-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-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-295"><a href="#AgentMessage-295"><span class="linenos">295</span></a><span class="sd"> &quot;&quot;&quot;</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-296"><a href="#AgentMessage-296"><span class="linenos">296</span></a> </span><span id="AgentMessage-300"><a href="#AgentMessage-300"><span class="linenos">300</span></a>
</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-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-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-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-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-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-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-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-301"><a href="#AgentMessage-301"><span class="linenos">301</span></a><span class="sd"> &quot;&quot;&quot;</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-302"><a href="#AgentMessage-302"><span class="linenos">302</span></a> </span><span id="AgentMessage-306"><a href="#AgentMessage-306"><span class="linenos">306</span></a>
</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-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-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-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-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-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-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-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-307"><a href="#AgentMessage-307"><span class="linenos">307</span></a><span class="sd"> &quot;&quot;&quot;</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-308"><a href="#AgentMessage-308"><span class="linenos">308</span></a> </span><span id="AgentMessage-312"><a href="#AgentMessage-312"><span class="linenos">312</span></a>
</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-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-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-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-311"><a href="#AgentMessage-311"><span class="linenos">311</span></a><span class="sd"> The riddle to solve.</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-312"><a href="#AgentMessage-312"><span class="linenos">312</span></a><span class="sd"> &quot;&quot;&quot;</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-313"><a href="#AgentMessage-313"><span class="linenos">313</span></a> </span><span id="AgentMessage-317"><a href="#AgentMessage-317"><span class="linenos">317</span></a>
</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-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-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-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-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-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-317"><a href="#AgentMessage-317"><span class="linenos">317</span></a><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"> (When assigning a single object of `RiddleSolution` will be convert to list with this single object.)</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">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-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-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 status of the riddle.</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-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">contacts</span> <span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span> </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-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"> A counter representing the number of contacts the management had with this message.</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-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-332"><a href="#AgentMessage-332"><span class="linenos">332</span></a><span class="sd"> &quot;&quot;&quot;</span>
</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-333"><a href="#AgentMessage-333"><span class="linenos">333</span></a>
</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-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-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>
@ -1655,13 +1661,14 @@ 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">: <a href="#RiddleSolution">RiddleSolution</a> | None</span> <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>
</div> </div>
<a class="headerlink" href="#AgentMessage.solution"></a> <a class="headerlink" href="#AgentMessage.solution"></a>
<div class="docstring"><p>The solution of the riddle (or empty if no solution available)</p> <div class="docstring"><p>The solutions of the riddle (or empty list if no solutions available)
(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>
@ -1753,30 +1760,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-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> <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>
</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"> The count of the message (overall numeric id).</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-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">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-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-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"> An additional message.</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-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">error</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span> </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-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"> If an error occurred.</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-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_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-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-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"> Error message (if `error` )</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-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>
@ -1882,46 +1889,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-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> <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>
</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"> The count (primary key) of the item.</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-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">sender</span> <span class="p">:</span> <span class="nb">str</span> </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-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 sender of the message.</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-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">recipient</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">sender</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 recipient of the message</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-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">time</span> <span class="p">:</span> <span class="nb">int</span> </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-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 time (unix timestamp) the message was received/ sent.</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-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">message</span> <span class="p">:</span> <span class="n">AgentMessage</span> </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-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 message received/ sent.</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-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">processed</span> <span class="p">:</span> <span class="nb">bool</span> </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-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"> 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-393"><a href="#MessageDbRow-393"><span class="linenos">393</span></a><span class="sd"> The message received/ sent.</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">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-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-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"> Does this message contain a valid solution?</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-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-399"><a href="#MessageDbRow-399"><span class="linenos">399</span></a><span class="sd"> &quot;&quot;&quot;</span>
</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-400"><a href="#MessageDbRow-400"><span class="linenos">400</span></a>
</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,7 +13,8 @@
<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="/api/" target="_blank">&nearr; Documentation: API </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="/docs/" target="_blank">&nearr; Documentation: Code </a></li> <li><a href="/docs/" target="_blank">&nearr; Documentation: Code </a></li>
</ul> </ul>
{% endblock %} {% endblock %}