jpfearnworks commited on
Commit
9d0c72d
β€’
1 Parent(s): 040f332

Decouple components from interface, adds tabs

Browse files
Dockerfile CHANGED
@@ -8,11 +8,11 @@ RUN pip install -r requirements.txt
8
 
9
  COPY . .
10
 
11
- WORKDIR /app/src
12
 
13
  ENV PATH="/root/.local/bin:${PATH}"
14
 
15
  EXPOSE 8501
16
  EXPOSE 7000
17
 
18
- CMD python main.py
 
8
 
9
  COPY . .
10
 
11
+ WORKDIR /app/
12
 
13
  ENV PATH="/root/.local/bin:${PATH}"
14
 
15
  EXPOSE 8501
16
  EXPOSE 7000
17
 
18
+ CMD python server.py
README.MD CHANGED
@@ -4,7 +4,7 @@ Heavily inspired by examples and code across the AI Open Source community but wi
4
 
5
  ## UI
6
  Front end for templates currently uses streamlit, however display for each agent example will be heavily decoupled from deployment avenue.
7
- Strategies for jupyter, streamlit, and react will be prioritized in general at this time.
8
 
9
  ## Modules
10
 
 
4
 
5
  ## UI
6
  Front end for templates currently uses streamlit, however display for each agent example will be heavily decoupled from deployment avenue.
7
+ Strategies for jupyter, gradio, and react will be prioritized in general at this time.
8
 
9
  ## Modules
10
 
{src β†’ modules}/__init__.py RENAMED
File without changes
modules/domains/__init__.py ADDED
File without changes
{src β†’ modules}/reasoning/__init__.py RENAMED
@@ -1,5 +1,6 @@
1
- from .react import ReactStrategy, get_react_config
2
  from .tree_of_thought import TreeOfThoughtStrategy, get_tot_config
3
  from .chain_of_thought import ChainOfThoughtStrategy, get_cot_confg
4
  from .reasoning_router import ReasoningRouter, get_reasoning_router_config
5
- from .reasoning_strategy import ReasoningStrategy, ReasoningConfig, get_reasoning_config
 
 
1
+ from .re_act import ReActStrategy, get_re_act_config
2
  from .tree_of_thought import TreeOfThoughtStrategy, get_tot_config
3
  from .chain_of_thought import ChainOfThoughtStrategy, get_cot_confg
4
  from .reasoning_router import ReasoningRouter, get_reasoning_router_config
5
+ from .reasoning_strategy import ReasoningStrategy, ReasoningConfig, get_reasoning_config
6
+ from .component import create_reasoning_router_ui
{src β†’ modules}/reasoning/chain_of_thought.py RENAMED
File without changes
modules/reasoning/component.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from modules.reasoning.reasoning_router import ReasoningRouter, get_reasoning_router_config
2
+ import gradio as gr
3
+ import os
4
+ openai_api_key = os.getenv("OPENAI_API_KEY")
5
+
6
+
7
+ def determine_and_execute(question, temperature):
8
+ config = get_reasoning_router_config(temperature=temperature)
9
+ config.temperature = temperature
10
+ determiner = ReasoningRouter(api_key=openai_api_key, config=config, question=question, display=print)
11
+ determine_output, execute_output = determiner.determine_and_execute()
12
+ return determine_output, execute_output
13
+
14
+ examples = [["""Bob is in the living room.
15
+ He walks to the kitchen, carrying a cup.
16
+ He puts a ball in the cup and carries the cup to the bedroom.
17
+ He turns the cup upside down, then walks to the garden.
18
+ He puts the cup down in the garden, then walks to the garage.
19
+ Where is the ball?""", 0.6], ["Given the task of building a house in the middle of a river, what are three strategies I could use to mitigate risk of flooding?", 0.6 ]]
20
+
21
+ def create_reasoning_router_ui(cache_examples=False):
22
+ with gr.Row():
23
+ question = gr.Textbox(label="Enter your question here:")
24
+ temperature = gr.Slider(minimum=0, maximum=2, default=.7, label="Temperature")
25
+ with gr.Column():
26
+ reasoning_strategy = gr.Textbox(label="Reasoning Strategy")
27
+ reasoning = gr.Textbox(label="Reasoning")
28
+
29
+ generate_button = gr.Button(label="Generate")
30
+ generate_button.click(determine_and_execute, outputs=[reasoning_strategy, reasoning], inputs=[question, temperature])
31
+ gr.Examples(examples=examples, fn=determine_and_execute, cache_examples=cache_examples, inputs=[question, temperature], outputs=[reasoning_strategy, reasoning])
32
+
src/reasoning/react.py β†’ modules/reasoning/re_act.py RENAMED
@@ -6,7 +6,7 @@ from langchain.agents.react.base import DocstoreExplorer
6
  from typing import Callable, Optional
