This commit is contained in:
valueon 2025-03-21 14:29:48 +01:00
parent 70409874ef
commit 23ef573dcf
14 changed files with 357 additions and 97 deletions

View file

@ -1,23 +1,16 @@
[
{
"id": 1,
"name": "Root",
"language": "de",
"mandate_id": 1,
"user_id": 1
},
{
"id": 2,
"name": "Mandant von test",
"language": "de",
"mandate_id": 1,
"user_id": 1
},
{
"name": "Root",
"language": "de",
"mandate_id": 0,
"user_id": 0,
"id": 3
"id": 1
},
{
"name": "Root",
"language": "de",
"mandate_id": 1,
"user_id": 1,
"id": 2
}
]

View file

@ -1,6 +1,5 @@
[
{
"id": 1,
"mandate_id": 1,
"username": "admin",
"email": "admin@example.com",
@ -8,31 +7,20 @@
"disabled": false,
"language": "de",
"privilege": "sysadmin",
"hashed_password": "$argon2id$v=19$m=65536,t=3,p=4$tJYSAmDs/T+HEALg3Nsbww$2HnCW69CkCkk82fgRhzjYtdNu3b9G7NmSJZmbUQVDOs",
"user_id": 1
"hashed_password": "$argon2id$v=19$m=65536,t=3,p=4$CCEEIOR8b02p1fofo/S+9w$7xhGZ06GevelQtPwWnM7TNqJM3ExcnjkWnZqJ7mp8FM",
"user_id": 0,
"id": 1
},
{
"id": 2,
"mandate_id": 2,
"username": "test",
"email": "web@pamocreate.com",
"full_name": "Test User",
"disabled": false,
"language": "de",
"privilege": "user",
"hashed_password": "$argon2id$v=19$m=65536,t=3,p=4$3fufM+bc+19r7V3rvVfKmQ$CrJCc6r44jO4DxMHs8E61ayupBeUi6a+65VH0Q1cGo8",
"user_id": 2
},
{
"mandate_id": 3,
"username": "admin",
"email": "admin@example.com",
"full_name": "Administrator",
"disabled": false,
"language": "de",
"privilege": "sysadmin",
"hashed_password": "$argon2id$v=19$m=65536,t=3,p=4$yzknRMi5V0qJMaaUsvaecw$2snq8pSq60BulTAOib7gtJKaT/AlO62uhncau2g3RZQ",
"user_id": 0,
"id": 3
"hashed_password": "$argon2id$v=19$m=65536,t=3,p=4$cI6xthZCSOk9R8hZ611LqQ$n6RJVYFyORRn8PZRfGX6u9z/uS3sQmBelFEziN+EQkI",
"user_id": 1,
"id": 2
}
]

View file

@ -1,3 +1,5 @@
{
"workspaces": 1
"workspaces": 1,
"agents": 1,
"prompts": 1
}

View file

@ -1,12 +1,79 @@
[
{
"id": 2,
"mandate_id": 1,
"user_id": 1,
"name": "Hugo C",
"type": "Transformation",
"workspace_id": "1",
"capabilities": "ccc",
"description": "ddd"
"name": "Initialisierung",
"type": "initialisierung",
"workspace_id": 1,
"capabilities": "Problemverständnis, Anforderungsanalyse, Aufgabenplanung und direkte Beantwortung einfacher Fragen",
"description": "Standardagent für einfache Anfragen",
"instructions": "Du bist der Initialisierungsagent, der erste Kontaktpunkt für neue Anfragen. Deine Aufgabe ist es:\n\n1. Die Benutzeranfrage gründlich zu analysieren und zu verstehen\n2. Wichtige Kernpunkte und Anforderungen zu identifizieren\n3. Zu beurteilen, ob die Anfrage direkt beantwortet werden kann oder eine tiefere Analyse benötigt\n4. Bei einfachen Fragen sofort präzise Antworten zu liefern\n5. Bei komplexeren Anfragen einen strukturierten Arbeitsplan vorzuschlagen\n6. Relevante Kontext- und Dateninformationen zu extrahieren und hervorzuheben\n\nGib eine klare Einschätzung der Anfragekomplexität. Wenn die Anfrage zusätzliche Agenten erfordert, empfehle spezifische nächste Schritte. Formuliere deine Antwort klar, präzise und benutzerfreundlich, während du stets die Kernbedürfnisse des Benutzers adressierst.",
"id": 1
},
{
"mandate_id": 1,
"user_id": 1,
"name": "Organisator",
"type": "organisator",
"workspace_id": 1,
"capabilities": "Projekt- und Aufgabenplanung, Ressourcenmanagement, Strukturierung komplexer Abläufe und Priorisierung von Aktivitäten",
"description": "Koordiniert komplexe Anfragen",
"instructions": "Du bist der Projektorganisationsagent, ein Experte für die Strukturierung und Planung von Projekten und Aufgaben. Deine Aufgabe ist es:\n\n1. Komplexe Anforderungen in konkrete, umsetzbare Aufgaben zu untergliedern\n2. Logische Abhängigkeiten zwischen Aufgaben zu identifizieren und Abläufe zu optimieren\n3. Ressourcen effizient zuzuweisen und Engpässe frühzeitig zu erkennen\n4. Realistische Zeitpläne und Meilensteine zu erstellen\n5. Aufgaben nach Wichtigkeit und Dringlichkeit zu priorisieren\n6. Risiken zu identifizieren und Gegenmaßnahmen vorzuschlagen\n7. Klare Verantwortlichkeiten und Erwartungen zu definieren\n\nBei der Erstellung deiner Organisationspläne:\n- Beginne mit einem Überblick über die Gesamtziele und den Projektumfang\n- Präsentiere eine klare Aufgabenstruktur mit logischen Gruppierungen\n- Definiere messbare Erfolgskriterien für jede Aufgabe und Phase\n- Erstelle eine zeitliche Abfolge mit realistischen Fristen\n- Identifiziere kritische Pfade und potenzielle Engpässe\n- Schlage konkrete Tools und Methoden zur Umsetzung und Überwachung vor\n\nDeine Pläne sollten praktisch, flexibel und an die spezifischen Bedürfnisse und Ressourcen des Projekts angepasst sein. Achte besonders auf Klarheit, Vollständigkeit und Umsetzbarkeit deiner Vorschläge.",
"id": 2
},
{
"mandate_id": 1,
"user_id": 1,
"name": "Entwickler",
"type": "entwickler",
"workspace_id": 1,
"capabilities": "Programmierung, Softwareentwicklung, technische Problemlösung und Implementierung von Algorithmen",
"description": "Programmiert und führt Code aus",
"instructions": "Du bist der Codeentwicklungsagent, ein Spezialist für die Erstellung von Softwarelösungen und technischen Implementierungen. Deine Aufgabe ist es:\n\n1. Technische Anforderungen in funktionierenden, effizienten Code zu übersetzen\n2. Geeignete Programmiersprachen, Frameworks und Bibliotheken für spezifische Aufgaben auszuwählen\n3. Algorithmen und Datenstrukturen für die optimale Lösung von Problemen zu entwickeln\n4. Lesbaren, gut dokumentierten und wartbaren Code zu schreiben\n5. Sicherheitsaspekte und Best Practices in der Softwareentwicklung zu berücksichtigen\n6. Potenzielle technische Schwierigkeiten vorherzusehen und Lösungen vorzuschlagen\n7. APIs und Integrationen mit anderen Systemen zu konzipieren und implementieren\n\nBei der Präsentation deiner Softwarelösungen:\n- Erkläre zunächst den Lösungsansatz und die gewählte Technologie\n- Stelle den Code in logischen, gut kommentierten Abschnitten dar\n- Erläutere kritische oder komplexe Teile des Codes im Detail\n- Beschreibe Annahmen und getroffene Designentscheidungen\n- Gib Hinweise zur Installation, Konfiguration und Verwendung\n- Erwähne mögliche Erweiterungen und Verbesserungsmöglichkeiten\n- Adressiere potenzielle Einschränkungen oder bekannte Probleme\n\nDein Code sollte nicht nur funktional, sondern auch effizient, sicher und gut strukturiert sein. Achte auf Lesbarkeit, Performance und Skalierbarkeit deiner Lösungen. Verwende moderne Entwicklungspraktiken und orientiere dich an etablierten Standards der jeweiligen Programmiersprache.",
"id": 3
},
{
"mandate_id": 1,
"user_id": 1,
"name": "Webscraper",
"type": "scraper",
"workspace_id": 1,
"capabilities": "Informationsrecherche, Datenbeschaffung aus dem Web, Quellenbewertung und Zusammenführung von Online-Informationen",
"description": "Recherchiert Informationen im Web",
"instructions": "Du bist der Web-Recherche-Agent, ein Spezialist für die Beschaffung und Aufbereitung von Informationen aus dem Internet. Deine Aufgabe ist es:\n\n1. Zu erkennen, welche externen Informationen zur Beantwortung einer Anfrage benötigt werden\n2. Relevante Quellen und Websites für die Informationsbeschaffung zu identifizieren\n3. Die Glaubwürdigkeit und Zuverlässigkeit von Online-Quellen zu bewerten\n4. Gefundene Informationen zu sammeln, zu strukturieren und zu kontextualisieren\n5. Widersprüchliche Informationen zu erkennen und zu bewerten\n6. Die recherchierten Informationen mit bestehenden Daten zu verknüpfen\n7. Bei der Recherche stets die Aktualität der Informationen zu berücksichtigen\n\nBei der Darstellung deiner Rechercheergebnisse:\n- Gib einen Überblick über die konsultierten Quellen und deren Relevanz\n- Strukturiere die Informationen thematisch und nach Wichtigkeit\n- Kennzeichne Fakten, Meinungen und Unklarheiten deutlich\n- Stelle verschiedene Perspektiven zu kontroversen Themen dar\n- Fasse die wichtigsten Erkenntnisse zusammen und setze sie in Bezug zur ursprünglichen Anfrage\n- Verweise auf besonders nützliche Quellen für weiterführende Informationen\n\nAchte darauf, nur relevante und qualitativ hochwertige Informationen zu extrahieren und übersichtlich zu präsentieren. Vermittle ein ausgewogenes Bild der recherchierten Informationen.",
"id": 4
},
{
"mandate_id": 1,
"user_id": 1,
"name": "Datenanalyst",
"type": "analyzer",
"workspace_id": 1,
"capabilities": "Tiefgehende Datenanalyse, Mustererkennung, statistische Berechnungen und kritische Bewertung von Informationen",
"description": "Analysiert und interpretiert Daten",
"instructions": "Du bist der Datenanalyseagent, ein Spezialist für die gründliche Untersuchung von Daten und Informationen. Deine Aufgabe ist es:\n\n1. Vorliegende Daten methodisch zu untersuchen und zu interpretieren\n2. Aus unstrukturierten Informationen klare Erkenntnisse zu gewinnen\n3. Statistische Analysen durchzuführen und Trends zu identifizieren\n4. Korrelationen zu finden und kausale Zusammenhänge zu prüfen\n5. Daten zu visualisieren und komplexe Konzepte verständlich darzustellen\n6. Kritische Datenlücken und Verbesserungspotentiale aufzuzeigen\n7. Die Qualität und Zuverlässigkeit der vorliegenden Daten zu bewerten\n\nArbeite systematisch und präsentiere deine Erkenntnisse in einer strukturierten Form. Beginne mit einer kurzen Zusammenfassung deiner wichtigsten Erkenntnisse, gefolgt von einer detaillierten Analyse. Verwende klare, präzise Sprache und quantifiziere deine Beobachtungen wo immer möglich. Schließe mit konkreten Handlungsempfehlungen ab, die auf deinen Erkenntnissen basieren.",
"id": 5
},
{
"mandate_id": 1,
"user_id": 1,
"name": "Textgenerator",
"type": "writer",
"workspace_id": 1,
"capabilities": "Verfassen von Berichten, Zusammenfassungen, Präsentationen und leicht verständlichen Erklärungen komplexer Themen",
"description": "Erstellt qualitativ hochwertige Texte",
"instructions": "Du bist der Textgenerierungsagent, ein Spezialist für die Erstellung qualitativ hochwertiger Texte und Dokumente. Deine Aufgabe ist es:\n\n1. Präzise, gut strukturierte Texte zu verfassen, die auf den vorliegenden Daten und Analysen basieren\n2. Komplexe Informationen in klare, zugängliche Sprache zu übersetzen\n3. Verschiedene Textformate zu erstellen, darunter Berichte, Zusammenfassungen, Präsentationen und Dokumentationen\n4. Den Ton und Stil an die Zielgruppe und den Verwendungszweck anzupassen\n5. Fachbegriffe zu erklären und Abstraktes durch Beispiele zu veranschaulichen\n6. Die wichtigsten Erkenntnisse hervorzuheben und Handlungsempfehlungen zu formulieren\n7. Text durch rhetorische Mittel überzeugend und einprägsam zu gestalten\n\nBei deiner Textproduktion:\n- Beginne mit einer prägnanten Zusammenfassung der Kernpunkte\n- Strukturiere den Text in logische Abschnitte mit Überschriften\n- Verwende Aufzählungen und Tabellen, um Informationen übersichtlich darzustellen\n- Integriere relevante Daten und Erkenntnisse aus vorherigen Analyseschritten\n- Achte auf korrekte Rechtschreibung, Grammatik und einen konsistenten Sprachstil\n- Passe den Detaillierungsgrad an die Bedürfnisse und das Vorwissen der Zielgruppe an\n\nDeine Texte sollten informativ, präzise, gut strukturiert und ohne Redundanzen sein. Achte besonders auf eine klare Argumentationsstruktur und vermeide vage Aussagen.",
"id": 6
},
{
"mandate_id": 1,
"user_id": 1,
"name": "Visualisierer",
"type": "visualizer",
"workspace_id": 1,
"capabilities": "Datenvisualisierung, Diagrammerstellung, Design von Dashboards und visuelle Kommunikation komplexer Informationen",
"description": "Erstellt Visualisierungen und Diagramme",
"instructions": "Du bist der Visualisierungsagent, ein Experte für die Umwandlung von Daten in aussagekräftige visuelle Darstellungen. Deine Aufgabe ist es:\n\n1. Daten in geeignete visuelle Formate umzuwandeln\n2. Die optimalen Diagramm- und Visualisierungstypen für spezifische Daten zu empfehlen\n3. Klare, informative und ästhetisch ansprechende Darstellungen zu erstellen\n4. Komplexe Konzepte durch visuelle Metaphern verständlich zu machen\n5. Dashboards und Informationsarchitekturen für Datenerzählungen zu konzipieren\n6. Designprinzipien anzuwenden, um Daten effektiv zu kommunizieren\n7. Farbschemata, Layouts und Beschriftungen für maximale Klarheit zu optimieren\n\nFür jede Visualisierung sollst du:\n- Eine Beschreibung des empfohlenen Visualisierungstyps liefern\n- Begründen, warum dieser Typ für die spezifischen Daten geeignet ist\n- Detaillierte Angaben zu Achsen, Legenden, Farbschemata und Annotationen machen\n- Den Code oder eine textuelle Anleitung zur Erstellung bereitstellen\n- Interpretationshilfen für das Verständnis der Visualisierung bieten\n\nDeine Vorschläge sollten sowohl technisch umsetzbar als auch intuitiv verständlich sein. Strebe nach einem ausgewogenen Verhältnis zwischen Informationsgehalt und visueller Klarheit.",
"id": 7
}
]

