fast-agent-mcp 0.0.16__tar.gz → 0.1.1__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.
Files changed (124) hide show
  1. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/PKG-INFO +30 -13
  2. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/README.md +29 -12
  3. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/pyproject.toml +1 -1
  4. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/cli/commands/bootstrap.py +1 -1
  5. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/cli/commands/setup.py +4 -1
  6. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/cli/main.py +13 -3
  7. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/agent_app.py +1 -1
  8. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/enhanced_prompt.py +3 -3
  9. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/fastagent.py +96 -49
  10. fast_agent_mcp-0.1.1/src/mcp_agent/resources/examples/data-analysis/analysis-campaign.py +188 -0
  11. fast_agent_mcp-0.1.1/src/mcp_agent/resources/examples/data-analysis/analysis.py +65 -0
  12. fast_agent_mcp-0.1.1/src/mcp_agent/resources/examples/workflows/agent_build.py +81 -0
  13. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/workflows/evaluator.py +3 -1
  14. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/workflows/orchestrator.py +2 -2
  15. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/evaluator_optimizer/evaluator_optimizer.py +120 -63
  16. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/llm/augmented_llm_anthropic.py +4 -3
  17. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/orchestrator/orchestrator.py +170 -70
  18. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/orchestrator/orchestrator_models.py +3 -0
  19. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/orchestrator/orchestrator_prompts.py +48 -0
  20. fast_agent_mcp-0.0.16/src/mcp_agent/resources/examples/data-analysis/analysis.py +0 -61
  21. fast_agent_mcp-0.0.16/src/mcp_agent/resources/examples/workflows/agent_build.py +0 -61
  22. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/.gitignore +0 -0
  23. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/LICENSE +0 -0
  24. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/__init__.py +0 -0
  25. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/agents/__init__.py +0 -0
  26. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/agents/agent.py +0 -0
  27. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/app.py +0 -0
  28. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/cli/__init__.py +0 -0
  29. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/cli/__main__.py +0 -0
  30. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/cli/commands/config.py +0 -0
  31. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/cli/terminal.py +0 -0
  32. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/config.py +0 -0
  33. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/console.py +0 -0
  34. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/context.py +0 -0
  35. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/context_dependent.py +0 -0
  36. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/__init__.py +0 -0
  37. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/agent_types.py +0 -0
  38. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/agent_utils.py +0 -0
  39. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/error_handling.py +0 -0
  40. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/exceptions.py +0 -0
  41. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/proxies.py +0 -0
  42. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/server_validation.py +0 -0
  43. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/core/types.py +0 -0
  44. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/eval/__init__.py +0 -0
  45. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/event_progress.py +0 -0
  46. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/executor/__init__.py +0 -0
  47. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/executor/decorator_registry.py +0 -0
  48. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/executor/executor.py +0 -0
  49. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/executor/task_registry.py +0 -0
  50. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/executor/temporal.py +0 -0
  51. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/executor/workflow.py +0 -0
  52. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/executor/workflow_signal.py +0 -0
  53. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/human_input/__init__.py +0 -0
  54. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/human_input/handler.py +0 -0
  55. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/human_input/types.py +0 -0
  56. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/__init__.py +0 -0
  57. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/events.py +0 -0
  58. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/json_serializer.py +0 -0
  59. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/listeners.py +0 -0
  60. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/logger.py +0 -0
  61. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/rich_progress.py +0 -0
  62. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/tracing.py +0 -0
  63. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/logging/transport.py +0 -0
  64. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/__init__.py +0 -0
  65. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/gen_client.py +0 -0
  66. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/mcp_activity.py +0 -0
  67. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/mcp_agent_client_session.py +0 -0
  68. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/mcp_agent_server.py +0 -0
  69. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/mcp_aggregator.py +0 -0
  70. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/mcp_connection_manager.py +0 -0
  71. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp/stdio.py +0 -0
  72. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/mcp_server_registry.py +0 -0
  73. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/progress_display.py +0 -0
  74. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  75. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  76. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/internal/agent.py +0 -0
  77. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/internal/job.py +0 -0
  78. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/internal/social.py +0 -0
  79. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/mcp_researcher/researcher-eval.py +0 -0
  80. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/researcher/fastagent.config.yaml +0 -0
  81. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/researcher/researcher-eval.py +0 -0
  82. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/researcher/researcher.py +0 -0
  83. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/workflows/chaining.py +0 -0
  84. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/workflows/fastagent.config.yaml +0 -0
  85. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/workflows/human_input.py +0 -0
  86. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/workflows/parallel.py +0 -0
  87. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/resources/examples/workflows/router.py +0 -0
  88. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/telemetry/__init__.py +0 -0
  89. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/telemetry/usage_tracking.py +0 -0
  90. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/__init__.py +0 -0
  91. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/embedding/__init__.py +0 -0
  92. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/embedding/embedding_base.py +0 -0
  93. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/embedding/embedding_cohere.py +0 -0
  94. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/embedding/embedding_openai.py +0 -0
  95. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/evaluator_optimizer/__init__.py +0 -0
  96. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/__init__.py +0 -0
  97. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/intent_classifier_base.py +0 -0
  98. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/intent_classifier_embedding.py +0 -0
  99. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/intent_classifier_embedding_cohere.py +0 -0
  100. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/intent_classifier_embedding_openai.py +0 -0
  101. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/intent_classifier_llm.py +0 -0
  102. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/intent_classifier_llm_anthropic.py +0 -0
  103. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/intent_classifier/intent_classifier_llm_openai.py +0 -0
  104. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/llm/__init__.py +0 -0
  105. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/llm/augmented_llm.py +0 -0
  106. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/llm/augmented_llm_openai.py +0 -0
  107. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/llm/llm_selector.py +0 -0
  108. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/llm/model_factory.py +0 -0
  109. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/llm/prompt_utils.py +0 -0
  110. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/orchestrator/__init__.py +0 -0
  111. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/parallel/__init__.py +0 -0
  112. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/parallel/fan_in.py +0 -0
  113. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/parallel/fan_out.py +0 -0
  114. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/parallel/parallel_llm.py +0 -0
  115. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/router/__init__.py +0 -0
  116. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/router/router_base.py +0 -0
  117. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/router/router_embedding.py +0 -0
  118. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/router/router_embedding_cohere.py +0 -0
  119. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/router/router_embedding_openai.py +0 -0
  120. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/router/router_llm.py +0 -0
  121. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/swarm/__init__.py +0 -0
  122. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/swarm/swarm.py +0 -0
  123. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/swarm/swarm_anthropic.py +0 -0
  124. {fast_agent_mcp-0.0.16 → fast_agent_mcp-0.1.1}/src/mcp_agent/workflows/swarm/swarm_openai.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.0.16
