Skip to content

Add comprehensive edge case tests for LLMRequest conversions#92

Open
sarvanithin wants to merge 1 commit intowithmartian:mainfrom
sarvanithin:feat/comprehensive-llm-request-tests
Open

Add comprehensive edge case tests for LLMRequest conversions#92
sarvanithin wants to merge 1 commit intowithmartian:mainfrom
sarvanithin:feat/comprehensive-llm-request-tests

Conversation

@sarvanithin
Copy link
Contributor

Summary

Addresses Issue #64 by adding 47 comprehensive edge case tests for LLMRequest conversions across all three APIs (OpenAI Chat, OpenAI Responses, Anthropic Messages).

Test Coverage Added

Tool/Function Calling (8 tests)

  • Empty tools list vs None, Empty/minimal schemas, Complex nested JSON schemas
  • Tool choice variants (any/none/specific), Special characters in names, Required field handling

Message Content (9 tests)

  • Empty/whitespace content, Unicode (emoji, CJK, RTL, math symbols)
  • Combined emoji with modifiers, Very long content (10k chars)

Roundtrip Conversions (3 tests)

  • Messages ↔ Responses ↔ Messages, Chat ↔ Messages ↔ Chat with tools, Responses ↔ Chat ↔ Responses

Parameter Boundaries (8 tests)

  • Temperature edge values (0.0, 2.0, clamping), Top-p boundaries, Stop sequences at/exceeding limits

Error Handling (7 tests)

  • Strict mode validation, Non-strict graceful degradation, API-specific constraints

API-Specific (4 tests)

  • String input conversion, System message extraction, Instructions mapping, Default values

Metadata & Tool Choice (6 tests)

  • Null values, nested structures, Roundtrip preservation

Impact

  • Test coverage: 55 → 102 tests (+85%)
  • Edge cases covered: ~47 of ~200 identified
  • All tests passing: 102/102 ✅

Addresses Issue #64

…ithmartian#64)

Add 47 new tests systematically covering edge cases across all LLMRequest conversions:

Tool/Function Calling Edge Cases (8 tests):
- Empty tools list, empty/minimal schemas, complex nested schemas
- Tool choice variants (any, none, specific tool)
- Special characters in tool names, required field handling

Message Content Edge Cases (9 tests):
- Empty/whitespace content, newlines, emoji, unicode (CJK, RTL, math symbols)
- Combined emoji with skin tones/ZWJ, very long content (10k chars)

Roundtrip Conversions (3 tests):
- Messages ↔ Responses ↔ Messages preserves parameters
- Chat ↔ Messages ↔ Chat preserves tool definitions
- Responses ↔ Chat ↔ Responses preserves system_prompt

Parameter Boundaries (8 tests):
- Temperature edge values (0.0, 2.0, conversion clamping)
- Top-p boundaries (0.0, 1.0)
- Max output tokens minimal values
- Stop sequences at/exceeding Chat API limit (4 items)
- Empty strings in stop sequences

Error Handling - Strict Mode (4 tests):
- Service tier validation (standard_only filtered by Chat)
- Top-k unsupported by Chat/Responses raises
- Stop sequences unsupported by Responses raises
- Non-alternating messages for Anthropic raises

Error Handling - Non-Strict Mode (3 tests):
- Top-k silently filtered when unsupported
- Stop sequences filtered for Responses
- Duplicate role messages dropped with warning

API-Specific Conversions (4 tests):
- Responses string input → user message
- Chat system message extraction to system_prompt
- Responses instructions → system_prompt
- Anthropic max_tokens defaults to 1024

Metadata Edge Cases (4 tests):
- Null values, nested dicts, array values
- Empty metadata dict omitted from output

Tool Choice Roundtrips (2 tests):
- Auto choice preserved across all API pairs
- Specific tool name preserved in roundtrips

Multiple Messages (2 tests):
- Multiple empty messages handled
- Properly alternating messages preserved

Total test coverage increased from 55 to 102 tests (+85%).
Addresses ~47 of ~200 edge cases identified in Issue withmartian#64.
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.

1 participant