AI backed processing

This commit is contained in:
2026-01-22 21:53:04 +05:30
parent 9d7109b60f
commit f50dd4692d
12 changed files with 368 additions and 33 deletions

54
backend/llm_service.py Normal file
View File

@@ -0,0 +1,54 @@
import ollama
import json
import base64
def extract_data(text: str = None, image_path: str = None, model_type: str = "text") -> dict:
"""
Extracts structured data using either Text (Gemma) or Vision (Qwen) models.
"""
prompt = """
You are an expert data extraction assistant.
Extract the following fields from the provided document and return them as a SINGLE VALID JSON OBJECT:
- invoice_number (string)
- date (string)
- vendor_name (string)
- total_amount (string)
- currency (string)
- line_items (list of objects with: description, quantity, unit_price, total)
IMPORTANT:
- Return ONLY the JSON. No markdown formatting, no explanations.
- If a field is not found, use null.
"""
messages = [{'role': 'user', 'content': prompt}]
model = 'gemma:2b'
if model_type == 'vision':
if not image_path:
return {"error": "Image path required for vision mode"}
# Qwen-VL handles images passed in the message
model = 'qwen2.5vl:7b' # Using the installed model ID
messages[0]['images'] = [image_path]
messages[0]['content'] = "Analyze this image. " + prompt
else:
# Text Mode
if not text:
return {"error": "Text required for text mode"}
messages[0]['content'] += f"\n\n---\n{text}\n---"
try:
response = ollama.chat(model=model, messages=messages)
content = response['message']['content']
# Clean up markdown
content = content.replace("```json", "").replace("```", "").strip()
return json.loads(content)
except Exception as e:
print(f"LLM Extraction Error ({model_type}): {e}")
return {"error": str(e), "raw_output": content if 'content' in locals() else ""}