Files
copilotkit__copilotkit/.gitattributes
T
Jordan Ritter c2234312b8 fix(showcase/langroid): provider-aware entrypoint credential guard + graceful shutdown
Replace the OPENAI_API_KEY-hardcoded credential guard with a provider-aware
_check_key that inspects LANGROID_MODEL's prefix and probes the correct env
var for that provider:

- openai/ → WARN (not a langroid-native prefix; use bare model names)
- anthropic/ → WARN (not routable; suggest litellm/anthropic/<model>)
- litellm/anthropic/ → ANTHROPIC_API_KEY
- gemini/ → GEMINI_API_KEY
- openrouter/, groq/, cerebras/, glhf/, minimax/, portkey/, deepseek/ → dedicated keys
- ollama/, local/, vllm/, llamacpp/ → NO_KEY_REQUIRED (local inference)
- langdb/, litellm-proxy/, litellm/<non-anthropic>/ → NO_KEY_REQUIRED_* (credentials
  resolved via config, not env)

Under REQUIRE_LANGROID_API_KEY=1 a missing credential FATALs the boot; the
default is warn-and-continue so dev containers boot cleanly.

Process lifecycle hardening:
- Use process substitution `> >(sed ...)` instead of pipelines so $! captures
  the real python/next PID (not sed's) — prior pipeline pattern would mask
  uvicorn crashes behind sed's exit code
- Trap cleanup with `set +e` at entry (trap may fire from FATAL `exit 1` path
  where set -e would otherwise abort the cleanup loop)
- 5s SIGTERM→SIGKILL grace window on the surviving child
- Extended exit-code case statement (0, 1, 2, 126, 127, 130, 137, 139, 143, 255)
- Survivor-kill diagnostics distinguish EPERM from ESRCH
- wait -n with explicit positional PIDs so unrelated subshell reaps can't
  satisfy the wait

.env.example updates document the multi-provider options so operators
discover them from the file itself, not entrypoint.sh.

.gitattributes enforces LF on *.sh so Windows contributors regenerating
the starter don't silently ship CRLF entrypoints.
2026-04-19 11:38:32 -07:00

34 lines
1.7 KiB
Plaintext

*.gif filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.webm filter=lfs diff=lfs merge=lfs -text
# Shell scripts must retain LF line endings. Windows contributors regenerating
# showcase starters on a Windows checkout (or with autocrlf=true) would
# otherwise silently ship CRLF ``entrypoint.sh`` files that bash in the
# Docker runtime rejects (``bad interpreter: No such file or directory``).
*.sh text eol=lf
# Generated showcase starters — do not edit manually
# Regenerate with: cd showcase/scripts && npx tsx generate-starters.ts
showcase/starters/ag2/** linguist-generated=true
showcase/starters/agno/** linguist-generated=true
showcase/starters/claude-sdk-python/** linguist-generated=true
showcase/starters/claude-sdk-typescript/** linguist-generated=true
showcase/starters/crewai-crews/** linguist-generated=true
showcase/starters/google-adk/** linguist-generated=true
showcase/starters/langgraph-fastapi/** linguist-generated=true
showcase/starters/langgraph-python/** linguist-generated=true
showcase/starters/langgraph-typescript/** linguist-generated=true
showcase/starters/langroid/** linguist-generated=true
showcase/starters/llamaindex/** linguist-generated=true
showcase/starters/mastra/** linguist-generated=true
showcase/starters/ms-agent-dotnet/** linguist-generated=true
showcase/starters/ms-agent-python/** linguist-generated=true
showcase/starters/pydantic-ai/** linguist-generated=true
showcase/starters/spring-ai/** linguist-generated=true
showcase/starters/strands/** linguist-generated=true