"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"] | |