Query Expansion API Reference
This document provides comprehensive API reference for the Query Expansion System.
Core Classes
QueryExpansionSystem
Main system for comprehensive query expansion.
from packages.rag.query_expansion import QueryExpansionSystem
system = QueryExpansionSystem(db_path="synonyms.db")
Methods
expand_query(query: str, context: ExpansionContext, enabled_strategies: Optional[List[ExpansionType]] = None) -> List[ExpansionResult]
Expand a query using multiple strategies.
Parameters:
query
(str): The query to expandcontext
(ExpansionContext): Expansion context with user informationenabled_strategies
(Optional[List[ExpansionType]]): Strategies to use for expansion
Returns:
List[ExpansionResult]
: List of expansion results
Example:
expansions = await system.expand_query(
query="API documentation",
context=expansion_context,
enabled_strategies=[ExpansionType.SYNONYM_EXPANSION, ExpansionType.ACRONYM_EXPANSION]
)
add_synonym(term: str, synonym: str, domain: str, source: SynonymSource, confidence: float = 0.8, context: Optional[str] = None, user_role: Optional[str] = None, department: Optional[str] = None) -> bool
Add a new synonym to the system.
Parameters:
term
(str): The original termsynonym
(str): The synonymdomain
(str): Domain contextsource
(SynonymSource): Source of the synonymconfidence
(float): Confidence score (0.0-1.0)context
(Optional[str]): Additional contextuser_role
(Optional[str]): User role restrictiondepartment
(Optional[str]): Department restriction
Returns:
bool
: Success status
record_feedback(expansion_result: ExpansionResult, user_id: str, was_helpful: bool, rating: Optional[int] = None, comment: Optional[str] = None)
Record user feedback on expansion effectiveness.
Parameters:
expansion_result
(ExpansionResult): The expansion resultuser_id
(str): User IDwas_helpful
(bool): Whether expansion was helpfulrating
(Optional[int]): Rating 1-5comment
(Optional[str]): User comment
ExpansionContext
Context for query expansion.
from packages.rag.query_expansion import ExpansionContext
context = ExpansionContext(
user_id="user123",
user_role="developer",
department="engineering",
domain="technical",
session_id="session123",
conversation_history=[],
available_documents=[],
user_preferences={},
expansion_settings={}
)
Fields
user_id
(str): User identifieruser_role
(str): User role (developer, manager, analyst, designer)department
(str): User departmentdomain
(str): Domain context (technical, business, general)session_id
(str): Session identifierconversation_history
(List[Dict[str, Any]]): Previous conversation contextavailable_documents
(List[Dict[str, Any]]): Available document contextuser_preferences
(Dict[str, Any]): User preferencesexpansion_settings
(Dict[str, Any]): Expansion configuration
ExpansionResult
Result of query expansion.
from packages.rag.query_expansion import ExpansionResult
result = ExpansionResult(
original_query="API documentation",
expanded_query="API documentation OR Application Programming Interface documentation",
expansion_type=ExpansionType.SYNONYM_EXPANSION,
synonyms_used=[synonym1, synonym2],
confidence_score=0.8,
relevance_score=0.9,
expansion_metadata={}
)
Fields
original_query
(str): Original query textexpanded_query
(str): Expanded query textexpansion_type
(ExpansionType): Type of expansion usedsynonyms_used
(List[Synonym]): Synonyms used in expansionconfidence_score
(float): Confidence score (0.0-1.0)relevance_score
(float): Relevance score (0.0-1.0)expansion_metadata
(Dict[str, Any]): Additional metadata
Enums
ExpansionType
Types of query expansion.
from packages.rag.query_expansion import ExpansionType
# Available types
ExpansionType.SYNONYM_EXPANSION # Synonym-based expansion
ExpansionType.ACRONYM_EXPANSION # Acronym resolution
ExpansionType.ABBREVIATION_EXPANSION # Abbreviation expansion
ExpansionType.DOMAIN_SPECIFIC # Domain-specific expansion
ExpansionType.CONTEXTUAL # Contextual expansion
ExpansionType.SEMANTIC # Semantic similarity expansion
SynonymSource
Sources of synonyms.
from packages.rag.query_expansion import SynonymSource
# Available sources
SynonymSource.MANUAL_CURATION # Manually curated
SynonymSource.USER_FEEDBACK # From user feedback
SynonymSource.ML_DISCOVERY # Machine learning discovery
SynonymSource.DOMAIN_EXPERT # Domain expert input
SynonymSource.COLLABORATIVE # Collaborative filtering
SynonymSource.EXTERNAL_API # External API
Analytics API
SynonymAnalytics
Analytics system for expansion monitoring.
from packages.rag.synonym_analytics import create_synonym_analytics
analytics = create_synonym_analytics("synonyms.db")
Methods
get_expansion_metrics(start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, domain: Optional[str] = None) -> ExpansionMetrics
Get comprehensive expansion metrics.
Parameters:
start_date
(Optional[datetime]): Start date filterend_date
(Optional[datetime]): End date filterdomain
(Optional[str]): Domain filter
Returns:
ExpansionMetrics
: Expansion effectiveness metrics
get_synonym_metrics(domain: Optional[str] = None) -> SynonymMetrics
Get synonym usage and effectiveness metrics.
Parameters:
domain
(Optional[str]): Domain filter
Returns:
SynonymMetrics
: Synonym usage metrics
get_user_behavior_metrics(start_date: Optional[datetime] = None, end_date: Optional[datetime] = None) -> UserBehaviorMetrics
Get user behavior and engagement metrics.
Parameters:
start_date
(Optional[datetime]): Start date filterend_date
(Optional[datetime]): End date filter
Returns:
UserBehaviorMetrics
: User behavior metrics
generate_analytics_report(start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, domain: Optional[str] = None) -> Dict[str, Any]
Generate comprehensive analytics report.
Parameters:
start_date
(Optional[datetime]): Start date filterend_date
(Optional[datetime]): End date filterdomain
(Optional[str]): Domain filter
Returns:
Dict[str, Any]
: Comprehensive analytics report
Management API
SynonymManagementSystem
Management system for synonym operations.
from packages.rag.synonym_management import create_synonym_management_system
management = create_synonym_management_system("synonyms.db")
Methods
add_synonym_entry(term: str, synonym: str, domain: str, created_by: str, confidence: float = 0.8, context: Optional[str] = None, user_role: Optional[str] = None, department: Optional[str] = None, tags: Optional[List[str]] = None, notes: Optional[str] = None, status: SynonymStatus = SynonymStatus.PENDING) -> Optional[int]
Add a new synonym entry.
Parameters:
term
(str): The original termsynonym
(str): The synonymdomain
(str): Domain contextcreated_by
(str): User who created the entryconfidence
(float): Confidence scorecontext
(Optional[str]): Additional contextuser_role
(Optional[str]): User role restrictiondepartment
(Optional[str]): Department restrictiontags
(Optional[List[str]]): Tags for categorizationnotes
(Optional[str]): Additional notesstatus
(SynonymStatus): Entry status
Returns:
Optional[int]
: Synonym entry ID if successful
get_synonym_entries(domain: Optional[str] = None, status: Optional[SynonymStatus] = None, user_role: Optional[str] = None, department: Optional[str] = None, limit: int = 100, offset: int = 0) -> List[SynonymEntry]
Get synonym entries with filtering.
Parameters:
domain
(Optional[str]): Domain filterstatus
(Optional[SynonymStatus]): Status filteruser_role
(Optional[str]): User role filterdepartment
(Optional[str]): Department filterlimit
(int): Maximum number of resultsoffset
(int): Result offset
Returns:
List[SynonymEntry]
: List of synonym entries
bulk_import_synonyms(file_path: str, import_format: str = "csv", created_by: str, domain: Optional[str] = None) -> BulkImportResult
Bulk import synonyms from file.
Parameters:
file_path
(str): Path to import fileimport_format
(str): Import format (csv, json)created_by
(str): User performing importdomain
(Optional[str]): Default domain
Returns:
BulkImportResult
: Import operation result
export_synonyms(output_path: str, export_format: str = "csv", domain: Optional[str] = None, status: Optional[SynonymStatus] = None) -> bool
Export synonyms to file.
Parameters:
output_path
(str): Output file pathexport_format
(str): Export format (csv, json)domain
(Optional[str]): Domain filterstatus
(Optional[SynonymStatus]): Status filter
Returns:
bool
: Success status
REST API Endpoints
Query Expansion
POST /query-expansion/expand
Expand a query using multiple strategies.
Request Body:
{
"query": "API documentation",
"user_id": "user123",
"user_role": "developer",
"department": "engineering",
"domain": "technical",
"session_id": "session123",
"enabled_strategies": ["synonym_expansion", "acronym_expansion"],
"expansion_settings": {
"max_expansions": 3,
"confidence_threshold": 0.7
}
}
Response:
{
"original_query": "API documentation",
"expanded_queries": [
{
"expanded_query": "API documentation OR Application Programming Interface documentation",
"expansion_type": "synonym_expansion",
"confidence_score": 0.9,
"relevance_score": 0.8,
"synonyms_used": [
{
"term": "API",
"synonym": "Application Programming Interface",
"confidence": 0.9
}
],
"metadata": {
"expanded_token": "API",
"synonym_count": 1
}
}
],
"expansion_metadata": {
"total_expansions": 1,
"strategies_used": ["synonym_expansion"],
"avg_confidence": 0.9
},
"success": true
}
POST /query-expansion/feedback
Submit user feedback on expansion effectiveness.
Request Body:
{
"expansion_id": "exp_123",
"was_helpful": true,
"rating": 5,
"comment": "Very helpful expansion"
}
Response:
{
"success": true,
"message": "Feedback recorded successfully"
}
Synonym Management
POST /query-expansion/synonyms
Add a new synonym.
Request Body:
{
"term": "ML",
"synonym": "Machine Learning",
"domain": "technical",
"confidence": 0.9,
"context": "artificial intelligence",
"user_role": "developer",
"department": "engineering",
"tags": ["ai", "learning"],
"notes": "Machine learning abbreviation"
}
Response:
{
"success": true,
"message": "Synonym added successfully",
"synonym_id": 123
}
GET /query-expansion/synonyms
Get synonyms with filtering.
Query Parameters:
domain
(optional): Domain filterstatus
(optional): Status filteruser_role
(optional): User role filterdepartment
(optional): Department filterlimit
(optional): Maximum results (default: 100)offset
(optional): Result offset (default: 0)
Response:
{
"synonyms": [
{
"id": 123,
"term": "API",
"synonym": "Application Programming Interface",
"domain": "technical",
"confidence": 0.9,
"relevance_score": 0.8,
"usage_count": 15,
"success_rate": 0.85,
"status": "active",
"created_by": "admin_user",
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"tags": ["programming", "interface"],
"notes": "Common programming interface"
}
],
"total": 1
}
Analytics
GET /query-expansion/analytics/expansion
Get expansion analytics.
Query Parameters:
start_date
(optional): Start date filterend_date
(optional): End date filterdomain
(optional): Domain filter
Response:
{
"metrics": {
"total_expansions": 1000,
"successful_expansions": 850,
"success_rate": 0.85,
"average_confidence": 0.78,
"average_relevance": 0.82,
"domain_breakdown": {
"technical": 600,
"business": 400
},
"user_satisfaction": 0.85,
"expansion_quality_score": 0.81
}
}
GET /query-expansion/analytics/report
Get comprehensive analytics report.
Query Parameters:
start_date
(optional): Start date filterend_date
(optional): End date filterdomain
(optional): Domain filter
Response:
{
"report_metadata": {
"generated_at": "2024-01-01T00:00:00Z",
"start_date": "2024-01-01T00:00:00Z",
"end_date": "2024-01-31T23:59:59Z",
"domain": "technical"
},
"expansion_metrics": {...},
"synonym_metrics": {...},
"user_behavior_metrics": {...},
"quality_metrics": {...},
"insights": [
{
"type": "positive",
"category": "expansion_effectiveness",
"message": "High expansion success rate: 85%",
"impact": "high"
}
],
"recommendations": [
{
"category": "expansion_optimization",
"priority": "high",
"action": "Improve expansion quality",
"description": "Focus on improving synonym confidence and relevance scoring",
"impact": "high"
}
]
}
Error Handling
All API endpoints return appropriate HTTP status codes and error messages:
200 OK
: Successful operation400 Bad Request
: Invalid request parameters401 Unauthorized
: Authentication required403 Forbidden
: Insufficient permissions404 Not Found
: Resource not found500 Internal Server Error
: Server error
Error responses include a detailed error message:
{
"error": "Invalid query parameter",
"message": "The 'query' parameter is required",
"code": "MISSING_QUERY_PARAMETER"
}