fromflockimportFlock,DSPyEngine,BAMLAdapter# Use a specific adapterengine=DSPyEngine(model="openai/gpt-4.1",adapter=BAMLAdapter())agent=(flock.agent("processor").consumes(Input).publishes(Output).with_engines(engine))
fromflockimportArtifact# Type hints for artifact handlingdefprocess_artifact(artifact:Artifact)->dict:return{"type":artifact.type,"producer":artifact.produced_by,"payload":artifact.payload}
fromflockimportPrivateVisibility,TenantVisibility# Private to specific agentsagent.publishes(SensitiveData,visibility=PrivateVisibility(agents={"admin","auditor"}))# Multi-tenant isolationagent.publishes(CustomerData,visibility=TenantVisibility(tenant_id="customer_123"))
fromflockimportUntil,When# Stop when you have enough resultsawaitflock.run_until(Until.artifact_count(Result).at_least(5),timeout=60)# Composite conditionsstop_condition=(Until.artifact_count(Analysis).at_least(3)|Until.workflow_error(correlation_id))awaitflock.run_until(stop_condition,timeout=120)# Conditional subscription activationagent.consumes(Approval,when=When.correlation(Vote).count_at_least(3))
fromflockimportFilterConfigfromflock.core.context_providerimportFilteredContextProvider# Filter context by tagsprovider=FilteredContextProvider(FilterConfig(tags={"urgent","critical"}),limit=50)flock=Flock("openai/gpt-4.1",context_provider=provider)
fromflockimportget_logger,configure_loggingimportlogging# Configure logging levelconfigure_logging(level=logging.DEBUG)# Get a logger for your modulelogger=get_logger(__name__)logger.info("Starting workflow")logger.debug("Processing artifact",extra={"artifact_id":"123"})logger.warning("Retrying operation")
If you're using deep imports, here's how to migrate:
# Before (deep imports)fromflock.enginesimportDSPyEnginefromflock.components.agentimportAgentComponent,EngineComponentfromflock.core.visibilityimportPrivateVisibilityfromflock.utils.runtimeimportContext,EvalInputs,EvalResult# After (top-level imports)fromflockimport(DSPyEngine,AgentComponent,EngineComponent,PrivateVisibility,Context,EvalInputs,EvalResult,)
Both styles workโuse whichever you prefer. The deep imports are still available for cases where you need to import less common utilities.