Metadata-Version: 2.1
Name: gllm-agents-binary
Version: 0.2.19
Summary: A library for managing agents in Gen AI applications.
Author: Raymond Christopher
Author-email: raymond.christopher@gdplabs.id
Requires-Python: >=3.11,<3.14
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: a2a-sdk (>=0.2.4,<0.2.6)
Requires-Dist: bosa-connectors-binary (>=0.1.0,<0.2.0)
Requires-Dist: bosa-core-binary (>=0.4.3,<0.5.0)
Requires-Dist: colorama (>=0.4.6,<0.5.0)
Requires-Dist: deprecated (>=1.2.18,<2.0.0)
Requires-Dist: fastapi (>=0.115.12,<0.116.0)
Requires-Dist: gllm-core-binary (>=0.3,<0.4)
Requires-Dist: gllm-inference-binary (>=0.4,<0.5)
Requires-Dist: gllm-tools-binary (>=0.1.1,<0.2.0)
Requires-Dist: google-adk (>=0.5.0,<0.6.0)
Requires-Dist: langchain (>=0.3.0,<0.4.0)
Requires-Dist: langchain-openai (>=0.3.17,<0.4.0)
Requires-Dist: langgraph (>=0.2.16,<0.3.0)
Requires-Dist: pydantic (>=2.9.1,<3.0.0)
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
Requires-Dist: requests (>=2.32.4,<3.0.0)
Requires-Dist: uvicorn (>=0.34.0,<0.35.0)
Description-Content-Type: text/markdown

# GLLM Agents

## Description

A library for managing agents in Generative AI applications.

## Installation

