Dspy EngineΒΆ
DSPy-powered engine component that mirrors the design implementation.
ClassesΒΆ
DSPyEngine ΒΆ
Bases: EngineComponent
Execute a minimal DSPy program backed by a hosted LLM.
Behavior intentionally mirrors design/dspy_engine.py so that orchestration relies on the same model resolution, signature preparation, and result normalization logic.
FunctionsΒΆ
model_post_init ΒΆ
model_post_init(__context: Any) -> None
Initialize helper instances after Pydantic model initialization.
Source code in src/flock/engines/dspy_engine.py
evaluate async ΒΆ
Universal evaluation with auto-detection of batch and fan-out modes.
This single method handles ALL evaluation scenarios by auto-detecting: - Batching: Via ctx.is_batch flag (set by orchestrator for BatchSpec) - Fan-out: Via output_group.outputs[*].count (signature building adapts) - Multi-output: Via len(output_group.outputs) (multiple types in one call)
The signature building in _prepare_signature_for_output_group() automatically: - Pluralizes field names for batching ("tasks" vs "task") - Uses list[Type] for batching and fan-out - Generates semantic field names for all modes
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
agent | Agent instance | required | |
ctx | Execution context (ctx.is_batch indicates batch mode) | required | |
inputs | EvalInputs | EvalInputs with input artifacts | required |
output_group | OutputGroup defining what artifacts to produce | required |
Returns:
| Type | Description |
|---|---|
EvalResult | EvalResult with artifacts matching output_group specifications |
Examples:
Single: .publishes(Report) β {"report": Report} Batch: BatchSpec(size=3) + ctx.is_batch=True β {"reports": list[Report]} Fan-out: .publishes(Idea, fan_out=5) β {"ideas": list[Idea]} Multi: .publishes(Summary, Analysis) β {"summary": Summary, "analysis": Analysis}