Implement dual-model filing pipeline with Ollama extraction

This commit is contained in:
2026-02-28 16:31:25 -05:00
parent 0615534f4b
commit a09001501e
16 changed files with 872 additions and 51 deletions

View File

@@ -4,6 +4,7 @@ import { auth } from '@/lib/auth';
import { requireAuthenticatedSession } from '@/lib/server/auth-session';
import { asErrorMessage, jsonError } from '@/lib/server/http';
import { buildPortfolioSummary } from '@/lib/server/portfolio';
import { redactInternalFilingAnalysisFields } from '@/lib/server/api/filing-redaction';
import { getFilingByAccession, listFilingsRecords } from '@/lib/server/repos/filings';
import {
deleteHoldingByIdRecord,
@@ -332,8 +333,9 @@ export const app = new Elysia({ prefix: '/api' })
getQuote(ticker),
getPriceHistory(ticker)
]);
const redactedFilings = filings.map(redactInternalFilingAnalysisFields);
const latestFiling = filings[0] ?? null;
const latestFiling = redactedFilings[0] ?? null;
const holding = holdings.find((entry) => entry.ticker === ticker) ?? null;
const watchlistItem = watchlist.find((entry) => entry.ticker === ticker) ?? null;
@@ -341,7 +343,7 @@ export const app = new Elysia({ prefix: '/api' })
?? watchlistItem?.company_name
?? ticker;
const financials = filings
const financials = redactedFilings
.filter((entry) => entry.metrics)
.map((entry) => ({
filingDate: entry.filing_date,
@@ -353,7 +355,7 @@ export const app = new Elysia({ prefix: '/api' })
debt: entry.metrics?.debt ?? null
}));
const aiReports = filings
const aiReports = redactedFilings
.filter((entry) => entry.analysis?.text || entry.analysis?.legacyInsights)
.slice(0, 8)
.map((entry) => ({
@@ -377,7 +379,7 @@ export const app = new Elysia({ prefix: '/api' })
position: holding,
priceHistory,
financials,
filings: filings.slice(0, 20),
filings: redactedFilings.slice(0, 20),
aiReports
}
});
@@ -446,7 +448,7 @@ export const app = new Elysia({ prefix: '/api' })
limit: Number.isFinite(limit) ? limit : 50
});
return Response.json({ filings });
return Response.json({ filings: filings.map(redactInternalFilingAnalysisFields) });
}, {
query: t.Object({
ticker: t.Optional(t.String()),