def query_ollama(prompt, model, endpoint, temperature=0.7, top_p=0.8,
                 num_ctx=None, num_predict=256, timer=None):
    """Ollama APIを呼び出してLLM応答を取得"""
    if timer:
        timer.start("LLM生成")
    
    url = f"{endpoint}/api/generate"
    payload = {
        "model": model,	#モデル
        "prompt": prompt,	#プロンプト
        "stream": False,	#ストリームモードの指定
        "options": {
            "temperature": temperature,
            "top_p": top_p,
            "num_predict": num_predict
        }
    }
    if num_ctx is not None:
        payload["options"]["num_ctx"] = num_ctx

    try:
        r = requests.post(url, json=payload, timeout=600)
    except requests.exceptions.ConnectionError:
        if timer:
            timer.end("エラー: 接続失敗")
        print("\nエラー: Ollamaサーバーに接続できません。\n")
        return ""

    if not r.ok:
        if timer:
            timer.end()
        print(f"\nOllama APIエラー: {r.status_code} - {r.text}\n")
        return ""

    data = r.json()
    response = data.get("response", "").strip()

    if timer:
        timer.end(f"{len(response)}文字")

    return response
