Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.local.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,6 +7,10 @@ SMITHERY_API_KEY="your_smithery_api_key_here"
# Ensure it's also in your .env.local file if you haven't set it up yet.
# NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_public_token_here"

# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"

# Supabase Credentials
NEXT_PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL_HERE"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY_HERE"
Expand Down
81 changes: 81 additions & 0 deletions GEMINI_3_PRO_INTEGRATION.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
# Gemini 3 Pro Integration

## Overview

This document describes the integration of Google's Gemini 3 Pro model into the QCX application. Gemini 3 Pro is Google's most advanced reasoning model with state-of-the-art capabilities for multimodal understanding, coding, and agentic tasks.

## Changes Made

### 1. Updated `lib/utils/index.ts`

Added Gemini 3 Pro as a provider option in the `getModel()` function with the following priority order:

1. **xAI (Grok)** - Primary choice if `XAI_API_KEY` is configured
2. **Gemini 3 Pro** - Secondary choice if `GEMINI_3_PRO_API_KEY` is configured *(NEW)*
3. **AWS Bedrock** - Tertiary choice if AWS credentials are configured
4. **OpenAI** - Default fallback if `OPENAI_API_KEY` is configured

The implementation includes:
- Environment variable check for `GEMINI_3_PRO_API_KEY`
- Creation of Google Generative AI client using `createGoogleGenerativeAI()`
- Model identifier: `gemini-3-pro-preview`
- Error handling with fallback to the next available provider

### 2. Updated `.env.local.example`

Added documentation for the new environment variable:

```bash
# AI Provider API Keys
# Gemini 3 Pro (Google Generative AI)
GEMINI_3_PRO_API_KEY="your_gemini_3_pro_api_key_here"
```

## Configuration

To use Gemini 3 Pro in your QCX deployment:

1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
3. Restart your development server or redeploy your application
Comment on lines +34 to +43

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find and examine the GEMINI_3_PRO_INTEGRATION.md file
find . -name "GEMINI_3_PRO_INTEGRATION.md" -type f

Repository: QueueLab/QCX

Length of output: 85


🏁 Script executed:

# Once found, read lines 34-43 to verify the formatting issue
sed -n '34,43p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 453


🏁 Script executed:

# Also check a broader context to understand the markdown structure
sed -n '30,50p' GEMINI_3_PRO_INTEGRATION.md | cat -n

Repository: QueueLab/QCX

Length of output: 856


🌐 Web query:

Google AI Studio access and API key configuration

💡 Result:

Summary — how to get access to Google AI Studio and configure an API key

  1. Access / projects
  • Sign in to Google AI Studio (studio or ai.google.dev). If new, accept Terms — Studio may create a default Google Cloud project and API key for you. To use your own Cloud projects, import them into AI Studio (Dashboard → Projects → Import projects). [1]
  1. Create an API key
  • You can create a key either from AI Studio (Dashboard → API Keys for an imported project) or in Google Cloud Console (APIs & Services → Credentials → Create credentials → API key). AI Studio also shows keys with permission to use the Gemini/Generative Language API. [1][2]
  1. Restrict and secure the key (best practice)
  • In Cloud Console, add API restrictions (allow only the Generative Language / Gemini API) and application restrictions (IP, HTTP referrers, apps) to reduce exposure. Rotate and monitor keys periodically. [2]
  1. Configure the key for use
  • Set an environment variable locally or in your service: GEMINI_API_KEY or GOOGLE_API_KEY (Google libraries pick them up; GOOGLE_API_KEY takes precedence if both set). You can also pass the key explicitly (header x-goog-api-key or ?key=) for REST/JS calls. [1][3]
  1. Verify the key (example curl)
  1. Additional notes
  • AI Studio limits: only keys with no restrictions or restricted to Generative Language API may be displayed; Studio can create a default project/key for new users; you may need to import projects you want to use. Some tools (Android Studio, MakerSuite) have direct “Get a Gemini API key” flows that open AI Studio. Monitor usage/limits in AI Studio. [1][3][4]

