Compare commits

...
4 Commits
Author SHA1 Message Date
Mervin Praison 1e46093edf Release v3.4.1 2026-01-08 14:36:54 +00:00
Mervin Praison 1a71aac6b8 Release v3.4.0 2026-01-08 13:29:57 +00:00
Mervin Praison 287f42dfee Remove unused test and verification files 2026-01-08 12:50:16 +00:00
Mervin Praison 57b637948f Release v3.3.1 2026-01-08 12:28:06 +00:00
359 changed files with 6296 additions and 2250 deletions

No files matched your search

+4 -4
View File
@@ -538,11 +538,11 @@ python app.py
Create app.py file and add the code below:
```python
from praisonaiagents import Agent, PraisonAIAgents
from praisonaiagents import Agent, Agents
research_agent = Agent(instructions="Research about AI")
summarise_agent = Agent(instructions="Summarise research agent's findings")
agents = PraisonAIAgents(agents=[research_agent, summarise_agent])
agents = Agents(agents=[research_agent, summarise_agent])
agents.start()
```
@@ -3380,11 +3380,11 @@ See [Agent Memory](#6-agent-memory-zero-dependencies) for more options.
<summary><strong>How do I run multiple agents together?</strong></summary>
```python
from praisonaiagents import Agent, PraisonAIAgents
from praisonaiagents import Agent, Agents
agent1 = Agent(instructions="Research topics")
agent2 = Agent(instructions="Summarize findings")
agents = PraisonAIAgents(agents=[agent1, agent2])
agents = Agents(agents=[agent1, agent2])
agents.start()
```
-71
View File
@@ -1,71 +0,0 @@
"""
Auto-generated API server for PraisonAI agents.
"""
from flask import Flask, request, jsonify
from flask_cors import CORS
from praisonai import PraisonAI
import os
app = Flask(__name__)
# CORS configuration
CORS(app)
# Authentication
AUTH_ENABLED = False
AUTH_TOKEN = None
def check_auth():
"""Check authentication if enabled."""
if not AUTH_ENABLED:
return True
token = request.headers.get('Authorization', '').replace('Bearer ', '')
return token == AUTH_TOKEN
@app.route('/health', methods=['GET'])
def health():
"""Health check endpoint."""
return jsonify({"status": "ok", "service": "praisonai-api"})
@app.route('/chat', methods=['POST'])
def chat():
"""Chat endpoint for agent interaction."""
if not check_auth():
return jsonify({"error": "Unauthorized"}), 401
data = request.get_json()
if not data or 'message' not in data:
return jsonify({"error": "Message required"}), 400
try:
praisonai = PraisonAI(agent_file="agents.yaml")
result = praisonai.run()
return jsonify({
"response": result,
"status": "success"
})
except Exception as e:
return jsonify({
"error": str(e),
"status": "error"
}), 500
@app.route('/agents', methods=['GET'])
def list_agents():
"""List available agents."""
if not check_auth():
return jsonify({"error": "Unauthorized"}), 401
return jsonify({
"agents": ["default"],
"agent_file": "agents.yaml"
})
if __name__ == '__main__':
app.run(
host='0.0.0.0',
port=8080,
debug=False
)
+1 -1
View File
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=3.3.0" \
"praisonai>=3.4.1" \
"praisonai[chat]" \
"embedchain[github,youtube]"
+1 -1
View File
@@ -20,7 +20,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=3.3.0" \
"praisonai>=3.4.1" \
"praisonai[ui]" \
"praisonai[chat]" \
"praisonai[realtime]" \
+1 -1
View File
@@ -16,7 +16,7 @@ RUN mkdir -p /root/.praison
# Install Python packages (using latest versions)
RUN pip install --no-cache-dir \
praisonai_tools \
"praisonai>=3.3.0" \
"praisonai>=3.4.1" \
"praisonai[ui]" \
"praisonai[crewai]"
-203
View File
@@ -1,203 +0,0 @@
# Profiling CLI
PraisonAI provides unified profiling capabilities for performance analysis and debugging, with **full visibility from ENTER to first response**.
## Quick Start
```bash
# Basic profiling
praisonai "What is 2+2?" --profile
# Deep profiling with call graph, decision trace, and module breakdown
praisonai "What is 2+2?" --profile --profile-deep
# JSON output format
praisonai "What is 2+2?" --profile --profile-format json
```
## Time to First Response (TTFR)
**TTFR** is the key user-perceived latency metric. It measures the time from when you press ENTER until the first visible output appears.
### What contributes to TTFR?
1. **CLI Entry** - Time to reach the CLI entry point
2. **CLI Parse** - Argparse/Typer routing time
3. **Routing** - Command routing to handler
4. **Imports** - Loading required modules
5. **Agent Init** - Initializing the agent
6. **Network Request** - Sending request to LLM API
7. **First Token** - Receiving first token (streaming)
8. **First Output** - Rendering first visible output
### How to reduce TTFR
1. **Warm runs** - Imports are cached after first run
2. **Streaming mode** - See output as tokens arrive
3. **Lighter models** - Faster response times
4. **Local models** - Eliminate network latency
## CLI Flags
| Flag | Description | Default |
|------|-------------|---------|
| `--profile` | Enable profiling with timing breakdown | Disabled |
| `--profile-deep` | Enable deep profiling with call graph (higher overhead) | Disabled |
| `--profile-format` | Output format: `text` or `json` | `text` |
## Profile Command
For more detailed profiling options, use the `profile` subcommand:
```bash
# Profile a query
praisonai profile query "What is 2+2?"
# With deep call tracing
praisonai profile query "Hello" --deep
# Limit functions shown
praisonai profile query "Test" --limit 20
# Save artifacts to directory
praisonai profile query "Test" --save ./profile_results
# JSON output
praisonai profile query "Test" --format json
```
### Profile Query Options
| Option | Description | Default |
|--------|-------------|---------|
| `--model, -m` | Model to use | Default model |
| `--stream/--no-stream` | Use streaming mode | No stream |
| `--deep` | Enable deep call tracing | Disabled |
| `--limit, -n` | Top N functions to show | 30 |
| `--sort, -s` | Sort by: `cumulative` or `tottime` | `cumulative` |
| `--show-callers` | Show caller functions | Disabled |
| `--show-callees` | Show callee functions | Disabled |
| `--save` | Save artifacts to path | None |
| `--format, -f` | Output format: `text` or `json` | `text` |
## Other Profile Commands
```bash
# Profile module import times
praisonai profile imports
# Profile CLI startup time
praisonai profile startup
# Run comprehensive profiling suite
praisonai profile suite
# Create performance snapshots for comparison
praisonai profile snapshot --baseline
praisonai profile snapshot current --compare
# Configure performance optimizations
praisonai profile optimize --show
```
## Output Format
### Text Report
```
======================================================================
PraisonAI Profile Report
======================================================================
Run ID: abc12345
Timestamp: 2024-01-02T12:00:00.000000Z
Method: cli_direct
Version: 3.0.1
## Execution Timeline
---------------------------------------------
Imports : 500.00 ms
Agent Init : 0.50 ms
Execution : 2000.00 ms
───────────────────────────────────────────
⏱ Time to First Response : 2500.50 ms
TOTAL : 2500.50 ms
## Timing Breakdown
----------------------------------------
Imports: 500.00 ms
Agent Init: 0.50 ms
Execution: 2000.00 ms
─────────────────────────────────────
TOTAL: 2500.50 ms
## Decision Trace (deep profile only)
----------------------------------------
Agent Config: default
Model: gpt-4
Streaming: disabled
Profile Layer: 2
## Top Functions by Cumulative Time
----------------------------------------------------------------------
Function Calls Cumul (ms)
----------------------------------------------------------------------
request 1 1800.00
send 1 1750.00
...
```
### JSON Report
```json
{
"schema_version": "1.0",
"run_id": "abc12345",
"timestamp": "2024-01-02T12:00:00.000000Z",
"invocation": {
"method": "cli_direct",
"flags": {"layer": 1, "stream": false, "model": null},
"praisonai_version": "3.0.1",
"python_version": "3.12.0"
},
"timing": {
"total_ms": 2500.5,
"imports_ms": 500.0,
"agent_init_ms": 0.5,
"execution_ms": 2000.0
},
"functions": [...],
"response_preview": "four"
}
```
## Profiling Layers
| Layer | Overhead | Features |
|-------|----------|----------|
| 0 | < 1ms | Wall-clock phases only |
| 1 | ~5% | + cProfile function stats |
| 2 | ~15% | + Call graph (callers/callees) |
- `--profile` uses Layer 1
- `--profile --profile-deep` uses Layer 2
## Performance Tips
1. **Use Layer 0 for production monitoring** - minimal overhead
2. **Use Layer 1 for development profiling** - good balance
3. **Use Layer 2 only for deep debugging** - higher overhead
## Observational Equivalence
The following commands produce equivalent profile reports:
```bash
# CLI direct
praisonai "prompt" --profile
# Profile command
praisonai profile query "prompt"
```
Both use the same unified profiling architecture and produce identical schema output.
-257
View File
@@ -1,257 +0,0 @@
# Profiling Module
PraisonAI provides a unified profiling module for programmatic performance analysis.
## Quick Start
```python
from praisonai.cli.execution import (
ExecutionRequest,
Profiler,
ProfilerConfig,
)
# Create execution request
request = ExecutionRequest(prompt="What is 2+2?")
# Configure profiler
config = ProfilerConfig(layer=1)
# Run with profiling
profiler = Profiler(config)
result, report = profiler.profile_sync(request)
# Access results
print(f"Output: {result.output}")
print(f"Total time: {report.timing.total_ms}ms")
```
## ExecutionRequest
Immutable request descriptor for execution.
```python
from praisonai.cli.execution import ExecutionRequest
# Basic request
request = ExecutionRequest(prompt="Hello")
# With model
request = ExecutionRequest(
prompt="Hello",
model="gpt-4",
agent_name="MyAgent",
)
# With streaming
request = ExecutionRequest(
prompt="Hello",
stream=True,
)
```
### Parameters
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `prompt` | str | Required | The prompt to execute |
| `agent_name` | str | "Assistant" | Name of the agent |
| `agent_instructions` | str | None | Custom instructions |
| `model` | str | None | Model to use |
| `stream` | bool | False | Enable streaming |
| `tools` | tuple | () | Tools to provide |
## ProfilerConfig
Configuration for profiling behavior.
```python
from praisonai.cli.execution import ProfilerConfig
# Layer 0: Wall-clock only (< 1ms overhead)
config = ProfilerConfig(layer=0)
# Layer 1: + cProfile stats (~5% overhead)
config = ProfilerConfig(layer=1)
# Layer 2: + Call graph (~15% overhead)
config = ProfilerConfig(
layer=2,
show_callers=True,
show_callees=True,
)
# From CLI flags
config = ProfilerConfig.from_flags(
profile=True,
deep=True,
network=False,
)
```
### Parameters
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `layer` | int | 1 | Profiling layer (0, 1, or 2) |
| `limit` | int | 30 | Max functions to show |
| `sort_by` | str | "cumulative" | Sort by: cumulative, time, calls |
| `show_callers` | bool | False | Show caller functions |
| `show_callees` | bool | False | Show callee functions |
| `track_network` | bool | False | Track network requests |
| `output_format` | str | "text" | Output format: text, json |
| `save_path` | str | None | Path to save artifacts |
## Profiler
The main profiler class that wraps execution.
```python
from praisonai.cli.execution import Profiler, ProfilerConfig, ExecutionRequest
config = ProfilerConfig(layer=1)
profiler = Profiler(config)
request = ExecutionRequest(prompt="Hello")
result, report = profiler.profile_sync(request, invocation_method="api")
```
### Methods
#### `profile_sync(request, invocation_method="profile_command")`
Profile synchronous execution.
**Parameters:**
- `request`: ExecutionRequest - The execution request
- `invocation_method`: str - How this was invoked (for report)
**Returns:** Tuple of (ExecutionResult, ProfileReport)
## ProfileReport
The canonical profile report with timing and statistics.
```python
# Access timing breakdown
print(f"Total: {report.timing.total_ms}ms")
print(f"Imports: {report.timing.imports_ms}ms")
print(f"Agent Init: {report.timing.agent_init_ms}ms")
print(f"Execution: {report.timing.execution_ms}ms")
# Access function stats (layer 1+)
if report.functions:
for func in report.functions[:5]:
print(f"{func.name}: {func.cumulative_time_ms}ms")
# Access call graph (layer 2)
if report.call_graph:
print(f"Edges: {len(report.call_graph.edges)}")
# Export formats
json_str = report.to_json()
text_str = report.to_text()
dict_data = report.to_dict()
```
### Schema Version
The report uses schema version `1.0`. Schema is frozen after release - new fields are always optional with defaults.
### Mandatory Fields
- `schema_version`: str
- `run_id`: str
- `timestamp`: str (ISO 8601)
- `invocation`: InvocationInfo
- `timing`: TimingBreakdown
- `response_preview`: str
### Optional Fields
- `functions`: List[FunctionStat] (layer 1+)
- `call_graph`: CallGraph (layer 2)
- `network`: List[RequestTiming] (if track_network)
## ExecutionResult
Result of execution with output and metadata.
```python
# Access output
print(result.output)
print(result.success)
print(result.run_id)
# Check for errors
if result.error:
print(f"Error: {result.error}")
# Duration
print(f"Duration: {result.duration_ms}ms")
```
## Data Bounds
Profile data is strictly bounded to prevent memory issues:
| Data Type | Maximum |
|-----------|---------|
| Function stats | 1000 |
| Call graph edges | 5000 |
| Network requests | 100 |
## Example: Full Profiling Workflow
```python
from praisonai.cli.execution import (
ExecutionRequest,
Profiler,
ProfilerConfig,
)
# Configure deep profiling
config = ProfilerConfig(
layer=2,
limit=50,
show_callers=True,
show_callees=True,
)
# Create request
request = ExecutionRequest(
prompt="Explain quantum computing in simple terms",
model="gpt-4",
)
# Profile execution
profiler = Profiler(config)
result, report = profiler.profile_sync(request)
# Print text report
print(report.to_text())
# Save JSON report
with open("profile.json", "w") as f:
f.write(report.to_json())
# Analyze timing
print(f"\nTiming Analysis:")
print(f" Import overhead: {report.timing.imports_ms / report.timing.total_ms * 100:.1f}%")
print(f" Execution time: {report.timing.execution_ms / report.timing.total_ms * 100:.1f}%")
# Top 5 hotspots
if report.functions:
print(f"\nTop 5 Hotspots:")
for func in report.functions[:5]:
print(f" {func.name}: {func.cumulative_time_ms:.2f}ms ({func.calls} calls)")
```
## Invariants
The profiling module guarantees:
1. **Output Equivalence**: Profiled execution produces identical output to non-profiled execution
2. **Schema Stability**: Schema version 1.0 is frozen; new fields are always optional
3. **Bounded Data**: All profile data respects maximum bounds
4. **Zero Overhead When Disabled**: No profiling code runs unless explicitly enabled
-53
View File
@@ -1,53 +0,0 @@
# Templates CLI
```bash
praisonai templates list
```
```bash
praisonai templates search video
```
```bash
praisonai templates info ai-video-editor
```
```bash
praisonai templates run ai-video-editor --input video.mp4 --output edited.mp4
```
```bash
praisonai templates run ai-video-editor --input video.mp4 --output edited.mp4 --offline
```
```bash
praisonai templates run ai-video-editor --input video.mp4 --output edited.mp4 --strict-tools
```
```bash
praisonai templates run ai-video-editor --input video.mp4 --tools ./my_tools.py
```
```bash
praisonai templates run ai-video-editor --input video.mp4 --tools-dir ./tools
```
```bash
praisonai templates run ai-video-editor --input video.mp4 --tools-source praisonai_tools.video
```
```bash
praisonai templates run ai-video-editor --input video.mp4 --no-template-tools-py
```
```bash
praisonai templates init my-project --template ai-video-editor
```
```bash
praisonai templates cache clear
```
```bash
praisonai templates cache list
```
-104
View File
@@ -1,104 +0,0 @@
# Templates Module
## Loading Templates
```python
from praisonai.templates.loader import TemplateLoader
loader = TemplateLoader()
# Load from local path
template = loader.load("./my-template")
# Load from URI
template = loader.load("ai-video-editor")
# Load offline
template = loader.load("ai-video-editor", offline=True)
# Check requirements
missing = loader.check_requirements(template)
```
## Template Discovery
```python
from praisonai.templates.discovery import TemplateDiscovery
discovery = TemplateDiscovery(
include_package=True,
include_defaults=True,
)
# Find template
result = discovery.find_template("ai-video-editor")
# List all templates
templates = discovery.list_templates()
```
## Template Config
```python
from praisonai.templates.loader import TemplateConfig
# Access template properties
template.name
template.description
template.version
template.author
template.requires
template.workflow_file
template.agents_file
template.path
```
## Tool Override Integration
```python
from praisonai.templates.tool_override import (
create_tool_registry_with_overrides,
resolve_tools,
)
# Build registry with template sources
tools_sources = template.requires.get("tools_sources", [])
registry = create_tool_registry_with_overrides(
tools_sources=tools_sources,
template_dir=str(template.path),
include_defaults=True,
)
# Resolve tool names
tools = resolve_tools(["shell_tool"], registry=registry)
```
## TEMPLATE.yaml Schema
```yaml
name: my-template
version: "1.0.0"
description: Template description
requires:
tools: [shell_tool]
packages: [praisonai-tools]
env: [OPENAI_API_KEY]
tools_sources:
- praisonai_tools.video
- ./local_tools.py
workflow: workflow.yaml
agents: agents.yaml
config:
input:
type: string
required: true
output:
type: string
defaults:
preset: podcast
```
-65
View File
@@ -1,65 +0,0 @@
# Tools CLI
```bash
praisonai tools list
```
```bash
praisonai tools info shell_tool
```
```bash
praisonai tools info internet_search
```
```bash
praisonai tools search "web"
```
```bash
praisonai tools search "file"
```
```bash
praisonai tools doctor
```
```bash
praisonai tools doctor --json
```
```bash
praisonai tools resolve shell_tool
```
```bash
praisonai tools resolve internet_search --template ai-video-editor
```
```bash
praisonai tools resolve my_tool --tools ./my_tools.py
```
```bash
praisonai tools resolve my_tool --tools-dir ./tools
```
```bash
praisonai tools discover
```
```bash
praisonai tools discover --include praisonai_tools.video
```
```bash
praisonai tools discover --entrypoints
```
```bash
praisonai tools show-sources
```
```bash
praisonai tools show-sources --template ai-video-editor
```
-90
View File
@@ -1,90 +0,0 @@
# Tools Module
## Tool Registry
```python
from praisonai.templates.tool_override import (
create_tool_registry_with_overrides,
resolve_tools,
)
# Create registry with defaults
registry = create_tool_registry_with_overrides(include_defaults=True)
# Create registry with overrides
registry = create_tool_registry_with_overrides(
override_files=["my_tools.py"],
override_dirs=["./tools"],
include_defaults=True,
)
# Create registry with tools_sources
registry = create_tool_registry_with_overrides(
tools_sources=["praisonai_tools.video"],
template_dir="./my-template",
include_defaults=True,
)
# Resolve tool names to callables
tools = resolve_tools(
["shell_tool", "internet_search"],
registry=registry,
)
```
## Tool Override Loader
```python
from praisonai.templates.tool_override import ToolOverrideLoader
loader = ToolOverrideLoader()
# Load from file
tools = loader.load_from_file("my_tools.py")
# Load from directory
tools = loader.load_from_directory("./tools")
# Load from module
tools = loader.load_from_module("praisonai_tools.video")
# Get default tool directories
dirs = loader.get_default_tool_dirs()
```
## Resolution Order
1. CLI `--tools` files (highest priority)
2. CLI `--tools-dir` directories
3. Template `tools_sources` (from TEMPLATE.yaml)
4. Template-local `tools.py`
5. Default dirs (`~/.praison/tools`, `~/.config/praison/tools`)
6. Package discovery (`praisonai_tools`)
7. Built-in tools (lowest priority)
## Creating Custom Tools
```python
from praisonai_tools import tool
@tool
def my_custom_tool(query: str) -> str:
"""My custom tool description.
Args:
query: The search query
"""
return f"Result for: {query}"
```
## Template tools_sources
```yaml
# TEMPLATE.yaml
requires:
tools: [shell_tool]
tools_sources:
- praisonai_tools.video
- ./local_tools.py
- ./tools_dir/
```
+158
View File
@@ -0,0 +1,158 @@
"""
Agent-Centric API Example
Demonstrates the new consolidated feature parameters for PraisonAI Agents.
These params provide a cleaner, more intuitive API with progressive disclosure.
New Consolidated Params:
- memory: Union[bool, MemoryConfig, MemoryManager] - Memory and session management
- knowledge: Union[bool, List[str], KnowledgeConfig, KnowledgeBase] - RAG and retrieval
- planning: Union[bool, PlanningConfig] - Planning mode
- reflection: Union[bool, ReflectionConfig] - Self-reflection
- guardrails: Union[bool, Callable, GuardrailConfig] - Safety validation
- web: Union[bool, WebConfig] - Web search and fetch
- context: Union[bool, ManagerConfig, ContextManager] - Context management
"""
from praisonaiagents import (
Agent,
# Config classes for progressive disclosure
MemoryConfig,
KnowledgeConfig,
PlanningConfig,
ReflectionConfig,
GuardrailConfig,
WebConfig,
)
def example_simple_enable():
"""Example 1: Simple boolean enable (easiest)"""
print("\n=== Example 1: Simple Boolean Enable ===")
agent = Agent(
instructions="You are a helpful assistant",
memory=True, # Enable memory with defaults
reflection=True, # Enable self-reflection
web=True, # Enable web search + fetch
)
print(f"Agent created with memory={agent._memory_instance is not None}")
print(f" self_reflect={agent.self_reflect}")
print(f" web_search={agent.web_search}")
def example_with_config():
"""Example 2: Using config objects (more control)"""
print("\n=== Example 2: Using Config Objects ===")
agent = Agent(
instructions="You are a research assistant",
memory=MemoryConfig(
backend="file",
user_id="researcher_001",
auto_memory=True,
),
reflection=ReflectionConfig(
min_iterations=1,
max_iterations=5,
llm="gpt-4o-mini",
),
web=WebConfig(
search=True,
fetch=False, # Only search, no full page fetch
max_results=3,
),
)
print(f"Agent created with user_id={agent.user_id}")
print(f" {agent.max_reflect}")
print(f" web_search={agent.web_search}, web_fetch={agent.web_fetch}")
def example_guardrails():
"""Example 3: Guardrails with callable or config"""
print("\n=== Example 3: Guardrails ===")
# Option A: Direct callable
def my_validator(output):
"""Simple validator that checks response length."""
is_valid = len(output.raw) < 1000
return (is_valid, output if is_valid else "Response too long")
agent_a = Agent(
instructions="Be concise",
guardrails=my_validator, # Direct callable
)
print(f"Agent A: guardrail is callable = {callable(agent_a.guardrail)}")
# Option B: Using GuardrailConfig
agent_b = Agent(
instructions="Be helpful and safe",
guardrails=GuardrailConfig(
llm_validator="Ensure the response is helpful, accurate, and safe",
max_retries=3,
),
)
print(f"Agent B: guardrail = {agent_b.guardrail}")
print(f" max_retries = {agent_b.max_guardrail_retries}")
def example_planning():
"""Example 4: Planning mode"""
print("\n=== Example 4: Planning Mode ===")
agent = Agent(
instructions="You are a project planner",
planning=PlanningConfig(
reasoning=True,
read_only=True, # Plan mode - only read operations
),
)
print(f"Agent created with planning={agent.planning}")
print(f" plan_mode={agent.plan_mode}")
print(f" planning_reasoning={agent.planning_reasoning}")
def example_backward_compatible():
"""Example 5: Using new consolidated params"""
print("\n=== Example 5: Consolidated Params ===")
# New consolidated params
agent = Agent(
instructions="Test agent",
reflection=True,
web=WebConfig(search=True, fetch=False),
)
print(f"Consolidated params work: self_reflect={agent.self_reflect}")
print(f" web_search={agent.web_search}, web_fetch={agent.web_fetch}")
def example_real_chat():
"""Example 6: Real chat with new API"""
print("\n=== Example 6: Real Chat ===")
agent = Agent(
instructions="You are a helpful math tutor. Be concise.",
reflection=False,
web=False,
verbose=False,
)
response = agent.start("What is the square root of 144?")
print(f"Response: {response}")
if __name__ == "__main__":
print("=" * 60)
print("PraisonAI Agent-Centric API Examples")
print("=" * 60)
example_simple_enable()
example_with_config()
example_guardrails()
example_planning()
example_backward_compatible()
example_real_chat()
print("\n" + "=" * 60)
print("All examples completed!")
print("=" * 60)
+72
View File
@@ -128,6 +128,78 @@ def main():
budget_dict = budgeter.to_dict()
print(f"Budget as dict: {budget_dict}")
# Example 6: Overflow handling strategies overview
print("\n6. Overflow Handling Strategies")
print("-" * 40)
strategies = [
("truncate", "Remove oldest messages first", "Fast, simple", "Loses early context"),
("sliding_window", "Keep N most recent messages", "Preserves recent", "Loses early context"),
("prune_tools", "Truncate old tool outputs", "Keeps messages", "May lose tool details"),
("summarize", "Replace old messages with summary", "Preserves meaning", "Slower, uses API"),
("smart", "Combine strategies intelligently", "Best balance", "More complex"),
]
print(f"{'Strategy':<15} | {'Description':<30} | {'Pros':<18} | {'Cons'}")
print("-" * 90)
for name, desc, pros, cons in strategies:
print(f"{name:<15} | {desc:<30} | {pros:<18} | {cons}")
# Example 7: Simulated overflow playbook
print("\n7. Overflow Playbook (Thresholds → Actions)")
print("-" * 40)
playbook = [
(0.70, "INFO", "Monitor usage, no action needed"),
(0.80, "NOTICE", "Consider optimization soon"),
(0.90, "WARNING", "Trigger auto-compact if enabled"),
(0.95, "CRITICAL", "Aggressive optimization required"),
(1.00, "OVERFLOW", "Immediate truncation to prevent API error"),
]
print(f"{'Usage':<8} | {'Level':<10} | {'Action'}")
print("-" * 60)
for threshold, level, action in playbook:
print(f"{threshold:>6.0%} | {level:<10} | {action}")
# Example 8: Strategy comparison table
print("\n8. Strategy Comparison")
print("-" * 40)
print("Strategy | Preserves | Loses | Best For")
print("-" * 70)
print("truncate | Recent msgs | Old msgs | Simple chats")
print("sliding_window | Last N msgs | Earlier msgs | Long conversations")
print("prune_tools | All messages | Tool details | Tool-heavy agents")
print("summarize | Context meaning| Exact wording | Important history")
print("smart | Balanced | Minimal | Production use")
# Example 9: Default strategy for interactive mode
print("\n9. Default Strategy: Interactive Mode")
print("-" * 40)
print("Interactive mode default: context=False (zero overhead)")
print("To enable context management in interactive mode:")
print(" praisonai chat --context # Enable with defaults")
print(" Or in code:")
print(" agent = Agent(instructions='...', context=True)")
print("")
print("When enabled, defaults are:")
print(" - auto_compact: True")
print(" - compact_threshold: 0.8 (80% usage)")
print(" - strategy: smart")
print(" - output_reserve: model-specific (8K-16K)")
# Example 10: Default strategy for auto-agents mode
print("\n10. Default Strategy: Auto-Agents Mode")
print("-" * 40)
print("Auto-agents mode default: context=False (zero overhead)")
print("To enable for multi-agent workflows:")
print(" from praisonaiagents import Agents")
print(" agents = Agents(agents=[...], context=True)")
print("")
print("Recommended config for long tasks:")
print(" context=ManagerConfig(")
print(" auto_compact=True,")
print(" compact_threshold=0.7, # Earlier trigger for safety")
print(" strategy='smart',")
print(" output_reserve=16384, # Larger reserve for complex outputs")
print(" )")
print("\n" + "=" * 60)
print("✓ Context budgeting examples complete!")
print("=" * 60)
+5 -5
View File
@@ -2,14 +2,14 @@
"""
Multi-Agent Context Isolation Example
Demonstrates how to use multi-agent context with PraisonAIAgents via context= param,
Demonstrates how to use multi-agent context with Agents via context= param,
and also shows low-level MultiAgentLedger usage for advanced scenarios.
Agent-Centric Quick Start:
from praisonaiagents import Agent, PraisonAIAgents
from praisonaiagents import Agent, Agents
from praisonaiagents.context import ManagerConfig
agents = PraisonAIAgents(
agents = Agents(
agents=[agent1, agent2],
context=ManagerConfig(policy="isolated"), # or "shared"
)
@@ -17,7 +17,7 @@ Agent-Centric Quick Start:
import os
import tempfile
from praisonaiagents import Agent, PraisonAIAgents
from praisonaiagents import Agent, Agents
from praisonaiagents.context import (
ManagerConfig,
MultiAgentLedger,
@@ -49,7 +49,7 @@ def agent_centric_example():
# Multi-agent setup with isolated context policy
# (each agent maintains its own context)
print("Created agents with context=True")
print("Use PraisonAIAgents(agents=[...], context=ManagerConfig(policy='isolated'))")
print("Use Agents(agents=[...], context=ManagerConfig(policy='isolated'))")
print("for multi-agent context isolation")
@@ -13,10 +13,10 @@ from praisonaiagents import Agent
from praisonaiagents.context import (
ContextBudgeter,
ContextLedgerManager,
ContextMonitor,
get_optimizer,
OptimizerStrategy,
estimate_messages_tokens,
format_percent,
)
@@ -37,7 +37,7 @@ def main():
# Get budget info
budget = budgeter.allocate()
print(f"\nModel: gpt-4o-mini")
print("\nModel: gpt-4o-mini")
print(f"Context budget: {budget.usable:,} tokens")
print(f"Output reserve: {budget.output_reserve:,} tokens")
@@ -76,7 +76,7 @@ def main():
current_tokens = ledger.get_total()
utilization = budgeter.get_utilization(current_tokens)
print(f"[Context: {current_tokens} tokens, {utilization:.1%} used]")
print(f"[Context: {current_tokens} tokens, {format_percent(utilization)} used]")
# Check if optimization needed
if utilization > 0.8:
@@ -101,7 +101,7 @@ def main():
final_utilization = budgeter.get_utilization(final_tokens)
print(f"Total tokens used: {final_tokens:,}")
print(f"Context utilization: {final_utilization:.1%}")
print(f"Context utilization: {format_percent(final_utilization)}")
print(f"Messages in conversation: {len(conversation)}")
print(f"Remaining capacity: {budgeter.get_remaining(final_tokens):,} tokens")
+2 -2
View File
@@ -156,7 +156,7 @@ def example_5_multi_agent():
print("Example 5: Multi-Agent Context Management")
print("=" * 60)
from praisonaiagents import PraisonAIAgents, Task
from praisonaiagents import Agents, Task
config = ManagerConfig(
auto_compact=True,
@@ -181,7 +181,7 @@ def example_5_multi_agent():
task2 = Task(description="Write a summary", agent=writer)
# Create multi-agent system with context management
agents = PraisonAIAgents(
agents = Agents(
agents=[researcher, writer],
tasks=[task1, task2],
context=config, # Shared context config
+8 -8
View File
@@ -4,7 +4,7 @@ Fixed example demonstrating proper guardrail usage with PraisonAI Agents.
This addresses the issues reported in issue #875.
"""
from praisonaiagents import Agent, Task, GuardrailResult, PraisonAIAgents, TaskOutput
from praisonaiagents import Agent, Task, GuardrailResult, Agents, TaskOutput
from typing import Tuple, Any
import trafilatura
@@ -67,7 +67,7 @@ agent = Agent(
goal="Summarize web content concisely",
instructions="You are a helpful assistant that summarizes web content",
llm="gemini/gemini-2.5-flash-lite-preview-06-17",
self_reflect=False,
reflection=False,
verbose=True,
tools=[get_url_context] # FIX: tools must be a list, not a single function
)
@@ -77,7 +77,7 @@ task_with_guardrailresult = Task(
name="summarise article with GuardrailResult",
description="get the context of this url: https://blog.google/technology/ai/dolphingemma/ and produce a summary below 500 characters",
agent=agent,
guardrail=validate_length_guardrailresult, # Using GuardrailResult
guardrails=validate_length_guardrailresult, # Using GuardrailResult
expected_output="summary of the article below 500 characters",
max_retries=3 # Will retry up to 3 times if guardrail fails
)
@@ -87,7 +87,7 @@ task_with_tuple = Task(
name="summarise article with tuple",
description="get the context of this url: https://blog.google/technology/ai/dolphingemma/ and produce a summary below 500 characters",
agent=agent,
guardrail=validate_length_tuple, # Using Tuple[bool, Any]
guardrails=validate_length_tuple, # Using Tuple[bool, Any]
expected_output="summary of the article below 500 characters",
max_retries=3
)
@@ -97,13 +97,13 @@ task_with_llm_guardrail = Task(
name="summarise with LLM guardrail",
description="get the context of this url: https://blog.google/technology/ai/dolphingemma/ and produce a summary",
agent=agent,
guardrail="Ensure the summary is professional, factual, and between 100-500 characters",
guardrails="Ensure the summary is professional, factual, and between 100-500 characters",
expected_output="professional summary of the article"
)
# Run with GuardrailResult example
print("=== Running with GuardrailResult guardrail ===")
agents_gr = PraisonAIAgents(
agents_gr = Agents(
agents=[agent],
tasks=[task_with_guardrailresult]
)
@@ -113,7 +113,7 @@ agents_gr = PraisonAIAgents(
# Run with Tuple example
print("\n=== Running with Tuple[bool, Any] guardrail ===")
agents_tuple = PraisonAIAgents(
agents_tuple = Agents(
agents=[agent],
tasks=[task_with_tuple]
)
@@ -123,7 +123,7 @@ agents_tuple = PraisonAIAgents(
# Run with LLM guardrail example
print("\n=== Running with LLM-based guardrail ===")
agents_llm = PraisonAIAgents(
agents_llm = Agents(
agents=[agent],
tasks=[task_with_llm_guardrail]
)
@@ -14,7 +14,7 @@ Usage:
from praisonai_tools.observability import obs
from praisonai_tools.observability.base import SpanKind
from praisonaiagents import Agent, PraisonAIAgents
from praisonaiagents import Agent, Agents
# Initialize observability
obs.init()
+2 -2
View File
@@ -13,7 +13,7 @@ Features demonstrated:
import sys
sys.path.insert(0, '/Users/praison/praisonai-package/src/praisonai-agents')
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
def get_weather(city: str) -> str:
@@ -106,7 +106,7 @@ def example_multi_agent():
agent=writer
)
agents = PraisonAIAgents(
agents = Agents(
agents=[researcher, writer],
tasks=[task1, task2],
process="sequential",
@@ -5,7 +5,7 @@ This example demonstrates hierarchical agent patterns using PraisonAI
for structured task delegation and coordinated workflows.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import internet_search
print("=== AutoAgents Hierarchical Generation Example ===\n")
@@ -58,7 +58,7 @@ execution_task = Task(
)
# Run hierarchical workflow
agents_system = PraisonAIAgents(
agents_system = Agents(
agents=[manager_agent, research_agent],
tasks=[planning_task, execution_task],
process="sequential",
+8 -8
View File
@@ -5,7 +5,7 @@ This example demonstrates a comprehensive code agent that can write, analyze, de
It includes self-reflection for improving code quality and multiple specialized tools.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import CodeInterpreter
# Initialize code execution tool
@@ -32,9 +32,9 @@ code_writer = Agent(
goal="Write clean, efficient, and well-documented Python code",
backstory="You are a senior Python developer with 10+ years of experience in writing production-quality code.",
instructions="Write Python code that follows PEP 8 standards, includes proper error handling, and has clear documentation.",
self_reflect=True,
min_reflect=2,
max_reflect=5
reflection=True,
)
code_reviewer = Agent(
@@ -84,7 +84,7 @@ def demonstrate_code_agent():
)
# Create workflow
workflow = PraisonAIAgents(
workflow = Agents(
agents=[code_writer, code_reviewer, code_executor],
tasks=[write_task, review_task, execute_task],
process="sequential",
@@ -108,9 +108,9 @@ general_code_agent = Agent(
4. Refactor code for better performance
5. Add tests and documentation""",
tools=[code_interpreter, analyze_code_complexity],
self_reflect=True,
min_reflect=1,
max_reflect=3
reflection=True,
)
if __name__ == "__main__":
+4 -4
View File
@@ -4,7 +4,7 @@ from praisonaiagents.tools import duckduckgo
agent = Agent(instructions="You are a Image Analysis Agent", tools=[duckduckgo])
agent.start("I want to go London next week, find me a good hotel and flight")
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Create Image Analysis Agent
image_agent = Agent(
@@ -14,7 +14,7 @@ image_agent = Agent(
backstory="""You are an expert in computer vision and image analysis.
You excel at describing images, detecting objects, and understanding visual content.""",
llm="gpt-5-nano",
self_reflect=False
reflection=False
)
# 1. Task with Image URL
@@ -35,8 +35,8 @@ task2 = Task(
images=["image.jpg"]
)
# Create PraisonAIAgents instance
agents = PraisonAIAgents(
# Create Agents instance
agents = Agents(
agents=[image_agent],
tasks=[task1, task2],
process="sequential",
@@ -4,7 +4,7 @@ from praisonaiagents.tools import duckduckgo
agent = Agent(instructions="You are a Image Analysis Agent", tools=[duckduckgo])
agent.start("I want to go London next week, find me a good hotel and flight")
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Create Image Analysis Agent
image_agent = Agent(
@@ -14,7 +14,7 @@ image_agent = Agent(
backstory="""You are an expert in computer vision and image analysis.
You excel at describing images, detecting objects, and understanding visual content.""",
llm="gpt-5-nano",
self_reflect=False
reflection=False
)
# 1. Task with Image URL
@@ -35,8 +35,8 @@ task2 = Task(
images=["image.jpg"]
)
# Create PraisonAIAgents instance
agents = PraisonAIAgents(
# Create Agents instance
agents = Agents(
agents=[image_agent],
tasks=[task1, task2],
process="sequential",
+11 -11
View File
@@ -5,7 +5,7 @@ This example demonstrates a mathematical problem-solving agent that can handle v
including calculations, equation solving, and step-by-step explanations.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from typing import Dict, Any
import math
import re
@@ -65,9 +65,9 @@ calculation_agent = Agent(
backstory="You are an expert mathematician who can handle complex calculations with precision.",
instructions="Perform the requested calculations step by step, showing your work clearly.",
tools=[basic_calculator, solve_quadratic, calculate_statistics],
self_reflect=True,
min_reflect=1,
max_reflect=2
reflection=True,
)
problem_solver_agent = Agent(
@@ -81,9 +81,9 @@ problem_solver_agent = Agent(
3. Determine what needs to be found
4. Show each step of the solution
5. Verify the answer makes sense""",
self_reflect=True,
min_reflect=2,
max_reflect=4
reflection=True,
)
math_tutor_agent = Agent(
@@ -123,7 +123,7 @@ def solve_math_problem_workflow():
context=[solve_task]
)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[problem_solver_agent, calculation_agent, math_tutor_agent],
tasks=[understand_task, solve_task, verify_task],
process="sequential",
@@ -148,9 +148,9 @@ math_assistant = Agent(
Always show your work step by step.""",
tools=[basic_calculator, solve_quadratic, calculate_statistics],
self_reflect=True,
min_reflect=1,
max_reflect=3
reflection=True,
)
if __name__ == "__main__":
@@ -6,7 +6,7 @@ agent-based selection for cost optimization and performance.
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.agent import RouterAgent
from praisonaiagents.llm.model_router import ModelRouter, ModelProfile, TaskComplexity
@@ -49,7 +49,7 @@ def example_auto_routing():
)
# Run the tasks
agents = PraisonAIAgents(
agents = Agents(
agents=[research_agent],
tasks=[simple_task, moderate_task, complex_task],
process="sequential",
@@ -118,7 +118,7 @@ def example_cost_optimized_workflow():
)
# Run workflow
workflow = PraisonAIAgents(
workflow = Agents(
agents=[analyzer, writer],
tasks=[analysis_task, writing_task],
process="sequential",
@@ -249,7 +249,7 @@ def example_custom_routing():
]
# Run tasks
agents = PraisonAIAgents(
agents = Agents(
agents=[coder],
tasks=tasks,
process="sequential",
+3 -2
View File
@@ -1,10 +1,11 @@
from praisonaiagents import Agent, Tools
from praisonaiagents import Agent, Tools, ReflectionConfig
from praisonaiagents.tools import execute_code, analyze_code, format_code, lint_code, disassemble_code # Code Tools
from praisonaiagents.tools import execute_command, list_processes, kill_process, get_system_info # Shell Tools
from praisonaiagents.tools import duckduckgo # Web Search Tool
agent = Agent(
instructions="You are a Programming Agent", self_reflect=True, min_reflect=5, max_reflect=10,
instructions="You are a Programming Agent",
reflection=ReflectionConfig(min_iterations=5, max_iterations=10),
tools=[execute_code, analyze_code, format_code, lint_code, disassemble_code, execute_command, list_processes, kill_process, get_system_info, duckduckgo]
)
agent.start(
+4 -4
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Create Video Analysis Agent
video_agent = Agent(
@@ -8,7 +8,7 @@ video_agent = Agent(
backstory="""You are an expert in computer vision and image analysis.
You excel at describing images, detecting objects, and understanding visual content.""",
llm="gpt-5-nano",
self_reflect=False
reflection=False
)
# Task with Video File
@@ -24,8 +24,8 @@ task1 = Task(
images=["video.mp4"]
)
# Create PraisonAIAgents instance
agents = PraisonAIAgents(
# Create Agents instance
agents = Agents(
agents=[video_agent],
tasks=[task1],
process="sequential",
+4 -4
View File
@@ -1,12 +1,12 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import wiki_search, wiki_summary, wiki_page, wiki_random, wiki_language
agent = Agent(
instructions="You are a Wikipedia Agent",
tools=[wiki_search, wiki_summary, wiki_page, wiki_random, wiki_language],
self_reflect=True,
min_reflect=3,
max_reflect=5,
reflection=True,
)
agent.start(
"What is the history of AI?"
@@ -32,7 +32,7 @@ import os
from pathlib import Path
# Import our market research system
from praisonaiagents import Agent, Task, PraisonAIAgents, Tools
from praisonaiagents import Agent, Task, Agents, Tools
# Create FastAPI app
app = FastAPI(
@@ -266,7 +266,7 @@ async def generate_market_research_report(job_id: str, config: MarketResearchCon
job_status[job_id]["message"] = "Setting up research workflow..."
# Create workflow
workflow = PraisonAIAgents(
workflow = Agents(
agents=list(agents.values()),
tasks=tasks,
process="sequential",
+2 -2
View File
@@ -16,7 +16,7 @@ Environment Variables:
import cv2
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
def capture_and_analyze():
@@ -58,7 +58,7 @@ def capture_and_analyze():
)
# Run analysis
agents = PraisonAIAgents(
agents = Agents(
agents=[vision_agent],
tasks=[task],
process="sequential",
+2 -2
View File
@@ -18,7 +18,7 @@ import cv2
import time
import os
from datetime import datetime
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
class ContinuousCameraMonitor:
@@ -71,7 +71,7 @@ class ContinuousCameraMonitor:
images=[image_path]
)
agents = PraisonAIAgents(
agents = Agents(
agents=[self.vision_agent],
tasks=[task],
process="sequential",
+2 -2
View File
@@ -17,7 +17,7 @@ Environment Variables:
import cv2
import os
from datetime import datetime
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
def capture_camera_frame(camera_id=0):
@@ -114,7 +114,7 @@ def analyze_with_multiple_agents():
)
# Run multi-agent analysis
agents = PraisonAIAgents(
agents = Agents(
agents=[security_agent, object_detector, scene_analyst],
tasks=[security_task, object_task, scene_task],
process="parallel", # Run all analyses in parallel
@@ -18,7 +18,7 @@ import cv2
import os
import time
from datetime import datetime
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
class CameraVideoAnalyzer:
@@ -131,7 +131,7 @@ class CameraVideoAnalyzer:
images=[video_path] # PraisonAI supports video files in images parameter
)
agents = PraisonAIAgents(
agents = Agents(
agents=[self.video_agent],
tasks=[task],
process="sequential",
+3 -3
View File
@@ -27,9 +27,9 @@ pdf_agent = Agent(
instructions="Read the provided PDF document and answer questions about its content. Be specific and cite relevant sections when possible.",
knowledge=["document.pdf"], # Replace with your PDF file path
knowledge_config=config,
self_reflect=True,
min_reflect=1,
max_reflect=3
reflection=True,
)
# Example usage
@@ -24,7 +24,7 @@ from pathlib import Path
project_root = Path(__file__).parent.parent.parent.parent / "src" / "praisonai-agents"
sys.path.insert(0, str(project_root))
from praisonaiagents import Agent, Task, PraisonAIAgents, create_context_agent
from praisonaiagents import Agent, Task, Agents, create_context_agent
class ContextEngineeringWorkflow:
"""
@@ -312,7 +312,7 @@ class ContextEngineeringWorkflow:
print("\n⚙️ Executing Context Engineering Workflow")
print("-" * 50)
agents_workflow = PraisonAIAgents(
agents_workflow = Agents(
agents=[
self.product_manager,
self.architect,
@@ -11,7 +11,7 @@ Author: Generated for GitHub Issue #23
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import read_csv, write_csv
def create_sample_urls_csv():
@@ -81,7 +81,7 @@ def method_1_simple_loop():
)
# Initialize the agents system
agents = PraisonAIAgents(
agents = Agents(
agents=[loop_agent],
tasks=[loop_task],
process="workflow",
@@ -145,7 +145,7 @@ def method_2_manual_csv():
)
# Initialize and run
agents = PraisonAIAgents(
agents = Agents(
agents=[csv_agent],
tasks=[csv_task],
process="sequential"
@@ -211,7 +211,7 @@ def method_3_url_processing():
)
# Initialize and run
agents = PraisonAIAgents(
agents = Agents(
agents=[url_agent],
tasks=[url_task],
process="sequential"
@@ -319,7 +319,7 @@ def method_4_advanced_processing():
)
# Initialize and run with sequential processing
agents = PraisonAIAgents(
agents = Agents(
agents=[validator_agent, processor_agent],
tasks=[validation_task, processing_task],
process="sequential" # Validation must complete before processing
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import logging
import os
@@ -37,7 +37,7 @@ knowledge_task = Task(
)
# Create and start the agents
agents = PraisonAIAgents(
agents = Agents(
agents=[knowledge_agent],
tasks=[knowledge_task],
process="sequential",
+2 -2
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Define the configuration for the Knowledge instance
config = {
@@ -29,7 +29,7 @@ rag_task = Task(
)
# Build Agents
agents = PraisonAIAgents(
agents = Agents(
agents=[rag_agent],
tasks=[rag_task],
user_id="user1"
@@ -8,7 +8,7 @@ This example demonstrates how to extract and utilize reasoning patterns in Prais
- Decision rationale extraction
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from typing import Dict, List, Tuple
from pydantic import BaseModel
import json
@@ -49,9 +49,9 @@ cot_agent = Agent(
6. Assess your confidence level
Always make your thinking process explicit and transparent.""",
self_reflect=True,
min_reflect=2,
max_reflect=3
reflection=True,
)
# Example 2: Reasoning Extractor Agent
@@ -100,7 +100,7 @@ def demonstrate_reasoning_extraction():
context=[problem_task]
)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[cot_agent, reasoning_extractor],
tasks=[problem_task, extract_task],
process="sequential",
@@ -184,7 +184,7 @@ def advanced_reasoning_patterns():
context=[deductive_task, inductive_task, abductive_task]
)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[cot_agent, reasoning_validator],
tasks=[deductive_task, inductive_task, abductive_task, validation_task],
process="sequential",
@@ -224,7 +224,7 @@ pattern_reasoning_agent = Agent(
3. Counterfactual: Explore what-if scenarios
4. Systems thinking: Consider interconnections
5. Probabilistic: Assess likelihoods""",
self_reflect=True
reflection=True
)
# Example 8: Interactive Reasoning Extraction
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
agent = Agent(
instructions="You are a loop agent that creating a loop of tasks.",
@@ -12,7 +12,7 @@ task = Task(
input_file="tasks.csv"
)
agents = PraisonAIAgents(
agents = Agents(
agents=[agent],
tasks=[task],
process="workflow",
+6 -6
View File
@@ -8,7 +8,7 @@ This example demonstrates various routing patterns in PraisonAI including:
- Dynamic task selection
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from typing import Dict, Any
import random
@@ -77,7 +77,7 @@ def conditional_routing_example():
agent=processor_agent
)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[analyzer_agent, processor_agent],
tasks=[analysis_task, premium_task, standard_task, basic_task],
process="workflow",
@@ -110,7 +110,7 @@ def loop_pattern_example():
agent=validator_agent
)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[processor_agent, validator_agent],
tasks=[process_task, finalize_task],
process="workflow",
@@ -185,7 +185,7 @@ def decision_tree_example():
all_tasks = [categorize_task, technical_task, business_task] + terminal_tasks
workflow = PraisonAIAgents(
workflow = Agents(
agents=[analyzer_agent, processor_agent],
tasks=all_tasks,
process="workflow",
@@ -208,7 +208,7 @@ dynamic_router = Agent(
5. Current system load
Provide clear routing decisions with reasoning.""",
self_reflect=True
reflection=True
)
def dynamic_routing_example():
@@ -272,7 +272,7 @@ def dynamic_routing_example():
agent=processor_agent
)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[dynamic_router, processor_agent],
tasks=[route_task, escalate_task, automate_task, review_task, standard_task],
process="workflow",
@@ -8,7 +8,7 @@ This example demonstrates the self-reflection capabilities in PraisonAI agents:
- Impact on output quality
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from typing import Dict, Any
import time
@@ -24,9 +24,9 @@ basic_reflection_agent = Agent(
3. Identify areas for improvement
4. Revise and enhance
5. Repeat until satisfied""",
self_reflect=True, # Enable self-reflection
min_reflect=1, # Minimum 1 reflection iteration
max_reflect=3 # Maximum 3 reflection iterations
reflection=True, # Enable self-reflection
# Minimum 1 reflection iteration
# Maximum 3 reflection iterations
)
# Example 2: Advanced Reflection with Different Strategies
@@ -41,9 +41,9 @@ quality_focused_agent = Agent(
- Clarity of presentation
- Logical flow
- Supporting evidence""",
self_reflect=True,
min_reflect=3, # Higher minimum for quality
max_reflect=5 # Allow more iterations
reflection=True,
# Higher minimum for quality
# Allow more iterations
)
efficiency_balanced_agent = Agent(
@@ -52,9 +52,9 @@ efficiency_balanced_agent = Agent(
goal="Achieve good quality with reasonable reflection time",
backstory="You balance quality with efficiency, knowing when good enough is sufficient.",
instructions="Create good content with 1-2 rounds of improvement.",
self_reflect=True,
min_reflect=1,
max_reflect=2 # Limit iterations for efficiency
reflection=True,
# Limit iterations for efficiency
)
# Example 3: No Reflection for Comparison
@@ -64,7 +64,7 @@ no_reflection_agent = Agent(
goal="Provide immediate responses without reflection",
backstory="You provide quick, first-draft responses.",
instructions="Respond immediately with your first thought.",
self_reflect=False # Disable reflection
reflection=False # Disable reflection
)
# Demonstration function to show reflection in action
@@ -113,9 +113,9 @@ def reflection_workflow_example():
role="Initial content creator",
goal="Create first draft with self-improvement",
backstory="You create initial drafts and refine them through reflection.",
self_reflect=True,
min_reflect=2,
max_reflect=3
reflection=True,
)
# Reviewer without reflection (provides feedback)
@@ -124,7 +124,7 @@ def reflection_workflow_example():
role="Content reviewer",
goal="Provide constructive feedback",
backstory="You review content and provide specific improvement suggestions.",
self_reflect=False # No reflection needed for reviewing
reflection=False # No reflection needed for reviewing
)
# Final polisher with reflection
@@ -133,9 +133,9 @@ def reflection_workflow_example():
role="Final content polisher",
goal="Perfect the content based on feedback",
backstory="You take feedback and create the final, polished version.",
self_reflect=True,
min_reflect=1,
max_reflect=2
reflection=True,
)
# Workflow tasks
@@ -162,7 +162,7 @@ def reflection_workflow_example():
context=[create_task, review_task]
)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[creator_agent, reviewer_agent, polisher_agent],
tasks=[create_task, review_task, polish_task],
process="sequential",
@@ -202,9 +202,9 @@ custom_reflection_agent = Agent(
backstory="You adapt your reflection process based on content quality.",
instructions="""Create content and reflect on it.
Continue improving until quality standards are met or maximum iterations reached.""",
self_reflect=True,
min_reflect=1,
max_reflect=5
reflection=True,
)
# Example 6: Reflection Impact Analysis
@@ -5,7 +5,7 @@ This example demonstrates self-reflection capabilities using PraisonAI's
built-in reflection features for iterative improvement and quality optimization.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import internet_search
print("=== Self-Reflection Optimization Patterns Example ===\n")
@@ -17,10 +17,10 @@ reflection_agent = Agent(
goal="Demonstrate self-reflection and iterative improvement patterns",
backstory="Expert researcher with strong self-reflection and continuous improvement capabilities",
tools=[internet_search],
self_reflect=True,
min_reflect=2,
max_reflect=4,
reflect_llm="gpt-5-nano",
reflection=True,
verbose=True
)
@@ -9,7 +9,7 @@ This is the simplest possible implementation for processing URLs from a CSV file
Author: Generated for GitHub Issue #23
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import write_csv
def create_url_csv():
@@ -59,7 +59,7 @@ def main():
)
# Step 4: Run the agents
agents = PraisonAIAgents(
agents = Agents(
agents=[url_agent],
tasks=[url_task],
process="workflow",
@@ -4,7 +4,7 @@ Example: Using Latency Tracking Tool with PraisonAI
This example shows how to track latency without modifying core files.
"""
from praisonaiagents import Agent, PraisonAIAgents
from praisonaiagents import Agent, Agents
from latency_tracker_tool import (
latency_tracking_tool,
create_tracked_agent,
@@ -5,7 +5,7 @@ This shows how to add latency tracking to an MCP server
without modifying PraisonAI core files.
"""
from praisonaiagents import Agent, PraisonAIAgents
from praisonaiagents import Agent, Agents
from hosted_server import HostedMCPServer # Import from local file
from latency_tracker_tool import tracker, get_latency_metrics
import json
+2 -2
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import cot_save, cot_upload_to_huggingface
from pydantic import BaseModel
import os
@@ -131,7 +131,7 @@ upload_to_huggingface_task = Task(
)
# Initialize workflow
agents = PraisonAIAgents(
agents = Agents(
agents=[qa_generator, total_questions_evaluator, cot_generator, upload_to_huggingface],
tasks=[generate_task, evaluate_total_questions_task, generate_cot_task, upload_to_huggingface_task],
process="workflow",
+192
View File
@@ -0,0 +1,192 @@
"""
Escalation Pipeline Example.
Demonstrates the progressive escalation from direct response to autonomous mode.
"""
import asyncio
from praisonaiagents.escalation import (
EscalationPipeline,
EscalationStage,
EscalationConfig,
EscalationTrigger,
DoomLoopDetector,
ObservabilityHooks,
EventType,
)
def demo_signal_detection():
"""Demonstrate signal detection from prompts."""
print("\n" + "="*60)
print("SIGNAL DETECTION DEMO")
print("="*60)
trigger = EscalationTrigger()
# Test various prompts
test_prompts = [
("What is Python?", "Simple question"),
("Read the file src/main.py", "File reference"),
("Refactor the authentication module and add tests", "Complex task"),
("First, analyze the code. Then, fix the bug. Finally, test it.", "Multi-step"),
]
for prompt, description in test_prompts:
signals = trigger.analyze(prompt)
stage = trigger.recommend_stage(signals)
print(f"\n📝 Prompt: {prompt[:50]}...")
print(f" Description: {description}")
print(f" Signals: {[s.value for s in signals]}")
print(f" Recommended Stage: {stage.name}")
def demo_doom_loop_detection():
"""Demonstrate doom loop detection."""
print("\n" + "="*60)
print("DOOM LOOP DETECTION DEMO")
print("="*60)
detector = DoomLoopDetector()
detector.start_session()
# Simulate repeated identical actions
print("\n🔄 Simulating repeated identical actions...")
for i in range(4):
detector.record_action(
action_type="read_file",
args={"path": "config.py"},
result="same content",
success=True,
)
if detector.is_doom_loop():
loop_type = detector.get_loop_type()
recovery = detector.get_recovery_action()
print(f" ⚠️ Doom loop detected after {i+1} actions!")
print(f" Type: {loop_type.value}")
print(f" Recovery: {recovery.value}")
break
else:
print(f" Action {i+1}: No loop detected")
# Show stats
stats = detector.get_stats()
print(f"\n📊 Stats: {stats}")
def demo_observability():
"""Demonstrate observability hooks."""
print("\n" + "="*60)
print("OBSERVABILITY DEMO")
print("="*60)
hooks = ObservabilityHooks()
# Register event handlers
def on_stage_change(event):
print(f" 📍 Stage changed: {event.data}")
def on_tool_call(event):
print(f" 🔧 Tool called: {event.data}")
hooks.on(EventType.STAGE_ESCALATE, on_stage_change)
hooks.on(EventType.TOOL_CALL_END, on_tool_call)
# Simulate events
print("\n🎯 Simulating execution events...")
hooks.start_execution("session_123")
hooks.set_stage(EscalationStage.DIRECT)
hooks.emit(EventType.STEP_START, {"step": 1})
hooks.emit(EventType.TOOL_CALL_END, {"tool": "read_file", "path": "main.py"})
hooks.emit(EventType.STEP_END, {"step": 1})
hooks.emit(EventType.STAGE_ESCALATE, {"from": "DIRECT", "to": "HEURISTIC"})
hooks.set_stage(EscalationStage.HEURISTIC)
hooks.end_execution(1500.0)
# Show summary
summary = hooks.get_summary()
print(f"\n📊 Summary: {summary}")
def demo_stage_descriptions():
"""Show descriptions of each escalation stage."""
print("\n" + "="*60)
print("ESCALATION STAGES")
print("="*60)
trigger = EscalationTrigger()
stages = [
(EscalationStage.DIRECT, "Simple questions, no tools needed"),
(EscalationStage.HEURISTIC, "File references, code blocks"),
(EscalationStage.PLANNED, "Edit intent, test/build tasks"),
(EscalationStage.AUTONOMOUS, "Multi-step, refactoring tasks"),
]
for stage, example in stages:
desc = trigger.get_stage_description(stage)
print(f"\n🎯 Stage {stage.value}: {stage.name}")
print(f" Description: {desc}")
print(f" Example use: {example}")
async def demo_pipeline_analysis():
"""Demonstrate pipeline analysis."""
print("\n" + "="*60)
print("PIPELINE ANALYSIS DEMO")
print("="*60)
config = EscalationConfig(
max_steps=20,
max_time_seconds=60,
auto_escalate=True,
)
pipeline = EscalationPipeline(config=config)
prompts = [
"What is a Python decorator?",
"Read the file src/auth.py and explain it",
"Refactor the user authentication to use JWT tokens",
]
for prompt in prompts:
stage = pipeline.analyze(prompt)
print(f"\n📝 Prompt: {prompt[:50]}...")
print(f" Recommended Stage: {stage.name}")
def main():
"""Run all demos."""
print("\n" + "="*60)
print("PRAISONAI ESCALATION PIPELINE DEMO")
print("="*60)
print("\nThis demo shows the progressive escalation system that")
print("automatically adjusts execution complexity based on task signals.")
# Run demos
demo_stage_descriptions()
demo_signal_detection()
demo_doom_loop_detection()
demo_observability()
asyncio.run(demo_pipeline_analysis())
print("\n" + "="*60)
print("DEMO COMPLETE")
print("="*60)
print("\nKey takeaways:")
print("1. Simple tasks stay at DIRECT stage (no tools)")
print("2. File references trigger HEURISTIC stage")
print("3. Edit/test tasks trigger PLANNED stage")
print("4. Multi-step/refactor tasks trigger AUTONOMOUS stage")
print("5. Doom loop detection prevents infinite loops")
print("6. Observability hooks enable monitoring")
if __name__ == "__main__":
main()
@@ -5,7 +5,7 @@ This example demonstrates callback systems using PraisonAI's built-in
callback functionality for monitoring agent interactions and tool usage.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.display_callback import register_display_callback
from praisonaiagents.tools import internet_search
+7 -7
View File
@@ -1,7 +1,7 @@
import asyncio
import time
from typing import List, Dict
from praisonaiagents import Agent, Task, PraisonAIAgents, TaskOutput
from praisonaiagents import Agent, Task, Agents, TaskOutput
from praisonaiagents.main import (
display_error,
display_interaction,
@@ -98,7 +98,7 @@ sync_agent = Agent(
goal="Perform synchronous searches and return structured results",
backstory="Expert in sync operations and data organization",
tools=[sync_search_tool],
self_reflect=False,
reflection=False,
verbose=True,
markdown=True
)
@@ -109,7 +109,7 @@ async_agent = Agent(
goal="Perform asynchronous searches and return structured results",
backstory="Expert in async operations and data organization",
tools=[async_search_tool],
self_reflect=False,
reflection=False,
verbose=True,
markdown=True
)
@@ -160,7 +160,7 @@ workflow_async_task = Task(
def run_sync_example():
"""Run synchronous example"""
display_instruction("\nRunning Synchronous Example...", console)
agents = PraisonAIAgents(
agents = Agents(
agents=[sync_agent],
tasks=[sync_task],
verbose=1,
@@ -172,7 +172,7 @@ def run_sync_example():
async def run_async_example():
"""Run asynchronous example"""
display_instruction("\nRunning Asynchronous Example...", console)
agents = PraisonAIAgents(
agents = Agents(
agents=[async_agent],
tasks=[async_task],
verbose=1,
@@ -184,7 +184,7 @@ async def run_async_example():
async def run_mixed_example():
"""Run mixed sync/async example"""
display_instruction("\nRunning Mixed Sync/Async Example...", console)
agents = PraisonAIAgents(
agents = Agents(
agents=[sync_agent, async_agent],
tasks=[sync_task, async_task],
verbose=1,
@@ -196,7 +196,7 @@ async def run_mixed_example():
async def run_workflow_example():
"""Run workflow example with both sync and async tasks"""
display_instruction("\nRunning Workflow Example...", console)
agents = PraisonAIAgents(
agents = Agents(
agents=[sync_agent, async_agent],
tasks=[workflow_sync_task, workflow_async_task],
verbose=1,
@@ -1,7 +1,7 @@
import asyncio
import time
from typing import List, Dict
from praisonaiagents import Agent, Task, PraisonAIAgents, TaskOutput
from praisonaiagents import Agent, Task, Agents, TaskOutput
from duckduckgo_search import DDGS
from pydantic import BaseModel
@@ -53,7 +53,7 @@ async_agent = Agent(
goal="Perform fast parallel searches with structured results",
backstory="Expert in efficient data retrieval and parallel search operations",
tools=[async_search_tool],
self_reflect=False,
reflection=False,
verbose=True,
markdown=True
)
@@ -63,7 +63,7 @@ summary_agent = Agent(
role="Research Synthesizer",
goal="Create concise summaries from multiple search results",
backstory="Expert in analyzing and synthesizing information from multiple sources",
self_reflect=True,
reflection=True,
verbose=True,
markdown=True
)
@@ -114,8 +114,8 @@ async def run_parallel_tasks():
context=parallel_tasks
)
# Create a single PraisonAIAgents instance with both agents
agents = PraisonAIAgents(
# Create a single Agents instance with both agents
agents = Agents(
agents=[async_agent, summary_agent],
tasks=parallel_tasks + [summary_task],
verbose=1,
@@ -1,7 +1,7 @@
import asyncio
import time
from typing import List, Dict
from praisonaiagents import Agent, Task, PraisonAIAgents, TaskOutput
from praisonaiagents import Agent, Task, Agents, TaskOutput
from duckduckgo_search import DDGS
from pydantic import BaseModel
@@ -60,7 +60,7 @@ async_agent = Agent(
goal="Perform fast and efficient asynchronous searches with structured results",
backstory="Expert in parallel search operations and data retrieval",
tools=[async_search_tool],
self_reflect=False,
reflection=False,
verbose=True,
markdown=True
)
@@ -72,7 +72,7 @@ summary_agent = Agent(
backstory="""Expert in analyzing and synthesizing information from multiple sources.
Skilled at identifying patterns, trends, and connections between different topics.
Specializes in creating clear, structured summaries that highlight key insights.""",
self_reflect=True, # Enable self-reflection for better summary quality
reflection=True, # Enable self-reflection for better summary quality
verbose=True,
markdown=True
)
@@ -103,7 +103,7 @@ async_task = Task(
async def run_single_task():
"""Run single async task"""
print("\nRunning Single Async Task...")
agents = PraisonAIAgents(
agents = Agents(
agents=[async_agent],
tasks=[async_task],
verbose=1,
@@ -187,7 +187,7 @@ Present the summary in a clear, structured format with sections for findings, pa
)
# First run parallel search tasks
agents = PraisonAIAgents(
agents = Agents(
agents=[async_agent],
tasks=parallel_tasks, # Only run search tasks first
verbose=1,
@@ -212,7 +212,7 @@ Present the summary in a clear, structured format with sections for findings, pa
summary_task.context = completed_tasks
# Run summarization task with summary agent
summary_agents = PraisonAIAgents(
summary_agents = Agents(
agents=[summary_agent], # Use summary agent for synthesis
tasks=[summary_task],
verbose=1,
+2 -2
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import time
def get_environment_state():
@@ -86,7 +86,7 @@ feedback_task = Task(
)
# Create workflow manager
workflow = PraisonAIAgents(
workflow = Agents(
agents=[llm_caller, action_agent, feedback_agent],
tasks=[monitor_task, action_task, feedback_task],
process="workflow",
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import json
from e2b_code_interpreter import Sandbox
@@ -25,13 +25,13 @@ code_agent = Agent(
name="code_agent",
llm="gpt-5-nano",
backstory="Expert in writing Python scripts",
self_reflect=False
reflection=False
)
execution_agent = Agent(
name="execution_agent",
llm="gpt-5-nano",
backstory="Expert in executing Python scripts",
self_reflect=False,
reflection=False,
tools=[code_interpreter]
)
@@ -46,5 +46,5 @@ execution_agent_task = Task(
agent=execution_agent
)
agents = PraisonAIAgents(agents=[code_agent, execution_agent], tasks=[code_agent_task, execution_agent_task])
agents = Agents(agents=[code_agent, execution_agent], tasks=[code_agent_task, execution_agent_task])
agents.start()
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Create generator and evaluator agents
generator = Agent(
@@ -53,7 +53,7 @@ evaluate_task = Task(
)
# Create workflow manager
workflow = PraisonAIAgents(
workflow = Agents(
agents=[generator, evaluator],
tasks=[generate_task, evaluate_task],
process="workflow",
+5 -5
View File
@@ -1,7 +1,7 @@
from praisonaiagents import (
Agent,
Task,
PraisonAIAgents,
Agents,
error_logs,
register_display_callback,
sync_display_callbacks,
@@ -129,9 +129,9 @@ def main():
tools=[internet_search_tool],
llm="gpt-5-nano",
markdown=True,
reflect_llm="gpt-5-nano",
min_reflect=2,
max_reflect=4
)
writer = Agent(
@@ -190,7 +190,7 @@ def main():
)
# Create and run agents manager
agents = PraisonAIAgents(
agents = Agents(
agents=[researcher, writer],
tasks=[task1, task2, task3, task4],
verbose=True,
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from typing import List, Dict, Union
from duckduckgo_search import DDGS
from langchain_community.tools import YouTubeSearchTool
@@ -112,7 +112,7 @@ data_agent = Agent(
goal="Perform internet searches to collect relevant information.",
backstory="Expert in finding and organizing internet data from multiple sources.",
tools=[internet_search_tool, youtube_search_tool, wikipedia_search_tool],
self_reflect=False
reflection=False
)
# 3. Tasks
@@ -141,7 +141,7 @@ validate_task = Task(
)
# 4. Workflow
agents = PraisonAIAgents(
agents = Agents(
agents=[data_agent],
tasks=[collect_task, validate_task],
verbose=1,
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents, error_logs
from praisonaiagents import Agent, Task, Agents, error_logs
from duckduckgo_search import DDGS
def my_callback(output):
@@ -41,9 +41,9 @@ researcher = Agent(
tools=[internet_search_tool],
llm="gpt-5-nano",
markdown=True,
reflect_llm="gpt-5-nano",
min_reflect=2,
max_reflect=4
)
writer = Agent(
name="Writer",
@@ -99,7 +99,7 @@ task4 = Task(
)
# Create and run agents manager
agents = PraisonAIAgents(
agents = Agents(
agents=[researcher, writer],
tasks=[task1, task2, task3, task4],
verbose=False,
@@ -24,7 +24,7 @@ import sys
# Add the local development path to use the current implementation
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'src', 'praisonai-agents'))
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import python_tools, file_tools, shell_tools
from praisonaiagents.main import register_approval_callback
from praisonaiagents.approval import (
@@ -111,7 +111,7 @@ def main():
]
# Create and run process
process = PraisonAIAgents(
process = Agents(
agents=[agent],
tasks=tasks,
verbose=True
@@ -171,7 +171,7 @@ async def async_demo():
expected_output="Async execution result"
)
process = PraisonAIAgents(
process = Agents(
agents=[agent],
tasks=[task],
verbose=True
+3 -3
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from langchain_community.tools import YouTubeSearchTool
from langchain_community.utilities import WikipediaAPIWrapper
@@ -9,7 +9,7 @@ agent = Agent(
goal="Search for information from multiple sources",
backstory="I am an AI assistant that can search YouTube and Wikipedia.",
tools=[YouTubeSearchTool, WikipediaAPIWrapper],
self_reflect=False
reflection=False
)
# Create tasks to demonstrate both tools
@@ -21,7 +21,7 @@ task = Task(
)
# Create and start the workflow
agents = PraisonAIAgents(
agents = Agents(
agents=[agent],
tasks=[task],
verbose=True
+5 -5
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import logging
import os
@@ -25,7 +25,7 @@ def main():
# else:
# logger.info("Creating new memory database")
# Create task config (without memory config since it's moved to PraisonAIAgents)
# Create task config (without memory config since it's moved to Agents)
task_config = {}
# Create agents with different roles
@@ -100,8 +100,8 @@ def main():
agent=retriever
)
# Initialize PraisonAIAgents with memory configuration
agents = PraisonAIAgents(
# Initialize Agents with memory configuration
agents = Agents(
agents=[researcher, retriever],
tasks=[store_task, verify_task, query_task, query_both_task],
verbose=True, # Use same verbose level as memory
@@ -114,7 +114,7 @@ def main():
}
)
# agents = PraisonAIAgents(
# agents = Agents(
# agents=[researcher, retriever],
# tasks=[store_task, verify_task, query_task, query_both_task],
# verbose=True, # Use same verbose level as memory
+2 -2
View File
@@ -1,4 +1,4 @@
from praisonaiagents.agents.agents import Agent, Task, PraisonAIAgents
from praisonaiagents.agents.agents import Agent, Task, Agents
from praisonaiagents.tools import duckduckgo
# Test facts
@@ -54,7 +54,7 @@ blog_task = Task(
agent=blog_agent
)
agents = PraisonAIAgents(
agents = Agents(
agents=[fact_agent, research_agent, blog_agent],
tasks=[fact_task, research_task, research_task2, research_task3, research_task4, blog_task],
memory=True
+4 -4
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Create Vision Analysis Agent
vision_agent = Agent(
@@ -8,7 +8,7 @@ vision_agent = Agent(
backstory="""You are an expert in computer vision and image analysis.
You excel at describing images, detecting objects, and understanding visual content.""",
llm="gpt-5-nano",
self_reflect=False
reflection=False
)
# 1. Task with Image URL
@@ -42,8 +42,8 @@ task3 = Task(
images=["video.mp4"]
)
# Create PraisonAIAgents instance
agents = PraisonAIAgents(
# Create Agents instance
agents = Agents(
agents=[vision_agent],
tasks=[task1, task2, task3],
process="sequential",
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import time
def get_time_check():
@@ -93,7 +93,7 @@ synthesize_task = Task(
)
# Create workflow manager
workflow = PraisonAIAgents(
workflow = Agents(
agents=[router, worker1, worker2, worker3, synthesizer],
tasks=[router_task, worker1_task, worker2_task, worker3_task, synthesize_task],
process="workflow",
+2 -2
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from datetime import datetime
import asyncio
@@ -75,7 +75,7 @@ aggregate_task = Task(
async def main():
# Create workflow manager
workflow = PraisonAIAgents(
workflow = Agents(
agents=[agent1, agent2, agent3, aggregator],
tasks=[task1, task2, task3, aggregate_task],
process="workflow"
+2 -2
View File
@@ -1,6 +1,6 @@
from praisonaiagents.agent import Agent
from praisonaiagents.task import Task
from praisonaiagents.agents import PraisonAIAgents
from praisonaiagents.agents import Agents
from typing import List, Dict
import time
@@ -64,7 +64,7 @@ final_task = Task(
)
# Create the workflow manager
workflow = PraisonAIAgents(
workflow = Agents(
agents=[agent1, agent2, agent3],
tasks=[initial_task, analysis_task, final_task],
process="workflow", # Use workflow process type
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents, Tools
from praisonaiagents import Agent, Task, Agents, Tools
from pydantic import BaseModel
class AnalysisReport(BaseModel):
@@ -15,7 +15,7 @@ researcher = Agent(
verbose=True,
llm="gpt-5-nano",
tools=[Tools.internet_search],
self_reflect=False
reflection=False
)
# Create an analyst agent
@@ -26,7 +26,7 @@ analyst = Agent(
backstory="Senior data analyst with expertise in pattern recognition",
verbose=True,
llm="gpt-5-nano",
self_reflect=False
reflection=False
)
# Define structured tasks
@@ -46,7 +46,7 @@ analysis_task = Task(
)
# Initialize and run agents
agents = PraisonAIAgents(
agents = Agents(
agents=[researcher, analyst],
tasks=[research_task, analysis_task],
process="sequential",
@@ -33,7 +33,7 @@ def get_structured_analysis(query: str, verbose: bool = True) -> AnalysisReport:
goal="Analyze topics and provide structured reports",
backstory="Expert at gathering information and providing structured analysis",
verbose=verbose,
self_reflect=True, # Enable self-reflection for better quality
reflection=True, # Enable self-reflection for better quality
markdown=True,
llm="gpt-5-nano"
)
+3 -3
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import os
import requests
from typing import Any, Dict, List, Optional
@@ -94,7 +94,7 @@ agent = Agent(
goal="Search for information about 'AI Agents Framework'",
backstory="I am an AI assistant that can search GitHub.",
tools=[EXASearchTool],
self_reflect=False
reflection=False
)
# Create tasks to demonstrate both tools
@@ -106,7 +106,7 @@ task = Task(
)
# Create and start the workflow
agents = PraisonAIAgents(
agents = Agents(
agents=[agent],
tasks=[task],
verbose=True
+3 -3
View File
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import get_article, get_news_sources, get_articles_from_source, get_trending_topics
# Create Wikipedia agent
@@ -8,7 +8,7 @@ news_agent = Agent(
goal="Collect and analyze news articles from various sources.",
backstory="Expert in news gathering and content analysis.",
tools=[get_article, get_news_sources, get_articles_from_source, get_trending_topics],
self_reflect=False
reflection=False
)
@@ -22,7 +22,7 @@ news_task = Task(
# Run agent
agents = PraisonAIAgents(
agents = Agents(
agents=[news_agent],
tasks=[news_task],
process="sequential"
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from typing import List, Dict
from duckduckgo_search import DDGS
@@ -35,7 +35,7 @@ data_agent = Agent(
goal="Perform internet searches to collect relevant information.",
backstory="Expert in finding and organising internet data.",
tools=[internet_search_tool],
self_reflect=False
reflection=False
)
# 3. Tasks
@@ -64,7 +64,7 @@ validate_task = Task(
)
# 4. AI Agents Workflow
agents = PraisonAIAgents(
agents = Agents(
agents=[data_agent],
tasks=[collect_task, validate_task],
verbose=1,
@@ -1,4 +1,4 @@
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import random
from typing import List, Dict, Union
import json
@@ -158,7 +158,7 @@ data_agent = Agent(
goal="Collect and validate data about individuals",
backstory="Expert in gathering and validating demographic data",
tools=[random_data_of_individuals],
self_reflect=False
reflection=False
)
process_agent = Agent(
@@ -167,7 +167,7 @@ process_agent = Agent(
goal="Process and categorize individual data",
backstory="Expert in data analysis and categorization",
tools=[process_data_of_individuals],
self_reflect=False
reflection=False
)
# Modify tasks to use Pydantic models
@@ -224,8 +224,8 @@ process_task = Task(
output_json=ProcessedPerson
)
# Create PraisonAIAgents instance with workflow process
workflow = PraisonAIAgents(
# Create Agents instance with workflow process
workflow = Agents(
agents=[data_agent, process_agent],
tasks=[collect_task, validate_task, process_task],
verbose=1,
@@ -12,7 +12,7 @@ Features demonstrated:
- Quality assurance workflows
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.task import TaskOutput
from typing import Tuple, Any
import re
@@ -125,7 +125,7 @@ email_task = Task(
description="Write a business proposal for a new software project, including contact information",
expected_output="Professional business proposal with contact email addresses",
agent=email_agent,
guardrail=email_format_guardrail,
guardrails=email_format_guardrail,
max_retries=3
)
@@ -135,7 +135,7 @@ content_task = Task(
description="Write an analysis of cloud computing benefits for small businesses",
expected_output="Comprehensive analysis of cloud computing benefits (minimum 50 words)",
agent=content_agent,
guardrail=word_count_guardrail,
guardrails=word_count_guardrail,
max_retries=3
)
@@ -145,7 +145,7 @@ business_task = Task(
description="Provide advice on handling difficult client relationships",
expected_output="Professional advice maintaining appropriate business tone",
agent=business_agent,
guardrail=professional_tone_guardrail,
guardrails=professional_tone_guardrail,
max_retries=3
)
@@ -155,7 +155,7 @@ research_task = Task(
description="Analyze the impact of artificial intelligence on job markets",
expected_output="Research-backed analysis with citations and evidence",
agent=research_agent,
guardrail=factual_accuracy_guardrail,
guardrails=factual_accuracy_guardrail,
max_retries=3
)
@@ -176,12 +176,12 @@ llm_guardrail_task = Task(
agent=llm_guardrail_agent,
# LLM-based guardrail using natural language validation
guardrail="Validate that this marketing content is: 1) Factually accurate with no false claims, 2) Compliant with advertising standards (no misleading statements), 3) Engaging and professional in tone, 4) Includes a clear call-to-action. If any criteria are not met, explain what needs to be improved.",
guardrails="Validate that this marketing content is: 1) Factually accurate with no false claims, 2) Compliant with advertising standards (no misleading statements), 3) Engaging and professional in tone, 4) Includes a clear call-to-action. If any criteria are not met, explain what needs to be improved.",
max_retries=2
)
# Execute tasks with guardrails
agents = PraisonAIAgents(
agents = Agents(
agents=[email_agent, content_agent, business_agent, research_agent, llm_guardrail_agent],
tasks=[email_task, content_task, business_task, research_task, llm_guardrail_task],
verbose=True
@@ -5,7 +5,7 @@ This example demonstrates production guardrail patterns using PraisonAI's
built-in validation and safety mechanisms for secure agent operations.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import internet_search
print("=== Production Guardrails Patterns Example ===\n")
@@ -38,7 +38,7 @@ production_agent = Agent(
goal="Generate safe, compliant content for production use",
backstory="Production-ready agent with built-in safety and compliance checks",
tools=[internet_search],
guardrail=content_guardrail,
guardrails=content_guardrail,
max_retries=3,
verbose=True
)
@@ -5,7 +5,7 @@ This example demonstrates an advanced system that dynamically creates agents and
based on user inputs, including conditional logic, custom configurations, and file output.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import duckduckgo
import os
from typing import Dict, List
@@ -40,7 +40,7 @@ class DynamicAgentSystem:
goal=f"Conduct {inputs['depth']} research on {inputs['topic']} in {inputs['language']}",
backstory=f"Multilingual expert specializing in {inputs['depth']} analysis",
tools=[duckduckgo],
self_reflect=inputs['depth'] == 'detailed',
reflection=inputs['depth'] == 'detailed',
llm=self.llm_config
)
agents.append(research_agent)
@@ -137,7 +137,7 @@ class DynamicAgentSystem:
# Run the system
print(f"\n🚀 Starting {process} analysis for '{inputs['topic']}'...")
praison_agents = PraisonAIAgents(
praison_agents = Agents(
agents=agents,
tasks=tasks,
process=process,
@@ -6,7 +6,7 @@ to create flexible agent configurations that can be pre-configured via environme
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Set via environment or use default
default_topic = os.getenv("RESEARCH_TOPIC", "AI trends")
@@ -46,7 +46,7 @@ print(f" - Max Retries: {max_retries}")
print("\n" + "="*50 + "\n")
# Run agents
agents = PraisonAIAgents(agents=[agent], tasks=[task])
agents = Agents(agents=[agent], tasks=[task])
result = agents.start()
# Save to environment-specified location if provided
@@ -5,7 +5,7 @@ This example shows how to use multiple user inputs to create a more sophisticate
agent system with tools, multiple agents, and context passing between tasks.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import duckduckgo
# Get multiple inputs
@@ -19,7 +19,7 @@ search_agent = Agent(
goal=f"Find {num_results} relevant results about {topic}",
backstory="Expert in internet research and data collection",
tools=[duckduckgo],
self_reflect=False
reflection=False
)
# Create analysis agent
@@ -47,7 +47,7 @@ analyze_task = Task(
)
# Run sequential process
agents = PraisonAIAgents(
agents = Agents(
agents=[search_agent, analysis_agent],
tasks=[search_task, analyze_task],
process="sequential"
+2 -2
View File
@@ -5,7 +5,7 @@ This example demonstrates how to use basic user input to create dynamic agents a
The user is prompted for a search query, and the agent searches for information about it.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Get user input
user_query = input("What would you like to search for? ")
@@ -26,5 +26,5 @@ task = Task(
)
# Run
agents = PraisonAIAgents(agents=[agent], tasks=[task])
agents = Agents(agents=[agent], tasks=[task])
agents.start()
+2 -2
View File
@@ -10,7 +10,7 @@ To run this example:
"""
import streamlit as st
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import duckduckgo
# Set page configuration
@@ -125,7 +125,7 @@ if st.button("🚀 Submit", type="primary", use_container_width=True):
)
# Run agents
agents = PraisonAIAgents(
agents = Agents(
agents=[agent],
tasks=[task],
process=process_type
@@ -5,7 +5,7 @@ This example demonstrates graph memory capabilities with PraisonAI agents
for knowledge graph construction and relationship-aware memory retrieval.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import internet_search
print("=== Advanced Graph Memory Integration Example ===\n")
@@ -59,7 +59,7 @@ query_task = Task(
)
# Run with graph memory integration
agents_system = PraisonAIAgents(
agents_system = Agents(
agents=[knowledge_agent],
tasks=[build_task, query_task],
memory=True,
@@ -5,7 +5,7 @@ This example demonstrates memory search optimization using PraisonAI's
built-in memory capabilities with semantic search and quality filtering.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import internet_search
print("=== Advanced Memory Search and Optimization Example ===\n")
@@ -60,7 +60,7 @@ search_task = Task(
)
# Run with memory optimization
agents_system = PraisonAIAgents(
agents_system = Agents(
agents=[research_agent],
tasks=[build_memory_task, search_task],
memory=True,
@@ -20,7 +20,7 @@ Prerequisites:
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
def main():
"""Demonstrate Gemini embedding usage"""
@@ -82,7 +82,7 @@ def main():
# Configure with Gemini embeddings
# Option 1: Using stable text-embedding-004
agents = PraisonAIAgents(
agents = Agents(
agents=[researcher, retriever],
tasks=[store_task, retrieve_task],
verbose=True,
@@ -98,7 +98,7 @@ def main():
)
# Alternative: Using experimental model with advanced features
# agents = PraisonAIAgents(
# agents = Agents(
# agents=[researcher, retriever],
# tasks=[store_task, retrieve_task],
# verbose=True,
+2 -2
View File
@@ -16,7 +16,7 @@ Setup:
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
def main():
# Example with Neo4j (uncomment and configure as needed)
@@ -150,7 +150,7 @@ def main():
)
# Run the multi-agent system with graph memory
agents_system = PraisonAIAgents(
agents_system = Agents(
agents=[researcher],
tasks=[build_knowledge_task, query_knowledge_task, expand_knowledge_task],
verbose=1,
@@ -34,9 +34,7 @@ agent = Agent(
llm=llm_config, # Pass the detailed configuration
verbose=True, # Enable detailed output
markdown=True, # Format responses in markdown
self_reflect=True, # Enable self-reflection
max_reflect=3, # Maximum reflection iterations
min_reflect=1 # Minimum reflection iterations
reflection=True # Enable self-reflection
)
# Test the agent
@@ -4,7 +4,7 @@ from praisonaiagents import Agent
agent = Agent(
instructions="You are a helpful assistant",
llm="gemini/gemini-1.5-flash-8b",
self_reflect=True,
reflection=True,
verbose=True
)
@@ -3,7 +3,7 @@ from praisonaiagents import Agent
agent = Agent(
instructions="You are a helpful assistant",
llm="gemini/gemini-1.5-flash-8b",
self_reflect=True,
reflection=True,
verbose=True
)
@@ -20,7 +20,7 @@ Features demonstrated:
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import mongodb_tools
# Ensure OpenAI API key is set
@@ -190,7 +190,7 @@ def main():
print("🚀 Starting Comprehensive MongoDB Business System...")
print("=" * 60)
business_system = PraisonAIAgents(
business_system = Agents(
agents=[data_manager, knowledge_curator, business_analyst, customer_service],
tasks=business_tasks,
memory=True,
@@ -19,7 +19,7 @@ Features demonstrated:
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Ensure OpenAI API key is set
if not os.environ.get("OPENAI_API_KEY"):
@@ -124,7 +124,7 @@ def main():
print("🚀 Starting MongoDB Knowledge Management System...")
print("=" * 60)
knowledge_system = PraisonAIAgents(
knowledge_system = Agents(
agents=[research_agent, knowledge_agent],
tasks=knowledge_tasks,
memory=True,
@@ -19,7 +19,7 @@ Features demonstrated:
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
# Ensure OpenAI API key is set
if not os.environ.get("OPENAI_API_KEY"):
@@ -91,7 +91,7 @@ def main():
print("🚀 Starting MongoDB Memory Research System...")
print("=" * 60)
research_system = PraisonAIAgents(
research_system = Agents(
agents=[research_agent],
tasks=research_tasks,
memory=True,
@@ -19,7 +19,7 @@ Features demonstrated:
"""
import os
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import mongodb_tools
# Ensure OpenAI API key is set
@@ -113,7 +113,7 @@ def main():
print("🚀 Starting MongoDB Tools Demo System...")
print("=" * 60)
mongodb_system = PraisonAIAgents(
mongodb_system = Agents(
agents=[db_agent, analysis_agent],
tasks=mongodb_tasks,
verbose=True
@@ -10,7 +10,7 @@ Demonstrates performance monitoring in a multi-agent workflow:
Shows how to monitor complex multi-agent systems.
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.telemetry import (
monitor_function, track_api_call, get_function_stats,
analyze_function_flow, generate_comprehensive_report
@@ -101,7 +101,7 @@ def main():
with track_api_call("multi_agent_workflow"):
print("\n🚀 Starting multi-agent workflow...")
workflow = PraisonAIAgents(
workflow = Agents(
agents=[researcher, analyst, writer],
tasks=[research_task, analysis_task, report_task],
process="sequential",
@@ -11,7 +11,7 @@ Shows how to monitor complex organizational agent structures.
"""
import time
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.telemetry import (
monitor_function, track_api_call, get_function_stats,
visualize_execution_flow, generate_comprehensive_report
@@ -13,7 +13,7 @@ Shows how to create a comprehensive performance monitoring solution.
import time
import json
from datetime import datetime, timedelta
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.telemetry import (
monitor_function, track_api_call, performance_monitor,
get_performance_report, get_function_stats, get_api_stats,
@@ -139,7 +139,7 @@ def simulate_complex_workflow():
# Execute workflow
with track_api_call("complex_workflow_execution"):
workflow = PraisonAIAgents(
workflow = Agents(
agents=[planner, executor, reviewer],
tasks=[planning_task, execution_task, review_task],
process="sequential",
@@ -21,7 +21,7 @@ Features Demonstrated:
import time
import random
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import duckduckgo
from praisonaiagents.telemetry import (
monitor_function, track_api_call, performance_monitor,
@@ -213,7 +213,7 @@ def execute_monitored_task(agent, task_description):
agent=agent
)
agents_workflow = PraisonAIAgents(
agents_workflow = Agents(
agents=[agent],
tasks=[task],
verbose=False
@@ -12,7 +12,7 @@ Features demonstrated:
- State-based workflow management
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import duckduckgo
import random
@@ -203,7 +203,7 @@ for request in sample_requests:
)
# Execute the workflow with conditional routing
workflow_agents = PraisonAIAgents(
workflow_agents = Agents(
agents=[
intake_agent, specialist_agent, review_agent,
coordinator_agent
@@ -12,7 +12,7 @@ Features demonstrated:
- Process-level orchestration
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import duckduckgo
# Create Manager Agent
@@ -83,7 +83,7 @@ coordination_task = Task(
)
# Create Hierarchical Process
agents = PraisonAIAgents(
agents = Agents(
agents=[manager, researcher, data_analyst, writer],
tasks=[research_task, analysis_task, writing_task, coordination_task],
process="hierarchical", # Hierarchical process type
@@ -87,7 +87,7 @@ def main():
and technology. You provide concise, accurate summaries of important news.""",
tools=[search_tool],
verbose=True,
self_reflect=False # Disable reflection for faster execution
reflection=False # Disable reflection for faster execution
)
# Define the task
@@ -12,7 +12,7 @@ Features demonstrated:
- Session-specific memory and knowledge
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.session import Session
from praisonaiagents.tools import duckduckgo
import tempfile
@@ -62,7 +62,7 @@ research_task1 = Task(
)
# Create agents with session
agents_session1 = PraisonAIAgents(
agents_session1 = Agents(
agents=[research_agent],
tasks=[research_task1],
session=session1,
@@ -102,7 +102,7 @@ analysis_task = Task(
context_variables={"previous_research": str(result1)}
)
agents_session2 = PraisonAIAgents(
agents_session2 = Agents(
agents=[analysis_agent],
tasks=[analysis_task],
session=session2,
@@ -153,7 +153,7 @@ synthesis_task = Task(
}
)
agents_recovery = PraisonAIAgents(
agents_recovery = Agents(
agents=[synthesis_agent],
tasks=[synthesis_task],
session=recovery_session,
@@ -204,7 +204,7 @@ review_task = Task(
}
)
agents_reviewer = PraisonAIAgents(
agents_reviewer = Agents(
agents=[review_agent],
tasks=[review_task],
session=reviewer_session,
@@ -10,7 +10,7 @@ Run this example:
python 01_basic_state_management.py
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import json
from typing import Dict, Any
@@ -150,7 +150,7 @@ task4 = Task(
)
# Create workflow (global variable for state access in tools)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[project_manager, developer, finance_manager],
tasks=[task1, task2, task3, task4],
verbose=True,
@@ -10,7 +10,7 @@ Run this example:
python 02_state_in_tool_functions.py
"""
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents import Agent, Task, Agents
import time
import json
from typing import Dict, Any
@@ -273,7 +273,7 @@ task6 = Task(
)
# Create workflow (global variable for state access in tools)
workflow = PraisonAIAgents(
workflow = Agents(
agents=[progress_tracker, data_processor, error_handler, config_manager],
tasks=[task1, task2, task3, task4, task5, task6],
verbose=True,
Loaded 100 of 359 files, more files were not shown because too many files have changed in this diff. Show more