7
  import pprint
8
 
9
- class ReactStrategy(ReasoningStrategy):
10
  def __init__(self, config: ReasoningConfig, display: Callable):
11
  super().__init__(config=config, display=display)
12
  print("Creating reAct strategy with config: ",)
@@ -29,18 +29,18 @@ class ReactStrategy(ReasoningStrategy):
29
  description="Lookup a term in the docstore.",
30
  )
31
  ]
32
- react = initialize_agent(tools, self.llm, agent="react-docstore", verbose=True)
33
  agent_executor = AgentExecutor.from_agent_and_tools(
34
- agent=react.agent,
35
  tools=tools,
36
  verbose=True,
37
  )
38
- response_react = agent_executor.run(question)
39
- print(response_react)
40
- self.display(response_react)
41
- return response_react
42
 
43
- def get_react_config(temperature: float = 0.7) -> ReasoningConfig:
44
  usage = """
45
  The solution for this problem requires searching for further information online,
46
  generating reasoning traces and task-specific actions in an interleaved manner.
 
6
  from typing import Callable, Optional
7
  import pprint
8
 
9
+ class ReActStrategy(ReasoningStrategy):
10
  def __init__(self, config: ReasoningConfig, display: Callable):
11
  super().__init__(config=config, display=display)
12
  print("Creating reAct strategy with config: ",)
 
29
  description="Lookup a term in the docstore.",
30
  )
31
  ]
32
+ re_act = initialize_agent(tools, self.llm, agent="react-docstore", verbose=True)
33
  agent_executor = AgentExecutor.from_agent_and_tools(
34
+ agent=re_act.agent,
35
  tools=tools,
36
  verbose=True,
37
  )
38
+ response_re_act = agent_executor.run(question)
39
+ print(response_re_act)
40
+ self.display(response_re_act)
41
+ return response_re_act
42
 
43
+ def get_re_act_config(temperature: float = 0.7) -> ReasoningConfig:
44
  usage = """
45
  The solution for this problem requires searching for further information online,
46
  generating reasoning traces and task-specific actions in an interleaved manner.
{src β†’ modules}/reasoning/reasoning_router.py RENAMED
@@ -1,5 +1,5 @@
1
  from langchain import PromptTemplate, LLMChain
2
- from .react import ReactStrategy, get_react_config
3
  from .tree_of_thought import TreeOfThoughtStrategy, get_tot_config
4
  from .chain_of_thought import ChainOfThoughtStrategy, get_cot_confg
5
  from .reasoning_strategy import ReasoningConfig
@@ -28,7 +28,7 @@ class ReasoningRouter:
28
 
29
 
30
  self.strategies = {
31
- 1: ReactStrategy(get_react_config(temperature=config.temperature), display=self.display),
32
  2: TreeOfThoughtStrategy(get_tot_config(temperature=config.temperature),display=self.display),
33
  3: ChainOfThoughtStrategy(get_cot_confg(temperature=config.temperature),display=self.display)
34
  }
 
1
  from langchain import PromptTemplate, LLMChain
2
+ from .re_act import ReActStrategy, get_re_act_config
3
  from .tree_of_thought import TreeOfThoughtStrategy, get_tot_config