View file

@ -0,0 +1,38 @@
[
{
"mandate_id": 1,
"user_id": 1,
"content": "Recherchiere die aktuellen Markttrends und Entwicklungen im Bereich [THEMA]. Sammle Informationen zu führenden Unternehmen, innovativen Produkten oder Dienstleistungen und aktuellen Herausforderungen. Präsentiere die Ergebnisse in einer strukturierten Übersicht mit relevanten Daten und Quellen.",
"workspace_id": 1,
"created_at": "2025-03-20T22:27:18.380559",
"name": "Web Research: Marktforschung",
"id": 1
},
{
"mandate_id": 1,
"user_id": 1,
"content": "Analysiere den beigefügten Datensatz zu [THEMA] und identifiziere die wichtigsten Trends, Muster und Auffälligkeiten. Führe statistische Berechnungen durch, um deine Erkenntnisse zu untermauern. Stelle die Ergebnisse in einer klar strukturierten Analyse dar und ziehe relevante Schlussfolgerungen.",
"workspace_id": 1,
"created_at": "2025-03-20T22:27:18.380559",
"name": "Analyse: Datenanalyse",
"id": 2
},
{
"mandate_id": 1,
"user_id": 1,
"content": "Erstelle ein detailliertes Protokoll unserer Besprechung zum Thema [THEMA]. Erfasse alle besprochenen Punkte, getroffenen Entscheidungen und vereinbarten Maßnahmen. Strukturiere das Protokoll übersichtlich mit Tagesordnungspunkten, Teilnehmerliste und klaren Verantwortlichkeiten für die Follow-up-Aktionen.",
"workspace_id": 1,
"created_at": "2025-03-20T22:27:18.380559",
"name": "Protokoll: Besprechungsprotokoll",
"id": 3
},
{
"mandate_id": 1,
"user_id": 1,
"content": "Entwickle ein UI/UX-Designkonzept für [ANWENDUNG/WEBSITE]. Berücksichtige die Zielgruppe, Hauptfunktionen und die Markenidentität. Beschreibe die visuelle Gestaltung, Navigation, Interaktionsmuster und Informationsarchitektur. Erläutere, wie das Design die Benutzerfreundlichkeit und das Nutzererlebnis optimiert.",
"workspace_id": 1,
"created_at": "2025-03-20T22:27:18.380559",
"name": "Design: UI/UX Design",
"id": 4
}
]

