feat!: migrate to OpenAI native tool calls and fix circular deps (#fuck-gemini)

- Fix circular dependencies in agent/tools
- Migrate from custom JSON to OpenAI tool calls format
- Add async streaming (step_stream, complete_stream)
- Simplify prompt system and remove token counting
- Add 5 new API endpoints (/health, /v1/models, /api/memory/*)
- Add 3 new tools (get_torrent_by_index, add_torrent_by_index, set_language)
- Fix all 500 tests and add coverage config (80% threshold)
- Add comprehensive docs (README, pytest guide)

BREAKING: LLM interface changed, memory injection via get_memory()
This commit is contained in:
2025-12-06 19:11:05 +01:00
parent 2c8cdd3ab1
commit 9ca31e45e0
92 changed files with 7897 additions and 1786 deletions
+14 -13
View File
@@ -1,26 +1,27 @@
"""Movie application DTOs."""
from dataclasses import dataclass
from typing import Optional
@dataclass
class SearchMovieResponse:
"""Response from searching for a movie."""
status: str
imdb_id: Optional[str] = None
title: Optional[str] = None
media_type: Optional[str] = None
tmdb_id: Optional[int] = None
overview: Optional[str] = None
release_date: Optional[str] = None
vote_average: Optional[float] = None
error: Optional[str] = None
message: Optional[str] = None
imdb_id: str | None = None
title: str | None = None
media_type: str | None = None
tmdb_id: int | None = None
overview: str | None = None
release_date: str | None = None
vote_average: float | None = None
error: str | None = None
message: str | None = None
def to_dict(self):
"""Convert to dict for agent compatibility."""
result = {"status": self.status}
if self.error:
result["error"] = self.error
result["message"] = self.message
@@ -39,5 +40,5 @@ class SearchMovieResponse:
result["release_date"] = self.release_date
if self.vote_average:
result["vote_average"] = self.vote_average
return result