Spaces:
Sleeping
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Morphos is a veterinary diagnostic support tool β a single-page application (SPA) that performs real-time clinical pattern detection from lab values and optionally calls an AI model (HuggingFace or local Ollama) for clinical interpretation. It targets Canino and Felino patients.
Running the App
This is a static frontend with a PHP proxy backend. No build step required.
Serve it locally with PHP's built-in server from the project root:
php -S localhost:8000
Then open http://localhost:8000 in a browser. The PHP proxy (api/hf_proxy.php) requires the API key in api/.env:
HF_API_KEY=<your_key>
For local AI inference, Ollama must be running at http://localhost:11434 with medgemma:latest pulled.
Architecture
Data Flow
User form input
β analisis.js (real-time pattern detection, no server)
β UI updates (color-coded fields, pattern cards)
User clicks "AnΓ‘lisis IA"
β ia.js (constructs prompt with patient data + flagged values)
β [HF route] β api/hf_proxy.php β HF Space Gradio API (SSE response)
β [Local route] β Ollama chat completions API
β Display AI output in #salida-ia
Key Files and Their Roles
js/analisis.jsβ Core engine (505 lines). Compares values against species-specific reference ranges, classifies severity (mild/moderate/severe), applies age/breed/sex adjustments, and identifies 50+ clinical patterns (anemia types, hepatic, renal, endocrine, etc.).js/ia.jsβ AI abstraction layer. Builds the clinical prompt in Spanish, calls either HF Proxy or Ollama, and strips model-specific tokens from the response.js/main.jsβ Orchestration: loads JSON data files, wires form events, triggers analysis, handles PDF export.js/ui.jsβ Tab navigation (8 panels, 4 exam sub-tabs), swipe gestures, mobile/desktop field sync, collapsible panels.js/pdf-parser.jsβ Client-side PDF extraction using PDF.js. 47 regex patterns to identify analytes in Spanish/English. Runs fully in the browser.api/hf_proxy.phpβ PHP proxy that readsapi/.env, forwards requests to HugginFace Space (blackmistcode-morphos-medgemma.hf.space/gradio_api), handles SSE polling, and returns{text: ...}.data/valores_referencia.jsonβ Reference ranges for 34 analytes per species.data/alteraciones.jsonβ 100+ clinical entities used to enrich AI prompts with etiologic context.
AI Backend Configuration
Stored in localStorage:
mx-ia-backend:"hf"(default) or"local"mx-ia-ollama-url: custom Ollama endpointmx-ia-ollama-model: custom model name (defaultmedgemma:latest)
The HF route supports up to 4 images (vision model). The local route uses Ollama's OpenAI-compatible chat completions API, also with vision support.
Pattern Detection Logic (analisis.js)
Severity thresholds are based on deviation from the reference range. Reference ranges are dynamically adjusted for:
- Age: puppies, adults, seniors, geriatric (age in months)
- Breed: Greyhounds (lower platelets normal), Akita/Shiba (different RBC ranges), etc.
- Sex: Male felines have a higher creatinine tolerance
The analizarResultados() function is called on every input event and returns flagged findings + matched clinical patterns.
CSS Notes
Do not use !important β use specificity or cascade ordering instead. The stylesheet is css/styles.css (1796 lines). The desktop grid breakpoint is >1100px.
Coding notes
All variables should be named in spanish unless they're referencing common technical names like tab, input, output, etc. Always use descriptive names for variables and functions keeping legibility as a priority. Don't use aligment spaces.