Documentation Index
Fetch the complete documentation index at: https://launchpad.datalumina.com/llms.txt
Use this file to discover all available pages before exploring further.
What’s Changed
Bug fixes
- Celery task discovery now points at
launchpad.worker, matching the packagedapp/launchpad/module structure introduced in v3.4.0. Workers can discover tasks correctly after installing the project as a package. - Event persistence now stores the validated event model directly on
Event.data, avoiding an unnecessary JSON dump step before the repository writes the event. - Azure OpenAI provider setup now uses pydantic-ai’s
AzureProviderwithAZURE_OPENAI_ENDPOINT,AZURE_OPENAI_API_KEY, andAZURE_OPENAI_API_VERSION(default2025-04-01-preview).
Provider cleanup
- Mistral support was removed from
ModelProviderand Docker Compose environment forwarding to keep the provider list aligned with the currently supported runtime paths. - Google Vertex AI credential loading now passes an empty string when
GOOGLE_APPLICATION_CREDENTIALSis unset, making the expected configuration failure clearer.
Dependencies and developer tooling
- pydantic-ai was bumped from
>=1.80to>=1.94. - Pyright configuration now points at the
apppackage root and local.venv, improving editor/type-checker resolution forlaunchpad.*imports.
What’s Changed
Project layout
The runtime code that used to live flat underapp/ is now a proper installable Python package: app/launchpad/. pyproject.toml declares hatchling as the build backend so uv sync installs the project in editable mode — no more sys.path tweaks in playground scripts, and IDE / pyright pick up the package tree natively.- Imports: every
from core.…,from workflows.…, etc. is nowfrom launchpad.core.…/from launchpad.workflows.…. Same applies toapi,services,database,worker,utils,schemas. - .env moved to the repo root (was
app/.env).docker/.envstill lives underdocker/for compose-level settings. - Alembic stays colocated with the package at
app/launchpad/alembic/;./migrate.shand./makemigration.share unchanged but now run fromapp/launchpad/. - Docker uses
WORKDIR /workspace, installs the package editable viauv pip install -e ., and mounts./app:/workspace/appfor hot reload. The Celery worker’s-Atarget islaunchpad.worker.config. - Playground scripts dropped their
sys.path.append(...)preamble; fixtures and.envnow load from their new paths.
Reference workflows grouped under examples/
Every shipped workflow now lives in its own package under app/launchpad/workflows/examples/<name>/ with schema.py, workflow.py, a nodes/ directory, a request_examples/ folder, and a README.md. The examples/ grouping makes it explicit that these are demos to read and replace — your own workflows belong at app/launchpad/workflows/<name>/. The WorkflowRegistry enum exposes five ready-to-run workflows:STREAMING→ExampleStreamingWorkflow(renamed fromStreamingExampleWorkflow), backsPOST /v1/chat/completions.QUICKSTART→CustomerCareWorkflow, concurrent analysis + routing + Jinja2 prompts colocated atapp/launchpad/workflows/examples/quickstart/prompts/.LANGFUSE_TRACING(new) →LangfuseTracingWorkflow, a small moderation pipeline used as a tracing demo.PGVECTOR_RAG(new) →RagExampleWorkflow, two-node retrieval + generation on top of aPgvectorRAGServicewrapper aroundvecs+ OpenAI embeddings.NESTED_WORKFLOW(new) →NestedWorkflow, a deterministic parent/child workflow composition demo that reuses the sameTaskContext.
Core
- Workflow composition —
Workflow.run()andWorkflow.run_async()now accept an optionalcontext=kwarg so a parent workflow can hand itsTaskContextto a child workflow. The parent’s node registry is preserved on return. - Nested workflows — workflows can now call other workflows from inside a node by using
await ChildWorkflow().run_async(context=task_context). The newNESTED_WORKFLOWexample demonstrates a parent workflow delegating reply drafting to a child workflow while reusing the sameTaskContext. TaskContextgainsshould_stop: booland a matchingstop_workflow()helper, plustrace_id: str | Nonecaptured on entry when tracing is enabled.Node.cleanup()is now explicit on the base class and invoked by the orchestrator after each node run, including when an exception propagates.enable_tracingdefaults toFalse— opt in per workflow instance. Invalid Langfuse credentials raiseLangfuseAuthenticationErrorat construction time.AgentConfig.instructionsreplacessystem_prompt;AgentNodeinstances attach dynamic context with@self.agent.instructionsinstead of@self.agent.system_prompt.
Prompt management
- Colocated prompts —
PromptManager.get_prompt(..., prompts_dir=PROMPTS_DIR)loads templates next to the workflow that owns them. - Frontmatter support —
python-frontmatterparses YAML metadata at the top of each.j2file; surfaced viaPromptManager.get_template_info.
Playground
- One script per reference workflow:
playground/{quickstart,nested_workflow,streaming,langfuse_tracing,pgvector_rag}.py. The legacyworkflow_playground.pyandsend_event.pyscripts have been removed.
Docker
- Supabase remains excluded by default in
docker-compose.yml; uncommentdocker-compose.supabase.ymlwhen you need Studio, Auth, Realtime, Storage, or the Supabase gateway. Caddy remains opt-in for HTTPS deployments.
Dependencies
langfuse>=3.10.5,jinja2>=3.1.6,python-frontmatter,vecs>=0.4,tiktoken>=0.12.0- Python
==3.13.13 pydantic-ai>=1.80
What’s Changed
New Features
- SSE Streaming with OpenAI-compatible API - New
/v1/chat/completionsendpoint that streams responses using Server-Sent Events, following the OpenAI API specification - Workflow streaming support - Added
run_stream_async()method to theWorkflowclass for streaming workflow execution - AgentStreamingNode - New node type for streaming LLM responses with
stream_text_deltas()andstream_structured_deltas()methods - StreamingExampleWorkflow - Working example with
TextStreamingNodeandStructuredStreamingNodedemonstrating both plain text and structured output streaming
Langfuse Integration
- Native SDK integration - Replaced OpenTelemetry-based tracing with the native Langfuse SDK
- Configurable tracing - Enable or disable tracing per workflow with
enable_tracingparameter:Workflow(enable_tracing=True) - Automatic span creation - Workflow and node executions are automatically traced when enabled
Core Updates
- Python version requirement - Bumped minimum Python version to
>=3.13.7
Docker Infrastructure
- Modular compose files - Split Docker configuration into separate files for easier customization:
docker-compose.launchpad.yml- Core application (api, celery, redis, db)docker-compose.supabase.yml- Full Supabase stack (studio, auth, realtime, storage, etc.)docker-compose.caddy.yml- Reverse proxy with automatic HTTPS
- Updated Supabase images - All Supabase services updated to latest versions:
- Studio: 2025.11.26-sha-8f096b5
- GoTrue (Auth): v2.183.0
- PostgREST: v13.0.7
- Realtime: v2.65.3
- Storage API: v1.32.0
- Postgres Meta: v0.93.1
- Edge Runtime: v1.69.25
- Logflare (Analytics): 1.26.13
- Supavisor (Connection Pooler): 2.7.4
Dependencies
- Updated
pydantic-aifrom >=1.0.15 to >=1.26
Files Changed
app/api/openai.py(new)app/core/nodes/agent_streaming_node.py(new)app/core/workflow.pyapp/workflows/streaming_example_workflow.py(new)app/workflows/streaming_example_workflow_nodes/(new)app/utils/event_stream_generator.py(new)pyproject.tomldocker/docker-compose.yml(restructured)docker/docker-compose.launchpad.yml(new)docker/docker-compose.supabase.yml(new)docker/docker-compose.caddy.yml(new)
What’s Changed
Core Improvements
- Standardized node output management - Added
save_output()andget_output()methods to handle node outputs in a standardized way using Pydantic models. Users can now access node data by simply providing the node class, eliminating the need to memorize specific keys for storing and retrieving node outputs. - Enhanced RouterNode functionality - Added task context handling and improved output management capabilities
- Refactored node and workflow logic - Updated base node and workflow classes to support task context handling across the system
- Code cleanup - Removed unused OpenAI model imports from agent module
Model Provider Updates
- OpenAI integration - Migrated from
OpenAIModeltoOpenAIChatModelfor improved consistency
Dependencies
- Updated
pydantic-aifrom >=0.7.5 to >=1.0.15 - Updated
alembicdependency to >=1.16.4 - Updated
uv.lockwith latest package metadata
Files Changed
app/core/nodes/agent.pyapp/core/nodes/base.pyapp/core/nodes/router.pyapp/core/workflow.pypyproject.tomluv.lock