LLM Providers
StudentSync is provider-agnostic. Pick a cloud API for raw quality, or Ollama for full privacy.
Switching providers is a one-line change in scholar.json. The orchestrator, skills, and prompts stay identical — only the adapter changes.
Cloud providers
OpenAI
{ "llm": { "provider": "openai", "model": "gpt-4o" }}Set OPENAI_API_KEY in .env. Recommended model for assignment solving: gpt-4o.
Google Gemini
{ "llm": { "provider": "gemini", "model": "gemini-1.5-pro" }}Set GEMINI_API_KEY. The 1.5-pro tier handles long-context PDFs extremely well — ideal when your prof uploads a 50-page handbook.
OpenRouter
{ "llm": { "provider": "openrouter", "model": "anthropic/claude-3.5-sonnet" }}A gateway to Claude, Llama, Mistral, and the rest without juggling multiple API keys. Set OPENROUTER_API_KEY.
Local / open-source
Ollama
{ "llm": { "provider": "ollama", "model": "llama3.1:70b", "baseUrl": "http://localhost:11434" }}- Install from ollama.com.
- Pull a model:
ollama pull llama3.1:70b. - No API key needed. No data leaves your box.
Scuba's rule of thumb
gpt-4o or claude-3.5-sonnet. For long-form theory with PDF context, gemini-1.5-pro is hard to beat. For privacy, go Ollama.Fallback chains
You can configure a primary + fallback provider to survive outages:
{ "llm": { "provider": "openai", "model": "gpt-4o", "fallback": { "provider": "gemini", "model": "gemini-1.5-pro" } }}Observability
Every LLM call is appended to llm_trace.log with prompt, response, tokens, and latency. Tail it live while the bot runs:
tail -f ~/.studentsync/llm_trace.log