Spaces:
Sleeping
Sleeping
from Modules.PoseEstimation.pose_estimator import calculate_angle, joints_id_dict, model | |
from langchain.tools import tool | |
from langchain.agents import AgentExecutor, create_tool_calling_agent | |
from langchain_core.prompts import ChatPromptTemplate | |
from langchain_core.messages import HumanMessage | |
from langchain_mistralai.chat_models import ChatMistralAI | |
# If api_key is not passed, default behavior is to use the `MISTRAL_API_KEY` environment variable. | |
llm = ChatMistralAI(model='mistral-large-latest', api_key="i5jSJkCFNGKfgIztloxTMjfckiFbYBj4") | |
def compute_right_knee_angle(pose: list) -> float: | |
""" | |
Computes the knee angle. | |
Args: | |
pose (list): list of keypoints | |
Returns: | |
knee_angle (float): knee angle | |
""" | |
right_hip = pose[joints_id_dict['right_hip']] | |
right_knee = pose[joints_id_dict['right_knee']] | |
right_ankle = pose[joints_id_dict['right_ankle']] | |
knee_angle = calculate_angle(right_hip, right_knee, right_ankle) | |
print(knee_angle) | |
return str(knee_angle) | |
def get_keypoints_from_path(video_path: str): | |
""" | |
Get keypoints from a video. | |
Args: | |
video_path (str): path to the video | |
model (YOLO): model to use | |
Returns: | |
keypoints (list): list of keypoints | |
""" | |
keypoints = [] | |
results = model(video_path, save=True, show_conf=False, show_boxes=False) | |
for frame in results: | |
tensor = frame.keypoints.xy[0] | |
keypoints.append(tensor.tolist()) | |
return keypoints | |
tools = [compute_right_knee_angle] | |
prompt = ChatPromptTemplate.from_messages( | |
[ | |
( | |
"system", | |
"You are a helpful assistant. Make sure to use the compute_right_knee_angle tool for information.", | |
), | |
("placeholder", "{chat_history}"), | |
("human", "{input}"), | |
("placeholder", "{agent_scratchpad}"), | |
] | |
) | |
# Construct the Tools agent | |
agent = create_tool_calling_agent(llm, tools, prompt) | |
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) |