Skip to content

Commit

Permalink
llm model is implemented and assistant code started
Browse files Browse the repository at this point in the history
  • Loading branch information
melih-unsal committed Oct 9, 2024
1 parent ce8aeba commit 9e8b39e
Show file tree
Hide file tree
Showing 27 changed files with 110 additions and 38 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ Example Output (truncated):
# Code
import streamlit as st
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down
1 change: 1 addition & 0 deletions demogpt/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from demogpt.model import DemoGPT
from demogpt.tools import *
17 changes: 17 additions & 0 deletions demogpt/assistants/assistant.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import os

from langchain.agents import AgentType, initialize_agent

class Assistant:
def __init__(self, tools, llm, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=False):
self.agent = initialize_agent(tools=tools, llm=llm, agent=agent_type, verbose=verbose)

def ask(self, prompt):
return self.agent.run(prompt)

if __name__ == "__main__":
from demogpt.tools import DuckDuckGoSearchTool
from demogpt.llms import OpenAIModel
assistant = Assistant(tools=[DuckDuckGoSearchTool()], llm=OpenAIModel(model_name="gpt-4o-mini"))
query = "What is the capital of France?"
print(assistant.ask(query))
4 changes: 1 addition & 3 deletions demogpt/chains/chains.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
from time import sleep

