Skip to content

Add support for free Gemini API usage in XRefer#36

Open
ayushk687 wants to merge 1 commit into
mandiant:mainfrom
ayushk687:patch-1
Open

Add support for free Gemini API usage in XRefer#36
ayushk687 wants to merge 1 commit into
mandiant:mainfrom
ayushk687:patch-1

Conversation

@ayushk687
Copy link
Copy Markdown

PR Description
closes #24
This PR introduces support for using the free-tier Gemini API in XRefer, enabling users to leverage LLM-assisted functionality without requiring paid API access.

Motivation

Currently, XRefer’s LLM integration assumes access to paid API services. However, Google’s Gemini free tier provides limited but useful capabilities that can be leveraged for tasks such as:

Function summarization
String/context interpretation
Lightweight classification

Supporting the free tier lowers the barrier to entry and makes XRefer more accessible to a broader set of users.

Changes Implemented
Added support for Gemini API configuration using free-tier endpoints
Introduced environment variable–based configuration:
GEMINI_API_KEY
Implemented fallback logic:
If no paid provider is configured, XRefer attempts to use Gemini free API
Added lightweight request wrapper for Gemini API calls
Ensured compatibility with existing analysis pipeline without affecting core functionality

Implementation Details
Created a new provider module:
xrefer/llm/gemini_provider.py

Integrated Gemini into existing LLM abstraction layer
Used REST-based calls compatible with Gemini free API
Added timeout + basic error handling to avoid blocking analysis
Performance Considerations
Gemini calls are optional and only triggered when explicitly enabled
No impact on core static analysis performance
Requests are lightweight and bounded to avoid latency issues

Usage
Set your API key:

export GEMINI_API_KEY=your_api_key```

Future Improvements
Add response caching to reduce repeated API calls
Introduce async handling for non-blocking UI
Expand prompt templates for better RE-specific outputs
Testing
Verified API connectivity with Gemini free tier
Tested fallback behavior when no provider is configured
Ensured no regression in existing functionality
Notes

This implementation is intentionally lightweight and non-intrusive, ensuring it complements XRefers existing architecture without introducing additional overhead.

Optional: Minimal Code Snippet
```python 
import os
import requests

GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")

def query_gemini(prompt):
    if not GEMINI_API_KEY:
        raise ValueError("GEMINI_API_KEY not set")

    url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={GEMINI_API_KEY}"

    payload = {
        "contents": [{"parts": [{"text": prompt}]}]
    }

    response = requests.post(url, json=payload, timeout=10)

    if response.status_code != 200:
        raise RuntimeError(f"Gemini API error: {response.text}")

    return response.json()```

@google-cla
Copy link
Copy Markdown

google-cla Bot commented Mar 30, 2026

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support usage of free Gemini version

1 participant