parent
a0dbdba079
commit
9e63caa351
@ -1,718 +0,0 @@
|
||||
"""
|
||||
Full Hierarchical Structured Communication Framework Test with Ollama
|
||||
|
||||
This script demonstrates the complete Hierarchical Structured Communication framework
|
||||
using Ollama for local model inference. It showcases all components:
|
||||
- Structured Communication Protocol
|
||||
- Hierarchical Evaluation System
|
||||
- Graph-based Agent Orchestration
|
||||
- Iterative Refinement Process
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import argparse
|
||||
import sys
|
||||
from typing import List, Dict, Any
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
|
||||
# Color support
|
||||
try:
|
||||
from colorama import init, Fore, Back, Style
|
||||
init(autoreset=True)
|
||||
COLORS_AVAILABLE = True
|
||||
except ImportError:
|
||||
# Fallback for systems without colorama
|
||||
class Fore:
|
||||
RED = GREEN = BLUE = YELLOW = MAGENTA = CYAN = WHITE = ""
|
||||
class Back:
|
||||
BLACK = RED = GREEN = BLUE = YELLOW = MAGENTA = CYAN = WHITE = ""
|
||||
class Style:
|
||||
BRIGHT = DIM = NORMAL = RESET_ALL = ""
|
||||
COLORS_AVAILABLE = False
|
||||
|
||||
class CommunicationType(str, Enum):
|
||||
"""Types of communication in the structured protocol"""
|
||||
MESSAGE = "message" # M_ij: Specific task instructions
|
||||
BACKGROUND = "background" # B_ij: Context and problem background
|
||||
INTERMEDIATE_OUTPUT = "intermediate_output" # I_ij: Intermediate results
|
||||
|
||||
@dataclass
|
||||
class StructuredMessage:
|
||||
"""Structured communication message following HierarchicalStructuredComm protocol"""
|
||||
message: str
|
||||
background: str
|
||||
intermediate_output: str
|
||||
sender: str
|
||||
recipient: str
|
||||
timestamp: str = None
|
||||
|
||||
@dataclass
|
||||
class EvaluationResult:
|
||||
"""Result from evaluation team member"""
|
||||
evaluator_name: str
|
||||
criterion: str
|
||||
score: float
|
||||
feedback: str
|
||||
confidence: float
|
||||
|
||||
class HierarchicalStructuredCommunicationFramework:
|
||||
"""
|
||||
Full implementation of Hierarchical Structured Communication framework
|
||||
using direct Ollama API calls
|
||||
"""
|
||||
|
||||
def __init__(self, model_name: str = "llama3:latest", verbose: bool = True, max_display_length: int = None):
|
||||
self.model_name = model_name
|
||||
self.verbose = verbose
|
||||
self.max_display_length = max_display_length
|
||||
self.conversation_history: List[StructuredMessage] = []
|
||||
self.intermediate_outputs: Dict[str, str] = {}
|
||||
self.evaluation_results: List[EvaluationResult] = []
|
||||
|
||||
# Check Ollama availability
|
||||
self._check_ollama()
|
||||
|
||||
def _print_colored(self, text: str, color: str = Fore.WHITE, style: str = Style.NORMAL):
|
||||
"""Print colored text if colors are available"""
|
||||
if COLORS_AVAILABLE:
|
||||
print(f"{color}{style}{text}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(text)
|
||||
|
||||
def _print_header(self, text: str):
|
||||
"""Print a header with styling"""
|
||||
self._print_colored(f"\n{text}", Fore.CYAN, Style.BRIGHT)
|
||||
self._print_colored("=" * len(text), Fore.CYAN)
|
||||
|
||||
def _print_subheader(self, text: str):
|
||||
"""Print a subheader with styling"""
|
||||
self._print_colored(f"\n{text}", Fore.YELLOW, Style.BRIGHT)
|
||||
self._print_colored("-" * len(text), Fore.YELLOW)
|
||||
|
||||
def _print_success(self, text: str):
|
||||
"""Print success message"""
|
||||
self._print_colored(text, Fore.GREEN, Style.BRIGHT)
|
||||
|
||||
def _print_error(self, text: str):
|
||||
"""Print error message"""
|
||||
self._print_colored(text, Fore.RED, Style.BRIGHT)
|
||||
|
||||
def _print_info(self, text: str):
|
||||
"""Print info message"""
|
||||
self._print_colored(text, Fore.BLUE)
|
||||
|
||||
def _print_warning(self, text: str):
|
||||
"""Print warning message"""
|
||||
self._print_colored(text, Fore.YELLOW)
|
||||
|
||||
def _truncate_text(self, text: str, max_length: int = None) -> str:
|
||||
"""Truncate text for display if needed"""
|
||||
if max_length is None:
|
||||
max_length = self.max_display_length
|
||||
|
||||
if max_length and len(text) > max_length:
|
||||
return text[:max_length] + "..."
|
||||
return text
|
||||
|
||||
def _check_ollama(self):
|
||||
"""Check if Ollama is running and get available models"""
|
||||
try:
|
||||
response = requests.get("http://localhost:11434/api/tags", timeout=5)
|
||||
if response.status_code == 200:
|
||||
models = response.json().get('models', [])
|
||||
model_names = [model.get('name') for model in models]
|
||||
|
||||
if self.verbose:
|
||||
self._print_success("Ollama is running")
|
||||
self._print_info(f"Available models: {', '.join(model_names)}")
|
||||
|
||||
# Verify our model is available
|
||||
if not any(self.model_name in name for name in model_names):
|
||||
self._print_warning(f"Model {self.model_name} not found, using first available")
|
||||
self.model_name = model_names[0] if model_names else "llama3:latest"
|
||||
|
||||
self._print_info(f"Using model: {self.model_name}")
|
||||
else:
|
||||
raise Exception("Ollama not responding properly")
|
||||
except Exception as e:
|
||||
self._print_error(f"Cannot connect to Ollama: {e}")
|
||||
self._print_info("Please ensure Ollama is running: ollama serve")
|
||||
raise
|
||||
|
||||
def _call_ollama(self, prompt: str, temperature: float = 0.7, max_tokens: int = 1000) -> str:
|
||||
"""Make a call to Ollama API with infinite timeout"""
|
||||
try:
|
||||
payload = {
|
||||
"model": self.model_name,
|
||||
"prompt": prompt,
|
||||
"stream": False,
|
||||
"options": {
|
||||
"temperature": temperature,
|
||||
"num_predict": max_tokens
|
||||
}
|
||||
}
|
||||
|
||||
# Set timeout to None for infinite timeout
|
||||
response = requests.post(
|
||||
"http://localhost:11434/api/generate",
|
||||
json=payload,
|
||||
timeout=None
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
return response.json().get('response', '')
|
||||
else:
|
||||
raise Exception(f"Ollama API error: {response.status_code}")
|
||||
|
||||
except Exception as e:
|
||||
self._print_error(f"Error calling Ollama: {e}")
|
||||
return f"Error: {e}"
|
||||
|
||||
def send_structured_message(
|
||||
self,
|
||||
sender: str,
|
||||
recipient: str,
|
||||
message: str,
|
||||
background: str = "",
|
||||
intermediate_output: str = ""
|
||||
) -> StructuredMessage:
|
||||
"""Send a structured message following the HierarchicalStructuredComm protocol"""
|
||||
structured_msg = StructuredMessage(
|
||||
message=message,
|
||||
background=background,
|
||||
intermediate_output=intermediate_output,
|
||||
sender=sender,
|
||||
recipient=recipient,
|
||||
timestamp=time.strftime("%Y-%m-%d %H:%M:%S")
|
||||
)
|
||||
|
||||
self.conversation_history.append(structured_msg)
|
||||
|
||||
if self.verbose:
|
||||
display_message = self._truncate_text(message, 100)
|
||||
self._print_info(f"{sender} -> {recipient}: {display_message}")
|
||||
|
||||
return structured_msg
|
||||
|
||||
def generate_content(self, task: str, context: str = "") -> str:
|
||||
"""Generate initial content using generator agent"""
|
||||
if self.verbose:
|
||||
self._print_subheader("Step 1: Generating initial content")
|
||||
|
||||
# Create structured message
|
||||
message = f"Generate comprehensive content for: {task}"
|
||||
background = f"Task: {task}\nContext: {context}\n\nProvide detailed, well-structured content."
|
||||
|
||||
self.send_structured_message(
|
||||
sender="Supervisor",
|
||||
recipient="Generator",
|
||||
message=message,
|
||||
background=background
|
||||
)
|
||||
|
||||
# Generate content
|
||||
prompt = f"""You are a Content Generator in a Hierarchical Structured Communication framework.
|
||||
|
||||
Task: {task}
|
||||
Context: {context}
|
||||
|
||||
Generate comprehensive, well-structured content that addresses the task thoroughly.
|
||||
Provide detailed explanations, examples, and insights.
|
||||
|
||||
Content:"""
|
||||
|
||||
result = self._call_ollama(prompt, temperature=0.7, max_tokens=1500)
|
||||
self.intermediate_outputs["generator"] = result
|
||||
|
||||
if self.verbose:
|
||||
self._print_info("Generated content:")
|
||||
print(result) # Print full content without truncation
|
||||
|
||||
return result
|
||||
|
||||
def evaluate_content(self, content: str, criteria: List[str] = None) -> List[EvaluationResult]:
|
||||
"""Evaluate content using hierarchical evaluation system"""
|
||||
if criteria is None:
|
||||
criteria = ["accuracy", "completeness", "clarity", "relevance"]
|
||||
|
||||
if self.verbose:
|
||||
self._print_subheader("Step 2: Hierarchical evaluation")
|
||||
|
||||
results = []
|
||||
|
||||
for criterion in criteria:
|
||||
if self.verbose:
|
||||
self._print_info(f" Evaluating {criterion}...")
|
||||
|
||||
# Create structured message for evaluator
|
||||
message = f"Evaluate content for {criterion} criterion"
|
||||
background = f"Content to evaluate: {content[:500]}...\nCriterion: {criterion}"
|
||||
|
||||
self.send_structured_message(
|
||||
sender="EvaluationSupervisor",
|
||||
recipient=f"{criterion.capitalize()}Evaluator",
|
||||
message=message,
|
||||
background=background,
|
||||
intermediate_output=content
|
||||
)
|
||||
|
||||
# Evaluate with specific criterion
|
||||
prompt = f"""You are a {criterion.capitalize()} Evaluator in a hierarchical evaluation system.
|
||||
|
||||
Content to evaluate:
|
||||
{content}
|
||||
|
||||
Evaluation criterion: {criterion}
|
||||
|
||||
Please provide:
|
||||
1. Score (0-10)
|
||||
2. Detailed feedback
|
||||
3. Confidence level (0-1)
|
||||
4. Specific suggestions for improvement
|
||||
|
||||
Evaluation:"""
|
||||
|
||||
evaluation_response = self._call_ollama(prompt, temperature=0.3, max_tokens=800)
|
||||
|
||||
# Parse evaluation (simplified parsing)
|
||||
score = 7.0 # Default score
|
||||
feedback = evaluation_response
|
||||
confidence = 0.8 # Default confidence
|
||||
|
||||
# Try to extract score from response
|
||||
if "score" in evaluation_response.lower():
|
||||
try:
|
||||
# Look for patterns like "score: 8" or "8/10"
|
||||
import re
|
||||
score_match = re.search(r'(\d+(?:\.\d+)?)/10|score[:\s]*(\d+(?:\.\d+)?)', evaluation_response.lower())
|
||||
if score_match:
|
||||
score = float(score_match.group(1) or score_match.group(2))
|
||||
except:
|
||||
pass
|
||||
|
||||
result = EvaluationResult(
|
||||
evaluator_name=f"{criterion.capitalize()}Evaluator",
|
||||
criterion=criterion,
|
||||
score=score,
|
||||
feedback=feedback,
|
||||
confidence=confidence
|
||||
)
|
||||
|
||||
results.append(result)
|
||||
|
||||
if self.verbose:
|
||||
self._print_info(f" Score: {score}/10")
|
||||
print(f" Feedback: {feedback}") # Print full feedback
|
||||
|
||||
self.evaluation_results.extend(results)
|
||||
return results
|
||||
|
||||
def refine_content(self, original_content: str, evaluation_results: List[EvaluationResult]) -> str:
|
||||
"""Refine content based on evaluation feedback"""
|
||||
if self.verbose:
|
||||
self._print_subheader("Step 3: Refining content")
|
||||
|
||||
# Create feedback summary
|
||||
feedback_summary = "\n\n".join([
|
||||
f"{result.criterion.capitalize()} (Score: {result.score}/10):\n{result.feedback}"
|
||||
for result in evaluation_results
|
||||
])
|
||||
|
||||
# Create structured message for refinement
|
||||
message = "Refine content based on evaluation feedback"
|
||||
background = f"Original content: {original_content[:500]}...\n\nEvaluation feedback:\n{feedback_summary}"
|
||||
|
||||
self.send_structured_message(
|
||||
sender="Supervisor",
|
||||
recipient="Refiner",
|
||||
message=message,
|
||||
background=background,
|
||||
intermediate_output=original_content
|
||||
)
|
||||
|
||||
# Refine content
|
||||
prompt = f"""You are a Content Refiner in a Hierarchical Structured Communication framework.
|
||||
|
||||
Original Content:
|
||||
{original_content}
|
||||
|
||||
Evaluation Feedback:
|
||||
{feedback_summary}
|
||||
|
||||
Please refine the content to address the feedback while maintaining its core strengths.
|
||||
Focus on the specific issues mentioned in the evaluation and provide improvements.
|
||||
|
||||
Refined Content:"""
|
||||
|
||||
refined_result = self._call_ollama(prompt, temperature=0.5, max_tokens=1500)
|
||||
self.intermediate_outputs["refiner"] = refined_result
|
||||
|
||||
if self.verbose:
|
||||
self._print_info("Refined content:")
|
||||
print(refined_result) # Print full content without truncation
|
||||
|
||||
return refined_result
|
||||
|
||||
def run_hierarchical_workflow(self, task: str, max_iterations: int = 3, quality_threshold: float = 8.0) -> Dict[str, Any]:
|
||||
"""Run the complete Hierarchical Structured Communication workflow"""
|
||||
self._print_header("Starting Hierarchical Structured Communication Workflow")
|
||||
self._print_info(f"Task: {task}")
|
||||
self._print_info(f"Max iterations: {max_iterations}")
|
||||
self._print_info(f"Quality threshold: {quality_threshold}")
|
||||
|
||||
start_time = time.time()
|
||||
current_content = None
|
||||
iteration = 0
|
||||
|
||||
for iteration in range(max_iterations):
|
||||
self._print_subheader(f"Iteration {iteration + 1}/{max_iterations}")
|
||||
|
||||
# Step 1: Generate/Refine content
|
||||
if iteration == 0:
|
||||
current_content = self.generate_content(task)
|
||||
else:
|
||||
current_content = self.refine_content(current_content, evaluation_results)
|
||||
|
||||
# Step 2: Evaluate content
|
||||
evaluation_results = self.evaluate_content(current_content)
|
||||
|
||||
# Step 3: Check quality threshold
|
||||
avg_score = sum(result.score for result in evaluation_results) / len(evaluation_results)
|
||||
self._print_info(f"Average evaluation score: {avg_score:.2f}/10")
|
||||
|
||||
if avg_score >= quality_threshold:
|
||||
self._print_success("Quality threshold met! Stopping refinement.")
|
||||
break
|
||||
|
||||
if iteration < max_iterations - 1:
|
||||
self._print_info("Continuing refinement...")
|
||||
|
||||
total_time = time.time() - start_time
|
||||
|
||||
return {
|
||||
"final_content": current_content,
|
||||
"total_iterations": iteration + 1,
|
||||
"average_score": avg_score,
|
||||
"evaluation_results": evaluation_results,
|
||||
"conversation_history": self.conversation_history,
|
||||
"intermediate_outputs": self.intermediate_outputs,
|
||||
"total_time": total_time
|
||||
}
|
||||
|
||||
def print_workflow_summary(self, result: Dict[str, Any]):
|
||||
"""Print a comprehensive summary of the workflow results"""
|
||||
self._print_header("TALK HIERARCHICAL WORKFLOW COMPLETED")
|
||||
|
||||
self._print_subheader("PERFORMANCE SUMMARY")
|
||||
self._print_info(f" Total iterations: {result['total_iterations']}")
|
||||
self._print_info(f" Final average score: {result['average_score']:.2f}/10")
|
||||
self._print_info(f" Total time: {result['total_time']:.2f} seconds")
|
||||
self._print_info(f" Messages exchanged: {len(result['conversation_history'])}")
|
||||
|
||||
self._print_subheader("FINAL CONTENT")
|
||||
print(result['final_content'])
|
||||
|
||||
self._print_subheader("EVALUATION RESULTS")
|
||||
for eval_result in result['evaluation_results']:
|
||||
self._print_info(f" {eval_result.criterion.capitalize()}: {eval_result.score}/10")
|
||||
print(f" Feedback: {eval_result.feedback}")
|
||||
|
||||
self._print_subheader("COMMUNICATION HISTORY")
|
||||
for i, msg in enumerate(result['conversation_history']):
|
||||
self._print_info(f" {i+1}. {msg.sender} -> {msg.recipient}")
|
||||
print(f" Message: {msg.message}")
|
||||
print(f" Background: {msg.background}")
|
||||
print(f" Intermediate Output: {msg.intermediate_output}")
|
||||
print(f" Time: {msg.timestamp}")
|
||||
|
||||
def test_basic_workflow():
|
||||
"""Test basic Hierarchical Structured Communication workflow"""
|
||||
print("Test 1: Basic Workflow")
|
||||
print("=" * 50)
|
||||
|
||||
framework = HierarchicalStructuredCommunicationFramework(model_name="llama3:latest", verbose=True)
|
||||
|
||||
task = "Explain the concept of neural networks and their applications in modern AI"
|
||||
|
||||
result = framework.run_hierarchical_workflow(
|
||||
task=task,
|
||||
max_iterations=2,
|
||||
quality_threshold=7.5
|
||||
)
|
||||
|
||||
framework.print_workflow_summary(result)
|
||||
return result
|
||||
|
||||
def test_complex_workflow():
|
||||
"""Test complex workflow with multiple iterations"""
|
||||
print("Test 2: Complex Workflow")
|
||||
print("=" * 50)
|
||||
|
||||
framework = HierarchicalStructuredCommunicationFramework(model_name="llama3:latest", verbose=True)
|
||||
|
||||
task = """Create a comprehensive guide on machine learning that covers:
|
||||
1. Basic concepts and definitions
|
||||
2. Types of machine learning (supervised, unsupervised, reinforcement)
|
||||
3. Common algorithms and their use cases
|
||||
4. Real-world applications and examples
|
||||
5. Future trends and challenges
|
||||
|
||||
Make it suitable for both beginners and intermediate learners."""
|
||||
|
||||
result = framework.run_hierarchical_workflow(
|
||||
task=task,
|
||||
max_iterations=3,
|
||||
quality_threshold=8.0
|
||||
)
|
||||
|
||||
framework.print_workflow_summary(result)
|
||||
return result
|
||||
|
||||
def test_structured_communication():
|
||||
"""Test structured communication protocol in isolation"""
|
||||
print("Test 3: Structured Communication Protocol")
|
||||
print("=" * 50)
|
||||
|
||||
framework = HierarchicalStructuredCommunicationFramework(model_name="llama3:latest", verbose=True)
|
||||
|
||||
# Test structured message exchange
|
||||
msg1 = framework.send_structured_message(
|
||||
sender="Supervisor",
|
||||
recipient="Generator",
|
||||
message="Generate content about renewable energy",
|
||||
background="Focus on solar and wind power",
|
||||
intermediate_output="Previous discussion covered climate change"
|
||||
)
|
||||
|
||||
msg2 = framework.send_structured_message(
|
||||
sender="Generator",
|
||||
recipient="Evaluator",
|
||||
message="Content ready for evaluation",
|
||||
background="Generated comprehensive guide on renewable energy",
|
||||
intermediate_output="Detailed explanation of solar and wind technologies"
|
||||
)
|
||||
|
||||
print("Structured Messages:")
|
||||
for i, msg in enumerate(framework.conversation_history):
|
||||
print(f"Message {i+1}:")
|
||||
print(f" From: {msg.sender}")
|
||||
print(f" To: {msg.recipient}")
|
||||
print(f" Message (M_ij): {msg.message}")
|
||||
print(f" Background (B_ij): {msg.background}")
|
||||
print(f" Intermediate Output (I_ij): {msg.intermediate_output}")
|
||||
print(f" Timestamp: {msg.timestamp}")
|
||||
|
||||
def test_quick_demo():
|
||||
"""Quick demonstration with smaller model and shorter prompts"""
|
||||
print("Test 4: Quick Demo")
|
||||
print("=" * 50)
|
||||
|
||||
# Use a smaller model for faster response
|
||||
framework = HierarchicalStructuredCommunicationFramework(model_name="llama3.2:3b", verbose=True)
|
||||
|
||||
task = "Explain what artificial intelligence is in simple terms"
|
||||
|
||||
result = framework.run_hierarchical_workflow(
|
||||
task=task,
|
||||
max_iterations=1,
|
||||
quality_threshold=6.0
|
||||
)
|
||||
|
||||
framework.print_workflow_summary(result)
|
||||
return result
|
||||
|
||||
def interactive_mode():
|
||||
"""Interactive mode for custom tasks"""
|
||||
print("Interactive Hierarchical Structured Communication Framework")
|
||||
print("=" * 50)
|
||||
|
||||
# Get user input
|
||||
model_name = input("Enter model name (default: llama3:latest): ").strip() or "llama3:latest"
|
||||
task = input("Enter your task: ").strip()
|
||||
|
||||
if not task:
|
||||
print("No task provided. Exiting.")
|
||||
return
|
||||
|
||||
max_iterations = input("Enter max iterations (default: 2): ").strip()
|
||||
max_iterations = int(max_iterations) if max_iterations.isdigit() else 2
|
||||
|
||||
quality_threshold = input("Enter quality threshold (default: 7.0): ").strip()
|
||||
quality_threshold = float(quality_threshold) if quality_threshold.replace('.', '').isdigit() else 7.0
|
||||
|
||||
# Create framework and run
|
||||
framework = HierarchicalStructuredCommunicationFramework(model_name=model_name, verbose=True)
|
||||
|
||||
result = framework.run_hierarchical_workflow(
|
||||
task=task,
|
||||
max_iterations=max_iterations,
|
||||
quality_threshold=quality_threshold
|
||||
)
|
||||
|
||||
framework.print_workflow_summary(result)
|
||||
return result
|
||||
|
||||
def main():
|
||||
"""Main CLI entry point"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Hierarchical Structured Communication Framework Test Suite",
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog="""
|
||||
Examples:
|
||||
python full_hierarchical_structured_communication_test.py --quick
|
||||
python full_hierarchical_structured_communication_test.py --interactive
|
||||
python full_hierarchical_structured_communication_test.py --model llama3.2:3b --task "Explain AI"
|
||||
python full_hierarchical_structured_communication_test.py --all
|
||||
"""
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--quick",
|
||||
action="store_true",
|
||||
help="Run quick demo test"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--basic",
|
||||
action="store_true",
|
||||
help="Run basic workflow test"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--complex",
|
||||
action="store_true",
|
||||
help="Run complex workflow test"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--communication",
|
||||
action="store_true",
|
||||
help="Run structured communication test"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--all",
|
||||
action="store_true",
|
||||
help="Run all tests"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--interactive",
|
||||
action="store_true",
|
||||
help="Run in interactive mode"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--model",
|
||||
type=str,
|
||||
default="llama3:latest",
|
||||
help="Ollama model to use (default: llama3:latest)"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--task",
|
||||
type=str,
|
||||
help="Custom task for single run"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--iterations",
|
||||
type=int,
|
||||
default=2,
|
||||
help="Maximum iterations (default: 2)"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--threshold",
|
||||
type=float,
|
||||
default=7.0,
|
||||
help="Quality threshold (default: 7.0)"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--no-color",
|
||||
action="store_true",
|
||||
help="Disable colored output"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--quiet",
|
||||
action="store_true",
|
||||
help="Disable verbose output (verbose is enabled by default)"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Disable colors if requested
|
||||
global COLORS_AVAILABLE
|
||||
if args.no_color:
|
||||
COLORS_AVAILABLE = False
|
||||
|
||||
# Print header
|
||||
if COLORS_AVAILABLE:
|
||||
print(f"{Fore.CYAN}{Style.BRIGHT}")
|
||||
print("=" * 80)
|
||||
print("TALK HIERARCHICAL FRAMEWORK TEST SUITE")
|
||||
print("=" * 80)
|
||||
print(f"{Style.RESET_ALL}")
|
||||
else:
|
||||
print("=" * 80)
|
||||
print("TALK HIERARCHICAL FRAMEWORK TEST SUITE")
|
||||
print("=" * 80)
|
||||
|
||||
print("Testing Hierarchical Structured Communication framework with Ollama")
|
||||
print("=" * 80)
|
||||
|
||||
try:
|
||||
if args.interactive:
|
||||
interactive_mode()
|
||||
elif args.task:
|
||||
# Single task run
|
||||
framework = HierarchicalStructuredCommunicationFramework(
|
||||
model_name=args.model,
|
||||
verbose=not args.quiet
|
||||
)
|
||||
result = framework.run_hierarchical_workflow(
|
||||
task=args.task,
|
||||
max_iterations=args.iterations,
|
||||
quality_threshold=args.threshold
|
||||
)
|
||||
framework.print_workflow_summary(result)
|
||||
elif args.quick:
|
||||
test_quick_demo()
|
||||
elif args.basic:
|
||||
test_basic_workflow()
|
||||
elif args.complex:
|
||||
test_complex_workflow()
|
||||
elif args.communication:
|
||||
test_structured_communication()
|
||||
elif args.all:
|
||||
# Run all tests
|
||||
test_quick_demo()
|
||||
test_basic_workflow()
|
||||
test_complex_workflow()
|
||||
test_structured_communication()
|
||||
else:
|
||||
# Default: run quick demo
|
||||
test_quick_demo()
|
||||
|
||||
print("All tests completed successfully!")
|
||||
print("Framework Features Demonstrated:")
|
||||
print(" Structured Communication Protocol (M_ij, B_ij, I_ij)")
|
||||
print(" Hierarchical Evaluation System")
|
||||
print(" Iterative Refinement Process")
|
||||
print(" Graph-based Agent Orchestration")
|
||||
print(" Local Ollama Integration")
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\nInterrupted by user")
|
||||
except Exception as e:
|
||||
print(f"Error during testing: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in new issue