Skip to content

Commit 5560bdf

Browse files
committed
feat: add support for Poe and Longcat API endpoints
1 parent 1561e40 commit 5560bdf

File tree

1 file changed

+53
-14
lines changed

1 file changed

+53
-14
lines changed

ask

Lines changed: 53 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55

66
set -euo pipefail
77

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=""
1311

1412
# Model shortcuts function
1513
get_model() {
@@ -63,6 +61,8 @@ Options:
6361
--stream Enable streaming output
6462
--system Set system prompt for the conversation
6563
--provider Comma-separated list of providers for routing
64+
--poe Use Poe API endpoint
65+
--longcat Use Longcat API endpoint
6666
-h, --help Show this help message
6767
6868
Examples:
@@ -96,8 +96,18 @@ while [ $# -gt 0 ]; do
9696
SYSTEM_PROMPT="${2:?Error: --system requires a prompt}"
9797
shift 2 ;;
9898
--provider)
99+
if [ "$SERVICE" != "openrouter" ]; then
100+
echo "Warning: --provider is only supported for OpenRouter" >&2
101+
fi
99102
PROVIDER_ORDER="${2:?Error: --provider requires providers}"
100103
shift 2 ;;
104+
--poe)
105+
SERVICE="poe"
106+
shift ;;
107+
--longcat)
108+
SERVICE="longcat"
109+
MODEL="LongCat-Flash-Chat"
110+
shift ;;
101111
*)
102112
PROMPT="$*"
103113
break ;;
@@ -114,6 +124,28 @@ if [ -z "$PROMPT" ]; then
114124
PROMPT=$(cat)
115125
fi
116126

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+
117149
# Apply default system prompt unless disabled or custom prompt provided
118150
if [ "$NO_SYSTEM" = false ] && [ -z "$SYSTEM_PROMPT" ]; then
119151
SYSTEM_PROMPT="$DEFAULT_PROMPT"
@@ -129,20 +161,19 @@ fi
129161
# Record start time
130162
START_TIME=$(date +%s.%N)
131163

132-
# Build JSON payload once
164+
# Build JSON payload - provider order only for OpenRouter
133165
PROVIDER_JSON=""
134-
if [ -n "$PROVIDER_ORDER" ]; then
166+
if [ "$SERVICE" = "openrouter" ] && [ -n "$PROVIDER_ORDER" ]; then
135167
PROVIDER_JSON=',"provider":{"order":['$(echo "$PROVIDER_ORDER" | awk -F, '{for(i=1;i<=NF;i++) printf "\"%s\"%s", $i, (i<NF?",":"")}')']}'
136168
fi
137169

170+
# Build JSON payload
138171
JSON_PAYLOAD='{
139172
"model": "'"$MODEL"'",
140173
"messages": '"$MESSAGES"',
141174
"stream": '$([ "$STREAMING" = true ] && echo true || echo false)"$PROVIDER_JSON"'
142175
}'
143176

144-
API_URL="https://openrouter.ai/api/v1/chat/completions"
145-
146177
# Add newline before answer
147178
echo
148179

@@ -151,7 +182,7 @@ if [ "$STREAMING" = true ]; then
151182
# Streaming mode
152183
curl -sS "$API_URL" \
153184
-H "Content-Type: application/json" \
154-
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
185+
-H "Authorization: Bearer $API_KEY" \
155186
-d "$JSON_PAYLOAD" 2>&1 | while IFS= read -r line; do
156187
# Check for errors
157188
if echo "$line" | grep -q '"error"'; then
@@ -173,12 +204,12 @@ if [ "$STREAMING" = true ]; then
173204
# Show metadata
174205
ELAPSED=$(printf "%.2f" $(echo "$(date +%s.%N) - $START_TIME" | bc))
175206
echo
176-
echo "[$MODEL - ${ELAPSED}s]" >&2
207+
echo "[$MODEL via $PROVIDER_NAME - ${ELAPSED}s]" >&2
177208
else
178209
# Non-streaming mode
179210
response=$(curl -sS "$API_URL" \
180211
-H "Content-Type: application/json" \
181-
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
212+
-H "Authorization: Bearer $API_KEY" \
182213
-d "$JSON_PAYLOAD" 2>&1)
183214

184215
# Check for errors
@@ -193,8 +224,16 @@ else
193224
# Show metadata
194225
ELAPSED=$(printf "%.2f" $(echo "$(date +%s.%N) - $START_TIME" | bc))
195226
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
198237

199238
echo
200239
echo "[$MODEL via $PROVIDER - ${ELAPSED}s - ${TPS} tok/s]" >&2

0 commit comments

Comments
 (0)