{"enabled":true,"aiProvider":"qwen","cacheEnabled":true,"cacheEntries":3,"responseCache":{"enabled":true,"total":3,"usable":2,"unsafe":1,"reasons":{"expired":1},"maxEntries":500,"ttlMs":21600000,"lastPrunedAt":"2026-08-06T14:51:37.880Z","lastPrunedReason":"startup","lastPrunedRemoved":0},"knowledgeChunks":37,"localRouter":{"enabled":true,"model":"qwen3:1.7b","timeoutMs":3500,"keepAlive":"10m","cooldownMs":60000,"minConfidence":0.72,"status":"hot_path","nonBlocking":false,"hotPathAvailable":true,"health":{"ok":true,"running":false,"checkedAt":"2026-08-06T16:26:50.976Z","ageMs":279779,"latencyMs":1238,"error":null,"reason":"warm-reprobe","timeoutMs":10000,"maxLatencyMs":10000,"ttlMs":600000,"probeIntervalMs":300000,"failureRetryMs":60000},"coolingDownUntil":null,"lastError":null,"lastResolvedError":null,"url":"127.0.0.1:11434"},"codexCli":{"enabled":false,"bin":"codex","configuredModel":"gpt-5.4-mini","model":"gpt-5.4-mini","modelAliasApplied":null,"reasoningFast":"low","reasoningSmart":"medium","timeoutMs":12000,"cooldownMs":600000,"coolingDownUntil":null,"lastError":null,"lastResolvedError":null},"webResearch":{"enabled":true,"domains":["comune.pordenone.it","regione.fvg.it","protezionecivile.fvg.it","arpa.fvg.it","prefettura.interno.gov.it","interno.gov.it","pordenonecapitale2027.it","cultura.gov.it","rainews.it","rai.it","pordenonetoday.it","messaggeroveneto.gelocal.it","ilgazzettino.it","ilfriuli.it"],"publicCitationDomains":["comune.pordenone.it","regione.fvg.it","protezionecivile.fvg.it","arpa.fvg.it","prefettura.interno.gov.it","interno.gov.it","pordenonecapitale2027.it","cultura.gov.it"],"timeoutMs":5500,"maxResults":4,"officialSourceCardCache":{"hit":0,"miss":0,"pendingHit":0,"error":0,"size":0,"max":250,"ttlMs":1800000}},"eventAiReview":{"enabled":true,"timeoutMs":2500,"cooldownMs":300000,"maxCandidates":12,"coolingDownUntil":null,"lastError":null,"lastResolvedError":null},"weatherAlerts":{"enabled":true,"ttlMs":600000,"staleMs":7200000,"available":true,"source":"arpa_osmer","checkedAt":"2026-08-06T14:51:45.097Z","ageMs":5985660,"fresh":false,"usable":true,"running":false,"protectionTimeoutMs":900,"osmerTimeoutMs":3500},"eventsCache":{"ttlMs":600000,"readyMaxAgeMs":21600000,"refresh":{"enabled":true,"intervalMs":1800000,"startupDelayMs":20000,"running":false,"runTotal":4,"lastReason":"timer","lastStartedAt":"2026-08-06T16:21:39.000Z","lastFinishedAt":"2026-08-06T16:21:45.707Z","lastDurationMs":6707,"lastStatus":"ok","lastError":null,"lastResults":[{"key":"comune","label":"Calendario Comune","ok":true,"empty":false,"items":539,"durationMs":6706},{"key":"cinemazero-cinema","label":"Cinema Sotto le Stelle","ok":true,"empty":false,"items":1,"durationMs":237},{"key":"pordenone2027","label":"Pordenone 2027","ok":true,"empty":true,"items":0,"durationMs":925},{"key":"comune-news","label":"Novità Comune","ok":true,"empty":false,"items":60,"durationMs":1279}]},"entries":[{"key":"cinemazero-cinema","updatedAt":"2026-07-27T21:53:45.017Z","ageMs":844665741,"stale":true,"complete":true,"emptyReason":null,"usable":false,"items":1,"futureItems":0,"pageCount":null,"failedPageCount":0},{"key":"comune","updatedAt":"2026-08-06T16:21:45.703Z","ageMs":585055,"stale":false,"complete":true,"emptyReason":null,"usable":true,"items":539,"futureItems":299,"pageCount":6,"failedPageCount":0},{"key":"comune-news","updatedAt":"2026-08-06T16:21:40.295Z","ageMs":590463,"stale":false,"complete":true,"emptyReason":null,"usable":true,"items":60,"futureItems":0,"pageCount":null,"failedPageCount":0},{"key":"pordenone2027","updatedAt":"2026-08-06T16:21:39.935Z","ageMs":590823,"stale":false,"complete":true,"emptyReason":"no_future_items","usable":false,"items":0,"futureItems":0,"pageCount":null,"failedPageCount":0}],"totalItems":600,"futureItems":299,"completeEntries":4,"fallbackEntries":1,"usableEntries":2,"freshestUpdatedAt":"2026-08-06T16:21:45.703Z"},"warnings":{"throttleMs":600000,"healthWindowMs":900000,"activeKeys":0,"recentKeys":0,"totalSuppressed":0,"totalSuppressedRecent":0,"entries":[]},"chatContext":{"enabled":true,"maxTurns":8,"ttlMs":3600000},"graphIngestQueue":{"depth":0,"max":500,"running":false,"dropped":0},"graph":{"enabled":true,"reachable":true,"ok":true,"neo4jConfigured":true,"neo4jAvailable":true,"counts":{"sources":10,"pages":38,"faqs":313,"chatTurns":64,"candidatePending":0,"candidatePendingMax":500,"candidatePendingTarget":400,"answerIssueOpen":0,"answerIssueMax":500,"topics":14,"indexedPages":38,"indexedFaqs":313,"canonicalCandidates":987,"normalization":{"version":3,"pages":38,"domains":10,"domainBreakdown":{"comune.pordenone.it":{"pages":26,"citationAllowed":26,"internalOnly":0,"sourceType":"official"},"regione.fvg.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"arpa.fvg.it":{"pages":3,"citationAllowed":3,"internalOnly":0,"sourceType":"official"},"asfo.sanita.fvg.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"pordenonecapitale2027.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"prefettura.interno.gov.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"estate.comune.pordenone.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"primavera.comune.pordenone.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"biblioteca.comune.pordenone.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"meteo.fvg.it":{"pages":2,"citationAllowed":2,"internalOnly":0,"sourceType":"official"}},"citationAllowedPages":38,"internalOnlyPages":0,"pagesWithOtherOnlyTopic":3,"pagesWithoutText":0,"topicCoverage":14,"faqSourceUrls":0,"faqPublicUrls":0,"tokens":{"pageTerms":6149,"faqTerms":1461},"duplicateCanonicalCandidates":251,"updatedAt":"2026-08-06T16:00:31.592Z"}},"countsReady":true,"metrics":{"queryTotal":1655,"queryHit":949,"queryMiss":706,"ingestPage":40572,"ingestChat":14259,"answerIssueCreated":61,"answerIssueMerged":43,"lastCrawlAt":"2026-08-06T16:00:31.898Z","lastCrawlStatus":{"total":41,"ok":37,"fail":0,"optionalUnavailable":4,"failedDomains":{},"optionalUnavailableDomains":{"protezionecivile.fvg.it":4},"optionalUnavailableSources":[{"url":"https://www.protezionecivile.fvg.it/it","domain":"protezionecivile.fvg.it","error":"fetch failed"},{"url":"https://www.protezionecivile.fvg.it/it/allerte","domain":"protezionecivile.fvg.it","error":"fetch failed"},{"url":"https://www.protezionecivile.fvg.it/it/previsione-ed-allerta","domain":"protezionecivile.fvg.it","error":"fetch failed"},{"url":"https://www.protezionecivile.fvg.it/it/widget-allerta","domain":"protezionecivile.fvg.it","error":"fetch failed"}],"failed":[]},"neo4jAvailable":true,"candidateCreated":1884,"candidateSkipped":1338,"candidateMerged":10553,"ingestChatSkippedSynthetic":1,"lastFullCrawlAt":"2026-08-06T16:00:31.898Z","lastFullCrawlStatus":{"total":41,"ok":37,"fail":0,"optionalUnavailable":4,"failedDomains":{},"optionalUnavailableDomains":{"protezionecivile.fvg.it":4},"optionalUnavailableSources":[{"url":"https://www.protezionecivile.fvg.it/it","domain":"protezionecivile.fvg.it","error":"fetch failed"},{"url":"https://www.protezionecivile.fvg.it/it/allerte","domain":"protezionecivile.fvg.it","error":"fetch failed"},{"url":"https://www.protezionecivile.fvg.it/it/previsione-ed-allerta","domain":"protezionecivile.fvg.it","error":"fetch failed"},{"url":"https://www.protezionecivile.fvg.it/it/widget-allerta","domain":"protezionecivile.fvg.it","error":"fetch failed"}],"failed":[]},"refreshInProgress":false,"refreshStartedAt":"2026-08-06T16:00:06.059Z","refreshCompletedAt":"2026-08-06T16:00:31.898Z","refreshTotal":41,"refreshProcessed":41,"refreshFailed":0,"refreshCurrentUrl":null,"refreshError":null,"refreshCurrentUrls":[],"refreshConcurrency":4,"candidateRejectedQuality":24,"candidateRejectedSynthetic":0,"candidateRejectedOverflow":18,"refreshOptionalUnavailable":4,"answerIssueArchivedBenign":8,"graphCounts":{"sources":10,"pages":38,"faqs":313,"chatTurns":64,"candidatePending":0,"candidatePendingMax":500,"candidatePendingTarget":400,"answerIssueOpen":0,"answerIssueMax":500,"topics":14,"indexedPages":38,"indexedFaqs":313,"canonicalCandidates":987,"normalization":{"version":3,"pages":38,"domains":10,"domainBreakdown":{"comune.pordenone.it":{"pages":26,"citationAllowed":26,"internalOnly":0,"sourceType":"official"},"regione.fvg.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"arpa.fvg.it":{"pages":3,"citationAllowed":3,"internalOnly":0,"sourceType":"official"},"asfo.sanita.fvg.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"pordenonecapitale2027.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"prefettura.interno.gov.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"estate.comune.pordenone.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"primavera.comune.pordenone.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"biblioteca.comune.pordenone.it":{"pages":1,"citationAllowed":1,"internalOnly":0,"sourceType":"official"},"meteo.fvg.it":{"pages":2,"citationAllowed":2,"internalOnly":0,"sourceType":"official"}},"citationAllowedPages":38,"internalOnlyPages":0,"pagesWithOtherOnlyTopic":3,"pagesWithoutText":0,"topicCoverage":14,"faqSourceUrls":0,"faqPublicUrls":0,"tokens":{"pageTerms":6149,"faqTerms":1461},"duplicateCanonicalCandidates":251,"updatedAt":"2026-08-06T16:00:31.592Z"}},"graphStoreBytes":5139673,"graphSummaryUpdatedAt":"2026-08-06T16:00:31.897Z","lastCandidatePruneAt":"2026-08-06T14:19:58.203Z","lastNeo4jError":"Neo4j timeout after 5000ms","answerIssueSkippedBenign":94,"neo4jQueueDepth":0,"neo4jQueueDropped":0,"neo4jQueueMax":250},"sourcePolicy":{"official":["comune.pordenone.it","regione.fvg.it","asfo.sanita.fvg.it","protezionecivile.fvg.it","arpa.fvg.it","meteo.fvg.it","prefettura.interno.gov.it","interno.gov.it","pordenonecapitale2027.it","cultura.gov.it"],"secondary":[]},"taxonomy":[{"id":"anagrafe-stato-civile","label":"Anagrafe e stato civile"},{"id":"animali","label":"Animali e anagrafe canina"},{"id":"ambiente","label":"Ambiente e verde pubblico"},{"id":"eventi-cultura","label":"Eventi e cultura"},{"id":"mobilita-parcheggi","label":"Mobilita e parcheggi"},{"id":"segnalazioni","label":"Segnalazioni e manutenzioni"},{"id":"protezione-civile","label":"Protezione civile e allerte"},{"id":"amministrazione","label":"Amministrazione e organi politici"},{"id":"tributi-pagamenti","label":"Tributi e pagamenti"},{"id":"scuola-famiglia","label":"Scuola e famiglia"},{"id":"servizi-sociali","label":"Servizi sociali"},{"id":"salute-sanita","label":"Salute e sanita"},{"id":"urp-contatti","label":"URP e contatti"}]},"today":{"template":23,"cache":0,"local_kb":0,"local_router":0,"web_research":4,"ai":1,"ai_error":2,"fallback":2,"event_cache":10,"updatedAt":"2026-08-06T14:29:32.228Z","news_cache":10,"graph_hit":6,"graph_miss":2,"lastGraphMiss":{"at":"2026-08-06T10:53:48.528Z","reason":"no_candidate_score","topics":["altro"],"pageCandidates":3,"faqCandidates":18,"scoredCandidates":0,"acceptedMatches":0},"lastModel":"gemini-2.5-flash-lite"},"quality":{"status":"warn","reasons":["ai_error_warn"],"totalReplies":46,"groundedReplies":43,"groundedRatio":0.9347826086956522,"fallbackTotal":2,"fallbackRatio":0.043478260869565216,"aiErrorTotal":2,"aiErrorRatio":0.043478260869565216,"thresholds":{"fallbackWarnRatio":0.08,"fallbackCriticalRatio":0.15,"aiErrorWarnRatio":0.02,"aiErrorCriticalRatio":0.05},"sources":{"template":23,"cache":0,"localKb":0,"localRouter":0,"graphHit":6,"eventCache":10,"webResearch":4,"ai":1,"fallback":2,"aiError":2},"updatedAt":"2026-08-06T14:29:32.228Z"},"config":{"aiProvider":"qwen","aiModelFast":"gemini-2.5-flash-lite","aiModelSmart":"gemini-2.5-flash","geminiConfigured":true,"openaiConfigured":false,"codexCliConfiguredModel":"gpt-5.4-mini","codexCliModel":"gpt-5.4-mini","graphEnabled":true,"graphUrl":"127.0.0.1:5010","graphTimeoutMs":2500,"graphIngestTimeoutMs":12000,"cacheMinSimilarity":0.78,"cacheTtlMs":21600000,"cacheStoresAiReplies":false,"localKbMinScore":6,"retrievalChunks":4}}