codefreedom 0.1.2__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. {codefreedom-0.1.2/src/codefreedom.egg-info → codefreedom-0.1.3}/PKG-INFO +1 -1
  2. {codefreedom-0.1.2 → codefreedom-0.1.3}/pyproject.toml +27 -5
  3. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/.env.proxy.example +1 -0
  4. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/.env.proxy.secrets.example +3 -0
  5. codefreedom-0.1.3/src/codefreedom/examples/proxy/config/providers/azure-foundry.yaml +148 -0
  6. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/config/providers/local.yaml +6 -13
  7. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/config/providers/nvidia.yaml +63 -5
  8. codefreedom-0.1.3/src/codefreedom/examples/proxy/config/providers/opencode-zen.yaml +158 -0
  9. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/config/providers/openrouter.yaml +3 -3
  10. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/docker-compose.yaml +3 -0
  11. codefreedom-0.1.3/src/codefreedom/examples/proxy/patch_websearch_count.sh +14 -0
  12. {codefreedom-0.1.2 → codefreedom-0.1.3/src/codefreedom.egg-info}/PKG-INFO +1 -1
  13. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom.egg-info/SOURCES.txt +1 -0
  14. codefreedom-0.1.2/src/codefreedom/examples/proxy/config/providers/azure-foundry.yaml +0 -101
  15. codefreedom-0.1.2/src/codefreedom/examples/proxy/config/providers/opencode-zen.yaml +0 -84
  16. {codefreedom-0.1.2 → codefreedom-0.1.3}/LICENSE +0 -0
  17. {codefreedom-0.1.2 → codefreedom-0.1.3}/NOTICE +0 -0
  18. {codefreedom-0.1.2 → codefreedom-0.1.3}/README.md +0 -0
  19. {codefreedom-0.1.2 → codefreedom-0.1.3}/setup.cfg +0 -0
  20. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/__init__.py +0 -0
  21. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/__main__.py +0 -0
  22. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/admin.py +0 -0
  23. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/__init__.py +0 -0
  24. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/admin.py +0 -0
  25. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/chrome.py +0 -0
  26. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/claude.py +0 -0
  27. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/docker_utils.py +0 -0
  28. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/init_utils.py +0 -0
  29. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/main.py +0 -0
  30. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/proxy.py +0 -0
  31. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/tool_init_utils.py +0 -0
  32. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/vscode.py +0 -0
  33. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/cli/web.py +0 -0
  34. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/config.py +0 -0
  35. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/env_loader.py +0 -0
  36. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/claude/.env.claude.example +0 -0
  37. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/claude/.env.claude.secrets.example +0 -0
  38. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/claude/profiles/claude-code.json +0 -0
  39. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/claude/profiles/claude-code.schema.json +0 -0
  40. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/config/config.yaml +0 -0
  41. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/config/providers/anthropic-compatible.yaml +0 -0
  42. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/config/providers/deepseek.yaml +0 -0
  43. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/config/providers/openai-compatible.yaml +0 -0
  44. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/proxy/patch_websearch_count.py +0 -0
  45. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/tools/chrome/chrome.json +0 -0
  46. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/tools/chrome/chrome.schema.json +0 -0
  47. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/tools/web/web.json +0 -0
  48. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/examples/tools/web/web.schema.json +0 -0
  49. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/launcher.py +0 -0
  50. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/profiles.py +0 -0
  51. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom/tool_registry.py +0 -0
  52. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom.egg-info/dependency_links.txt +0 -0
  53. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom.egg-info/entry_points.txt +0 -0
  54. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom.egg-info/requires.txt +0 -0
  55. {codefreedom-0.1.2 → codefreedom-0.1.3}/src/codefreedom.egg-info/top_level.txt +0 -0
  56. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_admin.py +0 -0
  57. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_chrome.py +0 -0
  58. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_docker_utils.py +0 -0
  59. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_env_loader.py +0 -0
  60. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_init_claude.py +0 -0
  61. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_init_proxy.py +0 -0
  62. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_init_utils.py +0 -0
  63. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_mcp_endpoints.py +0 -0
  64. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_profiles.py +0 -0
  65. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_proxy.py +0 -0
  66. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_vscode_claude.py +0 -0
  67. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_vscode_proxy.py +0 -0
  68. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_web.py +0 -0
  69. {codefreedom-0.1.2 → codefreedom-0.1.3}/tests/test_web_bridge.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codefreedom
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Unified CLI for code agents — LLM proxy routing, Docker sandboxing, profile management, and browser tools. All config in ~/.codefreedom.
5
5
  Author-email: Nilay Parikh <nilay.parikh@gmail.com>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codefreedom"
7
- version = "0.1.2"
7
+ version = "0.1.3"
8
8
  description = "Unified CLI for code agents — LLM proxy routing, Docker sandboxing, profile management, and browser tools. All config in ~/.codefreedom."
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -77,17 +77,39 @@ Documentation = "https://nilayparikh.github.io/codefreedom/"
77
77
  where = ["src"]
