🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

vsegments

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vsegments - npm Package Compare versions

Comparing version
0.1.2
to
0.1.3
+256
TROUBLESHOOTING.md
# Troubleshooting Guide
## Common Issues and Solutions
### 1. Google Gemini API Errors
#### Error: 500 Internal Server Error
```
GoogleGenerativeAIFetchError: [GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1beta/models/...: [500 Internal Server Error]
```
**Possible Causes:**
- Temporary API outage
- Model name is incorrect or unavailable
- API quota exceeded
- Image is too large or in unsupported format
**Solutions:**
1. **Try a different model:**
```javascript
const vs = new VSegments({
apiKey: 'YOUR_API_KEY',
model: 'gemini-3-pro-preview' // Default model
});
```
2. **Wait and retry:** The API may be experiencing temporary issues
3. **Check your API key:** Verify it's valid and has proper permissions
4. **Reduce image size:** Ensure images are under 4MB and reasonable dimensions
5. **Verify image path:** Make sure the image file exists and is readable
#### Error: 403 Forbidden
```
GoogleGenerativeAIFetchError: [403 Forbidden]
```
**Causes:**
- Invalid API key
- API key doesn't have necessary permissions
- API not enabled for your project
**Solutions:**
1. Verify your API key is correct
2. Enable the Generative Language API in Google Cloud Console
3. Check API key restrictions in Google Cloud Console
#### Error: 429 Too Many Requests
```
GoogleGenerativeAIFetchError: [429 Too Many Requests]
```
**Causes:**
- Rate limit exceeded
- Quota exceeded
**Solutions:**
1. Wait before making more requests
2. Implement rate limiting in your code
3. Upgrade your API quota if needed
### 2. Image Loading Issues
#### Error: Image file not found
```
Error: Image file not found: path/to/image.jpg
```
**Solutions:**
1. Check the file path is correct (use absolute paths)
2. Verify the file exists: `ls path/to/image.jpg`
3. Check file permissions
#### Unsupported Image Format
**Supported formats:** JPG, JPEG, PNG, GIF, WEBP
**Solutions:**
1. Convert your image to a supported format
2. Check the file extension is correct
### 3. Module/Package Issues
#### Warning: MODULE_TYPELESS_PACKAGE_JSON
```
(node:xxxxx) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///... is not specified
```
**Solution:**
Add to your `package.json`:
```json
{
"type": "module"
}
```
Or use CommonJS syntax:
```javascript
const VSegments = require('vsegments');
```
#### Error: Cannot find module 'vsegments'
```
Error: Cannot find module 'vsegments'
```
**Solutions:**
1. Install the package: `npm install vsegments`
2. Check you're in the right directory
3. Verify `node_modules` exists
### 4. Segmentation Issues
#### No objects detected
```
Found 0 objects
```
**Possible causes:**
- Image is too simple/blank
- Objects are not clear enough
- Prompt is too specific
**Solutions:**
1. Use a clearer image
2. Try a custom prompt
3. Adjust the model settings
#### Poor segmentation quality
**Solutions:**
1. **Use higher quality images:**
```javascript
const result = await vs.segment('image.jpg', {
maxSize: 2048 // Increase max size
});
```
2. **Adjust temperature:**
```javascript
const vs = new VSegments({
apiKey: 'YOUR_API_KEY',
temperature: 0.2 // Lower = more consistent
});
```
3. **Use custom prompts:**
```javascript
const result = await vs.segment('image.jpg', {
prompt: 'Detect and segment all people and vehicles in this image'
});
```
### 5. Performance Issues
#### Slow processing
**Solutions:**
1. **Reduce image size:**
```javascript
const result = await vs.segment('image.jpg', {
maxSize: 512 // Smaller = faster
});
```
2. **Use recommended model:**
```javascript
const vs = new VSegments({
apiKey: 'YOUR_API_KEY',
model: 'gemini-3-pro-preview' // Default high-quality model
});
```
3. **Process images in batches** rather than all at once
### 6. Canvas/Visualization Issues
#### Error: Cannot find module 'canvas'
```
Error: Cannot find module 'canvas'
```
**Solutions:**
1. The `canvas` dependency requires native compilation
2. Install build tools:
- **macOS:** `xcode-select --install`
- **Ubuntu/Debian:** `sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev`
- **Windows:** Install windows-build-tools
3. Reinstall canvas: `npm install canvas --build-from-source`
## Testing Your Setup
Create a simple test script (`test-setup.js`):
```javascript
import VSegments from 'vsegments';
import fs from 'fs';
async function test() {
console.log('Testing vsegments setup...\n');
// 1. Test API key
const apiKey = process.env.GOOGLE_API_KEY;
if (!apiKey) {
console.error('❌ GOOGLE_API_KEY not set');
process.exit(1);
}
console.log('✅ API key found');
// 2. Test initialization
try {
const vs = new VSegments({ apiKey });
console.log('✅ VSegments initialized');
} catch (error) {
console.error('❌ Initialization failed:', error.message);
process.exit(1);
}
// 3. Test image file
const imagePath = 'test-image.jpg';
if (!fs.existsSync(imagePath)) {
console.error(`❌ Test image not found: ${imagePath}`);
console.log(' Create a test-image.jpg to continue');
process.exit(1);
}
console.log('✅ Test image found');
console.log('\n✅ Setup looks good! Try running your script.');
}
test().catch(console.error);
```
## Getting Help
If you continue to experience issues:
1. **Check the examples:** Review the example scripts in the `examples/` directory
2. **Review the API documentation:** [Google Gemini API Docs](https://ai.google.dev/docs)
3. **File an issue:** [GitHub Issues](https://github.com/nxtphaseai/node_vsegments/issues)
4. **Check API status:** [Google Cloud Status Dashboard](https://status.cloud.google.com/)
## Recommended Models (as of December 2025)
- **Default (Best quality):** `gemini-3-pro-preview`
- **Alternative:** `gemini-2.5-flash`
Update your code:
```javascript
const vs = new VSegments({
apiKey: 'YOUR_API_KEY',
model: 'gemini-3-pro-preview' // Default
});
```
+33
-25
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1764937975239" clover="3.2.0">
<project timestamp="1764937975239" name="All files">
<metrics statements="203" coveredstatements="82" conditionals="69" coveredconditionals="24" methods="24" coveredmethods="12" elements="296" coveredelements="118" complexity="0" loc="203" ncloc="203" packages="1" files="5" classes="5"/>
<coverage generated="1764938703619" clover="3.2.0">
<project timestamp="1764938703620" name="All files">
<metrics statements="211" coveredstatements="82" conditionals="73" coveredconditionals="24" methods="24" coveredmethods="12" elements="308" coveredelements="118" complexity="0" loc="211" ncloc="211" packages="1" files="5" classes="5"/>
<file name="core.js" path="/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/core.js">
<metrics statements="55" coveredstatements="23" conditionals="31" coveredconditionals="15" methods="7" coveredmethods="3"/>
<metrics statements="63" coveredstatements="23" conditionals="35" coveredconditionals="15" methods="7" coveredmethods="3"/>
<line num="5" count="2" type="stmt"/>

@@ -36,28 +36,36 @@ <line num="6" count="2" type="stmt"/>

<line num="127" count="0" type="stmt"/>
<line num="134" count="0" type="stmt"/>
<line num="141" count="0" type="stmt"/>
<line num="142" count="0" type="stmt"/>
<line num="145" count="0" type="stmt"/>
<line num="135" count="0" type="stmt"/>
<line num="136" count="0" type="stmt"/>
<line num="143" count="0" type="stmt"/>
<line num="144" count="0" type="stmt"/>
<line num="146" count="0" type="cond" truecount="0" falsecount="2"/>
<line num="147" count="0" type="stmt"/>
<line num="162" count="0" type="stmt"/>
<line num="165" count="0" type="stmt"/>
<line num="168" count="0" type="stmt"/>
<line num="169" count="0" type="stmt"/>
<line num="170" count="0" type="stmt"/>
<line num="173" count="0" type="stmt"/>
<line num="151" count="0" type="stmt"/>
<line num="155" count="0" type="stmt"/>
<line num="157" count="0" type="stmt"/>
<line num="172" count="0" type="stmt"/>
<line num="175" count="0" type="stmt"/>
<line num="178" count="0" type="stmt"/>
<line num="179" count="0" type="stmt"/>
<line num="186" count="0" type="stmt"/>
<line num="187" count="0" type="stmt"/>
<line num="180" count="0" type="stmt"/>
<line num="183" count="0" type="stmt"/>
<line num="190" count="0" type="stmt"/>
<line num="191" count="0" type="stmt"/>
<line num="193" count="0" type="stmt"/>
<line num="198" count="0" type="stmt"/>
<line num="199" count="0" type="stmt"/>
<line num="201" count="0" type="cond" truecount="0" falsecount="2"/>
<line num="202" count="0" type="stmt"/>
<line num="206" count="0" type="stmt"/>
<line num="210" count="0" type="stmt"/>
<line num="211" count="0" type="stmt"/>
<line num="213" count="0" type="stmt"/>
<line num="216" count="0" type="stmt"/>
<line num="219" count="0" type="cond" truecount="0" falsecount="2"/>
<line num="220" count="0" type="stmt"/>
<line num="226" count="0" type="stmt"/>
<line num="233" count="0" type="cond" truecount="0" falsecount="2"/>
<line num="234" count="0" type="stmt"/>
<line num="237" count="0" type="stmt"/>
<line num="241" count="2" type="stmt"/>
<line num="233" count="0" type="stmt"/>
<line num="236" count="0" type="stmt"/>
<line num="239" count="0" type="cond" truecount="0" falsecount="2"/>
<line num="240" count="0" type="stmt"/>
<line num="246" count="0" type="stmt"/>
<line num="253" count="0" type="cond" truecount="0" falsecount="2"/>
<line num="254" count="0" type="stmt"/>
<line num="257" count="0" type="stmt"/>
<line num="261" count="2" type="stmt"/>
</file>

@@ -64,0 +72,0 @@ <file name="index.js" path="/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/index.js">

@@ -1,2 +0,2 @@

{"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/core.js": {"path":"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/core.js","statementMap":{"0":{"start":{"line":5,"column":31},"end":{"line":5,"column":63}},"1":{"start":{"line":6,"column":22},"end":{"line":6,"column":39}},"2":{"start":{"line":7,"column":11},"end":{"line":7,"column":33}},"3":{"start":{"line":8,"column":31},"end":{"line":8,"column":50}},"4":{"start":{"line":9,"column":55},"end":{"line":9,"column":73}},"5":{"start":{"line":15,"column":4},"end":{"line":15,"column":26}},"6":{"start":{"line":27,"column":4},"end":{"line":27,"column":63}},"7":{"start":{"line":29,"column":4},"end":{"line":33,"column":5}},"8":{"start":{"line":30,"column":6},"end":{"line":32,"column":8}},"9":{"start":{"line":35,"column":4},"end":{"line":35,"column":56}},"10":{"start":{"line":36,"column":4},"end":{"line":36,"column":85}},"11":{"start":{"line":37,"column":4},"end":{"line":37,"column":47}},"12":{"start":{"line":40,"column":4},"end":{"line":40,"column":53}},"13":{"start":{"line":43,"column":4},"end":{"line":46,"column":13}},"14":{"start":{"line":49,"column":4},"end":{"line":54,"column":6}},"15":{"start":{"line":63,"column":24},"end":{"line":63,"column":52}},"16":{"start":{"line":64,"column":23},"end":{"line":64,"column":53}},"17":{"start":{"line":65,"column":21},"end":{"line":65,"column":49}},"18":{"start":{"line":67,"column":4},"end":{"line":72,"column":6}},"19":{"start":{"line":81,"column":16},"end":{"line":81,"column":55}},"20":{"start":{"line":82,"column":22},"end":{"line":88,"column":5}},"21":{"start":{"line":89,"column":4},"end":{"line":89,"column":42}},"22":{"start":{"line":98,"column":23},"end":{"line":98,"column":53}},"23":{"start":{"line":100,"column":4},"end":{"line":102,"column":5}},"24":{"start":{"line":101,"column":6},"end":{"line":101,"column":48}},"25":{"start":{"line":104,"column":4},"end":{"line":104,"column":24}},"26":{"start":{"line":121,"column":8},"end":{"line":121,"column":15}},"27":{"start":{"line":124,"column":18},"end":{"line":124,"column":50}},"28":{"start":{"line":127,"column":18},"end":{"line":131,"column":6}},"29":{"start":{"line":134,"column":19},"end":{"line":139,"column":6}},"30":{"start":{"line":141,"column":21},"end":{"line":141,"column":36}},"31":{"start":{"line":142,"column":17},"end":{"line":142,"column":32}},"32":{"start":{"line":145,"column":18},"end":{"line":145,"column":42}},"33":{"start":{"line":147,"column":4},"end":{"line":147,"column":53}},"34":{"start":{"line":162,"column":8},"end":{"line":162,"column":15}},"35":{"start":{"line":165,"column":18},"end":{"line":165,"column":50}},"36":{"start":{"line":168,"column":16},"end":{"line":168,"column":42}},"37":{"start":{"line":169,"column":21},"end":{"line":169,"column":30}},"38":{"start":{"line":170,"column":22},"end":{"line":170,"column":32}},"39":{"start":{"line":173,"column":18},"end":{"line":176,"column":6}},"40":{"start":{"line":179,"column":19},"end":{"line":184,"column":6}},"41":{"start":{"line":186,"column":21},"end":{"line":186,"column":36}},"42":{"start":{"line":187,"column":17},"end":{"line":187,"column":32}},"43":{"start":{"line":190,"column":18},"end":{"line":190,"column":42}},"44":{"start":{"line":191,"column":18},"end":{"line":191,"column":73}},"45":{"start":{"line":193,"column":4},"end":{"line":193,"column":54}},"46":{"start":{"line":213,"column":8},"end":{"line":213,"column":15}},"47":{"start":{"line":216,"column":19},"end":{"line":216,"column":59}},"48":{"start":{"line":219,"column":4},"end":{"line":230,"column":5}},"49":{"start":{"line":220,"column":6},"end":{"line":224,"column":9}},"50":{"start":{"line":226,"column":6},"end":{"line":229,"column":9}},"51":{"start":{"line":233,"column":4},"end":{"line":235,"column":5}},"52":{"start":{"line":234,"column":6},"end":{"line":234,"column":43}},"53":{"start":{"line":237,"column":4},"end":{"line":237,"column":18}},"54":{"start":{"line":241,"column":0},"end":{"line":241,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":3}},"loc":{"start":{"line":26,"column":28},"end":{"line":55,"column":3}},"line":26},"1":{"name":"(anonymous_1)","decl":{"start":{"line":62,"column":2},"end":{"line":62,"column":3}},"loc":{"start":{"line":62,"column":30},"end":{"line":73,"column":3}},"line":62},"2":{"name":"(anonymous_2)","decl":{"start":{"line":80,"column":2},"end":{"line":80,"column":3}},"loc":{"start":{"line":80,"column":25},"end":{"line":90,"column":3}},"line":80},"3":{"name":"(anonymous_3)","decl":{"start":{"line":97,"column":2},"end":{"line":97,"column":3}},"loc":{"start":{"line":97,"column":45},"end":{"line":105,"column":3}},"line":97},"4":{"name":"(anonymous_4)","decl":{"start":{"line":116,"column":2},"end":{"line":116,"column":3}},"loc":{"start":{"line":116,"column":45},"end":{"line":148,"column":3}},"line":116},"5":{"name":"(anonymous_5)","decl":{"start":{"line":158,"column":2},"end":{"line":158,"column":3}},"loc":{"start":{"line":158,"column":41},"end":{"line":194,"column":3}},"line":158},"6":{"name":"(anonymous_6)","decl":{"start":{"line":207,"column":2},"end":{"line":207,"column":3}},"loc":{"start":{"line":207,"column":51},"end":{"line":238,"column":3}},"line":207}},"branchMap":{"0":{"loc":{"start":{"line":26,"column":14},"end":{"line":26,"column":26}},"type":"default-arg","locations":[{"start":{"line":26,"column":24},"end":{"line":26,"column":26}}],"line":26},"1":{"loc":{"start":{"line":27,"column":18},"end":{"line":27,"column":62}},"type":"binary-expr","locations":[{"start":{"line":27,"column":18},"end":{"line":27,"column":32}},{"start":{"line":27,"column":36},"end":{"line":27,"column":62}}],"line":27},"2":{"loc":{"start":{"line":29,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":33,"column":5}},{"start":{},"end":{}}],"line":29},"3":{"loc":{"start":{"line":35,"column":17},"end":{"line":35,"column":55}},"type":"binary-expr","locations":[{"start":{"line":35,"column":17},"end":{"line":35,"column":30}},{"start":{"line":35,"column":34},"end":{"line":35,"column":55}}],"line":35},"4":{"loc":{"start":{"line":36,"column":23},"end":{"line":36,"column":84}},"type":"cond-expr","locations":[{"start":{"line":36,"column":59},"end":{"line":36,"column":78}},{"start":{"line":36,"column":81},"end":{"line":36,"column":84}}],"line":36},"5":{"loc":{"start":{"line":37,"column":22},"end":{"line":37,"column":46}},"type":"binary-expr","locations":[{"start":{"line":37,"column":22},"end":{"line":37,"column":40}},{"start":{"line":37,"column":44},"end":{"line":37,"column":46}}],"line":37},"6":{"loc":{"start":{"line":89,"column":11},"end":{"line":89,"column":41}},"type":"binary-expr","locations":[{"start":{"line":89,"column":11},"end":{"line":89,"column":25}},{"start":{"line":89,"column":29},"end":{"line":89,"column":41}}],"line":89},"7":{"loc":{"start":{"line":100,"column":4},"end":{"line":102,"column":5}},"type":"if","locations":[{"start":{"line":100,"column":4},"end":{"line":102,"column":5}},{"start":{},"end":{}}],"line":100},"8":{"loc":{"start":{"line":116,"column":31},"end":{"line":116,"column":43}},"type":"default-arg","locations":[{"start":{"line":116,"column":41},"end":{"line":116,"column":43}}],"line":116},"9":{"loc":{"start":{"line":118,"column":6},"end":{"line":118,"column":45}},"type":"default-arg","locations":[{"start":{"line":118,"column":15},"end":{"line":118,"column":45}}],"line":118},"10":{"loc":{"start":{"line":119,"column":6},"end":{"line":119,"column":31}},"type":"default-arg","locations":[{"start":{"line":119,"column":27},"end":{"line":119,"column":31}}],"line":119},"11":{"loc":{"start":{"line":120,"column":6},"end":{"line":120,"column":20}},"type":"default-arg","locations":[{"start":{"line":120,"column":16},"end":{"line":120,"column":20}}],"line":120},"12":{"loc":{"start":{"line":158,"column":27},"end":{"line":158,"column":39}},"type":"default-arg","locations":[{"start":{"line":158,"column":37},"end":{"line":158,"column":39}}],"line":158},"13":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":269}},"type":"default-arg","locations":[{"start":{"line":160,"column":15},"end":{"line":160,"column":269}}],"line":160},"14":{"loc":{"start":{"line":161,"column":6},"end":{"line":161,"column":20}},"type":"default-arg","locations":[{"start":{"line":161,"column":16},"end":{"line":161,"column":20}}],"line":161},"15":{"loc":{"start":{"line":207,"column":37},"end":{"line":207,"column":49}},"type":"default-arg","locations":[{"start":{"line":207,"column":47},"end":{"line":207,"column":49}}],"line":207},"16":{"loc":{"start":{"line":209,"column":6},"end":{"line":209,"column":23}},"type":"default-arg","locations":[{"start":{"line":209,"column":19},"end":{"line":209,"column":23}}],"line":209},"17":{"loc":{"start":{"line":210,"column":6},"end":{"line":210,"column":19}},"type":"default-arg","locations":[{"start":{"line":210,"column":18},"end":{"line":210,"column":19}}],"line":210},"18":{"loc":{"start":{"line":211,"column":6},"end":{"line":211,"column":19}},"type":"default-arg","locations":[{"start":{"line":211,"column":17},"end":{"line":211,"column":19}}],"line":211},"19":{"loc":{"start":{"line":212,"column":6},"end":{"line":212,"column":17}},"type":"default-arg","locations":[{"start":{"line":212,"column":14},"end":{"line":212,"column":17}}],"line":212},"20":{"loc":{"start":{"line":219,"column":4},"end":{"line":230,"column":5}},"type":"if","locations":[{"start":{"line":219,"column":4},"end":{"line":230,"column":5}},{"start":{"line":225,"column":11},"end":{"line":230,"column":5}}],"line":219},"21":{"loc":{"start":{"line":233,"column":4},"end":{"line":235,"column":5}},"type":"if","locations":[{"start":{"line":233,"column":4},"end":{"line":235,"column":5}},{"start":{},"end":{}}],"line":233}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":23,"7":23,"8":1,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":0,"16":0,"17":0,"18":0,"19":9,"20":9,"21":9,"22":3,"23":3,"24":1,"25":3,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":2},"f":{"0":23,"1":0,"2":9,"3":3,"4":0,"5":0,"6":0},"b":{"0":[2],"1":[23,2],"2":[1,22],"3":[22,21],"4":[2,20],"5":[22,17],"6":[9,2],"7":[1,2],"8":[0],"9":[0],"10":[0],"11":[0],"12":[0],"13":[0],"14":[0],"15":[0],"16":[0],"17":[0],"18":[0],"19":[0],"20":[0,0],"21":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"bf6161d7489f642b263454c505b791081bf6a6eb"}
{"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/core.js": {"path":"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/core.js","statementMap":{"0":{"start":{"line":5,"column":31},"end":{"line":5,"column":63}},"1":{"start":{"line":6,"column":22},"end":{"line":6,"column":39}},"2":{"start":{"line":7,"column":11},"end":{"line":7,"column":33}},"3":{"start":{"line":8,"column":31},"end":{"line":8,"column":50}},"4":{"start":{"line":9,"column":55},"end":{"line":9,"column":73}},"5":{"start":{"line":15,"column":4},"end":{"line":15,"column":26}},"6":{"start":{"line":27,"column":4},"end":{"line":27,"column":63}},"7":{"start":{"line":29,"column":4},"end":{"line":33,"column":5}},"8":{"start":{"line":30,"column":6},"end":{"line":32,"column":8}},"9":{"start":{"line":35,"column":4},"end":{"line":35,"column":57}},"10":{"start":{"line":36,"column":4},"end":{"line":36,"column":85}},"11":{"start":{"line":37,"column":4},"end":{"line":37,"column":47}},"12":{"start":{"line":40,"column":4},"end":{"line":40,"column":53}},"13":{"start":{"line":43,"column":4},"end":{"line":46,"column":13}},"14":{"start":{"line":49,"column":4},"end":{"line":54,"column":6}},"15":{"start":{"line":63,"column":24},"end":{"line":63,"column":52}},"16":{"start":{"line":64,"column":23},"end":{"line":64,"column":53}},"17":{"start":{"line":65,"column":21},"end":{"line":65,"column":49}},"18":{"start":{"line":67,"column":4},"end":{"line":72,"column":6}},"19":{"start":{"line":81,"column":16},"end":{"line":81,"column":55}},"20":{"start":{"line":82,"column":22},"end":{"line":88,"column":5}},"21":{"start":{"line":89,"column":4},"end":{"line":89,"column":42}},"22":{"start":{"line":98,"column":23},"end":{"line":98,"column":53}},"23":{"start":{"line":100,"column":4},"end":{"line":102,"column":5}},"24":{"start":{"line":101,"column":6},"end":{"line":101,"column":48}},"25":{"start":{"line":104,"column":4},"end":{"line":104,"column":24}},"26":{"start":{"line":121,"column":8},"end":{"line":121,"column":15}},"27":{"start":{"line":124,"column":18},"end":{"line":124,"column":50}},"28":{"start":{"line":127,"column":18},"end":{"line":131,"column":6}},"29":{"start":{"line":135,"column":4},"end":{"line":152,"column":5}},"30":{"start":{"line":136,"column":6},"end":{"line":141,"column":9}},"31":{"start":{"line":143,"column":6},"end":{"line":143,"column":33}},"32":{"start":{"line":144,"column":6},"end":{"line":144,"column":29}},"33":{"start":{"line":146,"column":6},"end":{"line":150,"column":7}},"34":{"start":{"line":147,"column":8},"end":{"line":149,"column":10}},"35":{"start":{"line":151,"column":6},"end":{"line":151,"column":18}},"36":{"start":{"line":155,"column":18},"end":{"line":155,"column":42}},"37":{"start":{"line":157,"column":4},"end":{"line":157,"column":53}},"38":{"start":{"line":172,"column":8},"end":{"line":172,"column":15}},"39":{"start":{"line":175,"column":18},"end":{"line":175,"column":50}},"40":{"start":{"line":178,"column":16},"end":{"line":178,"column":42}},"41":{"start":{"line":179,"column":21},"end":{"line":179,"column":30}},"42":{"start":{"line":180,"column":22},"end":{"line":180,"column":32}},"43":{"start":{"line":183,"column":18},"end":{"line":186,"column":6}},"44":{"start":{"line":190,"column":4},"end":{"line":207,"column":5}},"45":{"start":{"line":191,"column":6},"end":{"line":196,"column":9}},"46":{"start":{"line":198,"column":6},"end":{"line":198,"column":33}},"47":{"start":{"line":199,"column":6},"end":{"line":199,"column":29}},"48":{"start":{"line":201,"column":6},"end":{"line":205,"column":7}},"49":{"start":{"line":202,"column":8},"end":{"line":204,"column":10}},"50":{"start":{"line":206,"column":6},"end":{"line":206,"column":18}},"51":{"start":{"line":210,"column":18},"end":{"line":210,"column":42}},"52":{"start":{"line":211,"column":18},"end":{"line":211,"column":73}},"53":{"start":{"line":213,"column":4},"end":{"line":213,"column":54}},"54":{"start":{"line":233,"column":8},"end":{"line":233,"column":15}},"55":{"start":{"line":236,"column":19},"end":{"line":236,"column":59}},"56":{"start":{"line":239,"column":4},"end":{"line":250,"column":5}},"57":{"start":{"line":240,"column":6},"end":{"line":244,"column":9}},"58":{"start":{"line":246,"column":6},"end":{"line":249,"column":9}},"59":{"start":{"line":253,"column":4},"end":{"line":255,"column":5}},"60":{"start":{"line":254,"column":6},"end":{"line":254,"column":43}},"61":{"start":{"line":257,"column":4},"end":{"line":257,"column":18}},"62":{"start":{"line":261,"column":0},"end":{"line":261,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":3}},"loc":{"start":{"line":26,"column":28},"end":{"line":55,"column":3}},"line":26},"1":{"name":"(anonymous_1)","decl":{"start":{"line":62,"column":2},"end":{"line":62,"column":3}},"loc":{"start":{"line":62,"column":30},"end":{"line":73,"column":3}},"line":62},"2":{"name":"(anonymous_2)","decl":{"start":{"line":80,"column":2},"end":{"line":80,"column":3}},"loc":{"start":{"line":80,"column":25},"end":{"line":90,"column":3}},"line":80},"3":{"name":"(anonymous_3)","decl":{"start":{"line":97,"column":2},"end":{"line":97,"column":3}},"loc":{"start":{"line":97,"column":45},"end":{"line":105,"column":3}},"line":97},"4":{"name":"(anonymous_4)","decl":{"start":{"line":116,"column":2},"end":{"line":116,"column":3}},"loc":{"start":{"line":116,"column":45},"end":{"line":158,"column":3}},"line":116},"5":{"name":"(anonymous_5)","decl":{"start":{"line":168,"column":2},"end":{"line":168,"column":3}},"loc":{"start":{"line":168,"column":41},"end":{"line":214,"column":3}},"line":168},"6":{"name":"(anonymous_6)","decl":{"start":{"line":227,"column":2},"end":{"line":227,"column":3}},"loc":{"start":{"line":227,"column":51},"end":{"line":258,"column":3}},"line":227}},"branchMap":{"0":{"loc":{"start":{"line":26,"column":14},"end":{"line":26,"column":26}},"type":"default-arg","locations":[{"start":{"line":26,"column":24},"end":{"line":26,"column":26}}],"line":26},"1":{"loc":{"start":{"line":27,"column":18},"end":{"line":27,"column":62}},"type":"binary-expr","locations":[{"start":{"line":27,"column":18},"end":{"line":27,"column":32}},{"start":{"line":27,"column":36},"end":{"line":27,"column":62}}],"line":27},"2":{"loc":{"start":{"line":29,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":33,"column":5}},{"start":{},"end":{}}],"line":29},"3":{"loc":{"start":{"line":35,"column":17},"end":{"line":35,"column":56}},"type":"binary-expr","locations":[{"start":{"line":35,"column":17},"end":{"line":35,"column":30}},{"start":{"line":35,"column":34},"end":{"line":35,"column":56}}],"line":35},"4":{"loc":{"start":{"line":36,"column":23},"end":{"line":36,"column":84}},"type":"cond-expr","locations":[{"start":{"line":36,"column":59},"end":{"line":36,"column":78}},{"start":{"line":36,"column":81},"end":{"line":36,"column":84}}],"line":36},"5":{"loc":{"start":{"line":37,"column":22},"end":{"line":37,"column":46}},"type":"binary-expr","locations":[{"start":{"line":37,"column":22},"end":{"line":37,"column":40}},{"start":{"line":37,"column":44},"end":{"line":37,"column":46}}],"line":37},"6":{"loc":{"start":{"line":89,"column":11},"end":{"line":89,"column":41}},"type":"binary-expr","locations":[{"start":{"line":89,"column":11},"end":{"line":89,"column":25}},{"start":{"line":89,"column":29},"end":{"line":89,"column":41}}],"line":89},"7":{"loc":{"start":{"line":100,"column":4},"end":{"line":102,"column":5}},"type":"if","locations":[{"start":{"line":100,"column":4},"end":{"line":102,"column":5}},{"start":{},"end":{}}],"line":100},"8":{"loc":{"start":{"line":116,"column":31},"end":{"line":116,"column":43}},"type":"default-arg","locations":[{"start":{"line":116,"column":41},"end":{"line":116,"column":43}}],"line":116},"9":{"loc":{"start":{"line":118,"column":6},"end":{"line":118,"column":45}},"type":"default-arg","locations":[{"start":{"line":118,"column":15},"end":{"line":118,"column":45}}],"line":118},"10":{"loc":{"start":{"line":119,"column":6},"end":{"line":119,"column":31}},"type":"default-arg","locations":[{"start":{"line":119,"column":27},"end":{"line":119,"column":31}}],"line":119},"11":{"loc":{"start":{"line":120,"column":6},"end":{"line":120,"column":20}},"type":"default-arg","locations":[{"start":{"line":120,"column":16},"end":{"line":120,"column":20}}],"line":120},"12":{"loc":{"start":{"line":146,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":146,"column":6},"end":{"line":150,"column":7}},{"start":{},"end":{}}],"line":146},"13":{"loc":{"start":{"line":168,"column":27},"end":{"line":168,"column":39}},"type":"default-arg","locations":[{"start":{"line":168,"column":37},"end":{"line":168,"column":39}}],"line":168},"14":{"loc":{"start":{"line":170,"column":6},"end":{"line":170,"column":269}},"type":"default-arg","locations":[{"start":{"line":170,"column":15},"end":{"line":170,"column":269}}],"line":170},"15":{"loc":{"start":{"line":171,"column":6},"end":{"line":171,"column":20}},"type":"default-arg","locations":[{"start":{"line":171,"column":16},"end":{"line":171,"column":20}}],"line":171},"16":{"loc":{"start":{"line":201,"column":6},"end":{"line":205,"column":7}},"type":"if","locations":[{"start":{"line":201,"column":6},"end":{"line":205,"column":7}},{"start":{},"end":{}}],"line":201},"17":{"loc":{"start":{"line":227,"column":37},"end":{"line":227,"column":49}},"type":"default-arg","locations":[{"start":{"line":227,"column":47},"end":{"line":227,"column":49}}],"line":227},"18":{"loc":{"start":{"line":229,"column":6},"end":{"line":229,"column":23}},"type":"default-arg","locations":[{"start":{"line":229,"column":19},"end":{"line":229,"column":23}}],"line":229},"19":{"loc":{"start":{"line":230,"column":6},"end":{"line":230,"column":19}},"type":"default-arg","locations":[{"start":{"line":230,"column":18},"end":{"line":230,"column":19}}],"line":230},"20":{"loc":{"start":{"line":231,"column":6},"end":{"line":231,"column":19}},"type":"default-arg","locations":[{"start":{"line":231,"column":17},"end":{"line":231,"column":19}}],"line":231},"21":{"loc":{"start":{"line":232,"column":6},"end":{"line":232,"column":17}},"type":"default-arg","locations":[{"start":{"line":232,"column":14},"end":{"line":232,"column":17}}],"line":232},"22":{"loc":{"start":{"line":239,"column":4},"end":{"line":250,"column":5}},"type":"if","locations":[{"start":{"line":239,"column":4},"end":{"line":250,"column":5}},{"start":{"line":245,"column":11},"end":{"line":250,"column":5}}],"line":239},"23":{"loc":{"start":{"line":253,"column":4},"end":{"line":255,"column":5}},"type":"if","locations":[{"start":{"line":253,"column":4},"end":{"line":255,"column":5}},{"start":{},"end":{}}],"line":253}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":23,"7":23,"8":1,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":0,"16":0,"17":0,"18":0,"19":9,"20":9,"21":9,"22":3,"23":3,"24":1,"25":3,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":2},"f":{"0":23,"1":0,"2":9,"3":3,"4":0,"5":0,"6":0},"b":{"0":[2],"1":[23,2],"2":[1,22],"3":[22,21],"4":[2,20],"5":[22,17],"6":[9,2],"7":[1,2],"8":[0],"9":[0],"10":[0],"11":[0],"12":[0,0],"13":[0],"14":[0],"15":[0],"16":[0,0],"17":[0],"18":[0],"19":[0],"20":[0],"21":[0],"22":[0,0],"23":[0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"3b2c399c630d53b96e78d95a49182292a67e620d"}
,"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/index.js": {"path":"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/index.js","statementMap":{"0":{"start":{"line":12,"column":18},"end":{"line":12,"column":35}},"1":{"start":{"line":13,"column":62},"end":{"line":13,"column":81}},"2":{"start":{"line":15,"column":0},"end":{"line":15,"column":27}},"3":{"start":{"line":16,"column":0},"end":{"line":16,"column":37}},"4":{"start":{"line":17,"column":0},"end":{"line":17,"column":41}},"5":{"start":{"line":18,"column":0},"end":{"line":18,"column":51}},"6":{"start":{"line":19,"column":0},"end":{"line":19,"column":55}},"7":{"start":{"line":20,"column":0},"end":{"line":20,"column":33}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"f":{},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"919dc8d2b2062d2a9f4217ee076649d050f5f3a9"}

@@ -3,0 +3,0 @@ ,"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/models.js": {"path":"/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/models.js","statementMap":{"0":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"1":{"start":{"line":16,"column":4},"end":{"line":16,"column":17}},"2":{"start":{"line":17,"column":4},"end":{"line":17,"column":17}},"3":{"start":{"line":18,"column":4},"end":{"line":18,"column":17}},"4":{"start":{"line":19,"column":4},"end":{"line":19,"column":17}},"5":{"start":{"line":29,"column":18},"end":{"line":29,"column":57}},"6":{"start":{"line":30,"column":18},"end":{"line":30,"column":58}},"7":{"start":{"line":31,"column":18},"end":{"line":31,"column":57}},"8":{"start":{"line":32,"column":18},"end":{"line":32,"column":58}},"9":{"start":{"line":33,"column":4},"end":{"line":33,"column":40}},"10":{"start":{"line":42,"column":16},"end":{"line":42,"column":27}},"11":{"start":{"line":43,"column":4},"end":{"line":49,"column":6}},"12":{"start":{"line":64,"column":4},"end":{"line":64,"column":17}},"13":{"start":{"line":65,"column":4},"end":{"line":65,"column":17}},"14":{"start":{"line":66,"column":4},"end":{"line":66,"column":17}},"15":{"start":{"line":67,"column":4},"end":{"line":67,"column":17}},"16":{"start":{"line":68,"column":4},"end":{"line":68,"column":21}},"17":{"start":{"line":69,"column":4},"end":{"line":69,"column":23}},"18":{"start":{"line":81,"column":4},"end":{"line":81,"column":23}},"19":{"start":{"line":82,"column":4},"end":{"line":82,"column":23}},"20":{"start":{"line":83,"column":4},"end":{"line":83,"column":35}},"21":{"start":{"line":91,"column":4},"end":{"line":91,"column":29}},"22":{"start":{"line":95,"column":0},"end":{"line":99,"column":2}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":2},"end":{"line":14,"column":3}},"loc":{"start":{"line":14,"column":37},"end":{"line":20,"column":3}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":2},"end":{"line":28,"column":3}},"loc":{"start":{"line":28,"column":34},"end":{"line":34,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":41,"column":2},"end":{"line":41,"column":3}},"loc":{"start":{"line":41,"column":24},"end":{"line":50,"column":3}},"line":41},"3":{"name":"(anonymous_3)","decl":{"start":{"line":63,"column":2},"end":{"line":63,"column":3}},"loc":{"start":{"line":63,"column":43},"end":{"line":70,"column":3}},"line":63},"4":{"name":"(anonymous_4)","decl":{"start":{"line":80,"column":2},"end":{"line":80,"column":3}},"loc":{"start":{"line":80,"column":55},"end":{"line":84,"column":3}},"line":80},"5":{"name":"(anonymous_5)","decl":{"start":{"line":90,"column":2},"end":{"line":90,"column":3}},"loc":{"start":{"line":90,"column":15},"end":{"line":92,"column":3}},"line":90}},"branchMap":{"0":{"loc":{"start":{"line":80,"column":21},"end":{"line":80,"column":33}},"type":"default-arg","locations":[{"start":{"line":80,"column":29},"end":{"line":80,"column":33}}],"line":80},"1":{"loc":{"start":{"line":80,"column":35},"end":{"line":80,"column":53}},"type":"default-arg","locations":[{"start":{"line":80,"column":49},"end":{"line":80,"column":53}}],"line":80}},"s":{"0":20,"1":20,"2":20,"3":20,"4":20,"5":3,"6":3,"7":3,"8":3,"9":3,"10":8,"11":8,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":6,"19":6,"20":6,"21":3,"22":4},"f":{"0":20,"1":3,"2":8,"3":4,"4":6,"5":3},"b":{"0":[4],"1":[5]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"3d02bea040e833fecbb6ae9f688106aa3a88eb96"}

@@ -26,5 +26,5 @@

<div class='fl pad1y space-right2'>
<span class="strong">41.81% </span>
<span class="strong">36.5% </span>
<span class="quiet">Statements</span>
<span class='fraction'>23/55</span>
<span class='fraction'>23/63</span>
</div>

@@ -34,5 +34,5 @@

<div class='fl pad1y space-right2'>
<span class="strong">48.38% </span>
<span class="strong">42.85% </span>
<span class="quiet">Branches</span>
<span class='fraction'>15/31</span>
<span class='fraction'>15/35</span>
</div>

@@ -49,5 +49,5 @@

<div class='fl pad1y space-right2'>
<span class="strong">41.81% </span>
<span class="strong">36.5% </span>
<span class="quiet">Lines</span>
<span class='fraction'>23/55</span>
<span class='fraction'>23/63</span>
</div>

@@ -310,3 +310,23 @@

<a name='L241'></a><a href='#L241'>241</a>
<a name='L242'></a><a href='#L242'>242</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<a name='L242'></a><a href='#L242'>242</a>
<a name='L243'></a><a href='#L243'>243</a>
<a name='L244'></a><a href='#L244'>244</a>
<a name='L245'></a><a href='#L245'>245</a>
<a name='L246'></a><a href='#L246'>246</a>
<a name='L247'></a><a href='#L247'>247</a>
<a name='L248'></a><a href='#L248'>248</a>
<a name='L249'></a><a href='#L249'>249</a>
<a name='L250'></a><a href='#L250'>250</a>
<a name='L251'></a><a href='#L251'>251</a>
<a name='L252'></a><a href='#L252'>252</a>
<a name='L253'></a><a href='#L253'>253</a>
<a name='L254'></a><a href='#L254'>254</a>
<a name='L255'></a><a href='#L255'>255</a>
<a name='L256'></a><a href='#L256'>256</a>
<a name='L257'></a><a href='#L257'>257</a>
<a name='L258'></a><a href='#L258'>258</a>
<a name='L259'></a><a href='#L259'>259</a>
<a name='L260'></a><a href='#L260'>260</a>
<a name='L261'></a><a href='#L261'>261</a>
<a name='L262'></a><a href='#L262'>262</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>

@@ -444,3 +464,5 @@ <span class="cline-any cline-neutral">&nbsp;</span>

<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>

@@ -455,7 +477,14 @@ <span class="cline-any cline-neutral">&nbsp;</span>

<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>

@@ -474,2 +503,3 @@ <span class="cline-any cline-neutral">&nbsp;</span>

<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>

@@ -492,3 +522,5 @@ <span class="cline-any cline-neutral">&nbsp;</span>

<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>

@@ -503,5 +535,13 @@ <span class="cline-any cline-neutral">&nbsp;</span>

<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>

@@ -591,3 +631,3 @@ <span class="cline-any cline-no">&nbsp;</span>

this.model = options.model || 'gemini-flash-latest';
this.model = options.model || 'gemini-3-pro-preview';
this.temperature = options.temperature !== undefined ? options.temperature : 0.5;

@@ -691,12 +731,22 @@ this.maxObjects = options.maxObjects || 25;

// Generate content
const result = <span class="cstat-no" title="statement not covered" >await model.generateContent({</span>
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
let result, response, text;
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > result = await model.generateContent({</span>
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
}
});
<span class="cstat-no" title="statement not covered" > response = result.response;</span>
<span class="cstat-no" title="statement not covered" > text = response.text();</span>
} catch (error) {
<span class="cstat-no" title="statement not covered" > if (error.status === 500) {</span>
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
`Google Gemini API error (500): This may be a temporary issue. Try again later or verify your API key and image. Original error: ${error.message}`
);
}
});
<span class="cstat-no" title="statement not covered" > throw error;</span>
}
const response = <span class="cstat-no" title="statement not covered" >result.response;</span>
const text = <span class="cstat-no" title="statement not covered" >response.text();</span>
// Parse response

@@ -737,12 +787,22 @@ const boxes = <span class="cstat-no" title="statement not covered" >parseBoundingBoxes(text);</span>

// Generate content
const result = <span class="cstat-no" title="statement not covered" >await model.generateContent({</span>
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
let result, response, text;
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > result = await model.generateContent({</span>
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
}
});
<span class="cstat-no" title="statement not covered" > response = result.response;</span>
<span class="cstat-no" title="statement not covered" > text = response.text();</span>
} catch (error) {
<span class="cstat-no" title="statement not covered" > if (error.status === 500) {</span>
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
`Google Gemini API error (500): This may be a temporary issue. Try again later or verify your API key and image. Original error: ${error.message}`
);
}
});
<span class="cstat-no" title="statement not covered" > throw error;</span>
}
const response = <span class="cstat-no" title="statement not covered" >result.response;</span>
const text = <span class="cstat-no" title="statement not covered" >response.text();</span>
// Parse response

@@ -808,3 +868,3 @@ const boxes = <span class="cstat-no" title="statement not covered" >parseBoundingBoxes(text);</span>

<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-12-05T12:32:55.225Z
at 2025-12-05T12:45:03.605Z
</div>

@@ -811,0 +871,0 @@ <script src="prettify.js"></script>

@@ -26,5 +26,5 @@

<div class='fl pad1y space-right2'>
<span class="strong">40.19% </span>
<span class="strong">38.7% </span>
<span class="quiet">Statements</span>
<span class='fraction'>84/209</span>
<span class='fraction'>84/217</span>
</div>

@@ -34,5 +34,5 @@

<div class='fl pad1y space-right2'>
<span class="strong">34.78% </span>
<span class="strong">32.87% </span>
<span class="quiet">Branches</span>
<span class='fraction'>24/69</span>
<span class='fraction'>24/73</span>
</div>

@@ -49,5 +49,5 @@

<div class='fl pad1y space-right2'>
<span class="strong">40.39% </span>
<span class="strong">38.86% </span>
<span class="quiet">Lines</span>
<span class='fraction'>82/203</span>
<span class='fraction'>82/211</span>
</div>

@@ -86,13 +86,13 @@

<td class="file low" data-value="core.js"><a href="core.js.html">core.js</a></td>
<td data-value="41.81" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 41%"></div><div class="cover-empty" style="width: 59%"></div></div>
<td data-value="36.5" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 36%"></div><div class="cover-empty" style="width: 64%"></div></div>
</td>
<td data-value="41.81" class="pct low">41.81%</td>
<td data-value="55" class="abs low">23/55</td>
<td data-value="48.38" class="pct low">48.38%</td>
<td data-value="31" class="abs low">15/31</td>
<td data-value="36.5" class="pct low">36.5%</td>
<td data-value="63" class="abs low">23/63</td>
<td data-value="42.85" class="pct low">42.85%</td>
<td data-value="35" class="abs low">15/35</td>
<td data-value="42.85" class="pct low">42.85%</td>
<td data-value="7" class="abs low">3/7</td>
<td data-value="41.81" class="pct low">41.81%</td>
<td data-value="55" class="abs low">23/55</td>
<td data-value="36.5" class="pct low">36.5%</td>
<td data-value="63" class="abs low">23/63</td>
</tr>

@@ -168,3 +168,3 @@

<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-12-05T12:32:55.225Z
at 2025-12-05T12:45:03.605Z
</div>

@@ -171,0 +171,0 @@ <script src="prettify.js"></script>

@@ -133,3 +133,3 @@

<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-12-05T12:32:55.225Z
at 2025-12-05T12:45:03.605Z
</div>

@@ -136,0 +136,0 @@ <script src="prettify.js"></script>

@@ -370,3 +370,3 @@

<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-12-05T12:32:55.225Z
at 2025-12-05T12:45:03.605Z
</div>

@@ -373,0 +373,0 @@ <script src="prettify.js"></script>

@@ -427,3 +427,3 @@

<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-12-05T12:32:55.225Z
at 2025-12-05T12:45:03.605Z
</div>

@@ -430,0 +430,0 @@ <script src="prettify.js"></script>

@@ -619,3 +619,3 @@

<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-12-05T12:32:55.225Z
at 2025-12-05T12:45:03.605Z
</div>

@@ -622,0 +622,0 @@ <script src="prettify.js"></script>

{
"name": "vsegments",
"version": "0.1.2",
"version": "0.1.3",
"description": "Visual segmentation and bounding box detection using Google Gemini AI",

@@ -5,0 +5,0 @@ "main": "src/index.js",

@@ -174,3 +174,3 @@ # vsegments (Node.js)

- `--api-key <key>`: Google API key (default: `GOOGLE_API_KEY` env var)
- `-m, --model <model>`: Model name (default: `gemini-flash-latest`)
- `-m, --model <model>`: Model name (default: `gemini-3-pro-preview`)
- `--temperature <temp>`: Sampling temperature 0.0-1.0 (default: 0.5)

@@ -365,2 +365,31 @@ - `--max-objects <n>`: Maximum objects to detect (default: 25)

## Troubleshooting
### Common Issues
#### 500 Internal Server Error
If you get a 500 error from the Google Gemini API:
1. **Try a different model:**
```javascript
const vs = new VSegments({
apiKey: 'YOUR_API_KEY',
model: 'gemini-3-pro-preview' // default model
});
```
2. **Check your image:** Ensure it's under 4MB and in a supported format (JPG, PNG, GIF, WEBP)
3. **Wait and retry:** The API may be experiencing temporary issues
4. **Verify API key:** Make sure your API key is valid and has proper permissions
For more detailed troubleshooting, see [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
### Recommended Models
- **Default (High quality):** `gemini-3-pro-preview`
- **Alternative:** `gemini-2.5-flash`
## License

@@ -379,2 +408,3 @@

- **Documentation**: [GitHub README](https://github.com/nxtphaseai/vsegments#readme)
- **Troubleshooting**: [TROUBLESHOOTING.md](TROUBLESHOOTING.md)

@@ -381,0 +411,0 @@ ---

@@ -35,3 +35,3 @@ /**

this.model = options.model || 'gemini-flash-latest';
this.model = options.model || 'gemini-3-pro-preview';
this.temperature = options.temperature !== undefined ? options.temperature : 0.5;

@@ -135,12 +135,22 @@ this.maxObjects = options.maxObjects || 25;

// Generate content
const result = await model.generateContent({
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
let result, response, text;
try {
result = await model.generateContent({
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
}
});
response = result.response;
text = response.text();
} catch (error) {
if (error.status === 500) {
throw new Error(
`Google Gemini API error (500): This may be a temporary issue. Try again later or verify your API key and image. Original error: ${error.message}`
);
}
});
throw error;
}
const response = result.response;
const text = response.text();
// Parse response

@@ -181,12 +191,22 @@ const boxes = parseBoundingBoxes(text);

// Generate content
const result = await model.generateContent({
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
let result, response, text;
try {
result = await model.generateContent({
contents: [{ role: 'user', parts: [{ text: prompt }, image] }],
generationConfig: {
temperature: this.temperature,
}
});
response = result.response;
text = response.text();
} catch (error) {
if (error.status === 500) {
throw new Error(
`Google Gemini API error (500): This may be a temporary issue. Try again later or verify your API key and image. Original error: ${error.message}`
);
}
});
throw error;
}
const response = result.response;
const text = response.text();
// Parse response

@@ -193,0 +213,0 @@ const boxes = parseBoundingBoxes(text);

Sorry, the diff of this file is not supported yet