minions-py 0.2.0__tar.gz

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,464 @@
1
+ Metadata-Version: 2.4
2
+ Name: minions-py
3
+ Version: 0.2.0
4
+ Summary: Reusable provider-specific AI workflow agents.
5
+ Project-URL: Repository, https://github.com/is-leeroy-jenkins/minions
6
+ Requires-Python: >=3.11
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: anthropic<2,>=1.4
9
+ Requires-Dist: google-adk<3,>=2.8
10
+ Requires-Dist: mistralai[agents]<3,>=2.9
11
+ Requires-Dist: openai-agents<1,>=0.22
12
+ Requires-Dist: xai-sdk<2,>=1.19
13
+
14
+ ###### minions
15
+
16
+ <p align="center">
17
+ <img src="resources/images/minions-project.png" alt="Minions" width="900">
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="#supported-providers">Providers</a> ·
22
+ <a href="#installation">Installation</a> ·
23
+ <a href="#concrete-minions">Minions</a> ·
24
+ <a href="#native-provider-tools">Native Tools</a> ·
25
+ <a href="https://github.com/is-leeroy-jenkins/minions/blob/main/resources/user-guide.md">User Guide</a> ·
26
+ <a href="#development">Development</a>
27
+ </p>
28
+
29
+ ___
30
+
31
+ [![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-0078FC?style=for-the-badge&logo=github)](https://is-leeroy-jenkins.github.io/minions/)
32
+
33
+
34
+ Provider-native AI agents organized as reusable workflow-specific `Minion` classes.
35
+
36
+ ![](https://github.com/is-leeroy-jenkins/minions/blob/main/resources/images/minions-workflow.png)
37
+
38
+ ___
39
+
40
+ Minions keeps each workflow inside one provider pathway. Tool schemas and tool functions are never
41
+ translated or mixed between providers.
42
+
43
+ ## Supported Providers
44
+
45
+ | Module | Provider SDK | `Minion` implementation | Execution methods |
46
+ |-------------------|------------------------------|------------------------------------------|------------------------------|
47
+ | `minions.gpt` | OpenAI Agents SDK | Inherits `agents.Agent` | `run`, `run_async`, `stream` |
48
+ | `minions.gemini` | Google Agent Development Kit | Inherits `google.adk.Agent` | `run`, `run_async`, `stream` |
49
+ | `minions.grok` | xAI SDK | Wraps synchronous and asynchronous chats | `run`, `run_async`, `stream` |
50
+ | `minions.claude` | Anthropic SDK | Wraps native tool runners | `run`, `run_async`, `stream` |
51
+ | `minions.mistral` | Mistral SDK | Wraps a native remote agent | `run`, `run_async`, `stream` |
52
+
53
+ ## Installation
54
+
55
+ ```powershell
56
+ python -m venv .venv
57
+ .\.venv\Scripts\Activate.ps1
58
+ python -m pip install --upgrade pip
59
+ python -m pip install git+https://github.com/is-leeroy-jenkins/minions.git
60
+ ```
61
+
62
+ Editable installation for development:
63
+
64
+ ```powershell
65
+ git clone https://github.com/is-leeroy-jenkins/minions.git
66
+ Set-Location minions
67
+ python -m pip install -e .
68
+ ```
69
+
70
+ ## Authentication
71
+
72
+ Set only the key required by the selected provider.
73
+
74
+ | Provider | Environment variable |
75
+ |----------|----------------------|
76
+ | OpenAI | `OPENAI_API_KEY` |
77
+ | Gemini | `GOOGLE_API_KEY` |
78
+ | Grok | `XAI_API_KEY` |
79
+ | Claude | `ANTHROPIC_API_KEY` |
80
+ | Mistral | `MISTRAL_API_KEY` |
81
+
82
+
83
+
84
+ ![](https://github.com/is-leeroy-jenkins/minions/blob/main/resources/images/minions-architecture.png)
85
+
86
+ ___
87
+
88
+ ## Concrete Minions
89
+
90
+ The same concrete class family is exported from every provider module.
91
+
92
+ | Guro workflow category | Minion class |
93
+ |------------------------------------------|-------------------------|
94
+ | Research / Academic | `ResearchMinion` |
95
+ | Writing / Administrative | `WritingMinion` |
96
+ | Compliance / Legal / Budget | `ComplianceMinion` |
97
+ | Business / Finance / Marketing | `BusinessMinion` |
98
+ | Software Engineering / Software Engineer | `CodingMinion` |
99
+ | Data Analytics | `DataMinion` |
100
+ | Data Governance | `GovernanceMinion` |
101
+ | Instruction / Training / Planning | `PlanningMinion` |
102
+ | Image Generation | `ImageGenerationMinion` |
103
+ | Image Analysis | `ImageAnalysisMinion` |
104
+ | Image Editing | `ImageEditingMinion` |
105
+ | Translation API | `TranslationMinion` |
106
+ | Transcription API | `TranscriptionMinion` |
107
+ | Speech API | `SpeechMinion` |
108
+
109
+
110
+
111
+ ## Quick Start
112
+
113
+ ### OpenAI
114
+
115
+ ```python
116
+ from fonky.gpt import tools
117
+ from guro import instructions
118
+ from minions.gpt import DataMinion
119
+
120
+
121
+ minion = DataMinion(
122
+ model='gpt-5.6-sol',
123
+ instructions=instructions.get( 'DATA_SCIENTIST' ),
124
+ tools=[ tools.fetch_wikipedia, tools.load_csv ],
125
+ )
126
+ result = minion.run( 'Analyze the available evidence.' )
127
+ ```
128
+
129
+ ### Gemini
130
+
131
+ ```python
132
+ from fonky.gemini import tools
133
+ from guro import instructions
134
+ from minions.gemini import ResearchMinion
135
+
136
+
137
+ minion = ResearchMinion(
138
+ model='gemini-2.5-flash',
139
+ instructions=instructions.get( 'DEEP_RESEARCH_AGENT' ),
140
+ tools=[ tools.fetch_wikipedia ],
141
+ )
142
+ result = minion.run( 'Research the requested topic.' )
143
+ ```
144
+
145
+ ### Grok
146
+
147
+ Grok requires matching provider schemas and local callables only for client-executed function
148
+ tools. xAI-hosted tools do not require entries in `functions`.
149
+
150
+ ```python
151
+ from fonky.grok import tools
152
+ from guro import instructions
153
+ from minions.grok import DataMinion
154
+
155
+
156
+ minion = DataMinion(
157
+ model='grok-4.5',
158
+ instructions=instructions.get( 'DATA_SCIENTIST' ),
159
+ tools=[ tools.wikipedia_fetch_tool, tools.csv_tool ],
160
+ functions=[ tools.fetch_wikipedia, tools.load_csv ],
161
+ )
162
+ result = minion.run( 'Analyze the available evidence.' )
163
+ ```
164
+
165
+ ### Claude
166
+
167
+ ```python
168
+ from fonky.claude import tools
169
+ from guro import instructions
170
+ from minions.claude import ComplianceMinion
171
+
172
+
173
+ minion = ComplianceMinion(
174
+ model='claude-sonnet-4-6',
175
+ instructions=instructions.get( 'COMPLIANCE_ANALYST' ),
176
+ tools=[ tools.load_pdf, tools.fetch_web_page ],
177
+ )
178
+ result = minion.run( 'Evaluate the supplied material.' )
179
+ ```
180
+
181
+ ### Mistral
182
+
183
+ Mistral requires matching provider schemas and local callables for local function tools.
184
+ Provider-hosted tools do not require a local callable.
185
+
186
+ ```python
187
+ from fonky.mistral import tools
188
+ from guro import instructions
189
+ from minions.mistral import CodingMinion
190
+
191
+
192
+ minion = CodingMinion(
193
+ model='mistral-medium-latest',
194
+ instructions=instructions.get( 'SENIOR_ENGINEER' ),
195
+ tools=[ tools.github_tool ],
196
+ functions=[ tools.load_github ],
197
+ )
198
+ result = minion.run( 'Review the repository.' )
199
+ ```
200
+
201
+ ## Tool-Free Execution
202
+
203
+ Tools are optional for every provider.
204
+
205
+ ```python
206
+ from guro import instructions
207
+ from minions.gpt import WritingMinion
208
+
209
+
210
+ minion = WritingMinion(
211
+ model='gpt-5.6-sol',
212
+ instructions=instructions.get( 'TECHNICAL_WRITER' ),
213
+ )
214
+ result = minion.run( 'Draft the requested documentation.' )
215
+ ```
216
+
217
+ ## Constructor Reference
218
+
219
+ ### Common arguments
220
+
221
+ | Argument | Type | Default | Description |
222
+ |---|---|---:|---|
223
+ | `model` | `str` | Required | Provider model identifier |
224
+ | `instructions` | `str` | Required | System instructions, including Guro instruction text |
225
+ | `tools` | Provider-specific sequence or `None` | `None` | Optional provider-native tools |
226
+ | `max_turns` | `int` | `10` | Maximum model turns for one execution |
227
+ | `name` | `str` or `None` | `None` | Overrides the concrete class display name |
228
+
229
+ ### Provider-specific arguments
230
+
231
+ | Provider | Argument | Type | Default | Description |
232
+ |---|---|---|---:|---|
233
+ | Grok | `functions` | `Sequence[ToolFunction]` or `None` | `None` | Local callables matching Grok tool schemas |
234
+ | Grok | `api_key` | `str` or `None` | `None` | Overrides `XAI_API_KEY` |
235
+ | Claude | `max_tokens` | `int` | `4096` | Maximum generated tokens |
236
+ | Claude | `api_key` | `str` or `None` | `None` | Overrides `ANTHROPIC_API_KEY` |
237
+ | Mistral | `functions` | `Sequence[ToolFunction]` or `None` | `None` | Local callables matching function-tool schemas |
238
+ | Mistral | `api_key` | `str` or `None` | `None` | Overrides `MISTRAL_API_KEY` |
239
+
240
+ ## Execution Reference
241
+
242
+ | Provider | `run` return | `run_async` return | `stream` return |
243
+ |---|---|---|---|
244
+ | OpenAI | `RunResult` | `RunResult` | `RunResultStreaming` |
245
+ | Gemini | Final `Event` | Final `Event` | `AsyncIterator[Event]` |
246
+ | Grok | `Response` | `Response` | `AsyncIterator[tuple[Response, Chunk]]` |
247
+ | Claude | `BetaMessage` | `BetaMessage` | `BetaAsyncStreamingToolRunner[object]` |
248
+ | Mistral | `ChatCompletionResponse` | `ChatCompletionResponse` | `Iterator[CompletionEvent]` |
249
+
250
+ Asynchronous execution:
251
+
252
+ ```python
253
+ result = await minion.run_async( 'Complete the workflow.' )
254
+ ```
255
+
256
+ Streaming execution:
257
+
258
+ ```python
259
+ stream = minion.stream( 'Complete the workflow.' )
260
+ ```
261
+
262
+ OpenAI and Claude return provider-managed streaming objects. Gemini and Grok return asynchronous
263
+ iterators. Mistral returns a synchronous iterator. Each pathway continues its tool loop through the
264
+ final provider response.
265
+
266
+ ## Tool Contracts
267
+
268
+ | Provider | Accepted tool contract |
269
+ |---|---|
270
+ | OpenAI | OpenAI Agents SDK `Tool` objects |
271
+ | Gemini | Callable, `BaseTool`, or `BaseToolset` |
272
+ | Grok | xAI `chat_pb2.Tool`; local function schemas require identically named callables |
273
+ | Claude | `ClaudeTool`: Anthropic `BetaFunctionTool` or `BetaToolUnionParam` |
274
+ | Mistral | `CreateAgentRequestTool` schemas; local function tools require identically named callables |
275
+
276
+ Grok and Mistral reject duplicate, missing, or extra local function names before execution.
277
+ Provider-hosted tools execute on the provider and therefore do not require local callables.
278
+
279
+ ## Native Provider Tools
280
+
281
+ | Provider | Native tools exported by the provider module |
282
+ |---|---|
283
+ | OpenAI | `WebSearchTool`, `FileSearchTool`, `CodeInterpreterTool`, `ImageGenerationTool` |
284
+ | Gemini | `google_search`, `url_context`, `VertexAiSearchTool` |
285
+ | Grok | `web_search`, `code_execution`, `collections_search`, `image_generation` |
286
+ | Claude | Web search, web fetch, and code execution through `BetaToolUnionParam` definitions |
287
+ | Mistral | `WebSearchTool`, `CodeInterpreterTool`, `ImageGenerationTool`, `DocumentLibraryTool` |
288
+
289
+ Native tools remain optional and provider-specific. Do not pass a native tool from one provider to
290
+ another provider's Minion.
291
+
292
+ ### OpenAI native tools
293
+
294
+ ```python
295
+ from minions.gpt import FileSearchTool, ResearchMinion, WebSearchTool
296
+
297
+
298
+ minion = ResearchMinion(
299
+ model='gpt-5.6-sol',
300
+ instructions='Research the question using current and indexed sources.',
301
+ tools=[
302
+ WebSearchTool( ),
303
+ FileSearchTool( vector_store_ids=[ 'vs_...' ] ),
304
+ ],
305
+ )
306
+ ```
307
+
308
+ `CodeInterpreterTool` and `ImageGenerationTool` accept their native OpenAI tool configuration
309
+ objects. Minions passes those configurations to the OpenAI Agents SDK unchanged.
310
+
311
+ ### Gemini native tools
312
+
313
+ ```python
314
+ from minions.gemini import ResearchMinion, VertexAiSearchTool
315
+
316
+
317
+ minion = ResearchMinion(
318
+ model='gemini-2.5-flash',
319
+ instructions='Research the configured enterprise data store.',
320
+ tools=[
321
+ VertexAiSearchTool(
322
+ data_store_id=(
323
+ 'projects/project/locations/global/collections/default_collection/'
324
+ 'dataStores/store'
325
+ ),
326
+ ),
327
+ ],
328
+ )
329
+ ```
330
+
331
+ `google_search` and `url_context` are native ADK tool objects and can be imported directly from
332
+ `minions.gemini`. Supported tool combinations depend on the selected Gemini model and ADK rules.
333
+
334
+ ### Grok native tools
335
+
336
+ ```python
337
+ from minions.grok import DataMinion, code_execution, collections_search, web_search
338
+
339
+
340
+ minion = DataMinion(
341
+ model='grok-4.5',
342
+ instructions='Research and analyze the requested subject.',
343
+ tools=[
344
+ web_search( ),
345
+ code_execution( ),
346
+ collections_search( collection_ids=[ 'collection-id' ] ),
347
+ ],
348
+ )
349
+ ```
350
+
351
+ The `image_generation` constructor is also exported from `minions.grok`. xAI executes these tools
352
+ on its servers; `functions` remains reserved for client-executed function schemas.
353
+
354
+ ### Claude native tools
355
+
356
+ ```python
357
+ from minions.claude import ResearchMinion
358
+
359
+
360
+ minion = ResearchMinion(
361
+ model='claude-sonnet-4-6',
362
+ instructions='Research and analyze the requested subject.',
363
+ tools=[
364
+ { 'type': 'web_search_20260318', 'name': 'web_search' },
365
+ { 'type': 'web_fetch_20260318', 'name': 'web_fetch' },
366
+ { 'type': 'code_execution_20260521', 'name': 'code_execution' },
367
+ ],
368
+ )
369
+ ```
370
+
371
+ Anthropic executes these server tools. Local tools decorated with `anthropic.beta_tool` can appear
372
+ in the same `tools` sequence and are executed by Anthropic's native tool runner.
373
+
374
+ ### Mistral native tools
375
+
376
+ ```python
377
+ from minions.mistral import (
378
+ CodeInterpreterTool,
379
+ DataMinion,
380
+ DocumentLibraryTool,
381
+ WebSearchTool,
382
+ )
383
+
384
+
385
+ minion = DataMinion(
386
+ model='mistral-medium-latest',
387
+ instructions='Research and analyze the requested subject.',
388
+ tools=[
389
+ WebSearchTool( ),
390
+ CodeInterpreterTool( ),
391
+ DocumentLibraryTool( library_ids=[ 'library-id' ] ),
392
+ ],
393
+ )
394
+ ```
395
+
396
+ `ImageGenerationTool` is also exported from `minions.mistral`. Mistral executes native tools;
397
+ `functions` remains reserved for client-executed function schemas.
398
+
399
+ ## Category Templates
400
+
401
+ Concrete Minions are subclass templates. Guro prompts plug into a category through the
402
+ `instructions` argument without a factory or registry.
403
+
404
+ ```python
405
+ from guro import instructions
406
+ from minions.gpt import GovernanceMinion
407
+
408
+
409
+ governor = GovernanceMinion(
410
+ model='gpt-5.6-sol',
411
+ instructions=instructions.get( 'AI_GOVENANCE_AGENT' ),
412
+ )
413
+ ```
414
+
415
+ Provider-specific customization uses ordinary inheritance:
416
+
417
+ ```python
418
+ from minions.gpt import ComplianceMinion
419
+
420
+
421
+ class BudgetMinion( ComplianceMinion ):
422
+ """OpenAI Minion specialized for federal budget compliance."""
423
+
424
+ minion_name: str = 'Budget Minion'
425
+ ```
426
+
427
+ ## Development
428
+
429
+ ```powershell
430
+ python -m pip install -e .
431
+ python -m pip install pytest pytest-asyncio build
432
+ python -m pytest
433
+ python -m build
434
+ ```
435
+
436
+ Documentation:
437
+
438
+ ```powershell
439
+ python -m pip install -r requirements-docs.txt
440
+ python -m mkdocs build --strict
441
+ python -m mkdocs serve
442
+ ```
443
+
444
+ Tests mock provider network boundaries and validate provider inheritance, optional tools, concrete
445
+ class exports, synchronous execution, asynchronous execution, streaming, and local tool loops.
446
+
447
+ ## Project Structure
448
+
449
+ ```text
450
+ minions/
451
+ ├── __init__.py
452
+ ├── config.py
453
+ ├── gpt.py
454
+ ├── gemini.py
455
+ ├── grok.py
456
+ ├── claude.py
457
+ ├── mistral.py
458
+ └── tests/
459
+ ```
460
+ <p align="center">
461
+ <a href="https://github.com/is-leeroy-jenkins/minions/actions/workflows/tests.yml"><img src="https://github.com/is-leeroy-jenkins/minions/actions/workflows/tests.yml/badge.svg" alt="Tests"></a>
462
+ <img src="https://img.shields.io/badge/Python-3.11%2B-3776AB?logo=python&logoColor=white" alt="Python 3.11+">
463
+ <img src="https://img.shields.io/badge/version-0.2.0-6f42c1" alt="Version 0.2.0">
464
+ </p>