#!/usr/bin/env python3 """ Test the enhanced workflow system with brand-ai patterns """ import asyncio import aiohttp import json import time async def test_enhanced_workflow_system(): async with aiohttp.ClientSession() as session: try: print("šŸ”§ Testing Enhanced Workflow System") print("=" * 50) # Register and login test user timestamp = int(time.time()) user_data = { "email": f"workflowtest{timestamp}@example.com", "password": "TestPassword123!", "username": f"workflowtest{timestamp}" } async with session.post("http://localhost:58000/api/v1/auth/register", json=user_data) as response: if response.status != 201: error_data = await response.json() print(f"āŒ Registration failed: {error_data}") return print("āœ… User registered") # Login login_data = {"email": user_data["email"], "password": user_data["password"]} async with session.post("http://localhost:58000/api/v1/auth/login", json=login_data) as response: if response.status != 200: error_data = await response.json() print(f"āŒ Login failed: {error_data}") return login_result = await response.json() token = login_result['access_token'] headers = {'Authorization': f'Bearer {token}'} print("āœ… Login successful") # Test 1: Check workflow module status print("\nšŸ“Š Test 1: Module Status") async with session.get("http://localhost:58000/api/v1/modules/", headers=headers) as response: if response.status == 200: modules_data = await response.json() workflow_module = None for module in modules_data.get('modules', []): if module.get('name') == 'workflow': workflow_module = module break if workflow_module: print(f"āœ… Workflow module found: {workflow_module.get('status', 'unknown')}") print(f" Initialized: {workflow_module.get('initialized', False)}") print(f" Version: {workflow_module.get('version', 'unknown')}") else: print("āŒ Workflow module not found") return else: print(f"āŒ Failed to get module status: {response.status}") return # Test 2: Create a simple brand naming workflow print("\nšŸ­ Test 2: Brand Naming Workflow") brand_workflow = { "name": "Brand Name Generation", "description": "Generate brand names using AI generation step", "version": "1.0.0", "steps": [ { "id": "ai_gen_step", "name": "Generate Brand Names", "type": "ai_generation", "config": { "operation": "brand_names", "category": "semantic", "model": "openrouter/anthropic/claude-3.5-sonnet", "temperature": 0.8, "max_tokens": 500, "output_key": "brand_names", "prompt_template": "Generate 3 creative brand names for a {industry} company targeting {target_audience}. Company description: {description}. Return as a JSON list with name and description fields." }, "enabled": True }, { "id": "filter_step", "name": "Filter Quality Names", "type": "filter", "config": { "input_key": "brand_names", "output_key": "filtered_names", "filter_expression": "len(item.get('name', '')) > 3", "keep_original": False }, "enabled": True } ], "variables": { "industry": "technology", "target_audience": "developers", "description": "A platform for AI development tools" } } # Test workflow execution - FastAPI expects both parameters payload = { "workflow_def": brand_workflow, "input_data": { "industry": "technology", "target_audience": "developers", "description": "A platform for AI development tools" } } async with session.post( "http://localhost:58000/api/modules/v1/workflow/execute", json=payload, headers=headers, timeout=aiohttp.ClientTimeout(total=30) ) as response: print(f"Workflow execution status: {response.status}") if response.status == 200: result = await response.json() execution_id = result.get("execution_id") print(f"āœ… Workflow started: {execution_id}") print(f" Status: {result.get('status', 'unknown')}") # Check for results if result.get("results"): print(f" Results available: {len(result.get('results', {}))}") # Display brand names if available brand_names = result.get("results", {}).get("brand_names", []) if brand_names: print(f" Generated brand names: {len(brand_names)}") for i, name_info in enumerate(brand_names[:3]): # Show first 3 name = name_info.get('name', 'Unknown') desc = name_info.get('description', 'No description') print(f" {i+1}. {name}: {desc[:50]}...") # Display filtered results filtered_names = result.get("results", {}).get("filtered_names", []) if filtered_names: print(f" Filtered to {len(filtered_names)} quality names") else: print(" No results yet (workflow may still be running)") elif response.status == 503: print("āš ļø Workflow module not initialized (expected on first run)") else: error_data = await response.json() print(f"āŒ Workflow execution failed: {error_data}") # Test 3: Check workflow templates print("\nšŸ“ˆ Test 3: Workflow Templates") try: async with session.get("http://localhost:58000/api/modules/v1/workflow/templates", headers=headers) as response: if response.status == 200: templates = await response.json() print(f"āœ… Workflow templates available: {len(templates.get('templates', []))}") for template in templates.get('templates', [])[:2]: # Show first 2 print(f" - {template.get('name')}: {template.get('description')}") else: print(f"ā„¹ļø Templates not available: {response.status}") except Exception as e: print(f"ā„¹ļø Templates endpoint error: {e}") print(f"\nšŸŽÆ Enhanced Workflow System Test Complete!") print("The workflow system now supports:") print(" āœ… Brand-AI inspired step types (AI Generation, Filter, Map, Reduce, etc.)") print(" āœ… AI-powered content generation") print(" āœ… Data transformation and filtering") print(" āœ… Complex workflow orchestration") print(" āœ… Variable templating and context management") except Exception as e: print(f"āŒ Test error: {e}") import traceback traceback.print_exc() if __name__ == "__main__": asyncio.run(test_enhanced_workflow_system())