Sources
[1] Google AI Studio / setup & Gemini API keys (import projects, default project, Studio API Keys).
[2] Google Cloud — Manage API keys (create, restrict, rotate).
[3] Google Developers — Get an API key / Generative Language (curl examples; GEMINI_API_KEY / GOOGLE_API_KEY).
[4] Android Studio docs — add Gemini API key via AI Studio.


Add blank lines around the fenced code block in the ordered list.

Lines 37-39: The bash code block should be separated from list items by blank lines for proper markdown formatting and linting compliance.

 1. Obtain a Google AI API key from [Google AI Studio](https://aistudio.google.com/)
2. Add the API key to your `.env.local` file:
+
```bash
GEMINI_3_PRO_API_KEY="your_actual_api_key_here"
```
+
3. Restart your development server or redeploy your application
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

40-40: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


42-42: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
GEMINI_3_PRO_INTEGRATION.md around lines 34 to 43: the fenced bash code block
inside the ordered list lacks blank lines before and after it which breaks
markdown linting; add a blank line above the opening ```bash and a blank line
after the closing ``` so the code block is separated from the list items,
preserving existing indentation and list numbering.


## Model Capabilities

Gemini 3 Pro (`gemini-3-pro-preview`) supports:

- **Advanced Reasoning**: State-of-the-art reasoning capabilities with optional thinking modes
- **Multimodal Understanding**: Text, image, and file inputs
- **Tool Usage**: Function calling and tool integration
- **Large Context Window**: 1M token context window
- **Agentic Capabilities**: Excellent for complex multi-step tasks
- **Coding**: Exceptional coding and technical capabilities

## Provider Priority

The provider selection follows this priority order:

```
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
↓ No
AWS credentials exist? → Use AWS Bedrock
↓ No
OPENAI_API_KEY exists? → Use OpenAI (default)
```
Comment on lines +45 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify capability claims and fix code block formatting.

The documentation makes specific capability claims (1M token context window, advanced reasoning modes, etc.) that should be verified against official documentation once the correct model identifier is confirmed.

Additionally, the fenced code block at line 60 should specify a language for proper rendering.

🔎 Proposed fix for code block language specification
 The provider selection follows this priority order:
-```+```text
XAI_API_KEY exists? → Use Grok
↓ No
GEMINI_3_PRO_API_KEY exists? → Use Gemini 3 Pro
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

60-60: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


## Technical Details

- **SDK Package**: `@ai-sdk/google` (already imported in the codebase)
- **Model ID**: `gemini-3-pro-preview`
- **API Endpoint**: Google Generative AI API
- **Vercel AI SDK Compatible**: Yes, fully compatible with the unified interface

## References

- [Google Gemini 3 Documentation](https://ai.google.dev/gemini-api/docs/gemini-3)
- [Vercel AI SDK - Google Provider](https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai)
- [Google AI Studio](https://aistudio.google.com/)
13 changes: 13 additions & 0 deletions lib/utils/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,6 +18,7 @@ export function generateUUID(): string {

export function getModel() {
const xaiApiKey = process.env.XAI_API_KEY
const gemini3ProApiKey = process.env.GEMINI_3_PRO_API_KEY
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID
const awsSecretAccessKey = process.env.AWS_SECRET_ACCESS_KEY
const awsRegion = process.env.AWS_REGION
Expand All@@ -36,6 +37,18 @@ export function getModel() {
}
}

// Gemini 3 Pro
if (gemini3ProApiKey) {
const google = createGoogleGenerativeAI({
apiKey: gemini3ProApiKey,
})
try {
return google('gemini-3-pro-preview')
} catch (error) {
console.warn('Gemini 3 Pro API unavailable, falling back to next provider:', error)
}
}

// AWS Bedrock

if (awsAccessKeyId && awsSecretAccessKey) {
Expand Down