# 💪 Capability

In langtorch, we define a concept called "Capability": the ability to do something. A capability consists of several "Capability units" combined together. In order to make each capability adapt to each other, we create an interface called "**Node**" that contains a capability unit and some context information. Combining different nodes together will make a capability DAG(Directed acyclic graph).

### Capability Unit

A capability unit represents a single task in langtorch. It could be a large language model (LLM) with a pre-defined prompt or a custom function. In real-life scenarios, a capability unit is roughly equivalent to a task, such as performing a Q\&A.

### Capability Wrapper

The wrapper is a specialized `CapabilityUnit` designed for handling different cases

**Example**:

`ConversationLLMWrapperUnit`wraps `LLMCapabilityUnit` and adds conversation context and memory management. It takes a `UserMessage` as input and produces an `AssistantMessage` as output.

### **Capability Graph or DAG**

A capability graph is a combination of multiple capability nodes.&#x20;

### **Capability Node:**

The `Node` interface represents a node in the `CapabilityDAG`. Each node has a unique ID, a list of out-degree nodes, and a `process` method that takes an iterable of inputs and generates an output. A node can be a simple processing step or a more complex capability unit.

###
