File size: 2,016 Bytes
25714bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from langgraph.graph import StateGraph,START,END
from langchain_core.messages import HumanMessage,AIMessage,AnyMessage
from langgraph.graph.message import add_messages
from pydantic import BaseModel
from typing import Annotated,Optional,List,TypedDict
from dotenv import load_dotenv
import os
from IPython.display import display,Image,Markdown
from groq import Groq
import random
import gradio as gr


class State(TypedDict):
    messages:Annotated[List[AnyMessage],add_messages]
    

llm=Groq(base_url="https://api.groq.com",api_key=os.getenv("GROQ_API_KEY"))

def chat(oldState:State):
    # user_prompt=oldState['messages'][-1]
    formatted_messages=[]
    role=None
    for message in oldState['messages']:
        if isinstance(message,HumanMessage):
           role="user"
        else:
           role="assistant"
        formatted_messages.append({"role":role,"content":message.content})
    formatted_messages.insert(0,{"role":"system","content":"You are a helpful assistant"})
    response=llm.chat.completions.create(
        model="llama-3.3-70b-versatile",
        messages=formatted_messages
   
    )
  
    ai=AIMessage(content=response.choices[0].message.content)
    return {"messages":[ai]}



graph_builder=StateGraph(State)


graph_builder.add_node("chat",chat)


graph_builder.add_edge(START,"chat")
graph_builder.add_edge("chat",END)


graph=graph_builder.compile()
    
def gradio_chat(user_prompt,history):
    
    messages = []
    for human, bot in history:
        messages.append(HumanMessage(content=human))
        messages.append(AIMessage(content=bot))
  
    messages.append(HumanMessage(content=user_prompt))

    state = {"messages": messages}
  

    result=graph.invoke(state)
    reply=result["messages"][-1].content
    return reply



app=gr.ChatInterface(
    fn=gradio_chat,
    title="Chat Bot, powered by Syed Muhammad Raza Ali Zaidi",
    description="Chat with Llama 3.3"
)


app.launch()