From 9d38d2612da45be3294582597dec01910f026931 Mon Sep 17 00:00:00 2001 From: KennyVaneetvelde Date: Sun, 13 Oct 2024 15:54:45 +0200 Subject: [PATCH] Refactor asset organization and enhance documentation: - Moved asset files from `atomic-agents/.assets/` to `.assets/`. - Created a new `DEV_GUIDE.md` for contributing instructions, including setup and testing guidelines. (still under construction) - Updated `README.md` to reflect changes in installation instructions, usage examples, and improved content on the framework's features. - Revised quickstart examples in `atomic-examples/quickstart/README.md` to clarify setup and execution. - Refined dependencies in `pyproject.toml` files, ensuring compatibility and removing unnecessary ones. --- .../architecture_highlevel_overview.png | Bin .assets/atomic-cli.png | Bin 0 -> 15138 bytes {atomic-agents/.assets => .assets}/docs.png | Bin {atomic-agents/.assets => .assets}/logo.png | Bin .../what_is_sent_in_prompt.png | Bin DEV_GUIDE.md | 21 +++ README.md | 121 +++++++++++++----- atomic-examples/quickstart/README.md | 69 ++++++++++ atomic-examples/quickstart/pyproject.toml | 5 +- .../4_basic_chatbot_different_providers.py | 10 +- pyproject.toml | 2 +- 11 files changed, 182 insertions(+), 46 deletions(-) rename {atomic-agents/.assets => .assets}/architecture_highlevel_overview.png (100%) create mode 100644 .assets/atomic-cli.png rename {atomic-agents/.assets => .assets}/docs.png (100%) rename {atomic-agents/.assets => .assets}/logo.png (100%) rename {atomic-agents/.assets => .assets}/what_is_sent_in_prompt.png (100%) create mode 100644 DEV_GUIDE.md diff --git a/atomic-agents/.assets/architecture_highlevel_overview.png b/.assets/architecture_highlevel_overview.png similarity index 100% rename from atomic-agents/.assets/architecture_highlevel_overview.png rename to .assets/architecture_highlevel_overview.png diff --git a/.assets/atomic-cli.png b/.assets/atomic-cli.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8847937802dcdeca2375840233ae1baf0d6e2f GIT binary patch literal 15138 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 literal 0 HcmV?d00001 diff --git a/atomic-agents/.assets/docs.png b/.assets/docs.png similarity index 100% rename from atomic-agents/.assets/docs.png rename to .assets/docs.png diff --git a/atomic-agents/.assets/logo.png b/.assets/logo.png similarity index 100% rename from atomic-agents/.assets/logo.png rename to .assets/logo.png diff --git a/atomic-agents/.assets/what_is_sent_in_prompt.png b/.assets/what_is_sent_in_prompt.png similarity index 100% rename from atomic-agents/.assets/what_is_sent_in_prompt.png rename to .assets/what_is_sent_in_prompt.png diff --git a/DEV_GUIDE.md b/DEV_GUIDE.md new file mode 100644 index 0000000..e718753 --- /dev/null +++ b/DEV_GUIDE.md @@ -0,0 +1,21 @@ +1. Fork the repository +2. Create a new branch (`git checkout -b feature-branch`) +3. Make your changes +4. Commit your changes (`git commit -m 'Add some feature'`) +5. Push to the branch (`git push origin feature-branch`) +6. Open a pull request + +## Formatting and Linting +To format & lint the code before committing, you must run the following two commands: + +`black atomic_agents` + +`flake8 atomic_agents` + + +## Testing +To run the tests, run the following command: +`pytest --cov atomic_agents` + +To view the coverage report, run the following command: +`coverage html` diff --git a/README.md b/README.md index c90ce5b..1afbe0c 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,99 @@ -# NOTICE: -A NEW VERSION OF ATOMIC AGENTS IS UNDER DEVELOPMENT. THIS README IS OUTDATED. -CHECK BACK SOON FOR AN UPDATE. - # Atomic Agents +Atomic Agents + +[![PyPI version](https://badge.fury.io/py/atomic-agents.svg)](https://badge.fury.io/py/atomic-agents) -A versatile framework designed to facilitate the creation and management of intelligent agents, with an optional CLI tool. +The Atomic Agents framework is designed to be modular, extensible, and easy to use. The main goal of the framework is to get rid of redundant complexity, unnecessary abstractions, and hidden assumptions while still providing a flexible and powerful framework for building AI applications through atomicity. The resulting framework provides a set of tools and agents that can be combined to create powerful applications. The framework is built on top of [Instructor](https://github.com/jxnl/instructor) and leverages the power of [Pydantic](https://docs.pydantic.dev/latest/) for data/schema validation and serialization. + + +High-level architecture overview of Atomic Agents +Diagram showing what is sent to the LLM in the prompt ## Installation +To install Atomic Agents, you can use pip: + +```bash +pip install atomic-agents +``` + +This also installs the CLI *Atomic Assembler* which can be used to download Tools (and soon also Agents and Pipelines). + +## Quickstart & Examples +A complete list of examples can be found in the [examples](./atomic-examples/) directory. + +We do our best to thoroughly document each example, but if something is unclear, please don't hesitate to open an issue or a pull request in order to improve the documentation. + +Here's a quick snippet demonstrating how easy it is to create a powerful agent with Atomic Agents: + +```python +# Define a custom output schema +class CustomOutputSchema(BaseIOSchema): + chat_message: str = Field(..., description="The chat message from the agent.") + suggested_questions: List[str] = Field(..., description="Suggested follow-up questions.") + +# Set up the system prompt +system_prompt_generator = SystemPromptGenerator( + background=["This assistant is knowledgeable, helpful, and suggests follow-up questions."], + steps=[ + "Analyze the user's input to understand the context and intent.", + "Formulate a relevant and informative response.", + "Generate 3 suggested follow-up questions for the user." + ], + output_instructions=[ + "Provide clear and concise information in response to user queries.", + "Conclude each response with 3 relevant suggested questions for the user." + ] +) + +# Initialize the agent +agent = BaseAgent( + config=BaseAgentConfig( + client=your_openai_client, # Replace with your actual client + model="gpt-4", + system_prompt_generator=system_prompt_generator, + memory=AgentMemory(), + output_schema=CustomOutputSchema + ) +) + +# Use the agent +response = agent.run(user_input) +print(f"Agent: {response.chat_message}") +print("Suggested questions:") +for question in response.suggested_questions: + print(f"- {question}") +``` + +This snippet showcases how to create a customizable agent that responds to user queries and suggests follow-up questions. For full, runnable examples, please refer to the following files in the `atomic-examples/quickstart/quickstart/` directory: + +- [1_basic_chatbot.py](./atomic-examples/quickstart/quickstart/1_basic_chatbot.py): A minimal chatbot example to get you started. +- [2_basic_custom_chatbot.py](./atomic-examples/quickstart/quickstart/2_basic_custom_chatbot.py): A more advanced example with a custom system prompt. +- [3_basic_custom_chatbot_with_custom_schema.py](./atomic-examples/quickstart/quickstart/3_basic_custom_chatbot_with_custom_schema.py): A more advanced example with a custom output schema. +- [4_basic_chatbot_different_providers.py](./atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py): Demonstrates how to use different providers like Ollama or Groq. + +These examples provide a great starting point for understanding and using Atomic Agents. -You can install Atomic Agents with different options: +## Running the CLI +To run the CLI simply run the following command: -- Full installation (framework + CLI): - ```bash - pip install atomic-agents - ``` +```bash +atomic +``` -- Core framework only: - ```bash - pip install atomic-agents[core] - ``` +After running this command you should be presented with a menu, allowing you to download Tools. +Atomic CLI menu -- CLI tool only: - ```bash - pip install atomic-agents[cli] - ``` +## Provider & Model Compatibility +Atomic Agents depends on the [Instructor](https://github.com/jxnl/instructor) package. This means that in all examples where OpenAI is used, any other API supported by Instructor can be used, such as Ollama, Groq, Mistral, Cohere, Anthropic, Gemini, and more. For a complete list please refer to the instructor documentation on its [GitHub page](https://github.com/jxnl/instructor). -## Getting Started +## Contributing +We welcome contributions! Please follow these steps to contribute: -### Prerequisites -- Python 3.10 or later +See the [Developer Guide](./DEV_GUIDE.md) for more information on how to contribute to Atomic Agents. -### Installation +## License +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. -1. Either install the Atomic Agents package through pip, or locally from source: - ```bash - pip install atomic-agents - ``` - or - ```bash - cd atomic-agents - pip install -e . - ``` +## Star History -2. Install the Atomic Assembler CLI. This is optional, but it provides a convenient way to grab new Atomic Tools from the [Atomic Forge](atomic-forge): - ```bash - pip install atomic-assembler - ``` +[![Star History Chart](https://api.star-history.com/svg?repos=BrainBlend-AI/atomic-agents&type=Date)](https://star-history.com/#BrainBlend-AI/atomic-agents&Date) diff --git a/atomic-examples/quickstart/README.md b/atomic-examples/quickstart/README.md index e69de29..2fe4fa8 100644 --- a/atomic-examples/quickstart/README.md +++ b/atomic-examples/quickstart/README.md @@ -0,0 +1,69 @@ +# Atomic Agents Quickstart Examples + +This directory contains quickstart examples for the Atomic Agents project. These examples demonstrate various features and capabilities of the Atomic Agents framework. + +## Getting Started + +To run these examples: + +1. Clone the main Atomic Agents repository: + ``` + git clone https://github.com/BrainBlend-AI/atomic-agents + ``` + +2. Navigate to the quickstart directory: + ``` + cd atomic-agents/atomic-examples/quickstart + ``` + +3. Install the dependencies using Poetry: + ``` + poetry install + ``` + +4. Run the examples using Poetry: + ``` + poetry run python quickstart/1_basic_chatbot.py + ``` + +## Example Files + +### 1. Basic Chatbot (1_basic_chatbot.py) + +This example demonstrates a simple chatbot using the Atomic Agents framework. It includes: +- Setting up the OpenAI API client +- Initializing a basic agent with default configurations +- Running a chat loop where the user can interact with the agent + +### 2. Custom Chatbot (2_basic_custom_chatbot.py) + +This example shows how to create a custom chatbot with: +- A custom system prompt +- Customized agent configuration +- A chat loop with rhyming responses + +### 3. Custom Chatbot with Custom Schema (3_basic_custom_chatbot_with_custom_schema.py) + +This example demonstrates: +- Creating a custom output schema for the agent +- Implementing suggested follow-up questions in the agent's responses +- Using a custom system prompt and agent configuration + +### 4. Chatbot with Different Providers (4_basic_chatbot_different_providers.py) + +This example showcases: +- How to use different AI providers (OpenAI, Groq, Ollama) +- Dynamically selecting a provider at runtime +- Adapting the agent configuration based on the chosen provider + +## Running the Examples + +To run any of the examples, use the following command: + +``` +poetry run python quickstart/.py +``` + +Replace `` with the name of the example you want to run (e.g., `1_basic_chatbot.py`). + +These examples provide a great starting point for understanding and working with the Atomic Agents framework. Feel free to modify and experiment with them to learn more about the capabilities of Atomic Agents. diff --git a/atomic-examples/quickstart/pyproject.toml b/atomic-examples/quickstart/pyproject.toml index a9e9a79..886caa1 100644 --- a/atomic-examples/quickstart/pyproject.toml +++ b/atomic-examples/quickstart/pyproject.toml @@ -8,8 +8,9 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.11" atomic-agents = {path = "../..", develop = true} -groq = "^0.11.0" -mistralai = "^1.1.0" +openai = ">=1.35.12,<2.0.0" +groq = ">=0.11.0,<1.0.0" +mistralai = ">=1.1.0,<2.0.0" [build-system] diff --git a/atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py b/atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py index 45f24a9..a88b8fd 100644 --- a/atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py +++ b/atomic-examples/quickstart/quickstart/4_basic_chatbot_different_providers.py @@ -32,14 +32,8 @@ def setup_client(provider): from groq import Groq api_key = os.getenv("GROQ_API_KEY") - client = instructor.from_groq(Groq(api_key=api_key), mode=instructor.Mode.TOOLS) + client = instructor.from_groq(Groq(api_key=api_key), mode=instructor.Mode.JSON) model = "mixtral-8x7b-32768" - elif provider == "mistral": - from mistralai.client import MistralClient - - api_key = os.getenv("MISTRAL_API_KEY") - client = instructor.from_mistral(MistralClient(api_key=api_key), model="mistral-large-latest") - model = "mistral-large-latest" elif provider == "ollama": from openai import OpenAI as OllamaClient @@ -52,7 +46,7 @@ def setup_client(provider): # Prompt the user to choose a provider -provider = console.input("[bold yellow]Choose a provider (openai/groq/mistral/ollama): [/bold yellow]").lower() +provider = console.input("[bold yellow]Choose a provider (openai/groq/ollama): [/bold yellow]").lower() # Set up the client and model based on the chosen provider client, model = setup_client(provider) diff --git a/pyproject.toml b/pyproject.toml index 924c727..9d1eb68 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,6 @@ packages = [ [tool.poetry.dependencies] python = ">=3.11,<4.0" instructor = ">=1.3.4,<2.0.0" -openai = ">=1.35.12,<2.0.0" pydantic = ">=2.8.0,<3.0.0" rich = ">=13.7.1,<14.0.0" gitpython = ">=3.1.43,<4.0.0" @@ -29,6 +28,7 @@ python-dotenv = "^1.0.1" [tool.poetry.group.dev.dependencies] black = ">=24.8.0,<25.0.0" flake8 = ">=7.1.1,<8.0.0" +openai = ">=1.35.12,<2.0.0" pytest = ">=8.3.3,<9.0.0" pytest-cov = ">=5.0.0,<6.0.0"