# How to Configure LLM Model Parameters (Temperature and Top_P) in the Hiring Agent Repository

> Master LLM model parameters like temperature and top_p in the hiring agent repository. Learn to configure them globally or per run for optimal results.

- Repository: [HackerRank/hiring-agent](https://github.com/interviewstreet/hiring-agent)
- Tags: how-to-guide
- Published: 2026-06-27

---

**You can configure `temperature` and `top_p` globally by editing the `MODEL_PARAMETERS` dictionary in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py), or override them per-run by passing a `model_params` dict to the `ResumeEvaluator` constructor.**

The interviewstreet/hiring-agent repository centralizes LLM configuration through a structured parameter system that controls text generation randomness. Understanding how to configure `temperature` and `top_p` values allows you to balance between deterministic outputs and creative variation when evaluating resumes. This guide covers the two primary methods for adjusting these LLM model parameters according to the source code implementation.

## Where Configuration Lives in the Source Code

The codebase implements a two-tier configuration system for LLM parameters. You can modify defaults at the repository level or inject custom values during instantiation.

### Global Defaults in prompt.py

The **`MODEL_PARAMETERS`** dictionary in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) serves as the central registry for default LLM settings. This dictionary maps each supported model name (such as `"gemma3:4b"`) to a dictionary of generation parameters, including `temperature` and `top_p` values. When you instantiate a `ResumeEvaluator` without specifying custom parameters, the code automatically retrieves defaults from this mapping.

### Per-Run Overrides in evaluator.py

The **`ResumeEvaluator`** class defined in [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py) accepts an optional `model_params` argument in its `__init__` method. When provided, this dictionary supersedes the global defaults from `MODEL_PARAMETERS`, enabling experimentation without modifying source files. This approach is ideal for CI pipelines or A/B testing different parameter configurations.

## Configuring Temperature and Top_P Globally

To change the default behavior for all evaluations using a specific model, edit the `MODEL_PARAMETERS` dictionary in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py).

```python

# In prompt.py

MODEL_PARAMETERS = {
    "gemma3:4b": {"temperature": 0.3, "top_p": 0.85},
    "gemini-1.5-flash": {"temperature": 0.1, "top_p": 0.9},
    # ... other models

}

```

After editing, any `ResumeEvaluator` instance that uses `"gemma3:4b"` will automatically inherit these new values. This method affects all runs across the repository unless explicitly overridden at instantiation.

## Overriding Parameters at Runtime

For one-off evaluations or testing different randomness levels without committing changes to version control, pass a custom `model_params` dictionary when creating the evaluator:

```python
from evaluator import ResumeEvaluator

# Custom parameters for a single evaluation run

custom_params = {"temperature": 0.7, "top_p": 0.92}

evaluator = ResumeEvaluator(
    model_name="gemma3:4b",      # or any supported model

    model_params=custom_params   # overrides MODEL_PARAMETERS defaults

)

# Proceed with evaluation

evaluation = evaluator.evaluate_resume(resume_text)

```

As implemented in [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py), the `model_params` argument takes precedence over the global defaults, allowing you to fine-tune randomness for specific use cases while keeping the repository defaults intact.

## How the Parameters Flow Through the System

Understanding the data flow ensures your configuration changes take effect. When you call `ResumeEvaluator`, the parameters travel through the following chain:

1. The `ResumeEvaluator.__init__` method merges your `model_params` (if provided) with the defaults from `MODEL_PARAMETERS`
2. The resulting options dictionary is passed to **`llm_utils.initialize_llm_provider`**
3. This function forwards the exact `temperature` and `top_p` values to the underlying provider (Ollama or Gemini) without transformation

The [`llm_utils.py`](https://github.com/interviewstreet/hiring-agent/blob/main/llm_utils.py) module acts as a thin wrapper, ensuring that whichever configuration method you choose, the specific values reach the LLM provider's API.

## Summary

- **Global configuration**: Edit `MODEL_PARAMETERS` in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) to set default `temperature` and `top_p` values for all runs using a specific model
- **Runtime override**: Pass a `model_params` dictionary to `ResumeEvaluator` for per-instance customization without source code changes
- **Parameter flow**: Values pass through `llm_utils.initialize_llm_provider` directly to the selected LLM provider (Ollama or Gemini)
- **File locations**: Key files include [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (defaults), [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py) (overrides), and [`llm_utils.py`](https://github.com/interviewstreet/hiring-agent/blob/main/llm_utils.py) (provider forwarding)

## Frequently Asked Questions

### What is the difference between temperature and top_p in LLM configuration?

**Temperature** controls the overall randomness of the model's output by scaling the probability distribution of next tokens—lower values (e.g., 0.1) produce more deterministic, focused responses, while higher values (e.g., 0.9) increase creativity and variation. **Top_p** (also called nucleus sampling) controls diversity by restricting token selection to the smallest set whose cumulative probability exceeds the specified value—lower values (e.g., 0.85) limit options to high-probability tokens, while higher values (e.g., 0.95) allow more diverse selections.

### How do I set different temperature values for different models in the hiring-agent repository?

Add separate entries to the `MODEL_PARAMETERS` dictionary in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) for each model name. Each key in this dictionary represents a specific model (e.g., `"gemma3:4b"`, `"gemini-1.5-flash"`), and you can assign unique `temperature` and `top_p` values to each entry. When `ResumeEvaluator` initializes with a specific `model_name`, it automatically retrieves the corresponding parameter set from this mapping.

### Can I configure LLM parameters using environment variables instead of code changes?

The repository does not natively expose `temperature` or `top_p` through environment variables. However, you can set the `DEFAULT_MODEL` environment variable to switch between models that have different default parameters in `MODEL_PARAMETERS`. For full parameter control without editing source files, use the runtime override method by passing `model_params` when instantiating `ResumeEvaluator`.

### Why are my temperature changes not affecting the LLM output?

Ensure you are editing the correct model entry in `MODEL_PARAMETERS`—verify that the model name in your `ResumeEvaluator` instantiation matches the key in the dictionary exactly. If using runtime overrides, confirm that you are passing the `model_params` argument to the constructor, not calling a method after instantiation. Finally, check that you are not inadvertently using a cached `ResumeEvaluator` instance that was created with previous parameters.