<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Angaya</title>
    <description>The latest articles on DEV Community by David Angaya (@david_angaya_e7156aa5266d).</description>
    <link>https://dev.to/david_angaya_e7156aa5266d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3042385%2F942410f4-cd90-4240-a977-3cf9f03e01b2.png</url>
      <title>DEV Community: David Angaya</title>
      <link>https://dev.to/david_angaya_e7156aa5266d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/david_angaya_e7156aa5266d"/>
    <language>en</language>
    <item>
      <title>We Built an AI That "Daydreams": Our Google Cloud Hackathon Story</title>
      <dc:creator>David Angaya</dc:creator>
      <pubDate>Sun, 22 Jun 2025 21:26:17 +0000</pubDate>
      <link>https://dev.to/david_angaya_e7156aa5266d/we-built-an-ai-that-daydreams-our-google-cloud-hackathon-story-543j</link>
      <guid>https://dev.to/david_angaya_e7156aa5266d/we-built-an-ai-that-daydreams-our-google-cloud-hackathon-story-543j</guid>
      <description>&lt;p&gt;When our team first started the &lt;strong&gt;Agent Development Kit Hackathon with Google Cloud&lt;/strong&gt;, we were driven by a single, nagging question: Why do today's powerful AIs feel so... passive? They are brilliant calculators, but they often feel like a "polite guest who won't speak until spoken to."&lt;/p&gt;

&lt;p&gt;We wanted to build a true partner—an AI that could feel &lt;strong&gt;alive&lt;/strong&gt;. One that could get curious with you, understand the flow of your thinking, and have an "inner life" of its own.&lt;/p&gt;

&lt;p&gt;That idea became &lt;strong&gt;Wise&lt;/strong&gt;. In just under two weeks, we built and deployed a working prototype of a system that we believe represents a new paradigm for human-AI interaction. This is the story of how we built it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Disclaimer: We created this project and article for the purposes of entering the Agent Development Kit Hackathon with Google Cloud. #adkhackathon)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Vision: An AI That Thinks With You
&lt;/h3&gt;

&lt;p&gt;Our goal was to build more than a chatbot; we wanted to build a &lt;strong&gt;co-creator&lt;/strong&gt;. Wise is designed to be a calm, focused space for thinking, built on two core concepts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A Proactive "Inner Life":&lt;/strong&gt; Wise has a &lt;strong&gt;&lt;code&gt;DaydreamAgent&lt;/code&gt;&lt;/strong&gt; that 'thinks' in the background. As a proof-of-concept, it analyzes a dataset to find interesting anomalies and proactively greets you with a data-driven "spark." It solves the "passive AI" problem by being an active participant in the conversation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cognitive Tuning:&lt;/strong&gt; Wise doesn't have a single, static personality. By detecting the &lt;em&gt;intent&lt;/em&gt; of your conversation, it switches between different &lt;strong&gt;Cognitive Lenses&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The &lt;strong&gt;&lt;code&gt;Analytical Lens&lt;/code&gt;&lt;/strong&gt; for data-driven research and tool use.&lt;/li&gt;
&lt;li&gt;  The &lt;strong&gt;&lt;code&gt;Imaginative Lens&lt;/code&gt;&lt;/strong&gt; for creative brainstorming and poetry.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How We Built It: The "SageMind Architecture"
&lt;/h3&gt;

&lt;p&gt;Top AI researchers like Andrej Karpathy note that the future of AI applications lies in "multiple LLM orchestration." Our &lt;strong&gt;SageMind Architecture&lt;/strong&gt; is our answer to this challenge.&lt;/p&gt;