4
  from .chain_of_thought import ChainOfThoughtStrategy, get_cot_confg
5
  from .reasoning_strategy import ReasoningConfig
 
28
 
29
 
30
  self.strategies = {
31
+ 1: ReActStrategy(get_re_act_config(temperature=config.temperature), display=self.display),
32
  2: TreeOfThoughtStrategy(get_tot_config(temperature=config.temperature),display=self.display),
33
  3: ChainOfThoughtStrategy(get_cot_confg(temperature=config.temperature),display=self.display)
34
  }
{src β†’ modules}/reasoning/reasoning_strategy.py RENAMED
File without changes
{src β†’ modules}/reasoning/tree_of_thought.py RENAMED
File without changes
server.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv, find_dotenv
2
+ import os
3
+ import gradio as gr
4
+ from modules.reasoning.component import create_reasoning_router_ui
5
+ load_dotenv(find_dotenv())
6
+
7
+ openai_api_key = os.getenv("OPENAI_API_KEY")
8
+
9
+
10
+
11
+ def create_interface():
12
+ title: str = "Prompt Strategy Demo"
13
+ description: str = "AI Agents Sandbox"
14
+ with gr.Blocks(analytics_enabled=False, capture_session=True, title=title, description=description) as interface:
15
+ with gr.Tab("Reasoning Router"):
16
+ create_reasoning_router_ui()
17
+ with gr.Tab("Knowledge Domains"):
18
+ gr.Label("Knowledge Domains")
19
+ interface.queue()
20
+ interface.launch(server_name="0.0.0.0", server_port=7000)
21
+
22
+
23
+ if __name__ == "__main__":
24
+ create_interface()
src/main.py DELETED
@@ -1,26 +0,0 @@
1
- from dotenv import load_dotenv, find_dotenv
2
- import os
3
- import gradio as gr
4
- from reasoning import ReasoningRouter, get_reasoning_router_config
5
- load_dotenv(find_dotenv())
6
-
7
- openai_api_key = os.getenv("OPENAI_API_KEY")
8
-
9
-
10
- def determine_and_execute(question, temperature):
11
- config = get_reasoning_router_config(temperature=temperature)
12
- config.temperature = temperature
13
- determiner = ReasoningRouter(api_key=openai_api_key, config=config, question=question, display=print)
14
- determine_output, execute_output = determiner.determine_and_execute()
15
- return determine_output, execute_output
16
-
17
- iface = gr.Interface(
18
- fn=determine_and_execute,
19
- inputs=[gr.components.Textbox(label="Enter your question here:"), gr.components.Slider(minimum=0, maximum=2, default=.7, label="Temperature")],
20
- outputs=[gr.components.Textbox(label="Reasoning Strategy"), gr.components.Textbox(label="Reasoning")],
21
- title="Prompt Strategy Demo",
22
- description="AI Agents Sandbox"
23
- )
24
-
25
- if __name__ == "__main__":
26
- iface.launch(server_name="0.0.0.0", server_port=7000)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/streamlit_main.py DELETED
@@ -1,30 +0,0 @@
1
- from dotenv import load_dotenv, find_dotenv
2
- import os
3
- import streamlit as st
4
- from reasoning import ReasoningRouter, get_reasoning_router_config
5
- load_dotenv(find_dotenv())
6
-
7
-
8
- def run_app():
9
- """
10
- Runs the Streamlit application.
11
-
12
- Returns:
13
- None
14
- """
15
- openai_api_key = os.getenv("OPENAI_API_KEY")
16
-
17
- col1, col2 = st.columns([1, 3])
18
- with col1:
19
- st.text("AI Agents Sandbox")
20
- with col2:
21
- st.title("Prompt Strategy Demo")
22
- question = st.text_area('Enter your question here:', height=200)
23
- config = get_reasoning_router_config()
24
- if question:
25
- determiner = ReasoningRouter(api_key=openai_api_key, config=config, question=question,display=st.write)
26
- determiner.determine_and_execute()
27
-
28
- if __name__ == "__main__":
29
- run_app()
30
-