You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Complete reference for the TelemetryFlow Platform LLM module API — the AI Assistant backend that powers context-aware chat, insights, and provider management.
Architecture
graph TB
subgraph "Hermes Plugin Tools"
CHAT["chat_with_context"]
STREAM["stream_chat"]
CONV["manage_conversation"]
INSIGHT["generate_insight"]
USAGE["query_llm_usage"]
PROV["manage_provider"]
end
subgraph "TelemetryFlow LLM Module"
direction TB
GUARD["Guards<br/>JwtAuth · Permissions · LLMRateLimiter"]
CC["ChatController<br/>/api/v2/llm/chat/*"]
IC["InsightsController<br/>/api/v2/llm/insights/*"]
PC["LLMProvidersController<br/>/api/v2/llm/providers/*"]
CCTX["ContextCollector<br/>4440 lines · 74 ContextTypes"]
PB["PromptBuilder<br/>865 lines · 65+ System Prompts"]
IG["InsightGenerator<br/>415 lines · 5 Insight Types"]
ES["EncryptionService<br/>AES-256-GCM"]
AF["LLMAdapterFactory<br/>7 Adapter Classes"]
end
subgraph "LLM Providers"
A1["ClaudeAdapter<br/>anthropic · claude"]
A2["OpenAIAdapter<br/>openai · mistral · grok<br/>kimi · zhipu · mimo · openrouter"]
A3["GeminiAdapter<br/>google · gemini"]
A4["DeepSeekAdapter"]
A5["QwenAdapter"]
A6["OllamaAdapter"]
A7["CustomAdapter"]
end
CHAT --> CC
STREAM --> CC
CONV --> CC
INSIGHT --> IC
PROV --> PC
USAGE --> CC
GUARD --> CC & IC & PC
CC --> CCTX --> PB --> AF
IC --> IG --> AF
PC --> ES
AF --> A1 & A2 & A3 & A4 & A5 & A6 & A7
Loading
Data Flow — Chat with Context
sequenceDiagram
participant Tool as Hermes Tool
participant Ctrl as ChatController
participant CC as ContextCollector
participant PB as PromptBuilder
participant AF as LLMAdapterFactory
participant LLM as LLM Provider
Tool->>Ctrl: POST /llm/chat/message<br/>{message, contextType, contextId}
Ctrl->>Ctrl: Validate SendMessageDto
Ctrl->>CC: collectContext(contextType, contextId, timeFrom, timeTo)
CC->>CC: Query ClickHouse for relevant telemetry
CC-->>Ctrl: contextData (metrics, logs, traces, etc.)
Ctrl->>PB: buildSystemPrompt(contextType, contextData)
PB->>PB: Select from 65+ specialized prompts
PB-->>Ctrl: systemPrompt + contextMessages
Ctrl->>AF: createAdapter(providerType)
AF->>LLM: chat(systemPrompt + userMessage)
LLM-->>Ctrl: response
Ctrl-->>Tool: {content, conversationId, usage}
graph TD
AF["LLMAdapterFactory"]
CL["ClaudeAdapter<br/>anthropic, claude"]
OA["OpenAIAdapter<br/>openai, mistral, grok<br/>kimi, zhipu, mimo, openrouter"]
GA["GeminiAdapter<br/>google, gemini"]
DS["DeepSeekAdapter<br/>deepseek"]
QA["QwenAdapter<br/>qwen"]
OL["OllamaAdapter<br/>ollama"]
CU["CustomAdapter<br/>custom"]
AF -->|"anthropic, claude"| CL
AF -->|"openai, mistral, grok, kimi, zhipu, mimo, openrouter"| OA
AF -->|"google, gemini"| GA
AF -->|"deepseek"| DS
AF -->|"qwen"| QA
AF -->|"ollama"| OL
AF -->|"custom"| CU
Loading
Provider Type
Adapter
Default Base URL
anthropic, claude
ClaudeAdapter
https://api.anthropic.com
openai
OpenAIAdapter
https://api.openai.com
mistral
OpenAIAdapter
https://api.mistral.ai
grok
OpenAIAdapter
https://api.x.ai
kimi
OpenAIAdapter
https://api.moonshot.cn
zhipu
OpenAIAdapter
https://open.bigmodel.cn/api/paas
mimo
OpenAIAdapter
https://api.mimo.ai
openrouter
OpenAIAdapter
https://openrouter.ai/api
google, gemini
GeminiAdapter
https://generativelanguage.googleapis.com
deepseek
DeepSeekAdapter
https://api.deepseek.com
qwen
QwenAdapter
https://dashscope.aliyuncs.com
ollama
OllamaAdapter
http://localhost:11434
custom
CustomAdapter
User-provided
Encryption
API keys are encrypted at rest using EncryptionService with AES-256-GCM:
graph LR
PLAIN["Plain API Key"] --> ES["EncryptionService<br/>AES-256-GCM"]
KEY["LLM_ENCRYPTION_KEY<br/>(32+ chars)"] --> ES
ES --> ENC["Encrypted → PostgreSQL"]
ENC -->|"on read"| ES
ES -->|"decrypt"| PLAIN
Loading
The LLM_ENCRYPTION_KEY env var is required — the app crashes on startup if missing or < 32 chars.