Skip to content

[BUG/FEATURE] Dead Code: Grok AI Provider is not integrated into Backend, Frontend settings, and Schema Validations #196

@satyamg18

Description

@satyamg18

Description

The codebase contains a GrokProvider implementation under grok_provider.py, but it is completely isolated from the rest of the application. It is never registered or initialised by the provider manager, lacks the standard constructor signature used by other AI providers, is not supported in the database configuration schemas, and is missing from both backend route validations and frontend dashboard forms.


Technical Details & Code Citations

1. Inconsistent Constructor Signature

In grok_provider.py:

class GrokProvider(AIProvider):
    def __init__(self):
        self.api_key = os.getenv("XAI_API_KEY")

Unlike other providers (Gemini, OpenAI, Perplexity), which accept api_key: str | None = None, GrokProvider takes no arguments. This signature mismatch will throw a TypeError when the manager attempts to initialise it using a database-resolved API key.

2. Missing Registration in ProviderManager

In provider_manager.py:
GrokProvider is neither imported nor registered in self.providers map:

        self.providers = {
            "gemini": GeminiProvider,
            "openai": OpenAIProvider,
            "perplexity": PerplexityProvider,
        }

Furthermore, the credential mapper has no lookup key for grok:

        credential_names = {
            "gemini": "gemini_api_key",
            "openai": "openai_api_key",
            "perplexity": "perplexity_api_key",
        }

3. Restricted API Schema Validation

In main.py, the backend blocks saving configuration updates if the provider is grok:

    allowed_providers = {"gemini", "openai", "perplexity"}
    if settings.ai_provider not in allowed_providers:
        raise HTTPException(status_code=400, detail="Unsupported AI provider.")

Also, IntegrationSettings (Pydantic model) and _connected checks in main.py lack fields for grok_api_key.

4. Missing Frontend Controls

In main.jsx, the settings dropdown and default state configuration have no entry for Grok:

const defaultSettings = {
  ...
  ai_provider: "gemini",
  gemini_api_key: "",
  openai_api_key: "",
  perplexity_api_key: "",
  ...
};

Step-by-Step Proposed Fix

Step 1: Align Constructor Signature

Modify grok_provider.py to accept and respect an optional runtime api_key:

 class GrokProvider(AIProvider):
-    def __init__(self):
-        self.api_key = os.getenv("XAI_API_KEY")
+    def __init__(self, api_key: str | None = None):
+        self.api_key = api_key or os.getenv("XAI_API_KEY")

Step 2: Register in ProviderManager

Update provider_manager.py:

+from .providers.grok_provider import GrokProvider
...
         self.providers = {
             "gemini": GeminiProvider,
             "openai": OpenAIProvider,
             "perplexity": PerplexityProvider,
+            "grok": GrokProvider,
         }
...
         credential_names = {
             "gemini": "gemini_api_key",
             "openai": "openai_api_key",
             "perplexity": "perplexity_api_key",
+            "grok": "grok_api_key",
         }

Step 3: Expand Backend Schemas & Routes

Modify main.py:

 class IntegrationSettings(BaseModel):
     ...
     perplexity_api_key: str | None = None
+    grok_api_key: str | None = None
 def _connected(settings_doc: dict[str, Any]) -> dict[str, bool]:
     return {
         ...
         "ai_provider": bool(
             settings_doc.get("gemini_api_key")
             or settings_doc.get("openai_api_key")
             or settings_doc.get("perplexity_api_key")
+            or settings_doc.get("grok_api_key")
         ),
     }
 @app.put("/settings/integrations")
 async def update_integration_settings(...):
-    allowed_providers = {"gemini", "openai", "perplexity"}
+    allowed_providers = {"gemini", "openai", "perplexity", "grok"}

Step 4: Add Frontend settings

Update main.jsx:

 const defaultSettings = {
   ...
   perplexity_api_key: "",
+  grok_api_key: "",
   ...
 };

Add option to the selector UI and corresponding input element:

             <select value={settings.ai_provider} onChange={(event) => setSettings({ ...settings, ai_provider: event.target.value })}>
               <option value="gemini">Gemini</option>
               <option value="openai">OpenAI</option>
               <option value="perplexity">Perplexity</option>
+              <option value="grok">Grok</option>
             </select>
             <label>
               Perplexity API key
               <input type="password" value={settings.perplexity_api_key} onChange={(event) => setSettings({ ...settings, perplexity_api_key: event.target.value })} />
             </label>
+            <label>
+              Grok API key
+              <input type="password" value={settings.grok_api_key} onChange={(event) => setSettings({ ...settings, grok_api_key: event.target.value })} />
+            </label>

Contribution Interest

Hello @vanshaggarwal27 . I noticed the Grok AI provider is currently isolated from the rest of the pipeline. I'd love to claim this issue to fully integrate it and submit a PR for GSSoC'26. Please assign this to me!

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions