PDF-Insight-PRO / services /llm_service.py
Jatin Mehra
Refactor and reorganize codebase for improved maintainability and clarity
ba907cd
"""
LLM service for model management and interaction.
This module provides services for LLM model creation and management.
"""
import os
from typing import Optional
from langchain_groq import ChatGroq
from langchain_community.tools.tavily_search import TavilySearchResults
from configs.config import Config, ErrorMessages
def create_llm_model(model_name: str) -> ChatGroq:
"""
Create and configure an LLM model.
Args:
model_name: Name of the model to create
Returns:
Configured ChatGroq instance
Raises:
ValueError: If API key is missing for the model
"""
if not os.getenv("GROQ_API_KEY") and "llama" in model_name:
raise ValueError(ErrorMessages.GROQ_API_KEY_MISSING)
llm = ChatGroq(
model=model_name,
api_key=os.getenv("GROQ_API_KEY"),
temperature=Config.LLM_TEMPERATURE,
max_tokens=Config.MAX_TOKENS
)
return llm
def create_tavily_search_tool() -> Optional[TavilySearchResults]:
"""
Create Tavily search tool with error handling.
Returns:
TavilySearchResults instance or None if creation fails
"""
try:
if not os.getenv("TAVILY_API_KEY"):
print(f"Warning: {ErrorMessages.TAVILY_API_KEY_MISSING}")
return None
return TavilySearchResults(
max_results=Config.TAVILY_MAX_RESULTS,
search_depth=Config.TAVILY_SEARCH_DEPTH,
include_answer=Config.TAVILY_INCLUDE_ANSWER,
include_raw_content=Config.TAVILY_INCLUDE_RAW_CONTENT
)
except Exception as e:
print(f"Warning: Could not create Tavily tool: {e}")
return None
def validate_api_keys(model_name: str, use_search: bool = False) -> None:
"""
Validate that required API keys are available.
Args:
model_name: LLM model name
use_search: Whether web search is requested
Raises:
ValueError: If required API keys are missing
"""
if not os.getenv("GROQ_API_KEY") and "llama" in model_name:
raise ValueError(ErrorMessages.GROQ_API_KEY_MISSING)
if use_search and not os.getenv("TAVILY_API_KEY"):
print(f"Warning: {ErrorMessages.TAVILY_API_KEY_MISSING}")
def get_available_models() -> list:
"""
Get list of available models.
Returns:
List of available model configurations
"""
from configs.config import ModelConfig
return ModelConfig.AVAILABLE_MODELS
def is_model_supported(model_name: str) -> bool:
"""
Check if a model is supported.
Args:
model_name: Model name to check
Returns:
True if model is supported, False otherwise
"""
from configs.config import ModelConfig
return ModelConfig.is_valid_model(model_name)