&lt;p&gt;For this hackathon, we made a crucial decision: instead of using a pre-built toolkit, we chose to build our own &lt;strong&gt;custom, lightweight agentic framework&lt;/strong&gt; from first principles. This approach allowed us to demonstrate our deep understanding of agent orchestration by building the core logic from the ground up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyqezrt221ayry7hhpe3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyqezrt221ayry7hhpe3.png" alt="Image description" width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our system is a unified Streamlit application where our custom-built Python agents are orchestrated to deliver a seamless experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The &lt;code&gt;DaydreamAgent&lt;/code&gt; (The Proactive Dreamer):&lt;/strong&gt;&lt;br&gt;
This agent is our Curiosity Engine. We used Python and Pandas to analyze a sample stock history CSV. The agent identifies the day with the highest trading volume and then uses &lt;strong&gt;Gemini 1.5 Flash&lt;/strong&gt; to synthesize a natural language "spark" from that data point, which is then presented to the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The &lt;code&gt;ConversationalAgent&lt;/code&gt; (The Master Conductor):&lt;/strong&gt;&lt;br&gt;
This is the main agent the user talks to. Our Streamlit front-end acts as the orchestrator, passing the active "Lens" (as a system prompt) and the conversation history to this agent. Based on user intent, this agent intelligently chooses which internal &lt;strong&gt;Tool&lt;/strong&gt; to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  In &lt;code&gt;Analytical&lt;/code&gt; mode, it can use a "Data Analysis Tool" that leverages &lt;strong&gt;Gemini 1.5 Pro&lt;/strong&gt; to write Python code on the fly, which is then executed to generate and display a Plotly graph.&lt;/li&gt;
&lt;li&gt;  In &lt;code&gt;Imaginative&lt;/code&gt; mode, it uses its creative prompting to generate prose or poetry.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This custom architecture allowed us to build a sophisticated, decomposed workflow, a principle core to modern AI systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Full Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Application &amp;amp; Orchestration:&lt;/strong&gt; Streamlit&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Agentic Core:&lt;/strong&gt; Python, Pandas, Plotly&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;AI Models:&lt;/strong&gt; Google Gemini 1.5 Pro &amp;amp; Gemini 1.5 Flash&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cloud Deployment:&lt;/strong&gt; Docker, Google Cloud Run&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's Next? From Partner to Platform
&lt;/h3&gt;

&lt;p&gt;This hackathon was just the beginning. The SageMind architecture is a powerful foundation. Our next steps are to build out the interactive &lt;strong&gt;Mind Map&lt;/strong&gt;—the visual "second brain"—and expand our library of &lt;strong&gt;Cognitive Lenses&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Our long-term vision is to evolve Wise into a true &lt;strong&gt;Multimodal Conductor&lt;/strong&gt;. This is a system that doesn't just use internal tools, but intelligently orchestrates a 'dream team' of best-in-class AI models and APIs from across the industry—connecting to &lt;strong&gt;Google BigQuery&lt;/strong&gt; for enterprise data, using a &lt;strong&gt;web search tool&lt;/strong&gt; for real-time information, and leveraging &lt;strong&gt;multimodal models&lt;/strong&gt; to reason from images and documents.&lt;/p&gt;

&lt;p&gt;Building Wise taught us that the future isn't just about bigger models, but about smarter, more empathetic architectures. We're excited to continue building that future.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! You can check out our project on Devpost and see our final demo video [Here - Link to come].&lt;/em&gt;&lt;/p&gt;

</description>
      <category>adkhackathon</category>
      <category>ai</category>
      <category>agenticai</category>
      <category>googlecloud</category>
    </item>
    <item>
      <title>Beyond Basic Practice: Creating the JobSage AI Interview Simulator with Gemini &amp; Embeddings</title>
      <dc:creator>David Angaya</dc:creator>
      <pubDate>Fri, 11 Apr 2025 17:56:34 +0000</pubDate>
      <link>https://dev.to/david_angaya_e7156aa5266d/beyond-basic-practice-creating-the-jobsage-ai-interview-simulator-with-gemini-embeddings-2c93</link>
      <guid>https://dev.to/david_angaya_e7156aa5266d/beyond-basic-practice-creating-the-jobsage-ai-interview-simulator-with-gemini-embeddings-2c93</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;: &lt;strong&gt;The Interview Gauntlet &amp;amp; The Feedback Gap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Technical interviews, especially for top companies like those in FAANG, are notoriously challenging. Preparing effectively often feels like navigating a maze blindfolded. While resources like LeetCode hone algorithmic skills, they often miss crucial aspects: How clear was my explanation? Did I cover the key concepts? How do I stack up against other candidates? Standard practice tools provide questions, but rarely offer the deep, personalized, and actionable feedback needed to truly improve.&lt;br&gt;