### Prerequisites
- Python 3.13+ - [Install here](https://www.python.org/downloads/)
- Pip (if using Pip) - [Install here](https://pip.pypa.io/en/stable/installation/)
- Poetry 1.8.1+ (if using Poetry) - [Install here](https://python-poetry.org/docs/#installation)
- Git (if using Git) - [Install here](https://git-scm.com/downloads)
- For git installation:
  - Access to the [GDP Labs SDK github repository](https://github.com/GDP-ADMIN/gen-ai-internal)

### 1. Installation from Artifact Registry
Choose one of the following methods to install the package:

#### Using pip
```bash
pip install gllm-agents-binary
```

#### Using Poetry
```bash
poetry add gllm-agents-binary
```

### 2. Development Installation (Git)
For development purposes, you can install directly from the Git repository:
```bash
poetry add "git+ssh://git@github.com/GDP-ADMIN/gen-ai-internal.git#subdirectory=libs/gllm-agents"
```

## Managing Dependencies
1. Go to root folder of `gllm-agents` module, e.g. `cd libs/gllm-agents`.
2. Run `poetry shell` to create a virtual environment.
3. Run `poetry lock` to create a lock file if you haven't done it yet.
4. Run `poetry install` to install the `gllm-agents` requirements for the first time.
5. Run `poetry update` if you update any dependency module version at `pyproject.toml`.

## Contributing
Please refer to this [Python Style Guide](https://docs.google.com/document/d/1uRggCrHnVfDPBnG641FyQBwUwLoFw0kTzNqRm92vUwM/edit?usp=sharing)
to get information about code style, documentation standard, and SCA that you need to use when contributing to this project

1. Activate `pre-commit` hooks using `pre-commit install`
2. Run `poetry shell` to create a virtual environment.
3. Run `poetry lock` to create a lock file if you haven't done it yet.
4. Run `poetry install` to install the `gllm-agents` requirements for the first time.
5. Run `which python` to get the path to be referenced at Visual Studio Code interpreter path (`Ctrl`+`Shift`+`P` or `Cmd`+`Shift`+`P`)
6. Try running the unit test to see if it's working:
```bash
poetry run pytest -s tests/unit_tests/
```

## Hello World Examples

### Prerequisites
- Python 3.13+
- Install the binary package:

```bash
pip install gllm-agents-binary
```

- For OpenAI: Set your API key in the environment:
```bash
export OPENAI_API_KEY=your-openai-key
```
- For Google ADK: Set your API key in the environment:
```bash
export GOOGLE_API_KEY=your-google-api-key
```

### Run the Hello World Examples

The example scripts are located in the `gllm_agents/examples` directory within the library. You can run them individually or use the `run_all_examples.py` script.

**1. Running Individual Examples:**

Navigate to the library's root directory (e.g., `libs/gllm-agents` if you cloned the repository).

**LangGraph (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langgraph.py
```

**LangGraph with BOSA Connector (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langgraph_bosa_twitter.py
```

**LangGraph Streaming (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langgraph_stream.py
```

**LangGraph Multi-Agent Coordinator (OpenAI):**
```bash
python gllm_agents/examples/hello_world_multi_agent_coordinator.py
```

**Google ADK:**
```bash
python gllm_agents/examples/hello_world_google_adk.py
```

**Google ADK Streaming:**
```bash
python gllm_agents/examples/hello_world_google_adk_stream.py
```

**LangChain (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langchain.py
```

**LangChain Streaming (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langchain_stream.py
```

**2. Running Individual MCP Examples:**

* Navigate to the library's root directory (e.g., `libs/gllm-agents` if you cloned the repository).
* Open a new terminal and navigate to the sample MCP servers directory `libs/gllm-agents/gllm_agents/examples/mcp_servers`

  Turn on the SSE MCP servers:

  ```bash
  python mcp_server_sse.py
  ```

* Open a new terminal and navigate to the sample MCP servers directory `libs/gllm-agents/gllm_agents/examples/mcp_servers`

  Turn on the STDIO MCP servers:

  ```bash
  python mcp_server_stdio.py
  ```

**LangGraph SSE Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langgraph_mcp_sse.py
```

**LangGraph Streaming SSE Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langgraph_mcp_sse_stream.py
```

**LangGraph STDIO Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langgraph_mcp_stdio.py
```

**LangGraph Streaming STDIO Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langgraph_mcp_stdio_stream.py
```

**Google ADK SSE Transport:**
```bash
python gllm_agents/examples/hello_world_google_adk_mcp_sse.py
```

**Google ADK Streaming SSE Transport:**
```bash
python gllm_agents/examples/hello_world_google_adk_mcp_sse_stream.py
```

**Google ADK STDIO Transport:**
```bash
python gllm_agents/examples/hello_world_google_adk_mcp_stdio.py
```

**Google ADK Streaming STDIO Transport:**
```bash
python gllm_agents/examples/hello_world_google_adk_mcp_stdio_stream.py
```

**LangChain SSE Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langchain_mcp_sse.py
```

**LangChain Streaming SSE Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langchain_mcp_sse_stream.py
```

**LangChain STDIO Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langchain_mcp_stdio.py
```

**LangChain Streaming STDIO Transport (OpenAI):**
```bash
python gllm_agents/examples/hello_world_langchain_mcp_stdio_stream.py
```

**3. Running Individual A2A Examples:**

* Navigate to the library's root directory (e.g., `libs/gllm-agents` if you cloned the repository).
* Open a new terminal and navigate to the `gllm_agents/examples` directory to run the A2A server.

**LangChain Server:**
```bash
python hello_world_a2a_langchain_server.py
```

* Open a new terminal and navigate to the `gllm_agents/examples` directory to run the A2A client.

**LangChain Client:**
```bash
python hello_world_a2a_langchain_client.py
```

**LangChain Client Integrated with Agent Workflow:**
```bash
python hello_world_a2a_langchain_client_agent.py
```

**LangChain Client Streaming:**
```bash
python hello_world_a2a_langchain_client_stream.py
```


## Architectural Notes

### Agent Interface (`AgentInterface`)

The `gllm_agents.agent.interface.AgentInterface` class defines a standardized contract for all agent implementations within the GLLM Agents ecosystem. It ensures that different agent types (e.g., LangGraph-based, Google ADK-based) expose a consistent set of methods for core operations.

Key methods defined by `AgentInterface` typically include:
- `arun()`: For asynchronous execution of the agent that returns a final consolidated response.
- `arun_stream()`: For asynchronous execution that streams back partial responses or events from the agent.

By adhering to this interface, users can interact with various agents in a uniform way, making it easier to switch between or combine different agent technologies.

### Inversion of Control (IoC) / Dependency Injection (DI)

The agent implementations (e.g., `LangGraphAgent`, `GoogleADKAgent`) utilize Dependency Injection. For instance, `LangGraphAgent` accepts an `agent_executor` (like one created by LangGraph's `create_react_agent`) in its constructor. Similarly, `GoogleADKAgent` accepts a native `adk_native_agent`. This allows the core execution logic to be provided externally, promoting flexibility and decoupling the agent wrapper from the specific instantiation details of its underlying engine.

