sibidharan
Joined 5 months ago
Joined 5 months ago
I love PHP since beginning! ZealPHP is my own creation, actively developed. We created it inside our Academy. It powers our EdTech tool today as well. We initially used Apache+mod+php, but as AI needs grew, I don't want to rewrite the whole codebase for asynchronous operations to have SSE, sockets, streaming etc. I used to do with sidecars like RabbitMQ. So it began as an experiment inside the academy, today the same framework powers the EdTech tool we use in-house. To be exact, we made the same Apache+mod_php codebase run in ZealPHP and made it asynchronous.
And why PHP... because it's bloody fast when run asynchronous! HTML rendering is first class, we made ZealPHP yield HTML like react's renderToPipeableStream, and much more using OpenSwoole, making it close to the SAPI contract with classic PHP mental model. So I wanted to explore what PHP could offer in this new direction.
If you like to explore more on how PHP is "bloody fast" and "why": Kindly check https://php.zeal.ninja/performance & https://php.zeal.ninja/why-zealphp
If you like to explore how we made the same codebase run on 2 different server: https://php.zeal.ninja/case-studies/sna-labs
// ZealPHP being Actively developed now!
I am using OpenAI from the beginning for all AI Apps I build. Initially it was only Completions API. Then came Responses API. They introduced something called Assistants API with conversation stored on server side and soon pulled the plug on Assistants API for the enhanced Agents SDK with all sessions and things stored locally as we want.
So I moved all my old completions/responses API projects to Agents SDK! They feel good and stable. Making chat with Agents SDK is super easy. Can stream tool calls and tokens effortlessly!
Agents SDK takes care of sessions, token tracking, caching, and so many things! In my apps, it helps me track how much is cached, how much is new!!! And best part about Agents SDK is it takes care of cleaning up old tool calls that saves your context, and it also auto summarises as the chat grows (I might be wrong about the last one).
I am building an EdTech with lot of AI learning / evaluation tools including isolated compute layer for my students! That led me to create an OSS project - which might have some answers for your original question.
I am working on an Open Source Async SAPI for PHP to make PHP convenient for building realtime AI apps (still in alpha and actively developing), and have created a small lesson on how to use agents SDK for AI Apps as a way to showcase my framework. If you like to see my approach, this lesson is a good place to skim.
Lesson 29: https://php.zeal.ninja/learn/ai-chat
Agent SDK Example Code used on above lesson: https://github.com/sibidharan/zealphp/blob/master/examples/a...
I follow this style everywhere in my code. Agents work as separate python code detached from whatever framework we use to build Apps, streams via STDIO and I stream the tokens over SSE/WebSockets to frontend as needed - clean architecture.
Different architecture may have different needs! A simple chat response, SSE is ok. A complicated long running stream, WebSockets!
This is how I am doing. Interested to know how others are approaching this.
Just need to bust low effort outputs!
So if the prices were to go high, I honestly have no idea at the moment. I might need a rehabilitation centre!!!
But I am mentally prepared that someday this will be gone... So make hay while the sun shines! I am doing the most complex of all works I want to do... And pushing the limits. Knowing how much it costs in actual tokens, I give me some kind of seriousness, like an invisible funding that I must use to grow!! Considering this like a launchpad... If any of the projects hit and scale and I get some funding in future, then I might not need to worry when prices go high. So either this or rehab lol !
AI didn't eliminate the need for frameworks.. It just picks the right one for the Job.. when plain HTML is ok, it chooses plain HTML.
1 Static IP, A linux machine onprem with necessary redundancy. Working like a clockwork.
// Generated wit Claude
Ran this on my own ~/.claude/projects/ (933 sessions, 93,842 model calls, mix of main thread + spawned subagents). Numbers came out very close to yours in shape, different in scale.
cost.py (Opus 4.7 list rates, main thread only):
cache reads (re-reading context) 21.69B tok $10,843 56%
cache writes (1h) 678M tok $6,781 35%
output (incl. reasoning) 63.5M tok $1,589 8%
fresh uncached input 1.6M tok $8 0%
TOTAL 22.43B tok $19,221
if no caching: $113,418 (5.9x more)
input:output ratio: 353:1
cache hit rate: 97.0%
token_time_breakdown.py (179M unique tokens, 166h wall clock): reasoning (hidden thinking) 29% of tokens, 102h (61%) of time
bash 1.4% 23h (14%)
writing tool calls 4% 14h (8%)
summaries 2.5% 9h (5%)
reading/searching/web 1.6% 7h (4%)
subagents 0.2% 6h (4%)
editing 0.1% 5h (3%)
pasted attachments 25.3% -
typed prompt 34.4% -
system+tools 1.4% -
reread_breakdown.py (per-activity share of billed input): reasoning 59.5% (~$11.4k of the bill is re-sending old
hidden thinking back to the model)
attachments 22.6%
tool calls 7.8%
bash 3.0%
reading/web 2.4%
my prompt 1.6%
summaries 1.5%
system+tools 0.8%
subagents 0.4%
main_vs_sidecar.py: main sidecar combined
sessions/agents 449 484 933
assistant calls 63,820 30,022 93,842
cache hit 97.0% 94.4% 96.6%
turns/agent 142 (median 20, max 11,058 in one session)
62 (median 44)
reasoning % of out 82% 51% 77%
cost @ Opus 4.7 $19,225 $3,495 $22,720
sidecar = 32% of calls but only 15% of cost. Subagents are doing
their job (cheap, focused, short context).
Same shape as yours: re-read dominates, reasoning is the biggest
re-read line, caching is the only thing keeping it sane. The one
that surprised me was a single 11,058-turn main session - some
autonomous loop I forgot to kill. Going to grep for that.Repo: github.com/Coral-Bricks-AI/coral-ai/tree/main/claude-code-token-xray