diff --git a/optillm/__init__.py b/optillm/__init__.py
index 0aad5ab0..a2f8df7e 100644
--- a/optillm/__init__.py
+++ b/optillm/__init__.py
@@ -14,7 +14,8 @@
del _os.environ[_hf_token_var]
# Import from server module
-from .server import (
+from .server import ( # noqa: E402
+
main,
server_config,
app,
diff --git a/optillm/autothink/classifier.py b/optillm/autothink/classifier.py
index 261faaad..386e11c2 100644
--- a/optillm/autothink/classifier.py
+++ b/optillm/autothink/classifier.py
@@ -6,7 +6,7 @@
"""
import logging
-from typing import Dict, Any, Tuple, Optional, List, Union
+from typing import Tuple, List
import os
import sys
@@ -40,7 +40,6 @@ def _load_model(self):
except ImportError:
logger.info("Installing adaptive-classifier library...")
os.system(f"{sys.executable} -m pip install adaptive-classifier")
- import adaptive_classifier
# Import the AdaptiveClassifier class
from adaptive_classifier import AdaptiveClassifier
diff --git a/optillm/autothink/processor.py b/optillm/autothink/processor.py
index bade0fda..28e8b633 100644
--- a/optillm/autothink/processor.py
+++ b/optillm/autothink/processor.py
@@ -9,7 +9,7 @@
import random
import logging
from transformers import PreTrainedModel, PreTrainedTokenizer, DynamicCache
-from typing import Dict, List, Any, Optional, Union, Tuple
+from typing import Dict, List, Any, Tuple
from .classifier import ComplexityClassifier
from .steering import SteeringVectorManager, install_steering_hooks, remove_steering_hooks
diff --git a/optillm/autothink/steering.py b/optillm/autothink/steering.py
index 11facb8d..2e19043d 100644
--- a/optillm/autothink/steering.py
+++ b/optillm/autothink/steering.py
@@ -10,8 +10,7 @@
import random
import json
import datasets
-from typing import Dict, List, Any, Tuple, Optional, Union
-from collections import defaultdict
+from typing import Dict, List, Any, Tuple, Optional
logger = logging.getLogger(__name__)
@@ -540,7 +539,6 @@ def update_token_history(self, new_tokens: List[int]):
if random.random() < 0.01:
logger.debug(f"STEERING: Token history updated, now has {len(self.token_history)} tokens")
- def update_context(self, new_tokens: str):
"""
Update the context buffer with new tokens.
diff --git a/optillm/batching.py b/optillm/batching.py
index 2f761ec2..4ec90b56 100644
--- a/optillm/batching.py
+++ b/optillm/batching.py
@@ -17,7 +17,7 @@
import queue
import time
import logging
-from typing import Dict, List, Any, Tuple, Optional
+from typing import Dict, List, Any, Optional
from concurrent.futures import Future
from dataclasses import dataclass
diff --git a/optillm/bon.py b/optillm/bon.py
index e22ee188..cb39fb2d 100644
--- a/optillm/bon.py
+++ b/optillm/bon.py
@@ -1,5 +1,4 @@
import logging
-import optillm
from optillm import conversation_logger
logger = logging.getLogger(__name__)
diff --git a/optillm/cepo/cepo.py b/optillm/cepo/cepo.py
index be687244..1c5cd722 100644
--- a/optillm/cepo/cepo.py
+++ b/optillm/cepo/cepo.py
@@ -6,12 +6,10 @@
import time
import math_verify
-from optillm import conversation_logger
from collections import Counter
from concurrent.futures import ThreadPoolExecutor, as_completed
from dataclasses import dataclass
from typing import Literal, Any, Optional
-from cerebras.cloud.sdk import BadRequestError as CerebrasBadRequestError
from openai import BadRequestError as OpenAIBadRequestError
from openai import InternalServerError as OpenAIInternalServerError
@@ -325,7 +323,7 @@ def llm_call_reason_effort_fallback(
if len(reasoning_effort_levels) == 1 and bre.message.startswith("Error code: 400 - {'error': {'message': 'think value"):
logger.info(f"The think level {effort} was not supported by the model; Disabling thinking")
cepo_config.use_reasoning = False
- except (OpenAIBadRequestError, OpenAIInternalServerError) as e:
+ except (OpenAIBadRequestError, OpenAIInternalServerError):
# After 2 retries at this reasoning effort level it failed with error 400/500, lower level
logger.debug(f"400/500 persisted after retries at reasoning effort {effort}; degrading effort")
if logger.getEffectiveLevel() == logging.DEBUG:
@@ -491,9 +489,9 @@ def generate_single_plan(i):
messages.append({"role": "assistant", "content": response})
plans.append(response)
- cb_log[f"messages_planning_fallback_used"] = messages
+ cb_log["messages_planning_fallback_used"] = messages
if cepo_config.print_output:
- print(f"\nCePO: No plans generated successfully. Taking the fallback.\n")
+ print("\nCePO: No plans generated successfully. Taking the fallback.\n")
# Step 3 - Review and consolidate plans
plans_message = ""
@@ -575,7 +573,7 @@ def generate_single_plan(i):
cb_log["messages"] = messages
if cepo_config.print_output:
- print(f"\nCePO: Answer generated for one bestofn_n attempt.")
+ print("\nCePO: Answer generated for one bestofn_n attempt.")
return final_output, completion_tokens, cb_log
@@ -692,7 +690,7 @@ def run_single_completion(i):
cb_log[f"completion_{i}_completion_tokens"] = tokens_i
if cepo_config.print_output or logger.getEffectiveLevel() == logging.DEBUG:
- logger.debug(f"\nCePO: All Answers generated!")
+ logger.debug("\nCePO: All Answers generated!")
completions = [c if isinstance(c, str) else "" for c in completions]
return completions, completion_tokens, cb_log
@@ -882,7 +880,7 @@ def extract_answer_mathverify(response_str, last_n_chars=100):
try:
float(response_str)
return [float(response_str)]
- except:
+ except Exception:
response_str = response_str.split("", 1)[1] if "" in response_str else response_str
if last_n_chars is not None:
response_str = response_str[-last_n_chars:]
diff --git a/optillm/cot_decoding.py b/optillm/cot_decoding.py
index dbd880bf..0226daab 100644
--- a/optillm/cot_decoding.py
+++ b/optillm/cot_decoding.py
@@ -1,7 +1,6 @@
import torch
from transformers import PreTrainedModel, PreTrainedTokenizer
-from typing import List, Tuple, Dict, Optional
-import numpy as np
+from typing import List, Tuple, Dict
def get_device():
if torch.backends.mps.is_available():
diff --git a/optillm/cot_reflection.py b/optillm/cot_reflection.py
index 4596f6fa..a86998ec 100644
--- a/optillm/cot_reflection.py
+++ b/optillm/cot_reflection.py
@@ -1,7 +1,6 @@
import re
import logging
import optillm
-from optillm import conversation_logger
logger = logging.getLogger(__name__)
@@ -68,7 +67,7 @@ def cot_reflection(system_prompt, initial_query, client, model: str, return_full
thinking_match = re.search(r'(.*?)', full_response, re.DOTALL)
output_match = re.search(r'|$)', full_response, re.DOTALL)
- thinking = thinking_match.group(1).strip() if thinking_match else "No thinking process provided."
+ thinking_match.group(1).strip() if thinking_match else "No thinking process provided."
output = output_match.group(1).strip() if output_match else full_response
logger.info(f"Final output :\n{output}")
diff --git a/optillm/deepconf/confidence.py b/optillm/deepconf/confidence.py
index 1f7be1fd..2d9233f9 100644
--- a/optillm/deepconf/confidence.py
+++ b/optillm/deepconf/confidence.py
@@ -10,7 +10,7 @@
import torch
import torch.nn.functional as F
import numpy as np
-from typing import List, Dict, Tuple, Optional
+from typing import Dict, Optional
import logging
logger = logging.getLogger(__name__)
diff --git a/optillm/deepconf/processor.py b/optillm/deepconf/processor.py
index 14fc31fb..7a8667fb 100644
--- a/optillm/deepconf/processor.py
+++ b/optillm/deepconf/processor.py
@@ -10,11 +10,9 @@
import torch
import logging
-import random
-from typing import List, Dict, Any, Optional, Tuple
+from typing import List, Dict, Any, Tuple
from transformers import PreTrainedModel, PreTrainedTokenizer, DynamicCache
from collections import Counter, defaultdict
-import numpy as np
from .confidence import ConfidenceCalculator, ConfidenceThresholdCalibrator
@@ -125,7 +123,7 @@ def generate_single_trace(self, messages: List[Dict[str, str]],
kv_cache = outputs.past_key_values
# Calculate confidence for current token
- token_confidence = self.confidence_calculator.add_token_confidence(logits)
+ self.confidence_calculator.add_token_confidence(logits)
# Check for early termination (only after minimum trace length)
if (use_early_termination and
diff --git a/optillm/entropy_decoding.py b/optillm/entropy_decoding.py
index 3a768fcb..ad1066aa 100644
--- a/optillm/entropy_decoding.py
+++ b/optillm/entropy_decoding.py
@@ -1,7 +1,7 @@
import torch
import torch.nn.functional as F
from transformers import PreTrainedModel, PreTrainedTokenizer
-from typing import List, Tuple, Dict, Optional
+from typing import List, Tuple, Dict
import logging
# Set up logging
diff --git a/optillm/inference.py b/optillm/inference.py
index de4ebbb3..a47da043 100644
--- a/optillm/inference.py
+++ b/optillm/inference.py
@@ -7,7 +7,6 @@
from collections import OrderedDict, defaultdict
import torch.nn.functional as F
import torch.nn as nn
-import math
from transformers import AutoModelForCausalLM, AutoTokenizer, PreTrainedModel
from peft import PeftModel, PeftConfig
import bitsandbytes as bnb
@@ -17,7 +16,6 @@
import threading
import traceback
import platform
-import sys
import re
from optillm.cot_decoding import cot_decode
@@ -1069,11 +1067,9 @@ def _load_model():
# Check for flash attention availability
try:
import flash_attn
- has_flash_attn = True
logger.info("Flash Attention 2 is available")
model_kwargs["attn_implementation"] = "flash_attention_2"
except ImportError:
- has_flash_attn = False
logger.info("Flash Attention 2 is not installed - falling back to default attention")
elif 'mps' in device:
@@ -1155,7 +1151,7 @@ def _get_adapter_name(self, adapter_id: str) -> str:
def validate_adapter(self, adapter_id: str) -> bool:
"""Validate if adapter exists and is compatible"""
try:
- config = PeftConfig.from_pretrained(
+ PeftConfig.from_pretrained(
adapter_id,
trust_remote_code=True,
token=os.getenv("HF_TOKEN")
@@ -1591,8 +1587,8 @@ def process_batch(
for i in range(0, len(formatted_prompts), self.optimal_batch_size):
batch_prompts = formatted_prompts[i:i + self.optimal_batch_size]
- batch_system = system_prompts[i:i + self.optimal_batch_size]
- batch_user = user_prompts[i:i + self.optimal_batch_size]
+ system_prompts[i:i + self.optimal_batch_size]
+ user_prompts[i:i + self.optimal_batch_size]
# Check cache first if enabled
if self.model_config.enable_prompt_caching:
diff --git a/optillm/leap.py b/optillm/leap.py
index f5f54a85..9e76d1ec 100644
--- a/optillm/leap.py
+++ b/optillm/leap.py
@@ -3,7 +3,6 @@
from typing import List, Tuple
import json
import optillm
-from optillm import conversation_logger
# Setup logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
diff --git a/optillm/litellm_wrapper.py b/optillm/litellm_wrapper.py
index 7bd93543..ed29a108 100644
--- a/optillm/litellm_wrapper.py
+++ b/optillm/litellm_wrapper.py
@@ -1,9 +1,8 @@
-import os
import time
import litellm
from litellm import completion
from litellm.utils import get_valid_models
-from typing import List, Dict, Any, Optional
+from typing import List, Dict, Optional
# Configure litellm to drop unsupported parameters
litellm.drop_params = True
diff --git a/optillm/mars/agent.py b/optillm/mars/agent.py
index 704c33d3..f313f103 100644
--- a/optillm/mars/agent.py
+++ b/optillm/mars/agent.py
@@ -5,7 +5,6 @@
import logging
from typing import Dict, Any, Tuple
from datetime import datetime
-import random
from .prompts import (
MATHEMATICAL_SYSTEM_PROMPT,
AGENT_EXPLORATION_PROMPT,
diff --git a/optillm/mars/mars.py b/optillm/mars/mars.py
index 5ca3c9ce..499edd58 100644
--- a/optillm/mars/mars.py
+++ b/optillm/mars/mars.py
@@ -5,16 +5,13 @@
import asyncio
import logging
from typing import Dict, Any, List, Tuple
-from datetime import datetime
from concurrent.futures import ThreadPoolExecutor
import time
-import re
from collections import Counter
-import optillm
from optillm import conversation_logger
from optillm.utils.answer_extraction import extract_answer
-from .workspace import MARSWorkspace, AgentSolution
+from .workspace import MARSWorkspace
from .agent import MARSAgent
from .verifier import MARSVerifier
from .aggregator import MARSAggregator
@@ -117,7 +114,7 @@ async def _run_mars_parallel(
config = LIGHTWEIGHT_CONFIG.copy() if use_lightweight else DEFAULT_CONFIG.copy()
if use_lightweight:
- logger.info(f"⚡ CONFIG: Using LIGHTWEIGHT MARS config for coding (fast mode)")
+ logger.info("⚡ CONFIG: Using LIGHTWEIGHT MARS config for coding (fast mode)")
# Override with mars_config if provided
if request_config and 'mars_config' in request_config:
@@ -133,7 +130,7 @@ async def _run_mars_parallel(
logger.info(f"⚙️ CONFIG: Using default max_tokens: {config['max_tokens']}")
# Log complete configuration
- logger.info(f"⚙️ CONFIG: Full MARS configuration:")
+ logger.info("⚙️ CONFIG: Full MARS configuration:")
for key, value in config.items():
logger.info(f"⚙️ CONFIG: {key}: {value}")
@@ -181,7 +178,7 @@ async def _run_mars_parallel(
# Phase 2a: RSA-inspired Aggregation (if enabled)
if config.get('enable_aggregation', True):
phase_start = time.time()
- logger.info(f"📊 PHASE 2a: RSA-inspired Solution Aggregation")
+ logger.info("📊 PHASE 2a: RSA-inspired Solution Aggregation")
aggregator = MARSAggregator(client, model, config)
aggregation_tokens, aggregation_summary = await aggregator.run_aggregation_loops(
workspace, request_id, executor
@@ -193,7 +190,7 @@ async def _run_mars_parallel(
# Phase 2b: Cross-Agent Strategy Sharing (if enabled)
if config.get('enable_strategy_network', True):
phase_start = time.time()
- logger.info(f"📊 PHASE 2b: Cross-Agent Strategy Network")
+ logger.info("📊 PHASE 2b: Cross-Agent Strategy Network")
strategy_network = StrategyNetwork(client, model, config)
# Extract reasoning strategies from agent solutions
@@ -204,7 +201,7 @@ async def _run_mars_parallel(
# Share strategies across agents and generate enhanced solutions
if config.get('cross_agent_enhancement', True) and extracted_strategies:
- strategy_sharing_summary = await strategy_network.share_strategies_across_agents(
+ await strategy_network.share_strategies_across_agents(
workspace, extracted_strategies, request_id, executor
)
@@ -270,14 +267,14 @@ async def _run_mars_parallel(
total_time = time.time() - start_time
summary = workspace.get_summary()
- logger.info(f"🏁 MARS COMPLETION SUMMARY:")
+ logger.info("🏁 MARS COMPLETION SUMMARY:")
logger.info(f"🏁 Total execution time: {total_time:.2f}s")
logger.info(f"🏁 Solutions: {summary['verified_solutions']}/{summary['total_solutions']} verified")
logger.info(f"🏁 Total reasoning tokens: {total_reasoning_tokens}")
logger.info(f"🏁 Final solution length: {len(final_solution)} characters")
# Log phase timing breakdown
- logger.info(f"🏁 TIMING BREAKDOWN:")
+ logger.info("🏁 TIMING BREAKDOWN:")
for phase, duration in phase_times.items():
percentage = (duration / total_time) * 100
logger.info(f"🏁 {phase}: {duration:.2f}s ({percentage:.1f}%)")
@@ -306,7 +303,7 @@ async def _run_mars_parallel(
logger.warning(f"⚠️ Falling back to raw synthesis output ({len(final_solution)} chars)")
return final_solution, total_reasoning_tokens
else:
- logger.info(f"📝 ANSWER EXTRACTION: Thinking tags disabled, returning raw synthesis")
+ logger.info("📝 ANSWER EXTRACTION: Thinking tags disabled, returning raw synthesis")
return final_solution, total_reasoning_tokens
except Exception as e:
@@ -319,7 +316,7 @@ async def _run_mars_parallel(
fallback_agent = MARSAgent(0, client, model, config)
fallback_solution, fallback_tokens = fallback_agent.generate_solution(initial_query, request_id)
return fallback_solution.solution, fallback_tokens
- except:
+ except Exception:
return error_response, 0
async def _run_exploration_phase_parallel(
@@ -456,7 +453,7 @@ def _synthesize_final_solution(
answer_counts = Counter([ans for ans, _ in numerical_answers])
most_common_answers = answer_counts.most_common()
- logger.info(f"🗳️ VOTING: Answer distribution:")
+ logger.info("🗳️ VOTING: Answer distribution:")
for answer, count in most_common_answers:
percentage = (count / len(numerical_answers)) * 100
agents_with_answer = [sol.agent_id for ans, sol in numerical_answers if ans == answer]
@@ -482,7 +479,7 @@ def _synthesize_final_solution(
logger.info(f"🗳️ VOTING: Insufficient numerical answers for voting ({len(numerical_answers)} < 2)")
# If no consensus, fall back to synthesis with answer preservation
- logger.info(f"🤔 VOTING FALLBACK: No numerical consensus found, falling back to answer-preserving synthesis")
+ logger.info("🤔 VOTING FALLBACK: No numerical consensus found, falling back to answer-preserving synthesis")
# Log extracted answers for synthesis guidance
all_extracted = getattr(workspace, '_extracted_answers_info', [])
@@ -491,7 +488,7 @@ def _synthesize_final_solution(
for answer, solution, method in all_extracted:
logger.info(f"🔍 EXTRACTED ANSWERS SUMMARY: '{answer}' from Agent {solution.agent_id} via {method}")
else:
- logger.info(f"🔍 EXTRACTED ANSWERS SUMMARY: No extracted answers found")
+ logger.info("🔍 EXTRACTED ANSWERS SUMMARY: No extracted answers found")
synthesis_data = workspace.get_synthesis_input()
@@ -590,7 +587,7 @@ def _synthesize_final_solution(
reasoning_tokens = getattr(response.usage, 'reasoning_tokens', 0)
# ENHANCED LOGGING: Log synthesis details
- logger.info(f"🤝 SYNTHESIS SUCCESS: Synthesis completed")
+ logger.info("🤝 SYNTHESIS SUCCESS: Synthesis completed")
logger.info(f"🤝 SYNTHESIS SUCCESS: Output solution length: {len(final_solution)} characters")
logger.info(f"🤝 SYNTHESIS SUCCESS: Reasoning tokens: {reasoning_tokens}")
logger.info(f"🤝 SYNTHESIS SUCCESS: Total tokens: {total_tokens}")
@@ -607,7 +604,7 @@ def _synthesize_final_solution(
logger.info(f"🚑 SYNTHESIS FALLBACK: Solution length: {len(fallback_solution.solution):,} chars, score: {fallback_solution.verification_score:.2f}")
return fallback_solution.solution, 0
- logger.error(f"🚨 SYNTHESIS ERROR: No solutions available for fallback")
+ logger.error("🚨 SYNTHESIS ERROR: No solutions available for fallback")
return "Unable to generate solution due to synthesis failure.", 0
def _log_solution_overview(workspace: MARSWorkspace):
@@ -619,7 +616,7 @@ def _log_solution_overview(workspace: MARSWorkspace):
avg_chars = total_chars / len(workspace.solutions) if workspace.solutions else 0
verified_solutions = workspace.get_verified_solutions()
- logger.info(f"📋 SOLUTION OVERVIEW: Statistics:")
+ logger.info("📋 SOLUTION OVERVIEW: Statistics:")
logger.info(f"📋 SOLUTION OVERVIEW: Total solutions: {len(workspace.solutions)}")
logger.info(f"📋 SOLUTION OVERVIEW: Verified solutions: {len(verified_solutions)}")
logger.info(f"📋 SOLUTION OVERVIEW: Total characters: {total_chars:,}")
diff --git a/optillm/mars/verifier.py b/optillm/mars/verifier.py
index 85b1bd17..055a64b3 100644
--- a/optillm/mars/verifier.py
+++ b/optillm/mars/verifier.py
@@ -4,10 +4,10 @@
import asyncio
import logging
-from typing import Dict, List, Any, Tuple
+from typing import Dict, List, Any
from datetime import datetime
from concurrent.futures import ThreadPoolExecutor
-from .workspace import MARSWorkspace, AgentSolution, VerificationResult
+from .workspace import MARSWorkspace, AgentSolution
from .agent import MARSAgent
logger = logging.getLogger(__name__)
diff --git a/optillm/mcts.py b/optillm/mcts.py
index 2baf35b3..aba72fdd 100644
--- a/optillm/mcts.py
+++ b/optillm/mcts.py
@@ -3,7 +3,6 @@
import numpy as np
import networkx as nx
from typing import List, Dict
-import optillm
from optillm import conversation_logger
logger = logging.getLogger(__name__)
@@ -94,7 +93,7 @@ def search(self, initial_state: DialogueState, num_simulations: int) -> Dialogue
if not self.root:
self.root = MCTSNode(initial_state)
self.graph.add_node(id(self.root))
- self.node_labels[id(self.root)] = f"Root\nVisits: 0\nValue: 0.00"
+ self.node_labels[id(self.root)] = "Root\nVisits: 0\nValue: 0.00"
logger.debug("Created root node")
for i in range(num_simulations):
diff --git a/optillm/moa.py b/optillm/moa.py
index 6f5f9ad7..b0444c15 100644
--- a/optillm/moa.py
+++ b/optillm/moa.py
@@ -1,5 +1,4 @@
import logging
-import optillm
from optillm import conversation_logger
logger = logging.getLogger(__name__)
diff --git a/optillm/plansearch.py b/optillm/plansearch.py
index 85e91a7e..6a6120b8 100644
--- a/optillm/plansearch.py
+++ b/optillm/plansearch.py
@@ -1,7 +1,6 @@
import logging
from typing import List, Tuple
import optillm
-from optillm import conversation_logger
logger = logging.getLogger(__name__)
diff --git a/optillm/plugins/coc_plugin.py b/optillm/plugins/coc_plugin.py
index 3db92e91..be6240f8 100644
--- a/optillm/plugins/coc_plugin.py
+++ b/optillm/plugins/coc_plugin.py
@@ -18,12 +18,8 @@
import re
import logging
-from typing import Tuple, Dict, Any, List
+from typing import Tuple, Any, List
import ast
-import traceback
-import math
-import importlib
-import json
import nbformat
from nbconvert.preprocessors import ExecutePreprocessor
import os
@@ -222,7 +218,7 @@ def execute_code(code: str) -> Tuple[Any, str]:
# Clean up temporary file
try:
os.unlink(tmp_name)
- except:
+ except Exception:
pass
except Exception as e:
@@ -274,7 +270,7 @@ def simulate_execution(code: str, error: str, client, model: str) -> Tuple[Any,
# Try to convert to appropriate type
try:
answer = ast.literal_eval(result)
- except:
+ except Exception:
answer = result
logger.info(f"Simulation successful. Result: {answer}")
return answer, response.usage.completion_tokens
diff --git a/optillm/plugins/deep_research/research_engine.py b/optillm/plugins/deep_research/research_engine.py
index d36cb6bb..61c39200 100644
--- a/optillm/plugins/deep_research/research_engine.py
+++ b/optillm/plugins/deep_research/research_engine.py
@@ -8,13 +8,10 @@
through denoising and retrieval, generating comprehensive research reports.
"""
-import asyncio
-import json
import re
-from typing import Tuple, List, Dict, Optional, Any
+from typing import Tuple, List, Dict, Any
from datetime import datetime
-from collections import defaultdict
-from optillm.plugins.web_search_plugin import run as web_search_run, BrowserSessionManager
+from optillm.plugins.web_search_plugin import run as web_search_run
from optillm.plugins.readurls_plugin import run as readurls_run
from optillm.plugins.deep_research.session_state import get_session_manager, close_session
import uuid
@@ -442,7 +439,7 @@ def decompose_query(self, system_prompt: str, initial_query: str) -> List[str]:
return queries[:5] # Limit to 5 sub-queries
- except Exception as e:
+ except Exception:
# Fallback: use original query
return [initial_query]
@@ -593,7 +590,7 @@ def evaluate_completeness(self, system_prompt: str, query: str, current_synthesi
return is_complete, missing_aspects
- except Exception as e:
+ except Exception:
# Default to not complete on error
return False, ["Error in evaluation"]
@@ -744,7 +741,7 @@ def analyze_draft_gaps(self, current_draft: str, original_query: str) -> List[Di
return gaps
- except Exception as e:
+ except Exception:
# Fallback: create basic gaps from the draft
return [{
'id': '1',
@@ -795,7 +792,7 @@ def perform_gap_targeted_search(self, gaps: List[Dict[str, str]]) -> str:
gap_context = f"[ADDRESSING GAP: {gap.get('section', 'Unknown')} - {gap.get('specific_need', 'General research')}]\n"
all_results.append(gap_context + enhanced_query)
- except Exception as e:
+ except Exception:
continue
return "\n\n".join(all_results) if all_results else "No gap-targeted search results obtained"
@@ -930,7 +927,7 @@ def evaluate_draft_quality(self, draft: str, previous_draft: str, original_query
return scores
- except Exception as e:
+ except Exception:
# Default scores
return {
'completeness': 0.5,
@@ -1192,7 +1189,7 @@ def finalize_research_report(self, system_prompt: str, original_query: str, fina
# Validate citation usage before adding references
citation_validation = validate_citation_usage(polished_report, len(self.citations))
- print(f"📊 Citation Statistics:")
+ print("📊 Citation Statistics:")
print(f" - Used citations: {citation_validation['citations_used']}/{citation_validation['citations_total']}")
print(f" - Usage percentage: {citation_validation['usage_percentage']:.1f}%")
@@ -1217,7 +1214,7 @@ def finalize_research_report(self, system_prompt: str, original_query: str, fina
# Add TTD-DR metadata
metadata = "\n---\n\n**TTD-DR Research Metadata:**\n"
- metadata += f"- Algorithm: Test-Time Diffusion Deep Researcher\n"
+ metadata += "- Algorithm: Test-Time Diffusion Deep Researcher\n"
metadata += f"- Denoising iterations: {len(self.draft_history) - 1}\n"
metadata += f"- Total gaps addressed: {sum(len(gaps) for gaps in self.gap_analysis_history)}\n"
metadata += f"- Total sources consulted: {len(self.citations)}\n"
diff --git a/optillm/plugins/deep_research/session_state.py b/optillm/plugins/deep_research/session_state.py
index 7a1331a3..a16d1e6e 100644
--- a/optillm/plugins/deep_research/session_state.py
+++ b/optillm/plugins/deep_research/session_state.py
@@ -89,7 +89,7 @@ def _cleanup_old_sessions(self):
if session_id in self._sessions:
try:
self._sessions[session_id].close()
- except:
+ except Exception:
pass
del self._sessions[session_id]
del self._session_timestamps[session_id]
diff --git a/optillm/plugins/deep_research_plugin.py b/optillm/plugins/deep_research_plugin.py
index 75a58f0f..df38ba24 100644
--- a/optillm/plugins/deep_research_plugin.py
+++ b/optillm/plugins/deep_research_plugin.py
@@ -29,7 +29,6 @@ def __init__(self, client, timeout=1800.0, max_retries=0):
def _detect_client_type(self):
"""Detect the type of client based on class name"""
class_name = self.client.__class__.__name__
- module_name = self.client.__class__.__module__
# Check for OpenAI-compatible clients (OpenAI, Cerebras, AzureOpenAI)
if 'OpenAI' in class_name or 'Cerebras' in class_name:
diff --git a/optillm/plugins/deepthink/self_discover.py b/optillm/plugins/deepthink/self_discover.py
index 5564cf99..2e4e6a9e 100644
--- a/optillm/plugins/deepthink/self_discover.py
+++ b/optillm/plugins/deepthink/self_discover.py
@@ -8,7 +8,7 @@
import json
import logging
import re
-from typing import List, Dict, Any, Tuple
+from typing import List, Dict, Any
from .reasoning_modules import get_all_modules, get_module_descriptions
logger = logging.getLogger(__name__)
@@ -295,7 +295,7 @@ def _parse_json_structure(self, response_text: str) -> Dict[str, Any]:
logger.debug(f"Strategy {i} failed: {e}")
continue
- logger.warning(f"All JSON parsing strategies failed. Using fallback structure.")
+ logger.warning("All JSON parsing strategies failed. Using fallback structure.")
logger.debug(f"Raw response that failed to parse: {response_text[:500]}...")
return fallback_structure
@@ -347,7 +347,7 @@ def _extract_json_strategy_3(self, text: str) -> Dict[str, Any]:
json_str = match.group(1).strip()
try:
return json.loads(json_str)
- except:
+ except (json.JSONDecodeError, ValueError):
continue
raise ValueError("No valid JSON found in code blocks")
diff --git a/optillm/plugins/deepthink/uncertainty_cot.py b/optillm/plugins/deepthink/uncertainty_cot.py
index d9e056c7..964aa870 100644
--- a/optillm/plugins/deepthink/uncertainty_cot.py
+++ b/optillm/plugins/deepthink/uncertainty_cot.py
@@ -7,8 +7,7 @@
import re
import logging
-import json
-from typing import List, Dict, Any, Tuple
+from typing import List, Dict, Any
from collections import Counter
from difflib import SequenceMatcher
diff --git a/optillm/plugins/executecode_plugin.py b/optillm/plugins/executecode_plugin.py
index 8e8a8ce5..6952d02d 100644
--- a/optillm/plugins/executecode_plugin.py
+++ b/optillm/plugins/executecode_plugin.py
@@ -4,7 +4,6 @@
from nbconvert.preprocessors import ExecutePreprocessor
import os
import tempfile
-import json
SLUG = "executecode"
diff --git a/optillm/plugins/genselect_plugin.py b/optillm/plugins/genselect_plugin.py
index f78aac3d..3d8fe026 100644
--- a/optillm/plugins/genselect_plugin.py
+++ b/optillm/plugins/genselect_plugin.py
@@ -11,8 +11,7 @@
"""
import logging
-from typing import Tuple, Dict, Any, List, Optional
-import json
+from typing import Tuple, Dict, Any, List
logger = logging.getLogger(__name__)
@@ -249,7 +248,7 @@ def run(
# Get the selected candidate
selected_candidate = candidates[selected_index]
- logger.info(f"GenSelect Summary:")
+ logger.info("GenSelect Summary:")
logger.info(f" - Generated {len(candidates)} candidates")
logger.info(f" - Selected candidate {selected_index + 1}")
logger.info(f" - Total tokens used: {total_tokens}")
diff --git a/optillm/plugins/json_plugin.py b/optillm/plugins/json_plugin.py
index c686859e..648ecd32 100644
--- a/optillm/plugins/json_plugin.py
+++ b/optillm/plugins/json_plugin.py
@@ -127,7 +127,7 @@ def extract_schema_from_response_format(response_format: Dict[str, Any]) -> Opti
return json.dumps(schema_data["schema"])
return json.dumps(schema_data)
- logger.warning(f"Could not extract valid schema from response_format")
+ logger.warning("Could not extract valid schema from response_format")
return None
except Exception as e:
logger.error(f"Error extracting schema from response_format: {str(e)}")
diff --git a/optillm/plugins/longcepo/chunking.py b/optillm/plugins/longcepo/chunking.py
index 37dd5f13..9463b12d 100644
--- a/optillm/plugins/longcepo/chunking.py
+++ b/optillm/plugins/longcepo/chunking.py
@@ -216,7 +216,7 @@ def split_into_granular_chunks(
new_last_chunk = new_sentences[end] + new_last_chunk
end -= 1
flag = True
- if flag == False:
+ if not flag:
break
if start < end:
# If there is any unallocated part, split it by punctuation or space and then allocate it
diff --git a/optillm/plugins/longcepo/mapreduce.py b/optillm/plugins/longcepo/mapreduce.py
index 66497afb..4fd360c3 100644
--- a/optillm/plugins/longcepo/mapreduce.py
+++ b/optillm/plugins/longcepo/mapreduce.py
@@ -14,7 +14,8 @@
get_prompt_length,
)
-format_chunk_list = lambda chunk_list: [
+def format_chunk_list(chunk_list):
+ return [
f"Information of Chunk {index}:\n{doc}\n" for index, doc in enumerate(chunk_list)
]
diff --git a/optillm/plugins/longcepo/utils.py b/optillm/plugins/longcepo/utils.py
index cd3a3c69..f8a4e4b4 100644
--- a/optillm/plugins/longcepo/utils.py
+++ b/optillm/plugins/longcepo/utils.py
@@ -78,7 +78,8 @@ def concurrent_map(
Tuple[List[str], CBLog]: List of responses (in original order) and updated log object.
"""
result = [None] * len(context_chunks)
- wrapped_gen_function = lambda index, *args: (index, gen_function(*args))
+ def wrapped_gen_function(index, *args):
+ return (index, gen_function(*args))
with ThreadPoolExecutor(max_workers=workers) as executor:
future_to_idx = {}
for idx, chunk in enumerate(context_chunks):
diff --git a/optillm/plugins/majority_voting_plugin.py b/optillm/plugins/majority_voting_plugin.py
index b7ee484b..af29c951 100644
--- a/optillm/plugins/majority_voting_plugin.py
+++ b/optillm/plugins/majority_voting_plugin.py
@@ -7,7 +7,7 @@
import re
import logging
-from typing import Tuple, Dict, Any, List, Optional
+from typing import Tuple, Dict, Any
from collections import Counter
logger = logging.getLogger(__name__)
diff --git a/optillm/plugins/mcp_plugin.py b/optillm/plugins/mcp_plugin.py
index 49983eeb..065c05c7 100644
--- a/optillm/plugins/mcp_plugin.py
+++ b/optillm/plugins/mcp_plugin.py
@@ -9,12 +9,8 @@
import json
import logging
import asyncio
-import sys
-import time
-import re
import shutil
-import subprocess
-from typing import Dict, List, Any, Optional, Tuple, Set, Union, Callable
+from typing import Dict, List, Any, Optional, Tuple
from dataclasses import dataclass
from pathlib import Path
import traceback
@@ -23,7 +19,6 @@
from mcp.client.stdio import stdio_client
from mcp.client.sse import sse_client
from mcp.client.websocket import websocket_client
-import mcp.types as types
from mcp.shared.exceptions import McpError
# Configure logging
@@ -61,14 +56,14 @@ def log_mcp_message(direction: str, method: str, params: Any = None, result: Any
try:
params_str = json.dumps(params, indent=2)
message_parts.append(f"Params: {params_str}")
- except:
+ except (TypeError, ValueError):
message_parts.append(f"Params: {params}")
if result:
try:
result_str = json.dumps(result, indent=2)
message_parts.append(f"Result: {result_str}")
- except:
+ except (TypeError, ValueError):
message_parts.append(f"Result: {result}")
if error:
@@ -453,13 +448,13 @@ async def log_stdout():
asyncio.create_task(log_stdout())
# Wait a bit for the server to start up
- logger.debug(f"Waiting for server to start up...")
+ logger.debug("Waiting for server to start up...")
await asyncio.sleep(2)
# Use the MCP client with proper context management
logger.debug(f"Establishing MCP client connection to {self.server_name}")
async with stdio_client(server_params) as (read_stream, write_stream):
- logger.debug(f"Connection established, creating session")
+ logger.debug("Connection established, creating session")
# Use our logging session instead of the regular one
async with LoggingClientSession(read_stream, write_stream) as session:
return await self.connect_stdio(session)
@@ -680,7 +675,7 @@ async def execute_tool(server_name: str, tool_name: str, arguments: Dict[str, An
return {"error": f"Server {server_name} not found in configuration"}
# Log the tool call in detail
- logger.debug(f"Tool call details:")
+ logger.debug("Tool call details:")
logger.debug(f" Server: {server_name}")
logger.debug(f" Tool: {tool_name}")
logger.debug(f" Arguments: {json.dumps(arguments, indent=2)}")
diff --git a/optillm/plugins/memory_plugin.py b/optillm/plugins/memory_plugin.py
index 0a41f98d..40755988 100644
--- a/optillm/plugins/memory_plugin.py
+++ b/optillm/plugins/memory_plugin.py
@@ -4,7 +4,6 @@
import re
import tempfile
from typing import Optional, Tuple, List
-import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
diff --git a/optillm/plugins/privacy_plugin.py b/optillm/plugins/privacy_plugin.py
index 5ba2228a..8a6a0ca1 100644
--- a/optillm/plugins/privacy_plugin.py
+++ b/optillm/plugins/privacy_plugin.py
@@ -1,6 +1,6 @@
import spacy
from presidio_analyzer import AnalyzerEngine
-from presidio_anonymizer import AnonymizerEngine, DeanonymizeEngine, OperatorConfig
+from presidio_anonymizer import AnonymizerEngine, OperatorConfig
from presidio_anonymizer.operators import Operator, OperatorType
from typing import Dict, Tuple, Optional
diff --git a/optillm/plugins/proxy/approach_handler.py b/optillm/plugins/proxy/approach_handler.py
index 4dc5976b..2ad6e518 100644
--- a/optillm/plugins/proxy/approach_handler.py
+++ b/optillm/plugins/proxy/approach_handler.py
@@ -5,7 +5,7 @@
import importlib.util
import logging
import inspect
-from typing import Optional, Tuple, Dict, Any
+from typing import Optional, Tuple
from pathlib import Path
logger = logging.getLogger(__name__)
@@ -108,7 +108,6 @@ def _discover_plugins(self):
"""Discover available plugins dynamically"""
try:
import optillm
- import os
import glob
# Get plugin directories
diff --git a/optillm/plugins/proxy/client.py b/optillm/plugins/proxy/client.py
index f26bf151..94dcb9ef 100644
--- a/optillm/plugins/proxy/client.py
+++ b/optillm/plugins/proxy/client.py
@@ -3,9 +3,7 @@
"""
import time
import logging
-import random
-from typing import Dict, List, Any, Optional
-import concurrent.futures
+from typing import Dict, Optional
import threading
from openai import OpenAI, AzureOpenAI
from optillm.plugins.proxy.routing import RouterFactory
@@ -184,7 +182,7 @@ def _test_system_message_support(self, provider, model: str) -> bool:
return self._system_message_support_cache[cache_key]
try:
- test_response = provider.client.chat.completions.create(
+ provider.client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "test"},
diff --git a/optillm/plugins/proxy/health.py b/optillm/plugins/proxy/health.py
index 40286d0e..3ecf15e1 100644
--- a/optillm/plugins/proxy/health.py
+++ b/optillm/plugins/proxy/health.py
@@ -48,7 +48,7 @@ def _check_provider(self, provider):
try:
# Simple health check - try to get models
# This creates a minimal request to verify the endpoint is responsive
- response = provider.client.models.list()
+ provider.client.models.list()
# Mark as healthy
if not provider.is_healthy:
diff --git a/optillm/plugins/proxy/routing.py b/optillm/plugins/proxy/routing.py
index e330ab06..64c15f0a 100644
--- a/optillm/plugins/proxy/routing.py
+++ b/optillm/plugins/proxy/routing.py
@@ -40,7 +40,6 @@ def select(self, providers: List) -> Optional:
logger.debug(f"Round-robin: Starting selection, index={self.index}, providers={[p.name for p in providers]}")
# Find next available provider in round-robin fashion
- start_index = self.index
attempts = 0
while attempts < len(self.all_providers):
# Get provider at current index from all providers
diff --git a/optillm/plugins/proxy_plugin.py b/optillm/plugins/proxy_plugin.py
index edcdc474..d2a631d2 100644
--- a/optillm/plugins/proxy_plugin.py
+++ b/optillm/plugins/proxy_plugin.py
@@ -1,3 +1,4 @@
+import os
"""
Proxy Plugin for OptiLLM - Load balancing and failover for LLM providers
@@ -6,7 +7,7 @@
"""
import logging
import threading
-from typing import Tuple, Optional, Dict
+from typing import Tuple, Dict
from optillm.plugins.proxy.config import ProxyConfig
from optillm.plugins.proxy.client import ProxyClient
from optillm.plugins.proxy.approach_handler import ApproachHandler
@@ -15,7 +16,6 @@
logger = logging.getLogger(__name__)
# Configure logging based on environment
-import os
log_level = os.environ.get('OPTILLM_LOG_LEVEL', 'INFO')
logging.basicConfig(level=getattr(logging, log_level))
@@ -33,7 +33,7 @@ def _test_system_message_support(proxy_client, model: str) -> bool:
"""
try:
# Try a minimal system message request
- test_response = proxy_client.chat.completions.create(
+ proxy_client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "test"},
diff --git a/optillm/plugins/readurls_plugin.py b/optillm/plugins/readurls_plugin.py
index b799bca6..143476cb 100644
--- a/optillm/plugins/readurls_plugin.py
+++ b/optillm/plugins/readurls_plugin.py
@@ -1,7 +1,6 @@
import re
from typing import Tuple, List, Optional
import requests
-import os
from bs4 import BeautifulSoup
from urllib.parse import urlparse
from optillm import __version__, server_config
diff --git a/optillm/plugins/router_plugin.py b/optillm/plugins/router_plugin.py
index 2a6f5a21..4a11abdc 100644
--- a/optillm/plugins/router_plugin.py
+++ b/optillm/plugins/router_plugin.py
@@ -3,11 +3,9 @@
import torch
import torch.nn as nn
import torch.nn.functional as F
-from transformers import AutoModel, AutoTokenizer, AutoConfig
+from transformers import AutoModel, AutoTokenizer
from huggingface_hub import hf_hub_download
-from safetensors import safe_open
from safetensors.torch import load_model
-from transformers import AutoTokenizer, AutoModel
from optillm.mcts import chat_with_mcts
from optillm.bon import best_of_n_sampling
from optillm.moa import mixture_of_agents
diff --git a/optillm/plugins/spl/evaluation.py b/optillm/plugins/spl/evaluation.py
index 87d07f86..0b8dbcd6 100644
--- a/optillm/plugins/spl/evaluation.py
+++ b/optillm/plugins/spl/evaluation.py
@@ -4,7 +4,7 @@
import logging
from datetime import datetime
-from typing import Dict, List, Optional, Tuple, Any
+from typing import Dict, List, Optional, Any
from optillm.plugins.spl.strategy import Strategy
from optillm.plugins.spl.utils import extract_thinking
diff --git a/optillm/plugins/spl/generation.py b/optillm/plugins/spl/generation.py
index 76dbbeb5..766ac580 100644
--- a/optillm/plugins/spl/generation.py
+++ b/optillm/plugins/spl/generation.py
@@ -4,7 +4,7 @@
import uuid
import logging
-from typing import Tuple, Optional, List, Dict, Any
+from typing import Tuple, Optional, List
from optillm.plugins.spl.strategy import Strategy, StrategyDatabase
from optillm.plugins.spl.utils import extract_thinking
diff --git a/optillm/plugins/spl/main.py b/optillm/plugins/spl/main.py
index d47d52c1..ac6370b4 100644
--- a/optillm/plugins/spl/main.py
+++ b/optillm/plugins/spl/main.py
@@ -4,9 +4,9 @@
import time
import logging
-from typing import Tuple, Dict, List, Optional, Any
+from typing import Tuple
-from .strategy import Strategy, StrategyDatabase
+from .strategy import StrategyDatabase
from .generation import (
classify_problem,
generate_strategy,
@@ -109,7 +109,7 @@ def run_spl(system_prompt: str, initial_query: str, client, model: str, request_
logger.info(f"Merged {merged_count} similar strategies")
# 4.2 Limit strategies per problem type (applies storage limit, not inference limit)
- limited_count = db.limit_strategies_per_type(max_per_type=MAX_STRATEGIES_PER_TYPE)
+ db.limit_strategies_per_type(max_per_type=MAX_STRATEGIES_PER_TYPE)
# 4.3 Prune low-performing strategies
pruned_count = db.prune_strategies()
@@ -133,7 +133,7 @@ def run_spl(system_prompt: str, initial_query: str, client, model: str, request_
else:
# Strategies exist but don't meet the minimum success rate
logger.info(f"Strategies exist for problem type '{problem_type}' but none meet the minimum success rate threshold of {MIN_SUCCESS_RATE_FOR_INFERENCE:.2f}.")
- logger.info(f"Enable learning mode with 'spl_learning=True' to improve strategies.")
+ logger.info("Enable learning mode with 'spl_learning=True' to improve strategies.")
# Use the original system prompt without augmentation
logger.info("Running without strategy augmentation - using base system prompt only.")
diff --git a/optillm/plugins/spl/strategy.py b/optillm/plugins/spl/strategy.py
index ef87faa9..97baa291 100644
--- a/optillm/plugins/spl/strategy.py
+++ b/optillm/plugins/spl/strategy.py
@@ -6,9 +6,8 @@
import logging
import os
from datetime import datetime
-from typing import Dict, List, Optional, Tuple, Any, Union
+from typing import Dict, List, Optional, Tuple, Any
-import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
diff --git a/optillm/plugins/spl/utils.py b/optillm/plugins/spl/utils.py
index 7c5b2815..095933af 100644
--- a/optillm/plugins/spl/utils.py
+++ b/optillm/plugins/spl/utils.py
@@ -3,9 +3,8 @@
"""
import re
-import uuid
import logging
-from typing import Tuple, Optional, List, Dict, Any
+from typing import Tuple, Optional, List, Any
from optillm.plugins.spl.prompts import STRATEGY_APPLICATION_PROMPT
diff --git a/optillm/plugins/web_search_plugin.py b/optillm/plugins/web_search_plugin.py
index f3724fa1..56c71538 100644
--- a/optillm/plugins/web_search_plugin.py
+++ b/optillm/plugins/web_search_plugin.py
@@ -1,6 +1,5 @@
import re
import time
-import json
import random
from typing import Tuple, List, Dict, Optional
from selenium import webdriver
@@ -71,7 +70,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
if self._searcher:
try:
self._searcher.close()
- except:
+ except Exception:
pass # Ignore errors during cleanup
self._searcher = None
@@ -170,18 +169,18 @@ def detect_captcha(self) -> bool:
try:
self.driver.find_element(By.CSS_SELECTOR, "iframe[src*='recaptcha']")
return True
- except:
+ except Exception:
pass
# Check for CAPTCHA challenge div
try:
self.driver.find_element(By.ID, "captcha")
return True
- except:
+ except Exception:
pass
return False
- except:
+ except Exception:
return False
def wait_for_captcha_resolution(self, max_wait: int = 300) -> bool:
@@ -247,7 +246,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
accept_button = self.driver.find_element(By.XPATH, "//button[contains(text(), 'Accept') or contains(text(), 'I agree') or contains(text(), 'Agree')]")
accept_button.click()
time.sleep(1)
- except:
+ except Exception:
pass # No consent form
# Find search box and enter query
@@ -260,7 +259,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
EC.presence_of_element_located(selector)
)
break
- except:
+ except Exception:
continue
if search_box:
@@ -285,7 +284,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
return []
else:
raise Exception("Could not find search box")
- except:
+ except Exception:
# Fallback to direct URL navigation
print("Using direct URL navigation...")
search_url = f"https://www.google.com/search?q={quote_plus(query)}&num={num_results}"
@@ -312,7 +311,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.g"))
)
- except:
+ except Exception:
print("No results found after CAPTCHA resolution")
return []
else:
@@ -352,7 +351,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
WebDriverWait(self.driver, 10).until(
lambda driver: driver.find_elements(By.CSS_SELECTOR, "div.g")
)
- except:
+ except Exception:
print("Still no results after CAPTCHA resolution")
return []
else:
@@ -384,7 +383,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
link = elem.find_element(By.CSS_SELECTOR, "a[href]")
if h3 and link:
search_results.append(elem)
- except:
+ except Exception:
continue
print(f"Filtered to {len(search_results)} valid result elements")
@@ -426,9 +425,9 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
if snippet_elem and snippet_elem.text:
snippet = snippet_elem.text
break
- except:
+ except Exception:
pass
- except:
+ except Exception:
pass
# Add result
@@ -444,7 +443,7 @@ def search(self, query: str, num_results: int = 10, delay_seconds: Optional[int]
print(f"Failed to parse result {i+1}")
continue
- except Exception as e:
+ except Exception:
# Skip problematic results
continue
diff --git a/optillm/pvg.py b/optillm/pvg.py
index bb327d3c..f8449ffe 100644
--- a/optillm/pvg.py
+++ b/optillm/pvg.py
@@ -2,7 +2,6 @@
import re
from typing import List, Tuple
import optillm
-from optillm import conversation_logger
logger = logging.getLogger(__name__)
diff --git a/optillm/reread.py b/optillm/reread.py
index 6b48873b..05a58bff 100644
--- a/optillm/reread.py
+++ b/optillm/reread.py
@@ -1,6 +1,5 @@
import logging
import optillm
-from optillm import conversation_logger
logger = logging.getLogger(__name__)
diff --git a/optillm/rstar.py b/optillm/rstar.py
index 520641bc..f234d6d1 100644
--- a/optillm/rstar.py
+++ b/optillm/rstar.py
@@ -1,13 +1,10 @@
import math
import random
import logging
-from typing import List, Dict, Any, Tuple
+from typing import List, Tuple
import re
import asyncio
-import aiohttp
-from concurrent.futures import ThreadPoolExecutor
import optillm
-from optillm import conversation_logger
# Set up logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
diff --git a/optillm/rto.py b/optillm/rto.py
index 60a5cfeb..325f424a 100644
--- a/optillm/rto.py
+++ b/optillm/rto.py
@@ -1,7 +1,6 @@
import re
import logging
import optillm
-from optillm import conversation_logger
logger = logging.getLogger(__name__)
diff --git a/optillm/self_consistency.py b/optillm/self_consistency.py
index 0622a19c..240578f3 100644
--- a/optillm/self_consistency.py
+++ b/optillm/self_consistency.py
@@ -2,7 +2,6 @@
from typing import List, Dict
from difflib import SequenceMatcher
import optillm
-from optillm import conversation_logger
logger = logging.getLogger(__name__)
diff --git a/optillm/server.py b/optillm/server.py
index c9697369..9ed34b67 100644
--- a/optillm/server.py
+++ b/optillm/server.py
@@ -3,7 +3,6 @@
import os
import secrets
import time
-import traceback
from pathlib import Path
from flask import Flask, request, jsonify
from cerebras.cloud.sdk import Cerebras
@@ -14,9 +13,7 @@
import glob
import asyncio
import re
-from concurrent.futures import ThreadPoolExecutor
-from typing import Tuple, Optional, Union, Dict, Any, List
-from importlib.metadata import version
+from typing import Tuple, Union, Dict, Any, List
from dataclasses import fields
# Import approach modules
@@ -1028,14 +1025,14 @@ def parse_args():
for arg, env, type_, default, help_text, *extra in args_env:
env_value = os.environ.get(env)
if env_value is not None:
- if type_ == bool:
+ if type_ is bool:
default = env_value.lower() in ('true', '1', 'yes')
else:
default = type_(env_value)
if extra and extra[0]: # Check if there are choices for this argument
parser.add_argument(arg, type=type_, default=default, help=help_text, choices=extra[0])
else:
- if type_ == bool:
+ if type_ is bool:
# For boolean flags, use store_true action
parser.add_argument(arg, action='store_true', default=default, help=help_text)
else:
@@ -1149,7 +1146,6 @@ def process_batch_requests(batch_requests):
logger.info(f"Processing batch of {len(batch_requests)} requests")
# Check if we can use true batching (all requests compatible and using 'none' approach)
- can_use_true_batching = True
first_req = batch_requests[0]
# Check compatibility across all requests
@@ -1158,7 +1154,6 @@ def process_batch_requests(batch_requests):
req_data['approaches'] != first_req['approaches'] or
req_data['operation'] != first_req['operation'] or
req_data['model'] != first_req['model']):
- can_use_true_batching = False
break
# For now, implement sequential processing but with proper infrastructure
diff --git a/optillm/thinkdeeper.py b/optillm/thinkdeeper.py
index 56a2a8ca..c99e8766 100644
--- a/optillm/thinkdeeper.py
+++ b/optillm/thinkdeeper.py
@@ -1,7 +1,7 @@
import torch
import random
from transformers import PreTrainedModel, PreTrainedTokenizer, DynamicCache
-from typing import Tuple, Dict, Any, List
+from typing import Dict, Any, List
import logging
logger = logging.getLogger(__name__)
diff --git a/optillm/thinkdeeper_mlx.py b/optillm/thinkdeeper_mlx.py
index 42c099d6..70a46d83 100644
--- a/optillm/thinkdeeper_mlx.py
+++ b/optillm/thinkdeeper_mlx.py
@@ -4,7 +4,7 @@
"""
import random
-from typing import Tuple, Dict, Any, List
+from typing import Dict, Any, List
import logging
logger = logging.getLogger(__name__)
diff --git a/optillm/utils/answer_extraction.py b/optillm/utils/answer_extraction.py
index 6e039934..44c8ee46 100644
--- a/optillm/utils/answer_extraction.py
+++ b/optillm/utils/answer_extraction.py
@@ -7,7 +7,7 @@
import re
import logging
-from typing import Optional, Union, Any, Dict, List
+from typing import Optional, Any
import math_verify
logger = logging.getLogger(__name__)
diff --git a/optillm/z3_solver.py b/optillm/z3_solver.py
index 0f0b9405..677ecb12 100644
--- a/optillm/z3_solver.py
+++ b/optillm/z3_solver.py
@@ -1,5 +1,5 @@
from typing import Dict, Any
-from z3 import *
+from z3 import * # noqa: F403
import sympy
import io
import re
@@ -10,7 +10,6 @@
import multiprocessing
import traceback
import optillm
-from optillm import conversation_logger
class TimeoutException(Exception):
pass
@@ -63,9 +62,6 @@ def prepare_execution_globals():
def execute_code_in_process(code: str):
import z3
- import sympy
- import math
- import itertools
from fractions import Fraction
execution_globals = prepare_execution_globals()
diff --git a/scripts/eval_aime_benchmark.py b/scripts/eval_aime_benchmark.py
index 7aaa32fb..6aabb124 100644
--- a/scripts/eval_aime_benchmark.py
+++ b/scripts/eval_aime_benchmark.py
@@ -5,9 +5,7 @@
import re
import time
import math
-import numpy as np
-from typing import List, Dict, Tuple, Optional, Union, Counter
-from datetime import datetime
+from typing import List, Dict, Tuple, Optional, Union
from openai import OpenAI
from datasets import load_dataset
from tqdm import tqdm
@@ -165,7 +163,6 @@ def analyze_thinking(response: str) -> Dict:
result["thinking_tokens_text"] = thinking_text
# Count thought transitions
- position = 0
for phrase in THOUGHT_TRANSITIONS:
# Find all occurrences of each transition phrase
for match in re.finditer(r'\b' + re.escape(phrase) + r'\b', thinking_text):
@@ -496,9 +493,9 @@ def analyze_results(results: List[Dict], n: int, analyze_thoughts: bool = False,
successful_attempts = [r['first_correct_attempt'] for r in results if r['is_correct']]
if successful_attempts:
avg_attempts = sum(successful_attempts) / len(successful_attempts)
- print(f"\nFor correct solutions:")
+ print("\nFor correct solutions:")
print(f"Average attempts needed: {avg_attempts:.2f}")
- print(f"Attempt distribution:")
+ print("Attempt distribution:")
for i in range(1, n + 1):
count = sum(1 for x in successful_attempts if x == i)
print(f" Attempt {i}: {count} problems")
@@ -564,7 +561,7 @@ def calc_stats(attempts):
print(f"- Average thought transitions: {all_stats['avg_thought_transitions']:.2f}")
print(f"- Median thought transitions: {all_stats['median_thought_transitions']}")
print(f"- Percentage with tags: {all_stats['has_think_tags_pct']:.2f}%")
- print(f"- Transition phrase usage:")
+ print("- Transition phrase usage:")
for phrase, count in all_stats['transition_usage'].items():
print(f" - {phrase}: {count} occurrences")
@@ -574,7 +571,7 @@ def calc_stats(attempts):
print(f"- Average thought transitions: {correct_stats['avg_thought_transitions']:.2f}")
print(f"- Median thought transitions: {correct_stats['median_thought_transitions']}")
print(f"- Percentage with tags: {correct_stats['has_think_tags_pct']:.2f}%")
- print(f"- Transition phrase usage:")
+ print("- Transition phrase usage:")
for phrase, count in correct_stats['transition_usage'].items():
print(f" - {phrase}: {count} occurrences")
@@ -584,7 +581,7 @@ def calc_stats(attempts):
print(f"- Average thought transitions: {incorrect_stats['avg_thought_transitions']:.2f}")
print(f"- Median thought transitions: {incorrect_stats['median_thought_transitions']}")
print(f"- Percentage with tags: {incorrect_stats['has_think_tags_pct']:.2f}%")
- print(f"- Transition phrase usage:")
+ print("- Transition phrase usage:")
for phrase, count in incorrect_stats['transition_usage'].items():
print(f" - {phrase}: {count} occurrences")
@@ -727,12 +724,12 @@ def calc_logit_stats(attempts):
print(f"- Average entropy std: {all_stats['entropy']['std']:.4f}")
if all_stats['entropy']['quartiles']:
- print(f"- Entropy by generation quartile:")
+ print("- Entropy by generation quartile:")
for i, q in enumerate(all_stats['entropy']['quartiles']):
print(f" - Q{i+1}: {q:.4f}")
if all_stats['transitions']:
- print(f"- Entropy around thought transitions:")
+ print("- Entropy around thought transitions:")
for phrase, stats in all_stats['transitions'].items():
change = stats['entropy_change']
change_dir = "increases" if change > 0 else "decreases"
@@ -755,7 +752,7 @@ def calc_logit_stats(attempts):
# Compare entropy progression
if (correct_stats['entropy']['quartiles'] and incorrect_stats['entropy']['quartiles']):
- print(f"- Entropy progression through generation:")
+ print("- Entropy progression through generation:")
for i in range(min(len(correct_stats['entropy']['quartiles']),
len(incorrect_stats['entropy']['quartiles']))):
@@ -769,7 +766,7 @@ def calc_logit_stats(attempts):
common_transitions = set(correct_stats['transitions'].keys()) & set(incorrect_stats['transitions'].keys())
if common_transitions:
- print(f"- Entropy changes around thought transitions:")
+ print("- Entropy changes around thought transitions:")
for phrase in common_transitions:
c_stats = correct_stats['transitions'][phrase]
@@ -863,9 +860,9 @@ def main(model: str, n_attempts: int, year: int = 2024, analyze_thoughts: bool =
predicted_answers = [attempt.get('predicted_answer') for attempt in attempts]
print(f" Predicted: {predicted_answers}")
if is_correct:
- print(f" ✅ CORRECT!")
+ print(" ✅ CORRECT!")
else:
- print(f" ❌ Incorrect")
+ print(" ❌ Incorrect")
result = {
"index": id,
diff --git a/scripts/eval_frames_benchmark.py b/scripts/eval_frames_benchmark.py
index 931f341b..54163580 100644
--- a/scripts/eval_frames_benchmark.py
+++ b/scripts/eval_frames_benchmark.py
@@ -1,7 +1,6 @@
import argparse
import json
import os
-import time
from typing import List, Dict
from openai import OpenAI
diff --git a/scripts/eval_imo25_benchmark.py b/scripts/eval_imo25_benchmark.py
index a9eb7955..6b66a8ef 100644
--- a/scripts/eval_imo25_benchmark.py
+++ b/scripts/eval_imo25_benchmark.py
@@ -1,3 +1,4 @@
+from imo25_reference import IMO_2025_PROBLEMS, verify_answer_format, verify_key_insights
"""
Evaluation script for IMO 2025 problems using OptiLLM approaches
Designed to test MARS and other approaches on challenging proof-based problems
@@ -9,7 +10,7 @@
import logging
import re
import time
-from typing import List, Dict, Tuple, Optional
+from typing import List, Dict
from datetime import datetime
from openai import OpenAI
from tqdm import tqdm
@@ -27,7 +28,6 @@
client = OpenAI(api_key="optillm", base_url="http://localhost:8001/v1")
# Import the actual IMO 2025 problems and reference solutions
-from imo25_reference import IMO_2025_PROBLEMS, verify_answer_format, verify_key_insights
SYSTEM_PROMPT = '''You are solving IMO (International Mathematical Olympiad) problems - the most challenging mathematical competition problems for high school students.
@@ -640,7 +640,7 @@ def analyze_results(results: List[Dict], approach_name: str = None):
print(f"Average reasoning tokens per problem: {avg_reasoning_tokens:.0f}")
# Problem type breakdown
- print(f"\nProblem Type Breakdown:")
+ print("\nProblem Type Breakdown:")
type_stats = {}
for result in results:
prob_type = result['problem_data']['type']
@@ -657,7 +657,7 @@ def analyze_results(results: List[Dict], approach_name: str = None):
print(f" {prob_type}: {stats['correct']}/{stats['total']} ({accuracy:.1%}) - Avg score: {avg_score:.3f}")
# Detailed problem results
- print(f"\nDetailed Results:")
+ print("\nDetailed Results:")
print("-" * 80)
for result in results:
prob_id = result['problem_data']['id']
@@ -669,7 +669,7 @@ def analyze_results(results: List[Dict], approach_name: str = None):
print(f"Problem {prob_id} ({prob_type}): {status} {verdict} - {tokens:,} tokens")
# Quality analysis summary
- print(f"\nSolution Quality Analysis:")
+ print("\nSolution Quality Analysis:")
print("-" * 40)
quality_metrics = [
"has_proof_structure", "uses_mathematical_notation", "has_logical_steps",
diff --git a/scripts/eval_imobench_answer.py b/scripts/eval_imobench_answer.py
index f98b27fe..73a3c664 100644
--- a/scripts/eval_imobench_answer.py
+++ b/scripts/eval_imobench_answer.py
@@ -11,7 +11,7 @@
import re
import pandas as pd
import requests
-from typing import List, Dict, Optional
+from typing import List, Dict
from datetime import datetime
from openai import OpenAI
from tqdm import tqdm
diff --git a/scripts/eval_imobench_proof.py b/scripts/eval_imobench_proof.py
index 7a7ae2b8..0cdadd50 100644
--- a/scripts/eval_imobench_proof.py
+++ b/scripts/eval_imobench_proof.py
@@ -12,7 +12,7 @@
import re
import pandas as pd
import requests
-from typing import List, Dict, Optional
+from typing import List, Dict
from datetime import datetime
from openai import OpenAI
from tqdm import tqdm
diff --git a/scripts/eval_math500_benchmark.py b/scripts/eval_math500_benchmark.py
index 165eefd5..b57c0d30 100644
--- a/scripts/eval_math500_benchmark.py
+++ b/scripts/eval_math500_benchmark.py
@@ -3,7 +3,7 @@
import os
import logging
import re
-from typing import Dict, Optional, Union
+from typing import Dict, Optional
from datasets import load_dataset
from tqdm import tqdm
from openai import OpenAI
@@ -109,7 +109,7 @@ def numerically_equal(str1: str, str2: str) -> bool:
"""Compare if two numeric strings represent the same value."""
try:
return abs(float(str1) - float(str2)) < 1e-10
- except:
+ except Exception:
return False
def normalize_fraction(fraction_str: str) -> str:
@@ -602,7 +602,7 @@ def normalize_answer(answer: str) -> str:
result = normalize_algebraic_expression(answer)
logger.debug(f"Normalized as algebraic expression: {repr(result)}")
return result
- except:
+ except Exception:
logger.debug("Failed to normalize as algebraic expression")
pass
diff --git a/scripts/eval_optillmbench.py b/scripts/eval_optillmbench.py
index eb84a806..1ef59c26 100644
--- a/scripts/eval_optillmbench.py
+++ b/scripts/eval_optillmbench.py
@@ -711,7 +711,7 @@ def evaluate_model(
failures = len([r for r in detailed_results if "error" in r])
if failures > 0:
logger.warning(f"Approach {approach}: {failures}/{total_expected} examples failed due to errors")
- logger.warning(f"Failed examples are counted as incorrect in accuracy calculation")
+ logger.warning("Failed examples are counted as incorrect in accuracy calculation")
# Add category-specific metrics
for category, cat_metrics in category_metrics.items():
@@ -825,7 +825,7 @@ def generate_report(all_metrics: Dict[str, Dict[str, float]], output_dir: str, i
maj5_acc = all_metrics["maj@5"]["accuracy"] * 100
genselect5_acc = all_metrics["genselect@5"]["accuracy"] * 100
- report.append(f"\n**Key Metrics:**")
+ report.append("\n**Key Metrics:**")
report.append(f"- **avg@5** (average of 5 responses): {avg5_acc:.2f}%")
report.append(f"- **pass@5** (success if any correct): {pass5_acc:.2f}%")
report.append(f"- **maj@5** (majority voting): {maj5_acc:.2f}%")
@@ -837,7 +837,7 @@ def generate_report(all_metrics: Dict[str, Dict[str, float]], output_dir: str, i
maj_improvement = ((maj5_acc - avg5_acc) / avg5_acc) * 100
genselect_improvement = ((genselect5_acc - avg5_acc) / avg5_acc) * 100
- report.append(f"\n**Improvements over avg@5 baseline:**")
+ report.append("\n**Improvements over avg@5 baseline:**")
report.append(f"- pass@5: {'+' if pass_improvement > 0 else ''}{pass_improvement:.1f}%")
report.append(f"- maj@5: {'+' if maj_improvement > 0 else ''}{maj_improvement:.1f}%")
report.append(f"- genselect@5: {'+' if genselect_improvement > 0 else ''}{genselect_improvement:.1f}%")
@@ -845,7 +845,7 @@ def generate_report(all_metrics: Dict[str, Dict[str, float]], output_dir: str, i
# Show variance indicator
if pass5_acc > avg5_acc:
variance_ratio = (pass5_acc - avg5_acc) / avg5_acc * 100
- report.append(f"\n**Response Variance Indicator:**")
+ report.append("\n**Response Variance Indicator:**")
report.append(f"- Gap between pass@5 and avg@5: {variance_ratio:.1f}%")
report.append(f"- This indicates {'high' if variance_ratio > 50 else 'moderate' if variance_ratio > 20 else 'low'} variance in response quality")
diff --git a/scripts/eval_simpleqa_benchmark.py b/scripts/eval_simpleqa_benchmark.py
index 6ae79343..97ca89be 100644
--- a/scripts/eval_simpleqa_benchmark.py
+++ b/scripts/eval_simpleqa_benchmark.py
@@ -11,18 +11,15 @@
import argparse
import json
-import os
import logging
import re
import csv
-import time
import pandas as pd
from datetime import datetime
from pathlib import Path
-from typing import Dict, List, Optional, Tuple, Any
+from typing import Dict, List, Optional, Tuple
from tqdm import tqdm
import requests
-from urllib.parse import urlparse
import httpx
from openai import OpenAI
@@ -201,7 +198,7 @@ def load_dataset(self, num_samples: Optional[int] = None, start_index: int = 0)
# Original SimpleQA dataset
try:
metadata = json.loads(row['metadata']) if row.get('metadata') else {}
- except:
+ except Exception:
metadata = {}
question_id = i
diff --git a/scripts/gen_optillm_dataset.py b/scripts/gen_optillm_dataset.py
index b10d8615..27e3f7a5 100644
--- a/scripts/gen_optillm_dataset.py
+++ b/scripts/gen_optillm_dataset.py
@@ -1,4 +1,3 @@
-import os
import json
import argparse
import asyncio
diff --git a/scripts/gen_optillm_ground_truth_dataset.py b/scripts/gen_optillm_ground_truth_dataset.py
index 8227fb32..f742b1ba 100644
--- a/scripts/gen_optillm_ground_truth_dataset.py
+++ b/scripts/gen_optillm_ground_truth_dataset.py
@@ -1,12 +1,10 @@
-import os
import json
import argparse
import asyncio
from tqdm import tqdm
from datasets import load_dataset
from openai import AsyncOpenAI
-from typing import List, Dict, Any, Tuple
-import random
+from typing import List, Dict, Any
# OptILM approaches remain the same as in original script
APPROACHES = ["none", "mcts", "bon", "moa", "rto", "z3", "self_consistency", "pvg", "rstar", "cot_reflection", "plansearch", "leap", "re2"]
diff --git a/scripts/gen_optillmbench.py b/scripts/gen_optillmbench.py
index 880bcdb4..07c5d8c3 100644
--- a/scripts/gen_optillmbench.py
+++ b/scripts/gen_optillmbench.py
@@ -1,6 +1,4 @@
#!/usr/bin/env python3
-import os
-import json
import random
from typing import List, Dict, Any
import datasets
diff --git a/scripts/imo25_reference.py b/scripts/imo25_reference.py
index 9680529a..0fc7f7bc 100644
--- a/scripts/imo25_reference.py
+++ b/scripts/imo25_reference.py
@@ -4,7 +4,7 @@
"""
import re
-from typing import Dict, List, Set, Any, Optional
+from typing import Dict, Any, Optional
# Actual IMO 2025 problems from the official contest
IMO_2025_PROBLEMS = [
diff --git a/scripts/train_optillm_classifier.py b/scripts/train_optillm_classifier.py
index a295fdfe..a2baf5f0 100644
--- a/scripts/train_optillm_classifier.py
+++ b/scripts/train_optillm_classifier.py
@@ -2,7 +2,6 @@
import torch
from torch.utils.data import Dataset, DataLoader, SubsetRandomSampler
from transformers import AutoTokenizer, AutoModel
-from transformers import PreTrainedModel, PretrainedConfig, AutoConfig
from datasets import load_dataset
from sklearn.model_selection import KFold
from tqdm import tqdm
@@ -11,7 +10,6 @@
from safetensors.torch import save_model, load_model
from collections import Counter
from torch.optim.lr_scheduler import ReduceLROnPlateau
-import numpy as np
# Constants
APPROACHES = ["none", "mcts", "bon", "moa", "rto", "z3", "self_consistency", "pvg", "rstar", "cot_reflection", "plansearch", "leap", "re2"]
@@ -139,7 +137,7 @@ def train(model, train_dataloader, val_dataloader, optimizer, scheduler, num_epo
for batch in tqdm(train_dataloader, desc=f"Epoch {epoch+1}/{num_epochs}"):
input_ids = batch['input_ids'].to(device)
attention_mask = batch['attention_mask'].to(device)
- approaches = batch['approaches'].to(device)
+ batch['approaches'].to(device)
ranks = batch['ranks'].to(device)
tokens = batch['tokens'].to(device)
@@ -202,7 +200,7 @@ def validate(model, val_dataloader):
for batch in val_dataloader:
input_ids = batch['input_ids'].to(device)
attention_mask = batch['attention_mask'].to(device)
- approaches = batch['approaches'].to(device)
+ batch['approaches'].to(device)
ranks = batch['ranks'].to(device)
tokens = batch['tokens'].to(device)
diff --git a/tests/test.py b/tests/test.py
index 25aabbe6..15caa474 100644
--- a/tests/test.py
+++ b/tests/test.py
@@ -13,7 +13,6 @@
from test_utils import TEST_MODEL
-from optillm.litellm_wrapper import LiteLLMWrapper
from optillm.mcts import chat_with_mcts
from optillm.bon import best_of_n_sampling
from optillm.moa import mixture_of_agents
@@ -27,7 +26,7 @@
from optillm.leap import leap
from optillm.reread import re2_approach
from optillm.mars import multi_agent_reasoning_system
-from optillm.cepo.cepo import cepo, CepoConfig, init_cepo_config
+from optillm.cepo.cepo import cepo, init_cepo_config
# Setup logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
diff --git a/tests/test_api_compatibility.py b/tests/test_api_compatibility.py
index 5324acd1..f9fe7e02 100644
--- a/tests/test_api_compatibility.py
+++ b/tests/test_api_compatibility.py
@@ -6,8 +6,6 @@
import pytest
import os
import sys
-from openai import OpenAI
-import json
# Add parent directory to path for imports
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@@ -232,7 +230,7 @@ def test_reasoning_tokens_backward_compatibility(client):
print(f"❌ FAILED: {e}")
failed += 1
- print(f"\n=== Test Summary ===")
+ print("\n=== Test Summary ===")
print(f"Passed: {passed}")
print(f"Failed: {failed}")
print(f"Total: {passed + failed}")
diff --git a/tests/test_batching.py b/tests/test_batching.py
index 0cf65682..7e0057d5 100644
--- a/tests/test_batching.py
+++ b/tests/test_batching.py
@@ -11,21 +11,16 @@
import unittest
import time
-import json
import os
-import subprocess
-import tempfile
-from typing import List, Dict, Any
-import threading
import concurrent.futures
-from unittest.mock import patch, MagicMock
+from unittest.mock import patch
# Import the modules we're testing
from optillm.batching import RequestBatcher, BatchingError
from optillm.inference import InferencePipeline, MLXInferencePipeline, MLXModelConfig, MLX_AVAILABLE
# Import test utilities
-from test_utils import TEST_MODEL, TEST_MODEL_MLX
+from test_utils import TEST_MODEL_MLX
class TestRequestBatcher(unittest.TestCase):
@@ -180,7 +175,7 @@ def test_mlx_batch_creation(self):
from optillm.inference import MLXInferencePipeline
# This would fail if the model isn't available, but we can test the interface
self.assertTrue(hasattr(MLXInferencePipeline, 'process_batch'))
- except Exception as e:
+ except Exception:
# Expected if model isn't downloaded
pass
@@ -208,7 +203,7 @@ def test_mlx_batch_parameters(self):
@unittest.skipIf(not MLX_AVAILABLE, "MLX not available")
def test_mlx_batch_generation(self):
"""Test MLX batch processing with actual generation"""
- print(f"\n🧪 Testing MLX batch generation...")
+ print("\n🧪 Testing MLX batch generation...")
# Create the pipeline
pipeline = MLXInferencePipeline(self.model_config, self.cache_manager)
@@ -248,7 +243,6 @@ class TestPyTorchBatching(unittest.TestCase):
def test_pytorch_batch_method_exists(self):
"""Test that PyTorch InferencePipeline has process_batch method"""
# The method should exist even if we can't test it fully
- from optillm.inference import InferencePipeline
self.assertTrue(hasattr(InferencePipeline, 'process_batch'))
@unittest.skipIf(not os.getenv("OPTILLM_API_KEY"), "Requires local inference")
@@ -339,7 +333,6 @@ class TestIntegration(unittest.TestCase):
def test_cli_arguments(self):
"""Test that CLI arguments are properly parsed"""
# Test parsing batch arguments
- import argparse
from optillm import parse_args
# Mock sys.argv for testing
@@ -452,7 +445,6 @@ def test_default_max_new_tokens_env_override(self):
def test_resolve_eos_prefers_generation_config(self):
from types import SimpleNamespace
- from optillm.inference import InferencePipeline
# tokenizer EOS (<|end_of_text|>=1) differs from the chat end token
# (<|im_end|>=49154); both must be honoured, generation_config first.
@@ -465,7 +457,6 @@ def test_resolve_eos_prefers_generation_config(self):
def test_resolve_eos_dedupes_list(self):
from types import SimpleNamespace
- from optillm.inference import InferencePipeline
fake = SimpleNamespace(
current_model=SimpleNamespace(generation_config=SimpleNamespace(eos_token_id=[100, 200])),
@@ -475,7 +466,6 @@ def test_resolve_eos_dedupes_list(self):
def test_resolve_eos_falls_back_to_tokenizer(self):
from types import SimpleNamespace
- from optillm.inference import InferencePipeline
fake = SimpleNamespace(
current_model=SimpleNamespace(generation_config=SimpleNamespace(eos_token_id=None)),
diff --git a/tests/test_ci_quick.py b/tests/test_ci_quick.py
index 1660d89f..8d2b6517 100644
--- a/tests/test_ci_quick.py
+++ b/tests/test_ci_quick.py
@@ -12,7 +12,7 @@
# Import key modules to ensure they load
try:
- from optillm import parse_combined_approach, execute_single_approach, plugin_approaches
+ from optillm import parse_combined_approach
print("✅ Core optillm module imported successfully")
except Exception as e:
print(f"❌ Failed to import core modules: {e}")
@@ -20,20 +20,12 @@
# Test importing approach modules
try:
- from optillm.mcts import chat_with_mcts
- from optillm.bon import best_of_n_sampling
- from optillm.moa import mixture_of_agents
print("✅ Approach modules imported successfully")
except Exception as e:
print(f"❌ Failed to import approach modules: {e}")
# Test plugin existence
try:
- import optillm.plugins.memory_plugin
- import optillm.plugins.readurls_plugin
- import optillm.plugins.privacy_plugin
- import optillm.plugins.genselect_plugin
- import optillm.plugins.majority_voting_plugin
print("✅ Basic plugin modules exist and can be imported")
except Exception as e:
print(f"❌ Basic plugin import test failed: {e}")
@@ -77,5 +69,5 @@
except Exception as e:
print(f"❌ Approach parsing test failed: {e}")
-print(f"\n✅ All CI quick tests completed!")
+print("\n✅ All CI quick tests completed!")
print(f"Total test time: {time.time() - start_time:.2f}s")
\ No newline at end of file
diff --git a/tests/test_compact_plugin.py b/tests/test_compact_plugin.py
index acd1cfb0..e7d5bbc7 100644
--- a/tests/test_compact_plugin.py
+++ b/tests/test_compact_plugin.py
@@ -1,7 +1,6 @@
"""Tests for compact_plugin."""
import os
-import pytest
from unittest.mock import MagicMock, patch
from optillm.plugins.compact_plugin import (
estimate_tokens,
diff --git a/tests/test_conversation_logger.py b/tests/test_conversation_logger.py
index b3a19b72..de97b542 100644
--- a/tests/test_conversation_logger.py
+++ b/tests/test_conversation_logger.py
@@ -7,7 +7,7 @@
import sys
sys.path.append('..')
-from optillm.conversation_logger import ConversationLogger, ConversationEntry
+from optillm.conversation_logger import ConversationLogger
class TestConversationLogger(unittest.TestCase):
@@ -189,7 +189,7 @@ def test_invalid_request_id_and_stats(self):
# Test enabled logger stats with active conversations
request_id1 = self.logger_enabled.start_conversation({}, "test", "model")
- request_id2 = self.logger_enabled.start_conversation({}, "test", "model")
+ self.logger_enabled.start_conversation({}, "test", "model")
stats = self.logger_enabled.get_stats()
diff --git a/tests/test_conversation_logging_approaches.py b/tests/test_conversation_logging_approaches.py
index 0123259e..ee03d918 100644
--- a/tests/test_conversation_logging_approaches.py
+++ b/tests/test_conversation_logging_approaches.py
@@ -8,7 +8,7 @@
import sys
import os
import json
-from unittest.mock import Mock, MagicMock, patch, call
+from unittest.mock import Mock, MagicMock, patch
import tempfile
from pathlib import Path
diff --git a/tests/test_conversation_logging_server.py b/tests/test_conversation_logging_server.py
index d61cf8df..c6d52b51 100644
--- a/tests/test_conversation_logging_server.py
+++ b/tests/test_conversation_logging_server.py
@@ -23,7 +23,7 @@
if _project_dir not in sys.path:
sys.path.insert(0, _project_dir)
-from test_utils import TEST_MODEL, setup_test_env, start_test_server, stop_test_server
+from test_utils import TEST_MODEL, setup_test_env, stop_test_server
class TestConversationLoggingWithServer(unittest.TestCase):
@@ -452,10 +452,8 @@ def test_error_handling_logging(self):
entries = self._get_new_log_entries()
# Should have at least some entry (success or partial)
- found_relevant_entry = False
for entry in entries:
if "error logging scenarios" in str(entry.get("client_request", {})):
- found_relevant_entry = True
break
# Even if no specific entry found, logging system should be working
@@ -574,7 +572,7 @@ def test_logging_performance_impact(self):
# Should be reasonably fast (under 10 seconds for small model)
self.assertLess(avg_time, 10.0, f"Average response time too slow: {avg_time:.2f}s")
- print(f"\n📊 Server Performance with Logging:")
+ print("\n📊 Server Performance with Logging:")
print(f" Average response time: {avg_time:.3f}s")
print(f" Response times: {[f'{t:.3f}s' for t in times]}")
diff --git a/tests/test_deepconf.py b/tests/test_deepconf.py
index cd96f12d..98622d89 100644
--- a/tests/test_deepconf.py
+++ b/tests/test_deepconf.py
@@ -151,7 +151,7 @@ def test_info_function():
for key in required_keys:
assert key in info, f"Missing key: {key}"
- assert info["local_models_only"] == True
+ assert info["local_models_only"]
assert "low" in info["variants"] and "high" in info["variants"]
logger.info("✓ Info function tests passed")
diff --git a/tests/test_json_plugin.py b/tests/test_json_plugin.py
index c42ea2c7..4cc5026a 100644
--- a/tests/test_json_plugin.py
+++ b/tests/test_json_plugin.py
@@ -1,17 +1,15 @@
"""Test the JSON plugin functionality"""
import unittest
-from unittest.mock import Mock, patch, MagicMock
+from unittest.mock import Mock, patch
import json
import sys
import os
-from typing import Dict, Any
# Add parent directory to path for imports
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Import test utilities
-from test_utils import setup_test_env, get_test_client, TEST_MODEL
# We'll use real dependencies since the outlines version has been updated
diff --git a/tests/test_mars_imo25.py b/tests/test_mars_imo25.py
index 37a765b6..16fa89b5 100644
--- a/tests/test_mars_imo25.py
+++ b/tests/test_mars_imo25.py
@@ -10,7 +10,6 @@
import logging
import io
import unittest
-from unittest.mock import Mock
# Add parent directory to path to import optillm modules
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@@ -29,7 +28,7 @@ def __init__(self, response_delay=0.1, reasoning_tokens=2000):
def chat_completions_create(self, **kwargs):
"""Mock completions.create with realistic IMO25 responses"""
- start_time = time.time()
+ time.time()
time.sleep(self.response_delay)
self.call_count += 1
self.call_times.append(time.time())
@@ -63,10 +62,10 @@ def __init__(self, content, reasoning_tokens):
# Generate appropriate responses based on problem content and call type
if "verifying" in problem_content.lower():
# Verification response
- content = f"VERIFICATION: This solution appears CORRECT. The analysis is mathematically sound and the final answer is properly justified. Confidence: 8/10."
+ content = "VERIFICATION: This solution appears CORRECT. The analysis is mathematically sound and the final answer is properly justified. Confidence: 8/10."
elif "improving" in problem_content.lower():
# Improvement response
- content = f"IMPROVEMENT: The original approach is good but can be enhanced. Here's the improved version with stronger reasoning..."
+ content = "IMPROVEMENT: The original approach is good but can be enhanced. Here's the improved version with stronger reasoning..."
elif "bonza" in problem_content.lower():
# IMO25 Problem 3 - functional equation
responses = [
@@ -152,7 +151,7 @@ def test_imo25_problem3_functional_equation(self):
Determine the smallest real constant c such that f(n)≤cn for all bonza functions f and all positive integers n."""
- print(f"\n🧮 Testing MARS on IMO25 Problem 3 (Expected answer: c = 4)...")
+ print("\n🧮 Testing MARS on IMO25 Problem 3 (Expected answer: c = 4)...")
client = MockOpenAIClient(response_delay=0.05, reasoning_tokens=3000)
@@ -207,11 +206,11 @@ def test_imo25_problem3_functional_equation(self):
response_lines = response.split('\n')
key_lines = [line for line in response_lines if any(keyword in line.lower() for keyword in ['constant', 'c =', 'answer', '= 4', 'therefore'])]
if key_lines:
- print(f" 🔑 Key response lines:")
+ print(" 🔑 Key response lines:")
for line in key_lines[:5]:
print(f" {line.strip()}")
- print(f"✅ IMO25 Problem 3 test completed")
+ print("✅ IMO25 Problem 3 test completed")
def test_imo25_problem4_number_theory(self):
"""Test MARS on IMO25 Problem 4 - Number Theory (Expected: 6J·12^K formula)"""
@@ -221,7 +220,7 @@ def test_imo25_problem4_number_theory(self):
Determine all possible values of a_1."""
- print(f"\n🔢 Testing MARS on IMO25 Problem 4 (Expected: 6J·12^K formula)...")
+ print("\n🔢 Testing MARS on IMO25 Problem 4 (Expected: 6J·12^K formula)...")
client = MockOpenAIClient(response_delay=0.05, reasoning_tokens=3000)
@@ -251,11 +250,11 @@ def test_imo25_problem4_number_theory(self):
print(f" 🎯 Contains '12^K': {has_formula_12K}")
print(f" 🎯 Contains 'gcd': {has_gcd_condition}")
- print(f"✅ IMO25 Problem 4 test completed")
+ print("✅ IMO25 Problem 4 test completed")
def test_answer_extraction_analysis(self):
"""Test answer extraction specifically with controlled responses"""
- print(f"\n🔍 Testing answer extraction with controlled responses...")
+ print("\n🔍 Testing answer extraction with controlled responses...")
class ControlledMockClient(MockOpenAIClient):
def __init__(self):
@@ -299,7 +298,7 @@ def chat_completions_create(self, **kwargs):
for i, log in enumerate(voting_logs[:3]):
print(f" Vote {i+1}: {log}")
- print(f"✅ Answer extraction analysis completed")
+ print("✅ Answer extraction analysis completed")
def run_imo25_tests():
diff --git a/tests/test_mars_parallel.py b/tests/test_mars_parallel.py
index 7a0ff4db..002eea51 100644
--- a/tests/test_mars_parallel.py
+++ b/tests/test_mars_parallel.py
@@ -7,21 +7,16 @@
import sys
import os
import time
-import asyncio
import unittest
import logging
import io
from unittest.mock import Mock, patch
-from concurrent.futures import ThreadPoolExecutor
# Add parent directory to path to import optillm modules
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from optillm.mars import multi_agent_reasoning_system
-from optillm.mars.mars import _run_mars_parallel
from optillm.mars.agent import MARSAgent
-from optillm.mars.verifier import MARSVerifier
-from optillm.mars.workspace import MARSWorkspace
class MockOpenAIClient:
@@ -35,7 +30,7 @@ def __init__(self, response_delay=0.1, reasoning_tokens=1000):
def chat_completions_create(self, **kwargs):
"""Mock completions.create with configurable delay"""
- start_time = time.time()
+ time.time()
time.sleep(self.response_delay) # Simulate API call delay
self.call_count += 1
self.call_times.append(time.time())
@@ -516,7 +511,6 @@ def chat_completions_create(self, **kwargs):
def test_mars_agent_temperatures():
"""Test that MARS uses different temperatures for agents"""
from optillm.mars.mars import DEFAULT_CONFIG
- from optillm.mars.agent import MARSAgent
client = MockOpenAIClient()
model = "mock-model"
diff --git a/tests/test_mcp_plugin.py b/tests/test_mcp_plugin.py
index 09f56461..e98e3bdb 100644
--- a/tests/test_mcp_plugin.py
+++ b/tests/test_mcp_plugin.py
@@ -8,7 +8,7 @@
import asyncio
import json
import pytest
-from unittest.mock import Mock, AsyncMock, patch, MagicMock
+from unittest.mock import Mock, AsyncMock, patch
from pathlib import Path
# Try to import pytest, but don't fail if it's not available
@@ -22,7 +22,7 @@
from optillm.plugins.mcp_plugin import (
ServerConfig, MCPServer, MCPConfigManager, MCPServerManager,
execute_tool, execute_tool_stdio, execute_tool_sse, execute_tool_websocket,
- LoggingClientSession, SLUG
+ SLUG
)
@@ -377,7 +377,7 @@ async def test_github_mcp_server_connection(self):
if connected:
assert server.connected
assert len(server.tools) > 0 or len(server.resources) > 0 or len(server.prompts) > 0
- print(f"GitHub MCP server connected successfully!")
+ print("GitHub MCP server connected successfully!")
print(f"Found: {len(server.tools)} tools, {len(server.resources)} resources, {len(server.prompts)} prompts")
# List some tools
@@ -452,7 +452,7 @@ def test_environment_variable_expansion(self):
headers={"Authorization": "${TEST_TOKEN}"}
)
- server = MCPServer("test", config)
+ MCPServer("test", config)
# Test the header expansion logic from connect_sse method
expanded_headers = {}
diff --git a/tests/test_n_parameter.py b/tests/test_n_parameter.py
index 6c325041..02e665e3 100755
--- a/tests/test_n_parameter.py
+++ b/tests/test_n_parameter.py
@@ -5,8 +5,6 @@
import os
import sys
-from openai import OpenAI
-import json
# Add parent directory to path for imports
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
diff --git a/tests/test_plugins.py b/tests/test_plugins.py
index e7f6b744..3134c9d4 100644
--- a/tests/test_plugins.py
+++ b/tests/test_plugins.py
@@ -15,7 +15,7 @@
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-from optillm import plugin_approaches, load_plugins
+from optillm import plugin_approaches, load_plugins # noqa: E402
def test_plugin_module_imports():
@@ -309,8 +309,6 @@ def test_proxy_plugin_timeout_config():
def test_proxy_plugin_timeout_handling():
"""Test that proxy plugin handles timeouts correctly"""
from optillm.plugins.proxy.client import ProxyClient
- from unittest.mock import Mock, patch
- import concurrent.futures
# Create config with short timeout
config = {
@@ -433,7 +431,7 @@ def test_no_relative_import_errors():
# reloaded on every request. These tests mock the heavy loaders so they need
# no network or real weights.
# ---------------------------------------------------------------------------
-import threading as _threading
+import threading as _threading # noqa: E402
import contextlib as _contextlib
from unittest import mock as _mock
diff --git a/tests/test_reasoning_integration.py b/tests/test_reasoning_integration.py
index d6737543..d1f450bc 100644
--- a/tests/test_reasoning_integration.py
+++ b/tests/test_reasoning_integration.py
@@ -7,19 +7,17 @@
import sys
import os
import unittest
-import re
# Add parent directory to path for imports
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Import test utilities
from test_utils import (
- setup_test_env, get_test_client, is_mlx_available,
- TEST_MODEL, get_simple_test_messages, get_thinking_test_messages
+ setup_test_env, is_mlx_available,
+ TEST_MODEL, get_simple_test_messages
)
# Import the thinkdeeper functions for testing
-from optillm.thinkdeeper import thinkdeeper_decode
try:
from optillm.thinkdeeper_mlx import thinkdeeper_decode_mlx
MLX_THINKDEEPER_AVAILABLE = True
@@ -205,7 +203,6 @@ class TestAPIResponseStructure(unittest.TestCase):
def test_chat_completion_response_structure(self):
"""Test that chat completion responses have proper structure"""
- from unittest.mock import Mock
from optillm.inference import ChatCompletion, ChatCompletionUsage
# Create mock response structure
diff --git a/tests/test_reasoning_tokens.py b/tests/test_reasoning_tokens.py
index 7e3aea4d..d3fdd9e5 100644
--- a/tests/test_reasoning_tokens.py
+++ b/tests/test_reasoning_tokens.py
@@ -8,7 +8,6 @@
import os
import unittest
from unittest.mock import Mock
-import re
# Add parent directory to path for imports
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
diff --git a/tests/test_ssl_config.py b/tests/test_ssl_config.py
index 82f3d4e8..caa192f9 100644
--- a/tests/test_ssl_config.py
+++ b/tests/test_ssl_config.py
@@ -8,11 +8,9 @@
"""
import unittest
-from unittest.mock import Mock, patch, MagicMock, call
+from unittest.mock import patch, MagicMock
import sys
import os
-import tempfile
-import httpx
# Add parent directory to path to import optillm modules
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@@ -109,7 +107,7 @@ def test_httpx_client_ssl_verify_disabled(self):
# Create client
with patch('httpx.Client') as mock_httpx_client, \
- patch('optillm.server.OpenAI') as mock_openai:
+ patch('optillm.server.OpenAI'):
get_config()
# Verify httpx.Client was called with verify=False
mock_httpx_client.assert_called_once_with(verify=False)
@@ -125,7 +123,7 @@ def test_httpx_client_ssl_verify_enabled(self):
# Create client
with patch('httpx.Client') as mock_httpx_client, \
- patch('optillm.server.OpenAI') as mock_openai:
+ patch('optillm.server.OpenAI'):
get_config()
# Verify httpx.Client was called with verify=True
mock_httpx_client.assert_called_once_with(verify=True)
@@ -142,7 +140,7 @@ def test_httpx_client_custom_cert_path(self):
# Create client
with patch('httpx.Client') as mock_httpx_client, \
- patch('optillm.server.OpenAI') as mock_openai:
+ patch('optillm.server.OpenAI'):
get_config()
# Verify httpx.Client was called with custom cert path
mock_httpx_client.assert_called_once_with(verify=test_cert_path)
@@ -162,7 +160,7 @@ def test_openai_client_receives_http_client(self):
mock_http_client_instance = MagicMock()
- with patch('httpx.Client', return_value=mock_http_client_instance) as mock_httpx_client, \
+ with patch('httpx.Client', return_value=mock_http_client_instance), \
patch('optillm.server.OpenAI') as mock_openai:
get_config()
@@ -187,7 +185,7 @@ def test_cerebras_client_receives_http_client(self):
mock_http_client_instance = MagicMock()
- with patch('httpx.Client', return_value=mock_http_client_instance) as mock_httpx_client, \
+ with patch('httpx.Client', return_value=mock_http_client_instance), \
patch('optillm.server.Cerebras') as mock_cerebras:
get_config()
@@ -211,7 +209,7 @@ def test_azure_client_receives_http_client(self):
mock_http_client_instance = MagicMock()
- with patch('httpx.Client', return_value=mock_http_client_instance) as mock_httpx_client, \
+ with patch('httpx.Client', return_value=mock_http_client_instance), \
patch('optillm.server.AzureOpenAI') as mock_azure:
get_config()
@@ -329,8 +327,8 @@ def test_warning_when_ssl_disabled(self):
server_config['ssl_verify'] = False
server_config['ssl_cert_path'] = ''
- with patch('httpx.Client') as mock_httpx_client, \
- patch('optillm.server.OpenAI') as mock_openai, \
+ with patch('httpx.Client'), \
+ patch('optillm.server.OpenAI'), \
patch('optillm.server.logger.warning') as mock_logger_warning:
get_config()
@@ -354,8 +352,8 @@ def test_info_when_custom_cert_used(self):
server_config['ssl_verify'] = True
server_config['ssl_cert_path'] = test_cert_path
- with patch('httpx.Client') as mock_httpx_client, \
- patch('optillm.server.OpenAI') as mock_openai, \
+ with patch('httpx.Client'), \
+ patch('optillm.server.OpenAI'), \
patch('optillm.server.logger.info') as mock_logger_info:
get_config()
diff --git a/tests/test_utils.py b/tests/test_utils.py
index d49c1eec..091b9ee1 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -8,7 +8,6 @@
import time
import subprocess
import platform
-from typing import Optional
from openai import OpenAI
# Standard test model for all tests - small and fast (~250M params)