3
+ Version: 0.1.1
4
4
  Summary: Define, Prompt and Test MCP enabled Agents and Workflows
5
5
  Author-email: Shaun Smith <fastagent@llmindset.co.uk>, Sarmad Qadri <sarmad@lastmileai.dev>
6
6
  License: Apache License
@@ -235,7 +235,7 @@ Provides-Extra: temporal
235
235
  Requires-Dist: temporalio>=1.8.0; extra == 'temporal'
236
236
  Description-Content-Type: text/markdown
237
237
 
238
- ## FastAgent
238
+ ## fast-agent
239
239
 
240
240
  <p align="center">
241
241
  <a href="https://pypi.org/project/fast-agent-mcp/"><img src="https://img.shields.io/pypi/v/fast-agent-mcp?color=%2334D058&label=pypi" /></a>
@@ -257,7 +257,7 @@ Evaluate how different models handle Agent and MCP Server calling tasks, then bu
257
257
 
258
258
  Prompts and configurations that define your Agent Applications are stored in simple files, with minimal boilerplate, enabling simple management and version control.
259
259
 
260
- Chat with individual Agents and Components before, during and after workflow execution to tune and diagnose your application.
260
+ Chat with individual Agents and Components before, during and after workflow execution to tune and diagnose your application. Agents can request human input to get additional context for task completion.
261
261
 
262
262
  Simple model selection makes testing Model <-> MCP Server interaction painless. You can read more about the motivation behind this project [here](https://llmindset.co.uk/resources/fast-agent/)
263
263
 
@@ -391,6 +391,21 @@ This starts an interactive session, which produces a short social media post for
391
391
 
392
392
  Chains can be incorporated in other workflows, or contain other workflow elements (including other Chains). You can set an `instruction` to precisely describe it's capabilities to other workflow steps if needed.
393
393
 
394
+ ### Human Input
395
+
396
+ Agents can request Human Input to assist with a task or get additional context:
397
+
398
+ ```python
399
+ @fast.agent(
400
+ instruction="An AI agent that assists with basic tasks. Request Human Input when needed.",
401
+ human_input=True,
402
+ )
403
+
404
+ await agent("print the next number in the sequence")
405
+ ```
406
+
407
+ In the example `human_input.py`, the Agent will prompt the User for additional information to complete the task.
408
+
394
409
  ### Parallel
395
410
 
396
411
  The Parallel Workflow sends the same message to multiple Agents simultaneously (`fan-out`), then uses the `fan-in` Agent to process the combined content.
@@ -415,9 +430,13 @@ Look at the `parallel.py` workflow example for more examples. If you don't speci
415
430
 
416
431
  `parallel` is also useful to ensemble ideas from different LLMs.
417
432
 
433
+ When using `parallel` in other workflows, specify an `instruction` to describe its operation.
434
+
418
435
  ### Evaluator-Optimizer
419
436
 
420
- Evaluator-Optimizers combine 2 agents: one to generate content (the `generator`), and the other to judge that content and provide actionable feedback (the `evaluator`). Messages are sent to the generator first, then the pair run in a loop until either the evaluator is satisfied with the quality, or the maximum number of refinements is reached.
437
+ Evaluator-Optimizers combine 2 agents: one to generate content (the `generator`), and the other to judge that content and provide actionable feedback (the `evaluator`). Messages are sent to the generator first, then the pair run in a loop until either the evaluator is satisfied with the quality, or the maximum number of refinements is reached. The final result from the Generator is returned.
438
+
439
+ If the Generator has `use_history` off, the previous iteration is returned when asking for improvements - otherwise conversational context is used.
421
440
 
422
441
  ```python
423
442
  @fast.evaluator_optimizer(
@@ -432,6 +451,8 @@ async with fast.run() as agent:
432
451
  await agent.researcher.send("produce a report on how to make the perfect espresso")
433
452
  ```
434
453
 
454
+ When used in a workflow, it returns the last `generator` message as the result.
455
+
435
456
  See the `evaluator.py` workflow example, or `fast-agent bootstrap researcher` for a more complete example.
436
457
 
437
458
  ### Router
@@ -458,7 +479,7 @@ Given a complex task, the Orchestrator uses an LLM to generate a plan to divide
458
479
  )
459
480
  ```
460
481
 
461
- See `orchestrator.py` in the workflow examples.
482
+ See the `orchestrator.py` or `agent_build.py` workflow example.
462
483
 
463
484
  ## Agent Features
464
485
 
@@ -540,7 +561,7 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
540
561
  name="route", # name of the router
541
562
  agents=["agent1", "agent2", "agent3"], # list of agent names router can delegate to
542
563
  model="o3-mini.high", # specify routing model
543
- use_history=True, # router maintains chat history
564
+ use_history=False, # router maintains conversation history
544
565
  human_input=False, # whether router can request human input
545
566
  )
546
567
  ```
