Metadata-Version: 2.4
Name: wickedailabs-agentframework
Version: 0.1.0a1
Summary: Scaffolding framework over the Microsoft Agent Framework for Python.
Project-URL: Homepage, https://github.com/WickedAILabs/wickedailabs-pyagentframework
Project-URL: Repository, https://github.com/WickedAILabs/wickedailabs-pyagentframework
Project-URL: Issues, https://github.com/WickedAILabs/wickedailabs-pyagentframework/issues
Project-URL: Changelog, https://github.com/WickedAILabs/wickedailabs-pyagentframework/blob/main/CHANGELOG.md
Author: WickedAILabs
License-Expression: GPL-3.0-or-later
License-File: LICENSE
Keywords: agent,ai,anthropic,azure,llm,microsoft-agent-framework,openai
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: agent-framework<2.0,>=1.0
Requires-Dist: azure-identity<2.0,>=1.17
Requires-Dist: httpx<1.0,>=0.27
Requires-Dist: opentelemetry-api<2.0,>=1.27
Requires-Dist: opentelemetry-sdk<2.0,>=1.27
Requires-Dist: pydantic-settings<3.0,>=2.4
Requires-Dist: pydantic<3.0,>=2.7
Requires-Dist: tenacity<10.0,>=9.0
Provides-Extra: all
Requires-Dist: agent-framework-azure-ai>=1.0.0rc6; extra == 'all'
Requires-Dist: agent-framework-copilotstudio>=1.0.0b260409; extra == 'all'
Requires-Dist: agent-framework-foundry<2.0,>=1.0; extra == 'all'
Requires-Dist: agent-framework-ollama>=1.0.0b260409; extra == 'all'
Requires-Dist: pyyaml<7.0,>=6.0; extra == 'all'
Provides-Extra: azure-ai
Requires-Dist: agent-framework-azure-ai>=1.0.0rc6; extra == 'azure-ai'
Provides-Extra: copilot-studio
Requires-Dist: agent-framework-copilotstudio>=1.0.0b260409; extra == 'copilot-studio'
Provides-Extra: foundry
Requires-Dist: agent-framework-foundry<2.0,>=1.0; extra == 'foundry'
Provides-Extra: ollama
Requires-Dist: agent-framework-ollama>=1.0.0b260409; extra == 'ollama'
Provides-Extra: yaml
Requires-Dist: pyyaml<7.0,>=6.0; extra == 'yaml'
Description-Content-Type: text/markdown

# wickedailabs-agentframework

Scaffolding framework over the [Microsoft Agent Framework for Python](https://pypi.org/project/agent-framework/).

`wickedailabs-agentframework` owns all infrastructure — dependency injection, settings, provider
wiring, tool discovery, runners (simple / HITL / workflow / orchestration), session storage,
middleware, OpenTelemetry tracing and metrics. Your agent projects contain only domain logic:
`@agent` classes, `@agent_tool` methods, and `@service` implementations.

## Install

This package is distributed via **GitHub Releases** (not PyPI). Pick the approach that fits
your project:

**From a release wheel:**

```bash
pip install https://github.com/WickedAILabs/wickedailabs-pyagentframework/releases/download/v0.1.0a1/wickedailabs_agentframework-0.1.0a1-py3-none-any.whl
```

**From a git tag (subdirectory-install of this package):**

```bash
pip install "git+https://github.com/WickedAILabs/wickedailabs-pyagentframework.git@v0.1.0a1#subdirectory=src/wickedailabs_agentframework"
```

**In `pyproject.toml`:**

```toml
[project]
dependencies = [
  "wickedailabs-agentframework @ https://github.com/WickedAILabs/wickedailabs-pyagentframework/releases/download/v0.1.0a1/wickedailabs_agentframework-0.1.0a1-py3-none-any.whl",
]
```

Optional extras apply the same way — e.g.
`"wickedailabs-agentframework[foundry] @ <url>"`. Available extras: `foundry`, `azure-ai`,
`copilot-studio`, `ollama`, `yaml`, `all`.

## Minimal usage

```python
import asyncio
import my_agent_project
from wickedailabs_agentframework import (
    AgentAI, AgentClient, AgentContext,
    add_agent_framework, build_settings,
    agent, agent_instructions, uses_tools,
)
from wickedailabs_agentframework.internal.runners import (
    SimpleRunner, HitlRunner, WorkflowRunner, OrchestrationRunner,
)


@agent
@agent_instructions("You are a helpful weather advisor.")
@uses_tools("get_current_weather")
class WeatherAdvisorAgent:
    async def run(self, message: str, ctx: AgentContext) -> str:
        return await AgentAI.ask(self, message)


async def main() -> None:
    settings = build_settings()
    container = add_agent_framework(
        settings,
        runners=[SimpleRunner(), HitlRunner(), WorkflowRunner(), OrchestrationRunner()],
        caller_package=my_agent_project,
    )
    client = container.resolve(AgentClient)
    result = await client.run("WeatherAdvisor", "What's the forecast in Sydney?")
    print(result.response if result.success else f"[{result.error_code}] {result.error}")


asyncio.run(main())
```

Configuration lives in `appsettings.json` (or `.toml` / `.yaml`), with environment-variable
overrides via the `AgentFramework__Provider__Type=...` convention.

## Links

- [GitHub repo](https://github.com/WickedAILabs/wickedailabs-pyagentframework) — full spec
  (`spec.md`), sample `projects/weather_advisor/`, and contribution guide.
- [Releases](https://github.com/WickedAILabs/wickedailabs-pyagentframework/releases) — download
  wheels + sdists.
- [CHANGELOG](https://github.com/WickedAILabs/wickedailabs-pyagentframework/blob/main/CHANGELOG.md)
- [Issues](https://github.com/WickedAILabs/wickedailabs-pyagentframework/issues)

## Per-agent tool options

Agents can opt into provider-hosted or external tools via config:

```jsonc
"BudgetAdvisor": {
  "Runner": "simple",
  "Instructions": "You reconcile budget variances.",
  "InstructionsFile": "prompts/budget.txt",           // alternative to Instructions
  "McpServers": [
    { "Name": "reports", "Url": "http://localhost:8000/mcp" }
  ],
  "CodeInterpreter": true,
  "FileSearch": { "VectorStoreIds": ["vs_policies"] }
}
```

At call time, attach local files via `FileAttachment.from_path` / `from_bytes` / `from_uri`.
Capability enforcement at startup rejects combinations the provider can't support (HITL on
Anthropic, MCP on Copilot Studio, etc.). MCP URLs and `from_uri` both require `http`/`https`.

## License

GPL-3.0-or-later — see the
[LICENSE](https://github.com/WickedAILabs/wickedailabs-pyagentframework/blob/main/LICENSE)
file in the repository.
