File size: 1,101 Bytes
fef789d
 
 
 
 
 
b51e972
fef789d
 
 
 
 
 
 
 
 
 
9544381
fef789d
 
 
 
 
 
 
 
 
 
56cba7c
fef789d
b51e972
56cba7c
fef789d
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

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]