- openai_orchestrator.py — new ReAct tool loop engine for any OpenAI-compatible endpoint (OpenRouter, Open WebUI, Ollama, LiteLLM); model handles both tool loop and final response, no Claude handoff needed - tools/__init__.py — auto-derive OpenAI JSON Schema from existing Gemini FunctionDeclarations so tool definitions have a single source of truth - routers/orchestrator.py — route to openai_orchestrator when model registry "orchestrator" role resolves to a local_openai type host - routers/chat.py — pass role to _backend_label(); fix fallback_used logic (only meaningful for explicit backend overrides, not auto-routing) - static/app.js — add null/"auto" to backend cycle; fetch local model hint without overriding the auto default on page load - model_registry.py — _normalize() back-fills host_type on old registry files - requirements.txt — add openai>=1.0.0 - ARCH__BACKENDS.md — document OpenAI-compat backend and routing logic Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
27 lines
720 B
Plaintext
27 lines
720 B
Plaintext
fastapi>=0.115.0
|
|
apscheduler>=3.10
|
|
uvicorn[standard]>=0.30.0
|
|
pydantic-settings>=2.0.0
|
|
python-dotenv>=1.0.0
|
|
|
|
# Orchestrator — Gemini API (native tool calling) + web search
|
|
google-genai>=1.0.0
|
|
ddgs>=0.1.0
|
|
|
|
# Google Chat webhook — JWT Bearer token verification
|
|
google-auth>=2.0.0
|
|
|
|
# Session auth — password hashing + JWT cookies
|
|
bcrypt>=4.0.0
|
|
PyJWT>=2.8.0
|
|
python-multipart>=0.0.9 # required by FastAPI for Form() data
|
|
|
|
# Async HTTP client — used for local OpenAI-compatible backend (Open WebUI / Ollama)
|
|
httpx>=0.27.0
|
|
|
|
# OpenAI-compatible client — tool calling for OpenRouter / LiteLLM / any OAI-compat host
|
|
openai>=1.0.0
|
|
|
|
# anthropic SDK not needed — using claude CLI subprocess for auth
|
|
# anthropic>=0.40.0
|