From 11b38929b33ff828a46018a7f4ff352b6725caa3 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Tue, 25 Mar 2025 13:45:32 -0700
Subject: [PATCH 01/39] Updated README for release 0.21.17
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index f5c6e186..89ef5037 100644
--- a/README.md
+++ b/README.md
@@ -87,7 +87,7 @@ The `TrustGraph CLI` installs the commands for interacting with TrustGraph while
### Install the TrustGraph CLI
```
-pip3 install trustgraph-cli==0.20.9
+pip3 install trustgraph-cli==0.21.17
```
> [!NOTE]
@@ -97,8 +97,8 @@ pip3 install trustgraph-cli==0.20.9
TrustGraph is endlessly customizable by editing the `YAML` launch files. The `Configuration Builder` provides a quick and intuitive tool for building a custom configuration that deploys with Docker, Podman, Minikube, or Google Cloud. There is a `Configuration Builder` for the both the lastest and stable `TrustGraph` releases.
-- [**Configuration Builder** (Stable 0.20.9) ð](https://config-ui.demo.trustgraph.ai/)
-- [**Configuration Builder** (Latest 0.20.11) ð](https://dev.config-ui.demo.trustgraph.ai/)
+- [**Configuration Builder** (Stable 0.21.17) ð](https://config-ui.demo.trustgraph.ai/)
+- [**Configuration Builder** (Latest 0.21.17) ð](https://dev.config-ui.demo.trustgraph.ai/)
The `Configuration Builder` has 4 important sections:
@@ -156,8 +156,8 @@ TrustGraph `YAML` files are available [here](https://github.com/trustgraph-ai/tr
| Release Type | Release Version |
| ------------ | --------------- |
-| Latest | [0.20.11](https://github.com/trustgraph-ai/trustgraph/releases/download/v0.20.11/deploy.zip) |
-| Stable | [0.20.9](https://github.com/trustgraph-ai/trustgraph/releases/download/v0.20.9/deploy.zip) |
+| Latest | [0.21.17](https://github.com/trustgraph-ai/trustgraph/releases/download/v0.21.17/deploy.zip) |
+| Stable | [0.21.17](https://github.com/trustgraph-ai/trustgraph/releases/download/v0.21.17/deploy.zip) |
TrustGraph is fully containerized and is launched with a `YAML` configuration file. Unzipping the `deploy.zip` will add the `deploy` directory with the following subdirectories:
From a8df35bee27930f69da786b8858ff410a926de25 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Tue, 25 Mar 2025 13:51:28 -0700
Subject: [PATCH 02/39] Update README for 0.21.17 features
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 89ef5037..9a4da3c8 100644
--- a/README.md
+++ b/README.md
@@ -34,8 +34,9 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w
## The Stack Layers
- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
+- ð§Ū **OCR Pipelins**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
- ðŠ **Adjustable Chunking**: Choose your chunking algorithm and parameters
-- ð **No-code LLM Integration**: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **Ollama**, and **OpenAI**
+- ð **No-code LLM Integration**: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **Mistral**, **Ollama**, and **OpenAI**
- ð **Automated Knowledge Graph Building**: No need for complex ontologies and manual graph building
- ðĒ **Knowledge Graph to Vector Embeddings Mappings**: Connect knowledge graph enhanced data directly to vector embeddings
- â**Natural Language Data Retrieval**: Automatically perform a semantic similiarity search and subgraph extraction for the context of LLM generative responses
From 56530180f477bf263e0e31418099261d153c376e Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Tue, 25 Mar 2025 13:59:55 -0700
Subject: [PATCH 03/39] Update README.md text
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 9a4da3c8..5bbc3bb3 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w
## The Stack Layers
- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
-- ð§Ū **OCR Pipelins**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
+- ð **OCR Pipelins**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
- ðŠ **Adjustable Chunking**: Choose your chunking algorithm and parameters
- ð **No-code LLM Integration**: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **Mistral**, **Ollama**, and **OpenAI**
- ð **Automated Knowledge Graph Building**: No need for complex ontologies and manual graph building
From 29a29145acc0fec0d7a0e1d092717369d671f15b Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Tue, 25 Mar 2025 14:07:26 -0700
Subject: [PATCH 04/39] Fix typo in README
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5bbc3bb3..5d10f250 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w
## The Stack Layers
- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
-- ð **OCR Pipelins**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
+- ð **OCR Pipelines**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
- ðŠ **Adjustable Chunking**: Choose your chunking algorithm and parameters
- ð **No-code LLM Integration**: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **Mistral**, **Ollama**, and **OpenAI**
- ð **Automated Knowledge Graph Building**: No need for complex ontologies and manual graph building
From d85520e361b3c2c24b639b5146abd3355564d829 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Tue, 25 Mar 2025 14:08:28 -0700
Subject: [PATCH 05/39] Update README with feature
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5d10f250..8fd5d17f 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,7 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w
- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
- ð **OCR Pipelines**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
- ðŠ **Adjustable Chunking**: Choose your chunking algorithm and parameters
-- ð **No-code LLM Integration**: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **Mistral**, **Ollama**, and **OpenAI**
+- ð **No-code LLM Integration**: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **LM Studio**, **Mistral**, **Ollama**, and **OpenAI**
- ð **Automated Knowledge Graph Building**: No need for complex ontologies and manual graph building
- ðĒ **Knowledge Graph to Vector Embeddings Mappings**: Connect knowledge graph enhanced data directly to vector embeddings
- â**Natural Language Data Retrieval**: Automatically perform a semantic similiarity search and subgraph extraction for the context of LLM generative responses
From fdc00885b723dd743fb05f03c4003eb597a62d1a Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Tue, 25 Mar 2025 14:21:55 -0700
Subject: [PATCH 06/39] Update README feature
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8fd5d17f..af2482a4 100644
--- a/README.md
+++ b/README.md
@@ -48,7 +48,7 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w
- ð **Observability and Telemetry**: Get insights into system performance with **Prometheus** and **Grafana**
- ðŧ **Orchestration**: Fully containerized with **Docker** or **Kubernetes**
- ðĨ **Stack Manager**: Control and scale the stack with confidence with **Apache Pulsar**
-- âïļ **Cloud Deployments**: **AWS** and **Google Cloud**
+- âïļ **Cloud Deployments**: **AWS**, **Azure**, and **Google Cloud**
- ðŠī **Customizable and Extensible**: Tailor for your data and use cases
- ðĨïļ **Configuration Builder**: Build the `YAML` configuration with drop down menus and selectable parameters
- ðĩïļ **Test Suite**: A simple UI to fully test TrustGraph performance
From 04ca323fb90254998606ccf5f8a06a24665c0c53 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 13:46:20 -0700
Subject: [PATCH 07/39] README WIP
---
README.md | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index af2482a4..6e01c4d6 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
-## Data-to-AI, Simplified.
+## Autonomous Operations Platform
[](https://pypi.org/project/trustgraph/) [](https://discord.gg/sQMwkRz5GX)
@@ -11,6 +11,30 @@
+**TrustGraph transforms AI agents from experimental concepts into a continuous paradigm of autonomous operations within an organization.**
+
+It provides a robust, scalable, and reliable infrastructure designed for complex environments, complete with a full observability stack. TrustGraph automates the deployment of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases and offers a unified interface to interact with all major LLM providers.
+
+---
+
+## Table of Contents
+
+- âĻ [Key Features](#-key-features)
+- ðŊ [Why TrustGraph?](#-why-trustgraph)
+- ð [Getting Started](#-getting-started)
+ - [Prerequisites](#prerequisites)
+ - [Installation](#installation)
+ - [Quick Start](#quick-start)
+- ð§ [Configuration](#-configuration)
+- [Core Concepts](#-core-concepts)
+- ð§Đ [Integrations](#-integrations)
+- ð [Observability & Telemetry](#-observability--telemetry)
+- ðĪ [Contributing](#-contributing)
+- ð [License](#-license)
+- ð [Support & Community](#-support--community)
+
+---
+
## The AI App Problem: Everything in Between
Building enterprise AI applications is *hard*. You're not just connecting APIs with a protocol - you're wrangling a complex ecosystem:
@@ -31,7 +55,7 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w

-## The Stack Layers
+## Key Features
- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
- ð **OCR Pipelines**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
From da2f833c1e1e5eda9ce2febf802755b16249f4ef Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 13:47:16 -0700
Subject: [PATCH 08/39] README WIP
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 6e01c4d6..2af82549 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ It provides a robust, scalable, and reliable infrastructure designed for complex
## Table of Contents
-- âĻ [Key Features](#-key-features)
+- âĻ [Key Features](#key-features)
- ðŊ [Why TrustGraph?](#-why-trustgraph)
- ð [Getting Started](#-getting-started)
- [Prerequisites](#prerequisites)
From c8a25e155230d5ab41554e20e101c15ceb960bc8 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 13:51:05 -0700
Subject: [PATCH 09/39] README WIP
---
README.md | 36 +++++++++++++++++-------------------
1 file changed, 17 insertions(+), 19 deletions(-)
diff --git a/README.md b/README.md
index 2af82549..7320e9f4 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ It provides a robust, scalable, and reliable infrastructure designed for complex
## Table of Contents
-- âĻ [Key Features](#key-features)
+- âĻ [Key Features](#-key-features)
- ðŊ [Why TrustGraph?](#-why-trustgraph)
- ð [Getting Started](#-getting-started)
- [Prerequisites](#prerequisites)
@@ -55,7 +55,7 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w

-## Key Features
+## âĻ Key Features
- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
- ð **OCR Pipelines**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
@@ -77,14 +77,21 @@ Building enterprise AI applications is *hard*. You're not just connecting APIs w
- ðĨïļ **Configuration Builder**: Build the `YAML` configuration with drop down menus and selectable parameters
- ðĩïļ **Test Suite**: A simple UI to fully test TrustGraph performance
-## Why Use TrustGraph?
+## ðŊ Why TrustGraph?
-* **Accelerate Development:** TrustGraph instantly connects your data and app, keeping you laser focused on your users.
-* **Reduce Complexity:** Eliminate the pain of integrating disparate tools and technologies.
-* **Focus on Innovation:** Spend your time building your core AI logic, not managing infrastructure.
-* **Improve Data Relevance:** Ensure your LLM has access to the *right* data, at the *right* time.
-* **Scale with Confidence:** Deploy and scale your AI applications reliably and efficiently.
-* **Full RAG Solution:** Focus on optimizing your respones not building RAG pipelines.
+Traditional operations often involve manual intervention, siloed tools, and reactive problem-solving. While AI agents show promise, integrating them into reliable, continuous enterprise workflows presents significant challenges:
+
+1. **Scalability & Reliability:** Standalone agent scripts don't scale or offer the robustness required for business-critical operations.
+2. **Contextual Understanding:** Agents need deep, relevant context (often locked in enterprise data) to perform complex tasks effectively. RAG is powerful but complex to set up and manage.
+3. **Integration Hell:** Connecting agents to diverse enterprise systems, data sources, and various LLMs is difficult and time-consuming.
+4. **Lack of Oversight:** Monitoring, debugging, and understanding the behavior of multiple autonomous agents in production is critical but often overlooked.
+
+**TrustGraph addresses these challenges by providing:**
+
+* A **platform**, not just a library, for managing the lifecycle of autonomous operations.
+* **Automated, best-practice RAG deployments** that combine the strengths of semantic vector search and structured knowledge graph traversal.
+* A **standardized layer** for LLM interaction and enterprise system integration.
+* **Built-in observability** to ensure you can trust and manage your autonomous systems.
## Quickstart Guide ð
- [Install the CLI](#install-the-trustgraph-cli)
@@ -123,7 +130,7 @@ pip3 install trustgraph-cli==0.21.17
TrustGraph is endlessly customizable by editing the `YAML` launch files. The `Configuration Builder` provides a quick and intuitive tool for building a custom configuration that deploys with Docker, Podman, Minikube, or Google Cloud. There is a `Configuration Builder` for the both the lastest and stable `TrustGraph` releases.
- [**Configuration Builder** (Stable 0.21.17) ð](https://config-ui.demo.trustgraph.ai/)
-- [**Configuration Builder** (Latest 0.21.17) ð](https://dev.config-ui.demo.trustgraph.ai/)
+- [**Configuration Builder** (Latest 0.22.5) ð](https://dev.config-ui.demo.trustgraph.ai/)
The `Configuration Builder` has 4 important sections:
@@ -175,15 +182,6 @@ If added to the build in the `Configuration Builder`, the `Test Suite` will be a
- [**REST API Notebooks**](https://github.com/trustgraph-ai/example-notebooks/tree/master/api-examples)
- [**Python SDK Notebooks**](https://github.com/trustgraph-ai/example-notebooks/tree/master/api-library)
-## Prebuilt Configuration Files
-
-TrustGraph `YAML` files are available [here](https://github.com/trustgraph-ai/trustgraph/releases). Download `deploy.zip` for the desired release version.
-
-| Release Type | Release Version |
-| ------------ | --------------- |
-| Latest | [0.21.17](https://github.com/trustgraph-ai/trustgraph/releases/download/v0.21.17/deploy.zip) |
-| Stable | [0.21.17](https://github.com/trustgraph-ai/trustgraph/releases/download/v0.21.17/deploy.zip) |
-
TrustGraph is fully containerized and is launched with a `YAML` configuration file. Unzipping the `deploy.zip` will add the `deploy` directory with the following subdirectories:
- `docker-compose`
From 48d7be331bd41a298bff70591c91a6c73fe14c2d Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 13:57:34 -0700
Subject: [PATCH 10/39] README WIP
---
README.md | 24 +++++-------------------
1 file changed, 5 insertions(+), 19 deletions(-)
diff --git a/README.md b/README.md
index 7320e9f4..6ed3f7c4 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ It provides a robust, scalable, and reliable infrastructure designed for complex
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Quick Start](#quick-start)
-- ð§ [Configuration](#-configuration)
+- ð§ [Configuration Builder](#-configuration-builder)
- [Core Concepts](#-core-concepts)
- ð§Đ [Integrations](#-integrations)
- ð [Observability & Telemetry](#-observability--telemetry)
@@ -35,20 +35,6 @@ It provides a robust, scalable, and reliable infrastructure designed for complex
---
-## The AI App Problem: Everything in Between
-
-Building enterprise AI applications is *hard*. You're not just connecting APIs with a protocol - you're wrangling a complex ecosystem:
-
-* **Data Silos:** Connecting to and managing data from various sources (databases, APIs, files) is a nightmare.
-* **LLM Integration:** Choosing, integrating, and managing different LLMs adds another layer of complexity.
-* **Deployment Headaches:** Deploying, scaling, and monitoring your AI application is a constant challenge.
-* **Knowledge Graph Construction:** Taking raw knowledge and structuring it so it can be efficiently retrieved.
-* **Vector Database Juggling:** Setting up and optimizing a vector database for efficient data retrieval is crucial but complex.
-* **Data Pipelines:** Building robust ETL pipelines to prepare and transform your data is time-consuming.
-* **Data Management:** As your app grows, so does the data meaning storage and retreival becomes much more complex.
-* **Prompt Engineering:** Building, testing, and deploying prompts for specific use cases.
-* **Reliability:** With every new connection, the complexity ramps up meaning any simple error can bring the entire system crashing down.
-
## What is TrustGraph?
**TrustGraph removes the biggest headache of building an AI app: connecting and managing all the data, deployments, and models.** As a full-stack platform, TrustGraph simplifies the development and deployment of data-driven AI applications. TrustGraph is a complete solution, handling everything from data ingestion to deployment, so you can focus on building innovative AI experiences.
@@ -93,9 +79,9 @@ Traditional operations often involve manual intervention, siloed tools, and reac
* A **standardized layer** for LLM interaction and enterprise system integration.
* **Built-in observability** to ensure you can trust and manage your autonomous systems.
-## Quickstart Guide ð
+## ð Getting Started
- [Install the CLI](#install-the-trustgraph-cli)
-- [Configuration Builder](#configuration-builder)
+- [Configuration Builder](#-configuration-builder)
- [System Restarts](#system-restarts)
- [Test Suite](#test-suite)
- [Example Notebooks](#example-trustgraph-notebooks)
@@ -111,7 +97,7 @@ See the [API Developer's Guide](#api-documentation) for more information.
For users, **TrustGraph** has the following interfaces:
-- [**Configuration Builder**](#configuration-builder)
+- [**Configuration Builder**](#-configuration-builder)
- [**Test Suite**](#test-suite)
The `TrustGraph CLI` installs the commands for interacting with TrustGraph while running along with the Python SDK. The `Configuration Builder` enables customization of TrustGraph deployments prior to launching. The **REST API** can be accessed through port `8088` of the TrustGraph host machine with JSON request and response bodies.
@@ -125,7 +111,7 @@ pip3 install trustgraph-cli==0.21.17
> [!NOTE]
> The `TrustGraph CLI` version must match the desired `TrustGraph` release version.
-## Configuration Builder
+## ð§ Configuration Builder
TrustGraph is endlessly customizable by editing the `YAML` launch files. The `Configuration Builder` provides a quick and intuitive tool for building a custom configuration that deploys with Docker, Podman, Minikube, or Google Cloud. There is a `Configuration Builder` for the both the lastest and stable `TrustGraph` releases.
From b110e44aeaaec6395e99c1b8733abda94e558f54 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 14:02:23 -0700
Subject: [PATCH 11/39] README WIP
---
README.md | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/README.md b/README.md
index 6ed3f7c4..500f8946 100644
--- a/README.md
+++ b/README.md
@@ -22,11 +22,8 @@ It provides a robust, scalable, and reliable infrastructure designed for complex
- âĻ [Key Features](#-key-features)
- ðŊ [Why TrustGraph?](#-why-trustgraph)
- ð [Getting Started](#-getting-started)
- - [Prerequisites](#prerequisites)
- - [Installation](#installation)
- - [Quick Start](#quick-start)
- ð§ [Configuration Builder](#-configuration-builder)
-- [Core Concepts](#-core-concepts)
+- ð [Architecture](#-architecture)
- ð§Đ [Integrations](#-integrations)
- ð [Observability & Telemetry](#-observability--telemetry)
- ðĪ [Contributing](#-contributing)
@@ -35,12 +32,6 @@ It provides a robust, scalable, and reliable infrastructure designed for complex
---
-## What is TrustGraph?
-
-**TrustGraph removes the biggest headache of building an AI app: connecting and managing all the data, deployments, and models.** As a full-stack platform, TrustGraph simplifies the development and deployment of data-driven AI applications. TrustGraph is a complete solution, handling everything from data ingestion to deployment, so you can focus on building innovative AI experiences.
-
-
-
## âĻ Key Features
- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
@@ -189,6 +180,12 @@ kubectl apply -f
TrustGraph is designed to be modular to support as many LLMs and environments as possible. A natural fit for a modular architecture is to decompose functions into a set of modules connected through a pub/sub backbone. [Apache Pulsar](https://github.com/apache/pulsar/) serves as this pub/sub backbone. Pulsar acts as the data broker managing data processing queues connected to procesing modules.
+## ð Architecture
+
+**TrustGraph removes the biggest headache of building an AI app: connecting and managing all the data, deployments, and models.** As a full-stack platform, TrustGraph simplifies the development and deployment of data-driven AI applications. TrustGraph is a complete solution, handling everything from data ingestion to deployment, so you can focus on building innovative AI experiences.
+
+
+
### Pulsar Workflows
- For processing flows, Pulsar accepts the output of a processing module and queues it for input to the next subscribed module.
From 721ba311835bfedc4ee0274fd8fe441d5c15c6ad Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 14:16:45 -0700
Subject: [PATCH 12/39] README WIP
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 500f8946..9126ebd0 100644
--- a/README.md
+++ b/README.md
@@ -11,9 +11,9 @@
-**TrustGraph transforms AI agents from experimental concepts into a continuous paradigm of autonomous operations within an organization.**
+**TrustGraph transforms AI agents from experimental concepts into a new paradigm of continuous autonomous operations.**
-It provides a robust, scalable, and reliable infrastructure designed for complex environments, complete with a full observability stack. TrustGraph automates the deployment of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases and offers a unified interface to interact with all major LLM providers.
+The platform provides a robust, scalable, and reliable infrastructure designed for complex environments, complete with a full observability stack. TrustGraph automates the deployment of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases and offers a unified interface to interact with all major LLM providers.
---
@@ -73,11 +73,11 @@ Traditional operations often involve manual intervention, siloed tools, and reac
## ð Getting Started
- [Install the CLI](#install-the-trustgraph-cli)
- [Configuration Builder](#-configuration-builder)
-- [System Restarts](#system-restarts)
+- [Platform Restarts](#platform-restarts)
- [Test Suite](#test-suite)
- [Example Notebooks](#example-trustgraph-notebooks)
-## Developer APIs and CLI
+### Developer APIs and CLI
- [**REST API**](docs/apis/README.md#rest-apis)
- [**Websocket API**](docs/apis/README.md#websocket-api)
@@ -130,7 +130,7 @@ When finished, shutting down TrustGraph is as simple as:
docker compose down -v
```
-## System Restarts
+## Platform Restarts
The `-v` flag will destroy all data on shut down. To restart the system, it's necessary to keep the volumes. To keep the volumes, shut down without the `-v` flag:
```
From 53fc500757257b231f98b7e61b78e246f854ccb0 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 14:19:56 -0700
Subject: [PATCH 13/39] README WIP
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 9126ebd0..49e5e280 100644
--- a/README.md
+++ b/README.md
@@ -11,9 +11,9 @@
-**TrustGraph transforms AI agents from experimental concepts into a new paradigm of continuous autonomous operations.**
+**TrustGraph transforms agents from experimental concepts into a new paradigm of continuous operations.**
-The platform provides a robust, scalable, and reliable infrastructure designed for complex environments, complete with a full observability stack. TrustGraph automates the deployment of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases and offers a unified interface to interact with all major LLM providers.
+The platform provides a robust, scalable, and reliable infrastructure designed for complex environments, complete with a full observability stack. **TrustGraph** automates the deployment in local and cloud environments of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases with a unified interface to all major LLM providers.
---
From 04a3efe0f38a5bd2cc5a2ba4739377362a6dded4 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 14:28:45 -0700
Subject: [PATCH 14/39] README WIP
---
README.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/README.md b/README.md
index 49e5e280..91c38738 100644
--- a/README.md
+++ b/README.md
@@ -186,6 +186,15 @@ TrustGraph is designed to be modular to support as many LLMs and environments as

+## ð§Đ Integrations
+TrustGraph aims to integrate seamlessly with your existing ecosystem.
+
+- LLM Providers: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **LM Studio**, **Mistral**, **Ollama**, and **OpenAI**
+- Vector Databases: **Qdrant**, **Pinecone**, and **Milvus**
+- Knowledge Graphs: Memgraph, Neo4j, and FalkorDB
+- Data Stores: Apache Cassandra
+- Observability: Prometheus and Grafana
+
### Pulsar Workflows
- For processing flows, Pulsar accepts the output of a processing module and queues it for input to the next subscribed module.
From d208795c9b5a0af4daff8b26d0a3021ac74c7fcd Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 15:18:35 -0700
Subject: [PATCH 15/39] README WIP
---
README.md | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
index 91c38738..9defd659 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
[](https://pypi.org/project/trustgraph/) [](https://discord.gg/sQMwkRz5GX)
-ð [Getting Started](https://trustgraph.ai/docs/getstarted) ðš [YouTube](https://www.youtube.com/@TrustGraphAI?sub_confirmation=1) ð§ [Knowledge Cores](https://github.com/trustgraph-ai/catalog/tree/master/v3) âïļ [API Docs](docs/apis/README.md) ð§âðŧ [CLI Docs](https://trustgraph.ai/docs/running/cli) ðŽ [Discord](https://discord.gg/sQMwkRz5GX) ð [Blog](https://blog.trustgraph.ai/subscribe)
+ð [Docs](https://trustgraph.ai/docs/getstarted) ðš [YouTube](https://www.youtube.com/@TrustGraphAI?sub_confirmation=1) ð§ [Knowledge Cores](https://github.com/trustgraph-ai/catalog/tree/master/v3) âïļ [API Docs](docs/apis/README.md) ð§âðŧ [CLI Docs](https://trustgraph.ai/docs/running/cli) ðŽ [Discord](https://discord.gg/sQMwkRz5GX) ð [Blog](https://blog.trustgraph.ai/subscribe)
@@ -194,10 +194,11 @@ TrustGraph aims to integrate seamlessly with your existing ecosystem.
- Knowledge Graphs: Memgraph, Neo4j, and FalkorDB
- Data Stores: Apache Cassandra
- Observability: Prometheus and Grafana
+- Control Flow: Apache Pulsar
-### Pulsar Workflows
+## Pulsar Control Flows
-- For processing flows, Pulsar accepts the output of a processing module and queues it for input to the next subscribed module.
+- For control flows, Pulsar accepts the output of a processing module and queues it for input to the next subscribed module.
- For services such as LLMs and embeddings, Pulsar provides a client/server model. A Pulsar queue is used as the input to the service. When processed, the output is then delivered to a separate queue where a client subscriber can request that output.
## Data Extraction Agents
@@ -239,14 +240,14 @@ tg-invoke-agent -v -q "Write a blog post on the top 3 takeaways from the documen
> [!TIP]
> Adding `-v` to the agent request will return all of the agent manager's thoughts and observations that led to the final response.
-## API Documentation
-
-[Developing on TrustGraph using APIs](docs/apis/README.md)
-
-## Deploy and Manage TrustGraph
-
-[ðð Full Deployment Guide ðð](https://trustgraph.ai/docs/getstarted)
-
-## TrustGraph Developer's Guide
+## ðĪ Contributing
[Developing for TrustGraph](docs/README.development.md)
+
+## ð License
+**TrustGraph** is licensed under [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.en.html).
+
+## ð Support & Community
+- Bug Reports & Feature Requests: [Discord](https://discord.gg/sQMwkRz5GX)
+- Discussions & Questions: [Discord](https://discord.gg/sQMwkRz5GX)
+- Documentation: [Docs](https://trustgraph.ai/docs/getstarted)
From 62672c5eabc69b09ed00d0f638a0bcac11bd6f22 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 15:24:58 -0700
Subject: [PATCH 16/39] README WIP
---
README.md | 44 +++++++++++++++++++++++++++++++++++++-------
1 file changed, 37 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 9defd659..6f8ea34f 100644
--- a/README.md
+++ b/README.md
@@ -11,9 +11,9 @@
-**TrustGraph transforms agents from experimental concepts into a new paradigm of continuous operations.**
+**Transform AI agents from experimental concepts into a new paradigm of continuous operations.**
-The platform provides a robust, scalable, and reliable infrastructure designed for complex environments, complete with a full observability stack. **TrustGraph** automates the deployment in local and cloud environments of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases with a unified interface to all major LLM providers.
+The **TrustGraph** platform provides a robust, scalable, and reliable AI infrastructure designed for complex environments, complete with a full observability and telemetrystack. **TrustGraph** automates the deployment in local and cloud environments of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases with a unified interface to all major LLM providers.
---
@@ -46,7 +46,7 @@ The platform provides a robust, scalable, and reliable infrastructure designed f
- ð **Multiple Knowledge Graph Options**: Full integration with **Memgraph**, **FalkorDB**, **Neo4j**, or **Cassandra**
- ð§Ū **Multiple VectorDB Options**: Full integration with **Qdrant**, **Pinecone**, or **Milvus**
- ðïļ **Production-Grade** Reliability, scalability, and accuracy
-- ð **Observability and Telemetry**: Get insights into system performance with **Prometheus** and **Grafana**
+- ð **Observability and Telemetry**: Get insights into system performance with **Prometheus** and **Grafana**
- ðŧ **Orchestration**: Fully containerized with **Docker** or **Kubernetes**
- ðĨ **Stack Manager**: Control and scale the stack with confidence with **Apache Pulsar**
- âïļ **Cloud Deployments**: **AWS**, **Azure**, and **Google Cloud**
@@ -196,12 +196,12 @@ TrustGraph aims to integrate seamlessly with your existing ecosystem.
- Observability: Prometheus and Grafana
- Control Flow: Apache Pulsar
-## Pulsar Control Flows
+### Pulsar Control Flows
- For control flows, Pulsar accepts the output of a processing module and queues it for input to the next subscribed module.
- For services such as LLMs and embeddings, Pulsar provides a client/server model. A Pulsar queue is used as the input to the service. When processed, the output is then delivered to a separate queue where a client subscriber can request that output.
-## Data Extraction Agents
+### Document Extraction Agents
TrustGraph extracts knowledge documents to an ultra-dense knowledge graph using 3 automonous data extraction agents. These agents focus on individual elements needed to build the knowledge graph. The agents are:
@@ -221,7 +221,7 @@ Text or Markdown file:
tg-load-text
```
-## Graph RAG Queries
+### Graph RAG Queries
Once the knowledge graph and embeddings have been built or a cognitive core has been loaded, RAG queries are launched with a single line:
@@ -229,7 +229,7 @@ Once the knowledge graph and embeddings have been built or a cognitive core has
tg-invoke-graph-rag -q "What are the top 3 takeaways from the document?"
```
-## Agent Flow
+### Agent Flow
Invoking the Agent Flow will use a ReAct style approach the combines Graph RAG and text completion requests to think through a problem solution.
@@ -240,6 +240,36 @@ tg-invoke-agent -v -q "Write a blog post on the top 3 takeaways from the documen
> [!TIP]
> Adding `-v` to the agent request will return all of the agent manager's thoughts and observations that led to the final response.
+## ð Observability & Telemetry
+
+Once the platform is running, access the Grafana dashboard at:
+
+```
+http://localhost:3000
+```
+
+Default credentials are:
+
+```
+user: admin
+password: admin
+```
+
+The default Grafana dashboard tracks the following:
+
+- LLM Latency
+- Error Rate
+- Service Request Rates
+- Queue Backlogs
+- Chunking Histogram
+- Error Source by Service
+- Rate Limit Events
+- CPU usage by Service
+- Memory usage by Service
+- Models Deployed
+- Token Throughput (Tokens/second)
+- Cost Throughput (Cost/second)
+
## ðĪ Contributing
[Developing for TrustGraph](docs/README.development.md)
From e9a040ee84b8d6a7b77e876a494993d88801538d Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 15:25:27 -0700
Subject: [PATCH 17/39] README WIP
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 6f8ea34f..cbbb344a 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
**Transform AI agents from experimental concepts into a new paradigm of continuous operations.**
-The **TrustGraph** platform provides a robust, scalable, and reliable AI infrastructure designed for complex environments, complete with a full observability and telemetrystack. **TrustGraph** automates the deployment in local and cloud environments of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases with a unified interface to all major LLM providers.
+The **TrustGraph** platform provides a robust, scalable, and reliable AI infrastructure designed for complex environments, complete with a full observability and telemetry stack. **TrustGraph** automates the deployment in local and cloud environments of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases with a unified interface to all major LLM providers.
---
From 28aa72c5d8863cd0df9b1bf7fbde23108f385bfd Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 16:03:53 -0700
Subject: [PATCH 18/39] README WIP
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index cbbb344a..0766d707 100644
--- a/README.md
+++ b/README.md
@@ -130,7 +130,7 @@ When finished, shutting down TrustGraph is as simple as:
docker compose down -v
```
-## Platform Restarts
+### Platform Restarts
The `-v` flag will destroy all data on shut down. To restart the system, it's necessary to keep the volumes. To keep the volumes, shut down without the `-v` flag:
```
@@ -144,7 +144,7 @@ docker compose up -d
All data previously in TrustGraph will be saved and usable on restart.
-## Test Suite
+### Test Suite
If added to the build in the `Configuration Builder`, the `Test Suite` will be available at port `8888`. The `Test Suite` has the following capabilities:
@@ -154,7 +154,7 @@ If added to the build in the `Configuration Builder`, the `Test Suite` will be a
- **Graph Visualizer** ð: Visualize semantic relationships in **3D**
- **Data Loader** ð: Directly load `.pdf`, `.txt`, or `.md` into the system with document metadata
-## Example TrustGraph Notebooks
+### Example TrustGraph Notebooks
- [**REST API Notebooks**](https://github.com/trustgraph-ai/example-notebooks/tree/master/api-examples)
- [**Python SDK Notebooks**](https://github.com/trustgraph-ai/example-notebooks/tree/master/api-library)
@@ -187,7 +187,7 @@ TrustGraph is designed to be modular to support as many LLMs and environments as

## ð§Đ Integrations
-TrustGraph aims to integrate seamlessly with your existing ecosystem.
+TrustGraph seamlessly integrates API services, data stores, OTel, and control flow for a unified platform experience.
- LLM Providers: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **LM Studio**, **Mistral**, **Ollama**, and **OpenAI**
- Vector Databases: **Qdrant**, **Pinecone**, and **Milvus**
From d3ed373dc6f05eb2eec344b34b441bb9b368787d Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 16:09:02 -0700
Subject: [PATCH 19/39] README WIP
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 0766d707..20572591 100644
--- a/README.md
+++ b/README.md
@@ -56,11 +56,11 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
## ðŊ Why TrustGraph?
-Traditional operations often involve manual intervention, siloed tools, and reactive problem-solving. While AI agents show promise, integrating them into reliable, continuous enterprise workflows presents significant challenges:
+Traditional operations involve manual intervention, siloed tools, and reactive problem-solving. While AI agents show promise, integrating them into reliable, continuous enterprise operations presents significant challenges:
-1. **Scalability & Reliability:** Standalone agent scripts don't scale or offer the robustness required for business-critical operations.
-2. **Contextual Understanding:** Agents need deep, relevant context (often locked in enterprise data) to perform complex tasks effectively. RAG is powerful but complex to set up and manage.
-3. **Integration Hell:** Connecting agents to diverse enterprise systems, data sources, and various LLMs is difficult and time-consuming.
+1. **Scalability & Reliability:** Standalone agents don't scale or offer the robustness required for business-critical operations.
+2. **Contextual Understanding:** Agents need deep, relevant context (often locked in sensitive enterprise data) to perform complex tasks effectively. RAG is powerful but complex to set up and manage.
+3. **Integration Nightmare:** Connecting agents to diverse enterprise systems, data sources, and various LLMs is difficult and time-consuming.
4. **Lack of Oversight:** Monitoring, debugging, and understanding the behavior of multiple autonomous agents in production is critical but often overlooked.
**TrustGraph addresses these challenges by providing:**
From b8a98e63740fc8e63c454305748339a629af7dd7 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 17:21:05 -0700
Subject: [PATCH 20/39] README WIP
---
README.md | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/README.md b/README.md
index 20572591..1dd4bec0 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
- ðŊ [Why TrustGraph?](#-why-trustgraph)
- ð [Getting Started](#-getting-started)
- ð§ [Configuration Builder](#-configuration-builder)
+- ð§ [Knowledge Cores](#-knowledge-cores)
- ð [Architecture](#-architecture)
- ð§Đ [Integrations](#-integrations)
- ð [Observability & Telemetry](#-observability--telemetry)
@@ -180,6 +181,17 @@ kubectl apply -f
TrustGraph is designed to be modular to support as many LLMs and environments as possible. A natural fit for a modular architecture is to decompose functions into a set of modules connected through a pub/sub backbone. [Apache Pulsar](https://github.com/apache/pulsar/) serves as this pub/sub backbone. Pulsar acts as the data broker managing data processing queues connected to procesing modules.
+## ð§ Knowledge Cores
+
+One of the biggest challenges currently facing RAG architectures is the ability to quickly reuse and integrate knowledge sets. **TrustGraph** solves this problem by storing the results of the document ingestion process in reusable Knowledge Cores. Being able to store and reuse the Knowledge Cores means the process has to be run only once for a set of documents. These reusable Knowledge Cores can be loaded back into **TrustGraph** and used for RAG.
+
+A Knowledge Core has two components:
+
+- Set of Graph Edges
+- Set of mapped Vector Embeddings
+
+When a Knowledge Core is loaded into TrustGraph, the corresponding graph edges and vector embeddings are queued and loaded into the chosen graph and vector stores.
+
## ð Architecture
**TrustGraph removes the biggest headache of building an AI app: connecting and managing all the data, deployments, and models.** As a full-stack platform, TrustGraph simplifies the development and deployment of data-driven AI applications. TrustGraph is a complete solution, handling everything from data ingestion to deployment, so you can focus on building innovative AI experiences.
From 0a0469813356a7e7737ac87321535fc3f2eb3566 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 17:23:27 -0700
Subject: [PATCH 21/39] README WIP
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 1dd4bec0..c4cfb906 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
**Transform AI agents from experimental concepts into a new paradigm of continuous operations.**
-The **TrustGraph** platform provides a robust, scalable, and reliable AI infrastructure designed for complex environments, complete with a full observability and telemetry stack. **TrustGraph** automates the deployment in local and cloud environments of state-of-the-art RAG pipelines using Knowledge Graphs and Vector Databases with a unified interface to all major LLM providers.
+The **TrustGraph** platform provides a robust, scalable, and reliable AI infrastructure designed for complex environments, complete with a full observability and telemetry stack. **TrustGraph** automates the deployment of state-of-the-art RAG pipelines using both Knowledge Graphs and Vector Databases in local and cloud environments with a unified interface to all major LLM providers.
---
From 36ebfaaffddc86d769e327643a164e553cdcbdbf Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 17:25:34 -0700
Subject: [PATCH 22/39] README WIP
---
README.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/README.md b/README.md
index c4cfb906..4f724037 100644
--- a/README.md
+++ b/README.md
@@ -17,8 +17,6 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
---
-## Table of Contents
-
- âĻ [Key Features](#-key-features)
- ðŊ [Why TrustGraph?](#-why-trustgraph)
- ð [Getting Started](#-getting-started)
From 1db1a596c28d4956c2a68662bc50c84ef248e743 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 17:27:45 -0700
Subject: [PATCH 23/39] README WIP
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 4f724037..c80859a9 100644
--- a/README.md
+++ b/README.md
@@ -55,11 +55,11 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
## ðŊ Why TrustGraph?
-Traditional operations involve manual intervention, siloed tools, and reactive problem-solving. While AI agents show promise, integrating them into reliable, continuous enterprise operations presents significant challenges:
+Traditional operations involve manual intervention, siloed tools, and reactive problem-solving. While AI agents show promise, integrating them into reliable, continuous operations presents significant challenges:
1. **Scalability & Reliability:** Standalone agents don't scale or offer the robustness required for business-critical operations.
-2. **Contextual Understanding:** Agents need deep, relevant context (often locked in sensitive enterprise data) to perform complex tasks effectively. RAG is powerful but complex to set up and manage.
-3. **Integration Nightmare:** Connecting agents to diverse enterprise systems, data sources, and various LLMs is difficult and time-consuming.
+2. **Contextual Understanding:** Agents need deep, relevant context (often locked in sensitive and protectec data) to perform complex tasks effectively. RAG is powerful but complex to deploy and manage.
+3. **Integration Nightmare:** Connecting agents to diverse systems, data sources, and various LLMs is difficult and time-consuming.
4. **Lack of Oversight:** Monitoring, debugging, and understanding the behavior of multiple autonomous agents in production is critical but often overlooked.
**TrustGraph addresses these challenges by providing:**
From d46cf483fa4ea0a6c5c9bb1dc52871512256c4e0 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 17:30:13 -0700
Subject: [PATCH 24/39] README WIP
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c80859a9..54ac8a18 100644
--- a/README.md
+++ b/README.md
@@ -197,7 +197,7 @@ When a Knowledge Core is loaded into TrustGraph, the corresponding graph edges a

## ð§Đ Integrations
-TrustGraph seamlessly integrates API services, data stores, OTel, and control flow for a unified platform experience.
+TrustGraph seamlessly integrates API services, data stores, observability, telemetry, and control flow for a unified platform experience.
- LLM Providers: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **LM Studio**, **Mistral**, **Ollama**, and **OpenAI**
- Vector Databases: **Qdrant**, **Pinecone**, and **Milvus**
From 64b5d3484d1baa677b6ad624f44fae913ab26c06 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 17:33:02 -0700
Subject: [PATCH 25/39] README WIP
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 54ac8a18..7fb9eeb2 100644
--- a/README.md
+++ b/README.md
@@ -192,7 +192,7 @@ When a Knowledge Core is loaded into TrustGraph, the corresponding graph edges a
## ð Architecture
-**TrustGraph removes the biggest headache of building an AI app: connecting and managing all the data, deployments, and models.** As a full-stack platform, TrustGraph simplifies the development and deployment of data-driven AI applications. TrustGraph is a complete solution, handling everything from data ingestion to deployment, so you can focus on building innovative AI experiences.
+As a full-stack platform, TrustGraph provides all the stack layers needed to connect the data layer to the app layer for autonomous operations.

From e7622e54d36356e739fb36bc22f33d020384d243 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 18:03:12 -0700
Subject: [PATCH 26/39] README formatting tweaks
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 7fb9eeb2..dee2fffc 100644
--- a/README.md
+++ b/README.md
@@ -201,10 +201,10 @@ TrustGraph seamlessly integrates API services, data stores, observability, telem
- LLM Providers: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **LM Studio**, **Mistral**, **Ollama**, and **OpenAI**
- Vector Databases: **Qdrant**, **Pinecone**, and **Milvus**
-- Knowledge Graphs: Memgraph, Neo4j, and FalkorDB
-- Data Stores: Apache Cassandra
-- Observability: Prometheus and Grafana
-- Control Flow: Apache Pulsar
+- Knowledge Graphs: **Memgraph**, **Neo4j**, and **FalkorDB**
+- Data Stores: **Apache Cassandra**
+- Observability: **Prometheus** and **Grafana**
+- Control Flow: **Apache Pulsar**
### Pulsar Control Flows
From 7f10197ecdb3ee1f25bd00d0957b468b63076e1c Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 18:06:32 -0700
Subject: [PATCH 27/39] More README formatting tweaks
---
README.md | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/README.md b/README.md
index dee2fffc..f73963c3 100644
--- a/README.md
+++ b/README.md
@@ -17,17 +17,17 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
---
-- âĻ [Key Features](#-key-features)
-- ðŊ [Why TrustGraph?](#-why-trustgraph)
-- ð [Getting Started](#-getting-started)
-- ð§ [Configuration Builder](#-configuration-builder)
-- ð§ [Knowledge Cores](#-knowledge-cores)
-- ð [Architecture](#-architecture)
-- ð§Đ [Integrations](#-integrations)
-- ð [Observability & Telemetry](#-observability--telemetry)
-- ðĪ [Contributing](#-contributing)
-- ð [License](#-license)
-- ð [Support & Community](#-support--community)
+- âĻ [**Key Features**](#-key-features)
+- ðŊ [**Why TrustGraph?**](#-why-trustgraph)
+- ð [**Getting Started**](#-getting-started)
+- ð§ [**Configuration Builder**](#-configuration-builder)
+- ð§ [**Knowledge Cores**](#-knowledge-cores)
+- ð [**Architecture**](#-architecture)
+- ð§Đ [**Integrations**](#-integrations)
+- ð [**Observability & Telemetry**](#-observability--telemetry)
+- ðĪ [**Contributing**](#-contributing)
+- ð [**License**](#-license)
+- ð [**Support & Community**](#-support--community)
---
From 7f60916a1a5f5d90a882bcc7a2feee019e2efaad Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 19:49:40 -0700
Subject: [PATCH 28/39] README text additions
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index f73963c3..8c2966bc 100644
--- a/README.md
+++ b/README.md
@@ -103,7 +103,7 @@ pip3 install trustgraph-cli==0.21.17
## ð§ Configuration Builder
-TrustGraph is endlessly customizable by editing the `YAML` launch files. The `Configuration Builder` provides a quick and intuitive tool for building a custom configuration that deploys with Docker, Podman, Minikube, or Google Cloud. There is a `Configuration Builder` for the both the lastest and stable `TrustGraph` releases.
+TrustGraph is endlessly customizable by editing the `YAML` launch files. The `Configuration Builder` provides a quick and intuitive tool for building a custom configuration that deploys with Docker, Podman, Minikube, AWS, Azure, Google Cloud, or Scaleway. There is a `Configuration Builder` for the both the lastest and stable `TrustGraph` releases.
- [**Configuration Builder** (Stable 0.21.17) ð](https://config-ui.demo.trustgraph.ai/)
- [**Configuration Builder** (Latest 0.22.5) ð](https://dev.config-ui.demo.trustgraph.ai/)
From 6c4b2680ba4b17e6c09d4595cb1d8a11293308c0 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Mon, 7 Apr 2025 19:50:38 -0700
Subject: [PATCH 29/39] More README text additions
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8c2966bc..ed3118c1 100644
--- a/README.md
+++ b/README.md
@@ -48,7 +48,7 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
- ð **Observability and Telemetry**: Get insights into system performance with **Prometheus** and **Grafana**
- ðŧ **Orchestration**: Fully containerized with **Docker** or **Kubernetes**
- ðĨ **Stack Manager**: Control and scale the stack with confidence with **Apache Pulsar**
-- âïļ **Cloud Deployments**: **AWS**, **Azure**, and **Google Cloud**
+- âïļ **Cloud Deployments**: **AWS**, **Azure**, **Google Cloud**, and **Scaleway**
- ðŠī **Customizable and Extensible**: Tailor for your data and use cases
- ðĨïļ **Configuration Builder**: Build the `YAML` configuration with drop down menus and selectable parameters
- ðĩïļ **Test Suite**: A simple UI to fully test TrustGraph performance
From 36844417a46e63a5721a94133b6e92fa19ad559a Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Wed, 9 Apr 2025 11:43:56 -0700
Subject: [PATCH 30/39] Tidy up README
---
README.md | 25 +------------------------
1 file changed, 1 insertion(+), 24 deletions(-)
diff --git a/README.md b/README.md
index ed3118c1..8f5b1ef4 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
-## Autonomous Operations Platform
+## Autonomous Knowledge Operations Platform
[](https://pypi.org/project/trustgraph/) [](https://discord.gg/sQMwkRz5GX)
@@ -17,7 +17,6 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
---
-- âĻ [**Key Features**](#-key-features)
- ðŊ [**Why TrustGraph?**](#-why-trustgraph)
- ð [**Getting Started**](#-getting-started)
- ð§ [**Configuration Builder**](#-configuration-builder)
@@ -31,28 +30,6 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
---
-## âĻ Key Features
-
-- ð **Data Ingest**: Bulk ingest documents such as `.pdf`,`.txt`, and `.md`
-- ð **OCR Pipelines**: OCR documents with PDF decode, Tesseract, or Mistral OCR services
-- ðŠ **Adjustable Chunking**: Choose your chunking algorithm and parameters
-- ð **No-code LLM Integration**: **Anthropic**, **AWS Bedrock**, **AzureAI**, **AzureOpenAI**, **Cohere**, **Google AI Studio**, **Google VertexAI**, **Llamafiles**, **LM Studio**, **Mistral**, **Ollama**, and **OpenAI**
-- ð **Automated Knowledge Graph Building**: No need for complex ontologies and manual graph building
-- ðĒ **Knowledge Graph to Vector Embeddings Mappings**: Connect knowledge graph enhanced data directly to vector embeddings
-- â**Natural Language Data Retrieval**: Automatically perform a semantic similiarity search and subgraph extraction for the context of LLM generative responses
-- ð§ **Knowledge Cores**: Modular data sets with semantic relationships that can saved and quickly loaded on demand
-- ðĪ **Agent Manager**: Define custom tools used by a ReAct style Agent Manager that fully controls the response flow including the ability to perform Graph RAG requests
-- ð **Multiple Knowledge Graph Options**: Full integration with **Memgraph**, **FalkorDB**, **Neo4j**, or **Cassandra**
-- ð§Ū **Multiple VectorDB Options**: Full integration with **Qdrant**, **Pinecone**, or **Milvus**
-- ðïļ **Production-Grade** Reliability, scalability, and accuracy
-- ð **Observability and Telemetry**: Get insights into system performance with **Prometheus** and **Grafana**
-- ðŧ **Orchestration**: Fully containerized with **Docker** or **Kubernetes**
-- ðĨ **Stack Manager**: Control and scale the stack with confidence with **Apache Pulsar**
-- âïļ **Cloud Deployments**: **AWS**, **Azure**, **Google Cloud**, and **Scaleway**
-- ðŠī **Customizable and Extensible**: Tailor for your data and use cases
-- ðĨïļ **Configuration Builder**: Build the `YAML` configuration with drop down menus and selectable parameters
-- ðĩïļ **Test Suite**: A simple UI to fully test TrustGraph performance
-
## ðŊ Why TrustGraph?
Traditional operations involve manual intervention, siloed tools, and reactive problem-solving. While AI agents show promise, integrating them into reliable, continuous operations presents significant challenges:
From e9c2e2baf0f6d495ec48bb6ec85fba464d7b1e0e Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Wed, 9 Apr 2025 11:46:52 -0700
Subject: [PATCH 31/39] More README tidying
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8f5b1ef4..77cbca89 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
[](https://pypi.org/project/trustgraph/) [](https://discord.gg/sQMwkRz5GX)
-ð [Docs](https://trustgraph.ai/docs/getstarted) ðš [YouTube](https://www.youtube.com/@TrustGraphAI?sub_confirmation=1) ð§ [Knowledge Cores](https://github.com/trustgraph-ai/catalog/tree/master/v3) âïļ [API Docs](docs/apis/README.md) ð§âðŧ [CLI Docs](https://trustgraph.ai/docs/running/cli) ðŽ [Discord](https://discord.gg/sQMwkRz5GX) ð [Blog](https://blog.trustgraph.ai/subscribe)
+ð [Full Docs](https://trustgraph.ai/docs/TrustGraph) ðš [YouTube](https://www.youtube.com/@TrustGraphAI?sub_confirmation=1) ð§ [Configuration Builder](https://config-ui.demo.trustgraph.ai/) âïļ [API Docs](docs/apis/README.md) ð§âðŧ [CLI Docs](https://trustgraph.ai/docs/running/cli) ðŽ [Discord](https://discord.gg/sQMwkRz5GX) ð [Blog](https://blog.trustgraph.ai/subscribe)
From 3a58115a0605a18ebfc298793fcaff639c55cc79 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Sun, 20 Apr 2025 15:49:04 -0700
Subject: [PATCH 32/39] README table of contents
---
README.md | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/README.md b/README.md
index 77cbca89..bf1521af 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
-## Autonomous Knowledge Operations Platform
+## The AI Provisioning Platform
[](https://pypi.org/project/trustgraph/) [](https://discord.gg/sQMwkRz5GX)
@@ -17,16 +17,22 @@ The **TrustGraph** platform provides a robust, scalable, and reliable AI infrast
---
-- ðŊ [**Why TrustGraph?**](#-why-trustgraph)
-- ð [**Getting Started**](#-getting-started)
-- ð§ [**Configuration Builder**](#-configuration-builder)
-- ð§ [**Knowledge Cores**](#-knowledge-cores)
-- ð [**Architecture**](#-architecture)
-- ð§Đ [**Integrations**](#-integrations)
-- ð [**Observability & Telemetry**](#-observability--telemetry)
-- ðĪ [**Contributing**](#-contributing)
-- ð [**License**](#-license)
-- ð [**Support & Community**](#-support--community)
+
+Table of Contents
+
+
+- ðŊ [**Why TrustGraph?**](#-why-trustgraph)
+- ð [**Getting Started**](#-getting-started)
+- ð§ [**Configuration Builder**](#-configuration-builder)
+- ð§ [**Knowledge Cores**](#-knowledge-cores)
+- ð [**Architecture**](#-architecture)
+- ð§Đ [**Integrations**](#-integrations)
+- ð [**Observability & Telemetry**](#-observability--telemetry)
+- ðĪ [**Contributing**](#-contributing)
+- ð [**License**](#-license)
+- ð [**Support & Community**](#-support--community)
+
+
---
From 792d71d4fc4676521eb4f6b9008762083e7e1ee6 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Sun, 20 Apr 2025 15:54:33 -0700
Subject: [PATCH 33/39] Update README messaging
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index bf1521af..704d4c91 100644
--- a/README.md
+++ b/README.md
@@ -11,9 +11,9 @@
-**Transform AI agents from experimental concepts into a new paradigm of continuous operations.**
+**TrustGraph streamlines the delivery and management of complex AI environments, acting as a comprehensive provisioning platform for your containerized AI tools, pipelines, and integrations.**
-The **TrustGraph** platform provides a robust, scalable, and reliable AI infrastructure designed for complex environments, complete with a full observability and telemetry stack. **TrustGraph** automates the deployment of state-of-the-art RAG pipelines using both Knowledge Graphs and Vector Databases in local and cloud environments with a unified interface to all major LLM providers.
+Deploying state-of-the-art AI requires managing a complex web of models, frameworks, data pipelines, and monitoring tools. TrustGraph simplifies this by providing a unified, open-source solution to **provision complete, trusted AI environments** anywhere you need them â from cloud instances and on-premises servers to edge devices.
---
From 29e6932646433bd7589c8204edd7f37d5d804738 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Sun, 20 Apr 2025 16:01:15 -0700
Subject: [PATCH 34/39] Update README messaging
---
README.md | 19 ++++++-------------
1 file changed, 6 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md
index 704d4c91..c50a963c 100644
--- a/README.md
+++ b/README.md
@@ -38,19 +38,12 @@ Deploying state-of-the-art AI requires managing a complex web of models, framewo
## ðŊ Why TrustGraph?
-Traditional operations involve manual intervention, siloed tools, and reactive problem-solving. While AI agents show promise, integrating them into reliable, continuous operations presents significant challenges:
-
-1. **Scalability & Reliability:** Standalone agents don't scale or offer the robustness required for business-critical operations.
-2. **Contextual Understanding:** Agents need deep, relevant context (often locked in sensitive and protectec data) to perform complex tasks effectively. RAG is powerful but complex to deploy and manage.
-3. **Integration Nightmare:** Connecting agents to diverse systems, data sources, and various LLMs is difficult and time-consuming.
-4. **Lack of Oversight:** Monitoring, debugging, and understanding the behavior of multiple autonomous agents in production is critical but often overlooked.
-
-**TrustGraph addresses these challenges by providing:**
-
-* A **platform**, not just a library, for managing the lifecycle of autonomous operations.
-* **Automated, best-practice RAG deployments** that combine the strengths of semantic vector search and structured knowledge graph traversal.
-* A **standardized layer** for LLM interaction and enterprise system integration.
-* **Built-in observability** to ensure you can trust and manage your autonomous systems.
+* **Unified Provisioning:** Define and deploy complete AI environments, including models, dependencies, and tooling, as a single, manageable unit. Stop managing piecemeal installations.
+* **Environment-Agnostic Deployment:** Provision consistently across diverse infrastructures (Cloud, On-Prem, Edge, Dev environments). Build once, provision anywhere.
+* **Trusted & Secure Delivery:** Focuses on providing a secure supply chain for AI components.
+* **Simplified Operations:** Radically reduce the complexity and time required to stand up and manage sophisticated AI stacks. Get operational faster.
+* **Open Source & Extensible:** Built with transparency and community collaboration in mind. Easily inspect, modify, and extend the platform to meet your specific provisioning needs.
+* **Component Flexibility:** Avoid component lock-in. TrustGraph integrates multiple options for all system components.
## ð Getting Started
- [Install the CLI](#install-the-trustgraph-cli)
From 169ac3b5f407febd1a300b8f2593c8cea9bddd04 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Sun, 20 Apr 2025 16:08:24 -0700
Subject: [PATCH 35/39] Update README messaging
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index c50a963c..8aa0c309 100644
--- a/README.md
+++ b/README.md
@@ -39,6 +39,7 @@ Deploying state-of-the-art AI requires managing a complex web of models, framewo
## ðŊ Why TrustGraph?
* **Unified Provisioning:** Define and deploy complete AI environments, including models, dependencies, and tooling, as a single, manageable unit. Stop managing piecemeal installations.
+* **No-code TrustRAG Pipelines:** Deploy full end-to-end RAG pipelines using unique TrustGraph algorithms leveraging both Knowledge graphs and VectorDBs.
* **Environment-Agnostic Deployment:** Provision consistently across diverse infrastructures (Cloud, On-Prem, Edge, Dev environments). Build once, provision anywhere.
* **Trusted & Secure Delivery:** Focuses on providing a secure supply chain for AI components.
* **Simplified Operations:** Radically reduce the complexity and time required to stand up and manage sophisticated AI stacks. Get operational faster.
From 19f4c701c532cebb8faad41c4fe609b8bd3ba787 Mon Sep 17 00:00:00 2001
From: Jack Colquitt <126733989+JackColquitt@users.noreply.github.com>
Date: Sun, 20 Apr 2025 16:16:18 -0700
Subject: [PATCH 36/39] Added ship image
---
TG-ship.jpg | Bin 0 -> 1458932 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 TG-ship.jpg
diff --git a/TG-ship.jpg b/TG-ship.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..24d724432858494f8ade3b133de41d9162d88377
GIT binary patch
literal 1458932
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