morphos / CLAUDE.md
Jose Salazar
Deploy Morphos en HF Spaces
445de93
|
Raw
History Blame Contribute Delete
3.9 kB

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 reads api/.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 endpoint
  • mx-ia-ollama-model: custom model name (default medgemma: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.