File size: 3,948 Bytes
bfc7fc8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import streamlit as st
from langchain.agents import load_tools
from langchain.chat_models import ChatOpenAI
from langchain.llms import OpenAI

from llama_agi.execution_agent import ToolExecutionAgent
from llama_agi.runners import AutoStreamlitAGIRunner
from llama_agi.task_manager import LlamaTaskManager

from llama_index import ServiceContext, LLMPredictor


st.set_page_config(layout="wide")
st.header("🤖 Llama AGI 🦙")
st.markdown("This demo uses the [llama-agi](https://github.com/run-llama/llama-lab/tree/main/llama_agi) package to create an AutoGPT-like agent, powered by [LlamaIndex](https://github.com/jerryjliu/llama_index) and Langchain. The AGI has access to tools that search the web and record notes, as it works to achieve an objective. Use the setup tab to configure your LLM settings and initial objective+tasks. Then use the Launch tab to run the AGI. Kill the AGI by refreshing the page.")

setup_tab, launch_tab = st.tabs(["Setup", "Launch"])

with setup_tab:
    if 'init' in st.session_state:
        st.success("Initialized!")

    st.subheader("LLM Setup")
    col1, col2, col3 = st.columns(3)

    with col1:
        openai_api_key = st.text_input("Enter your OpenAI API key here", type="password")
        llm_name = st.selectbox(
            "Which LLM?", ["text-davinci-003", "gpt-3.5-turbo", "gpt-4"]
        )

    with col2:
        google_api_key = st.text_input("Enter your Google API key here", type="password")
        model_temperature = st.slider(
            "LLM Temperature", min_value=0.0, max_value=1.0, step=0.1, value=0.0
        )
    
    with col3:
        google_cse_id = st.text_input("Enter your Google CSE ID key here", type="password")
        max_tokens = st.slider(
            "LLM Max Tokens", min_value=256, max_value=1024, step=8, value=512
        )

    st.subheader("AGI Setup")
    objective = st.text_input("Objective:", value="Solve world hunger")
    initial_task = st.text_input("Initial Task:", value="Create a list of tasks")
    max_iterations = st.slider("Iterations until pause", value=1, min_value=1, max_value=10, step=1)

    if st.button('Initialize?'):
        os.environ['OPENAI_API_KEY'] = openai_api_key
        os.environ['GOOGLE_API_KEY'] = google_api_key
        os.environ['GOOGLE_CSE_ID'] = google_cse_id
        if llm_name == "text-davinci-003":
            llm = OpenAI(
                temperature=model_temperature, model_name=llm_name, max_tokens=max_tokens
            )
        else:
            llm= ChatOpenAI(
                temperature=model_temperature, model_name=llm_name, max_tokens=max_tokens
            )
        
        service_context = ServiceContext.from_defaults(
            llm_predictor=LLMPredictor(llm=llm), chunk_size_limit=512
        )

        st.session_state['task_manager'] = LlamaTaskManager(
            [initial_task], task_service_context=service_context
        )

        from llama_agi.tools import search_notes, record_note, search_webpage
        tools = load_tools(["google-search-results-json"])
        tools = tools + [search_notes, record_note, search_webpage]
        st.session_state['execution_agent'] = ToolExecutionAgent(llm=llm, tools=tools)

        st.session_state['initial_task'] = initial_task
        st.session_state['objective'] = objective

        st.session_state['init'] = True
        st.experimental_rerun()

with launch_tab:
    st.subheader("AGI Status")
    if st.button(f"Continue for {max_iterations} Steps"):
        if st.session_state.get('init', False):
            # launch the auto runner
            with st.spinner("Running!"):
                runner = AutoStreamlitAGIRunner(st.session_state['task_manager'], st.session_state['execution_agent'])
                runner.run(st.session_state['objective'], st.session_state['initial_task'], 2, max_iterations=max_iterations)