Skip to content

Fix model.split error when model is array#126

Open
bledden wants to merge 1 commit intokarpathy:masterfrom
bledden:fix-issue-117-model-split
Open

Fix model.split error when model is array#126
bledden wants to merge 1 commit intokarpathy:masterfrom
bledden:fix-issue-117-model-split

Conversation

@bledden
Copy link
Copy Markdown

@bledden bledden commented Jan 6, 2026

Summary

Fixes #117 - Frontend crashes when model is an array instead of a string.

Problem

The frontend code calls model.split('/') but some API responses return model as an array (e.g., ["openai/gpt-4o"]) instead of a string, causing:

TypeError: finalResponse.model.split is not a function

Solution

Added getModelDisplayName() helper in frontend/src/utils.js that handles:

  • Arrays (extracts first element)
  • null/undefined (returns "Unknown")
  • Non-string types (converts to string)
  • Missing slash (returns whole string)

Updated Stage1, Stage2, and Stage3 components to use this helper.

Validation

// BEFORE (crashes):
finalResponse.model = ["openai/gpt-4o"]
finalResponse.model.split('/')  TypeError: split is not a function

// AFTER (works):
getModelDisplayName(["openai/gpt-4o"])  "gpt-4o"

Test plan

  • Verify frontend doesn't crash when model is returned as array
  • Verify normal string models still display correctly

🤖 Generated with Claude Code

Fixes karpathy#117 - handles arrays, null/undefined, and missing slashes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
eddiefleurent added a commit to eddiefleurent/llm-council that referenced this pull request Jan 30, 2026
Tier 1 (High Value, Low Risk):
- PR #72: Use CHAIRMAN_MODEL for title generation (configurable)
- PR #51: Validate OPENROUTER_API_KEY at startup (fail fast)
- PR #5: Fix text overflow on chat interface (CSS fixes)
- PR #69: Prevent conversation switching while streaming
- PR karpathy#110: Copy functionality (copy buttons for responses)

Tier 2 (Good Features, Moderate Complexity):
- PR karpathy#126: Fix model.split error when model is array (defensive)
- PR karpathy#127: Structured error propagation for API failures
- PR #67: Continuous conversation mode + prevent empty convos
- PR #90: Clear History button with confirmation
- PR karpathy#128: Tournament-style pairwise ranking (Condorcet voting)

Tier 3 (Nice-to-Have, More Complex):
- PR karpathy#109: Multi-message conversation support with context
- PR #24: Test suite infrastructure (pytest setup)

New files:
- backend/context.py: Smart conversation context management
- frontend/src/utils.js: getModelDisplayName helper
- frontend/src/components/CopyButton.jsx: Reusable copy button
- tests/: Unit test infrastructure
- pytest.ini, conftest.py: Test configuration
eddiefleurent added a commit to eddiefleurent/llm-council that referenced this pull request Jan 30, 2026
…opy, tests) (#1)

* Integrate valuable PRs from abandoned upstream

Tier 1 (High Value, Low Risk):
- PR #72: Use CHAIRMAN_MODEL for title generation (configurable)
- PR #51: Validate OPENROUTER_API_KEY at startup (fail fast)
- PR #5: Fix text overflow on chat interface (CSS fixes)
- PR #69: Prevent conversation switching while streaming
- PR karpathy#110: Copy functionality (copy buttons for responses)

Tier 2 (Good Features, Moderate Complexity):
- PR karpathy#126: Fix model.split error when model is array (defensive)
- PR karpathy#127: Structured error propagation for API failures
- PR #67: Continuous conversation mode + prevent empty convos
- PR #90: Clear History button with confirmation
- PR karpathy#128: Tournament-style pairwise ranking (Condorcet voting)

Tier 3 (Nice-to-Have, More Complex):
- PR karpathy#109: Multi-message conversation support with context
- PR #24: Test suite infrastructure (pytest setup)

New files:
- backend/context.py: Smart conversation context management
- frontend/src/utils.js: getModelDisplayName helper
- frontend/src/components/CopyButton.jsx: Reusable copy button
- tests/: Unit test infrastructure
- pytest.ini, conftest.py: Test configuration

* Enhance backend and frontend functionality

- Added defensive check in `run_full_council` to handle empty messages.
- Improved error handling in `send_message_stream` with logging and sanitized error messages.
- Updated `delete_all_conversations` to return a list of deletion results, including any failures.
- Modified API call in frontend to require confirmation for deleting conversations.
- Enhanced `getModelDisplayName` to handle multi-slash identifiers.
- Updated `CopyButton` component to clear timeout on unmount and improve success state handling.
- CSS adjustments for better styling and functionality across components.
- Added unit tests for conversation retrieval and management functions.

* Refactor tournament ranking calculation and enhance frontend message handling

- Updated `calculate_tournament_rankings` to use actual matchups for win percentage calculation.
- Integrated `calculate_tournament_rankings` into the message streaming process in `send_message_stream`.
- Improved loading state management for message updates in the frontend, ensuring immutability and clarity in state changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

"finalResponse.model.split is not a function"

1 participant