# How to Configure API Keys for Google Gemini in Hiring Agent

> Easily configure API keys for Google Gemini in Hiring Agent by setting environment variables in your .env file. Integrate powerful AI features like 'LLM_PROVIDER=gemini' and get your 'GEMINI_API_KEY' set up quickly.

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

---

**Set the environment variables `LLM_PROVIDER=gemini` and `GEMINI_API_KEY=your-key` in your `.env` file to enable Google Gemini in Hiring Agent.**

Hiring Agent by Interviewstreet supports two LLM backends: a local Ollama server or the Google Gemini API. To use Google's managed service instead of the local default, you must provide authentication via environment variables that the application reads at startup.

## Step 1: Copy the Environment Template

Begin by creating your local configuration file from the provided template. The repository includes an `.env.example` file that contains all required variable placeholders.

```bash
cp .env.example .env

```

This template defines the structure for `LLM_PROVIDER`, `DEFAULT_MODEL`, and `GEMINI_API_KEY` that the application expects.

## Step 2: Select Gemini as the Provider

Open the newly created `.env` file and set the provider flag to enable Gemini support:

```ini
LLM_PROVIDER=gemini

```

According to the source code in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (lines 19–22), the `PROVIDER` variable is loaded from the environment and determines which backend logic executes. When set to `gemini`, the runtime switches from the default Ollama implementation to Google's API.

## Step 3: Choose a Gemini Model

Specify which Gemini model variant the pipeline should use by setting `DEFAULT_MODEL`:

```ini
DEFAULT_MODEL=gemini-2.5-pro

```

The mapping between model names and provider backends is defined in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (lines 56–63) within the `MODEL_PROVIDER_MAPPING` dictionary. This lookup ensures that models prefixed with `gemini-` are routed to the `ModelProvider.GEMINI` handler.

## Step 4: Add Your API Key

Insert your Google AI Studio API key into the same `.env` file:

```ini
GEMINI_API_KEY=sk-your-google-gemini-key

```

In [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (lines 66–68), the application calls `os.getenv("GEMINI_API_KEY", "")` to retrieve this value. The key is then passed to `llm_utils.initialize_llm_provider` (lines 50–60), which instantiates the `GeminiProvider` class defined in [`models.py`](https://github.com/interviewstreet/hiring-agent/blob/main/models.py) (lines 313–393).

## How the Initialization Flow Works

When you run any command that invokes the LLM, the following sequence occurs:

1. **Environment Loading**: [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) executes `load_dotenv()` and reads `GEMINI_API_KEY`, `LLM_PROVIDER`, and `DEFAULT_MODEL` into module-level variables.
2. **Provider Selection**: `llm_utils.initialize_llm_provider()` checks the model mapping and validates that `GEMINI_API_KEY` is present.
3. **Client Instantiation**: If the key exists, the function returns an instance of `GeminiProvider` from [`models.py`](https://github.com/interviewstreet/hiring-agent/blob/main/models.py) (lines 313–393), which handles authentication and API communication.
4. **Fallback Behavior**: If `GEMINI_API_KEY` is missing or empty, [`llm_utils.py`](https://github.com/interviewstreet/hiring-agent/blob/main/llm_utils.py) (lines 55–56) emits a warning and falls back to the Ollama provider to prevent runtime crashes.

## Verifying Your Configuration

To confirm that Gemini is active, run the scoring pipeline with a sample resume:

```bash
python score.py path/to/resume.pdf

```

The `initialize_llm_provider` function logs the active provider during startup. If configured correctly, the `GeminiProvider` will execute the inference instead of the local Ollama server.

### Example Configuration

Your final `.env` file should look like this:

```ini

# .env

LLM_PROVIDER=gemini
DEFAULT_MODEL=gemini-2.5-pro
GEMINI_API_KEY=sk-your-google-gemini-key

```

### Programmatic Verification

You can also verify the setup programmatically by importing the initialization utility directly:

```python
from llm_utils import initialize_llm_provider
from prompt import DEFAULT_MODEL

provider = initialize_llm_provider(DEFAULT_MODEL)
response = provider.chat(
    model=DEFAULT_MODEL,
    messages=[{"role": "user", "content": "Explain the difference between OOP and FP"}],
)
print(response["message"]["content"])

```

This executes the full provider selection logic found in [`llm_utils.py`](https://github.com/interviewstreet/hiring-agent/blob/main/llm_utils.py) (lines 50–60) and confirms that the `GeminiProvider` class from [`models.py`](https://github.com/interviewstreet/hiring-agent/blob/main/models.py) is handling requests.

## Summary

- **Copy** `.env.example` to `.env` to create your configuration file.
- **Set** `LLM_PROVIDER=gemini` in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (lines 19–22) to switch from Ollama to Google's API.
- **Specify** a model in `DEFAULT_MODEL` that maps to `ModelProvider.GEMINI` in the `MODEL_PROVIDER_MAPPING` dictionary (lines 56–63).
- **Provide** your `GEMINI_API_KEY` which is read by [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (line 66) and consumed by `llm_utils.initialize_llm_provider`.
- **Fallback** to Ollama occurs automatically if the API key is missing, as implemented in [`llm_utils.py`](https://github.com/interviewstreet/hiring-agent/blob/main/llm_utils.py) (lines 55–56).

## Frequently Asked Questions

### What happens if I don't set GEMINI_API_KEY?

If the `GEMINI_API_KEY` environment variable is empty or undefined, `llm_utils.initialize_llm_provider` (lines 55–56) logs a warning and falls back to the Ollama provider. The application continues running using the local backend instead of failing.

### Can I use a different Gemini model?

Yes. Any model identifier listed in the `MODEL_PROVIDER_MAPPING` dictionary in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (lines 56–63) that maps to `ModelProvider.GEMINI` is valid. You can set `DEFAULT_MODEL` to variants like `gemini-1.5-pro` or `gemini-2.5-flash` as long as they are supported by your Google AI Studio account.

### Where is the API key actually used in the code?

The key is consumed in [`models.py`](https://github.com/interviewstreet/hiring-agent/blob/main/models.py) (lines 313–393) within the `GeminiProvider` class. This class initializes the official Google Gemini client library with the `GEMINI_API_KEY` retrieved from the environment via [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) (line 66).

### Is the .env file required, or can I use shell exports?

While copying `.env.example` to `.env` is the recommended approach, you can export the variables directly in your shell session. The `load_dotenv()` call in [`prompt.py`](https://github.com/interviewstreet/hiring-agent/blob/main/prompt.py) reads from the environment regardless of whether values come from a file or shell exports, though the `.env` file method prevents accidental credential exposure in shell history.