diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..9cfe617a --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,32 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + # You can also specify other tool versions: + # nodejs: "19" + # rust: "1.64" + # golang: "1.19" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +# python: +# install: +# - requirements: docs/requirements.txt \ No newline at end of file diff --git a/DOCS/IDEAS.MD b/DOCS/IDEAS.MD index 14c5fc16..63723d38 100644 --- a/DOCS/IDEAS.MD +++ b/DOCS/IDEAS.MD @@ -213,4 +213,35 @@ This code demonstrates the complete loop to repeat steps 3-7 until a stopping cr -* Integrate petals to handle huggingface LLM \ No newline at end of file +* Integrate petals to handle huggingface LLM + + + +# Orchestrator +* Takes in an agent class with vector store, then handles all the communication and scales up a swarm with number of agents and handles task assignment and task completion + +```python + +from swarms import OpenAI, Orchestrator + +Orchestrator(OpenAI, nodes=40) +``` + +In terms of architecture, the swarm might look something like this: + +``` + (Orchestrator) + / \ + Tools + Vector DB -- (LLM Agent)---(Communication Layer) (Communication Layer)---(LLM Agent)-- Tools + Vector DB + / | | \ +(Task Assignment) (Task Completion) (Task Assignment) (Task Completion) +``` + +Each LLM agent communicates with the orchestrator through a dedicated communication layer. The orchestrator assigns tasks to each LLM agent, which the agents then complete and return. This setup allows for a high degree of flexibility, scalability, and robustness. + +In the context of swarm LLMs, one could consider an **Omni-Vector Embedding Database** for communication. This database could store and manage the high-dimensional vectors produced by each LLM agent. + +- Strengths: This approach would allow for similarity-based lookup and matching of LLM-generated vectors, which can be particularly useful for tasks that involve finding similar outputs or recognizing patterns. + +- Weaknesses: An Omni-Vector Embedding Database might add complexity to the system in terms of setup and maintenance. It might also require significant computational resources, depending on the volume of data being handled and the complexity of the vectors. The handling and transmission of high-dimensional vectors could also pose challenges in terms of network load. + diff --git a/DOCS/Makefile b/DOCS/Makefile new file mode 100644 index 00000000..d4bb2cbb --- /dev/null +++ b/DOCS/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/DOCS/conf.py b/DOCS/conf.py new file mode 100644 index 00000000..d59de363 --- /dev/null +++ b/DOCS/conf.py @@ -0,0 +1,27 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'swarms' +copyright = '2023, Kye Gomez / Agora' +author = 'Kye Gomez / Agora' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [] + +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'alabaster' +html_static_path = ['_static'] diff --git a/DOCS/index.rst b/DOCS/index.rst new file mode 100644 index 00000000..72dcfbaf --- /dev/null +++ b/DOCS/index.rst @@ -0,0 +1,20 @@ +.. swarms documentation master file, created by + sphinx-quickstart on Mon Jul 24 00:33:43 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to swarms's documentation! +================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/DOCS/make.bat b/DOCS/make.bat new file mode 100644 index 00000000..32bb2452 --- /dev/null +++ b/DOCS/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/swarms/agents/models/hf.py b/swarms/agents/models/hf.py index 917be96b..aca2d0c3 100644 --- a/swarms/agents/models/hf.py +++ b/swarms/agents/models/hf.py @@ -14,7 +14,6 @@ class HuggingFaceLLM: model: The loaded model instance. logger: Logger instance for the class. """ - def __init__(self, model_id: str, device: str = None, max_length: int = 20, quantize: bool = False, quantization_config: dict = None): """ Constructs all the necessary attributes for the HuggingFaceLLM object. @@ -50,7 +49,6 @@ class HuggingFaceLLM: except Exception as e: self.logger.error(f"Failed to load the model or the tokenizer: {e}") raise - def generate_text(self, prompt_text: str, max_length: int = None): """ Generates text based on the input prompt using the loaded model. diff --git a/swarms/agents/models/petals_hf.py b/swarms/agents/models/petals_hf.py new file mode 100644 index 00000000..737df847 --- /dev/null +++ b/swarms/agents/models/petals_hf.py @@ -0,0 +1,11 @@ +from transformers import AutoTokenizer +from petals import AutoDistributedForCasualLM + +class PetalsHFLLM: + def __init__(self, model_name: str = None, prompt: str = None, device: str = None, use_fast = False, add_bos_token: str = None, cuda=False): + self.model_name = model_name + self.prompt = prompt + self.device = device + self.use_fast = use_fast + self.add_bos_token = add_bos_token + self.cuda = cuda \ No newline at end of file