add panel apps

This commit is contained in:
Joachim Happel 2024-05-03 16:17:59 +02:00
parent 2dbf23a91f
commit e536e93ad7
5 changed files with 508 additions and 0 deletions

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"CodeGPT.apiKey": "CodeGPT Plus Beta"
}

224
chat-panel.py Normal file
View file

@ -0,0 +1,224 @@
# start with the following comando: panel serve chat-panel.py
import os
import platform
# Environment Variablen importieren
from dotenv import load_dotenv
load_dotenv()
from crewai import Crew, Process, Agent, Task
from langchain_openai import ChatOpenAI
from langchain_core.callbacks import BaseCallbackHandler
from typing import TYPE_CHECKING, Any, Dict, Optional
from crewai_tools import Tool
# pip install panel
import panel as pn
pn.extension(design="material")
import threading
from crewai.agents import CrewAgentExecutor
import time
def user_input_callback(content):
global human_chat_user_input
#prompt = self._i18n.slice("getting_input").format(final_answer=final_answer)
print(content);
chat_interface.send("Bitte prüfen Sie, ob der Plan ihre Anforderungen erfüllt", user="User", respond=False)
while human_chat_user_input == None:
time.sleep(1)
human_comments = human_chat_user_input
human_chat_user_input = None
return human_comments
def custom_ask_human_input(self, final_answer: dict) -> str:
global human_chat_user_input
#prompt = self._i18n.slice("getting_input").format(final_answer=final_answer)
chat_interface.send(final_answer, user="User", respond=False)
while human_chat_user_input == None:
time.sleep(1)
print("Waiting for human input...")
human_comments = human_chat_user_input
human_chat_user_input = None
return human_comments
#CrewAgentExecutor._ask_human_input = custom_ask_human_input
human_chat_user_input = None
initiate_chat_task_created = False
def initiate_chat(message):
global initiate_chat_task_created
# Indicate that the task has been created
initiate_chat_task_created = True
message=message+' auf deutsch.'
StartCrew(message)
def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
print(f"User: {user} - Message: {contents}")
global initiate_chat_task_created
global human_chat_user_input
if not initiate_chat_task_created:
thread = threading.Thread(target=initiate_chat, args=(contents,))
thread.start()
else:
human_chat_user_input = contents
avators = {"theologe":"https://cdn-icons-png.flaticon.com/512/320/320336.png",
"religionswissenschaftler":"https://cdn-icons-png.freepik.com/512/9408/9408201.png",
"moderator":"https://cdn-icons-png.freepik.com/512/9408/9408201.png"}
class MyCustomHandler(BaseCallbackHandler):
def __init__(self, agent_name: str) -> None:
self.agent_name = agent_name
def on_chain_start(
self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any
) -> None:
"""We start a chain."""
chat_interface.send(inputs['input'], user="assistent", respond=False)
def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> None:
"""Print out that we finished a chain."""
print(f"Finished chain with output: {outputs}")
chat_interface.send(outputs['output'], user=self.agent_name, avatar=avators[self.agent_name], respond=False)
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
#llm = ChatOpenAI(model="gpt-4")
theologe = Agent(
name="Theologe",
role='Theologische Inhalte entwickeln',
backstory='''Langjähriger Theologieprofessor mit Spezialisierung auf historisch-kritische Bibelinterpretation''',
goal="Verständnis für biblische Texte und christliche Lehren fördern.",
llm=llm,
allow_delegation=False,
verbose=True,
callbacks=[MyCustomHandler("theologe")],
)
religionswissenschaftler = Agent(
name="Religionswissenschaftler",
role='Interreligiösen Dialog fördern',
backstory='''Religionswissenschaftler mit internationaler Erfahrung im Dialog zwischen Weltreligionen.''',
goal="Förderung von ethischer Argumentation und philosophischem Denken",
llm=llm,
callbacks=[MyCustomHandler("religionswissenschaftler")],
allow_delegation=False,
verbose=True,
)
moderator = Agent(
name="Moderator",
role='Generiert einen minutiösen Verlaufsplan für eine Stunde Religionsunterricht',
backstory='''Methoden und Didaktik Enthusiast mit besonderem Interesse am religionsbezogener Bildung.''',
goal="Entwicklung von perfekten Unterrichtsstunden für den Religionsunterricht.",
llm=llm,
callbacks=[MyCustomHandler("moderator")],
allow_delegation=False,
verbose=True,
)
def StartCrew(prompt):
task1 = Task(
description=f"""Entwickeln Sie Unterrichtsideen auf deutsch zum Thema {prompt}. Berücksichtigen Sie bei ihren Überlegungen, dass eine Religionsstunde nur 45 Minuten dauert. """ ,
agent=theologe,
expected_output="Vorschlag für den inhaltlichen Fokus. Danach eine kurze Liste mit maximal 3 Unterrichtsideen und je einem methodischen Vorschlag mit relevante theologischen Perspektiven in deutscher Sprache.",
)
task2 = Task(
description=("""Erweitern Sie den Fokus aus Ihrer Perspektive. Prüfen Sie die Unterrichtsideen und ergänzen Sie diese um maximal 2 weitere vor allem aus Ihrer religionswissenschaftlichen Perspektive.
Ergänzen Sie die Unterrichtsideen um Aspekte des interreligiösen Dialogs und angemessener Methoden.
Berücksichtigen Sie dabei, dass eine Religionsstunde nur 45 Minuten dauert.
Geben Sie Feedback und Verbesserungsvorschläge auf deutsch."""),
agent=religionswissenschaftler,
expected_output="Feedback und Ergänzungsvorschläge zu den Unterrichtsideen.",
context=[task1],
)
task3 = Task(
description=("""Erstellen Sie aus dem Gesprächverlauf einen finalen Ablaufplan für den Unterricht auf deutsch.
Stellen Sie sicher, dass der Ablaufplan für eine 45-minütige Stunde geeignet ist.
Versichern Sie sich, dass sowohl theologische als auch religionswissenschaftliche, religionsübergreifende Aspekte berücksichtigt wurden.
Entwickeln sie aud sem Vroschlägen mit zeitgemäßen Methoden eine mitreißende Unterrichtstunde.
Schreiben Sie den Ablaufplan in tabellarischer Form auf. Geben Sie erklärrende Hinweise zu den einzelnen Schritten.
Wenn das Ergebniss Ihrer Meinung nach gut ist, legen Sie das Ergebnis einem Menschen zur Prüfung vor.
Make sure to check with a human if the draft is good before finalizing your answer.!
"""),
agent=moderator,
expected_output="Ein perfekter Ablaufplan für den Unterricht in tabellarischer Form auf deutsch.",
human_input=True,
callback=user_input_callback,
context=[task1, task2],
)
task4 = Task(
description=("""Nehmen Sie Argumente aus dem menschlichen Feedback auf und ändern Sie den Ablaufplan so,dass das Feedback des Menschen berücksichtigt ."""),
agent=moderator,
expected_output="Finale Version des tabellarischen Ablaufplans für eine spannende Religionsstunde",
context=[task3],
)
# Establishing the crew with a hierarchical process
project_crew = Crew(
tasks=[task1, task2, task3, task4], # Tasks to be delegated and executed under the manager's supervision
agents=[theologe, religionswissenschaftler, moderator],
manager_llm=llm,
process=Process.sequential, # Specifies the hierarchical management approach
memory=True,
name="Religionsunterrichtsentwickelerrunde",
verbose=True,
)
result = project_crew.kickoff()
#print(result)
chat_interface.send("## Gemeinsames Ergebnis\n"+result, user="assistant", respond=False)
chat_interface = pn.chat.ChatInterface(callback=callback)
chat_interface.send("Beschreibe dein Unterrichttsvorhaben!", user="System", respond=False)
chat_interface.servable()
#StartCrew('Teufel')

