6 Commits

Author SHA1 Message Date
2bdcc74df0 v1.15.2
Some checks failed
Docker (tags) / security (push) Successful in 30s
Docker (tags) / test (push) Failing after 7m38s
Docker (tags) / release (push) Has been skipped
Docker (tags) / metadata (push) Has been skipped
2026-01-20 04:12:57 +00:00
981c031c6e fix(dev-deps): bump devDependencies @push.rocks/smartagent to ^1.6.2 and @push.rocks/smartai to ^0.13.3 2026-01-20 04:12:57 +00:00
26d2de824f v1.15.1
Some checks failed
Docker (tags) / security (push) Successful in 22s
Docker (tags) / test (push) Failing after 7m38s
Docker (tags) / release (push) Has been skipped
Docker (tags) / metadata (push) Has been skipped
2026-01-20 03:19:58 +00:00
969d21c51a fix(tests): enable progress events in invoice tests and bump @push.rocks/smartagent devDependency to ^1.5.4 2026-01-20 03:19:58 +00:00
da2b827ba3 chore: update smartagent to v1.5.2 (streaming support for native tool calling) 2026-01-20 02:55:28 +00:00
9bc1f74978 feat(test): enable native tool calling for GPT-OSS invoice extraction
- Update smartai to v0.13.2 (native tool calling support)
- Update smartagent to v1.5.1 (useNativeToolCalling option)
- Enable think: true for GPT-OSS reasoning mode in Ollama config
- Enable useNativeToolCalling: true in DualAgentOrchestrator
- Simplify driver system message (native tools don't need XML instructions)

Native tool calling uses Ollama's built-in Harmony format parser
instead of requiring XML generation, which is more efficient for GPT-OSS models.
2026-01-20 02:51:52 +00:00
4 changed files with 43 additions and 30 deletions

View File

@@ -1,5 +1,19 @@
# Changelog
## 2026-01-20 - 1.15.2 - fix(dev-deps)
bump devDependencies @push.rocks/smartagent to ^1.6.2 and @push.rocks/smartai to ^0.13.3
- Bumped @push.rocks/smartagent from ^1.5.4 to ^1.6.2 in devDependencies
- Bumped @push.rocks/smartai from ^0.13.2 to ^0.13.3 in devDependencies
- Updated test/test.invoices.nanonets.ts JSON extraction prompt: instruct not to omit special characters in invoice_number and to use the json validate tool
- No breaking changes; only dev dependency updates and test prompt adjustments
## 2026-01-20 - 1.15.1 - fix(tests)
enable progress events in invoice tests and bump @push.rocks/smartagent devDependency to ^1.5.4
- Added an onProgress handler in test/test.invoices.nanonets.ts to log progress events (console.log(event.logMessage)) so tool calls and progress are visible during tests.
- Bumped devDependency @push.rocks/smartagent from ^1.5.2 to ^1.5.4 in package.json.
## 2026-01-20 - 1.15.0 - feat(tests)
integrate SmartAi/DualAgentOrchestrator into extraction tests and add JSON self-validation

View File

@@ -1,6 +1,6 @@
{
"name": "@host.today/ht-docker-ai",
"version": "1.15.0",
"version": "1.15.2",
"type": "module",
"private": false,
"description": "Docker images for AI vision-language models including MiniCPM-V 4.5",
@@ -15,8 +15,8 @@
"devDependencies": {
"@git.zone/tsrun": "^2.0.1",
"@git.zone/tstest": "^3.1.5",
"@push.rocks/smartagent": "^1.3.0",
"@push.rocks/smartai": "^0.12.0"
"@push.rocks/smartagent": "^1.6.2",
"@push.rocks/smartai": "^0.13.3"
},
"repository": {
"type": "git",

22
pnpm-lock.yaml generated
View File

@@ -19,11 +19,11 @@ importers:
specifier: ^3.1.5
version: 3.1.6(socks@2.8.7)(typescript@5.9.3)
'@push.rocks/smartagent':
specifier: ^1.3.0
version: 1.3.0(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)
specifier: ^1.6.2
version: 1.6.2(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)
'@push.rocks/smartai':
specifier: ^0.12.0
version: 0.12.0(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)
specifier: ^0.13.3
version: 0.13.3(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)
packages:
@@ -868,11 +868,11 @@ packages:
'@push.rocks/qenv@6.1.3':
resolution: {integrity: sha512-+z2hsAU/7CIgpYLFqvda8cn9rUBMHqLdQLjsFfRn5jPoD7dJ5rFlpkbhfM4Ws8mHMniwWaxGKo+q/YBhtzRBLg==}
'@push.rocks/smartagent@1.3.0':
resolution: {integrity: sha512-MuiJVJcl9Pdr03k1zVwgxTqprbIHKwqPqXdOmYFYn0xYnixOX1tBUYkGsu6xIntXq8t4WazBJiF9hCiMpDTiRA==}
'@push.rocks/smartagent@1.6.2':
resolution: {integrity: sha512-JaYZ7tRbmS0fVrF73Z+RF9plJ/Va0H+81zvEACT8YZRf+WhhIT+P7kKh7IcTRrgudtA7aw6eVXUmOGCMeszm3Q==}
'@push.rocks/smartai@0.12.0':
resolution: {integrity: sha512-T4HRaSSxO6TQGGXlQeswX2eYkB+gMu0FbKF9qCUri6FdRlYzmPDn19jgPrPJxyg5m3oj6TzflvfYwcBCFlWo/A==}
'@push.rocks/smartai@0.13.3':
resolution: {integrity: sha512-VDZzHs101hpGMmUaectuLfcME4kHpuOS7o5ffuGk5lYl383foyAN71+5v441jpk/gLDNf2KhDACR/d2O4n90Ag==}
'@push.rocks/smartarchive@5.2.1':
resolution: {integrity: sha512-TNv5q6QuBRX7jrzffiyb6A8AALNAr0kyAcJswa0l3ahBP1Q6zszNo9xOVXmW2gKX2KShtO/Y+Cn0i46n8lbnaQ==}
@@ -5206,9 +5206,9 @@ snapshots:
'@push.rocks/smartlog': 3.1.10
'@push.rocks/smartpath': 6.0.0
'@push.rocks/smartagent@1.3.0(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)':
'@push.rocks/smartagent@1.6.2(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)':
dependencies:
'@push.rocks/smartai': 0.12.0(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)
'@push.rocks/smartai': 0.13.3(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)
'@push.rocks/smartbrowser': 2.0.8(typescript@5.9.3)
'@push.rocks/smartdeno': 1.2.0
'@push.rocks/smartfs': 1.3.1
@@ -5230,7 +5230,7 @@ snapshots:
- ws
- zod
'@push.rocks/smartai@0.12.0(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)':
'@push.rocks/smartai@0.13.3(typescript@5.9.3)(ws@8.19.0)(zod@3.25.76)':
dependencies:
'@anthropic-ai/sdk': 0.71.2(zod@3.25.76)
'@mistralai/mistralai': 1.12.0

View File

@@ -30,8 +30,10 @@ const smartAi = new SmartAi({
baseUrl: OLLAMA_URL,
model: EXTRACTION_MODEL,
defaultOptions: {
num_ctx: 32768, // Larger context for long invoices + thinking
temperature: 0, // Deterministic for JSON extraction
num_ctx: 65536, // 64K context for long invoices + reasoning chains
temperature: 0, // Deterministic for JSON extraction
repeat_penalty: 1.3, // Penalty to prevent repetition loops
think: true, // Enable thinking mode for GPT-OSS reasoning
},
defaultTimeout: 600000, // 10 minute timeout for large documents
},
@@ -76,7 +78,7 @@ Page numbers should be wrapped in brackets. Ex: <page_number>14</page_number>.`;
const JSON_EXTRACTION_PROMPT = `Extract key fields from the invoice. Return ONLY valid JSON.
WHERE TO FIND DATA:
- invoice_number, invoice_date, vendor_name: Look in the HEADER section at the TOP of PAGE 1 (near "Invoice no.", "Invoice date:", "Rechnungsnummer"). Use common sense. Btw. an invoice number might start on INV* .
- invoice_number, invoice_date, vendor_name: Look in the HEADER section at the TOP of PAGE 1 (near "Invoice no.", "Invoice date:", "Rechnungsnummer"). Use common sense. Btw. an invoice number might start on INV* . Also be sure to not omit special chars like / - and sp on. They are part of the invoice number.
- net_amount, vat_amount, total_amount: Look in the SUMMARY section at the BOTTOM (look for "Total", "Amount due", "Gesamtbetrag")
RULES:
@@ -91,7 +93,7 @@ RULES:
JSON only:
{"invoice_number":"X","invoice_date":"YYYY-MM-DD","vendor_name":"X","currency":"EUR","net_amount":0,"vat_amount":0,"total_amount":0}
Double check for valid JSON syntax.
Double check for valid JSON syntax. use the json validate tool.
`;
@@ -636,7 +638,7 @@ tap.test('Stage 2: Setup Ollama + GPT-OSS 20B', async () => {
console.log(' [SmartAgent] Starting SmartAi...');
await smartAi.start();
console.log(' [SmartAgent] Creating DualAgentOrchestrator...');
console.log(' [SmartAgent] Creating DualAgentOrchestrator with native tool calling...');
orchestrator = new DualAgentOrchestrator({
smartAiInstance: smartAi,
defaultProvider: 'ollama',
@@ -652,24 +654,21 @@ tap.test('Stage 2: Setup Ollama + GPT-OSS 20B', async () => {
CRITICAL RULES:
1. Output valid JSON with the exact format requested
2. If you cannot find a value, use empty string "" or 0 for numbers
3. IMPORTANT: Before completing, validate your JSON using the json.validate tool:
<tool_call>
<tool>json</tool>
<action>validate</action>
<params>{"jsonString": "YOUR_JSON", "requiredFields": ["invoice_number", "invoice_date", "vendor_name", "currency", "net_amount", "vat_amount", "total_amount"]}</params>
</tool_call>
4. Only complete after validation passes
When done, wrap your JSON in <task_complete></task_complete> tags.`,
3. Before completing, validate your JSON using the json_validate tool
4. Only complete after validation passes`,
maxIterations: 5,
// Enable native tool calling for GPT-OSS (uses Harmony format instead of XML)
useNativeToolCalling: true,
// Enable streaming for real-time progress visibility
onToken: (token, source) => {
if (source === 'driver') {
process.stdout.write(token);
}
},
// Enable progress events to see tool calls
onProgress: (event: { logMessage: string }) => {
console.log(event.logMessage);
},
});
// Register JsonValidatorTool for self-validation