workout-generator / utils.py
matteopilotto's picture
update utils
9544381
import random
import time
from langchain.schema.messages import HumanMessage, SystemMessage
def retrieve_knowledge(query, vectorstore, k=10, randomize=True):
knowledge = [d.page_content.strip() for d in vectorstore.similarity_search(query, k=k)]
if randomize:
knowledge = random.sample(knowledge, k)
knowledge = "\n\n\n".join(knowledge)
return knowledge
def generate_workout(system_prompt, query, knowledge, llm):
messages = [
SystemMessage(content=system_prompt.format(workout_context=knowledge)),
HumanMessage(content=query)
]
response = llm.invoke(messages).content.strip()
return response
def run(gender, muscle_group, equipment, level, duration, vectorstore, system_prompt, llm, k=5, randomize=True):
query = f"{duration}-minute {muscle_group} workout for {gender} {level} level {equipment}"
knowledge = retrieve_knowledge(query, vectorstore, k, randomize)
response = generate_workout(system_prompt, query, knowledge, llm)
for i in range(len(response)):
time.sleep(0.01)
yield response[:i+1]