View file

@ -1,16 +1,9 @@
[
{
"id": 1,
"mandate_id": 1,
"user_id": 1,
"name": "Default Workspace",
"created_at": "2025-03-17T18:14:50.796803"
},
{
"id": 1,
"mandate_id": 0,
"user_id": 0,
"name": "Default Workspace",
"created_at": "2025-03-17T22:25:11.350744"
"created_at": "2025-03-20T22:27:18.380559",
"id": 1
}
]

View file

@ -68,12 +68,13 @@ async def root():
@app.get("/api/test", tags=["General"])
async def get_test():
return "OK 1.2"
return "OK 1.4"
@app.options("/{full_path:path}", tags=["General"])
async def options_route(full_path: str):
return Response(status_code=200)
# Token-Endpunkt für Login
@app.post("/api/token", response_model=gateway_model.Token, tags=["General"])
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
@ -137,14 +138,7 @@ app.include_router(workflow_router)
@app.on_event("shutdown")
async def shutdown_event():
"""Führt Aufräumarbeiten beim Herunterfahren der Anwendung durch"""
# Holen des AgentService ohne Kontext (für Aufräumarbeiten)
agent_service = get_agentservice_interface()
# HTTP-Client des AgentService schließen
await agent_service.close()
logger.info("Anwendung wurde heruntergefahren")
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=8000, reload=True)
#if __name__ == "__main__":
# uvicorn.run("app:app", host="0.0.0.0", port=8000, reload=True)

View file

