File size: 4,296 Bytes
209745e
b867eeb
5243d9c
 
 
b867eeb
5243d9c
 
 
 
 
 
 
 
 
209745e
f71e6e6
 
 
 
 
209745e
 
5243d9c
 
 
b867eeb
5243d9c
209745e
5243d9c
 
 
 
 
 
 
 
1b8a90e
5243d9c
 
 
 
 
 
 
 
 
 
209745e
5243d9c
 
 
209745e
 
 
 
 
 
 
 
 
 
 
5243d9c
 
 
 
 
 
 
 
209745e
5243d9c
 
 
209745e
5243d9c
 
 
209745e
 
 
5243d9c
 
 
 
 
209745e
5243d9c
209745e
 
5243d9c
209745e
 
 
 
 
 
5243d9c
209745e
 
 
 
5243d9c
209745e
5243d9c
 
 
b867eeb
209745e
 
5243d9c
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
import os
import asyncio
import websockets
import sqlite3
import datetime
import fireworks.client
import streamlit as st
import threading
import conteneiro
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import HuggingFaceHub
from langchain.llms.fireworks import Fireworks
from langchain.chat_models.fireworks import ChatFireworks

GOOGLE_CSE_ID = os.getenv("GOOGLE_CSE_ID")
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
FIREWORKS_API_KEY = os.getenv("FIREWORKS_API_KEY")
HUGGINGFACEHUB_API_TOKEN = os.getenv("HUGGINGFACEHUB_API_TOKEN")

client_ports = []

# Define the websocket client class
class AgentsGPT:
    def __init__(self):

        self.status = st.sidebar.status(label="AgentsGPT", state="complete", expanded=False)
        
    async def get_response(self, question):
          
        os.environ["GOOGLE_CSE_ID"] = GOOGLE_CSE_ID
        os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY
        os.environ["FIREWORKS_API_KEY"] = FIREWORKS_API_KEY
        os.environ["HUGGINGFACEHUB_API_TOKEN"] = HUGGINGFACEHUB_API_TOKEN

        llm = Fireworks(model="accounts/fireworks/models/llama-v2-70b-chat", model_kwargs={"temperature":0, "max_tokens":1500, "top_p":1.0}, streaming=True)
        tools = load_tools(["google-search"], llm=llm)
        agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True, return_intermediate_steps=True)

        response = agent({"input": question})
        output = response["output"]
        steps = response["intermediate_steps"]
        serverResponse = f"AgentsGPT: {output}"
        responseSteps = f"intermediate steps: {steps}"
        answer = f"Main output: {output}. Intermediate steps: {steps}"
        print(serverResponse)
        print(responseSteps)
        output_Msg = st.chat_message("ai")
        output_Msg.markdown(serverResponse)
        output_steps = st.chat_message("assistant")
        output_steps.markdown(responseSteps)

        return answer


    # Define a function that will run the client in a separate thread
    def run(self):
        # Create a thread object
        self.thread = threading.Thread(target=self.run_client)
        # Start the thread
        self.thread.start()

    # Define a function that will run the client using asyncio
    def run_client(self):
        # Get the asyncio event loop
        loop = asyncio.new_event_loop()
        # Set the event loop as the current one
        asyncio.set_event_loop(loop)
        # Run the client until it is stopped
        loop.run_until_complete(self.client())

    # Stop the WebSocket client
    async def stop_client():
        global ws
        # Close the connection with the server
        await ws.close()
        client_ports.pop()
        print("Stopping WebSocket client.")    

    # Define a coroutine that will connect to the server and exchange messages
    async def startClient(self, clientPort):

        self.uri = f'ws://localhost:{clientPort}'   
        self.name = f"Chaindesk client port: {clientPort}"
        conteneiro.clients.append(self.name)
        status = self.status       
        # Connect to the server
        async with websockets.connect(self.uri) as websocket:
            # Loop forever
            while True:
                status.update(label=self.name, state="running", expanded=True)               
                # Listen for messages from the server
                input_message = await websocket.recv()
                print(f"Server: {input_message}")
                input_Msg = st.chat_message("assistant")
                input_Msg.markdown(input_message)
                try:
                    response = await self.get_response(input_message)
                    res1 = f"Client: {response}"
                    output_Msg = st.chat_message("ai")
                    output_Msg.markdown(res1)
                    await websocket.send(res1)
                    status.update(label=self.name, state="complete", expanded=True)

                except websockets.ConnectionClosed:
                    print("client disconnected")
                    continue

                except Exception as e:
                    print(f"Error: {e}")
                    continue