Tempo API Proxy — Deno版(OpenAI互換ラッパー)

AI/ML

概要

Tempo API Proxy(Deno 版)は、Tempo.build のチャット AI API を OpenAI の Chat Completions API 互換のインターフェースとして提供するプロキシ実装です。特徴は「単一ファイルで動く」こと、外部依存を持たないこと、SSE によるストリーミング出力のサポート、Clerk を使ったセッション ID 自動更新、無料モードの自動切替、複数 Canvas の指定、多重対話のコンテキスト保持、そしてネットワーク障害時の自動リトライやレート制御といった運用上の配慮が盛り込まれています。既存の OpenAI 互換クライアントを大きく変えずに Tempo の機能を活用したい場面に便利です。

GitHub

リポジトリの統計情報

  • スター数: 7
  • フォーク数: 6
  • ウォッチャー数: 7
  • コミット数: 6
  • ファイル数: 14
  • メインの言語: TypeScript

主な特徴

  • OpenAI Chat Completions 互換エンドポイントを提供し、既存クライアントとの互換性が高い
  • SSE(Server-Sent Events)を使ったストリーミング出力に対応
  • Clerk 経由でのセッション ID 自動取得・更新、無料モードの自動有効化
  • 自動リトライと指数バックオフ、オプションのレートリミッターを内蔵

技術的なポイント

Tempo の API を OpenAI 互換にマッピングする際の主な工夫は、リクエスト/レスポンスの整形と状態管理、ストリーミングの透過的中継、そして認証トークンの自動管理にあります。本実装は Deno のランタイム特性を活かし、単一ファイルで依存なしに実行可能にしているため、デプロイやローカル検証が簡単です。認証面では Clerk API からセッション ID を取得・リフレッシュするロジックを備え、ユーザー操作なしでトークン切れを吸収します。ストリーミングは Tempo 側の SSE を受けて、OpenAI 風の delta イベントや finish_reason を付与する変換を行い、クライアントが違和感なく受け取れるようにしています。また、ネットワーク障害に対しては指数バックオフによる自動再試行を行い、必要に応じてリクエストのレートを制限する機構を提供します。複数 Canvas(テンポの作業領域)をリクエストごとに切り替えられる設計により、マルチテナントや用途別のモデル切替が簡単に行えます。さらに、“reasoning” や “search” といったサフィックスを付けたモデル名に応じて内部挙動を変える拡張ポイントがあり、深い推論や外部検索統合を有効にする拡張が想定されています。TypeScript の型定義を使ってリクエスト・レスポンス形状を明確にし、Deno 標準の fetch や EventStream を活用することで余計な依存を排しています。

プロジェクトの構成

主要なファイルとディレクトリ:

  • LICENSE: MIT 等のライセンスファイル(利用条件と責任範囲を明記)
  • README.md: インストール不要な単一ファイルの実行方法、機能一覧、利用上の注意や例が記載
  • auth.ts: Clerk からのセッション取得/更新、トークン管理、認証ヘッダ整形を担当するモジュール
  • canvas.ts: Tempo の Canvas ID を扱うユーティリティ。リクエストに Canvas を付与するロジックや既定値管理を行う
  • logging.ts: ログ出力のラッパー。開発/本番でログレベルを切り替える実装や、リクエスト追跡用のトレース情報付与を行う

その他(主にユーティリティとエントリポイント、型定義等):

  • ルーティング/リクエストハンドラ: OpenAI 互換のエンドポイント(例: /v1/chat/completions)を受け取り Tempo へフォワードする処理を含む
  • ストリーム変換ユーティリティ: SSE を受けて OpenAI 風のストリームイベントに変換するロジック
  • retry/backoff ユーティリティ: ネットワークエラー時の再試行戦略を実装
  • types.ts / schemas: リクエスト/レスポンスの型定義、入力検証やエラーフォーマットの整形
  • env や config: Tempo や Clerk のエンドポイント、デフォルト Canvas、レート制限設定などを集中管理するモジュール

(合計 14 ファイル構成。上記は主要役割の抜粋)

使い方(簡易)

  • Deno がインストールされた環境で単一ファイルを実行するだけでプロキシが起動します(README の実行コマンド参照)。
  • クライアントは通常の OpenAI Chat Completions 互換 API を呼び出す感覚で /v1/chat/completions にリクエストを投げます。
  • ストリーミングが必要なら SSE を受け取るようにし、通常の finish_reason や delta の取り扱いでそのまま利用可能です。
  • Clerk セッションや Canvas 指定はリクエストヘッダやボディで指定でき、設定がない場合は自動的に無料モードやデフォルト Canvas を使う挙動があります。

注意点と運用上の留意点

  • Tempo 側の API 仕様変更やレート制限ポリシーが変わるとプロキシ側の変換ロジックも更新が必要です。
  • 無料モードは便利ですが、商用運用や高トラフィック環境では利用規約や安定性面を事前に確認してください。
  • SSE の中継ではクライアント・サーバ間での接続維持やタイムアウト設定に注意が必要です。

まとめ

依存なしで手早く Tempo を OpenAI 互換として使える、実用性の高い Deno 単体プロキシです。

リポジトリ情報:

READMEの抜粋:

Tempo API Proxy - Deno 版

Tempo.build 的 AI 聊天接口封装成 OpenAI 兼容格式。

单文件版本,无需安装依赖,直接运行!


✨ 功能特点

  • 🔄 OpenAI 兼容 - 支持标准 Chat Completions API
  • 🌊 流式响应 - 支持 SSE 流式输出
  • 🔑 自动刷新 Token - 无需手动更新,自动从 Clerk API 获取 Session ID
  • 🆓 免费模式 - 自动启用,不消耗 credits
  • 🧠 深度思考 - -reasoning 后缀
  • 🔍 网络搜索 - -search 后缀
  • 💬 多轮对话 - 完整上下文支持
  • 🎨 多 Canvas 支持 - 可在请求中指定不同的 Canvas ID
  • 🔁 自动重试 - 网络错误自动重试,指数退避
  • 🚦 速率限制 - 可选的请求频率限制…