diff --git a/.github/workflows/release_libraries.yml b/.github/workflows/release_libraries.yml new file mode 100644 index 0000000..3098e56 --- /dev/null +++ b/.github/workflows/release_libraries.yml @@ -0,0 +1,41 @@ +# .github/workflows/ci-cd.yml +on: workflow_dispatch +jobs: + pypi-publish: + name: Upload release to PyPI + runs-on: self-hosted + #runs-on: ubuntu-latest + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: recursive + - name: Install dependencies + run: pip install -r requirements.txt + + - name: build packages + run: | + TAG=${GITHUB_REF/refs\/tags\//} + VERSION=${TAG#*v} + bash build_package.sh ${VERSION} + + - name: Publish Proto + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: proto/dist + + - name: Publish Kernel + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: kernel/dist + + - name: Publish Agent + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: agent/dist + - name: Publish Chat + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: chat/dist diff --git a/agent/setup.py b/agent/setup.py index a7403a7..1cc417f 100644 --- a/agent/setup.py +++ b/agent/setup.py @@ -19,7 +19,7 @@ setup( name="octopus_agent", - version="0.1.2", + version="0.1.1", description="Open source code interpreter agent for LLM", author="imotai", author_email="wangtaize@dbpunk.com", @@ -33,14 +33,12 @@ install_requires=[ "octopus_proto", "octopus_kernel", - "langchain>=0.0.227", + "langchain>=0.0.286", "grpcio-tools>=1.57.0", "grpc-google-iam-v1>=0.12.6", "aiofiles", - "pydantic", "python-dotenv", - "openai", - "aiosqlite", + "openai" ], entry_points={ "console_scripts": [ diff --git a/agent/src/octopus_agent/gpt_tools.py b/agent/src/octopus_agent/gpt_tools.py index ffae6b3..e6e5a06 100644 --- a/agent/src/octopus_agent/gpt_tools.py +++ b/agent/src/octopus_agent/gpt_tools.py @@ -18,13 +18,11 @@ from langchain.tools import StructuredTool from .tools import OctopusAPIMarkdownOutput from typing import Any, Dict, List, Optional, Sequence, Union, Type -from pydantic import BaseModel, Field +from langchain.pydantic_v1 import BaseModel, Field from langchain.callbacks.manager import ( AsyncCallbackManagerForToolRun, CallbackManagerForToolRun, ) - - class AskQuestionInput(BaseModel): question: str = Field(description="the question") @@ -58,12 +56,11 @@ class ExecutePythonCodeInput(BaseModel): description="the saved filename list", default=[] ) - class ExecutePythonCodeTool(StructuredTool): name = "execute_python_code" description = """Execute arbitrary Python code Returns a Markdown format string including return code, result, stdout, stderr, error""" args_schema: Type[BaseModel] = ExecutePythonCodeInput - octopus_api: OctopusAPIMarkdownOutput = None + octopus_api: Optional[OctopusAPIMarkdownOutput] = None def _run( self, @@ -72,8 +69,6 @@ def _run( saved_filenames: Optional[List[str]] = None, run_manager: Optional[CallbackManagerForToolRun] = None, ) -> str: - if not self.octopus_api: - self.octopus_api = OctopusAPIMarkdownOutput() code = code result = self.octopus_api.run(code) return result @@ -85,6 +80,4 @@ async def _arun( saved_filenames: Optional[List[str]] = None, run_manager: Optional[AsyncCallbackManagerForToolRun] = None, ) -> str: - if not self.octopus_api: - self.octopus_api = OctopusAPIMarkdownOutput() return await self.octopus_api.arun(code) diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..92b4758 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,4 @@ +FROM ubuntu +RUN apt update +RUN apt install -y python3 python3-pip +RUN pip install -U octopus_agent octopus_kernel diff --git a/docker/Dockerfile_for_agent b/docker/Dockerfile_for_agent new file mode 100644 index 0000000..b127d25 --- /dev/null +++ b/docker/Dockerfile_for_agent @@ -0,0 +1,5 @@ +FROM octopus_base +WORKDIR /agent +VOLUME /agent +ADD start_agent.sh /agent/ +CMD ["bash", "/agent/start_agent.sh"] diff --git a/docker/Dockerfile_for_kernel b/docker/Dockerfile_for_kernel index 686845d..3990aee 100644 --- a/docker/Dockerfile_for_kernel +++ b/docker/Dockerfile_for_kernel @@ -1,7 +1,4 @@ -FROM python:3.11 -ADD requirements_kernel.txt /tmp/requirements.txt -RUN pip install -r /tmp/requirements.txt -RUN pip install octopus_proto octopus_kernel +FROM octopus_base WORKDIR /kernel VOLUME /kernel ADD start_kernel.sh /kernel/ diff --git a/docker/compose.yaml b/docker/compose.yaml new file mode 100644 index 0000000..0cee038 --- /dev/null +++ b/docker/compose.yaml @@ -0,0 +1,15 @@ +services: + kernel: + env_file: + - kernel.env + image: octopus_kernel:latest + ports: + - '9527:9527' + agent: + image: octopus_agent:latest + env_file: + - agent.env + ports: + - '9528:9528' + depends_on: + - kernel diff --git a/docker/requirements.txt b/docker/requirements.txt deleted file mode 100644 index 9721326..0000000 --- a/docker/requirements.txt +++ /dev/null @@ -1,16 +0,0 @@ -ipykernel==6.25.1 -jupyter_client==8.3.0 -numpy==1.24.2 -opencv_python==4.8.0.76 -python-dotenv==1.0.0 -setuptools==65.5.1 -grpcio-tools==1.57.0 -pytest-asyncio==0.21.0 -grpc-google-iam-v1==0.12.6 -langchain==0.0.275 -yfinance==0.2.28 -discord.py==2.3.2 -imageio==2.31.3 -Pillow==10.0.0 -matplotlib==3.7.2 -wikipedia==1.4.0 diff --git a/docker/start_agent.sh b/docker/start_agent.sh index 4ce8a71..c3da949 100755 --- a/docker/start_agent.sh +++ b/docker/start_agent.sh @@ -3,7 +3,7 @@ # start_kernel.sh echo "rpc_port=${rpc_port}" >.env -echo "rpc_host=127.0.0.1" >>.env +echo "rpc_host=0.0.0.0" >>.env echo "admin_key=${admin_key}" >>.env echo "llm_key=${llm_key}" >> .env echo "max_file_size=20480000" >> .env diff --git a/docker/start_kernel.sh b/docker/start_kernel.sh index 8235bf6..3674110 100755 --- a/docker/start_kernel.sh +++ b/docker/start_kernel.sh @@ -5,7 +5,6 @@ echo "config_root_path=/kernel" >.env echo "workspace=${workspace}" >>.env echo "rpc_port=${rpc_port}" >>.env -echo "rpc_host=127.0.0.1" >>.env +echo "rpc_host=0.0.0.0" >>.env echo "rpc_key=${rpc_key}" >>.env - octopus_kernel_rpc_server diff --git a/images/octopus_logo.png b/images/octopus_logo.png new file mode 100644 index 0000000..6de34f1 Binary files /dev/null and b/images/octopus_logo.png differ diff --git a/kernel/setup.py b/kernel/setup.py index 3a84f4f..3774765 100644 --- a/kernel/setup.py +++ b/kernel/setup.py @@ -19,7 +19,7 @@ setup( name="octopus_kernel", - version="0.1.2", + version="0.1.3", description="Open source code interpreter agent for LLM", author="imotai", author_email="wangtaize@dbpunk.com", diff --git a/kernel/tests/kernel_sdk_tests.py b/kernel/tests/kernel_sdk_tests.py index 22f3ef9..0f9a5a2 100644 --- a/kernel/tests/kernel_sdk_tests.py +++ b/kernel/tests/kernel_sdk_tests.py @@ -29,7 +29,9 @@ def kernel_sdk(): endpoint = ( "localhost:9527" # Replace with the actual endpoint of your test gRPC server ) - return KernelSDK(endpoint, "ZCeI9cYtOCyLISoi488BgZHeBkHWuFUH") + #return KernelSDK(endpoint, "ZCeI9cYtOCyLISoi488BgZHeBkHWuFUH") + return KernelSDK(endpoint, "z7XRkTTBkXifyCAa5rAQfabeTxtFqrVz") + @pytest.fixture diff --git a/proto/setup.py b/proto/setup.py index ed4bf26..935c3f8 100644 --- a/proto/setup.py +++ b/proto/setup.py @@ -19,7 +19,7 @@ setup( name="octopus_proto", - version="0.1.2", + version="0.1.3", description="Open source code interpreter agent for LLM", author="imotai", author_email="wangtaize@dbpunk.com", diff --git a/start_sandbox.sh b/start_sandbox.sh index 50d6c27..7dbccd7 100644 --- a/start_sandbox.sh +++ b/start_sandbox.sh @@ -12,7 +12,6 @@ cd ${WORKDIR}/chat && pip install . mkdir -p ${WORKDIR}/sandbox/kernel mkdir -p ${WORKDIR}/sandbox/agent cd ${WORKDIR}/sandbox/kernel -#KERNEL_RPC_KEY=`tr -dc A-Za-z0-9 .env @@ -24,7 +23,6 @@ echo "start kernel with endpoint 127.0.0.1:9527" octopus_kernel_rpc_server > kernel_rpc.log 2>&1 & sleep 2 cd ${WORKDIR}/sandbox/agent -#AGENT_RPC_KEY=`tr -dc A-Za-z0-9 > .env @@ -36,4 +34,4 @@ echo "verbose=True" >> .env octopus_agent_rpc_server > agent_rpc.log 2>&1 & sleep 2 echo "add a kernel" -octopus_agent_setup --kernel_endpoint=127.0.0.1:9527 --kernel_api_key=${KERNEL_RPC_KEY} --kernel_workspace=/tmp/ws1 --agent_endpoint=127.0.0.1:9528 --admin_key=${AGENT_RPC_KEY} +octopus_agent_setup --kernel_endpoint=127.0.0.1:9527 --kernel_api_key=${KERNEL_RPC_KEY} --agent_endpoint=127.0.0.1:9528 --admin_key=${AGENT_RPC_KEY}