Files
learningcircuit--local-deep…/docs/troubleshooting-openai-api-key.md
wehub-resource-sync 7a0da7932b
OSV-Scanner (Scheduled) / scan-scheduled (push) Failing after 0s
Create Release / test-gate (push) Has been cancelled
Create Release / release-gate (push) Has been cancelled
Create Release / ci-gate (push) Has been cancelled
Create Release / version-check (push) Has been cancelled
Create Release / e2e-test-gate (push) Has been cancelled
Create Release / responsive-test-gate (push) Has been cancelled
Create Release / compat-test-gate (push) Has been cancelled
Create Release / compose-integration-gate (push) Has been cancelled
Create Release / vulture-gate (push) Has been cancelled
Create Release / build (push) Has been cancelled
Create Release / provenance (push) Has been cancelled
Create Release / prerelease-docker (push) Has been cancelled
Create Release / publish-docker (push) Has been cancelled
Create Release / create-release (push) Has been cancelled
Create Release / cleanup-changelog (push) Has been cancelled
Create Release / trigger-pypi (push) Has been cancelled
Create Release / monitor-pypi (push) Has been cancelled
Create Release / Clean up orphan prerelease tags and signatures (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-form] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-metrics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-workflow] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-core] (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [history-news] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [library] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [link-analytics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-core] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-lifecycle] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [error-benchmark] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) (push) Has been cancelled
Docker Tests (Consolidated) / Accessibility Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Unit Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Example Tests (push) Has been cancelled
Docker Tests (Consolidated) / Production Image Smoke Test (push) Has been cancelled
Docker Tests (Consolidated) / Infrastructure Tests (push) Has been cancelled
OSSF Scorecard / OSSF Security Scorecard Analysis (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [mobile] (push) Has been cancelled
Backwards Compatibility / Verify Encryption Constants (push) Has been cancelled
Backwards Compatibility / PyPI Version Compatibility (push) Has been cancelled
Backwards Compatibility / Database Migration Tests (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Docker Tests (Consolidated) / detect-changes (push) Has been cancelled
Docker Tests (Consolidated) / Build Test Image (push) Has been cancelled
Docker Tests (Consolidated) / All Pytest Tests + Coverage (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [accessibility] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [api-crud] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-login] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-register] (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:08:55 +08:00

6.7 KiB

Troubleshooting OpenAI API Key Configuration

This guide helps troubleshoot common issues with OpenAI API key configuration in Local Deep Research v1.0+.

Quick Test

Run the end-to-end test to verify your configuration:

# Using command line arguments
python tests/test_openai_api_key_e2e.py \
  --username YOUR_USERNAME \
  --password YOUR_PASSWORD \
  --api-key YOUR_OPENAI_API_KEY

# Using environment variables
export LDR_USERNAME=your_username
export LDR_PASSWORD=your_password
export OPENAI_API_KEY=sk-your-api-key
python tests/test_openai_api_key_e2e.py

Common Issues and Solutions

1. "No API key found"

Symptoms:

  • Error message about missing API key
  • Research fails to start

Solutions:

  1. Via Web Interface:

    • Login to LDR web interface
    • Go to Settings
    • Select "OpenAI" as LLM Provider
    • Enter your API key in the "OpenAI API Key" field
    • Click Save
  2. Via Environment Variable:

    export OPENAI_API_KEY=sk-your-api-key
    python -m local_deep_research.web.app
    
  3. Programmatically:

    from local_deep_research.settings import SettingsManager
    from local_deep_research.database.session_context import get_user_db_session
    
    with get_user_db_session(username="user", password="pass") as session:
        settings_manager = SettingsManager(session)
        settings_manager.set_setting("llm.provider", "openai")
        settings_manager.set_setting("llm.openai.api_key", "sk-your-api-key")
    

2. "Invalid API key"

Symptoms:

  • 401 Unauthorized errors
  • "Incorrect API key provided" messages

Solutions:

  1. Verify API Key Format:

    • OpenAI keys start with sk-
    • Should be around 51 characters long
    • No extra spaces or quotes
  2. Check API Key Validity:

    # Test directly with curl
    curl https://api.openai.com/v1/models \
      -H "Authorization: Bearer YOUR_API_KEY"
    
  3. Regenerate API Key:

3. "Rate limit exceeded"

Symptoms:

  • 429 errors
  • "You exceeded your current quota" messages

Solutions:

  1. Check OpenAI Usage:

  2. Add Payment Method:

  3. Use Different Model:

    settings_manager.set_setting("llm.model", "gpt-3.5-turbo")  # Cheaper
    # Instead of gpt-4 which is more expensive
    

4. "Settings not persisting"

Symptoms:

  • API key needs to be re-entered after restart
  • Settings revert to defaults

Solutions:

  1. Ensure Proper Shutdown:

    • Use Ctrl+C to stop server (not kill -9)
    • Wait for "Server stopped" message
  2. Check Database Permissions:

    ls -la encrypted_databases/
    # Should show your user database with write permissions
    
  3. Verify Settings Save:

    # After setting, verify it was saved
    saved_key = settings_manager.get_setting("llm.openai.api_key")
    print(f"Saved key: {'*' * 20 if saved_key else 'Not saved'}")
    

5. "API key not being used"

Symptoms:

  • Settings show OpenAI configured but different LLM is used
  • API key is saved but not applied

Solutions:

  1. Check Provider Setting:

    provider = settings_manager.get_setting("llm.provider")
    print(f"Current provider: {provider}")  # Should be "openai"
    
  2. Verify Settings Snapshot:

    settings_snapshot = settings_manager.get_all_settings()
    print("Provider:", settings_snapshot.get("llm.provider", {}).get("value"))
    print("API Key:", "Set" if settings_snapshot.get("llm.openai.api_key", {}).get("value") else "Not set")
    
  3. Force Provider Selection:

    # In research call
    result = quick_summary(
        query="Test",
        settings_snapshot=settings_snapshot,
        provider="openai",  # Force OpenAI
        model_name="gpt-3.5-turbo"
    )
    

Testing Your Configuration

1. Simple API Test

from local_deep_research.config.llm_config import get_llm
from local_deep_research.settings import SettingsManager
from local_deep_research.database.session_context import get_user_db_session

with get_user_db_session(username="user", password="pass") as session:
    settings_manager = SettingsManager(session)
    settings_snapshot = settings_manager.get_all_settings()

    # Test LLM initialization
    try:
        llm = get_llm(settings_snapshot=settings_snapshot)
        print("✓ LLM initialized successfully")

        # Test response
        from langchain.schema import HumanMessage
        response = llm.invoke([HumanMessage(content="Say hello")])
        print(f"✓ Response: {response.content}")
    except Exception as e:
        print(f"✗ Error: {e}")

2. Full Research Test

from local_deep_research.api.research_functions import quick_summary

result = quick_summary(
    query="What is OpenAI?",
    settings_snapshot=settings_snapshot,
    iterations=1,
    questions_per_iteration=1
)

print(f"Research ID: {result['research_id']}")
print(f"Summary: {result['summary'][:200]}...")

Advanced Configuration

Using Azure OpenAI

settings_manager.set_setting("llm.provider", "openai")
settings_manager.set_setting("llm.openai.api_key", "your-azure-key")
settings_manager.set_setting("llm.openai.api_base", "https://your-resource.openai.azure.com/")
settings_manager.set_setting("llm.model", "your-deployment-name")

Using OpenAI-Compatible Endpoints

settings_manager.set_setting("llm.provider", "openai")
settings_manager.set_setting("llm.openai.api_key", "your-api-key")
settings_manager.set_setting("llm.openai.api_base", "https://your-endpoint.com/v1")

Organization ID

settings_manager.set_setting("llm.openai.organization", "org-your-org-id")

Getting Help

  1. Run Diagnostic Test:

    python tests/test_openai_api_key_e2e.py --verbose
    
  2. Check Logs:

    # Look for OpenAI-related errors
    grep -i "openai\|api.*key" logs/ldr.log
    
  3. Community Support:

  4. API Key Best Practices:

    • Never commit API keys to version control
    • Use environment variables for production
    • Rotate keys regularly
    • Set usage limits in OpenAI dashboard

See Also