This gap in feedback and personalized guidance was the inspiration for JobSage, my Google Gen AI Intensive Capstone project. My goal was to build an AI-powered mock interview coach that goes beyond simple Q&amp;amp;A, providing a more insightful, engaging, and actionable practice experience designed specifically for roles like Data Science and Machine Learning Engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;JobSage: What Makes It Different?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Instead of just presenting questions and checking answers, JobSage integrates several features powered by Generative AI to simulate a more comprehensive coaching experience:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 Granular, Multi-Dimensional Feedback&lt;/strong&gt;: Moves beyond a simple "correct/incorrect" or basic similarity score. JobSage evaluates answers on Content Accuracy/Relevance, Clarity, and Technical Depth using AI assessment.&lt;br&gt;
&lt;strong&gt;2 Adaptive Difficulty&lt;/strong&gt;: The interview adjusts (in simulation) based on performance, presenting easier or harder questions to keep the user appropriately challenged.&lt;br&gt;
&lt;strong&gt;3 Skill Tracking &amp;amp; Benchmarking&lt;/strong&gt;: Identifies relevant skills for each question, tracks performance per skill, and provides a benchmark against simulated FAANG applicant norms (e.g., "Estimated Top 25%").&lt;br&gt;
&lt;strong&gt;4 Gamification&lt;/strong&gt;: Incorporates points, badges, and leaderboard context to make practice more engaging.&lt;br&gt;
Actionable Recommendations: Provides targeted study tips for weak areas, potential resume tweak suggestions based on performance, and relevant job recommendations upon "passing" the mock session.&lt;br&gt;
&lt;strong&gt;5 Negotiation Simulation&lt;/strong&gt;: Includes a module to practice salary negotiation scenarios with AI-generated dialogue and feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Under the Hood: Leveraging Gemini and Embeddings&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Building JobSage involved integrating several key GenAI techniques, primarily using the Google Gemini API (gemini-1.5-flash) and Sentence Transformers embeddings (all-MiniLM-L6-v2).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Embeddings: The Backbone of Understanding&lt;/strong&gt;&lt;br&gt;
Sentence Transformers are fantastic for capturing the semantic meaning of text in dense numerical vectors. In JobSage, embeddings are used in multiple ways via the &lt;code&gt;get_text_embedding function&lt;/code&gt;:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &lt;strong&gt;Content Similarity&lt;/strong&gt;: We calculate the cosine similarity between the embedding of a user's answer and the embedding of pre-defined "ideal answer points". This gives a quantitative score (&lt;code&gt;similarity_score&lt;/code&gt;) reflecting how closely the user's answer matches the core concepts, forming one component of the evaluation.

&lt;p&gt;&lt;strong&gt;RAG for Job Recommendations&lt;/strong&gt;: This is a core RAG application. The user's entire CV text is embedded. This CV embedding is then used as a query vector to find the most similar job descriptions from a pre-embedded list (&lt;code&gt;jobs_df['embeddings']&lt;/code&gt;) using cosine similarity. The &lt;code&gt;recommend_jobs&lt;/code&gt; function implements this semantic retrieval.&lt;br&gt;
&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Simplified embedding usage for similarity&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;from sentence_transformers import util&lt;br&gt;
Assuming user_embedding and ideal_embedding are numpy arrays&lt;br&gt;
similarity_score = util.pytorch_cos_sim(user_embedding, ideal_embedding).item() * 10&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Gemini API: The Multi-Talented "Brain"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Gemini API powers most of the generative and evaluative tasks:&lt;br&gt;
     &lt;strong&gt;AI-Powered Evaluation (&lt;code&gt;evaluate_answer&lt;/code&gt;):&lt;/strong&gt; This is perhaps the most interesting use. Instead of just checking keywords or similarity, Gemini acts as an expert interviewer. We use a structured prompt asking it to score the user's answer on Content, Clarity, and Depth (each out of 10) and provide specific textual feedback and suggestions for each dimension.&lt;/p&gt;

&lt;p&gt;This leverages Gemini's understanding to provide nuanced scoring and feedback far beyond simple metrics. We parse the scores and feedback from the response text.&lt;/p&gt;

