docs: add LLM inference in workflows section
This commit is contained in:
@@ -783,3 +783,147 @@ curl -X POST https://api.riotpiao.com/workflow \
|
|||||||
- **Readiness:** `curl https://api.riotpiao.com/readyz`
|
- **Readiness:** `curl https://api.riotpiao.com/readyz`
|
||||||
- **Models:** `curl https://api.riotpiao.com/v1/models`
|
- **Models:** `curl https://api.riotpiao.com/v1/models`
|
||||||
- **Logs:** `kubectl -n api logs deployment/homelab-frontend`
|
- **Logs:** `kubectl -n api logs deployment/homelab-frontend`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## LLM Inference in Workflows
|
||||||
|
|
||||||
|
The Poimen workflows system includes built-in LLM inference activities that call `/v1/chat/completions` via the gateway.
|
||||||
|
|
||||||
|
### LLMInferenceActivity
|
||||||
|
|
||||||
|
Single-prompt LLM inference within a workflow.
|
||||||
|
|
||||||
|
**Workflow Definition (Canvas Node):**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "llm-node-1",
|
||||||
|
"type": "llm-inference",
|
||||||
|
"label": "Analyze Code with LLM",
|
||||||
|
"data": {
|
||||||
|
"model": "reasoning",
|
||||||
|
"system_prompt": "You are a code analysis expert. Provide detailed feedback.",
|
||||||
|
"user_prompt": "Analyze this code for security issues: {{ previous_output.code }}",
|
||||||
|
"temperature": 0.7,
|
||||||
|
"max_tokens": 2048
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Backend Implementation:**
|
||||||
|
The LLMInferenceActivity in the workflows backend automatically:
|
||||||
|
1. Substitutes template variables (e.g., `{{ previous_output.code }}`)
|
||||||
|
2. Calls `/v1/chat/completions` with the resolved prompt
|
||||||
|
3. Returns the LLM response as activity output
|
||||||
|
4. Retries on transient failures (up to 3 attempts)
|
||||||
|
5. Timeouts after 120 seconds
|
||||||
|
|
||||||
|
**Output:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"response": "The code has several security vulnerabilities...",
|
||||||
|
"model": "reasoning",
|
||||||
|
"stop_reason": "stop_sequence",
|
||||||
|
"tokens_used": 450
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Supported Models:**
|
||||||
|
- `reasoning` — DeepSeek-R1-Distill (best for complex analysis)
|
||||||
|
- `ornith:35b` — Ollama 35B
|
||||||
|
- `ornith:13b` — Ollama 13B
|
||||||
|
- `qwen2.5:3b` — Qwen 2.5 3B
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### LLMBatchInferenceActivity
|
||||||
|
|
||||||
|
Multiple-prompt LLM inference (sequential processing).
|
||||||
|
|
||||||
|
**Workflow Definition:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "llm-batch-1",
|
||||||
|
"type": "llm-batch-inference",
|
||||||
|
"label": "Batch Code Review",
|
||||||
|
"data": {
|
||||||
|
"model": "reasoning",
|
||||||
|
"system_prompt": "Review each code snippet and provide feedback.",
|
||||||
|
"prompts": [
|
||||||
|
"Review snippet 1: {{ files[0].content }}",
|
||||||
|
"Review snippet 2: {{ files[1].content }}",
|
||||||
|
"Review snippet 3: {{ files[2].content }}"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"responses": [
|
||||||
|
"Snippet 1 review...",
|
||||||
|
"Snippet 2 review...",
|
||||||
|
"Snippet 3 review..."
|
||||||
|
],
|
||||||
|
"model": "reasoning",
|
||||||
|
"errors": []
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Typical Use Cases:**
|
||||||
|
- Batch code review across multiple files
|
||||||
|
- Parallel document summarization
|
||||||
|
- Comparative analysis of alternatives
|
||||||
|
- Policy compliance checking
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Workflow Integration Examples
|
||||||
|
|
||||||
|
**1. Code Analysis Workflow**
|
||||||
|
```
|
||||||
|
Clone Repo → Analyze Code → LLM Security Review → Generate Report → Notify
|
||||||
|
```
|
||||||
|
|
||||||
|
**2. Document Processing**
|
||||||
|
```
|
||||||
|
Retrieve Documents → Embed + Index → LLM Summarize (batch) → Archive
|
||||||
|
```
|
||||||
|
|
||||||
|
**3. Multi-Stage Review**
|
||||||
|
```
|
||||||
|
Retrieve Memory → LLM Context Extraction → Route to Activity A/B/C → Notify
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Error Handling
|
||||||
|
|
||||||
|
If LLM inference fails:
|
||||||
|
- First activity retry (2-second backoff)
|
||||||
|
- Second activity retry (4-second backoff)
|
||||||
|
- Third activity retry (8-second backoff)
|
||||||
|
- If all retries fail, workflow records error and proceeds to next activity (or fails if terminal)
|
||||||
|
|
||||||
|
**Common Failure Scenarios:**
|
||||||
|
- Network timeout: `connection refused` (retry automatically)
|
||||||
|
- Model not found: `unknown model: xyz` (terminal error)
|
||||||
|
- Rate limited: HTTP 429 (retry with exponential backoff)
|
||||||
|
- Prompt too long: `context length exceeded` (terminal error)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Performance & Cost
|
||||||
|
|
||||||
|
- Single prompt inference: ~100-500ms (model-dependent)
|
||||||
|
- Batch processing: Serial (not parallel), ~100-500ms per prompt
|
||||||
|
- Model inference costs: Free (on-premise Ollama/Reasoning models)
|
||||||
|
- Token counting: Provided in response for quota tracking
|
||||||
|
|
||||||
|
**Optimization Tips:**
|
||||||
|
- Use `ornith:13b` or `qwen2.5:3b` for faster inference
|
||||||
|
- Use `reasoning` only for complex analysis that needs reasoning
|
||||||
|
- Cache frequently-used prompts at workflow level
|
||||||
|
- Use batch activity for multiple similar prompts (better throughput)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user