fix the sock issue

This commit is contained in:
2026-02-10 16:12:53 +08:00
parent 6414944208
commit 01fb01e723

View File

@@ -7,6 +7,88 @@ from lang_agent.pipeline import Pipeline, PipelineConfig
from lang_agent.config import load_tyro_conf
from lang_agent.components.conv_store import use_printer
import os
import re
from typing import Dict, List, Tuple
def fix_proxy_env_vars(
dry_run: bool = False,
verbose: bool = True
) -> Tuple[Dict[str, Tuple[str, str]], Dict[str, str]]:
"""
Auto-fix proxy environment variables in-place.
Fixes invalid schemes:
- socks:// → socks5://
- socks5:// → socks5:// (unchanged)
- socks4:// → socks4:// (unchanged)
- http:// → http:// (unchanged)
- https:// → https:// (unchanged)
Args:
dry_run: If True, only report changes without modifying env vars.
verbose: If True, print changes to stdout.
Returns:
Tuple of:
- Dict of {var_name: (old_value, new_value)} for changed vars
- Dict of current proxy env vars after fix
"""
proxy_vars = [
"HTTP_PROXY", "http_proxy",
"HTTPS_PROXY", "https_proxy",
"ALL_PROXY", "all_proxy"
]
scheme_fixes = [
(re.compile(r'^socks5?://', re.IGNORECASE), 'socks5://'), # socks:// or socks5:// → socks5://
(re.compile(r'^socks4a?://', re.IGNORECASE), 'socks4://'), # socks4:// or socks4a:// → socks4://
]
changed = {}
current_proxies = {}
for var in proxy_vars:
value = os.environ.get(var)
if not value:
continue
current_proxies[var] = value
new_value = value
# Apply scheme fixes
for pattern, replacement in scheme_fixes:
if pattern.match(value):
new_value = replacement + value[pattern.match(value).end():]
break
# Only update if value actually changed
if new_value != value:
changed[var] = (value, new_value)
if not dry_run:
os.environ[var] = new_value
current_proxies[var] = new_value
# Report changes
if verbose:
if changed:
action = "Would fix" if dry_run else "Fixed"
print(f"{action} proxy environment variables:")
for var, (old, new) in changed.items():
print(f" {var}: {old}{new}")
else:
print("✅ No proxy environment variables need fixing.")
if current_proxies and not dry_run:
print("\n🔧 Current proxy settings:")
for var in sorted(set(k.upper() for k in current_proxies)):
val = os.environ.get(var, os.environ.get(var.lower(), ""))
if val:
print(f" {var}: {val}")
return changed, current_proxies
def main(
conf: PipelineConfig,
@@ -18,6 +100,7 @@ def main(
conf: Pipeline configuration
stream: Enable streaming mode for chat responses
"""
fix_proxy_env_vars()
use_printer()
if conf.config_f is not None:
conf = load_tyro_conf(conf.config_f)