agenticaiframework 1.0.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,36 @@
1
+ """
2
+ AgenticAI Python Package
3
+ Fully functional implementation of the Agentic Framework as described.
4
+ """
5
+
6
+ from .agents import Agent, AgentManager
7
+ from .prompts import Prompt, PromptManager
8
+ from .processes import Process
9
+ from .tasks import Task, TaskManager
10
+ from .mcp_tools import MCPTool, MCPToolManager
11
+ from .monitoring import MonitoringSystem
12
+ from .guardrails import Guardrail, GuardrailManager
13
+ from .evaluation import EvaluationSystem
14
+ from .knowledge import KnowledgeRetriever
15
+ from .llms import LLMManager
16
+ from .communication import CommunicationManager
17
+ from .memory import MemoryManager
18
+ from .hub import Hub
19
+ from .configurations import ConfigurationManager
20
+
21
+ __all__ = [
22
+ "Agent", "AgentManager",
23
+ "Prompt", "PromptManager",
24
+ "Process",
25
+ "Task", "TaskManager",
26
+ "MCPTool", "MCPToolManager",
27
+ "MonitoringSystem",
28
+ "Guardrail", "GuardrailManager",
29
+ "EvaluationSystem",
30
+ "KnowledgeRetriever",
31
+ "LLMManager",
32
+ "CommunicationManager",
33
+ "MemoryManager",
34
+ "Hub",
35
+ "ConfigurationManager"
36
+ ]
@@ -0,0 +1,62 @@
1
+ import uuid
2
+ import time
3
+ from typing import Any, Dict, List, Optional, Callable
4
+
5
+
6
+ class Agent:
7
+ def __init__(self, name: str, role: str, capabilities: List[str], config: Dict[str, Any]):
8
+ self.id = str(uuid.uuid4())
9
+ self.name = name
10
+ self.role = role
11
+ self.capabilities = capabilities
12
+ self.config = config
13
+ self.status = "initialized"
14
+ self.memory = []
15
+ self.version = "1.0.0"
16
+
17
+ def start(self):
18
+ self.status = "running"
19
+ self._log(f"Agent {self.name} started.")
20
+
21
+ def pause(self):
22
+ self.status = "paused"
23
+ self._log(f"Agent {self.name} paused.")
24
+
25
+ def resume(self):
26
+ self.status = "running"
27
+ self._log(f"Agent {self.name} resumed.")
28
+
29
+ def stop(self):
30
+ self.status = "stopped"
31
+ self._log(f"Agent {self.name} stopped.")
32
+
33
+ def execute_task(self, task_callable: Callable, *args, **kwargs):
34
+ self._log(f"Executing task with args: {args}, kwargs: {kwargs}")
35
+ return task_callable(*args, **kwargs)
36
+
37
+ def _log(self, message: str):
38
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [Agent:{self.name}] {message}")
39
+
40
+
41
+ class AgentManager:
42
+ def __init__(self):
43
+ self.agents: Dict[str, Agent] = {}
44
+
45
+ def register_agent(self, agent: Agent):
46
+ self.agents[agent.id] = agent
47
+ print(f"Registered agent {agent.name} with ID {agent.id}")
48
+
49
+ def get_agent(self, agent_id: str) -> Optional[Agent]:
50
+ return self.agents.get(agent_id)
51
+
52
+ def list_agents(self) -> List[Agent]:
53
+ return list(self.agents.values())
54
+
55
+ def remove_agent(self, agent_id: str):
56
+ if agent_id in self.agents:
57
+ del self.agents[agent_id]
58
+ print(f"Removed agent with ID {agent_id}")
59
+
60
+ def broadcast(self, message: str):
61
+ for agent in self.agents.values():
62
+ agent._log(f"Broadcast message: {message}")
@@ -0,0 +1,27 @@
1
+ from typing import Dict, Any, Callable
2
+ import time
3
+
4
+
5
+ class CommunicationManager:
6
+ def __init__(self):
7
+ self.protocols: Dict[str, Callable[[Any], Any]] = {}
8
+
9
+ def register_protocol(self, name: str, handler_fn: Callable[[Any], Any]):
10
+ self.protocols[name] = handler_fn
11
+ self._log(f"Registered communication protocol '{name}'")
12
+
13
+ def send(self, protocol: str, data: Any):
14
+ if protocol in self.protocols:
15
+ try:
16
+ return self.protocols[protocol](data)
17
+ except Exception as e:
18
+ self._log(f"Error sending data via '{protocol}': {e}")
19
+ else:
20
+ self._log(f"Protocol '{protocol}' not found")
21
+ return None
22
+
23
+ def list_protocols(self):
24
+ return list(self.protocols.keys())
25
+
26
+ def _log(self, message: str):
27
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [CommunicationManager] {message}")
@@ -0,0 +1,32 @@
1
+ from typing import Dict, Any
2
+ import time
3
+
4
+
5
+ class ConfigurationManager:
6
+ def __init__(self):
7
+ self.configurations: Dict[str, Dict[str, Any]] = {}
8
+
9
+ def set_config(self, component: str, config: Dict[str, Any]):
10
+ self.configurations[component] = config
11
+ self._log(f"Configuration set for '{component}'")
12
+
13
+ def get_config(self, component: str) -> Dict[str, Any]:
14
+ return self.configurations.get(component, {})
15
+
16
+ def update_config(self, component: str, updates: Dict[str, Any]):
17
+ if component in self.configurations:
18
+ self.configurations[component].update(updates)
19
+ self._log(f"Configuration updated for '{component}'")
20
+ else:
21
+ self.set_config(component, updates)
22
+
23
+ def remove_config(self, component: str):
24
+ if component in self.configurations:
25
+ del self.configurations[component]
26
+ self._log(f"Configuration removed for '{component}'")
27
+
28
+ def list_components(self):
29
+ return list(self.configurations.keys())
30
+
31
+ def _log(self, message: str):
32
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [ConfigurationManager] {message}")
@@ -0,0 +1,29 @@
1
+ from typing import Dict, Any, List, Callable
2
+ import time
3
+
4
+
5
+ class EvaluationSystem:
6
+ def __init__(self):
7
+ self.criteria: Dict[str, Callable[[Any], bool]] = {}
8
+ self.results: List[Dict[str, Any]] = []
9
+
10
+ def define_criterion(self, name: str, evaluation_fn: Callable[[Any], bool]):
11
+ self.criteria[name] = evaluation_fn
12
+ self._log(f"Defined evaluation criterion '{name}'")
13
+
14
+ def evaluate(self, data: Any) -> Dict[str, bool]:
15
+ evaluation_result = {}
16
+ for name, fn in self.criteria.items():
17
+ try:
18
+ evaluation_result[name] = fn(data)
19
+ except Exception as e:
20
+ evaluation_result[name] = False
21
+ self._log(f"Error evaluating criterion '{name}': {e}")
22
+ self.results.append({"data": data, "result": evaluation_result, "timestamp": time.time()})
23
+ return evaluation_result
24
+
25
+ def get_results(self) -> List[Dict[str, Any]]:
26
+ return self.results
27
+
28
+ def _log(self, message: str):
29
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [EvaluationSystem] {message}")
@@ -0,0 +1,45 @@
1
+ from typing import Dict, Any, List, Callable
2
+ import uuid
3
+ import time
4
+
5
+
6
+ class Guardrail:
7
+ def __init__(self, name: str, validation_fn: Callable[[Any], bool], policy: Dict[str, Any] = None):
8
+ self.id = str(uuid.uuid4())
9
+ self.name = name
10
+ self.validation_fn = validation_fn
11
+ self.policy = policy or {}
12
+ self.version = "1.0.0"
13
+
14
+ def validate(self, data: Any) -> bool:
15
+ return self.validation_fn(data)
16
+
17
+
18
+ class GuardrailManager:
19
+ def __init__(self):
20
+ self.guardrails: Dict[str, Guardrail] = {}
21
+
22
+ def register_guardrail(self, guardrail: Guardrail):
23
+ self.guardrails[guardrail.id] = guardrail
24
+ self._log(f"Registered guardrail '{guardrail.name}' with ID {guardrail.id}")
25
+
26
+ def get_guardrail(self, guardrail_id: str) -> Guardrail:
27
+ return self.guardrails.get(guardrail_id)
28
+
29
+ def list_guardrails(self) -> List[Guardrail]:
30
+ return list(self.guardrails.values())
31
+
32
+ def remove_guardrail(self, guardrail_id: str):
33
+ if guardrail_id in self.guardrails:
34
+ del self.guardrails[guardrail_id]
35
+ self._log(f"Removed guardrail with ID {guardrail_id}")
36
+
37
+ def enforce_guardrails(self, data: Any) -> bool:
38
+ for guardrail in self.guardrails.values():
39
+ if not guardrail.validate(data):
40
+ self._log(f"Guardrail '{guardrail.name}' failed validation.")
41
+ return False
42
+ return True
43
+
44
+ def _log(self, message: str):
45
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [GuardrailManager] {message}")
@@ -0,0 +1,36 @@
1
+ from typing import Dict, Any, List
2
+ import time
3
+
4
+
5
+ class Hub:
6
+ def __init__(self):
7
+ self.agents: Dict[str, Any] = {}
8
+ self.prompts: Dict[str, Any] = {}
9
+ self.tools: Dict[str, Any] = {}
10
+ self.guardrails: Dict[str, Any] = {}
11
+ self.llms: Dict[str, Any] = {}
12
+
13
+ def register(self, category: str, name: str, item: Any):
14
+ if hasattr(self, category):
15
+ getattr(self, category)[name] = item
16
+ self._log(f"Registered {category[:-1]} '{name}'")
17
+ else:
18
+ self._log(f"Invalid category '{category}'")
19
+
20
+ def get(self, category: str, name: str) -> Any:
21
+ if hasattr(self, category):
22
+ return getattr(self, category).get(name)
23
+ return None
24
+
25
+ def list_items(self, category: str) -> List[str]:
26
+ if hasattr(self, category):
27
+ return list(getattr(self, category).keys())
28
+ return []
29
+
30
+ def remove(self, category: str, name: str):
31
+ if hasattr(self, category) and name in getattr(self, category):
32
+ del getattr(self, category)[name]
33
+ self._log(f"Removed {category[:-1]} '{name}'")
34
+
35
+ def _log(self, message: str):
36
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [Hub] {message}")
@@ -0,0 +1,36 @@
1
+ from typing import List, Dict, Any, Callable
2
+ import time
3
+
4
+
5
+ class KnowledgeRetriever:
6
+ def __init__(self):
7
+ self.sources: Dict[str, Callable[[str], List[Dict[str, Any]]]] = {}
8
+ self.cache: Dict[str, Any] = {}
9
+
10
+ def register_source(self, name: str, retrieval_fn: Callable[[str], List[Dict[str, Any]]]):
11
+ self.sources[name] = retrieval_fn
12
+ self._log(f"Registered knowledge source '{name}'")
13
+
14
+ def retrieve(self, query: str, use_cache: bool = True) -> List[Dict[str, Any]]:
15
+ if use_cache and query in self.cache:
16
+ self._log(f"Cache hit for query '{query}'")
17
+ return self.cache[query]
18
+
19
+ results = []
20
+ for name, fn in self.sources.items():
21
+ try:
22
+ source_results = fn(query)
23
+ results.extend(source_results)
24
+ self._log(f"Retrieved {len(source_results)} items from source '{name}'")
25
+ except Exception as e:
26
+ self._log(f"Error retrieving from source '{name}': {e}")
27
+
28
+ self.cache[query] = results
29
+ return results
30
+
31
+ def clear_cache(self):
32
+ self.cache.clear()
33
+ self._log("Knowledge cache cleared")
34
+
35
+ def _log(self, message: str):
36
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [KnowledgeRetriever] {message}")
@@ -0,0 +1,35 @@
1
+ from typing import Dict, Any, Callable, Optional
2
+ import time
3
+
4
+
5
+ class LLMManager:
6
+ def __init__(self):
7
+ self.models: Dict[str, Callable[[str, Dict[str, Any]], str]] = {}
8
+ self.active_model: Optional[str] = None
9
+
10
+ def register_model(self, name: str, inference_fn: Callable[[str, Dict[str, Any]], str]):
11
+ self.models[name] = inference_fn
12
+ self._log(f"Registered LLM model '{name}'")
13
+
14
+ def set_active_model(self, name: str):
15
+ if name in self.models:
16
+ self.active_model = name
17
+ self._log(f"Active LLM model set to '{name}'")
18
+ else:
19
+ self._log(f"Model '{name}' not found")
20
+
21
+ def generate(self, prompt: str, **kwargs) -> Optional[str]:
22
+ if not self.active_model:
23
+ self._log("No active model set")
24
+ return None
25
+ try:
26
+ return self.models[self.active_model](prompt, kwargs)
27
+ except Exception as e:
28
+ self._log(f"Error generating with model '{self.active_model}': {e}")
29
+ return None
30
+
31
+ def list_models(self):
32
+ return list(self.models.keys())
33
+
34
+ def _log(self, message: str):
35
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [LLMManager] {message}")
@@ -0,0 +1,48 @@
1
+ from typing import Any, Dict, List, Callable, Optional
2
+ import uuid
3
+ import time
4
+
5
+
6
+ class MCPTool:
7
+ def __init__(self, name: str, capability: str, execute_fn: Callable, config: Dict[str, Any] = None):
8
+ self.id = str(uuid.uuid4())
9
+ self.name = name
10
+ self.capability = capability
11
+ self.execute_fn = execute_fn
12
+ self.config = config or {}
13
+ self.version = "1.0.0"
14
+
15
+ def execute(self, *args, **kwargs):
16
+ return self.execute_fn(*args, **kwargs)
17
+
18
+
19
+ class MCPToolManager:
20
+ def __init__(self):
21
+ self.tools: Dict[str, MCPTool] = {}
22
+
23
+ def register_tool(self, tool: MCPTool):
24
+ self.tools[tool.id] = tool
25
+ self._log(f"Registered MCP tool '{tool.name}' with ID {tool.id}")
26
+
27
+ def get_tool(self, tool_id: str) -> Optional[MCPTool]:
28
+ return self.tools.get(tool_id)
29
+
30
+ def list_tools(self) -> List[MCPTool]:
31
+ return list(self.tools.values())
32
+
33
+ def remove_tool(self, tool_id: str):
34
+ if tool_id in self.tools:
35
+ del self.tools[tool_id]
36
+ self._log(f"Removed MCP tool with ID {tool_id}")
37
+
38
+ def execute_tool(self, tool_id: str, *args, **kwargs):
39
+ tool = self.get_tool(tool_id)
40
+ if tool:
41
+ self._log(f"Executing MCP tool '{tool.name}'")
42
+ return tool.execute(*args, **kwargs)
43
+ else:
44
+ self._log(f"Tool with ID {tool_id} not found")
45
+ return None
46
+
47
+ def _log(self, message: str):
48
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [MCPToolManager] {message}")
@@ -0,0 +1,45 @@
1
+ from typing import Dict, Any, List
2
+ import time
3
+
4
+
5
+ class MemoryManager:
6
+ def __init__(self):
7
+ self.short_term: Dict[str, Any] = {}
8
+ self.long_term: Dict[str, Any] = {}
9
+ self.external: Dict[str, Any] = {}
10
+
11
+ def store_short_term(self, key: str, value: Any):
12
+ self.short_term[key] = value
13
+ self._log(f"Stored short-term memory: {key}")
14
+
15
+ def store_long_term(self, key: str, value: Any):
16
+ self.long_term[key] = value
17
+ self._log(f"Stored long-term memory: {key}")
18
+
19
+ def store_external(self, key: str, value: Any):
20
+ self.external[key] = value
21
+ self._log(f"Stored external memory: {key}")
22
+
23
+ def retrieve(self, key: str) -> Any:
24
+ if key in self.short_term:
25
+ return self.short_term[key]
26
+ if key in self.long_term:
27
+ return self.long_term[key]
28
+ if key in self.external:
29
+ return self.external[key]
30
+ return None
31
+
32
+ def clear_short_term(self):
33
+ self.short_term.clear()
34
+ self._log("Cleared short-term memory")
35
+
36
+ def clear_long_term(self):
37
+ self.long_term.clear()
38
+ self._log("Cleared long-term memory")
39
+
40
+ def clear_external(self):
41
+ self.external.clear()
42
+ self._log("Cleared external memory")
43
+
44
+ def _log(self, message: str):
45
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [MemoryManager] {message}")
@@ -0,0 +1,35 @@
1
+ from typing import Dict, Any, List
2
+ import time
3
+
4
+
5
+ class MonitoringSystem:
6
+ def __init__(self):
7
+ self.metrics: Dict[str, Any] = {}
8
+ self.logs: List[str] = []
9
+ self.events: List[Dict[str, Any]] = []
10
+
11
+ def record_metric(self, name: str, value: Any):
12
+ self.metrics[name] = value
13
+ self._log(f"Metric recorded: {name} = {value}")
14
+
15
+ def get_metric(self, name: str) -> Any:
16
+ return self.metrics.get(name)
17
+
18
+ def log_event(self, event_type: str, details: Dict[str, Any]):
19
+ event = {"type": event_type, "details": details, "timestamp": time.time()}
20
+ self.events.append(event)
21
+ self._log(f"Event logged: {event_type} - {details}")
22
+
23
+ def get_events(self) -> List[Dict[str, Any]]:
24
+ return self.events
25
+
26
+ def log_message(self, message: str):
27
+ timestamped_message = f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {message}"
28
+ self.logs.append(timestamped_message)
29
+ print(timestamped_message)
30
+
31
+ def get_logs(self) -> List[str]:
32
+ return self.logs
33
+
34
+ def _log(self, message: str):
35
+ self.log_message(f"[MonitoringSystem] {message}")
@@ -0,0 +1,41 @@
1
+ from typing import Callable, List, Dict, Any
2
+ import time
3
+
4
+
5
+ class Process:
6
+ def __init__(self, name: str, strategy: str = "sequential"):
7
+ self.name = name
8
+ self.strategy = strategy # sequential, parallel, hybrid
9
+ self.tasks: List[Callable] = []
10
+ self.status = "initialized"
11
+
12
+ def add_task(self, task_callable: Callable, *args, **kwargs):
13
+ self.tasks.append((task_callable, args, kwargs))
14
+ self._log(f"Added task {task_callable.__name__}")
15
+
16
+ def execute(self):
17
+ self.status = "running"
18
+ self._log(f"Executing process '{self.name}' with strategy '{self.strategy}'")
19
+ results = []
20
+ if self.strategy == "sequential":
21
+ for task_callable, args, kwargs in self.tasks:
22
+ results.append(task_callable(*args, **kwargs))
23
+ elif self.strategy == "parallel":
24
+ from concurrent.futures import ThreadPoolExecutor
25
+ with ThreadPoolExecutor() as executor:
26
+ futures = [executor.submit(task_callable, *args, **kwargs) for task_callable, args, kwargs in self.tasks]
27
+ results = [f.result() for f in futures]
28
+ elif self.strategy == "hybrid":
29
+ # Simple hybrid: first half sequential, second half parallel
30
+ half = len(self.tasks) // 2
31
+ for task_callable, args, kwargs in self.tasks[:half]:
32
+ results.append(task_callable(*args, **kwargs))
33
+ from concurrent.futures import ThreadPoolExecutor
34
+ with ThreadPoolExecutor() as executor:
35
+ futures = [executor.submit(task_callable, *args, **kwargs) for task_callable, args, kwargs in self.tasks[half:]]
36
+ results.extend([f.result() for f in futures])
37
+ self.status = "completed"
38
+ return results
39
+
40
+ def _log(self, message: str):
41
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [Process:{self.name}] {message}")
@@ -0,0 +1,44 @@
1
+ from typing import Any, Dict, List
2
+ import uuid
3
+ import time
4
+
5
+
6
+ class Prompt:
7
+ def __init__(self, template: str, metadata: Dict[str, Any] = None):
8
+ self.id = str(uuid.uuid4())
9
+ self.template = template
10
+ self.metadata = metadata or {}
11
+ self.version = "1.0.0"
12
+
13
+ def render(self, **kwargs) -> str:
14
+ return self.template.format(**kwargs)
15
+
16
+
17
+ class PromptManager:
18
+ def __init__(self):
19
+ self.prompts: Dict[str, Prompt] = {}
20
+
21
+ def register_prompt(self, prompt: Prompt):
22
+ self.prompts[prompt.id] = prompt
23
+ self._log(f"Registered prompt with ID {prompt.id}")
24
+
25
+ def get_prompt(self, prompt_id: str) -> Prompt:
26
+ return self.prompts.get(prompt_id)
27
+
28
+ def list_prompts(self) -> List[Prompt]:
29
+ return list(self.prompts.values())
30
+
31
+ def remove_prompt(self, prompt_id: str):
32
+ if prompt_id in self.prompts:
33
+ del self.prompts[prompt_id]
34
+ self._log(f"Removed prompt with ID {prompt_id}")
35
+
36
+ def optimize_prompt(self, prompt_id: str, optimization_fn):
37
+ prompt = self.get_prompt(prompt_id)
38
+ if prompt:
39
+ optimized_template = optimization_fn(prompt.template)
40
+ prompt.template = optimized_template
41
+ self._log(f"Optimized prompt {prompt_id}")
42
+
43
+ def _log(self, message: str):
44
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [PromptManager] {message}")
@@ -0,0 +1,59 @@
1
+ from typing import Any, Dict, List, Callable, Optional
2
+ import uuid
3
+ import time
4
+
5
+
6
+ class Task:
7
+ def __init__(self, name: str, objective: str, executor: Callable, inputs: Dict[str, Any] = None):
8
+ self.id = str(uuid.uuid4())
9
+ self.name = name
10
+ self.objective = objective
11
+ self.executor = executor
12
+ self.inputs = inputs or {}
13
+ self.status = "pending"
14
+ self.result = None
15
+ self.version = "1.0.0"
16
+
17
+ def run(self):
18
+ self.status = "running"
19
+ self._log(f"Running task '{self.name}'")
20
+ try:
21
+ self.result = self.executor(**self.inputs)
22
+ self.status = "completed"
23
+ self._log(f"Task '{self.name}' completed successfully")
24
+ except Exception as e:
25
+ self.status = "failed"
26
+ self._log(f"Task '{self.name}' failed: {e}")
27
+ return self.result
28
+
29
+ def _log(self, message: str):
30
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [Task:{self.name}] {message}")
31
+
32
+
33
+ class TaskManager:
34
+ def __init__(self):
35
+ self.tasks: Dict[str, Task] = {}
36
+
37
+ def register_task(self, task: Task):
38
+ self.tasks[task.id] = task
39
+ self._log(f"Registered task '{task.name}' with ID {task.id}")
40
+
41
+ def get_task(self, task_id: str) -> Optional[Task]:
42
+ return self.tasks.get(task_id)
43
+
44
+ def list_tasks(self) -> List[Task]:
45
+ return list(self.tasks.values())
46
+
47
+ def remove_task(self, task_id: str):
48
+ if task_id in self.tasks:
49
+ del self.tasks[task_id]
50
+ self._log(f"Removed task with ID {task_id}")
51
+
52
+ def run_all(self):
53
+ results = {}
54
+ for task_id, task in self.tasks.items():
55
+ results[task_id] = task.run()
56
+ return results
57
+
58
+ def _log(self, message: str):
59
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [TaskManager] {message}")
@@ -0,0 +1,69 @@
1
+ Metadata-Version: 2.4
2
+ Name: agenticaiframework
3
+ Version: 1.0.7
4
+ Summary: AgenticAI - A Python SDK for building agentic applications with advanced orchestration, monitoring, and multimodal capabilities.
5
+ Home-page: https://github.com/isathish/AgenticAI
6
+ Author: Sathishkumar Nagarajan
7
+ Author-email: mail@sathishkumarnagarajan.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.7
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Dynamic: author
15
+ Dynamic: author-email
16
+ Dynamic: classifier
17
+ Dynamic: description
18
+ Dynamic: description-content-type
19
+ Dynamic: home-page
20
+ Dynamic: license-file
21
+ Dynamic: requires-python
22
+ Dynamic: summary
23
+
24
+ # AgenticAI
25
+
26
+ AgenticAI is a Python SDK for building **agentic applications** with advanced orchestration, monitoring, multimodal capabilities, and enterprise-grade scalability.
27
+
28
+ ## Features
29
+
30
+ - **Python-based SDK** for building agentic applications
31
+ - **Lightweight, high-performance agents** for efficient execution
32
+ - **Built-in security** mechanisms
33
+ - **Integrated monitoring and observability**
34
+ - **Fine-grained configurable parameters**
35
+ - **Single and multiple agent support**
36
+ - **Flexible process orchestration** (sequential, parallel, hybrid)
37
+ - **Extensible architecture** with hubs for agents, prompts, tools, guardrails, and LLMs
38
+ - **Comprehensive memory management**
39
+ - **Multiple communication protocols** (HTTP, SSE, STDIO, WebSockets, gRPC, MQ)
40
+ - **Configurable guardrails, evaluation, and knowledge retrieval**
41
+ - **Scalable and modular design**
42
+ - **Multimodal capabilities**: text, images, voice, video
43
+ - **Cross-platform deployment**: cloud, on-premise, edge
44
+ - **Extensive integration support**
45
+ - **Security and compliance ready**
46
+
47
+ ## Installation
48
+
49
+ ```bash
50
+ pip install agenticaiframework
51
+ ```
52
+
53
+ ## Quick Start
54
+
55
+ ```python
56
+ from agenticaiframework import Agent, AgentManager
57
+
58
+ # Create an agent
59
+ agent = Agent(name="ExampleAgent", role="assistant", capabilities=["text"], config={})
60
+
61
+ # Manage agents
62
+ manager = AgentManager()
63
+ manager.register_agent(agent)
64
+ agent.start()
65
+ ```
66
+
67
+ ## License
68
+
69
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,20 @@
1
+ agenticaiframework/__init__.py,sha256=Bk5u9D1FnUkZXtxvkQudCNQTSrcYfNGcjAq8NVzzcp8,1026
2
+ agenticaiframework/agents.py,sha256=gSdEzgUeme9jrKZVaLrBwSM5S--DTVsR3GMNt3XSBc0,1896
3
+ agenticaiframework/communication.py,sha256=aWhXWCGu5vSq4MeSm2AoVYKEnM5IUqqux99YTzZRGWI,906
4
+ agenticaiframework/configurations.py,sha256=BFWyMWSc8dWrXGGE9twntQZrTyn2L_jUiH1MeSQgdVM,1155
5
+ agenticaiframework/evaluation.py,sha256=aDsCmcYq84RLAXfWmydt6q0-GGyuYniO0L4A9AdE6qE,1090
6
+ agenticaiframework/guardrails.py,sha256=JhUqYU-sn2R2ycjbkVHkuv9DHtfTICnKnWJhgPy9ZZE,1554
7
+ agenticaiframework/hub.py,sha256=ezwChjQlJofNFlsuGwxp2Cz_iM2CIn-vVGMQfscUg4Y,1231
8
+ agenticaiframework/knowledge.py,sha256=Lqw-c4BJpnwz0C_GCID7J2MyzkNKr9b7i94n1TIqboY,1301
9
+ agenticaiframework/llms.py,sha256=BlW386KDKqtc7iyeUmrQR_-zpIkn2aIKIr6-AK4oJrY,1217
10
+ agenticaiframework/mcp_tools.py,sha256=VSXbepC-YVYF6cHi33KDiGx9_vm5zepmQYF5h1r-kyU,1533
11
+ agenticaiframework/memory.py,sha256=U9t2rBreFmjRnvrQjJL0gV2VSJSmsptWd3iE7MNmlag,1381
12
+ agenticaiframework/monitoring.py,sha256=1xE0HrSUhTcV48nu8M0tPssOEbIX7DpMlCxPBlafM9I,1132
13
+ agenticaiframework/processes.py,sha256=YnNuwadl5mZyWITcPoZxYUQcH9q58ocb3kn-GE2kY-U,1914
14
+ agenticaiframework/prompts.py,sha256=f0Biar0GvQ5bXB2jqUkSy-5FG468qBU6jJEVLAsLXRs,1398
15
+ agenticaiframework/tasks.py,sha256=hJKrFYJNlqkyGwl6qVYjXfZ7aeBRC9xGKEaWobF_KA4,1850
16
+ agenticaiframework-1.0.7.dist-info/licenses/LICENSE,sha256=fKYjpVuxF75tWQhzLkN90tDG4knIjDZKUMiPJbKWxIw,1079
17
+ agenticaiframework-1.0.7.dist-info/METADATA,sha256=Y_N4dwH7up_ZO3KNlgDDe5i_nBXwzTgodn9lj2RGaGU,2237
18
+ agenticaiframework-1.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
19
+ agenticaiframework-1.0.7.dist-info/top_level.txt,sha256=q30EgNdX3TPF02Aq6mVwI0LUBpgfH12X7pwBIwm0mPo,19
20
+ agenticaiframework-1.0.7.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sathishkumar Nagarajan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ agenticaiframework