Initial project structure

Scaffold all modules, route stubs, data models, and config.
No logic implemented yet — all core methods raise NotImplementedError.
Establishes the full directory layout matching the architecture in CLAUDE.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jaroslav Benes
2026-04-08 14:48:48 +02:00
commit 083cbb1fa7
32 changed files with 1507 additions and 0 deletions

29
fellowship/config.py Normal file
View File

@@ -0,0 +1,29 @@
"""
Server-wide configuration loaded from .env via Pydantic Settings.
All modules import `settings` from here — never read env vars directly.
"""
from pydantic import Field
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
# LLM backend
llm_base_url: str = Field(description="OpenAI-compatible LLM backend base URL")
llm_api_key: str = Field(default="not-needed", description="API key for the LLM backend")
# Default models (can be overridden per-session or per-bot)
default_bot_model: str = Field(description="Default model used for bot turns")
default_orchestrator_model: str = Field(description="Model used for orchestrator calls")
# Server limits
max_bots_per_session: int = Field(default=10, description="Hard cap on bots per session")
session_ttl_default: int = Field(default=3600, description="Default idle TTL in seconds")
# Debug
debug: bool = Field(default=False, description="Enable debug mode server-wide")
model_config = {"env_file": ".env", "env_file_encoding": "utf-8"}
settings = Settings() # type: ignore[call-arg]