feat: robust metric extraction with confidence score and proof snippets
- fixed Year-Prefix Bug in MetricParser - added metric_confidence and metric_proof_text to database - added Entity-Check and Annual-Priority to LLM prompt - improved UI: added confidence traffic light and mouse-over proof tooltip - restored missing API endpoints (create, bulk, wiki-override)
This commit is contained in:
@@ -114,6 +114,78 @@ def get_company(company_id: int, db: Session = Depends(get_db)):
|
||||
raise HTTPException(404, detail="Company not found")
|
||||
return company
|
||||
|
||||
@app.post("/api/companies")
|
||||
def create_company(company: CompanyCreate, db: Session = Depends(get_db)):
|
||||
db_company = db.query(Company).filter(Company.name == company.name).first()
|
||||
if db_company:
|
||||
raise HTTPException(status_code=400, detail="Company already registered")
|
||||
|
||||
new_company = Company(
|
||||
name=company.name,
|
||||
city=company.city,
|
||||
country=company.country,
|
||||
website=company.website,
|
||||
status="NEW"
|
||||
)
|
||||
db.add(new_company)
|
||||
db.commit()
|
||||
db.refresh(new_company)
|
||||
return new_company
|
||||
|
||||
@app.post("/api/companies/bulk")
|
||||
def bulk_import_companies(req: BulkImportRequest, background_tasks: BackgroundTasks, db: Session = Depends(get_db)):
|
||||
imported_count = 0
|
||||
for name in req.names:
|
||||
name = name.strip()
|
||||
if not name: continue
|
||||
|
||||
exists = db.query(Company).filter(Company.name == name).first()
|
||||
if not exists:
|
||||
new_company = Company(name=name, status="NEW")
|
||||
db.add(new_company)
|
||||
imported_count += 1
|
||||
# Optional: Auto-trigger discovery
|
||||
# background_tasks.add_task(run_discovery_task, new_company.id)
|
||||
|
||||
db.commit()
|
||||
return {"status": "success", "imported": imported_count}
|
||||
|
||||
@app.post("/api/companies/{company_id}/override/wikipedia")
|
||||
def override_wikipedia(company_id: int, url: str, background_tasks: BackgroundTasks, db: Session = Depends(get_db)):
|
||||
company = db.query(Company).filter(Company.id == company_id).first()
|
||||
if not company:
|
||||
raise HTTPException(404, detail="Company not found")
|
||||
|
||||
# Create or update manual wikipedia lock
|
||||
existing = db.query(EnrichmentData).filter(
|
||||
EnrichmentData.company_id == company_id,
|
||||
EnrichmentData.source_type == "wikipedia"
|
||||
).first()
|
||||
|
||||
# If URL is empty, we might want to clear it or set it to "k.A."
|
||||
# Assuming 'url' param carries the new URL.
|
||||
|
||||
wiki_data = {"url": url, "full_text": None, "manual_override": True}
|
||||
|
||||
if not existing:
|
||||
db.add(EnrichmentData(
|
||||
company_id=company_id,
|
||||
source_type="wikipedia",
|
||||
content=wiki_data,
|
||||
is_locked=True
|
||||
))
|
||||
else:
|
||||
existing.content = wiki_data
|
||||
existing.is_locked = True
|
||||
|
||||
db.commit()
|
||||
|
||||
# Trigger Re-evaluation if URL is valid
|
||||
if url and url.startswith("http"):
|
||||
background_tasks.add_task(run_wikipedia_reevaluation_task, company.id)
|
||||
|
||||
return {"status": "updated"}
|
||||
|
||||
@app.get("/api/robotics/categories")
|
||||
def list_robotics_categories(db: Session = Depends(get_db)):
|
||||
return db.query(RoboticsCategory).all()
|
||||
|
||||
Reference in New Issue
Block a user