AI/ML Engineering Projects

Every project below is a real AI/ML problem teams hit in production - flaky LLM integrations, runaway cost, weak retrieval, no evals. Complete it in a live cloud workspace and it lands on your portfolio.

Get started - freeLive cloud workspace in your browser · nothing to install

30 projects to build

Restore a Broken LLM API IntegrationRestored the LLM API integration by correcting the endpoint path and adding the required model field to the repythonllmapi-integrationImprove an LLM Sentiment Classifier PromptConstrained the LLM prompt so the classifier returns single-word sentiment labels instead of freeform paragrappythonllmprompt-engineeringHarden an LLM Pipeline Against API FailuresWrapped LLM API calls in retry + try/except so the batch pipeline survives transient failures and returns partpythonllmerror-handlingParse JSON From an LLM (Strip Markdown Fences)Stripped the ```json fences before json.loads() so the extractor reliably parses LLM responses that ship insidpythonllmjson-parsingDebug a False-Failure Bug in an LLM BotRemoved the spurious "usage" field check that was flagging every LLM response as failed even when the model anpythonllmapi-integrationBuild a Text Summarization Endpoint With an LLMWired the /summarize endpoint to the LLM with a tight prompt and response parsing so the API returns shorter tpythonflaskllmAdd Conversation Memory to a ChatbotForwarded the full conversation history to the LLM and capped it with a sliding window so the bot remembers copythonflaskllmTune an Over-Aggressive LLM ModeratorRewrote the moderation prompt with explicit rules and few-shot examples so normal comments stop getting flaggepythonllmprompt-engineeringRestore Token Streaming on a Chat EndpointMade the Flask SSE generator yield each upstream LLM chunk as it arrives instead of buffering the whole reply pythonflaskllmCache LLM Responses in RedisAdded a Redis cache keyed on the prompt with 5-min TTL so identical questions return instantly instead of rounpythonflaskllmBuild an LLM Support Ticket ClassifierShipped a CLI classifier that routes support messages into billing/technical/general using a constrained LLM ppythonllmclassificationDesign a Semantic Search Embedding StrategyRead three semantic-search implementations, picked "embed at write + cache in-memory" - the embed-per-query appythonaisystem-designCache LLM Responses in AWS S3Aligned the cache bucket name in llm_cache.py with the one that was actually created, so repeat queries hit S3pythonflaskawsPersist an Embedding Cache in AWS DynamoDBAdded a SHA-256-keyed DynamoDB lookup before the embedding call so repeat inputs return instantly from the cacawsdynamodbembeddingsLoad a Prompt Template From AWS SSMReplaced the hardcoded prompt template in summarizer.py with an SSM Parameter Store fetch so prompt iterationsawsssmparameter-storeConnect a Chatbot to AWS BedrockFilled in chat() to call the OpenAI-compat LLM endpoint (mock-llm on the shared service - same wire format as awsbedrockllmUndo a Git Commit With git reset --softUsed `git reset --soft HEAD~1` to roll the last commit back into the staging area, preserving the file edits wgitresetversion-controlGenerate Text Embeddings With OpenAIFilled in embed_docs() to call the embeddings endpoint (nomic-embed-text, same shape as OpenAI's embeddings APembeddingsopenaivectorsSwap a List Lookup for a Dict (O(1))Replaced the `for (key, vec) in entries: if key == query: return vec` linear scan in `EmbeddingCache.get` withaipythonalgoBuild an LLM Content Moderation ServiceStood up a FastAPI moderation service backed by an LLM classifier with safe/warning/blocked tiers, JSON outputpythonllmcontent-moderationCut OpenAI Costs by Caching With RedisWrapped the LLM call in a Redis cache-aside layer keyed on the prompt (24h TTL) so repeat questions skip the LllmrediscachingPower RAG Search With a Vector DatabaseBuilt a RAG search loop - embedded each doc with nomic-embed-text, indexed into ChromaDB, then for each query ragvectorsopensearchFix the Chunking That's Wrecking RAG RetrievalReplaced a character-slicing chunker that shredded docs into meaningless fragments with sentence-aware chunkinairagchunkingRe-Rank RAG Results So the Best Answer Lands on TopAdded a re-ranking stage that re-scores the retriever's top-k candidates with a relevance function and reorderairagrerankingMake an LLM Pick the Right Tool (Function Calling)Wired the function-calling loop - asked the LLM to choose a tool as JSON, parsed that choice, and dispatched taillmfunction-callingBuild an End-to-End RAG PipelineWired chunk → embed (TF-IDF) → retrieve (cosine top-k) → augment → generate (mock-llm) into a single `answer(qairagretrievalBuild an LLM Evaluation Harness (Golden Set)Wrote a generic evaluation harness that runs an injectable LLM function against a golden set, scores each respaillmevaluationRoute LLM Requests to Cheaper ModelsRouted short prompts (<80 chars) to mock-llm (cheap) and longer ones to mock-llm-large (more capable), so simpllmroutingcost-optimizationBuild a Tool-Calling Agent LoopImplemented the agent loop - call the LLM, run any ACTION it requests, feed the result back as an Observation,aiagentstool-callingStream a RAG Answer With Inline CitationsTurned a buffered RAG endpoint into a streaming one - retrieve the context, stream the LLM answer token-by-tokairagstreaming

Plus 8+ more AI/ML projects in the workspace, with new ones added regularly.

More for AI/ML engineers

AI/ML roadmapInterview questionsResume projectsCareer guide

Do real production work, free. Live cloud workspaces in your browser - every project you complete lands on your portfolio.

Get started - free
Get started - free