@@ -553,9 +574,10 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
553
574
  instruction="instruction", # base instruction for the orchestrator
554
575
  agents=["agent1", "agent2"], # list of agent names this orchestrator can use
555
576
  model="o3-mini.high", # specify orchestrator planning model
556
- use_history=False, # orchestrator doesn't maintain chat history by default
577
+ use_history=False, # orchestrator doesn't maintain chat history (no effect).
557
578
  human_input=False, # whether orchestrator can request human input
558
579
  plan_type="full", # planning approach: "full" or "iterative"
580
+ max_iterations=5, # maximum number of full plan attempts, or iterations
559
581
  )
560
582
  ```
561
583
 
@@ -570,6 +592,7 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
570
592
 
571
593
  ### llmindset.co.uk fork:
572
594
 
595
+ - Overhaul of Eval/Opt for Conversation Management
573
596
  - Remove instructor use for Orchestrator
574
597
  - Improved handling of Parallel/Fan-In and respose option
575
598
  - XML based generated prompts
@@ -590,9 +613,3 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
590
613
  - Numerous defect fixes
591
614
 
592
615
  ### Features to add.
593
-
594
- - Chat History Clear.
595
-
596
- ```
597
-
598
- ```
@@ -1,4 +1,4 @@
1
- ## FastAgent
1
+ ## fast-agent
2
2
 
3
3
  <p align="center">
4
4
  <a href="https://pypi.org/project/fast-agent-mcp/"><img src="https://img.shields.io/pypi/v/fast-agent-mcp?color=%2334D058&label=pypi" /></a>
@@ -20,7 +20,7 @@ Evaluate how different models handle Agent and MCP Server calling tasks, then bu
20
20
 
21
21
  Prompts and configurations that define your Agent Applications are stored in simple files, with minimal boilerplate, enabling simple management and version control.
22
22
 
23
- Chat with individual Agents and Components before, during and after workflow execution to tune and diagnose your application.
23
+ Chat with individual Agents and Components before, during and after workflow execution to tune and diagnose your application. Agents can request human input to get additional context for task completion.
24
24
 
25
25
  Simple model selection makes testing Model <-> MCP Server interaction painless. You can read more about the motivation behind this project [here](https://llmindset.co.uk/resources/fast-agent/)
26
26
 
@@ -154,6 +154,21 @@ This starts an interactive session, which produces a short social media post for
154
154
 
155
155
  Chains can be incorporated in other workflows, or contain other workflow elements (including other Chains). You can set an `instruction` to precisely describe it's capabilities to other workflow steps if needed.
156
156
 
157
+ ### Human Input
158
+
159
+ Agents can request Human Input to assist with a task or get additional context:
160
+
161
+ ```python
162
+ @fast.agent(
163
+ instruction="An AI agent that assists with basic tasks. Request Human Input when needed.",
164
+ human_input=True,
165
+ )
166
+
167
+ await agent("print the next number in the sequence")
168
+ ```
169
+
170
+ In the example `human_input.py`, the Agent will prompt the User for additional information to complete the task.
171
+
157
172
  ### Parallel
158
173
 
159
174
  The Parallel Workflow sends the same message to multiple Agents simultaneously (`fan-out`), then uses the `fan-in` Agent to process the combined content.
@@ -178,9 +193,13 @@ Look at the `parallel.py` workflow example for more examples. If you don't speci
178
193
 
179
194
  `parallel` is also useful to ensemble ideas from different LLMs.
180
195
 
196
+ When using `parallel` in other workflows, specify an `instruction` to describe its operation.
197
+
181
198
  ### Evaluator-Optimizer
182
199
 
183
- Evaluator-Optimizers combine 2 agents: one to generate content (the `generator`), and the other to judge that content and provide actionable feedback (the `evaluator`). Messages are sent to the generator first, then the pair run in a loop until either the evaluator is satisfied with the quality, or the maximum number of refinements is reached.
200
+ Evaluator-Optimizers combine 2 agents: one to generate content (the `generator`), and the other to judge that content and provide actionable feedback (the `evaluator`). Messages are sent to the generator first, then the pair run in a loop until either the evaluator is satisfied with the quality, or the maximum number of refinements is reached. The final result from the Generator is returned.
201
+
202
+ If the Generator has `use_history` off, the previous iteration is returned when asking for improvements - otherwise conversational context is used.
184
203
 
185
204
  ```python
