Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NotImplemented error due to unsupported event loop method on Windows when starting server #604

Closed
protokoul opened this issue Jan 16, 2025 · 3 comments

Comments

@protokoul
Copy link
Contributor

protokoul commented Jan 16, 2025

Describe the issue

While trying to start codegate server on Windows, a NotImplemented exception is raised and the server does not start.
Python version: 3.13.1

Steps to Reproduce

Set up the project as described here and run codegate serve

Operating System

Microsoft Windows (Intel)

IDE and Version

N/A

Extension and Version

N/A

Provider

Other

Model

N/A

Logs

{
  "origin": "cli",
  "event": "Unexpected error occurred during server execution",
  "level": "error",
  "timestamp": "2025-01-16T04:52:57.283694Z",
  "module": "cli",
  "pathname": "E:\\github_forks\\codegate-fork\\src\\codegate\\cli.py",
  "exception": [
    {
      "exc_type": "NotImplementedError",
      "exc_value": "",
      "syntax_error": null,
      "is_cause": false,
      "frames": [
        {
          "filename": "E:\\github_forks\\codegate-fork\\src\\codegate\\cli.py",
          "lineno": 391,
          "name": "run_servers",
          "locals": {
            "cfg": "Config(\n    port=8989,\n    proxy_port=8990,\n    host='localhost',\n    log_level=<LogLevel.INFO: 'INFO'>,\n    log_format=<LogFormat.JSON: 'JSON'>,\n    prompts=PromptConfig(\n        prompts={\n            'default_chat': 'You are CodeGate, a security-focused AI assistant.\\nYou specialize in software se'+1521,\n            'secrets_redacted': 'The files in the context contain sensitive information that has been redacted. D'+143,\n            'security_audit': 'You are a security expert conducting a thorough code review. Identify potential '+84,\n            'red_team': 'You are a red team member conducting a security assessment. Identify vulnerabili'+54,\n            'blue_team': 'You are a blue team member conducting a security assessment. Identify security c'+58\n        }\n    ),\n    model_base_path='./codegate_volume/models',\n    chat_model_n_ctx=32768,\n    chat_model_n_gpu_layers=-1,\n    embedding_model='all-minilm-L6-v2-q5_k_m.gguf',\n    db_path=None,\n    vec_db_path='./sqlite_data/vectordb.db',\n    certs_dir='./codegate_volume/certs',\n    ca_cert='ca.crt',\n    ca_key='ca.key',\n    server_cert='server.crt',\n    server_key='server.key',\n    force_certs=False,\n    max_fim_hash_lifetime=300,\n    provider_urls={\n        'openai': 'https://api.openai.com/v1',\n        'anthropic': 'https://api.anthropic.com/v1',\n        'vllm': 'http://localhost:8000',\n        'ollama': 'http://localhost:11434'\n    }\n)",
            "app": "<fastapi.applications.FastAPI object at 0x000002EE259556A0>",
            "logger": "<BoundLoggerFilteringAtNotset(context={'origin': 'cli'}, processors=[<function add_log_level at 0x000002EE09FD9DA0>, <structlog.processors.TimeStamper object at 0x000002EE151C00C0>, <function add_origin at 0x000002EE09D62CA0>, <structlog.processors.CallsiteParameterAdder object at 0x000002EE243D5FC0>, <function ProcessorFormatter.wrap_for_formatter at 0x000002EE0C205DA0>])>",
            "uvicorn_config": "<uvicorn.config.Config object at 0x000002EE259D0C20>",
            "server": "<codegate.cli.UvicornServer object at 0x000002EE259D1010>",
            "copilot_provider": "<codegate.providers.copilot.provider.CopilotProvider object at 0x000002EE259D1160>",
            "tasks": "[\n    <Task finished name='Task-2' coro=<UvicornServer.serve() done, defined at E:\\github_forks\\codegate-fork\\src\\codegate\\cli.py:38> exception=NotImplementedError()>,\n    <Task pending name='Task-3' coro=<CopilotProvider.run_proxy_server() running at E:\\github_forks\\codegate-fork\\src\\codegate\\providers\\copilot\\provider.py:733> wait_for=<_GatheringFuture pending cb=[Task.task_wakeup()]> cb=[gather.<locals>._done_callback() at C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\tasks.py:820]>\n]",
            "e": "NotImplementedError()"
          }
        },
        {
          "filename": "E:\\github_forks\\codegate-fork\\src\\codegate\\cli.py",
          "lineno": 44,
          "name": "serve",
          "locals": {
            "self": "<codegate.cli.UvicornServer object at 0x000002EE259D1010>",
            "loop": "<ProactorEventLoop running=True closed=False debug=False>"
          }
        },
        {
          "filename": "C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\events.py",
          "lineno": 596,
          "name": "add_signal_handler",
          "locals": {
            "self": "<ProactorEventLoop running=True closed=False debug=False>",
            "sig": "<Signals.SIGTERM: 15>",
            "callback": "<function UvicornServer.serve.<locals>.<lambda> at 0x000002EE25922480>",
            "args": "()"
          }
        }
      ]
    }
  ]
}

