-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* fixes * New README --------- Co-authored-by: Harish Mohan Raj <[email protected]>
- Loading branch information
1 parent
fd97741
commit a46ee63
Showing
16 changed files
with
322 additions
and
199 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
## Quick Start | ||
|
||
### Project setup | ||
|
||
We **strongly recommend** using [**Cookiecutter**](../cookiecutter/index.md) for setting up a FastAgency project. It creates the project folder structure, default workflow, automatically installs all the necessary requirements, and creates a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers){target="_blank"} that can be used with [Visual Studio Code](https://code.visualstudio.com/){target="_blank"} for development. | ||
|
||
1. Install Cookiecutter with the following command: | ||
```console | ||
pip install cookiecutter | ||
``` | ||
|
||
2. Run the `cookiecutter` command: | ||
```console | ||
cookiecutter https://github.com/airtai/cookiecutter-fastagency.git | ||
``` | ||
|
||
3. Assuming that you used the default values, you should get the following output: | ||
```console | ||
[1/4] project_name (My FastAgency App): | ||
[2/4] project_slug (my_fastagency_app): | ||
[3/4] Select app_type | ||
1 - fastapi+mesop | ||
2 - mesop | ||
3 - nats+fastapi+mesop | ||
Choose from [1/2/3] (1): 1 | ||
[4/4] Select python_version | ||
1 - 3.12 | ||
2 - 3.11 | ||
3 - 3.10 | ||
Choose from [1/2/3] (1): | ||
[5/5] Select authentication | ||
1 - none | ||
2 - google | ||
Choose from [1/2] (1): | ||
``` | ||
|
||
4. To run LLM-based applications, you need an API key for the LLM used. The most commonly used LLM is [OpenAI](https://platform.openai.com/docs/models). To use it, create an [OpenAI API Key](https://openai.com/index/openai-api/) and set it as an environment variable in the terminal using the following command: | ||
|
||
```console | ||
export OPENAI_API_KEY=openai_api_key_here | ||
``` | ||
|
||
5. Open the generated project in [Visual Studio Code](https://code.visualstudio.com/){target="_blank"} with the following command: | ||
```console | ||
code my_fastagency_app | ||
``` | ||
|
||
6. Once the project is opened, you will get the following option to reopen it in a devcontainer: | ||
|
||
<img src="https://fastagency.ai/0.3/user-guide/getting-started/images/reopen-in-container.png" width="600" class="center"> | ||
|
||
7. After reopening the project in devcontainer, you can verify that the setup is correct by running the provided tests with the following command: | ||
|
||
```console | ||
pytest -s | ||
``` | ||
|
||
You should get the following output if everything is correctly setup. | ||
```console | ||
=================================== test session starts =================================== | ||
platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 | ||
rootdir: /workspaces/my_fastagency_app | ||
configfile: pyproject.toml | ||
plugins: asyncio-0.24.0, anyio-4.6.2.post1 | ||
asyncio: mode=Mode.STRICT, default_loop_scope=None | ||
collected 1 item | ||
|
||
tests/test_workflow.py . [100%] | ||
|
||
==================================== 1 passed in 1.02s ==================================== | ||
``` | ||
----- | ||
|
||
### Workflow Development | ||
|
||
#### Define the Workflow | ||
|
||
You need to define the workflow that your application will use. This is where you specify how the agents interact and what they do. Here's a simple example of a workflow definition as it is generated by the cookie cutter under `my_fastagency_app/workflow.py`: | ||
|
||
```python | ||
import os | ||
from typing import Any | ||
|
||
from autogen.agentchat import ConversableAgent | ||
from fastagency import UI | ||
from fastagency.runtimes.autogen import AutoGenWorkflows | ||
|
||
llm_config = { | ||
"config_list": [ | ||
{ | ||
"model": "gpt-4o-mini", | ||
"api_key": os.getenv("OPENAI_API_KEY"), | ||
} | ||
], | ||
"temperature": 0.8, | ||
} | ||
|
||
wf = AutoGenWorkflows() | ||
|
||
|
||
@wf.register(name="simple_learning", description="Student and teacher learning chat") # type: ignore[misc] | ||
def simple_workflow(ui: UI, params: dict[str, Any]) -> str: | ||
initial_message = ui.text_input( | ||
sender="Workflow", | ||
recipient="User", | ||
prompt="I can help you learn about mathematics. What subject you would like to explore?", | ||
) | ||
|
||
student_agent = ConversableAgent( | ||
name="Student_Agent", | ||
system_message="You are a student willing to learn.", | ||
llm_config=llm_config, | ||
) | ||
teacher_agent = ConversableAgent( | ||
name="Teacher_Agent", | ||
system_message="You are a math teacher.", | ||
llm_config=llm_config, | ||
) | ||
|
||
chat_result = student_agent.initiate_chat( | ||
teacher_agent, | ||
message=initial_message, | ||
summary_method="reflection_with_llm", | ||
max_turns=3, | ||
) | ||
|
||
return str(chat_result.summary) | ||
``` | ||
|
||
This code snippet sets up a simple learning chat between a student and a teacher. It defines the agents and how they should interact and specify how the conversation should be summarized. | ||
|
||
#### Run and Debug the Workflow | ||
|
||
To ensure that the workflow we have defined is working properly, we can test it locally using MesopUI. The code below can be found under `my_fastagency_app/local/main_mesop.py` and imports the defined workflow and sets up MesopUI. | ||
|
||
You can run the Mesop application locally with the following command on Linux and MacOS: | ||
|
||
```console | ||
gunicorn my_fastagency_app.local.main_mesop:app | ||
``` | ||
|
||
On Windows, please use the following command: | ||
```console | ||
waitress-serve --listen=0.0.0.0:8000 my_fastagency_app.local.main_mesop:app | ||
``` | ||
|
||
Open the MesopUI URL [http://localhost:8000](http://localhost:8000) in your browser. You can now use the graphical user interface to start, run, test and debug the autogen workflow manually. | ||
|
||
![Initial message](https://fastagency.ai/latest/user-guide/getting-started/images/chat-init.png) | ||
|
||
|
||
## Deployment | ||
|
||
### Building the Docker Image | ||
|
||
If you created the project using Cookiecutter, then building the Docker image is as simple as running the provided script, as shown below: | ||
|
||
```console | ||
./scripts/build_docker.sh | ||
``` | ||
|
||
### Running the Docker Image | ||
|
||
Similarly, running the Docker container is as simple as running the provided script, as shown below: | ||
|
||
```console | ||
./scripts/run_docker.sh | ||
``` | ||
|
||
### Deploying to Fly.io | ||
|
||
If you created the project using Cookiecutter, there is a built-in script to deploy your workflow to [**Fly.io**](https://fly.io/). Run it as shown below: | ||
|
||
```console | ||
./scripts/deploy_to_fly_io.sh | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.