78
78
 
79
79
  [tool.setuptools.package-data]
80
+ # All files copied by the init subcommands (claude, proxy, chrome, web).
81
+ # Keep this in sync with src/codefreedom/cli/{claude,proxy,chrome,web}.py
82
+ # and src/codefreedom/cli/init_utils.py — every file referenced there
83
+ # must be listed here so it's included in the wheel/sdist and available
84
+ # for first-time `codefreedom ... init` runs.
80
85
  codefreedom = [
86
+ # Claude code agent — copied by `codefreedom claude init`
81
87
  "examples/claude/.env.claude.example",
82
88
  "examples/claude/.env.claude.secrets.example",
83
- "examples/claude/profiles/*.json",
89
+ "examples/claude/profiles/claude-code.json",
90
+ "examples/claude/profiles/claude-code.schema.json",
91
+ # LiteLLM proxy — copied by `codefreedom proxy init`
84
92
  "examples/proxy/.env.proxy.example",
85
93
  "examples/proxy/.env.proxy.secrets.example",
86
94
  "examples/proxy/config/config.yaml",
87
95
  "examples/proxy/docker-compose.yaml",
88
- "examples/proxy/config/providers/*.yaml",
89
- "examples/tools/chrome/*.json",
90
- "examples/tools/web/*.json",
96
+ "examples/proxy/config/providers/anthropic-compatible.yaml",
97
+ "examples/proxy/config/providers/azure-foundry.yaml",
98
+ "examples/proxy/config/providers/deepseek.yaml",
99
+ "examples/proxy/config/providers/local.yaml",
100
+ "examples/proxy/config/providers/nvidia.yaml",
101
+ "examples/proxy/config/providers/openai-compatible.yaml",
102
+ "examples/proxy/config/providers/opencode-zen.yaml",
103
+ "examples/proxy/config/providers/openrouter.yaml",
104
+ # WebSearch count display patch — mounted into the proxy container
105
+ # (see docs/proxy/websearch-interception.md)
106
+ "examples/proxy/patch_websearch_count.py",
107
+ "examples/proxy/patch_websearch_count.sh",
108
+ # Browser tools — copied by `codefreedom tools <tool> init`
109
+ "examples/tools/chrome/chrome.json",
110
+ "examples/tools/chrome/chrome.schema.json",
111
+ "examples/tools/web/web.json",
112
+ "examples/tools/web/web.schema.json",
91
113
  ]
92
114
 
93
115
  # ── Pylint ───────────────────────────────────────────────────────────────────
@@ -93,6 +93,7 @@
93
93
  # MICROSOFT_FOUNDRY_API_BASE=https://<space>.services.ai.azure.com/openai/v1
94
94
  # NVIDIA_BASE_URL=https://integrate.api.nvidia.com/v1
95
95
  # OPENCODE_ZEN_BASE_URL=https://opencode.ai/zen/v1
96
+ # OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
96
97
 
97
98
 
98
99
  # ═══════════════════════════════════════════════════════════════════════════════
@@ -39,6 +39,9 @@
39
39
  # OpenCode Zen — https://opencode.ai/zen/v1 (free tier available)
40
40
  # OPENCODE_ZEN_API_KEY=
41
41
 
42
+ # OpenRouter — https://openrouter.ai
43
+ # OPENROUTER_API_KEY=
44
+
42
45
 
43
46
  # ═══════════════════════════════════════════════════════════════════════════════
44
47
  # OpenAI-Compatible Endpoint (bring your own model)
@@ -0,0 +1,148 @@
1
+ ---
2
+ # ── Microsoft Foundry (Azure) Provider ────────────────────────────────────────
3
+ # Routes to Azure AI Foundry / Azure OpenAI deployments.
4
+ # Set MICROSOFT_FOUNDRY_API_BASE and MICROSOFT_FOUNDRY_API_KEY to enable.
5
+
6
+ # Reference:
7
+ # - https://azure.microsoft.com/en-us/pricing/details/azure-openai/
8
+ # - https://docs.fireworks.ai/serverless/pricing
9
+ # ──────────────────────────────────────────────────────────────────────────────
10
+
11
+ # model_list:
12
+ # - model_name: Azure/GPT-5.4
13
+ # litellm_params:
14
+ # model: openai/gpt-5.4
15
+ # api_base: os.environ/MICROSOFT_FOUNDRY_API_BASE
16
+ # api_key: os.environ/MICROSOFT_FOUNDRY_API_KEY
17
+ # timeout: 300
18
+ # drop_params: true
19
+ # extra_body:
20
+ # stream_options:
21
+ # include_usage: true
22
+ # model_info:
23
+ # id: "azure-gpt-5-4"
24
+ # db_model: false
25
+ # supports_reasoning: true
26
+ # mode: chat
27
+ # context_window: 1050000
28
+ # max_tokens: 1050000
29
+ # max_input_tokens: 922000
30
+ # max_output_tokens: 128000
31
+ # limit:
32
+ # context: 1050000
33
+ # output: 128000
34
+ # supports_system_messages: true
35
+ # supports_native_streaming: true
36
+ # supports_vision: true
37
+ # input_cost_per_token: 0.00000250
38
+ # cached_input_cost_per_token: 0.00000025
39
+ # output_cost_per_token: 0.00001500
40
+ # supported_openai_params:
41
+ # - tools
42
+ # - tool_choice
43
+ # - response_format
44
+ # - max_tokens
45
+ # - max_completion_tokens
46
+ # - stream
47
+ # - stream_options
48
+ # - temperature
49
+ # - top_p
50
+ # - stop
51
+ # - presence_penalty
52
+ # - frequency_penalty
53
+ # - logit_bias
54
+ # - logprobs
55
+ # - top_logprobs
56
+ # - reasoning_effort
57
+ #
58
+ # - model_name: Azure/GPT-5.4-Mini
59
+ # litellm_params:
60
+ # model: openai/gpt-5.4-mini
61
+ # api_base: os.environ/MICROSOFT_FOUNDRY_API_BASE
62
+ # api_key: os.environ/MICROSOFT_FOUNDRY_API_KEY
63
+ # timeout: 300
64
+ # drop_params: true
65
+ # extra_body:
66
+ # stream_options:
67
+ # include_usage: true
68
+ # model_info:
69
+ # id: "azure-gpt-5-4-mini"
70
+ # db_model: false
71
+ # supports_reasoning: true
72
+ # mode: chat
73
+ # context_window: 400000
74
+ # max_tokens: 400000
75
+ # max_input_tokens: 272000
76
+ # max_output_tokens: 128000
77
+ # limit:
78
+ # context: 400000
79
+ # output: 128000
80
+ # supports_system_messages: true
81
+ # supports_native_streaming: true
82
+ # supports_vision: true
83
+ # input_cost_per_token: 0.00000100
84
+ # cached_input_cost_per_token: 0.00000008
85
+ # output_cost_per_token: 0.00001500
86
+ # supported_openai_params:
87
+ # - tools
88
+ # - tool_choice
89
+ # - response_format
90
+ # - max_tokens
91
+ # - max_completion_tokens
92
+ # - stream
93
+ # - stream_options
94
+ # - temperature
95
+ # - top_p
96
+ # - stop
97
+ # - presence_penalty
98
+ # - frequency_penalty
99
+ # - logit_bias
100
+ # - logprobs
101
+ # - top_logprobs
102
+ # - reasoning_effort
103
+ #
104
+ # - model_name: Azure/GPT-5.4-Nano
105
+ # litellm_params:
106
+ # model: openai/gpt-5.4-nano
107
+ # api_base: os.environ/MICROSOFT_FOUNDRY_API_BASE
108
+ # api_key: os.environ/MICROSOFT_FOUNDRY_API_KEY
109
+ # timeout: 300
110
+ # drop_params: true
111
+ # extra_body:
112
+ # stream_options:
113
+ # include_usage: true
114
+ # model_info:
115
+ # id: "azure-gpt-5-4-nano"
116
+ # db_model: false
117
+ # supports_reasoning: true
118
+ # mode: chat
119
+ # context_window: 400000
120
+ # max_tokens: 400000
121
+ # max_input_tokens: 272000
122
+ # max_output_tokens: 128000
123
+ # limit:
124
+ # context: 400000
125
+ # output: 128000
126
+ # supports_system_messages: true
127
+ # supports_native_streaming: true
128
+ # supports_vision: true
129
+ # input_cost_per_token: 0.00000080
130
+ # cached_input_cost_per_token: 0.00000008
131
+ # output_cost_per_token: 0.00001250
132
+ # supported_openai_params:
133
+ # - tools
134
+ # - tool_choice
135
+ # - response_format
136
+ # - max_tokens
137
+ # - max_completion_tokens
138
+ # - stream
139
+ # - stream_options
140
+ # - temperature
141
+ # - top_p
142
+ # - stop
143
+ # - presence_penalty
144
+ # - frequency_penalty
145
+ # - logit_bias
146
+ # - logprobs
147
+ # - top_logprobs
148
+ # - reasoning_effort
@@ -19,11 +19,11 @@
19
19
  # api_base: os.environ/LOCAL_M_BASE_URL
20
20
  # api_key: os.environ/LOCAL_M_API_KEY
21
21
  # timeout: 300
22
-
22
+ #
23
23
  # include_reasoning: true
24
24
  # max_tokens: 131072
25
25
  # max_completion_tokens: 16384
26
-
26
+ #
27
27
  # extra_body:
28
28
  # seed: 42
29
29
  # temperature: 0.0
@@ -38,7 +38,7 @@
38
38
  # chat_template_kwargs:
39
39
  # enable_thinking: true
40
40
  # preserve_thinking: false
41
-
41
+ #
42
42
  # model_info: &local_model_info
43
43
  # id: "local-qwen3.6-27b"
44
44
  # db_model: false
@@ -68,7 +68,7 @@
68
68
  # - stop
69
69
  # - thinking
70
70
  # - reasoning_effort
71
-
71
+ #
72
72
  # # ── CodeFreedom/Air alias maps here ──────────────────────────────────────
73
73
  # # Fast, large-context model on port 8001
74
74
  # - model_name: DGX/Qwen3.6-35B-A3B
@@ -79,7 +79,7 @@
79
79
  # api_key: os.environ/LOCAL_S_API_KEY
80
80
  # max_tokens: 262144
81
81
  # max_completion_tokens: 16384
82
-
82
+ #
83
83
  # extra_body:
84
84
  # seed: 42
85
85
  # temperature: 0.0
@@ -94,14 +94,7 @@
94
94
  # chat_template_kwargs:
95
95
  # enable_thinking: true
96
96
  # preserve_thinking: false
97
-
97
+ #
98
98
  # model_info:
99
99
  # <<: *local_model_info
100
100
  # id: "local-qwen3.6-35b-a3b"
101
- # supports_vision: true
102
- # context_window: 262144
103
- # max_tokens: 262144
104
- # max_input_tokens: 245760
105
- # limit:
106
- # context: 262144
107
- # output: 16384
@@ -5,6 +5,7 @@
5
5
  # ──────────────────────────────────────────────────────────────────────────────
6
6
 
7
7
  # model_list:
8
+ # # https://build.nvidia.com/deepseek-ai/deepseek-v4-flash/modelcard
8
9
  # - model_name: NVIDIA/DeepSeek-V4-Flash
9
10
  # litellm_params:
10
11
  # model: openai/deepseek-ai/deepseek-v4-flash
@@ -16,9 +17,9 @@
16
17
  # stream_options:
17
18
  # include_usage: true
18
19
  # model_info:
19
- # id: "nvidia-openai-deepseek-v4-flash"
20
+ # id: "nvidia-deepseek-v4-flash"
20
21
  # db_model: false
21
- # supports_reasoning: false
22
+ # supports_reasoning: true
22
23
  # mode: chat
23
24
  # context_window: 1000000
24
25
  # max_tokens: 1000000
@@ -42,10 +43,41 @@
42
43
  # - temperature
43
44
  # - top_p
44
45
  # - stop
46
+ # - thinking
47
+ # - reasoning_effort
48
+ #
49
+ # # https://build.nvidia.com/deepseek-ai/deepseek-v4-pro/modelcard
50
+ # - model_name: NVIDIA/DeepSeek-V4-Pro
51
+ # litellm_params:
52
+ # model: openai/deepseek-ai/deepseek-v4-pro
53
+ # api_base: os.environ/NVIDIA_BASE_URL
54
+ # api_key: os.environ/NVIDIA_API_KEY
55
+ # timeout: 300
56
+ # drop_params: true
57
+ # extra_body:
58
+ # stream_options:
59
+ # include_usage: true
60
+ # model_info:
61
+ # id: "nvidia-deepseek-v4-pro"
62
+ # db_model: false
63
+ # supports_reasoning: true
64
+ # mode: chat
65
+ # context_window: 1000000
66
+ # max_tokens: 1000000
67
+ # max_input_tokens: 616000
68
+ # max_output_tokens: 384000
69
+ # limit:
70
+ # context: 1000000
71
+ # output: 384000
72
+ # supports_system_messages: true
73
+ # supports_native_streaming: true
74
+ # supports_vision: false
75
+ # supported_openai_params: *nvidia_supported_openai_params
45
76
  #
46
- # - model_name: NVIDIA/MiniMax-M2.7
77
+ # # https://build.nvidia.com/z-ai/glm-5.1/modelcard
78
+ # - model_name: NVIDIA/GLM-5.1
47
79
  # litellm_params:
48
- # model: openai/minimaxai/minimax-m2.7
80
+ # model: openai/z-ai/glm-5.1
49
81
  # api_base: os.environ/NVIDIA_BASE_URL
50
82
  # api_key: os.environ/NVIDIA_API_KEY
51
83
  # timeout: 300
@@ -57,7 +89,7 @@
57
89
  # stream_options:
58
90
  # include_usage: true
59
91
  # model_info:
60
- # id: "nvidia-openai-minimax-m2-7"
92
+ # id: "nvidia-glm-5-1"
61
93
  # db_model: false
62
94
  # supports_reasoning: true
63
95
  # mode: chat
@@ -73,6 +105,7 @@
73
105
  # supports_vision: false
74
106
  # supported_openai_params: *nvidia_supported_openai_params
75
107
  #
108
+ # # https://build.nvidia.com/moonshotai/kimi-k2.6/modelcard
76
109
  # - model_name: NVIDIA/Kimi-K2.6
77
110
  # litellm_params:
78
111
  # model: openai/moonshotai/kimi-k2.6
@@ -101,6 +134,31 @@
101
134
  # supports_native_streaming: true
102
135
  # supports_vision: true
103
136
  # supported_openai_params: *nvidia_supported_openai_params
137
+ #
138
+ # # https://build.nvidia.com/stepfun-ai/step-3.7-flash/modelcard
139
+ # - model_name: NVIDIA/Step-3.7-Flash
140
+ # litellm_params:
141
+ # model: stepfun-ai/step-3.7-flash
142
+ # api_base: os.environ/NVIDIA_BASE_URL
143
+ # api_key: os.environ/NVIDIA_API_KEY
144
+ # timeout: 300
145
+ # drop_params: true
146
+ # extra_body:
147
+ # stream_options:
148
+ # include_usage: true
149
+ # model_info:
150
+ # id: "nvidia-step-3-7-flash"
151
+ # db_model: false
152
+ # supports_reasoning: true
153
+ # mode: chat
154
+ # context_window: 262144
155
+ # max_tokens: 262144
156
+ # max_input_tokens: 245760
157
+ # max_output_tokens: 16384
158
+ # limit:
159
+ # context: 262144
160
+ # output: 16384
161
+ # supports_system_messages: true
104
162
  # supports_native_streaming: true
105
163
  # supports_vision: true
106
164
  # supported_openai_params: *nvidia_supported_openai_params
@@ -0,0 +1,158 @@
1
+ ---
2
+ # ── OpenCode Zen Provider ────────────────────────────────────────────────────
3
+ # Free-tier models from OpenCode Zen.
4
+ # Set OPENCODE_ZEN_API_KEY to enable.
5
+ # ──────────────────────────────────────────────────────────────────────────────
6
+
7
+ # model_list:
8
+ # # https://models.dev/models/xiaomi/mimo-v2.5
9
+ # # MiMo V2.5 — Xiaomi, 1M context, 131K output
10
+ # # Capabilities: reasoning, tools, temperature
11
+ # # Vision: YES — models.dev shows Image icon (data-tooltip="Image")
12
+ # - model_name: OpenCodeZen/MiMo-V2.5-FREE
13
+ # litellm_params: &opencode_zen_openai_params
14
+ # model: openai/mimo-v2.5-free
15
+ # api_base: os.environ/OPENCODE_ZEN_BASE_URL
16
+ # api_key: os.environ/OPENCODE_ZEN_API_KEY
17
+ # timeout: 300
18
+ # drop_params: true
19
+ # stream_options:
20
+ # include_usage: true
21
+ # extra_body:
22
+ # temperature: 0.0
23
+ # top_p: 1.0
24
+ # reasoning_effort: "high"
25
+ #
26
+ # model_info: &opencode_zen_openai_model_info
27
+ # id: "opencode-mimo-v2.5-free"
28
+ # db_model: false
29
+ # supports_reasoning: true
30
+ # mode: chat
31
+ # supports_system_messages: true
32
+ # supports_native_streaming: true
33
+ # supports_vision: true
34
+ # context_window: 1048576
35
+ # max_tokens: 1048576
36
+ # max_input_tokens: 917504
37
+ # max_output_tokens: 131072
38
+ # limit:
39
+ # context: 1048576
40
+ # output: 131072
41
+ # supported_openai_params:
42
+ # - tools
43
+ # - tool_choice
44
+ # - parallel_tool_calls
45
+ # - max_tokens
46
+ # - max_completion_tokens
47
+ # - stream
48
+ # - stream_options
49
+ # - temperature
50
+ # - top_p
51
+ # - stop
52
+ # - thinking
53
+ # - reasoning_effort
54
+ # - response_format
55
+ #
56
+ # # Nemotron-3-Super — NVIDIA-backed, strong coding
57
+ # # Spec not independently verified on models.dev; using conservative defaults
58
+ # # based on Nemotron-3-Ultra specs (same family).
59
+ # # Vision: NO — Nemotron models are text-only (no vision on models.dev)
60
+ # - model_name: OpenCodeZen/Nemotron-3-Super-FREE
61
+ # litellm_params:
62
+ # <<: *opencode_zen_openai_params
63
+ # model: openai/nemotron-3-super-free
64
+ # model_info:
65
+ # <<: *opencode_zen_openai_model_info
66
+ # id: "opencode-nemotron-3-super-free"
67
+ # supports_vision: false
68
+ # # Conservative: same as Ultra but smaller
69
+ # context_window: 262144
70
+ # max_tokens: 262144
71
+ # max_input_tokens: 131072
72
+ # max_output_tokens: 65536
73
+ # limit:
74
+ # context: 262144
75
+ # output: 65536
76
+ #
77
+ # # https://models.dev/models/nvidia/nemotron-3-ultra-550b-a55b
78
+ # # Nemotron-3-Ultra — NVIDIA, 1M context, 128K output
79
+ # # Capabilities: reasoning, tools, temperature
80
+ # # Vision: YES — models.dev shows Image icon (data-tooltip="Image")
81
+ # - model_name: OpenCodeZen/Nemotron-3-Ultra-FREE
82
+ # litellm_params:
83
+ # <<: *opencode_zen_openai_params
84
+ # model: openai/nemotron-3-ultra-free
85
+ # model_info:
86
+ # <<: *opencode_zen_openai_model_info
87
+ # id: "opencode-nemotron-3-ultra-free"
88
+ # supports_vision: true
89
+ # context_window: 1048576
90
+ # max_tokens: 1048576
91
+ # max_input_tokens: 917504
92
+ # max_output_tokens: 131072
93
+ # limit:
94
+ # context: 1048576
95
+ # output: 131072
96
+ #
97
+ # # https://models.dev/models/deepseek/deepseek-v4-flash
98
+ # # DeepSeek V4-Flash — 1M context, 384K output
99
+ # # Capabilities: reasoning, tools, thinking, temperature
100
+ # # Vision: NO — models.dev shows no Image icon
101
+ # - model_name: OpenCodeZen/DeepSeek-V4-Flash-FREE
102
+ # litellm_params:
103
+ # <<: *opencode_zen_openai_params
104
+ # model: openai/deepseek-v4-flash-free
105
+ # model_info:
106
+ # <<: *opencode_zen_openai_model_info
107
+ # id: "opencode-deepseek-v4-flash-free"
108
+ # supports_vision: false
109
+ # context_window: 1000000
110
+ # max_tokens: 1000000
111
+ # max_input_tokens: 616000
112
+ # max_output_tokens: 384000
113
+ # limit:
114
+ # context: 1000000
115
+ # output: 384000
116
+ #
117
+ # # Big Pickle — general purpose, reasoning + tools
118
+ # # Spec not independently verified on models.dev; using conservative defaults
119
+ # # Vision: NO — text-only model (no vision data found)
120
+ # - model_name: OpenCodeZen/Big-Pickle
121
+ # litellm_params:
122
+ # <<: *opencode_zen_openai_params
123
+ # model: openai/big-pickle
124
+ # model_info:
125
+ # <<: *opencode_zen_openai_model_info
126
+ # id: "opencode-big-pickle"
127
+ # supports_vision: false
128
+ # # Conservative: similar to mid-tier models
129
+ # context_window: 262144
130
+ # max_tokens: 262144
131
+ # max_input_tokens: 131072
132
+ # max_output_tokens: 65536
133
+ # limit:
134
+ # context: 262144
135
+ # output: 65536
136
+ #
137
+ # # https://models.dev/models/minimax/MiniMax-M3
138
+ # # MiniMax-M3 — 512K context, 128K output
139
+ # # Capabilities: reasoning, tools, temperature
140
+ # # Vision: YES — models.dev shows Image icon (data-tooltip="Image")
141
+ # - model_name: OpenCodeZen/Minimax-M3-FREE
142
+ # litellm_params:
143
+ # <<: *opencode_zen_openai_params
144
+ # model: minimax/minimax-m3-free
145
+ # # Add this parameter to enable the internal reasoning parser
146
+ # drop_params: false
147
+ # modify_params: true
148
+ # model_info:
149
+ # <<: *opencode_zen_openai_model_info
150
+ # id: "opencode-minimax-m3-free"
151
+ # supports_vision: true
152
+ # context_window: 512000
153
+ # max_tokens: 512000
154
+ # max_input_tokens: 384000
155
+ # max_output_tokens: 128000
156
+ # limit:
157
+ # context: 512000
158
+ # output: 128000
@@ -29,7 +29,7 @@
29
29
  # extra_body:
30
30
  # stream_options:
31
31
  # include_usage: true
32
-
32
+ #
33
33
  # model_info: &openrouter_model_info
34
34
  # id: "openrouter-nemotron-3-ultra-550b-a55b"
35
35
  # mode: chat
@@ -49,12 +49,12 @@
49
49
  # - top_p
50
50
  # - stop
51
51
  # - reasoning_effort
52
-
52
+ #
53
53
  # - model_name: OpenRouter/FreeRouter
54
54
  # litellm_params:
55
55
  # <<: *openrouter_params
56
56
  # model: openrouter/openrouter/free
57
-
57
+ #
58
58
  # model_info:
59
59
  # <<: *openrouter_model_info
60
60
  # id: "openrouter-freerouter"
@@ -101,6 +101,9 @@ services:
101
101
  # OpenCode Zen — leave API_KEY empty to disable
102
102
  OPENCODE_ZEN_BASE_URL: ${OPENCODE_ZEN_BASE_URL:-https://opencode.ai/zen/v1}
103
103
  OPENCODE_ZEN_API_KEY: ${OPENCODE_ZEN_API_KEY:-}
104
+ # OpenRouter — leave API_KEY empty to disable
105
+ OPENROUTER_BASE_URL: ${OPENROUTER_BASE_URL:-https://openrouter.ai/api/v1}
106
+ OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
104
107
 
105
108
  # ── Compatible endpoints (bring your own) ──────────────────────────
106
109
  # Uncomment and set in .env / .env.secrets to use.
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+ # Patch LiteLLM's websearch_interception handler to report proper search count,
3
+ # then start LiteLLM with the passed arguments.
4
+ #
5
+ # Usage (from docker-compose):
6
+ # command: ["/app/patch_websearch_count.sh", "--config", "/app/litellm-config/config.yaml", ...]
7
+
8
+ set -e
9
+
10
+ echo "[startup] Patching websearch count..."
11
+ python3 /app/patch_websearch_count.py
12
+
13
+ echo "[startup] Starting LiteLLM..."
14
+ exec /app/.venv/bin/litellm "$@"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codefreedom
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Unified CLI for code agents — LLM proxy routing, Docker sandboxing, profile management, and browser tools. All config in ~/.codefreedom.
5
5
  Author-email: Nilay Parikh <nilay.parikh@gmail.com>
6
6
  License: Apache-2.0
@@ -35,6 +35,7 @@ src/codefreedom/examples/proxy/.env.proxy.example
35
35
  src/codefreedom/examples/proxy/.env.proxy.secrets.example
36
36
  src/codefreedom/examples/proxy/docker-compose.yaml
37
37
  src/codefreedom/examples/proxy/patch_websearch_count.py
38
+ src/codefreedom/examples/proxy/patch_websearch_count.sh
38
39
  src/codefreedom/examples/proxy/config/config.yaml
39
40
  src/codefreedom/examples/proxy/config/providers/anthropic-compatible.yaml
40
41
  src/codefreedom/examples/proxy/config/providers/azure-foundry.yaml
@@ -1,101 +0,0 @@
1
- ---
2
- # ── Microsoft Foundry (Azure) Provider ────────────────────────────────────────
3
- # Routes to Azure AI Foundry / Azure OpenAI deployments.
4
- # Set MICROSOFT_FOUNDRY_API_BASE and MICROSOFT_FOUNDRY_API_KEY to enable.
5
- # ──────────────────────────────────────────────────────────────────────────────
6
-
7
- # model_list:
8
- # - model_name: Azure/Kimi-K2.6
9
- # litellm_params:
10
- # model: openai/FW-Kimi-K2.6
11
- # api_base: os.environ/MICROSOFT_FOUNDRY_API_BASE
12
- # api_key: os.environ/MICROSOFT_FOUNDRY_API_KEY
13
- # timeout: 300
14
- # drop_params: true
15
- # extra_body:
16
- # stream_options:
17
- # include_usage: true
18
- # model_info:
19
- # id: "azure-kimi-k2-6"
20
- # db_model: false
21
- # supports_reasoning: true
22
- # mode: chat
23
- # context_window: 262144
24
- # max_tokens: 262144
25
- # max_input_tokens: 245760
26
- # max_output_tokens: 16384
27
- # limit:
28
- # context: 262144
29
- # output: 16384
30
- # supports_system_messages: true
31
- # supports_native_streaming: true
32
- # supports_vision: true
33
- # input_cost_per_token: 0.00000095
34
- # output_cost_per_token: 0.00000400
35
- # supported_openai_params: &azure_supported_openai_params
36
- # - tools
37
- # - tool_choice
38
- # - parallel_tool_calls
39
- # - response_format
40
- # - max_tokens
41
- # - max_completion_tokens
42
- # - stream
43
- # - stream_options
44
- # - temperature
45
- # - top_p
46
- # - stop
47
- # - reasoning_effort
48
- #
49
- # - model_name: Azure/GLM-5.1
50
- # litellm_params:
51
- # model: openai/FW-GLM-5.1
52
- # api_base: os.environ/MICROSOFT_FOUNDRY_API_BASE
53
- # api_key: os.environ/MICROSOFT_FOUNDRY_API_KEY
54
- # timeout: 300
55
- # drop_params: true
56
- # extra_body:
57
- # stream_options:
58
- # include_usage: true
59
- # model_info:
60
- # id: "azure-glm-5-1"
61
- # db_model: false
62
- # supports_reasoning: true
63
- # mode: chat
64
- # context_window: 202752
65
- # max_tokens: 202752
66
- # max_input_tokens: 186368
67
- # max_output_tokens: 16384
68
- # limit:
69
- # context: 202752
70
- # output: 16384
71
- # supports_system_messages: true
72
- # supports_native_streaming: true
73
- # supports_vision: false
74
- # supported_openai_params: *azure_supported_openai_params
75
- #
76
- # - model_name: Azure/DeepSeek-V4-Pro
77
- # litellm_params:
78
- # model: openai/FW-DeepSeek-V4-Pro
79
- # api_base: os.environ/MICROSOFT_FOUNDRY_API_BASE
80
- # api_key: os.environ/MICROSOFT_FOUNDRY_API_KEY
81
- # timeout: 300
82
- # drop_params: true
83
- # extra_body:
84
- # stream_options:
85
- # include_usage: true
86
- # model_info:
87
- # id: "azure-deepseek-v4-pro"
88
- # db_model: false
89
- # supports_reasoning: true
90
- # mode: chat
91
- # context_window: 1000000
92
- # max_tokens: 1000000
93
- # max_input_tokens: 616000
94
- # max_output_tokens: 384000
95
- # limit:
96
- # context: 1000000
97
- # output: 384000
98
- # supports_system_messages: true
99
- # supports_native_streaming: true
100
- # supports_vision: false
101
- # supported_openai_params: *azure_supported_openai_params
@@ -1,84 +0,0 @@
1
- ---
2
- # ── OpenCode Zen Provider ────────────────────────────────────────────────────
3
- # Free-tier models from OpenCode Zen.
4
- # Set OPENCODE_ZEN_API_KEY to enable.
5
- # ──────────────────────────────────────────────────────────────────────────────
6
-
7
- # model_list:
8
- # - model_name: OpenCodeZen/Mimo-V2.5-FREE
9
- # litellm_params: &opencode_zen_openai_params
10
- # model: openai/mimo-v2.5-free
11
- # api_base: os.environ/OPENCODE_ZEN_BASE_URL
12
- # api_key: os.environ/OPENCODE_ZEN_API_KEY
13
- # timeout: 300
14
- # max_tokens: 200000
15
- # max_completion_tokens: 20000
16
- # drop_params: true
17
- # stream_options:
18
- # include_usage: true
19
- # extra_body:
20
- # temperature: 0.0
21
- # top_p: 1.0
22
- # reasoning_effort: "high"
23
-
24
- # model_info: &opencode_zen_openai_model_info
25
- # id: "opencode-mimo-v2.5-free"
26
- # db_model: false
27
- # supports_reasoning: true
28
- # mode: chat
29
- # context_window: 200000
30
- # max_tokens: 200000
31
- # max_input_tokens: 180000
32
- # max_output_tokens: 20000
33
- # supports_system_messages: true
34
- # supports_native_streaming: true
35
- # supports_vision: false
36
- # supported_openai_params:
37
- # - max_tokens
38
- # - max_completion_tokens
39
- # - stream
40
- # - stream_options
41
- # - temperature
42
- # - top_p
43
- # - stop
44
- #
45
- # - model_name: OpenCodeZen/Nemotron-3-Super-FREE
46
- # litellm_params:
47
- # <<: *opencode_zen_openai_params
48
- # model: openai/nemotron-3-super-free
49
- # max_tokens: 205000
50
- # max_completion_tokens: 20000
51
- # model_info:
52
- # <<: *opencode_zen_openai_model_info
53
- # id: "opencode-nemotron-3-super-free"
54
- # context_window: 205000
55
- # max_tokens: 205000
56
- # max_input_tokens: 185000
57
- #
58
- # - model_name: OpenCodeZen/DeepSeek-V4-Flash-FREE
59
- # litellm_params:
60
- # <<: *opencode_zen_openai_params
61
- # model: openai/deepseek-v4-flash-free
62
- # max_tokens: 200000
63
- # max_completion_tokens: 20000
64
- # model_info:
65
- # <<: *opencode_zen_openai_model_info
66
- # id: "opencode-deepseek-v4-flash-free"
67
- # context_window: 200000
68
- # max_tokens: 200000
69
- # max_input_tokens: 180000
70
- # max_output_tokens: 20000
71
- #
72
- # - model_name: OpenCodeZen/Big-Pickle
73
- # litellm_params:
74
- # <<: *opencode_zen_openai_params
75
- # model: openai/big-pickle
76
- # max_tokens: 200000
77
- # max_completion_tokens: 20000
78
- # model_info:
79
- # <<: *opencode_zen_openai_model_info
80
- # id: "opencode-big-pickle"
81
- # context_window: 200000
82
- # max_tokens: 200000
83
- # max_input_tokens: 180000
84
- # max_output_tokens: 20000
File without changes
File without changes
File without changes
File without changes