diff --git a/Implement.md b/Implement.md index 29f44b8..4a9b25c 100644 --- a/Implement.md +++ b/Implement.md @@ -34,13 +34,14 @@ Insbesondere bei Aufgabe, die der Agent nicht lösen kann, kann der Agent die An Damit wird das Lösung des Rätsels (zumindest von diesem Agenten) aufgegeben. Sollte z.B. der Agent zur Extraktion von Bilder keine Antwort geben und gibt aber der Agent zur Extraktion von Audio eine Antwort, so wird die Lösung des Rätsels nicht aufgegeben, aber es sind nur die Daten des Typs Audio extrahiert vorhanden und nutzbar genutzt werden. -Hieraus lässt sich auch ablesen, dass ein Agent evtl. das selbe Rätsel mehrfach bekommt, jeweils mit unterschiedlichen Daten die bereits extrahier sind. +Hieraus lässt sich auch ablesen, dass ein Agent evtl. das selbe Rätsel mehrfach bekommt, jeweils mit unterschiedlichen Daten die bereits extrahiert sind. Dadurch kann ein Agent direkt versuchen ein Rätsel zu lösen und falls die Daten nicht reichen, dies später mit mehr Daten wiederholen. +Das Framework führt die verschiedenen Extraktionen der verschiedenen Agenten zu Audio, Image, Text zusammen, d.h., das Framework stellt immer alle vorhandenen Extraktionen für ein Datensatz in den Nachrichten zusammen (dabei gilt ein Datensatz als gleich, wenn Datei, Typ und Prompt übereinstimmen.) +Die Zusammenführung findet nur innerhalb von Rätseln mit der gleichen ID statt. -> **ToDo** (für Magnus): Das Framework führt bisher die Extraktionen der verschiedenen Agenten zu Audio, Image, Text nicht zusammen. -> Vielleicht sollte dies aber geschehen, sodass immer maximal viel extrahierte Daten in den Nachrichten sind. -> Andernfalls müsste die Agenten wohl selbst sammeln, was es nicht einfacher macht. -> *Idee*: Wenn Management Antworten bzgl. Extraktionen bekommt, filtere db nach id und füge bei allen data items ohne extractions diese hinzu wenn es welche in der db gibt. +Über den Parameter `REQUIRE_FULL_EXTRACT` kann das Management angewiesen werden, zuerst alle Extraktionen aller Agenten abzuwarten, bevor das Rätsel zum Lösen weitergegeben wird. +Falls `REQUIRE_FULL_EXTRACT=true` so muss sichergestellt werden, dass auch alle Agenten (also für jeden Datensatz) irgendwann eine Extraktion bestimmt wird, andernfalls wartet das Management ewig. +Bei `REQUIRE_FULL_EXTRACT=false` bekommt der Agent zum Lösen ein Rätsel dann evtl. doppelt, jeweils mit weiteren Extraktionen. Ein Agent kann eine Antwort aber auch nicht nur stoppen, sondern auch für später aufheben (via ). So kann ein Agent z.B. auf die Lösung einer Unteraufgabe warten und erst anschließend seine Antwort an das Management senden. diff --git a/Readme.md b/Readme.md index 6b2655c..ee11261 100644 --- a/Readme.md +++ b/Readme.md @@ -47,6 +47,13 @@ > Auch das Management und Agenten-Framework wurde neu entworfen, d.h., es können (und werden) noch ein paar Käfer irgendwo lauern. > Bugs also bitte melden und bei Problemen mit dem System nachfragen (magnus.bender@uni-hamburg.de). +## Update Images +- Image für Management + - `docker compose pull` (aktualisiert neu) +- Images für Agenten + - `docker pull git.chai.uni-hamburg.de/ums-agenten/base-agent:cpu-arm64` (oder `:cpu-amd64`) + - `docker compose build` + ## Docker Images Es gibt unter viele verschiedene Docker Images. Die Images stellen die vorbereitete Umgebung da. diff --git a/docker-compose.yml b/docker-compose.yml index 6c33628..2ab8b86 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,8 @@ services: - SOLUTION_MAX_TRIALS=5 # limit to prevent messages in never ending cycles - MESSAGE_MAX_CONTACTS=100 + # wait for all extraction agents to return results before solving a riddle + - REQUIRE_FULL_EXTRACT=false # how to access management (the host name is the name of the service in this file) - MANAGEMENT_URL=http://management # *register* the agents to the management diff --git a/src/extract/agent.py b/src/extract/agent.py index 77b3149..9e80f7c 100644 --- a/src/extract/agent.py +++ b/src/extract/agent.py @@ -13,8 +13,7 @@ import re from typing import Callable from ums.agent import ExtractAudioAgent, ExtractImageAgent, ExtractTextAgent -from ums.utils.types import RiddleData, AgentMessage -from ums.utils.schema import ExtractedData, ExtractedContent, ExtractedPositions +from ums.utils import RiddleData, AgentMessage, ExtractedData, ExtractedContent, ExtractedPositions class SimpleExtractAudioAgent(ExtractAudioAgent): # here we do not have an implementation for extracting audio, diff --git a/src/solve/agent.py b/src/solve/agent.py index c03e0e4..6304449 100644 --- a/src/solve/agent.py +++ b/src/solve/agent.py @@ -14,7 +14,7 @@ import re, random from typing import Callable from ums.agent import SolveAgent -from ums.utils.types import Riddle, RiddleData, RiddleSolution, RiddleDataType, RiddleStatus, AgentMessage +from ums.utils import Riddle, RiddleData, RiddleSolution, RiddleDataType, AgentMessage class SimpleSolveAgent(SolveAgent): diff --git a/src/validate/agent.py b/src/validate/agent.py index ee9ffb0..bb657cb 100644 --- a/src/validate/agent.py +++ b/src/validate/agent.py @@ -12,7 +12,7 @@ import re from typing import Callable from ums.agent import GatekeeperAgent -from ums.utils.types import Riddle, RiddleSolution, AgentMessage +from ums.utils import Riddle, RiddleSolution, AgentMessage class SimpleSolveAgent(GatekeeperAgent):