&lt;p&gt;`Task: Evaluate the user's interview answer based on Content, Clarity, and Depth.&lt;br&gt;
Instructions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Content Score: Evaluate accuracy/correctness... Score 0-10. Provide rationale then 'Content Score: X/10'.&lt;/li&gt;
&lt;li&gt;Clarity Score: Evaluate clear phrasing/structure... Score 0-10. Provide rationale then 'Clarity Score: X/10'.&lt;/li&gt;
&lt;li&gt;Depth Score: Evaluate thoroughness/nuance... Score 0-10. Provide rationale then 'Depth Score: X/10'.&lt;/li&gt;
&lt;li&gt;Overall Feedback: Provide 2-3 sentences... Start with 'Overall Feedback:'.
Question: "{question_text}"
Expected Answer Points/Keywords: "{ideal_answer_points}"
Candidate's Answer: "{user_answer}"
Response Format (Use EXACT keywords...):
...&lt;code&gt;
**Dynamic Follow-up Questions (&lt;/code&gt;generate_follow_up&lt;code&gt;)**: Based on the user's answer, Gemini is prompted to ask a relevant, probing follow-up question, making the interaction feel more conversational.
**CV Skill Extraction (&lt;/code&gt;extract_cv_skills&lt;code&gt;)**: Gemini analyzes the raw CV text and extracts a list of relevant skills in a structured JSON format. This is more robust than basic keyword matching.
**Negotiation Simulation (&lt;/code&gt;simulate_negotiation&lt;code&gt;)**: Gemini generates an entire negotiation dialogue based on role/salary inputs and provides tailored feedback on the candidate's simulated strategy within that dialogue.
**Few-Shot Prompting Attempt (&lt;/code&gt;generate_question&lt;code&gt;)**: To demonstrate this capability, the&lt;/code&gt;generate_question&lt;code&gt;function includes code that formats examples from our question bank and prompts Gemini to generate a new, similar question. While we use predefined questions for evaluation consistency in the demo, this shows the technique.
**3. RAG: Connecting Performance to Opportunities**
Retrieval Augmented Generation concepts are applied in two key ways:
**Job Recommendations**: As mentioned, comparing the CV embedding against job embeddings is a direct application of retrieval based on semantic similarity.
**Study Recommendations**: This uses context-based retrieval. The&lt;/code&gt;recommend_study_topics&lt;code&gt;function identifies the user's weakest skills (derived context from the interview performance) and retrieves relevant study advice from our structured&lt;/code&gt;study_rec_df.`&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Implementation: Kaggle Notebook &amp;amp; Gradio Demo&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The entire project was developed within a Kaggle Notebook, making it self-contained and reproducible. Key libraries included pandas for data management, sentence-transformers for embeddings, google-generativeai for the Gemini API, and gradio for the interactive demo.&lt;br&gt;
The notebook simulates a full interview session, printing out the questions, evaluations, analysis, and recommendations (see Cell 7 output in the notebook).&lt;br&gt;
To provide interactivity, a Gradio interface was built (Cell 9), allowing users to engage with the core interview cycle and the negotiation simulator directly within the notebook's output environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges and Limitations
&lt;/h2&gt;

&lt;p&gt;Building JobSage within the Capstone timeframe came with challenges:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt Engineering&lt;/strong&gt;: Getting Gemini to consistently return structured output (especially the JSON for evaluation scores/feedback) required careful prompt design and iteration. Handling potential API errors or blocked prompts was also necessary.&lt;br&gt;
&lt;strong&gt;Static Data &amp;amp; Simulation&lt;/strong&gt;: Relying on placeholder data for questions, jobs, and benchmarks limits realism. The true power would come from larger, curated databases and real user data (anonymized) for benchmarking.&lt;br&gt;
&lt;strong&gt;Notebook Environment&lt;/strong&gt;: While great for prototyping, implementing features like real-time state updates across Gradio tabs or voice I/O is difficult within a standard notebook.&lt;br&gt;
&lt;strong&gt;Evaluation Complexity&lt;/strong&gt;: Evaluating open-ended technical answers is inherently complex. While the combination of embeddings and LLM assessment provides depth, it's still an approximation of expert human judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Future Vision&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This Capstone project is just the beginning for JobSage. Future steps include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. - Developing a full-stack web application (Flask/FastAPI backend, database, React/Vue frontend).&lt;/li&gt;
&lt;li&gt;2. - Integrating live job APIs.&lt;/li&gt;
&lt;li&gt;3. - Building robust user profiles and persistent storage.&lt;/li&gt;
&lt;li&gt;4. - Refining the AI evaluation and feedback mechanisms.&lt;/li&gt;
&lt;li&gt;5. - Adding voice capabilities.&lt;/li&gt;
&lt;li&gt;6. - Potentially exploring privacy-preserving techniques using local models for certain features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Jobsage demonstrates how multiple GenAI tools can be orchestrated to create a significantly improved interview preparation experience. By providing detailed, AI-driven feedback, personalized recommendations, and engaging features, it aims to empower job seekers to approach technical interviews with more confidence and insight. This project was a fantastic learning experience during the Google GenAI Intensive course, highlighting the practical power of embeddings, LLMs, and RAG in solving real-world problems.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gemini</category>
      <category>rag</category>
      <category>vectordatabase</category>
    </item>
  </channel>
</rss>
