File size: 3,870 Bytes
fbc7e49
d6ac230
a5c05cc
 
36d4625
a5c05cc
7ffc9ec
 
 
 
 
a5c05cc
 
 
c927e38
a5c05cc
 
 
 
 
 
 
 
 
 
 
 
 
52a9cd3
 
a5c05cc
 
 
 
 
 
81d4c87
36d4625
a5c05cc
81d4c87
a5c05cc
36d4625
a5c05cc
52a9cd3
a5c05cc
36d4625
 
 
 
 
 
 
 
 
a5c05cc
 
36d4625
c85c204
36d4625
 
a5c05cc
fbc7e49
a5c05cc
 
 
 
 
 
81d4c87
a5c05cc
 
 
 
 
36d4625
a5c05cc
 
 
 
c927e38
a5c05cc
36d4625
 
 
 
 
 
 
 
 
 
 
 
 
c927e38
a5c05cc
 
afc3612
a5c05cc
36d4625
a5c05cc
 
7ffc9ec
afc3612
36d4625
02b7760
c927e38
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import gradio as gr
import os
from langchain_community.document_loaders import JSONLoader
from langchain_community.vectorstores import Qdrant
from langchain_community.embeddings import HuggingFaceEmbeddings, HuggingFaceBgeEmbeddings
from sentence_transformers.cross_encoder import CrossEncoder
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API"),
)

# loading data
json_path = "format_food.json"
json_path = "llama70b_food_dump.json"

def metadata_func(record: dict, metadata: dict) -> dict:
    metadata["title"] = record.get("title")
    metadata["cuisine"] = record.get("cuisine")
    metadata["time"] = record.get("time")
    metadata["instructions"] = record.get("instructions")
    return metadata

def reranking_results(query, top_k_results, rerank_model):
    # Load the model, here we use our base sized model
    top_results_formatted = [f"{item.metadata['title']}, {item.page_content}" for item in top_k_results]
    reranked_results = rerank_model.rank(query, top_results_formatted, return_documents=True)
    return reranked_results


loader = JSONLoader(
    file_path=json_path,
    jq_schema='.dishes[].dish',
    text_content=False,
    content_key='doc',
    metadata_func=metadata_func
)

data = loader.load()

# Models
# model_name = "Snowflake/snowflake-arctic-embed-xs"
# rerank_model = CrossEncoder("mixedbread-ai/mxbai-rerank-xsmall-v1")

# Embedding
# model_kwargs = {"device": "cpu"}
# encode_kwargs = {"normalize_embeddings": True}
# hf_embedding = HuggingFaceEmbeddings(
#     model_name=model_name, 
#     encode_kwargs=encode_kwargs, 
#     model_kwargs=model_kwargs,
#     show_progress=True
# )
model_name = "BAAI/bge-small-en"
model_kwargs = {"device": "cpu"}
encode_kwargs = {"normalize_embeddings": True}
hf_embedding = HuggingFaceBgeEmbeddings(
    model_name=model_name, 
    model_kwargs=model_kwargs, 
    encode_kwargs=encode_kwargs
)

qdrant = Qdrant.from_documents(
    data,
    hf_embedding,
    location=":memory:",  # Local mode with in-memory storage only
    collection_name="my_documents",
)

def format_to_markdown(response_list):
    response_list[0] = "- " + response_list[0]
    temp_string = "\n- ".join(response_list)
    return temp_string

def run_query(query: str, groq: bool):
    print("Running Query")
    answer = qdrant.similarity_search(query=query, k=10)
    title_and_description = f"# Best Choice:\nA {answer[0].metadata['title']}: {answer[0].page_content}"
    instructions = format_to_markdown(answer[0].metadata['instructions'])
    recipe = f"# Standard Method\n## Cooking time:\n{answer[0].metadata['time']}\n\n## Recipe:\n{instructions}"
    print("Returning query")
    if groq:
        chat_completion = client.chat.completions.create(
            messages=[
            {
                    "role": "user",
                    "content": f"please write a more detailed recipe for the following recipe:\n{recipe}\n\n please return it in the same format.",
                }
            ],
            model="Llama3-70b-8192",
        )
        groq_update = "# Groq Update\n"+chat_completion.choices[0].message.content
    else:
        groq_update = "# Groq Update \nPlease select the tick box if you need more information."
    return title_and_description, recipe, groq_update

with gr.Blocks() as demo:
    gr.Markdown("Start typing below and then click **Run** to see the output.")
    inp = gr.Textbox(placeholder="What sort of meal are you after?")
    groq_button = gr.Checkbox(value=False, label="Use Llama for a better recipe?")
    title_output = gr.Markdown(label="Title and description")
    instructions_output = gr.Markdown(label="Recipe")
    updated_recipe = gr.Markdown(label="Updated Recipe")
    btn = gr.Button("Run")
    btn.click(fn=run_query, inputs=[inp, groq_button], outputs=[title_output, instructions_output, updated_recipe])

demo.launch()