This guide covers the fundamental concepts and usage patterns of Sifaka.
Sifaka works through an iterative improvement loop:
For basic usage examples, see:
# Default critic (reflexion is used when none specified)
result = await improve("Explain quantum computing")
# Explicitly specify single critic
result = await improve(
"Explain quantum computing",
critics=["reflexion"] # Same as default
)
# Multiple critics
result = await improve(
"Explain quantum computing",
critics=["reflexion", "constitutional", "self_rag"]
)
from sifaka.validators import LengthValidator, ContentValidator
result = await improve(
"Write a product description",
validators=[
LengthValidator(min_length=100, max_length=200),
ContentValidator(required_terms=["features", "benefits"])
]
)
# More iterations for higher quality
result = await improve(
text="Draft email to client",
max_iterations=5 # Default is 3
)
# Force improvements even if validation passes
result = await improve(
text="Good text that passes validation",
force_improvements=True
)
The SifakaResult
object contains:
# Access the final improved text
print(result.final_text)
# See all critiques
for critique in result.critiques:
print(f"{critique.critic}: {critique.feedback}")
# Check validation results
for validation in result.validations:
print(f"{validation.validator}: {'✓' if validation.passed else '✗'}")
# View generation history
for generation in result.generations:
print(f"Generation: {generation.text[:100]}...")
# Get improvement summary
print(f"Iterations: {result.iteration}")
print(f"Improved: {result.final_text != result.original_text}")
print(f"Processing time: {result.processing_time:.2f}s")
from sifaka import Config
config = Config(
model="gpt-4",
temperature=0.7,
max_iterations=5,
force_improvements=True
)
result = await improve("Your text", config=config)
config = Config(
# Model settings
model="gpt-4", # LLM model to use
temperature=0.7, # Creativity (0.0-2.0)
max_tokens=1000, # Max response length
# Critic settings
critic_temperature=0.3, # Lower = more consistent
critic_context_window=3, # Previous critiques to consider
# Behavior settings
max_iterations=3, # Max improvement cycles
force_improvements=False, # Improve even if valid
timeout_seconds=300, # Overall timeout
)
from sifaka.core.exceptions import (
ValidationError,
CriticError,
ModelProviderError
)
try:
result = await improve(text)
except ValidationError as e:
print(f"Validation failed: {e}")
except CriticError as e:
print(f"Critic error: {e}")
except ModelProviderError as e:
print(f"LLM error: {e}")
print(f"Suggestion: {e.suggestion}")