| import os |
|
|
| HF_TOKEN = os.environ.get("HF_TOKEN") or os.environ.get("HUGGING_FACE_HUB_TOKEN") |
| HF_MODEL = "Qwen/Qwen2.5-7B-Instruct" |
|
|
| _use_ollama = False |
| _ollama_mod = None |
| _hf_client = None |
| _llm_available = False |
|
|
| if os.environ.get("FORCE_HF", "1") != "1": |
| try: |
| if not os.environ.get("SPACE_ID"): |
| import ollama as _ollama_mod |
| _ollama_mod.list() |
| _use_ollama = True |
| _llm_available = True |
| except Exception: |
| _use_ollama = False |
|
|
| if _use_ollama: |
| print("[startup] Using Ollama locally with qwen2.5:1.5b") |
| else: |
| try: |
| from huggingface_hub import InferenceClient |
| _hf_client = InferenceClient(model=HF_MODEL, token=HF_TOKEN) |
| _llm_available = bool(HF_TOKEN) or bool(os.environ.get("SPACE_ID")) |
| print(f"[startup] HF Inference API — model={HF_MODEL}, token={'yes' if HF_TOKEN else 'space/default'}") |
| except Exception as exc: |
| print(f"[startup] HF client init failed: {exc}") |
| _hf_client = None |
| _llm_available = False |
|
|
|
|
| def llm_available() -> bool: |
| return _llm_available and (_use_ollama or _hf_client is not None) |
|
|
|
|
| def call_llm(prompt: str, system: str = "") -> str: |
| if not llm_available(): |
| return "[LLM Error: Model unavailable — using rule-based fallback]" |
|
|
| messages = [] |
| if system: |
| messages.append({"role": "system", "content": system}) |
| messages.append({"role": "user", "content": prompt}) |
| try: |
| if _use_ollama: |
| resp = _ollama_mod.chat(model="qwen2.5:1.5b", messages=messages) |
| return resp["message"]["content"] |
| resp = _hf_client.chat_completion(messages, max_tokens=2048, temperature=0.1) |
| return resp.choices[0].message.content |
| except Exception as e: |
| return f"[LLM Error: {e}]" |
|
|