Script updates by Gemini-2.5pro
This commit is contained in:
parent
c93212508a
commit
8cfee3fc1d
@ -21,11 +21,15 @@ load_dotenv()
|
|||||||
# Configuration
|
# Configuration
|
||||||
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
|
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
|
||||||
if not OPENROUTER_API_KEY:
|
if not OPENROUTER_API_KEY:
|
||||||
raise ValueError("OPENROUTER_API_KEY environment variable is required")
|
# Use logger here if possible, but it might not be configured yet.
|
||||||
|
# Consider raising the error later or logging after basicConfig.
|
||||||
|
print("ERROR: OPENROUTER_API_KEY environment variable is required", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
OPENROUTER_MODEL_NAME = os.getenv("OPENROUTER_MODEL_NAME")
|
OPENROUTER_MODEL_NAME = os.getenv("OPENROUTER_MODEL_NAME")
|
||||||
if not OPENROUTER_MODEL_NAME:
|
if not OPENROUTER_MODEL_NAME:
|
||||||
raise ValueError("OPENROUTER_MODEL_NAME environment variable is required")
|
print("ERROR: OPENROUTER_MODEL_NAME environment variable is required", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
MAX_TOKENS = int(os.getenv("MAX_TOKENS", 500))
|
MAX_TOKENS = int(os.getenv("MAX_TOKENS", 500))
|
||||||
USE_MOCKUP = os.getenv("USE_MOCKUP", "false").lower() == "true"
|
USE_MOCKUP = os.getenv("USE_MOCKUP", "false").lower() == "true"
|
||||||
@ -43,37 +47,48 @@ logging.basicConfig(
|
|||||||
format="[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s",
|
format="[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s",
|
||||||
datefmt="%Y-%m-%dT%H:%M:%S%z",
|
datefmt="%Y-%m-%dT%H:%M:%S%z",
|
||||||
)
|
)
|
||||||
|
logger = logging.getLogger(__name__) # Define logger earlier
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
# Global variable to hold the client instance
|
||||||
|
_opernrouter_client_instance = None
|
||||||
|
|
||||||
# Initialize OpenRouter client
|
def get_opernrouter_client():
|
||||||
logger.info("Initializing OpenRouter client...")
|
"""
|
||||||
logger.debug(f"Using model: {OPENROUTER_MODEL_NAME}")
|
Initializes and returns the OpenRouter client instance (lazy initialization).
|
||||||
logger.debug("API Key present and valid format: %s", bool(OPENROUTER_API_KEY and OPENROUTER_API_KEY.startswith("sk-or-v1-")))
|
Ensures the client is initialized only once.
|
||||||
|
"""
|
||||||
|
global _opernrouter_client_instance
|
||||||
|
if _opernrouter_client_instance is None:
|
||||||
|
logger.info("Initializing OpenRouter client for the first time...")
|
||||||
|
logger.debug(f"Using model: {OPENROUTER_MODEL_NAME}")
|
||||||
|
logger.debug("API Key present and valid format: %s", bool(OPENROUTER_API_KEY and OPENROUTER_API_KEY.startswith("sk-or-v1-")))
|
||||||
|
try:
|
||||||
|
_opernrouter_client_instance = initialize_openrouter_client(
|
||||||
|
api_key=OPENROUTER_API_KEY,
|
||||||
|
model_name=OPENROUTER_MODEL_NAME
|
||||||
|
)
|
||||||
|
logger.info(f"Successfully initialized OpenRouter client with model: {OPENROUTER_MODEL_NAME}")
|
||||||
|
except ValueError as e:
|
||||||
|
logger.error(f"Configuration error during client initialization: {e}")
|
||||||
|
# Re-raise or handle appropriately, maybe return None or raise specific error
|
||||||
|
raise # Re-raise the ValueError to be caught higher up if needed
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to initialize OpenRouter client: {e}", exc_info=True)
|
||||||
|
# Re-raise or handle appropriately
|
||||||
|
raise # Re-raise the exception
|
||||||
|
else:
|
||||||
|
logger.debug("Returning existing OpenRouter client instance.")
|
||||||
|
return _opernrouter_client_instance
|
||||||
|
|
||||||
try:
|
|
||||||
llm_client = initialize_openrouter_client(
|
|
||||||
api_key=OPENROUTER_API_KEY,
|
|
||||||
model_name=OPENROUTER_MODEL_NAME
|
|
||||||
)
|
|
||||||
logger.info(f"Successfully initialized OpenRouter client with model: {OPENROUTER_MODEL_NAME}")
|
|
||||||
except ValueError as e:
|
|
||||||
logger.error(f"Configuration error: {e}")
|
|
||||||
sys.exit(1)
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Failed to initialize OpenRouter client: {e}", exc_info=True)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def get_mongo_collection():
|
def get_mongo_collection():
|
||||||
"""Initialize and return MongoDB collection."""
|
"""Initialize and return MongoDB collection."""
|
||||||
|
# Consider lazy initialization for MongoDB as well if beneficial
|
||||||
mongo_client = pymongo.MongoClient(MONGODB_URI)
|
mongo_client = pymongo.MongoClient(MONGODB_URI)
|
||||||
db = mongo_client[MONGODB_DATABASE]
|
db = mongo_client[MONGODB_DATABASE]
|
||||||
return db[MONGO_COLLECTION_NAME]
|
return db[MONGO_COLLECTION_NAME]
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_arguments():
|
def parse_arguments():
|
||||||
"""Parses command line arguments."""
|
"""Parses command line arguments."""
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
@ -158,7 +173,7 @@ def save_processing_data(resume_text, summary, response, args, processing_id, us
|
|||||||
def get_cv_summary_from_response(response):
|
def get_cv_summary_from_response(response):
|
||||||
"""Extracts CV summary from LLM response."""
|
"""Extracts CV summary from LLM response."""
|
||||||
if response and hasattr(response, "choices"):
|
if response and hasattr(response, "choices"):
|
||||||
message_content = response.choices[0].message.content
|
message_content = response.choices[0]['message']['content']
|
||||||
try:
|
try:
|
||||||
summary = json.loads(message_content)
|
summary = json.loads(message_content)
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
@ -242,12 +257,19 @@ def call_llm_api(text: str, use_mockup: bool) -> Optional[OpenRouterResponse]:
|
|||||||
# Call OpenRouter API
|
# Call OpenRouter API
|
||||||
logger.info(f"Calling OpenRouter API with model: {OPENROUTER_MODEL_NAME}")
|
logger.info(f"Calling OpenRouter API with model: {OPENROUTER_MODEL_NAME}")
|
||||||
logger.debug(f"Max tokens set to: {MAX_TOKENS}")
|
logger.debug(f"Max tokens set to: {MAX_TOKENS}")
|
||||||
|
|
||||||
response = llm_client.create_chat_completion(
|
# Get the client instance (initializes on first call)
|
||||||
|
try:
|
||||||
|
client = get_opernrouter_client()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to get OpenRouter client: {e}")
|
||||||
|
return None # Cannot proceed without a client
|
||||||
|
|
||||||
|
response = client.create_chat_completion(
|
||||||
messages=messages,
|
messages=messages,
|
||||||
max_tokens=MAX_TOKENS
|
max_tokens=MAX_TOKENS
|
||||||
)
|
)
|
||||||
|
|
||||||
# Validate response
|
# Validate response
|
||||||
if not response.choices:
|
if not response.choices:
|
||||||
logger.warning("API response contains no choices")
|
logger.warning("API response contains no choices")
|
||||||
@ -302,8 +324,10 @@ def write_llm_response(
|
|||||||
|
|
||||||
# Generate unique file path
|
# Generate unique file path
|
||||||
processing_id = str(uuid.uuid4())
|
processing_id = str(uuid.uuid4())
|
||||||
|
now = datetime.now()
|
||||||
|
timestamp_str = now.strftime("%Y%m%d_%H%M%S")
|
||||||
file_path = os.path.join(
|
file_path = os.path.join(
|
||||||
output_dir, f"{base_filename}_llm_response_{processing_id}"
|
output_dir, f"{base_filename}_llm_response_{timestamp_str}_{processing_id}"
|
||||||
) + ".json"
|
) + ".json"
|
||||||
|
|
||||||
# Prepare serializable response
|
# Prepare serializable response
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user