186
205
  @fast.evaluator_optimizer(
@@ -195,6 +214,8 @@ async with fast.run() as agent:
195
214
  await agent.researcher.send("produce a report on how to make the perfect espresso")
196
215
  ```
197
216
 
217
+ When used in a workflow, it returns the last `generator` message as the result.
218
+
198
219
  See the `evaluator.py` workflow example, or `fast-agent bootstrap researcher` for a more complete example.
199
220
 
200
221
  ### Router
@@ -221,7 +242,7 @@ Given a complex task, the Orchestrator uses an LLM to generate a plan to divide
221
242
  )
222
243
  ```
223
244
 
224
- See `orchestrator.py` in the workflow examples.
245
+ See the `orchestrator.py` or `agent_build.py` workflow example.
225
246
 
226
247
  ## Agent Features
227
248
 
@@ -303,7 +324,7 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
303
324
  name="route", # name of the router
304
325
  agents=["agent1", "agent2", "agent3"], # list of agent names router can delegate to
305
326
  model="o3-mini.high", # specify routing model
306
- use_history=True, # router maintains chat history
327
+ use_history=False, # router maintains conversation history
307
328
  human_input=False, # whether router can request human input
308
329
  )
309
330
  ```
@@ -316,9 +337,10 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
316
337
  instruction="instruction", # base instruction for the orchestrator
317
338
  agents=["agent1", "agent2"], # list of agent names this orchestrator can use
318
339
  model="o3-mini.high", # specify orchestrator planning model
319
- use_history=False, # orchestrator doesn't maintain chat history by default
340
+ use_history=False, # orchestrator doesn't maintain chat history (no effect).
320
341
  human_input=False, # whether orchestrator can request human input
321
342
  plan_type="full", # planning approach: "full" or "iterative"
343
+ max_iterations=5, # maximum number of full plan attempts, or iterations
322
344
  )
323
345
  ```
324
346
 
@@ -333,6 +355,7 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
333
355
 
334
356
  ### llmindset.co.uk fork:
335
357
 
358
+ - Overhaul of Eval/Opt for Conversation Management
336
359
  - Remove instructor use for Orchestrator
337
360
  - Improved handling of Parallel/Fan-In and respose option
338
361
  - XML based generated prompts
@@ -353,9 +376,3 @@ agent["greeter"].send("Good Evening!") # Dictionary access is supported
353
376
  - Numerous defect fixes
354
377
 
355
378
  ### Features to add.
