File size: 4,106 Bytes
3ad39d0
 
 
1d03ff3
 
3ad39d0
1d03ff3
3ad39d0
 
 
 
 
 
e6877b0
3ad39d0
 
 
 
 
 
 
 
 
 
1fbcbcc
 
3ad39d0
 
540fe46
1d03ff3
 
2ce9cbb
1d03ff3
3ad39d0
 
 
 
 
 
 
1d03ff3
3ad39d0
 
1d03ff3
1fbcbcc
3ad39d0
1d03ff3
3ad39d0
1d03ff3
 
3ad39d0
 
1d03ff3
3ad39d0
2ce9cbb
3ad39d0
1d03ff3
3ad39d0
 
1d03ff3
 
2ce9cbb
 
 
 
 
 
 
 
 
 
 
 
 
 
1d03ff3
e6877b0
2ce9cbb
 
 
e6877b0
2ce9cbb
1d03ff3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2ce9cbb
 
3ad39d0
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
import chainlit as cl
from llama_index.llms import MonsterLLM
from llama_index import VectorStoreIndex,SimpleDirectoryReader, ServiceContext
from monsterapi import client as mclient
import json

def indexing(llm,path):
    documents = SimpleDirectoryReader(input_files=[path]).load_data()
    service_context = ServiceContext.from_defaults(
        chunk_size=1024, llm=llm, embed_model="local:BAAI/bge-small-en-v1.5"
    )
    index = VectorStoreIndex.from_documents(documents, service_context=service_context, use_async=True)
    query_engine = index.as_query_engine()
    cl.user_session.set("engine", query_engine)

def qa(sp,engine,message):
    message=message.content
    ques=sp+" "+message
    response=engine.query(ques)
    return response

@cl.on_chat_start
async def factory():
    url = await cl.AskUserMessage(author="Beast",content="Enter url").send()
    index_ai = url['output'].find(".monsterapi.ai")
    url_ai = url['output'][:index_ai + len(".monsterapi.ai")]
    auth = await cl.AskUserMessage(author="Beast",content="Enter auth token").send()
    model = 'deploy-llm'
    llm = MonsterLLM(model=model,base_url=url_ai,monster_api_key=auth['output'],temperature=0.75, context_window=1024)
    service_client  = mclient(api_key = auth['output'], base_url = url_ai)
    cl.user_session.set("service_client",service_client)
    cl.user_session.set("llm", llm)

    res = await cl.AskActionMessage(author="Beast",
        content="Do you want to enter system prompt?",
        actions=[
            cl.Action(name="yes", value="yes", label="βœ… Yes"),
            cl.Action(name="no", value="no", label="❌ No"),
        ],
    ).send()

    if res and res.get("value") == "yes":
        sp = await cl.AskUserMessage(author="Beast",content="Enter system prompt").send()
        msg=cl.Message(author="Beast",content="Noted. Go ahead as your questions!!")
        await msg.send()
        cl.user_session.set("sp", sp["output"])

    else:
        await cl.Message(author="Beast",content="Okay, then you can start asking your questions!!").send()
        
@cl.on_message
async def main(message: cl.Message):
    service_client=cl.user_session.get("service_client")
    engine = cl.user_session.get("engine")
    llm=cl.user_session.get("llm")
    sp=cl.user_session.get("sp")
    
    if sp==None:
        sp=""
    
    if message.elements:
        go=True
        for file in message.elements: 
            if "pdf" in file.mime:
                pdf=file
            else:
                await cl.Message(author="Beast",content="We only support PDF for now").send()
                go=False
                break
        if go:
            msg = cl.Message(author="Beast",content=f"Processing `{pdf.name}`...")
            await msg.send()    
            query_engine = await cl.make_async(indexing)(llm,pdf.path)
            msg.content = f"`{pdf.name}` processed."
            await msg.update()
            msg = cl.Message(author="Beast",content=f"Generating Response...")
            await msg.send()
            response =await cl.make_async(qa)(sp,query_engine,message)
            print(response)
            msg.content = str(response)
            await msg.update()
    
    elif not message.elements and engine!=None:
        msg = cl.Message(author="Beast",content=f"Generating Response...")
        await msg.send()
        response =await cl.make_async(qa)(sp,engine,message)
        print(response)
        msg.content = str(response)
        await msg.update()
    
    elif not message.elements and engine==None:
        msg = cl.Message(author="Beast",content=f"Generating Response...")
        await msg.send()
        payload = {
            "input_variables": {"system": sp,
                "prompt":message.content},
            "stream": False,
            "temperature": 0.6,
            "max_tokens": 512
        }
        output = service_client.generate(model = "deploy-llm", data = payload)
        msg.content = str(output['text'][0])
        await msg.update()
    
    else:
        cl.Message(author="Beast",content="Broken ;(")