File size: 3,158 Bytes
a004f09
 
 
 
 
 
 
 
a795478
 
 
 
e3965cf
 
a004f09
 
 
 
 
 
a795478
 
a004f09
a795478
a004f09
a795478
 
a004f09
e3965cf
 
 
a795478
42d919d
a004f09
 
 
a795478
 
a004f09
 
 
 
 
 
bff3e00
a795478
 
a004f09
a795478
 
a004f09
a795478
a004f09
a795478
a004f09
 
6bfb62f
a004f09
 
 
 
 
 
 
 
a795478
a004f09
a795478
a004f09
 
 
 
a795478
a004f09
 
 
 
 
 
 
 
 
 
 
 
 
 
177e2bf
a795478
a004f09
 
f2e11f5
a004f09
 
f2e11f5
a795478
a004f09
f2e11f5
a004f09
 
a795478
a004f09
a795478
a004f09
f2e11f5
a004f09
 
 
 
 
 
 
a795478
a004f09
a795478
 
a004f09
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
108
109
110
111
112
113
114
115
116
117
try:
  from langchain_community.vectorstores import Chroma
except:
  from langchain_community.vectorstores import Chroma


from langchain.chains import ConversationChain
from langchain.chains.conversation.memory import ConversationBufferWindowMemory
from langchain import PromptTemplate
from langchain_core.prompts import ChatPromptTemplate
from langchain_groq import ChatGroq
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
import torch






import os
import requests  # Or your Groq library

groq_api_key = os.environ.get("my_groq_api_key")

# Initialize a ChatGroq object with a temperature of 0 and the "mixtral-8x7b-32768" model.
llm = ChatGroq(temperature=0, model_name="llama3-70b-8192",api_key=groq_api_key)

model_name = "BAAI/bge-m3"
device = "cuda" if torch.cuda.is_available() else "cpu"
embeddings = HuggingFaceEmbeddings(model_name=model_name, model_kwargs={'device': device})
# we run this cell every time
db = Chroma(embedding_function=embeddings, persist_directory='Master-Guidline')



memory = ConversationBufferWindowMemory(
    memory_key="history", k=3, return_only_outputs=True
)




template = """
فقط بر اساس محتوای داده شده، به سوال مطرح شده جواب بده. جواب باید به زبان فارسی باشه. اگه سوال مطرح شده خارج از محتوای داده شده هست، بگو که من فقط به سوالات مرتبط با تحصبلات تکمیلی جواب میدم
محتوا:
{history}

"""
s="""

\n سوال: {input}

\n جواب:""".strip()


prompt = PromptTemplate(input_variables=["history", "input"], template=template+s)






chain = ConversationChain(
    llm=llm,

    prompt=prompt,
    memory=memory,
    verbose=True,
)



# Generate a response from the Llama model
def get_llama_response(message: str, history: list) -> str:
    """
    Generates a conversational response from the Llama model.

    Parameters:
        message (str): User's input message.
        history (list): Past conversation history.

    Returns:
        str: Generated response from the Llama model.
    """
    query_text =message

    results = db.similarity_search_with_relevance_scores(query_text, k=3)
    context_text = "\n\n---\n\n".join([doc.page_content for doc, _score in results])




    template = """
    فقط بر اساس محتوای داده شده، به سوال مطرح شده جواب بده. جواب باید به زبان فارسی باشه. اگه سوال مطرح شده خارج از محتوای داده شده هست، بگو که من فقط به سوالات مرتبط با تحصبلات تکمیلی جواب میدم
    محتوا:
    {history}

    """
    s="""
    \n سوال: {input}

    \n جواب:""".strip()
    prompt = PromptTemplate(input_variables=["history", "input"], template=template+context_text+'\n'+s)
    

    #print(template)
    chain.prompt=prompt
    res = chain.predict(input=query_text)
    return res



import gradio as gr
iface = gr.Interface(fn=get_llama_response, inputs=gr.Textbox(),
             outputs="textbox")
iface.launch(share=True)