TatTwamAI / crew_config.py
Jayashree Sridhar
fixed gtts error
0b4dd15
# from agents.tools.voice_tools import VoiceTools
# from agents.tools.llm_tools import LLMTools
# from agents.tools.knowledge_tools import KnowledgeTools
# from agents.tools.validation_tools import ValidationTools
# from crewai import Agent
# from utils.knowledge_base import KnowledgeBase
# class PersonalCoachCrew:
# def __init__(self, config):
# self.config = config
# # Centralized tool instances
# self.voice_tools = VoiceTools(self.config)
# self.llm_tools = LLMTools(self.config)
# self.knowledge_tools = KnowledgeTools(self.config)
# self.validation_tools = ValidationTools(self.config)
# self.knowledge_base = KnowledgeBase(self.config)
# self._initialize_agents()
# #self._create_crew()
# def _initialize_agents(self):
# # ----- AGENT 1 -----
# self.conversation_handler = Agent(
# role="Empathetic Conversation Handler",
# goal="Understand user's emotional state and needs through compassionate dialogue",
# backstory="...",
# verbose=self.config.crew.verbose,
# allow_delegation=False,
# tools=[
# self.voice_tools.transcribe_audio,
# self.voice_tools.detect_emotion,
# self.voice_tools.generate_reflective_questions,
# ]
# )
# # ----- AGENT 2 -----
# self.wisdom_advisor = Agent(
# role="Wisdom Keeper and Spiritual Guide",
# goal="Provide personalized guidance drawing from ancient wisdom and modern psychology",
# backstory="...",
# verbose=self.config.crew.verbose,
# allow_delegation=False,
# tools=[
# self.knowledge_tools.search_knowledge,
# self.knowledge_tools.extract_wisdom,
# self.knowledge_tools.suggest_practices,
# self.llm_tools.mistral_chat,
# self.llm_tools.generate_advice,
# ]
# )
# # ----- AGENT 3 -----
# self.response_validator = Agent(
# role="Response Guardian and Quality Validator",
# goal="Ensure all responses are safe, appropriate, and truly helpful",
# backstory="...",
# verbose=self.config.crew.verbose,
# allow_delegation=False,
# tools=[
# self.validation_tools.validate_response_tool
# ]
# )
# # ----- AGENT 4 -----
# self.interaction_manager = Agent(
# role="Conversation Flow Manager",
# goal="Create natural, engaging dialogue that helps users on their journey",
# backstory="...",
# verbose=self.config.crew.verbose,
# allow_delegation=False,
# tools=[
# self.llm_tools.summarize_conversation,
# ]
# )
# def process(self, inputs: dict):
# user_message = inputs.get("user_message", "")
# # Optionally, add conversation history entries as prior messages.
# messages = []
# for his in inputs.get("conversation_history", []):
# if len(his) == 2:
# messages.append({"role": "user", "content": his[0]})
# messages.append({"role": "assistant", "content": his[1]})
# # Add current user message
# messages.append({"role": "user", "content": user_message})
# # 1. Empathetic dialog
# conversation_response = self.conversation_handler.kickoff(messages)
# # 2. Wisdom/advice — also provide messages (same as for conversation_handler)
# wisdom_response = self.wisdom_advisor.kickoff(messages)
# # Combine/mix as fits your logic
# combined_response = f"{conversation_response}\n{wisdom_response}"
# # For validation, create appropriate messages object
# validation_messages = [{"role": "assistant", "content": combined_response}]
# validator_result = self.response_validator.kickoff(validation_messages)
# return {
# "final_response": combined_response
# }
from agents.tools.voice_tools import VoiceTools
from agents.tools.llm_tools import LLMTools
from agents.tools.knowledge_tools import KnowledgeTools
from agents.tools.validation_tools import ValidationTools
from crewai import Agent
from utils.knowledge_base import KnowledgeBase
class PersonalCoachCrew:
def __init__(self, config):
self.config = config
# Centralized tool instances
self.voice_tools = VoiceTools(self.config)
self.llm_tools = LLMTools(self.config)
self.knowledge_tools = KnowledgeTools(self.config)
self.validation_tools = ValidationTools(self.config)
self.knowledge_base = KnowledgeBase(self.config)
self._initialize_agents()
def _initialize_agents(self):
# ----- AGENT 1 -----
self.conversation_handler = Agent(
role="Empathetic Conversation Handler",
goal="Understand user's emotional state and needs through compassionate dialogue",
backstory="...",
verbose=self.config.crew.verbose,
allow_delegation=False,
tools=[
self.voice_tools.transcribe_audio,
self.voice_tools.detect_emotion,
self.voice_tools.generate_reflective_questions,
]
)
# ----- AGENT 2 -----
self.wisdom_advisor = Agent(
role="Wisdom Keeper and Spiritual Guide",
goal="Provide personalized guidance drawing from ancient wisdom and modern psychology",
backstory="...",
verbose=self.config.crew.verbose,
allow_delegation=False,
tools=[
self.knowledge_tools.search_knowledge,
self.knowledge_tools.extract_wisdom,
self.knowledge_tools.suggest_practices,
self.llm_tools.mistral_chat,
self.llm_tools.generate_advice,
]
)
# ----- AGENT 3 -----
self.response_validator = Agent(
role="Response Guardian and Quality Validator",
goal="Ensure all responses are safe, appropriate, and truly helpful",
backstory="...",
verbose=self.config.crew.verbose,
allow_delegation=False,
tools=[
self.validation_tools.validate_response_tool
]
)
# ----- AGENT 4 -----
self.interaction_manager = Agent(
role="Conversation Flow Manager",
goal="Create natural, engaging dialogue that helps users on their journey",
backstory="...",
verbose=self.config.crew.verbose,
allow_delegation=False,
tools=[
self.llm_tools.summarize_conversation,
]
)
def process(self, inputs: dict):
user_message = inputs.get("user_message", "")
# Optionally, add conversation history entries as prior messages.
messages = []
for his in inputs.get("conversation_history", []):
if len(his) == 2:
messages.append({"role": "user", "content": his[0]})
messages.append({"role": "assistant", "content": his[1]})
messages.append({"role": "user", "content": user_message})
# Empathetic dialog
conv_result = self.conversation_handler.kickoff(messages)
# Accept either dict or string result
if isinstance(conv_result, dict):
conv_text = conv_result.get("output") or conv_result.get("text") or conv_result.get("final_answer") or str(conv_result)
else:
conv_text = str(conv_result).strip()
# Wisdom/advisor
wisdom_result = self.wisdom_advisor.kickoff(messages)
if isinstance(wisdom_result, dict):
wisdom_text = wisdom_result.get("output") or wisdom_result.get("text") or wisdom_result.get("final_answer") or str(wisdom_result)
else:
wisdom_text = str(wisdom_result).strip()
# Final combined response (customize as necessary)
combined_response = f"{conv_text}\n{wisdom_text}"
# === VALIDATION: Pass only a string as 'response', never a dict ===
# Compose tool input as expected by ValidateResponseTool
validation_tool_input = [{"role": "user", "content": combined_response}]
_ = self.response_validator.kickoff(validation_tool_input)
return {
"final_response": combined_response
}