
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
argo-proxy
Advanced tools
This project is a proxy application that forwards requests to an ARGO API and optionally converts the responses to be compatible with OpenAI's API format. It can be used in conjunction with autossh-tunnel-dockerized or other secure connection tools.
For detailed information, please refer to documentation at argo-proxy ReadtheDocs page
pip install argo-proxy # install the package
argo-proxy # run the proxy
Function calling is available for Chat Completions endpoint starting from v2.7.5.
Try with pip install "argo-proxy>=2.7.5"
Now all models have native function calling in standard mode. (Gemini native function calling support added in v2.8.0.)
The machine or server making API calls to Argo must be connected to the Argonne internal network or through a VPN on an Argonne-managed computer if you are working off-site. Your instance of the argo proxy should always be on-premise at an Argonne machine. The software is provided "as is," without any warranties. By using this software, you accept that the authors, contributors, and affiliated organizations will not be liable for any damages or issues arising from its use. You are solely responsible for ensuring the software meets your requirements.
Python 3.10+ is required.
It is recommended to use conda, mamba, or pipx, etc., to manage an exclusive environment.
Conda/Mamba Download and install from: https://conda-forge.org/download/
pipx Download and install from: https://pipx.pypa.io/stable/installation/
Install dependencies:
PyPI current version:
pip install argo-proxy
To upgrade:
argo-proxy --version # Display current version
# Check against PyPI version
pip install argo-proxy --upgrade
or, if you decide to use dev version (make sure you are at the root of the repo cloned):
pip install .
If you don't want to manually configure it, the First-Time Setup will automatically create it for you.
The application uses config.yaml for configuration. Here's an example:
argo_embedding_url: "https://apps.inside.anl.gov/argoapi/api/v1/resource/embed/"
argo_stream_url: "https://apps-dev.inside.anl.gov/argoapi/api/v1/resource/streamchat/"
argo_url: "https://apps-dev.inside.anl.gov/argoapi/api/v1/resource/chat/"
port: 44497
host: 0.0.0.0
user: "your_username" # set during first-time setup
verbose: true # can be changed during setup
To start the application:
argo-proxy [config_path]
Without arguments: search for config.yaml under:
~/.config/argoproxy/~/.argoproxy/
The first one found will be used.With path: uses specified config file, if exists. Otherwise, falls back to default search.
argo-proxy /path/to/config.yaml
With --edit flag: opens the config file in the default editor for modification.
When running without an existing config file:
config.yaml from config.sample.yamluser field)verbose field)Example session:
$ argo-proxy
No valid configuration found.
Would you like to create it from config.sample.yaml? [Y/n]:
Creating new configuration...
Use port [52226]? [Y/n/<port>]:
Enter your username: your_username
Enable verbose mode? [Y/n]
Created new configuration at: /home/your_username/.config/argoproxy/config.yaml
Using port 52226...
Validating URL connectivity...
Current configuration:
--------------------------------------
{
"host": "0.0.0.0",
"port": 52226,
"user": "your_username",
"argo_url": "https://apps-dev.inside.anl.gov/argoapi/api/v1/resource/chat/",
"argo_stream_url": "https://apps-dev.inside.anl.gov/argoapi/api/v1/resource/streamchat/",
"argo_embedding_url": "https://apps.inside.anl.gov/argoapi/api/v1/resource/embed/",
"verbose": true
}
--------------------------------------
# ... proxy server starting info display ...
| Option | Description | Default |
|---|---|---|
argo_embedding_url | Argo Embedding API URL | Prod URL |
argo_stream_url | Argo Stream API URL | Dev URL (for now) |
argo_url | Argo Chat API URL | Dev URL (for now) |
host | Host address to bind the server to | 0.0.0.0 |
port | Application port (random available port selected by default) | randomly assigned |
user | Your username | (Set during setup) |
verbose | Debug logging | true |
real_stream | Enable real streaming mode (default since v2.7.7) | true |
Argo Proxy supports two streaming modes for chat completions:
real_stream: true or omitted in config)real_stream: false in config file or use --pseudo-stream CLI flagVia config file:
# Enable real streaming (experimental)
real_stream: true
# Or explicitly use pseudo streaming (default)
real_stream: false
Via CLI flag:
# Use default real streaming (since v2.7.7)
argo-proxy
# Enable legacy pseudo streaming
argo-proxy --pseudo-stream
When using function calling (tool calls):
--tool-prompting flagargo-proxy CLI Available Options$ argo-proxy -h
usage: argo-proxy [-h] [--host HOST] [--port PORT] [--verbose | --quiet]
[--real-stream | --pseudo-stream] [--tool-prompting]
[--edit] [--validate] [--show] [--version]
[config]
Argo Proxy CLI
positional arguments:
config Path to the configuration file
options:
-h, --help show this help message and exit
--host HOST, -H HOST Host address to bind the server to
--port PORT, -p PORT Port number to bind the server to
--verbose, -v Enable verbose logging, override if `verbose` set False in config
--quiet, -q Disable verbose logging, override if `verbose` set True in config
--real-stream, -rs Enable real streaming (default behavior), override if `real_stream` set False in config
--pseudo-stream, -ps Enable pseudo streaming, override if `real_stream` set True or omitted in config
--tool-prompting Enable prompting-based tool calls/function calling, otherwise use native tool calls/function calling
--edit, -e Open the configuration file in the system's default editor for editing
--validate, -vv Validate the configuration file and exit
--show, -s Show the current configuration during launch
--version, -V Show the version and check for updates
The following options help manage the configuration file:
--edit, -e: Open the configuration file in the system's default editor for editing.
--validate, -vv: Validate the configuration file and exit without starting the server.
--show, -s: Show the current configuration during launch.
--validate to just display configuration without starting the server# Example usage:
argo-proxy --edit # Edit config file
argo-proxy --validate --show # Validate and display config
argo-proxy --show # Show config at startup
These endpoints convert responses from the ARGO API to be compatible with OpenAI's format:
/v1/responses: Available from v2.7.0. Response API./v1/chat/completions: Chat Completions API./v1/completions: Legacy Completions API./v1/embeddings: Embedding API./v1/models: Lists available models in OpenAI-compatible format.These endpoints interact directly with the ARGO API and do not convert responses to OpenAI's format:
/v1/chat: Proxies requests to the ARGO API without conversion./v1/embed: Proxies requests to the ARGO Embedding API without conversion./health: Health check endpoint. Returns 200 OK if the server is running./version: Returns the version of the ArgoProxy server. Notifies if a new version is available. Available from 2.7.0.post1.You can override the default timeout with a timeout parameter in your request. This parameter is optional for client request. Proxy server will keep the connection open until it finishes or client disconnects.
Details of how to make such override in different query flavors: Timeout Override Examples
| Original ARGO Model Name | Argo Proxy Name |
|---|---|
gpt35 | argo:gpt-3.5-turbo |
gpt35large | argo:gpt-3.5-turbo-16k |
gpt4 | argo:gpt-4 |
gpt4large | argo:gpt-4-32k |
gpt4turbo | argo:gpt-4-turbo |
gpt4o | argo:gpt-4o |
gpt4olatest | argo:gpt-4o-latest |
gpto1preview | argo:gpt-o1-preview, argo:o1-preview |
gpto1mini | argo:gpt-o1-mini, argo:o1-mini |
gpto3mini | argo:gpt-o3-mini, argo:o3-mini |
gpto1 | argo:gpt-o1, argo:o1 |
gpto3 | argo:gpt-o3, argo:o3 |
gpto4mini | argo:gpt-o4-mini, argo:o4-mini |
gpt41 | argo:gpt-4.1 |
gpt41mini | argo:gpt-4.1-mini |
gpt41nano | argo:gpt-4.1-nano |
| Original ARGO Model Name | Argo Proxy Name |
|---|---|
gemini25pro | argo:gemini-2.5-pro |
gemini25flash | argo:gemini-2.5-flash |
| Original ARGO Model Name | Argo Proxy Name |
|---|---|
claudeopus4 | argo:claude-opus-4, argo:claude-4-opus |
claudesonnet4 | argo:claude-sonnet-4, argo:claude-4-sonnet |
claudesonnet37 | argo:claude-sonnet-3.7, argo:claude-3.7-sonnet |
claudesonnet35v2 | argo:claude-sonnet-3.5, argo:claude-3.5-sonnet |
| Original ARGO Model Name | Argo Proxy Name |
|---|---|
ada002 | argo:text-embedding-ada-002 |
v3small | argo:text-embedding-3-small |
v3large | argo:text-embedding-3-large |
The tool calls (function calling) interface has been available since version v2.7.5.alpha1, now with native function calling support.
/v1/chat/completions endpoint/v1/chat) and response endpoint (/v1/chat/response) not yet implemented due to limited development time/v1/completions) do not support tool callingFor more usage details, refer to the OpenAI documentation.
A lightweight yet powerful Python helper library is available for various tool handling: ToolRegistry. It works with any OpenAI-compatible API, including Argo Proxy starting from version v2.7.5.alpha1.
For examples of how to use the raw request utilities (e.g., httpx, requests), refer to:
For examples demonstrating the use case of the OpenAI client (openai.OpenAI), refer to:
This project is developed in my spare time. Bugs and issues may exist. If you encounter any or have suggestions for improvements, please open an issue or submit a pull request. Your contributions are highly appreciated!
FAQs
Proxy server to Argo API, OpenAI format compatible
We found that argo-proxy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.