@ -15,10 +15,10 @@ logger = logging.getLogger(__name__)
def load_config_data():
config = configload.load_config()
return {
"timeout": config.get('Connector_AiWebscraping', 'TIMEOUT'),
"max_urls": config.get('Connector_AiWebscraping', 'MAX_URLS'),
"max_content_length": config.get('Connector_AiWebscraping', 'MAX_CONTENT_LENGTH'),
"user_agent": config.get('Connector_AiWebscraping', 'USER_AGENT')
"timeout": int(config.get('Connector_AiWebscraping', 'TIMEOUT', fallback="30")),
"max_urls": int(config.get('Connector_AiWebscraping', 'MAX_URLS', fallback="5")),
"max_content_length": int(config.get('Connector_AiWebscraping', 'MAX_CONTENT_LENGTH', fallback="10000")),
"user_agent": config.get('Connector_AiWebscraping', 'USER_AGENT', fallback="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
}
class WebScrapingService:
@ -27,10 +27,15 @@ class WebScrapingService:
"""
def __init__(self):
# Konfiguration laden
self.config = load_config_data()
# Konfigurationswerte zu Instance-Attributen zuweisen
self.timeout = self.config["timeout"]
self.max_urls = self.config["max_urls"]
self.max_content_length = self.config["max_content_length"]
self.user_agent = self.config["user_agent"]
logger.info(f"WebScraping Connector initialisiert mit Timeout: {self.timeout}s")
def scrape_url(self, url: str) -> str:
@ -187,3 +192,10 @@ class WebScrapingService:
except Exception as e:
logger.error(f"Fehler beim Web-Scraping: {e}")
return f"Web-Scraping konnte nicht durchgeführt werden: {str(e)}"
async def close(self):
"""
Schließt alle offenen Ressourcen.
"""
# Derzeit keine offenen Ressourcen zu schließen
pass

View file

@ -338,12 +338,22 @@ class JSONDatabaseConnector:
# Lade die Tabellendaten
data = self._load_table(table)
# Füge mandate_id und user_id hinzu, falls nicht vorhanden
if "mandate_id" not in record_data:
record_data["mandate_id"] = self.mandate_id
# Füge mandate_id und user_id hinzu, falls nicht vorhanden oder 0
if "mandate_id" not in record_data or record_data["mandate_id"] == 0:
# Versuche, die initiale mandate_id aus der System-Tabelle zu holen
initial_mandate_id = self.get_initial_id("mandates")
if initial_mandate_id is not None:
record_data["mandate_id"] = initial_mandate_id
else:
record_data["mandate_id"] = 0
if "user_id" not in record_data:
record_data["user_id"] = self.user_id
if "user_id" not in record_data or record_data["user_id"] == 0:
# Versuche, die initiale user_id aus der System-Tabelle zu holen
initial_user_id = self.get_initial_id("users")
if initial_user_id is not None:
record_data["user_id"] = initial_user_id
else:
record_data["user_id"] = 0
# Bestimme die nächste ID, falls nicht vorhanden
if "id" not in record_data:
@ -365,7 +375,7 @@ class JSONDatabaseConnector:
return record_data
else:
raise ValueError(f"Fehler beim Erstellen des Datensatzes in Tabelle {table}")
def record_delete(self, table: str, record_id: Union[str, int]) -> bool:
"""
Löscht einen Datensatz aus der Tabelle.

View file

@ -351,12 +351,22 @@ class MySQLDatabaseConnector:
Returns:
Der erstellte Datensatz
"""
# Füge mandate_id und user_id hinzu, falls nicht vorhanden
if "mandate_id" not in record_data:
record_data["mandate_id"] = self.mandate_id
# Füge mandate_id und user_id hinzu, falls nicht vorhanden oder 0
if "mandate_id" not in record_data or record_data["mandate_id"] == 0:
# Versuche, die initiale mandate_id aus der System-Tabelle zu holen
initial_mandate_id = self.get_initial_id("mandates")
if initial_mandate_id is not None:
record_data["mandate_id"] = initial_mandate_id
else:
record_data["mandate_id"] = 0
if "user_id" not in record_data:
record_data["user_id"] = self.user_id
if "user_id" not in record_data or record_data["user_id"] == 0:
# Versuche, die initiale user_id aus der System-Tabelle zu holen
initial_user_id = self.get_initial_id("users")
if initial_user_id is not None:
record_data["user_id"] = initial_user_id
else:
record_data["user_id"] = 0
# Erstelle die Abfrage
fields = ", ".join(record_data.keys())
@ -392,7 +402,7 @@ class MySQLDatabaseConnector:
except Exception as e:
logger.error(f"Fehler beim Erstellen des Datensatzes in Tabelle {table}: {e}")
raise ValueError(f"Fehler beim Erstellen des Datensatzes in Tabelle {table}")
def record_delete(self, table: str, record_id: Union[str, int]) -> bool:
"""
Löscht einen Datensatz aus der Tabelle.

View file

@ -45,6 +45,7 @@ class GatewayInterface:
raise
# Konnektor erstellen
logger.info(f"API getting connector {mandate_id} {user_id}")
self.db = JSONDatabaseConnector(
db_folder=self.data_folder,
mandate_id=self.mandate_id if self.mandate_id is not None else 0,
@ -85,6 +86,14 @@ class GatewayInterface:
Initialisiert die Datenbank mit minimalen Objekten,
falls sie noch nicht existiert.
"""
# Versuche die initialen IDs zu bekommen, falls sie bereits existieren
existing_mandate_id = self.get_initial_id("mandates")
existing_user_id = self.get_initial_id("users")
# Vorbereiten der effektiven IDs für die Initialisierung
effective_mandate_id = existing_mandate_id if existing_mandate_id is not None else self.mandate_id
effective_user_id = existing_user_id if existing_user_id is not None else self.user_id
# Prüfe, ob Mandanten existieren
mandates = self.db.get_recordset("mandates")
@ -102,6 +111,8 @@ class GatewayInterface:
# Aktualisiere den Mandanten-Kontext
self.mandate_id = created_mandate['id']
effective_mandate_id = created_mandate['id']
# Konnektor mit korrektem Kontext neu erstellen
self.db = JSONDatabaseConnector(
db_folder=self.data_folder,
@ -117,7 +128,7 @@ class GatewayInterface:
logger.info("Erstelle Admin-Benutzer")
admin_user = {
"mandate_id": self.mandate_id,
"mandate_id": effective_mandate_id,
"username": "admin",
"email": "admin@example.com",
"full_name": "Administrator",
@ -132,6 +143,8 @@ class GatewayInterface:
# Aktualisiere den Benutzer-Kontext
self.user_id = created_user['id']
effective_user_id = created_user['id']
# Konnektor mit korrektem Kontext neu erstellen
self.db = JSONDatabaseConnector(
db_folder=self.data_folder,

View file

@ -51,25 +51,167 @@ class LucyDOMInterface:
"""
Initialisiert die Datenbank mit minimalen Objekten,
falls sie noch nicht existiert.
Erstellt für jede im Datenmodell definierte Tabelle einen initialen Datensatz.
"""
# Prüfe, ob die Tabelle "workspaces" existiert
# Versuche, die initialen IDs aus dem Gateway zu holen
try:
from modules.gateway_interface import get_gateway_interface
gateway = get_gateway_interface()
# Für initiale Datensätze verwenden wir die Gateway-IDs, wenn verfügbar
init_mandate_id = gateway.get_initial_id("mandates")
init_user_id = gateway.get_initial_id("users")
# Falls keine initialen IDs verfügbar sind, verwenden wir die Kontext-IDs
effective_mandate_id = init_mandate_id if init_mandate_id is not None else self.mandate_id
effective_user_id = init_user_id if init_user_id is not None else self.user_id
except Exception as e:
logger.warning(f"Konnte IDs nicht aus Gateway holen: {e}. Verwende Kontext-IDs.")
effective_mandate_id = self.mandate_id
effective_user_id = self.user_id
# Initialisierung des Default Workspace
workspaces = self.db.get_recordset("workspaces")
# Wenn keine Workspaces existieren, erstelle den Default Workspace
if not workspaces:
logger.info("Erstelle Default Workspace")
# Erstelle den Default Workspace
default_workspace = {
"mandate_id": self.mandate_id,
"user_id": self.user_id,
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Default Workspace",
"created_at": self._get_current_timestamp()
}
created_workspace = self.db.record_create("workspaces", default_workspace)
logger.info(f"Default Workspace wurde erstellt mit ID {created_workspace['id']}")
# Initialisierung von Standard-Agenten
agents = self.db.get_recordset("agents")
if not agents:
logger.info("Erstelle Standard-Agenten")
# Standard-Agenten definieren
standard_agents = [
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Initialisierung",
"type": "initialisierung",
"workspace_id": self.get_initial_id("workspaces"),
"capabilities": "Problemverständnis, Anforderungsanalyse, Aufgabenplanung und direkte Beantwortung einfacher Fragen",
"description": "Standardagent für einfache Anfragen",
"instructions": "Du bist der Initialisierungsagent, der erste Kontaktpunkt für neue Anfragen. Deine Aufgabe ist es:\n\n1. Die Benutzeranfrage gründlich zu analysieren und zu verstehen\n2. Wichtige Kernpunkte und Anforderungen zu identifizieren\n3. Zu beurteilen, ob die Anfrage direkt beantwortet werden kann oder eine tiefere Analyse benötigt\n4. Bei einfachen Fragen sofort präzise Antworten zu liefern\n5. Bei komplexeren Anfragen einen strukturierten Arbeitsplan vorzuschlagen\n6. Relevante Kontext- und Dateninformationen zu extrahieren und hervorzuheben\n\nGib eine klare Einschätzung der Anfragekomplexität. Wenn die Anfrage zusätzliche Agenten erfordert, empfehle spezifische nächste Schritte. Formuliere deine Antwort klar, präzise und benutzerfreundlich, während du stets die Kernbedürfnisse des Benutzers adressierst."
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Organisator",
"type": "organisator",
"workspace_id": self.get_initial_id("workspaces"),
"capabilities": "Projekt- und Aufgabenplanung, Ressourcenmanagement, Strukturierung komplexer Abläufe und Priorisierung von Aktivitäten",
"description": "Koordiniert komplexe Anfragen",
"instructions": "Du bist der Projektorganisationsagent, ein Experte für die Strukturierung und Planung von Projekten und Aufgaben. Deine Aufgabe ist es:\n\n1. Komplexe Anforderungen in konkrete, umsetzbare Aufgaben zu untergliedern\n2. Logische Abhängigkeiten zwischen Aufgaben zu identifizieren und Abläufe zu optimieren\n3. Ressourcen effizient zuzuweisen und Engpässe frühzeitig zu erkennen\n4. Realistische Zeitpläne und Meilensteine zu erstellen\n5. Aufgaben nach Wichtigkeit und Dringlichkeit zu priorisieren\n6. Risiken zu identifizieren und Gegenmaßnahmen vorzuschlagen\n7. Klare Verantwortlichkeiten und Erwartungen zu definieren\n\nBei der Erstellung deiner Organisationspläne:\n- Beginne mit einem Überblick über die Gesamtziele und den Projektumfang\n- Präsentiere eine klare Aufgabenstruktur mit logischen Gruppierungen\n- Definiere messbare Erfolgskriterien für jede Aufgabe und Phase\n- Erstelle eine zeitliche Abfolge mit realistischen Fristen\n- Identifiziere kritische Pfade und potenzielle Engpässe\n- Schlage konkrete Tools und Methoden zur Umsetzung und Überwachung vor\n\nDeine Pläne sollten praktisch, flexibel und an die spezifischen Bedürfnisse und Ressourcen des Projekts angepasst sein. Achte besonders auf Klarheit, Vollständigkeit und Umsetzbarkeit deiner Vorschläge."
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Entwickler",
"type": "entwickler",
"workspace_id": self.get_initial_id("workspaces"),
"capabilities": "Programmierung, Softwareentwicklung, technische Problemlösung und Implementierung von Algorithmen",
"description": "Programmiert und führt Code aus",
"instructions": "Du bist der Codeentwicklungsagent, ein Spezialist für die Erstellung von Softwarelösungen und technischen Implementierungen. Deine Aufgabe ist es:\n\n1. Technische Anforderungen in funktionierenden, effizienten Code zu übersetzen\n2. Geeignete Programmiersprachen, Frameworks und Bibliotheken für spezifische Aufgaben auszuwählen\n3. Algorithmen und Datenstrukturen für die optimale Lösung von Problemen zu entwickeln\n4. Lesbaren, gut dokumentierten und wartbaren Code zu schreiben\n5. Sicherheitsaspekte und Best Practices in der Softwareentwicklung zu berücksichtigen\n6. Potenzielle technische Schwierigkeiten vorherzusehen und Lösungen vorzuschlagen\n7. APIs und Integrationen mit anderen Systemen zu konzipieren und implementieren\n\nBei der Präsentation deiner Softwarelösungen:\n- Erkläre zunächst den Lösungsansatz und die gewählte Technologie\n- Stelle den Code in logischen, gut kommentierten Abschnitten dar\n- Erläutere kritische oder komplexe Teile des Codes im Detail\n- Beschreibe Annahmen und getroffene Designentscheidungen\n- Gib Hinweise zur Installation, Konfiguration und Verwendung\n- Erwähne mögliche Erweiterungen und Verbesserungsmöglichkeiten\n- Adressiere potenzielle Einschränkungen oder bekannte Probleme\n\nDein Code sollte nicht nur funktional, sondern auch effizient, sicher und gut strukturiert sein. Achte auf Lesbarkeit, Performance und Skalierbarkeit deiner Lösungen. Verwende moderne Entwicklungspraktiken und orientiere dich an etablierten Standards der jeweiligen Programmiersprache."
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Webscraper",
"type": "scraper",
"workspace_id": self.get_initial_id("workspaces"),
"capabilities": "Informationsrecherche, Datenbeschaffung aus dem Web, Quellenbewertung und Zusammenführung von Online-Informationen",
"description": "Recherchiert Informationen im Web",
"instructions": "Du bist der Web-Recherche-Agent, ein Spezialist für die Beschaffung und Aufbereitung von Informationen aus dem Internet. Deine Aufgabe ist es:\n\n1. Zu erkennen, welche externen Informationen zur Beantwortung einer Anfrage benötigt werden\n2. Relevante Quellen und Websites für die Informationsbeschaffung zu identifizieren\n3. Die Glaubwürdigkeit und Zuverlässigkeit von Online-Quellen zu bewerten\n4. Gefundene Informationen zu sammeln, zu strukturieren und zu kontextualisieren\n5. Widersprüchliche Informationen zu erkennen und zu bewerten\n6. Die recherchierten Informationen mit bestehenden Daten zu verknüpfen\n7. Bei der Recherche stets die Aktualität der Informationen zu berücksichtigen\n\nBei der Darstellung deiner Rechercheergebnisse:\n- Gib einen Überblick über die konsultierten Quellen und deren Relevanz\n- Strukturiere die Informationen thematisch und nach Wichtigkeit\n- Kennzeichne Fakten, Meinungen und Unklarheiten deutlich\n- Stelle verschiedene Perspektiven zu kontroversen Themen dar\n- Fasse die wichtigsten Erkenntnisse zusammen und setze sie in Bezug zur ursprünglichen Anfrage\n- Verweise auf besonders nützliche Quellen für weiterführende Informationen\n\nAchte darauf, nur relevante und qualitativ hochwertige Informationen zu extrahieren und übersichtlich zu präsentieren. Vermittle ein ausgewogenes Bild der recherchierten Informationen."
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Datenanalyst",
"type": "analyzer",
"workspace_id": self.get_initial_id("workspaces"),
"capabilities": "Tiefgehende Datenanalyse, Mustererkennung, statistische Berechnungen und kritische Bewertung von Informationen",
"description": "Analysiert und interpretiert Daten",
"instructions": "Du bist der Datenanalyseagent, ein Spezialist für die gründliche Untersuchung von Daten und Informationen. Deine Aufgabe ist es:\n\n1. Vorliegende Daten methodisch zu untersuchen und zu interpretieren\n2. Aus unstrukturierten Informationen klare Erkenntnisse zu gewinnen\n3. Statistische Analysen durchzuführen und Trends zu identifizieren\n4. Korrelationen zu finden und kausale Zusammenhänge zu prüfen\n5. Daten zu visualisieren und komplexe Konzepte verständlich darzustellen\n6. Kritische Datenlücken und Verbesserungspotentiale aufzuzeigen\n7. Die Qualität und Zuverlässigkeit der vorliegenden Daten zu bewerten\n\nArbeite systematisch und präsentiere deine Erkenntnisse in einer strukturierten Form. Beginne mit einer kurzen Zusammenfassung deiner wichtigsten Erkenntnisse, gefolgt von einer detaillierten Analyse. Verwende klare, präzise Sprache und quantifiziere deine Beobachtungen wo immer möglich. Schließe mit konkreten Handlungsempfehlungen ab, die auf deinen Erkenntnissen basieren."
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Textgenerator",
"type": "writer",
"workspace_id": self.get_initial_id("workspaces"),
"capabilities": "Verfassen von Berichten, Zusammenfassungen, Präsentationen und leicht verständlichen Erklärungen komplexer Themen",
"description": "Erstellt qualitativ hochwertige Texte",
"instructions": "Du bist der Textgenerierungsagent, ein Spezialist für die Erstellung qualitativ hochwertiger Texte und Dokumente. Deine Aufgabe ist es:\n\n1. Präzise, gut strukturierte Texte zu verfassen, die auf den vorliegenden Daten und Analysen basieren\n2. Komplexe Informationen in klare, zugängliche Sprache zu übersetzen\n3. Verschiedene Textformate zu erstellen, darunter Berichte, Zusammenfassungen, Präsentationen und Dokumentationen\n4. Den Ton und Stil an die Zielgruppe und den Verwendungszweck anzupassen\n5. Fachbegriffe zu erklären und Abstraktes durch Beispiele zu veranschaulichen\n6. Die wichtigsten Erkenntnisse hervorzuheben und Handlungsempfehlungen zu formulieren\n7. Text durch rhetorische Mittel überzeugend und einprägsam zu gestalten\n\nBei deiner Textproduktion:\n- Beginne mit einer prägnanten Zusammenfassung der Kernpunkte\n- Strukturiere den Text in logische Abschnitte mit Überschriften\n- Verwende Aufzählungen und Tabellen, um Informationen übersichtlich darzustellen\n- Integriere relevante Daten und Erkenntnisse aus vorherigen Analyseschritten\n- Achte auf korrekte Rechtschreibung, Grammatik und einen konsistenten Sprachstil\n- Passe den Detaillierungsgrad an die Bedürfnisse und das Vorwissen der Zielgruppe an\n\nDeine Texte sollten informativ, präzise, gut strukturiert und ohne Redundanzen sein. Achte besonders auf eine klare Argumentationsstruktur und vermeide vage Aussagen."
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"name": "Visualisierer",
"type": "visualizer",
"workspace_id": self.get_initial_id("workspaces"),
"capabilities": "Datenvisualisierung, Diagrammerstellung, Design von Dashboards und visuelle Kommunikation komplexer Informationen",
"description": "Erstellt Visualisierungen und Diagramme",
"instructions": "Du bist der Visualisierungsagent, ein Experte für die Umwandlung von Daten in aussagekräftige visuelle Darstellungen. Deine Aufgabe ist es:\n\n1. Daten in geeignete visuelle Formate umzuwandeln\n2. Die optimalen Diagramm- und Visualisierungstypen für spezifische Daten zu empfehlen\n3. Klare, informative und ästhetisch ansprechende Darstellungen zu erstellen\n4. Komplexe Konzepte durch visuelle Metaphern verständlich zu machen\n5. Dashboards und Informationsarchitekturen für Datenerzählungen zu konzipieren\n6. Designprinzipien anzuwenden, um Daten effektiv zu kommunizieren\n7. Farbschemata, Layouts und Beschriftungen für maximale Klarheit zu optimieren\n\nFür jede Visualisierung sollst du:\n- Eine Beschreibung des empfohlenen Visualisierungstyps liefern\n- Begründen, warum dieser Typ für die spezifischen Daten geeignet ist\n- Detaillierte Angaben zu Achsen, Legenden, Farbschemata und Annotationen machen\n- Den Code oder eine textuelle Anleitung zur Erstellung bereitstellen\n- Interpretationshilfen für das Verständnis der Visualisierung bieten\n\nDeine Vorschläge sollten sowohl technisch umsetzbar als auch intuitiv verständlich sein. Strebe nach einem ausgewogenen Verhältnis zwischen Informationsgehalt und visueller Klarheit."
}
]
# Agenten erstellen
for agent_data in standard_agents:
created_agent = self.db.record_create("agents", agent_data)
logger.info(f"Agent '{created_agent['name']}' wurde erstellt mit ID {created_agent['id']}")
# Initialisierung von Standard-Prompts für verschiedene Bereiche
prompts = self.db.get_recordset("prompts")
if not prompts:
logger.info("Erstelle Standard-Prompts")
# Standard-Prompts definieren
standard_prompts = [
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"content": "Recherchiere die aktuellen Markttrends und Entwicklungen im Bereich [THEMA]. Sammle Informationen zu führenden Unternehmen, innovativen Produkten oder Dienstleistungen und aktuellen Herausforderungen. Präsentiere die Ergebnisse in einer strukturierten Übersicht mit relevanten Daten und Quellen.",
"workspace_id": self.get_initial_id("workspaces"),
"created_at": self._get_current_timestamp(),
"name": "Web Research: Marktforschung"
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"content": "Analysiere den beigefügten Datensatz zu [THEMA] und identifiziere die wichtigsten Trends, Muster und Auffälligkeiten. Führe statistische Berechnungen durch, um deine Erkenntnisse zu untermauern. Stelle die Ergebnisse in einer klar strukturierten Analyse dar und ziehe relevante Schlussfolgerungen.",
"workspace_id": self.get_initial_id("workspaces"),
"created_at": self._get_current_timestamp(),
"name": "Analyse: Datenanalyse"
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"content": "Erstelle ein detailliertes Protokoll unserer Besprechung zum Thema [THEMA]. Erfasse alle besprochenen Punkte, getroffenen Entscheidungen und vereinbarten Maßnahmen. Strukturiere das Protokoll übersichtlich mit Tagesordnungspunkten, Teilnehmerliste und klaren Verantwortlichkeiten für die Follow-up-Aktionen.",
"workspace_id": self.get_initial_id("workspaces"),
"created_at": self._get_current_timestamp(),
"name": "Protokoll: Besprechungsprotokoll"
},
{
"mandate_id": effective_mandate_id,
"user_id": effective_user_id,
"content": "Entwickle ein UI/UX-Designkonzept für [ANWENDUNG/WEBSITE]. Berücksichtige die Zielgruppe, Hauptfunktionen und die Markenidentität. Beschreibe die visuelle Gestaltung, Navigation, Interaktionsmuster und Informationsarchitektur. Erläutere, wie das Design die Benutzerfreundlichkeit und das Nutzererlebnis optimiert.",
"workspace_id": self.get_initial_id("workspaces"),
"created_at": self._get_current_timestamp(),
"name": "Design: UI/UX Design"
}
]
# Prompts erstellen
for prompt_data in standard_prompts:
created_prompt = self.db.record_create("prompts", prompt_data)
logger.info(f"Prompt '{prompt_data.get('name', 'Standard')}' wurde erstellt mit ID {created_prompt['id']}")
def _get_current_timestamp(self) -> str:
"""Gibt den aktuellen Zeitstempel im ISO-Format zurück"""
from datetime import datetime

View file

@ -1,28 +1,26 @@
.......................... Tasks
Kannst du mir bitte folgende anpassungen am frontend code machen:
Bei der Ausgabe eines datensatzes ans frontend formular soll die ID immer als schreibgeschützt mitgegeben werden. Es wird nie eine ID gesetzt bei Create.
Im Frontend soll im generischen Formular "generic-entity.js" für ein neues Objekt die ID entweder hidden oder schreibgeschützt sein. die ID wird nicht benötigt, sondern wird erst mit dem speichern in der datenbank erstellt. d.h. nach dem speichern in der datenbank werden die daten der entsprechenden tabelle neu geladen.
In den Einstellungen des Frontends soll die Sprache des aktiven benutzers gemäss den Listenoptionen in den "...model.py" angepasst werden können. die sprache gilt dann auch für die Attributnamen in einem Formularfeld im "generic-entity.js". eine sprachänderung zieht somit eine anpassung des Users über das API nach sich, indem die Sprache in der Datenbank angepasst wird.
Chat mit Instant message - auch inputs geben während der ausführung
Sprache spezialisierten
Admin Seite mit CRUD für User Mgmt und Mandate Management, generisch
--------------------------- OPEN
Workflow mit dem dynamischen Multi-Agent Chat aktualisieren und im Ausführungsprotokoll die Details eines laufenden Chats mit aufklappbaren Texten ergänzen. Das Ausführungsprotokoll-Fenster dynamisch in der Grösse anpassbar machen
Css aufräumen und konsolidieren für gemeinsame Klassen mit allen html und js parallel
Linkes Menu: Gruppierungsbereiche zum auf- und zuklappen machen:
----------------------- done
Admin Seite mit CRUD für User Mgmt und Mandate Management, generisch
Im Frontend soll im generischen Formular "generic-entity.js" für ein neues Objekt die ID entweder hidden oder schreibgeschützt sein. die ID wird nicht benötigt, sondern wird erst mit dem speichern in der datenbank erstellt. d.h. nach dem speichern in der datenbank werden die daten der entsprechenden tabelle neu geladen.
Kannst du mir bitte code struktur und logik das 'agentservice_interface.py' anpsssen und die code struktur zur besseren wartung und weiterenwticklung verbessern:
1. die anbindung der ai-modelle mit den entsprechenden config-daten und den funktionsaufrufen in separate dateien auslagern ("connector_ai_openai","connector_ai_webscraping"). im 'agentservice_interface.py' die connector module bei der initialisierung importieren und vorbereiten.