Leaked financial docs show OpenAI is losing billions of dollars a year
Audited accounting shows growing revenues being dwarfed by R&D, other expenses.
找到 4824 篇相关文章
Audited accounting shows growing revenues being dwarfed by R&D, other expenses.
TL;DR Provider invoices aggregate by model and billing period. They cannot tell you which team, product, or agent caused a cost spike. Request-level AI cost attribution links every API call to structured owner metadata (team, product, environment, trace ID) so investigations take minutes, not days. Three approaches exist: provider dashboard, gateway log enrichment, and application trace attribution. They differ sharply in setup cost and query granularity. Gateway log enrichment is the highest-leverage first step for most teams. It requires no changes to application code and covers all traffic behind the gateway. Real example: a platform team at a 60-person AI company discovered that 31% of their $18k/month spend came from a misconfigured retry loop in a background job, identified in under 20 minutes once request-level logs were searchable. Why Your Invoice Is Lying to You Your OpenAI invoice for last month shows $22,400. Your Anthropic invoice shows $6,800. Total: $29,200. Your CFO wants to know which business unit owns each line. You forward the invoices to your finance partner, who forwards them to three engineering managers, who reply with estimates that sum to $24,000 and do not match any real allocation. This is the standard state of LLM spend governance at companies between $5k and $50k per month in AI API costs. The invoices arrive, the spend is real, and attribution is a spreadsheet exercise done with guesses. The problem is structural. Provider billing aggregates by model and by billing period. It has no concept of your internal ownership model, your product boundaries, your tenant hierarchy, or your agent topology. A single gpt-4o line in your invoice might represent spend from a customer-facing chat feature, an internal summarization service, a nightly batch job, and three developers running experiments against production endpoints. You get one number. You have four or more owners. Request-level AI cost attribution is the practice of enriching every API c
I have done this process wrong more times than I would like to admit. You call the references the vendor sends you. Three customers, all happy, all articulate, all saying roughly the same things. You hang up feeling good. You sign. Six months later you are dealing with a support team that responds every 72 hours and a renewal quote that is 40% higher than year one. The reference check told you nothing useful. Not because the customers lied. Because you asked the wrong questions. Here is what I ask now. "How many people at the vendor have you spoken to in the last six months?" One contact who handles everything and is sometimes slow — that tells you something. A team of people across sales, technical support, and leadership — that tells you something different. Enterprise AI vendors with thin account teams show their limitations at exactly the moment you need them most: when something breaks at the worst possible time. "Tell me about the last time something broke in production." Not IF something broke. Something always breaks. I want to know what happened next. Did the vendor show up? Did they communicate clearly while the issue was live? Did they follow up after closing the ticket, or did they close it and disappear? The answer to this question tells me more about a vendor than any product demo. "What do you know now that you wish you had known before signing?" This question works because it is framed as advice, not criticism. Reference customers who would never say "this product has problems" will happily answer this one honestly. Listen for anything about pricing surprises, scope limitations that only appeared after deployment, or feature gaps the sales team glossed over. "When you renewed, did you evaluate alternatives?" Renewal is the honest signal. A customer who renewed without looking elsewhere is genuinely satisfied. A customer who looked at three other options and came back is someone who chose this vendor over real competition. A customer who is approachin
TechCrunch has followed SpaceX's start, struggles, and successes from the early days. And we're here for what happens next too. This package of SpaceX IPO coverage includes who stands to win (and maybe some who won't), pre-IPO deals, and what's tucked inside its S-1 registration document.
Here is a problem I hit building a long-running agent: I needed to inject a new instruction partway through a session ("the project is Go, write Go") but editing the top-level system prompt to add it invalidated my entire prompt cache. Every cached turn got reprocessed at full price. The fix is a feature that landed in the current Claude models: mid-conversation system messages. Here is what it is and when to use it. The setup that breaks A long agent session has a large, stable system prompt and a growing message history, and you cache the prefix so each turn reuses the prior work cheaply. That works until you learn something mid-session that the agent needs to know: a mode toggled, the user delivered async context, files changed on disk, the token budget dropped. The naive move is to edit the system prompt to include the new fact. But the system prompt sits at the front of the cached prefix. Change one byte there and you invalidate everything after it. Your whole conversation history reprocesses at full input price on the next request. For a long session, that is expensive and slow. The fix: a system message in the messages array The current models let you put a system -role message directly in the messages array, after the history, instead of editing the top-level system : const response = await client . messages . create ( { model : " claude-opus-4-8 " , max_tokens : 16000 , system : [ { type : " text " , text : STABLE_SYSTEM , cache_control : { type : " ephemeral " } }, ], messages : [ ... history , // cached prefix, untouched { role : " user " , content : latestUserMessage }, // @ts-expect-error: role:"system" SDK types may still be landing { role : " system " , content : " This project is Go. Write all code in Go. " }, ], }, { headers : { " anthropic-beta " : " mid-conversation-system-2026-04-07 " } }, ); Because the new instruction sits after the cached history, it invalidates nothing before it. The cached prefix stays intact, you pay full price only for the
African payments infrastructure company Flutterwave has hit a new valuation and landed blockchain company Ripple as investor and partner.
An AI agent has two kinds of memory: conversation (semantic) and context (exact reference). Keep them separate with Strands and AgentCore.
The Justice department says the Pentagon needs xAI to keep using its unpermitted gas turbines.
Plaud is trying to make a mark in a crowded market full of AI-powered meeting notetakers.
By this time next year, Fox Corporation CEO Lachlan Murdoch intends to have added Roku to his already expansive media empire. Should the acquisition go through, Fox will gain control of Roku's modest library of original programming, and the newly combined company will become "the third-largest player in U.S. television" in terms of viewing share. […]
Unlike many of his tech industry peers who have cut thousands of jobs citing the need to restructure to make the most of AI, Robinhood's CEO Vlad Tenev conspicuously made no mention of AI in his note about layoffs.
SpaceX is buying Cursor to bolster the capabilities of xAI.
SpaceX's valuation has increased by $1 trillion since its shares started trading on Friday.
Probably wants to prevent hallucinations and factual errors from reaching users, and achieve accuracy on par with deterministic systems.
There is a persistent myth that to build a worthy code assistant, you absolutely must use GPT or Claude. This is false. You don't need a 1-trillion parameter model. You need a small local model and extremely rigorous engineering around it. This is the direction history is taking for companies. As Mark Zuckerberg mentioned, the future isn't a single omniscient model, but "every company having its own specialized AI" . And this specialization necessarily involves fine-tuning and local deployment (or on sovereign servers) to guarantee data security. The thesis behind the construction of Vibrisse Agent can be summed up in one sentence: Small models, Great tools. In this article, I will detail the technical stack and concrete engineering solutions I implemented to tame a local model and make it reliable in production: LangGraph, Ollama, FastAPI, React (no build step, with embedded custom CSS) , all running on a machine with 32 GB of RAM. For the curious who want to run the agent on their machine right now: // MacOs / Linux curl -sSL https://agent.vibrisse-studio.dev/install.sh | bash // Windows irm https://agent.vibrisse-studio.dev/install.ps1 | iex Architecture: Why a State Machine (LangGraph)? At first, when building an LLM application, we tend to think in sequential chains: Input -> Prompt -> Tool -> Output . The problem is that if one node fails, the whole chain stops without us being able to catch the error or understand the context of the crash. That's where LangGraph comes in. Vibrisse's architecture isn't a chain, it's a state machine . Every node in the graph has a very precise responsibility, shares a global conversation state, and uses conditional transitions to move to the next node. I implemented the Supervisor / Worker pattern: The Supervisor analyzes the user's intent. It does nothing else but route. It dispatches the task to specialized Workers (the RAG Worker, the Search Worker, the Ghost Worker...). If a Worker fails or needs more information, it can se
Il y a un mythe persistant selon lequel pour construire un assistant de code digne de ce nom, il faut absolument utiliser GPT ou Claude. C'est faux. Vous n'avez pas besoin d'un modèle à 1 trillion de paramètres. Vous avez besoin d'un modèle local de taille réduite et d'une ingénierie extrêmement rigoureuse autour de lui. C'est d'ailleurs le sens de l'histoire pour les entreprises. Comme l'évoquait Mark Zuckerberg, l'avenir n'est pas à un modèle omniscient unique, mais à "chaque entreprise avec sa propre IA spécialisée" . Et cette spécialisation passe obligatoirement par le fine-tuning et le déploiement local (ou sur serveurs souverains) pour garantir la sécurité des données. La thèse derrière la construction de Vibrisse Agent tient en une phrase : Small models, Great tools. Dans cet article, je vais détailler la stack technique et les solutions d'ingénierie concrètes que j'ai mises en place pour dompter un modèle local et le rendre fiable en production : LangGraph, Ollama, FastAPI, React (sans build step, avec CSS custom embarqué) , le tout tournant sur une machine avec 32 Go de RAM. Pour les curieux qui souhaitent lancer l'agent sur leur machine dès maintenant : // MacOs / Linux curl -sSL https://agent.vibrisse-studio.dev/install.sh | bash // Windows irm https://agent.vibrisse-studio.dev/install.ps1 | iex L'Architecture : Pourquoi une Machine à États (LangGraph) ? Au début, quand on construit une application LLM, on a tendance à penser en chaîne séquentielle : Input -> Prompt -> Outil -> Output . Le problème, c'est que si un nœud échoue, toute la chaîne s'arrête sans qu'on puisse rattraper l'erreur ou comprendre le contexte du plantage. C'est là qu'intervient LangGraph . L'architecture de Vibrisse n'est pas une chaîne, c'est une machine à états . Chaque nœud du graphe a une responsabilité très précise, partage un état global de la conversation, et utilise des transitions conditionnelles pour passer au nœud suivant. J'ai implémenté le pattern Supervisor / Worker : L
🚀 Hello, DEV Community! I'm Nader Al Shawki , a final-year AI Engineering student at Al-Razi University, Yemen. This is my first post here, and I'm excited to start sharing my journey with this amazing community. 🎯 Who Am I? I'm passionate about building production-grade AI systems that solve real-world problems. My main areas of focus are: 🖼️ Computer Vision & Deep Learning 🤖 ML Model Deployment (Docker, FastAPI, REST APIs) 🧠 LLMs, RAG, and AI Agents (currently learning) 📊 Data Visualization & Analytics (Power BI) 💡 What I've Built So Far 1. 🍅 Tomato Leaf Disease Detection Platform Tech: YOLOv8, PyTorch, FastAPI, Docker What it does: Detects tomato leaf diseases from images with real-time inference. Containerized with Docker for easy deployment. 2. 🫁 Pneumonia Detection System Tech: PyTorch, CNN Architecture, Medical Imaging What it does: A deep learning model that detects pneumonia from chest X-ray images. 3. 📊 Sales Profit Analysis Dashboard Tech: Power BI, DAX, Data Analysis What it does: Interactive dashboard for tracking sales KPIs. 4. 😀 Face Detection & Emotion Recognition Tech: OpenCV, Deep Learning What it does: Real-time face detection, age estimation, emotion recognition, and gender classification. 5. 🍽️ Restaurant Website Tech: HTML5, CSS3, JavaScript What it does: Fully responsive restaurant website with interactive UI. 🌱 What I'm Currently Learning LLMs (Large Language Models) RAG (Retrieval-Augmented Generation) LangChain & AI Agents Workflow automation with n8n 🔗 Let's Connect 🐙 GitHub: Naderalshawki 💼 LinkedIn: in/nader-al-shawky 📫 Email: naderalshawki@gmail.com Thanks for reading! I'll be posting regularly about AI projects, tutorials, and lessons learned. Stay tuned! 🚀
I use a form validation problem as a technical interview question. It's deceptively simple — and the solutions people reach for reveal a lot about how they think. Then I tried it on Claude, ChatGPT, and Gemini. The results were illuminating, but not for the reasons I expected. The Problem Many form libraries share a common convention: form data is represented as a plain nested object, and the validation function returns an object of the same shape containing the errors. You'll find this pattern in Formik and React Final Form in React, and — full disclosure — in Inglorious Web , my own framework, which ships form handling built in without any extra dependencies. const values = { productName : ' VR Visor ' , quantity : 1 , homeAddress : { street : ' Long St ' , zip : ' 00666 ' }, shippingAddress : { street : ' Short St ' , zip : ' 00777 ' , co : ' Inglorious Coderz ' }, billingAddress : { street : ' Wide Plaza ' , zip : ' 00888 ' , vat : ' 1142042 ' }, } The validation function should return an object containing all errors found. A starting example: function validate ( values ) { const errors = {} if ( ! values . productName ) { errors . productName = ' required ' } return errors } The ask: extend this to validate every field . Notice that the three address types aren't identical. shippingAddress requires a co field. billingAddress requires a vat . These differences matter — and how you handle them reveals a lot. Four Solutions, Four Instincts 1. The Flag — the average human The most common approach I see in interviews is a single validateAddress function with a type parameter: function validateAddress ( values = {}, type ) { const errors = {} if ( ! values . street ) errors . street = ' required ' if ( ! values . zip ) errors . zip = ' required ' if ( type === ' shipping ' && ! values . co ) errors . co = ' required ' if ( type === ' billing ' && ! values . vat ) errors . vat = ' required ' return errors } It works. But every new address type, every new special rule,
TL;DR — A few weeks ago I tested four AI tools on a build job: a website for my son's cricket academy. This time the job had nothing to do with code. The coach just wanted a banner he could post. Same four tools, totally different result. ChatGPT made the best image, Grok made the best video, Gemini wouldn't make anything, and Claude tried to solve a graphics problem by writing HTML. If you read the last post , you've met my son's cricket coach. He runs MMCA — Maverick Master's Cricket Academy. Started in 2020, based in Bengaluru, genuinely good with the kids. The website is live now and parents have started messaging him on WhatsApp. So last weekend he came back with the next thing he needed, which is the thing every small academy actually runs on: "Can you make me a weekend batch banner? Something I can post in the parent groups." Now, this is a completely different job from the last one. That first experiment was design and development — agents writing real code, running tests, deploying to Cloudflare. This one is just graphics. No repo, no deploy, nobody reviewing a pull request. Just: here's my logo, here's a sample I like, make me something I'd be happy to send out. So I figured I'd run the same four tools again and see what happened. Same brief, same logo, everything on the default model with no special settings : ChatGPT, Claude, Gemini, Grok. Here's roughly what I typed, the way a normal client would brief you: Similar to this banner, make one for MMCA Academy (since 2020, logo attached). Weekend batch Sat 4:30—7, Sun 7—9:30pm. Add a small phrase like the sample. Be creative, keep it simple, but don't copy the sample exactly. The whole test really came down to one instruction: be creative, but don't copy. Whatever each tool did with that told me everything. Round 1: the static banner ChatGPT got it on the first go. "WEEKEND BATCH. TRAIN. PLAY. GROW." Logo top-left, the "Since 2020" bit kept, timings in clean little cards, an enrol number, three badges acros
Coinbase has published a detailed postmortem of its May 7, 2026, outage, revealing how a localized cooling failure inside an AWS data center escalated into a multi-hour disruption that halted nearly all trading activity across the cryptocurrency exchange By Craig Risi