Additional Context

This is because add_signal_handler() is not supported on Windows as highlighted here.

This issue dealt with this problem by writing add_signal_handler() in try-except and I tried this as well just to see what happens. This does not raise NotImplemented error but raises ValueError because reuse_port is not supported by socket module on Windows and it is used in class CopilotProvider's create_proxy_server().

{
  "origin": "cli",
  "event": "Unexpected error occurred during server execution",
  "level": "error",
  "timestamp": "2025-01-16T06:38:25.380003Z",
  "module": "cli",
  "pathname": "E:\\github_forks\\codegate-fork\\src\\codegate\\cli.py",
  "exception": [
    {
      "exc_type": "ValueError",
      "exc_value": "reuse_port not supported by socket module",
      "syntax_error": null,
      "is_cause": false,
      "frames": [
        {
          "filename": "E:\\github_forks\\codegate-fork\\src\\codegate\\cli.py",
          "lineno": 394,
          "name": "run_servers",
          "locals": {
            "cfg": "Config(\n    port=8989,\n    proxy_port=8990,\n    host='localhost',\n    log_level=<LogLevel.INFO: 'INFO'>,\n    log_format=<LogFormat.JSON: 'JSON'>,\n    prompts=PromptConfig(\n        prompts={\n            'default_chat': 'You are CodeGate, a security-focused AI assistant.\\nYou specialize in software se'+1521,\n            'secrets_redacted': 'The files in the context contain sensitive information that has been redacted. D'+143,\n            'security_audit': 'You are a security expert conducting a thorough code review. Identify potential '+84,\n            'red_team': 'You are a red team member conducting a security assessment. Identify vulnerabili'+54,\n            'blue_team': 'You are a blue team member conducting a security assessment. Identify security c'+58\n        }\n    ),\n    model_base_path='./codegate_volume/models',\n    chat_model_n_ctx=32768,\n    chat_model_n_gpu_layers=-1,\n    embedding_model='all-minilm-L6-v2-q5_k_m.gguf',\n    db_path=None,\n    vec_db_path='./sqlite_data/vectordb.db',\n    certs_dir='./codegate_volume/certs',\n    ca_cert='ca.crt',\n    ca_key='ca.key',\n    server_cert='server.crt',\n    server_key='server.key',\n    force_certs=False,\n    max_fim_hash_lifetime=300,\n    provider_urls={\n        'openai': 'https://api.openai.com/v1',\n        'anthropic': 'https://api.anthropic.com/v1',\n        'vllm': 'http://localhost:8000',\n        'ollama': 'http://localhost:11434'\n    }\n)",
            "app": "<fastapi.applications.FastAPI object at 0x0000023FD77CCD70>",
            "logger": "<BoundLoggerFilteringAtNotset(context={'origin': 'cli'}, processors=[<function add_log_level at 0x0000023FBBED9DA0>, <structlog.processors.TimeStamper object at 0x0000023FD768CF40>, <function add_origin at 0x0000023FBBC62CA0>, <structlog.processors.CallsiteParameterAdder object at 0x0000023FC3416A80>, <function ProcessorFormatter.wrap_for_formatter at 0x0000023FBE0D5DA0>])>",
            "uvicorn_config": "<uvicorn.config.Config object at 0x0000023FD7870830>",
            "server": "<codegate.cli.UvicornServer object at 0x0000023FD7870C20>",
            "copilot_provider": "<codegate.providers.copilot.provider.CopilotProvider object at 0x0000023FD7870D70>",
            "tasks": "[\n    <Task pending name='Task-2' coro=<UvicornServer.serve() running at E:\\github_forks\\codegate-fork\\src\\codegate\\cli.py:55> wait_for=<_GatheringFuture pending cb=[Task.task_wakeup()]> cb=[gather.<locals>._done_callback() at C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\tasks.py:820]>,\n    <Task finished name='Task-3' coro=<CopilotProvider.run_proxy_server() done, defined at E:\\github_forks\\codegate-fork\\src\\codegate\\providers\\copilot\\provider.py:726> exception=ValueError('reuse_port not supported by socket module')>\n]",
            "e": "ValueError('reuse_port not supported by socket module')"
          }
        },
        {
          "filename": "E:\\github_forks\\codegate-fork\\src\\codegate\\providers\\copilot\\provider.py",
          "lineno": 733,
          "name": "run_proxy_server",
          "locals": {
            "cls": "<class 'codegate.providers.copilot.provider.CopilotProvider'>",
            "ca": "<codegate.ca.codegate_ca.CertificateAuthority object at 0x0000023FD77CD2B0>",
            "ssl_context": "<ssl.SSLContext object at 0x0000023FD7827DA0>",
            "config": "Config(\n    port=8989,\n    proxy_port=8990,\n    host='localhost',\n    log_level=<LogLevel.INFO: 'INFO'>,\n    log_format=<LogFormat.JSON: 'JSON'>,\n    prompts=PromptConfig(\n        prompts={\n            'default_chat': 'You are CodeGate, a security-focused AI assistant.\\nYou specialize in software se'+1521,\n            'secrets_redacted': 'The files in the context contain sensitive information that has been redacted. D'+143,\n            'security_audit': 'You are a security expert conducting a thorough code review. Identify potential '+84,\n            'red_team': 'You are a red team member conducting a security assessment. Identify vulnerabili'+54,\n            'blue_team': 'You are a blue team member conducting a security assessment. Identify security c'+58\n        }\n    ),\n    model_base_path='./codegate_volume/models',\n    chat_model_n_ctx=32768,\n    chat_model_n_gpu_layers=-1,\n    embedding_model='all-minilm-L6-v2-q5_k_m.gguf',\n    db_path=None,\n    vec_db_path='./sqlite_data/vectordb.db',\n    certs_dir='./codegate_volume/certs',\n    ca_cert='ca.crt',\n    ca_key='ca.key',\n    server_cert='server.crt',\n    server_key='server.key',\n    force_certs=False,\n    max_fim_hash_lifetime=300,\n    provider_urls={\n        'openai': 'https://api.openai.com/v1',\n        'anthropic': 'https://api.anthropic.com/v1',\n        'vllm': 'http://localhost:8000',\n        'ollama': 'http://localhost:11434'\n    }\n)"
          }
        },
        {
          "filename": "E:\\github_forks\\codegate-fork\\src\\codegate\\providers\\copilot\\provider.py",
          "lineno": 720,
          "name": "create_proxy_server",
          "locals": {
            "cls": "<class 'codegate.providers.copilot.provider.CopilotProvider'>",
            "host": "'localhost'",
            "port": "8990",
            "ssl_context": "<ssl.SSLContext object at 0x0000023FD7827DA0>",
            "loop": "<ProactorEventLoop running=True closed=False debug=False>"
          }
        },
        {
          "filename": "C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\base_events.py",
          "lineno": 1589,
          "name": "create_server",
          "locals": {
            "self": "<ProactorEventLoop running=True closed=False debug=False>",
            "protocol_factory": "<function CopilotProvider.create_proxy_server.<locals>.<lambda> at 0x0000023FD77123E0>",
            "host": "'localhost'",
            "port": "8990",
            "family": "<AddressFamily.AF_UNSPEC: 0>",
            "flags": "<AddressInfo.AI_PASSIVE: 1>",
            "sock": "<socket.socket [closed] fd=-1, family=2, type=1, proto=0>",
            "backlog": "100",
            "ssl": "<ssl.SSLContext object at 0x0000023FD7827DA0>",
            "reuse_address": "False",
            "reuse_port": "True",
            "keep_alive": "None",
            "ssl_handshake_timeout": "None",
            "ssl_shutdown_timeout": "None",
            "start_serving": "False",
            "sockets": "[<socket.socket [closed] fd=-1, family=2, type=1, proto=0>]",
            "hosts": "['localhost']",
            "fs": "[\n    <coroutine object BaseEventLoop._create_server_getaddrinfo at 0x0000023FD77BE790>\n]",
            "infos": "{\n    (\n        <AddressFamily.AF_INET: 2>,\n        <SocketKind.SOCK_STREAM: 1>,\n        0,\n        '',\n        ('127.0.0.1', 8990)\n    ),\n    (\n        <AddressFamily.AF_INET6: 23>,\n        <SocketKind.SOCK_STREAM: 1>,\n        0,\n        '',\n        ('::1', 8990, 0, 0)\n    )\n}",
            "completed": "False",
            "res": "(\n    <AddressFamily.AF_INET: 2>,\n    <SocketKind.SOCK_STREAM: 1>,\n    0,\n    '',\n    ('127.0.0.1', 8990)\n)",
            "af": "<AddressFamily.AF_INET: 2>",
            "socktype": "<SocketKind.SOCK_STREAM: 1>",
            "proto": "0",
            "canonname": "''",
            "sa": "('127.0.0.1', 8990)"
          }
        },
        {
          "filename": "C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\base_events.py",
          "lineno": 91,
          "name": "_set_reuseport",
          "locals": {
            "sock": "<socket.socket [closed] fd=-1, family=2, type=1, proto=0>"
          }
        }
      ]
    }
  ]
}
@lukehinds
Copy link
Contributor

Thanks for raising this, we are going to source a windows machine and attempt to recreate, until then if you believe you have a fix, you're welcome to make a PR

@protokoul
Copy link
Contributor Author

As Linux distros can be used in Windows with WSL, I realized that I don't necessarily need to set up the development environment in Windows, although this issue specific to Windows will still be there. @lukehinds Did I raise an issue which is not really relevant to CodeGate's development?

@lukehinds
Copy link
Contributor

hey @protokoul , lets move to parked for now, but if this comes up again we can see what we can do, unfortunately none of us have any windows machines to test on.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants