add panel apps
This commit is contained in:
parent
2dbf23a91f
commit
e536e93ad7
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"CodeGPT.apiKey": "CodeGPT Plus Beta"
|
||||
}
|
224
chat-panel.py
Normal file
224
chat-panel.py
Normal 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
17
panel_test.py
Normal 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
146
reli-chat-ai-panel.py
Normal 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
118
reli.py
Normal 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')
|
Reference in a new issue