Common Integration Pitfalls
Learn from others' mistakes! This guide covers the most common integration errors.
❌ Pitfall #1: Calling LLM Directly
The Mistake:
# ❌ WRONG!
import openai
from qwed import QWEDClient
# User calls LLM themselves
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "What is 2+2?"}]
)
# Then tries to verify
qwed = QWEDClient(api_key="...")
result = qwed.verify(response.content) # TOO LATE!
Why It's Wrong:
- 🚫 QWED can't control LLM prompting
- 🚫 No DSL enforcement
- 🚫 Vulnerable to prompt injection
- 🚫 Can't guarantee structured output
The Fix:
# ✅ CORRECT!
from qwed import QWEDClient
qwed = QWEDClient(api_key="...")
# Just call QWED directly
result = qwed.verify("What is 2+2?")
print(result.verified) # True
Rule: Let QWED handle the LLM internally.
❌ Pitfall #2: Trusting LLM Output Without Verification
The Mistake:
# ❌ DANGEROUS!
llm_calculation = llm.generate("Calculate loan payment for $50k at 5%")
# Use directly without verification
charge_customer(llm_calculation) # LAWSUIT WAITING TO HAPPEN!
Why It's Wrong:
- LLMs make mistakes (12% error rate in benchmarks)
- Financial errors = legal liability
- No audit trail
The Fix:
# ✅ SAFE!
result = qwed.verify("Calculate loan payment for $50k at 5%")
if result.verified:
charge_customer(result.value)
log_verification(result.evidence) # Audit trail
else:
alert_human_review(result.reason)
❌ Pitfall #3: Wrong Verification Method
The Mistake:
# ❌ WRONG METHOD!
code_to_verify = """
def login(username, password):
query = f"SELECT * FROM users WHERE name='{username}'"
"""
# Using general verify() instead of verify_code()
result = qwed.verify(code_to_verify) # Won't detect SQL injection!
Why It's Wrong:
- Different engines for different domains
verify()won't analyze code security- Misses vulnerabilities
The Fix:
# ✅ USE CORRECT METHOD!
result = qwed.verify_code(code_to_verify, language="python")
if result.blocked:
print(f"Security issue: {result.vulnerabilities}")
Available methods:
verify()- General (auto-detects domain)verify_math()- Mathematical expressionsverify_logic()- Logical statementsverify_code()- Code securityverify_sql()- SQL injectionverify_fact()- Fact checking
❌ Pitfall #4: Ignoring Verification Results
The Mistake:
# ❌ IGNORING ERRORS!
result = qwed.verify("Calculate 15% of 200")
# Using result without checking verification status
value = result.value # Might be wrong!
process_payment(value)
Why It's Wrong:
- Verification might have failed
- Using unverified data
- No error handling
The Fix:
# ✅ ALWAYS CHECK VERIFICATION STATUS!
result = qwed.verify("Calculate 15% of 200")
if result.verified:
# Safe to use
process_payment(result.value)
else:
# Handle failure
logger.error(f"Verification failed: {result.reason}")
notify_admin(result.trace)
use_fallback_method()
❌ Pitfall #5: Not Handling Errors
The Mistake:
# ❌ NO ERROR HANDLING!
result = qwed.verify("malformed input!!!@#$")
# Might crash or return unexpected result
Why It's Wrong:
- Network failures happen
- API quotas exist
- Invalid input exists
The Fix:
# ✅ PROPER ERROR HANDLING!
from qwed.exceptions import (
AuthenticationError,
ValidationError,
TimeoutError,
QuotaExceededError
)
try:
result = qwed.verify("your query")
if result.verified:
use_result(result.value)
else:
handle_failed_verification(result.reason)
except AuthenticationError:
logger.error("Invalid API key")
notify_admin("QWED authentication failed")
except QuotaExceededError:
logger.warning("QWED quota exceeded")
use_fallback_method()
except TimeoutError:
logger.warning("QWED timeout")
retry_with_backoff()
except ValidationError as e:
logger.error(f"Invalid input: {e}")
sanitize_and_retry()
❌ Pitfall #6: Missing API Key Configuration
The Mistake:
# ❌ HARDCODED API KEY!
client = QWEDClient(api_key="qwed_1234567890abcdef") # Committed to Git!
Why It's Wrong:
- Security risk (API key exposed)
- Can't change keys without code changes
- Different keys for dev/prod
The Fix:
# ✅ ENVIRONMENT VARIABLE!
import os
from qwed import QWEDClient
api_key = os.getenv("QWED_API_KEY")
if not api_key:
raise ValueError("QWED_API_KEY environment variable not set")
client = QWEDClient(api_key=api_key)
Or use config file:
# config.py
from dotenv import load_dotenv
import os
load_dotenv() # Load from .env file
QWED_API_KEY = os.getenv("QWED_API_KEY")
❌ Pitfall #7: Not Using Batch Processing
The Mistake:
# ❌ SLOW! (N individual API calls)
results = []
for query in queries: # 100 queries
result = qwed.verify(query) # 100 API calls!
results.append(result)
Why It's Wrong:
- Slow (sequential API calls)
- Expensive (more API credits)
- Poor user experience
The Fix:
# ✅ FAST! (1 batch API call)
from qwed import BatchItem
items = [
BatchItem(query=q, type="math")
for q in queries
]
result = qwed.verify_batch(items) # Single API call!
for item_result in result.items:
if item_result.verified:
process(item_result.value)
Performance comparison:
- Individual: 100 queries × 2s = 200s
- Batch: 1 request × 5s = 5s
- 40x faster!
❌ Pitfall #8: Wrong Timeout Settings
The Mistake:
# ❌ TOO SHORT!
client = QWEDClient(api_key="...", timeout=1) # 1 second!
result = client.verify("complex calculation") # Likely to timeout
Why It's Wrong:
- Complex queries need time
- Causes unnecessary failures
- Poor user experience
The Fix:
# ✅ REASONABLE TIMEOUT!
client = QWEDClient(
api_key="...",
timeout=30 # 30 seconds (default)
)
# Or per-request timeout
result = client.verify(
"complex query",
timeout=60 # Override for this request
)
Recommended timeouts:
- Simple queries: 10-15s
- Complex queries: 30-60s
- Batch processing: 60-120s
❌ Pitfall #9: Not Running Backend Server
The Mistake:
# ❌ WRONG - SDK without backend!
from qwed import QWEDClient
# Trying to use SDK directly
client = QWEDClient(api_key="qwed_123")
result = client.verify("2+2=4") # Connection refused!
Why It's Wrong:
- QWED requires a backend server
- SDK is just a client that connects to backend
- Backend needs YOUR LLM API keys
The Fix:
# ✅ Terminal 1: Run backend first
cd qwed-verification
cp .env.example .env
# Add your LLM API key to .env
python -m qwed_api
# ✅ Terminal 2: Then use SDK
python your_app.py
Correct SDK usage:
from qwed import QWEDClient
# Connect to local backend
client = QWEDClient(
api_key="qwed_local",
base_url="http://localhost:8000" # Your running backend!
)
result = client.verify("2+2=4")
Architecture:
Your App → SDK → Backend Server (YOU run) → LLM (YOUR key) → Verifiers
See: Getting Started for full backend setup
✅ Integration Checklist
Before deploying to production, verify:
- Backend server is running with your LLM API key configured
- Not calling LLM directly (QWED handles it)
- Using correct verification methods for each domain
- Checking
result.verifiedbefore using output - Proper error handling (try/except blocks)
- API key in environment variable (not hardcoded)
- Using batch processing for multiple queries
- Reasonable timeout settings
- Logging verification results for audit trails
- Testing integration (see Testing Guide)
- Monitoring QWED in production (see Monitoring)
Need Help?
Still stuck? We're here to help:
- 📖 Testing Guide - Validate your integration
- 💬 Community Support
- 📧 Enterprise Support: support@qwedai.com