# bachtiarpanjaitan/ihandai-go architecture

> Architecture diagram of the GitHub repository bachtiarpanjaitan/ihandai-go, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bachtiarpanjaitan/ihandai-go
- Repository: https://github.com/bachtiarpanjaitan/ihandai-go

## Overview

ihandai is a provider-agnostic Go AI framework. Its main user-to-result paths are direct chat, RAG queries, document indexing, multi-turn conversations, and agent runs. The documented indexing and RAG stages are shown as distinct components; the README also identifies workflows, MCP, streaming, and observability as product capabilities. Source excerpts confirm key client orchestration and agent calls; links based only on documented capabilities cite the README, since those implementation paths were not sampled.

Main entry points: [`client.go`](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/client.go) (AI Client), [`pkg/embedding/embedding.go`](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/embedding/embedding.go) (Embedding), [`pkg/llm/llm.go`](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/llm/llm.go) (LLM Interfaces), [`pkg/agent/react.go`](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/agent/react.go) (ReAct Agent)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Client API"]
  node_client["AI Client<br/>[client.go]"]
  node_core["Shared Types<br/>[types.go]"]
end

subgraph group_rag["RAG Pipeline"]
  node_loader["Document Loader<br/>[file.go]"]
  node_splitter["Text Splitter<br/>[recursive.go]"]
  node_retriever["Retrieval Strategies"]
  node_reranker["Reranker<br/>[reranker.go]"]
  node_prompt["RAG Prompt<br/>[simple.go]"]
end

subgraph group_providers["Providers and Storage"]
  node_embedding["Embedding<br/>[embedding.go]"]
  node_vectordb[("Vector Store<br/>[vectordb.go]")]
  node_llm["LLM Interfaces<br/>[llm.go]"]
  node_ollama["Ollama Provider<br/>[chat.go]"]
end

subgraph group_agents["Agents and Tools"]
  node_agent["ReAct Agent<br/>[react.go]"]
  node_tools["Tool Interface<br/>[tools.go]"]
  node_calculator["Calculator Tool<br/>[calculator.go]"]
  node_http_tool["HTTP Tool<br/>[http.go]"]
end

subgraph group_platform["Runtime Capabilities"]
  node_memory[("Conversation Memory<br/>[inmemory.go]")]
  node_workflow["DAG Workflows"]
  node_mcp["MCP Client<br/>[client.go]"]
  node_telemetry["Observability"]
  node_stream["Streaming<br/>[llm.go]"]
end

node_user(("Application User"))

node_user -->|"calls"| node_client
node_client -->|"opens provider"| node_llm
node_client -->|"opens provider"| node_embedding
node_client -->|"opens provider"| node_vectordb
node_client -->|"loads documents"| node_loader
node_client -->|"splits documents"| node_splitter
node_client -->|"embeds chunks"| node_embedding
node_client -->|"inserts documents"| node_vectordb
node_client -->|"embeds query"| node_embedding
node_client -->|"retrieves documents"| node_retriever
node_retriever -->|"searches vectors"| node_vectordb
node_client -->|"reranks results"| node_reranker
node_client -->|"builds prompt"| node_prompt
node_client -->|"generates answer"| node_llm
node_client -->|"stores conversation"| node_memory
node_client -->|"runs goal"| node_agent
node_agent -->|"requests completion"| node_llm
node_agent -->|"executes tool"| node_tools
node_ollama -->|"implements chat"| node_llm
node_ollama -->|"implements embeddings"| node_embedding
node_client -->|"offers workflows"| node_workflow
node_client -->|"offers MCP"| node_mcp
node_client -->|"offers streaming"| node_stream
node_client -->|"offers observability"| node_telemetry