356
-
357
- - Chat History Clear.
358
-
359
- ```
360
-
361
- ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fast-agent-mcp"
3
- version = "0.0.16"
3
+ version = "0.1.1"
4
4
  description = "Define, Prompt and Test MCP enabled Agents and Workflows"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -135,7 +135,7 @@ def copy_example_files(
135
135
 
136
136
  def show_overview():
137
137
  """Display an overview of available examples in a nicely formatted table."""
138
- console.print("\n[bold cyan]FastAgent Example Applications[/bold cyan]")
138
+ console.print("\n[bold cyan]fast-agent Example Applications[/bold cyan]")
139
139
  console.print("Build agents and compose workflows through practical examples\n")
140
140
 
141
141
  # Create a table for better organization
@@ -185,7 +185,7 @@ def init(
185
185
  # Check for existing .gitignore
186
186
  needs_gitignore = not find_gitignore(config_path)
187
187
 
188
- console.print("\n[bold]FastAgent Setup[/bold]\n")
188
+ console.print("\n[bold]fast-agent Setup[/bold]\n")
189
189
  console.print("This will create the following files:")
190
190
  console.print(f" - {config_path}/fastagent.config.yaml")
191
191
  console.print(f" - {config_path}/fastagent.secrets.yaml")
@@ -227,6 +227,9 @@ def init(
227
227
  console.print(
228
228
  "2. Keep fastagent.secrets.yaml secure and never commit it to version control"
229
229
  )
230
+ console.print(
231
+ "3. Update fastagent.config.yaml to set a default model (currently system default is 'haiku')"
232
+ )
230
233
  console.print("\nTo get started, run:")
231
234
  console.print(" uv run agent.py")
232
235
  else:
@@ -22,7 +22,14 @@ console = Console()
22
22
 
23
23
  def show_welcome():
24
24
  """Show a welcome message with available commands."""
25
- console.print("\n[bold]Welcome to MCP Agent![/bold]")
25
+ from importlib.metadata import version
26
+
27
+ try:
28
+ app_version = version("fast-agent-mcp")
29
+ except: # noqa: E722
30
+ app_version = "unknown"
31
+
32
+ console.print(f"\n[bold]fast-agent (fast-agent-mcp) {app_version}[/bold]")
26
33
  console.print("Build effective agents using Model Context Protocol (MCP)")
27
34
 
28
35
  # Create a table for commands
@@ -41,8 +48,11 @@ def show_welcome():
41
48
  console.print("\n[bold]Getting Started:[/bold]")
42
49
  console.print("1. Set up a new project:")
43
50
  console.print(" fastagent setup")
44
- console.print("\n2. Try an example workflow:")
45
- console.print(" fastagent bootstrap create workflow")
51
+ console.print("\n2. Create Building Effective Agents workflow examples:")
52
+ console.print(" fastagent bootstrap workflow")
53
+ console.print("\n3. Explore other examples:")
54
+ console.print(" fastagent bootstrap")
55
+
46
56
  console.print("\nUse --help with any command for more information")
47
57
  console.print("Example: fastagent bootstrap --help")
48
58
 
@@ -129,7 +129,7 @@ class AgentApp:
129
129
  continue
130
130
 
131
131
  result = await self.send(agent, user_input)
132
-
132
+
133
133
  # Check if current agent is a chain that should continue with final agent
134
134
  if agent_types.get(agent) == "Chain":
135
135
  proxy = self._agents[agent]
@@ -52,7 +52,7 @@ class AgentCompleter(Completer):
52
52
  "clear": "Clear the screen",
53
53
  "agents": "List available agents",
54
54
  "STOP": "Stop this prompting session and move to next workflow step",
55
- "EXIT": "Exit FastAgent, terminating any running workflows",
55
+ "EXIT": "Exit fast-agent, terminating any running workflows",
56
56
  **(commands or {}), # Allow custom commands to be passed in
57
57
  }
58
58
  if is_human_input:
@@ -319,7 +319,7 @@ async def handle_special_commands(command, agent_app=None):
319
319
  rich_print(" @agent_name - Switch to agent")
320
320
  rich_print(" STOP - Return control back to the workflow")
321
321
  rich_print(
322
- " EXIT - Exit FastAgent, terminating any running workflows"
322
+ " EXIT - Exit fast-agent, terminating any running workflows"
323
323
  )
324
324
  rich_print("\n[bold]Keyboard Shortcuts:[/bold]")
325
325
  rich_print(
@@ -338,7 +338,7 @@ async def handle_special_commands(command, agent_app=None):
338
338
  return True
339
339
 
340
340
  elif command == "EXIT":
341
- raise PromptExitError("User requested to exit FastAgent session")
341
+ raise PromptExitError("User requested to exit fast-agent session")
342
342
 
343
343
  elif command == "LIST_AGENTS":
344
344
  if available_agents: