5
5
6
6
set -euo pipefail
7
7
8
- # Check for API key
9
- if [ -z " ${OPENROUTER_API_KEY:- } " ]; then
10
- echo " Error: OPENROUTER_API_KEY environment variable is not set" >&2
11
- exit 1
12
- fi
8
+ SERVICE=" openrouter"
9
+ API_KEY=" "
10
+ PROVIDER_NAME=" "
13
11
14
12
# Model shortcuts function
15
13
get_model () {
@@ -63,6 +61,8 @@ Options:
63
61
--stream Enable streaming output
64
62
--system Set system prompt for the conversation
65
63
--provider Comma-separated list of providers for routing
64
+ --poe Use Poe API endpoint
65
+ --longcat Use Longcat API endpoint
66
66
-h, --help Show this help message
67
67
68
68
Examples:
@@ -96,8 +96,18 @@ while [ $# -gt 0 ]; do
96
96
SYSTEM_PROMPT=" ${2:? Error: --system requires a prompt} "
97
97
shift 2 ;;
98
98
--provider)
99
+ if [ " $SERVICE " != " openrouter" ]; then
100
+ echo " Warning: --provider is only supported for OpenRouter" >&2
101
+ fi
99
102
PROVIDER_ORDER=" ${2:? Error: --provider requires providers} "
100
103
shift 2 ;;
104
+ --poe)
105
+ SERVICE=" poe"
106
+ shift ;;
107
+ --longcat)
108
+ SERVICE=" longcat"
109
+ MODEL=" LongCat-Flash-Chat"
110
+ shift ;;
101
111
* )
102
112
PROMPT=" $* "
103
113
break ;;
@@ -114,6 +124,28 @@ if [ -z "$PROMPT" ]; then
114
124
PROMPT=$( cat)
115
125
fi
116
126
127
+ # Check for API key and set API URL based on service
128
+ if [ " $SERVICE " = " openrouter" ]; then
129
+ if [ -z " ${OPENROUTER_API_KEY:- } " ]; then
130
+ echo " Error: OPENROUTER_API_KEY environment variable is not set" >&2
131
+ exit 1
132
+ fi
133
+ API_KEY=" $OPENROUTER_API_KEY "
134
+ PROVIDER_NAME=" OpenRouter"
135
+ API_URL=" https://openrouter.ai/api/v1/chat/completions"
136
+ elif [ " $SERVICE " = " poe" ]; then
137
+ API_KEY=" ${POE_API_KEY:? } "
138
+ PROVIDER_NAME=" Poe"
139
+ API_URL=" https://api.poe.com/v1/chat/completions"
140
+ elif [ " $SERVICE " = " longcat" ]; then
141
+ API_KEY=" ${LONGCAT_API_KEY:? } " || exit
142
+ PROVIDER_NAME=" Longcat"
143
+ API_URL=" https://api.longcat.chat/openai/v1/chat/completions"
144
+ else
145
+ echo " Error: Unknown service $SERVICE " >&2
146
+ exit 1
147
+ fi
148
+
117
149
# Apply default system prompt unless disabled or custom prompt provided
118
150
if [ " $NO_SYSTEM " = false ] && [ -z " $SYSTEM_PROMPT " ]; then
119
151
SYSTEM_PROMPT=" $DEFAULT_PROMPT "
129
161
# Record start time
130
162
START_TIME=$( date +%s.%N)
131
163
132
- # Build JSON payload once
164
+ # Build JSON payload - provider order only for OpenRouter
133
165
PROVIDER_JSON=" "
134
- if [ -n " $PROVIDER_ORDER " ]; then
166
+ if [ " $SERVICE " = " openrouter " ] && [ -n " $PROVIDER_ORDER " ]; then
135
167
PROVIDER_JSON=' ,"provider":{"order":[' $( echo " $PROVIDER_ORDER " | awk -F, ' {for(i=1;i<=NF;i++) printf "\"%s\"%s", $i, (i<NF?",":"")}' ) ' ]}'
136
168
fi
137
169
170
+ # Build JSON payload
138
171
JSON_PAYLOAD=' {
139
172
"model": "' " $MODEL " ' ",
140
173
"messages": ' " $MESSAGES " ' ,
141
174
"stream": ' $( [ " $STREAMING " = true ] && echo true || echo false) " $PROVIDER_JSON " '
142
175
}'
143
176
144
- API_URL=" https://openrouter.ai/api/v1/chat/completions"
145
-
146
177
# Add newline before answer
147
178
echo
148
179
@@ -151,7 +182,7 @@ if [ "$STREAMING" = true ]; then
151
182
# Streaming mode
152
183
curl -sS " $API_URL " \
153
184
-H " Content-Type: application/json" \
154
- -H " Authorization: Bearer $OPENROUTER_API_KEY " \
185
+ -H " Authorization: Bearer $API_KEY " \
155
186
-d " $JSON_PAYLOAD " 2>&1 | while IFS= read -r line; do
156
187
# Check for errors
157
188
if echo " $line " | grep -q ' "error"' ; then
@@ -173,12 +204,12 @@ if [ "$STREAMING" = true ]; then
173
204
# Show metadata
174
205
ELAPSED=$( printf " %.2f" $( echo " $( date +%s.%N) - $START_TIME " | bc) )
175
206
echo
176
- echo " [$MODEL - ${ELAPSED} s]" >&2
207
+ echo " [$MODEL via $PROVIDER_NAME - ${ELAPSED} s]" >&2
177
208
else
178
209
# Non-streaming mode
179
210
response=$( curl -sS " $API_URL " \
180
211
-H " Content-Type: application/json" \
181
- -H " Authorization: Bearer $OPENROUTER_API_KEY " \
212
+ -H " Authorization: Bearer $API_KEY " \
182
213
-d " $JSON_PAYLOAD " 2>&1 )
183
214
184
215
# Check for errors
@@ -193,8 +224,16 @@ else
193
224
# Show metadata
194
225
ELAPSED=$( printf " %.2f" $( echo " $( date +%s.%N) - $START_TIME " | bc) )
195
226
TOKENS=$( echo " $response " | jq -r ' .usage.completion_tokens // 0' )
196
- PROVIDER=$( echo " $response " | jq -r ' .provider // "Unknown"' )
197
- TPS=$( echo " scale=1; $TOKENS / $ELAPSED " | bc 2> /dev/null || echo " 0.0" )
227
+ if [ " $SERVICE " = " openrouter" ]; then
228
+ PROVIDER=$( echo " $response " | jq -r ' .provider // "OpenRouter"' )
229
+ else
230
+ PROVIDER=" $PROVIDER_NAME "
231
+ fi
232
+ if [ " $ELAPSED " = " 0.00" ]; then
233
+ TPS=" 0.0"
234
+ else
235
+ TPS=$( echo " scale=1; $TOKENS / $ELAPSED " | bc 2> /dev/null || echo " 0.0" )
236
+ fi
198
237
199
238
echo
200
239
echo " [$MODEL via $PROVIDER - ${ELAPSED} s - ${TPS} tok/s]" >&2
0 commit comments