| import unittest |
| from unittest.mock import patch |
|
|
| from shop_ledger.llama_backend import LlamaLedgerBackend |
| from shop_ledger.processor import LedgerProcessor, resolve_model_path_from_env |
|
|
|
|
| class ProcessorTests(unittest.TestCase): |
| def test_mock_processor_returns_rows(self): |
| processor = LedgerProcessor(mode="mock") |
| result = processor.process("paid Ravi 1200 for rice bags") |
|
|
| self.assertEqual(result.model_used, "mock heuristic") |
| self.assertEqual(len(result.entries), 1) |
| self.assertEqual(result.entries[0].amount, 1200) |
|
|
| def test_llama_mode_falls_back_without_model(self): |
| processor = LedgerProcessor(mode="llama", model_path="/missing/model.gguf") |
| result = processor.process("customer Nimal owes 750") |
|
|
| self.assertIn("fallback", result.model_used) |
| self.assertEqual(result.entries[0].amount, 750) |
|
|
| def test_llama_backend_uses_readable_model_label(self): |
| label = "unsloth/gemma-4-12b-it-GGUF / gemma-4-12b-it-UD-Q4_K_XL.gguf / llama.cpp" |
| with patch.dict("os.environ", {"LLAMA_MODEL_LABEL": label}): |
| backend = LlamaLedgerBackend(model_path="/models/model.gguf") |
|
|
| self.assertEqual(backend.model_label, label) |
|
|
| def test_env_model_path_wins_for_modal_mounts(self): |
| with patch.dict( |
| "os.environ", |
| { |
| "LLAMA_GGUF_PATH": "/models/model.gguf", |
| "LLAMA_GGUF_REPO": "unused/repo", |
| "LLAMA_GGUF_FILE": "unused.gguf", |
| }, |
| ): |
| self.assertEqual(resolve_model_path_from_env(), "/models/model.gguf") |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|