import autopep8
from langchain.chains import LLMChain
from langchain_openai import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down Expand Up @@ -83,7 +82,6 @@ def getChain(cls, system_template="", human_template="", change=False, change_mo
chain = chat_prompt | cls.getModel(change=change, temperature=temperature, change_model=change_model) | parser

return chain.invoke(kwargs)
#return LLMChain(llm=cls.getModel(change=change, temperature=temperature, change_model=change_model), prompt=chat_prompt).run(**kwargs)

@classmethod
def title(cls, instruction):
Expand Down
2 changes: 1 addition & 1 deletion demogpt/chains/prompts/task_list/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"""

imports = """
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.llms import OpenAI
from langchain.tools import DuckDuckGoSearchRun
from langchain.agents.tools import Tool
Expand Down
2 changes: 1 addition & 1 deletion demogpt/chains/prompts/task_list/search_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from langchain.memory import ConversationBufferMemory
from langchain.agents.tools import Tool
from langchain.chains import LLMMathChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.callbacks import StreamlitCallbackHandler
msgs = StreamlitChatMessageHistory()
Expand Down
4 changes: 2 additions & 2 deletions demogpt/chains/prompts/task_list/summarize.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
You will summarization code with a strict structure like in the below but
loader will change depending on the input
###
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain
def {function_name}(docs):
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-16k", openai_api_key=openai_api_key)
Expand All @@ -26,7 +26,7 @@ def {function_name}(docs):
"""

imports = """
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain
"""

Expand Down
2 changes: 1 addition & 1 deletion demogpt/chains/self_refiner.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os

from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (AIMessagePromptTemplate,
ChatPromptTemplate,
HumanMessagePromptTemplate,
Expand Down
2 changes: 1 addition & 1 deletion demogpt/chains/task_chains.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from difflib import SequenceMatcher

from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down
2 changes: 1 addition & 1 deletion demogpt/chains/task_chains_seperate.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from difflib import SequenceMatcher

from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down
1 change: 1 addition & 0 deletions demogpt/llms/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from demogpt.llms.openai import OpenAIModel, OpenAIChatModel
8 changes: 8 additions & 0 deletions demogpt/llms/openai.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from langchain_openai import OpenAI
from langchain_community.chat_models import ChatOpenAI

class OpenAIModel(OpenAI):
...

class OpenAIChatModel(ChatOpenAI):
...
8 changes: 4 additions & 4 deletions demogpt/test_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ def show_summarization(summarization):
"code_snippets": """
import streamlit as st
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down Expand Up @@ -341,7 +341,7 @@ def show_horoscope_prediction(horoscope_prediction):
"code_snippets": """
import streamlit as st
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down Expand Up @@ -416,7 +416,7 @@ def show_translated_text(translated_text):
"code_snippets": """
import streamlit as st
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down Expand Up @@ -539,7 +539,7 @@ def show_text(melody, lyrics):
"code_snippets": """
import streamlit as st
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
Expand Down
1 change: 1 addition & 0 deletions demogpt/tools/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from demogpt.tools.base import BaseTool
from demogpt.tools.duckduckgo import DuckDuckGoSearchTool
from demogpt.tools.bash import BashTool
from demogpt.tools.repl import PythonTool
Expand Down
23 changes: 23 additions & 0 deletions demogpt/tools/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@


from langchain_core.tools import BaseTool as LangChainBaseTool
from typing import no_type_check

class BaseTool(LangChainBaseTool):
def __init__(self, is_single_input=True):
self.is_single_input = is_single_input
self.setAttributes()

def _run(self, *args, **kwargs):
return None

@no_type_check
def __setattr__(self, name, value): # noqa: C901 (ignore complexity)
...

def setAttributes(self):

for attribute in self.tool.__dict__:
print(attribute)
setattr(self, attribute, self.tool.__dict__[attribute])

5 changes: 3 additions & 2 deletions demogpt/tools/bash.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from langchain_community.tools import ShellTool

class BashTool:
from demogpt.tools import BaseTool
class BashTool(BaseTool):
def __init__(self):
self.tool = ShellTool()
super().__init__()

def run(self, commands):
if isinstance(commands, str):
Expand Down
6 changes: 4 additions & 2 deletions demogpt/tools/duckduckgo.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
class DuckDuckGoSearchTool:
from demogpt.tools import BaseTool
class DuckDuckGoSearchTool(BaseTool):
def __init__(self, raw_results=False, max_results=4, backend="text"):
if raw_results:
from langchain_community.tools import DuckDuckGoSearchResults
self.tool = DuckDuckGoSearchResults(max_results=max_results, backend=backend)
else:
from langchain_community.tools import DuckDuckGoSearchRun
self.tool = DuckDuckGoSearchRun()

super().__init__()

def run(self, inp):
return self.tool.run(inp)

Expand Down
6 changes: 4 additions & 2 deletions demogpt/tools/pubmed.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from langchain_community.tools.pubmed.tool import PubmedQueryRun
from demogpt.tools import BaseTool

class PubmedTool:
class PubmedTool(BaseTool):
def __init__(self):
self.tool = PubmedQueryRun()

super().__init__()

def run(self, query):
return self.tool.invoke(query)

Expand Down
4 changes: 3 additions & 1 deletion demogpt/tools/repl.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from langchain_experimental.utilities import PythonREPL
from demogpt.tools import BaseTool

class PythonTool:
class PythonTool(BaseTool):
def __init__(self):
self.tool = PythonREPL()
super().__init__()

def run(self, code):
return self.tool.run(code)
Expand Down
4 changes: 3 additions & 1 deletion demogpt/tools/req.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from langchain_community.utilities import TextRequestsWrapper
from demogpt.tools import BaseTool

class RequestUrlTool:
class RequestUrlTool(BaseTool):
def __init__(self):
self.tool = TextRequestsWrapper()
super().__init__()

def run(self, url):
return self.tool.get(url)
Expand Down
6 changes: 4 additions & 2 deletions demogpt/tools/research.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from langchain_community.utilities import ArxivAPIWrapper
from demogpt.tools import BaseTool

class ArxivTool:
class ArxivTool(BaseTool):
def __init__(self):
self.tool = ArxivAPIWrapper()

super().__init__()

def run(self, query):
return self.tool.run(query)

Expand Down
6 changes: 4 additions & 2 deletions demogpt/tools/stack_exchange.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from langchain_community.utilities import StackExchangeAPIWrapper
from demogpt.tools import BaseTool

class StackOverFlowTool:
class StackOverFlowTool(BaseTool):
def __init__(self):
self.tool = StackExchangeAPIWrapper()

super().__init__()

def run(self, query):
return self.tool.run(query)

Expand Down
8 changes: 6 additions & 2 deletions demogpt/tools/weather.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import os
from langchain_community.utilities import OpenWeatherMapAPIWrapper
from langchain_community.tools.openweathermap.tool import OpenWeatherMapQueryRun
from demogpt.tools import BaseTool

class WeatherTool:
class WeatherTool(BaseTool):
def __init__(self):
api_key = os.environ.get('OPENWEATHERMAP_API_KEY')
if not api_key:
raise ValueError('OPENWEATHERMAP_API_KEY environment variable is not set')
self.tool = OpenWeatherMapAPIWrapper()
wrapper = OpenWeatherMapAPIWrapper()
self.tool = OpenWeatherMapQueryRun(api_wrapper=wrapper)
super().__init__()

def run(self, city):
return self.tool.run(city)
Expand Down
4 changes: 3 additions & 1 deletion demogpt/tools/wikidata.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from langchain_community.tools.wikidata.tool import WikidataAPIWrapper, WikidataQueryRun
from demogpt.tools import BaseTool

class WikiDataTool:
class WikiDataTool(BaseTool):
def __init__(self):
self.tool = WikidataQueryRun(api_wrapper=WikidataAPIWrapper())
super().__init__()

def run(self, query):
return self.tool.run(query)
Expand Down
6 changes: 4 additions & 2 deletions demogpt/tools/wikiped.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
from demogpt.tools import BaseTool

class WikipediaTool:
class WikipediaTool(BaseTool):
def __init__(self):
self.tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())

super().__init__()

def run(self, query):
return self.tool.run(query)

Expand Down
6 changes: 4 additions & 2 deletions demogpt/tools/youtube.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from langchain_community.tools import YouTubeSearchTool as Youtube
from demogpt.tools import BaseTool

class YouTubeSearchTool:
class YouTubeSearchTool(BaseTool):
def __init__(self):
self.tool = Youtube()

super().__init__()

def run(self, query):
return self.tool.run(query)

Expand Down
8 changes: 4 additions & 4 deletions demogpt/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ def getHumanInput(template, inputs):
from langchain.prompts import PromptTemplate
from langchain.memory.chat_message_histories import StreamlitChatMessageHistory
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
msgs = StreamlitChatMessageHistory()
Expand Down Expand Up @@ -490,7 +490,7 @@ def getHumanInput(template, inputs):
from langchain.prompts import PromptTemplate
from langchain.memory.chat_message_histories import StreamlitChatMessageHistory
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
"""
inputs = """
Expand Down Expand Up @@ -566,7 +566,7 @@ def getPromptChatTemplateCode(templates, task):

code = f"""\n
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate)
def {signature}:
Expand Down Expand Up @@ -641,7 +641,7 @@ def getPromptChatTemplateCodeSeperate(templates, task):

imports = f"""\n
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate)
"""

Expand Down

0 comments on commit 9e8b39e

Please sign in to comment.