{
  "assignments": {
    "DEEP_MODEL": "os.environ.get('SHIRE_DEEP_MODEL', os.environ.get('SHIRE_BRAIN_MODEL', 'shire-brain:qwen3-8b'))",
    "FAST_MODEL": "os.environ.get('SHIRE_FAST_MODEL', 'shire-fast:qwen3-1.7b')",
    "HOST_OVERRIDE": "os.environ.get('SHIRE_BRAIN_HOST', '').strip()",
    "OLLAMA_TIMEOUT": "int(os.environ.get('SHIRE_OLLAMA_TIMEOUT', '300'))",
    "OLLAMA_URL": "os.environ.get('OLLAMA_URL', 'http://127.0.0.1:11434').rstrip('/')",
    "PORT": "int(os.environ.get('SHIRE_BRAIN_PORT', '8765'))",
    "ROOT": "Path(__file__).resolve().parent.parent"
  },
  "classes": [
    {
      "line": 236,
      "methods": [
        {
          "arguments": [
            "self",
            "fmt"
          ],
          "line": 239,
          "name": "log_message"
        },
        {
          "arguments": [
            "self"
          ],
          "line": 242,
          "name": "do_GET"
        },
        {
          "arguments": [
            "self"
          ],
          "line": 265,
          "name": "do_POST"
        }
      ],
      "name": "BrainHandler"
    }
  ],
  "functions": [
    {
      "arguments": [],
      "line": 45,
      "name": "tailscale_ip"
    },
    {
      "arguments": [],
      "line": 63,
      "name": "bind_host"
    },
    {
      "arguments": [
        "handler",
        "payload",
        "status"
      ],
      "line": 69,
      "name": "json_response"
    },
    {
      "arguments": [
        "prompt",
        "mode"
      ],
      "line": 78,
      "name": "choose_model"
    },
    {
      "arguments": [
        "route"
      ],
      "line": 114,
      "name": "blender_system_context"
    },
    {
      "arguments": [
        "payload",
        "prompt"
      ],
      "line": 138,
      "name": "resolve_request_route"
    },
    {
      "arguments": [
        "prompt",
        "mode"
      ],
      "line": 191,
      "name": "guarded_prompt"
    },
    {
      "arguments": [
        "model",
        "prompt",
        "max_tokens",
        "system_context"
      ],
      "line": 208,
      "name": "ask_ollama"
    },
    {
      "arguments": [
        "self",
        "fmt"
      ],
      "line": 239,
      "name": "log_message"
    },
    {
      "arguments": [
        "self"
      ],
      "line": 242,
      "name": "do_GET"
    },
    {
      "arguments": [
        "self"
      ],
      "line": 265,
      "name": "do_POST"
    },
    {
      "arguments": [],
      "line": 355,
      "name": "main"
    }
  ],
  "handler_methods": [
    {
      "arguments": [
        "self"
      ],
      "class": "BrainHandler",
      "line": 242,
      "name": "do_GET"
    },
    {
      "arguments": [
        "self"
      ],
      "class": "BrainHandler",
      "line": 265,
      "name": "do_POST"
    }
  ],
  "imports": [
    "codex.prompt_builder.build_prompt",
    "http.server.BaseHTTPRequestHandler",
    "http.server.ThreadingHTTPServer",
    "json",
    "os",
    "pathlib.Path",
    "services.blender_brain_contract.BlenderBrainContractError",
    "services.blender_brain_contract.DEEP_MODEL",
    "services.blender_brain_contract.FAST_MODEL",
    "services.blender_brain_contract.prepare_route",
    "socket",
    "subprocess",
    "sys",
    "time",
    "urllib.error",
    "urllib.request"
  ],
  "string_paths": [
    {
      "line": 34,
      "value": "/"
    },
    {
      "line": 243,
      "value": "/"
    },
    {
      "line": 226,
      "value": "/api/chat"
    },
    {
      "line": 266,
      "value": "/ask"
    },
    {
      "line": 243,
      "value": "/health"
    }
  ]
}