17
panel_test.py Normal file
View file

@ -0,0 +1,17 @@
# start with the following comando: panel serve panel_test.py
import panel as pn
pn.extension(design="material")
def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
message = f"Echoing {user}: {contents}"
return message
chat_interface = pn.chat.ChatInterface(callback=callback)
chat_interface.send(
"Enter a message in the TextInput below and receive an echo!",
user="System",
respond=False,
)
chat_interface.servable()

146
reli-chat-ai-panel.py Normal file
View file

@ -0,0 +1,146 @@
# start with the following comando: panel serve chat-panel.py
import os
import platform
# Environment Variablen importieren
from dotenv import load_dotenv
load_dotenv()
from crewai import Crew, Process, Agent, Task
from langchain_openai import ChatOpenAI
from langchain_core.callbacks import BaseCallbackHandler
from typing import TYPE_CHECKING, Any, Dict, Optional
from langchain.agents import load_tools
#human = load_tools(["human"])
# pip install panel
import panel as pn
pn.extension(design="material")
import threading
from crewai.agents import CrewAgentExecutor
import time
def custom_ask_human_input(self, final_answer: dict) -> str:
global user_input
prompt = self._i18n.slice("getting_input").format(final_answer=final_answer)
chat_interface.send(prompt, user="Lehrkraft", respond=False)
while user_input == None:
time.sleep(1)
human_comments = user_input
user_input = None
return human_comments
CrewAgentExecutor._ask_human_input = custom_ask_human_input
user_input = None
initiate_chat_task_created = False
def initiate_chat(message):
global initiate_chat_task_created
# Indicate that the task has been created
initiate_chat_task_created = True
StartCrew(message)
def callback(contents: str, user: str, instance: pn.chat.ChatInterface):
global initiate_chat_task_created
global user_input
if not initiate_chat_task_created:
thread = threading.Thread(target=initiate_chat, args=(contents,))
thread.start()
else:
user_input = contents
avators = {"Writer":"https://cdn-icons-png.flaticon.com/512/320/320336.png",
"Reviewer":"https://cdn-icons-png.freepik.com/512/9408/9408201.png"}
class MyCustomHandler(BaseCallbackHandler):
def __init__(self, agent_name: str) -> None:
self.agent_name = agent_name
def on_chain_start(
self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any
) -> None:
"""Print out that we are entering a chain."""
chat_interface.send(inputs['input'], user=BaseCallbackHandler, respond=False)
def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> None:
"""Print out that we finished a chain."""
chat_interface.send(outputs['output'], user=self.agent_name, avatar=avators[self.agent_name], respond=False)
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
#llm = ChatOpenAI(model="gpt-4")
writer = Agent(
role='Theologische Inhalte entwickeln',
backstory='''Langjähriger Theologieprofessor mit Spezialisierung auf historisch-kritische Bibelinterpretation''',
goal="Verständnis für biblische Texte und christliche Lehren fördern.",
llm=llm,
callbacks=[MyCustomHandler("Thelogical Content Developer")],
)
reviewer = Agent(
role='Interreligiösen Dialog fördern',
backstory='''Religionswissenschaftler mit internationaler Erfahrung im Dialog zwischen Weltreligionen.''',
goal="Förderung von ethischer Argumentation und philosophischem Denken",
llm=llm,
callbacks=[MyCustomHandler("Religious Dialogue Promoter")],
allow_delegation=True
)
def StartCrew(prompt):
task1 = Task(
description=f"""Entwickeln Sie einen Unterrichtsplan zum Thema {prompt}. """,
agent=writer,
expected_output="Unterrichtsplan mit relevante theologischen Perspektiven und zeitgemäßen Methoden."
)
task2 = Task(
description=("Entwickeln Sie zusammen mit Ihren Kollegen an einen Unterrichtsplan unter Berücksichtigung der religionswissenschaftlicher und interreligiöser Aspekte"),
agent=reviewer,
expected_output="Kollaborativ entwickelter Unterrichtsplan",
human_input=True,
allow_delegation=True
)
# Establishing the crew with a hierarchical process
project_crew = Crew(
tasks=[task1, task2], # Tasks to be delegated and executed under the manager's supervision
agents=[writer, reviewer],
manager_llm=llm,
language="de",
process=Process.hierarchical # Specifies the hierarchical management approach
)
result = project_crew.kickoff()
chat_interface.send("## Final Result\n"+result, user="assistant", respond=False)
chat_interface = pn.chat.ChatInterface(callback=callback)
chat_interface.send("Beschreibe dein Unterrichttsvorhaben!", user="System", respond=False)
chat_interface.servable()

