Skip to content
Back to skills

917 Vision Analysis Debug Logging 76e447a8

ASecurity

**Version**: 0.233.202 **Enhancement Type**: Diagnostic Logging **Purpose**: Diagnose GPT-5 vision analysis issues where no errors are thrown but results are incomplete ---

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 11, 2026
developmentpythongoazuretestingapibackend

Works with

  • terminal
  • cli
  • api

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 917-vision_analysis_debug_logging_76e447a8 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 917 Vision Analysis Debug Logging 76e447a8?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 917 Vision Analysis Debug Logging 76e447a8
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-917-vision-analysis-debug-logging-76e447a8/badge)](https://www.skillsdirectory.com/skills/tools-only-917-vision-analysis-debug-logging-76e447a8)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Enhanced Vision Analysis Debug Logging

**Version**: 0.233.202  
**Enhancement Type**: Diagnostic Logging  
**Purpose**: Diagnose GPT-5 vision analysis issues where no errors are thrown but results are incomplete

---

## Problem

GPT-5 vision analysis was not throwing errors but wasn't working properly:
- Backend logs showed "Vision response not valid JSON, using raw text"
- GPT-4o worked correctly
- No detailed information about what was happening during the vision analysis process

---

## Solution

Added comprehensive `debug_print()` logging throughout the `analyze_image_with_vision_model()` function to provide detailed visibility into every step of the vision analysis process.

### Enhanced Logging Categories

#### 1. Image Conversion & Preparation
```
[VISION_ANALYSIS] Image conversion for {document_id}:
  Image path: /path/to/image.png
  Original size: 8,340,622 bytes (7.95 MB)
  Base64 size: 11,120,828 characters
  MIME type: image/png
```

**What to look for**:
- Very large images might cause issues (> 20 MB)
- Incorrect MIME type detection
- Base64 encoding problems

#### 2. Model Configuration
```
[VISION_ANALYSIS] Vision model selected: gpt-5
[VISION_ANALYSIS] Using APIM: False
```

**What to look for**:
- Correct model name
- APIM vs Direct connection method

#### 3. Client Initialization
```
[VISION_ANALYSIS] Direct Azure OpenAI Configuration:
  Endpoint: https://your-resource.openai.azure.com/
  API Version: 2024-02-15-preview
  Auth Type: key
```

**What to look for**:
- Correct endpoint for the model deployment
- API version compatibility (vision requires 2024-02-15-preview or later)
- Authentication method matches configuration

#### 4. API Parameter Selection
```
[VISION_ANALYSIS] Building API request parameters:
  Model (lowercase): gpt-5
  Uses max_completion_tokens: True
  Detection: o1=False, o3=False, gpt-5=True
  Token parameter: max_completion_tokens = 1000
```

**What to look for**:
- Correct detection of model type
- Proper parameter selection (max_completion_tokens for gpt-5, max_tokens for gpt-4o)
- Token limit appropriate for response

#### 5. Request Details
```
[VISION_ANALYSIS] Sending request to Azure OpenAI...
  Message content types: text + image_url
  Image data URL prefix: data:image/png;base64,... (11120828 chars)
```

**What to look for**:
- Proper message structure
- Base64 data being sent

#### 6. Response Metadata
```
[VISION_ANALYSIS] Response received from gpt-5
  Response ID: chatcmpl-ABC123XYZ
  Model used: gpt-5-2024-11-20
  Token usage: prompt=1245, completion=156, total=1401
```

**What to look for**:
- Actual model used (might differ from deployment name)
- Token usage patterns (high prompt tokens = large image)
- Response ID for tracking

#### 7. Response Content Analysis
```
[VISION_ANALYSIS] Raw response received:
  Length: 823 characters
  First 500 chars: The image is a stylized promotional graphic...
  Last 100 chars: ...emphasizing the prestige and excitement of the event.
  Starts with JSON bracket: False
  Contains code fence: False
```

**What to look for**:
- **CRITICAL**: If `Starts with JSON bracket: False`, the response is NOT in JSON format
- If `Contains code fence: True`, response might be wrapped in markdown
- Response length (too short might indicate truncation)

#### 8. JSON Parsing Attempt
```
[VISION_ANALYSIS] Attempting to clean JSON code fences...
  Cleaned length: 823 characters
  Cleaned first 200 chars: The image is a stylized promotional...
[VISION_ANALYSIS] Attempting to parse as JSON...
[VISION_ANALYSIS] ❌ JSON parsing failed!
  Error type: JSONDecodeError
  Error message: Expecting value: line 1 column 1 (char 0)
  Content that failed to parse (first 1000 chars): The image is a stylized...
```

**What to look for**:
- **CRITICAL**: If JSON parsing fails, shows WHY it failed
- Shows the exact content that couldn't be parsed
- Indicates if the model returned plain text instead of JSON

#### 9. Successful JSON Parsing
```
[VISION_ANALYSIS] ✅ Successfully parsed JSON response!
  JSON keys: ['description', 'objects', 'text', 'analysis']
```

**What to look for**:
- All expected keys present: description, objects, text, analysis
- Missing keys indicate incomplete response

#### 10. Final Analysis Structure
```
[VISION_ANALYSIS] Final analysis structure for {document_id}:
  Model: gpt-5
  Has 'description': True
  Has 'objects': True
  Has 'text': True
  Has 'analysis': True
  Description length: 234 chars
  Description preview: The image is a stylized promotional graphic...
  Objects count: 4
  Objects: ['jockeys', 'horses', 'artistic brushstrokes', 'text block']
  Text length: 523 chars
  Text preview: The 149th PREAKNESS May 18, 2024...
```

**What to look for**:
- All expected fields populated
- Reasonable content in each field
- Objects list populated (indicates vision working)
- Text extracted (indicates OCR working)

---

## Diagnostic Workflow

### When GPT-5 Shows "Vision response not valid JSON"

1. **Check Response Format**:
   ```
   Starts with JSON bracket: False  ← Problem!
   ```
   - If False, GPT-5 is returning plain text, not JSON
   - This is the most common issue

2. **Check Response Content**:
   ```
   First 500 chars: The image is a stylized promotional graphic...
   ```
   - Does it look like a description (plain text)?
   - Or does it look like JSON structure?

3. **Check Token Usage**:
   ```
   Token usage: prompt=15234, completion=89, total=15323
   ```
   - Very high prompt tokens (> 10k) = large image
   - Low completion tokens (< 100) might indicate truncated response

4. **Check Model Version**:
   ```
   Model used: gpt-5-2024-11-20
   ```
   - Might reveal model doesn't support JSON mode
   - Or model is preview version with different behavior

5. **Check API Version**:
   ```
   API Version: 2024-02-15-preview
   ```
   - Older API versions might not support certain features
   - Try newer version if available

---

## Common Issues & Solutions

### Issue 1: GPT-5 Returns Plain Text Instead of JSON

**Symptoms**:
```
Starts with JSON bracket: False
JSON parsing failed: Expecting value: line 1 column 1
```

**Possible Causes**:
1. **GPT-5 doesn't support JSON mode** - Some preview models don't support structured output
2. **Prompt needs adjustment** - Model not following JSON format instruction
3. **Model interprets vision differently** - Reasoning models might need different prompts

**Solutions**:
- Add `response_format={"type": "json_object"}` parameter (if supported)
- Modify prompt to be more explicit about JSON requirement
- Use post-processing to convert plain text to JSON structure

### Issue 2: Large Image Causing Issues

**Symptoms**:
```
Original size: 8,340,622 bytes (7.95 MB)
Token usage: prompt=18945, completion=45, total=18990
```

**Solutions**:
- Image too large for context window
- Compress/resize image before analysis
- Split into multiple smaller images

### Issue 3: Model Not Supporting Vision

**Symptoms**:
```
Error: Model does not support image inputs
```

**Solutions**:
- Verify model deployment supports vision
- Check API version is 2024-02-15-preview or later
- Confirm deployment region supports vision models

---

## Testing GPT-5 vs GPT-4o

With enhanced logging, you can now compare:

### GPT-4o Successful Response:
```
✅ Successfully parsed JSON response!
JSON keys: ['description', 'objects', 'text', 'analysis']
Objects count: 4
```

### GPT-5 Problem Response:
```
❌ JSON parsing failed!
Starts with JSON bracket: False
Content that failed to parse: The image is a stylized promotional graphic...
```

This clearly shows GPT-5 is returning plain text descriptions instead of JSON structure.

---

## Next Steps

### If GPT-5 Returns Plain Text:

1. **Modify Prompt for GPT-5** - Add stricter JSON formatting requirement
2. **Enable JSON Mode** - If model supports it: `response_format={"type": "json_object"}`
3. **Post-Process Response** - Parse plain text response into JSON structure
4. **Use Different Approach** - Some models prefer different instruction formats

### If Model Doesn't Support JSON Mode:

Create fallback logic:
```python
if 'gpt-5' in model_name and not response_is_json:
    # Parse natural language response into structured format
    vision_analysis = parse_natural_language_vision_response(content)
```

---

## Files Modified

- **`functions_documents.py`**: Enhanced `analyze_image_with_vision_model()` with comprehensive logging
- **`config.py`**: Version updated to 0.233.202

---

## Enabling Debug Output

Debug logging uses `debug_print()` which respects the application's debug settings:

1. **Enable Debug Mode** in application settings
2. **Check Terminal Output** where backend is running
3. **Review Logs** for `[VISION_ANALYSIS]` entries

All debug logs are prefixed with `[VISION_ANALYSIS]` for easy filtering.

---

## References

- Vision Model Parameter Fix (v0.233.201)
- Multi-Modal Vision Analysis Feature (v0.229.088)
- Vision Model Detection Expansion (v0.229.089)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.