Rishabh2095's picture
"Modified Dockerfile for HF Deployement, Made changes to main graph and intermediate graph states"
8349858
"""
Job Application Writer Package
A modular, well-structured package for creating tailored job applications
using LangChain and LangGraph with LangSmith observability.
"""
__version__ = "0.1.0"
import os
import sys
import logging
from pathlib import Path
from dotenv import load_dotenv
# Set up logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
log_dir = Path(__file__).parent / "logs"
log_dir.mkdir(exist_ok=True)
logger.addHandler(logging.FileHandler(log_dir / "job_writer.log", mode="a"))
logger.info(
"Logger initialized. Writing to %s", Path(__file__).parent / "job_writer.log"
)
# Load environment variables from .env file
env_path = Path(__file__).parent / ".env"
def _is_interactive():
"""Check if we're running in an interactive environment."""
return sys.stdin.isatty()
def _set_env(var: str):
"""Set environment variable - only prompt if running interactively."""
if not os.environ.get(var):
if _is_interactive():
from getpass import getpass
os.environ[var] = getpass(f"{var}: ")
logger.info(f"{var} set interactively")
else:
logger.warning(f"{var} is not set and running non-interactively. Skipping.")
if env_path.exists():
logger.info("Loading environment variables from %s", env_path)
load_dotenv(dotenv_path=env_path, override=True)
else:
logger.warning(
".env file not found at %s. Using system environment variables.", env_path
)
# List of environment variables to check
environment_key_array = [
"TAVILY_API_KEY",
"GEMINI_API_KEY",
"PINECONE_API_KEY",
"LANGFUSE_PUBLIC_KEY",
"LANGFUSE_SECRET_KEY",
"LANGSMITH_API_KEY",
"OPENROUTER_API_KEY",
"LANGSMITH_PROJECT",
"LANGSMITH_ENDPOINT",
"CEREBRAS_API_KEY",
]
def load_environment_variables(key_array):
"""Load environment variables, warn if missing."""
missing_keys = []
for key in key_array:
if not os.getenv(key):
logger.warning(f"{key} environment variable is not set.")
missing_keys.append(key)
_set_env(key)
if missing_keys and not _is_interactive():
logger.warning(f"Missing environment variables (non-interactive mode): {missing_keys}")
# Check for critical environment variables
load_environment_variables(environment_key_array)
# Enable LangSmith tracing if API key is set
if os.getenv("LANGSMITH_API_KEY"):
os.environ["LANGSMITH_TRACING"] = "true"
__all__ = ["job_app_graph", "workflows/research_workflow"]