118
reli.py Normal file
View file

@ -0,0 +1,118 @@
# start with the following comando: panel serve chat-panel.py
import os
import platform
# Environment Variablen importieren
from dotenv import load_dotenv
load_dotenv()
from crewai import Crew, Process, Agent, Task
from langchain_openai import ChatOpenAI
from langchain_core.callbacks import BaseCallbackHandler
from typing import TYPE_CHECKING, Any, Dict, Optional
def user_input_callback(content):
input("Bitte geben Sie Ihr Feedback zur Unterrichtsstunde ein: ")
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
theologe = Agent(
name="Theologe",
role='Theologische Inhalte entwickeln',
backstory='''Langjähriger Theologieprofessor mit Spezialisierung auf historisch-kritische Bibelinterpretation''',
goal="Verständnis für biblische Texte und christliche Lehren fördern.",
llm=llm,
allow_delegation=False,
verbose=True
)
religionswissenschaftler = Agent(
name="Religionswissenschaftler",
role='Interreligiösen Dialog fördern',
backstory='''Religionswissenschaftler mit internationaler Erfahrung im Dialog zwischen Weltreligionen.''',
goal="Förderung von ethischer Argumentation und philosophischem Denken",
llm=llm,
allow_delegation=False,
verbose=True,
)
ethiker = Agent(
name="Ethiker",
role='Ethiker',
backstory='''Ethiker mit Schwerpunkt auf angewandter Ethik''',
goal="Förderung von ethischer Argumentation und philosophischem Denken",
llm=llm,
allow_delegation=False,
verbose=True,
)
moderator = Agent(
name="Moderator",
role='Generiert einen minutiösen Verlaufsplan für eine Stunde Religionsunterricht',
backstory='''Methoden und Didaktik Enthusiast mit besonderem Interesse am religionsbezogener Bildung.''',
goal="Entwicklung von perfekten Unterrichtsstunden für den Religionsunterricht.",
llm=llm,
allow_delegation=True,
verbose=True,
)
def StartCrew(prompt):
task1 = Task(
description=f"""Entwickeln Sie Unterrichtsideen auf deutsch zum Thema {prompt} """,
agent=theologe,
expected_output="Kurze Liste mit Unterrichtsideen mit relevante theologischen Perspektiven und zeitgemäßen Methoden in deutscher Sprache.",
)
task2 = Task(
description=("""Prüfen Sie die Unterrichtsiddeen Ihrer Kollegen und ergänzsen Sie diese vor allem aus Ihrer religionswissenschaftlichen Perspektive.
Ergänzen Sie die Unterrichtsideen um Aspekte des interreligiösen Dialogs und angemessener Methoden."""),
agent=religionswissenschaftler,
expected_output="Feedback und Ergänzungsvorschläge zu den Unterrichtsideen.",
context=[task1],
)
task3 = Task(
description=("""Erstellen Sie aus dem Gesprächverlauf einen finalen Ablaufplan für den Unterricht auf deutsch.
Versichern Sie sich, dass sowohl theologische als auch religionswissenschaftliche Aspekte berücksichtigt wurden.
Stellen Sie sicher, dass der interreligiöse Dialog und zeitgemäße Methoden im Unterrichtsplan enthalten sind.
Wenn das Ergebniss Ihrer Meinung nach gut ist, legen Sie das Ergebnis
einem Menschen zur Prüfung vor.
Make sure to check with a human if the draft is good before finalizing your answer.!
"""),
agent=moderator,
expected_output="Ein perfekter Ablaufplan für den Unterricht in tabellarischer Form auf deutsch.",
context=[task1, task2],
human_input=True,
callback=user_input_callback,
)
task4 = Task(
description=("""Nehmen sie Argumente aus dem menschlichen Feedback auf und ändern sie den Plan entsprechend."""),
agent=moderator,
expected_output="Das Feedback berücksichtigender überarbeiteter tabellarischer Ablauf.",
context=[task3],
)
# Establishing the crew with a hierarchical process
project_crew = Crew(
tasks=[task1, task2, task3, task4], # Tasks to be delegated and executed under the manager's supervision
agents=[theologe, religionswissenschaftler, moderator],
manager_llm=llm,
process=Process.sequential, # Specifies the hierarchical management approach
memory=False,
name="Religionsunterrichtsentwickelerrunde",
verbose=True
)
result = project_crew.kickoff()
print(result)
StartCrew('10 Gebote')