click node_client "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/client.go"
click node_core "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/core/types.go"
click node_loader "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/loader/file.go"
click node_splitter "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/splitter/recursive.go"
click node_embedding "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/embedding/embedding.go"
click node_retriever "https://github.com/bachtiarpanjaitan/ihandai-go/tree/main/pkg/retriever"
click node_reranker "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/reranker/reranker.go"
click node_prompt "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/prompt/simple.go"
click node_vectordb "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/vectordb/vectordb.go"
click node_llm "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/llm/llm.go"
click node_ollama "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/plugins/ollama/chat.go"
click node_memory "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/memory/inmemory.go"
click node_agent "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/agent/react.go"
click node_tools "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/tools/tools.go"
click node_calculator "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/agent/tools/calculator.go"
click node_http_tool "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/agent/tools/http.go"
click node_workflow "https://github.com/bachtiarpanjaitan/ihandai-go/tree/main/pkg/workflow"
click node_mcp "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/mcp/client.go"
click node_telemetry "https://github.com/bachtiarpanjaitan/ihandai-go/tree/main/pkg/telemetry"
click node_stream "https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/llm/llm.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client,node_core,node_user toneBlue
class node_loader,node_splitter,node_retriever,node_reranker,node_prompt toneAmber
class node_embedding,node_vectordb,node_llm,node_ollama toneMint
class node_agent,node_tools,node_calculator,node_http_tool toneRose
class node_memory,node_workflow,node_mcp,node_telemetry,node_stream toneIndigo
```

## Components

### Client API

- [AI Client](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/client.go): `client.go`
- [Shared Types](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/core/types.go): `pkg/core/types.go`

### RAG Pipeline

- [Document Loader](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/loader/file.go): `pkg/loader/file.go`
- [Text Splitter](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/splitter/recursive.go): `pkg/splitter/recursive.go`
- [Retrieval Strategies](https://github.com/bachtiarpanjaitan/ihandai-go/tree/main/pkg/retriever): `pkg/retriever`
- [Reranker](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/reranker/reranker.go): `pkg/reranker/reranker.go`
- [RAG Prompt](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/prompt/simple.go): `pkg/prompt/simple.go`

### Providers and Storage

- [Embedding](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/embedding/embedding.go): `pkg/embedding/embedding.go`
- [Vector Store](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/vectordb/vectordb.go): `pkg/vectordb/vectordb.go`
- [LLM Interfaces](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/llm/llm.go): `pkg/llm/llm.go`
- [Ollama Provider](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/plugins/ollama/chat.go): `plugins/ollama/chat.go`

### Agents and Tools

- [ReAct Agent](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/agent/react.go): `pkg/agent/react.go`
- [Tool Interface](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/tools/tools.go): `pkg/tools/tools.go`
- [Calculator Tool](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/agent/tools/calculator.go): `pkg/agent/tools/calculator.go`
- [HTTP Tool](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/agent/tools/http.go): `pkg/agent/tools/http.go`

### Runtime Capabilities

- [Conversation Memory](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/memory/inmemory.go): `pkg/memory/inmemory.go`
- [DAG Workflows](https://github.com/bachtiarpanjaitan/ihandai-go/tree/main/pkg/workflow): `pkg/workflow`
- [MCP Client](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/mcp/client.go): `pkg/mcp/client.go`
- [Observability](https://github.com/bachtiarpanjaitan/ihandai-go/tree/main/pkg/telemetry): `pkg/telemetry`
- [Streaming](https://github.com/bachtiarpanjaitan/ihandai-go/blob/main/pkg/llm/llm.go): `pkg/llm/llm.go`

### Other components

- **Application User**

## Connections

- Application User → AI Client: calls
- AI Client → LLM Interfaces: opens provider (evidence: `client.go`)
- AI Client → Embedding: opens provider (evidence: `client.go`)
- AI Client → Vector Store: opens provider (evidence: `client.go`)
- AI Client → Document Loader: loads documents (evidence: `client.go`)
- AI Client → Text Splitter: splits documents (evidence: `client.go`)
- AI Client → Embedding: embeds chunks (evidence: `client.go`)
- AI Client → Vector Store: inserts documents (evidence: `client.go`)
- AI Client → Embedding: embeds query (evidence: `client.go`)
- AI Client → Retrieval Strategies: retrieves documents (evidence: `client.go`)
- Retrieval Strategies → Vector Store: searches vectors
- AI Client → Reranker: reranks results
- AI Client → RAG Prompt: builds prompt
- AI Client → LLM Interfaces: generates answer
- AI Client → Conversation Memory: stores conversation
- AI Client → ReAct Agent: runs goal (evidence: `client.go`)
- ReAct Agent → LLM Interfaces: requests completion (evidence: `pkg/agent/react.go`)
- ReAct Agent → Tool Interface: executes tool (evidence: `pkg/agent/react.go`)
- Ollama Provider → LLM Interfaces: implements chat (evidence: `plugins/ollama/chat.go`)
- Ollama Provider → Embedding: implements embeddings
- AI Client → DAG Workflows: offers workflows
- AI Client → MCP Client: offers MCP
- AI Client → Streaming: offers streaming
- AI Client → Observability: offers observability
