<?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: sweety</title>
    <description>The latest articles on DEV Community by sweety (@sweetyhjh223).</description>
    <link>https://dev.to/sweetyhjh223</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3948191%2F6fdc2e32-9282-49a5-a19c-a3ebe4851369.png</url>
      <title>DEV Community: sweety</title>
      <link>https://dev.to/sweetyhjh223</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sweetyhjh223"/>
    <language>en</language>
    <item>
      <title>The One Line That Deleted All My JSON Parsing Code</title>
      <dc:creator>sweety</dc:creator>
      <pubDate>Mon, 29 Jun 2026 12:32:49 +0000</pubDate>
      <link>https://dev.to/sweetyhjh223/the-one-line-that-deleted-all-my-json-parsing-code-3mmm</link>
      <guid>https://dev.to/sweetyhjh223/the-one-line-that-deleted-all-my-json-parsing-code-3mmm</guid>
      <description>&lt;h1&gt;
  
  
  I Was Stuck for Hours. Then I Found &lt;code&gt;response_schema&lt;/code&gt;.
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;A real story from building K-Trust — my AI merchant compliance tool&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Okay so let me be honest.&lt;/p&gt;

&lt;p&gt;When I started building K-Trust, I thought the hard part would be the AI logic. The prompts, the scoring rubric, the compliance summary. That stuff.&lt;/p&gt;

&lt;p&gt;I did not expect to spend hours fighting with JSON.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem I Kept Running Into
&lt;/h2&gt;

&lt;p&gt;The idea behind K-Trust was simple — send raw merchant data to Gemini, get back a structured risk report. Trust score, risk level, legal status, summary. Clean. Predictable.&lt;/p&gt;

&lt;p&gt;Except it wasn't.&lt;/p&gt;

&lt;p&gt;My first approach was the obvious one — just tell Gemini what to return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Analyze this merchant and return a JSON with:
- trust_score (int)
- risk_level (string)
- legal_status (boolean)
- summary (string)
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes it worked perfectly. Sometimes Gemini returned this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Sure!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Here's&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;compliance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;report:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;```json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trust_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And my &lt;code&gt;json.loads()&lt;/code&gt; would crash.&lt;/p&gt;

&lt;p&gt;So I added &lt;code&gt;.strip()&lt;/code&gt;. Then &lt;code&gt;.replace("&lt;/code&gt;`&lt;code&gt;json", "")&lt;/code&gt;. Then a whole &lt;code&gt;try/except&lt;/code&gt; block. Then another one. I was writing more parsing code than actual feature code and it still broke randomly.&lt;/p&gt;

&lt;p&gt;I remember staring at my terminal thinking — &lt;em&gt;there has to be a better way.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Rabbit Hole That Saved Me
&lt;/h2&gt;

&lt;p&gt;I went back to the &lt;a href="https://ai.google.dev/gemini-api/docs/structured-output" rel="noopener noreferrer"&gt;Google Gemini API docs&lt;/a&gt; — properly this time, not just skimming. And buried in the structured output section, I found something I had completely missed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can pass a Pydantic model as &lt;code&gt;response_schema&lt;/code&gt; to enforce the exact output shape.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wait. You can &lt;em&gt;enforce&lt;/em&gt; it? Not just ask nicely?&lt;/p&gt;

&lt;p&gt;I also found this mentioned in the &lt;a href="https://googleapis.github.io/python-genai/" rel="noopener noreferrer"&gt;Google GenAI Python SDK docs&lt;/a&gt; with actual code examples. I read through the &lt;a href="https://docs.pydantic.dev/latest/concepts/models/" rel="noopener noreferrer"&gt;Pydantic BaseModel docs&lt;/a&gt; to understand how to define the schema properly.&lt;/p&gt;

&lt;p&gt;And then I tried it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Moment Everything Clicked
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 — I defined exactly what I wanted Gemini to return
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;python&lt;br&gt;
from pydantic import BaseModel&lt;/p&gt;

&lt;p&gt;class GeminiReport(BaseModel):&lt;br&gt;
    trust_score: int&lt;br&gt;
    risk_level: str&lt;br&gt;
    risk_tags: list[str]&lt;br&gt;
    legal_status: bool&lt;br&gt;
    financial_risk: bool&lt;br&gt;
    sentiment_score: bool&lt;br&gt;
    executive_stability: bool&lt;br&gt;
    summary: str&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 — I passed it directly to Gemini as &lt;code&gt;response_schema&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;python&lt;br&gt;
ai_response = client.models.generate_content(&lt;br&gt;
    model="gemini-2.5-flash",&lt;br&gt;
    contents=prompt,&lt;br&gt;
    config=types.GenerateContentConfig(&lt;br&gt;
        response_mime_type="application/json",&lt;br&gt;
        response_schema=GeminiReport,  # Gemini MUST match this shape&lt;br&gt;
    ),&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;structured_data = json.loads(ai_response.text)&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And that was it.&lt;/p&gt;

&lt;p&gt;No markdown stripping. No defensive parsing. No random crashes at 2am.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;structured_data&lt;/code&gt; came back perfectly typed every single time. &lt;code&gt;trust_score&lt;/code&gt; was always an &lt;code&gt;int&lt;/code&gt;. &lt;code&gt;legal_status&lt;/code&gt; was always a &lt;code&gt;bool&lt;/code&gt;. The fields were always exactly what I defined.&lt;/p&gt;

&lt;p&gt;I literally said "oh" out loud when it worked the first time.&lt;/p&gt;




&lt;h2&gt;
  
  
  What My Final K-Trust Endpoint Looks Like
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;python&lt;br&gt;
@app.post("/audit")&lt;br&gt;
async def run_audit(request: AuditRequest):&lt;br&gt;
    # 1. Look up merchant data&lt;br&gt;
    merchant = MARKET_DB["merchants"].get(request.merchant_id)&lt;br&gt;
    if not merchant:&lt;br&gt;
        raise HTTPException(status_code=404, detail="Merchant not found.")&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 2. Build prompt with raw business data
raw = merchant["raw_data"]
prompt = f"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Audit this merchant and return a compliance report.&lt;br&gt;
Company: {merchant["company_name"]}&lt;br&gt;
LEGAL RECORDS: {chr(10).join(raw["legal_records"])}&lt;br&gt;
FINANCIAL SIGNALS: {chr(10).join(raw["financial_signals"])}&lt;br&gt;
"""&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 3. Gemini returns perfectly structured data — every time
ai_response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=prompt,
    config=types.GenerateContentConfig(
        response_mime_type="application/json",
        response_schema=GeminiReport,
    ),
)

structured_data = json.loads(ai_response.text)
return {"status": "success", "data": structured_data}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Clean. No drama.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Before finding this, I thought structured LLM output was always going to be messy. That defensive parsing was just... the cost of working with AI.&lt;/p&gt;

&lt;p&gt;It's not. You just need the right tool.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The messy way&lt;/th&gt;
&lt;th&gt;The clean way&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hope the LLM follows your prompt&lt;/td&gt;
&lt;td&gt;Enforce the exact output shape&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write layers of parsing code&lt;/td&gt;
&lt;td&gt;Just &lt;code&gt;json.loads()&lt;/code&gt; and done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Random crashes in production&lt;/td&gt;
&lt;td&gt;Consistent output every time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Different field names each run&lt;/td&gt;
&lt;td&gt;Exact Pydantic types guaranteed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you're building anything with Gemini that needs structured output — skip the struggle I went through. Go read the structured output docs first. I wish I had.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources That Helped Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📖 &lt;a href="https://ai.google.dev/gemini-api/docs/structured-output" rel="noopener noreferrer"&gt;Gemini Structured Output Docs&lt;/a&gt; — &lt;em&gt;this is the one that changed everything&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;a href="https://googleapis.github.io/python-genai/" rel="noopener noreferrer"&gt;Google GenAI Python SDK&lt;/a&gt; — &lt;em&gt;real code examples here&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;a href="https://docs.pydantic.dev/latest/concepts/models/" rel="noopener noreferrer"&gt;Pydantic BaseModel Docs&lt;/a&gt; — &lt;em&gt;for defining your schema properly&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;🔗 &lt;a href="https://project-4xzgu-blush.vercel.app" rel="noopener noreferrer"&gt;K-Trust Live Demo&lt;/a&gt; — &lt;em&gt;see the full thing in action&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - 📦 &lt;a href="https://github.com/sweety-HJH223/K-Trust" rel="noopener noreferrer"&gt;K-Trust GitHub&lt;/a&gt; — &lt;em&gt;full source code&lt;/em&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Written by SweetyCodes (Subhashree Behera) — AI &amp;amp; Full-Stack Developer *&lt;/li&gt;
&lt;li&gt;Currently building AI-powered web apps and learning Korean *&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>genai</category>
      <category>gemini</category>
      <category>api</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built an AI That Researches How Your Target Company Interviews — Then Simulates It</title>
      <dc:creator>sweety</dc:creator>
      <pubDate>Mon, 08 Jun 2026 13:58:21 +0000</pubDate>
      <link>https://dev.to/sweetyhjh223/i-built-an-ai-that-researches-how-your-target-company-interviews-then-simulates-it-pi3</link>
      <guid>https://dev.to/sweetyhjh223/i-built-an-ai-that-researches-how-your-target-company-interviews-then-simulates-it-pi3</guid>
      <description>&lt;p&gt;canonical_url: &lt;a href="https://velog.io/@sweety_jh223/InterviewLense" rel="noopener noreferrer"&gt;https://velog.io/@sweety_jh223/InterviewLense&lt;/a&gt;&lt;br&gt;
🔗 Live: &lt;a href="https://interview-lense.vercel.app" rel="noopener noreferrer"&gt;https://interview-lense.vercel.app&lt;/a&gt;&lt;br&gt;
📦 GitHub: &lt;a href="https://github.com/sweety-HJH223/InterviewLense" rel="noopener noreferrer"&gt;https://github.com/sweety-HJH223/InterviewLense&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Most interview prep tools give you the same generic questions regardless of where you're applying. &lt;em&gt;"Tell me about yourself." "What's your greatest weakness?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It doesn't matter if you're interviewing at Google or a 10-person startup — you get the same list. Most simulators are "one-size-fits-all": they ignore your unique career history and fail to provide the real-world feedback needed to actually pass a high-stakes interview at a top-tier tech firm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But interviews are NOT the same across companies:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google wants reasoning processes over perfect answers.&lt;/li&gt;
&lt;li&gt;Amazon scores everything against 16 Leadership Principles.&lt;/li&gt;
&lt;li&gt;Kakao/Naver expect specific Korean-market-scale product thinking.&lt;/li&gt;
&lt;li&gt;Toss focuses on speed of execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted a tool that actually knows this. So I built &lt;strong&gt;InterviewLens&lt;/strong&gt;.&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%2F3ok6sfhwifoql32o27ei.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%2F3ok6sfhwifoql32o27ei.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&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%2Fz3agnxvdkm15glbj1guz.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%2Fz3agnxvdkm15glbj1guz.png" alt=" " width="799" height="362"&gt;&lt;/a&gt;&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%2Fvlvo0cm0wfoqgtovrxsg.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%2Fvlvo0cm0wfoqgtovrxsg.png" alt=" " width="799" height="359"&gt;&lt;/a&gt;&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%2Fnbia7e7stv5qkitx0f28.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%2Fnbia7e7stv5qkitx0f28.png" alt=" " width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;InterviewLens is an AI-powered simulation engine that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Takes any company name and role.&lt;/li&gt;
&lt;li&gt;Researches that specific company's hiring culture in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NEW — Resume Alignment:&lt;/strong&gt; Upload your PDF or paste your resume, and the AI identifies the specific gaps between your experience and the company's requirements.&lt;/li&gt;
&lt;li&gt;Simulates the interview in that company's actual style.&lt;/li&gt;
&lt;li&gt;Evaluates your answers against the company's specific criteria.&lt;/li&gt;
&lt;li&gt;Maintains a long-term &lt;strong&gt;"memory"&lt;/strong&gt; of your growth across sessions.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The 3-Agent AI Architecture
&lt;/h2&gt;

&lt;p&gt;The heart of InterviewLens is a 3-agent orchestration pipeline built with Google Gemini.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent A — The Researcher
&lt;/h3&gt;

&lt;p&gt;Agent A scans for hiring focus, round structure, and cultural values.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The "Context Engine":&lt;/strong&gt; It doesn't just research the company — it accepts your resume/PDF data and performs a gap analysis between your background and the company's requirements, making the research personalized from the start.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Agent B — The Interviewer
&lt;/h3&gt;

&lt;p&gt;Agent B receives the intelligence from Agent A and becomes that company's actual interviewer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Contextual Interaction:&lt;/strong&gt; Because it receives your resume context, Agent B doesn't ask generic questions. It asks: &lt;em&gt;"You worked on [X] project in your resume — how would you scale that for the traffic [Company] handles?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Agent C — The Evaluator
&lt;/h3&gt;

&lt;p&gt;After you finish, Agent C acts as a "Hiring Committee."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Strict Scoring:&lt;/strong&gt; It penalizes generic "template" answers and rewards candidates who leverage their specific background effectively.&lt;/p&gt;
&lt;/blockquote&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%2Fjmwjz1rxtaw4wp72vplk.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%2Fjmwjz1rxtaw4wp72vplk.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&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%2Fx84i8u614jo5jzl3yjl0.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%2Fx84i8u614jo5jzl3yjl0.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&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%2Feetbqr5z42zoy4819bza.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%2Feetbqr5z42zoy4819bza.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&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%2F8b5akzfwvso1dxstamt2.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%2F8b5akzfwvso1dxstamt2.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&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%2F8yz1an5iww2240fqws5a.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%2F8yz1an5iww2240fqws5a.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Challenges &amp;amp; My Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The performance bottleneck
&lt;/h3&gt;

&lt;p&gt;Initially, researching companies via AI took 10+ seconds, often leading to "Request Timed Out" errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My solution:&lt;/strong&gt; I implemented a Redis-like caching layer using Firebase Firestore. Once a company/role is researched once, subsequent searches are near-instant — solving both latency and quota exhaustion effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Handling unstructured PDF data
&lt;/h3&gt;

&lt;p&gt;Users need resume-tailored questions, but parsing PDFs is messy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My solution:&lt;/strong&gt; I leveraged Gemini 1.5 Flash's multi-modal capability to directly parse PDF resumes, extracting structured data that the interview agent uses for context-aware follow-up questions — no external PDF libraries needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Agentic complexity
&lt;/h3&gt;

&lt;p&gt;Coordinating three distinct AI agents (Researcher, Interviewer, Evaluator) led to prompt injection and state management issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My solution:&lt;/strong&gt; I built a strict orchestration layer that forces a JSON-only output schema. By forcing the models to adhere to a predefined JSON structure, I eliminated parsing failures and enabled smooth state sharing between all three agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Google Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🤖 Google Gemini 1.5 Flash&lt;/td&gt;
&lt;td&gt;Powers all three agents — research, interview simulation, and evaluation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔥 Firebase Firestore&lt;/td&gt;
&lt;td&gt;Session storage, long-term candidate memory, and research cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☁️ Vercel / Next.js&lt;/td&gt;
&lt;td&gt;High-performance, real-time deployment of the simulation interface&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Multi-agent systems are more powerful than single-prompt approaches. By separating Research, Interviewing, and Evaluation, each agent maintains a clear focus.&lt;/p&gt;

&lt;p&gt;The most challenging part was &lt;strong&gt;Resume Alignment&lt;/strong&gt;. Simply "sending the resume" wasn't enough — I had to engineer the prompts to force the AI to compare the candidate's past with the company's future needs. This bridge is what transforms a standard chatbot into an actual coaching tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://interview-lense.vercel.app" rel="noopener noreferrer"&gt;https://interview-lense.vercel.app&lt;/a&gt;&lt;br&gt;
📦 GitHub: &lt;a href="https://github.com/sweety-HJH223/InterviewLense" rel="noopener noreferrer"&gt;https://github.com/sweety-HJH223/InterviewLense&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built for Google Gen AI Academy APAC 2026 — Meet the Builders Campaign.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Subhashree Behera | SweetyCodes — AI &amp;amp; Full Stack Developer, India&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>gemini</category>
      <category>googleaichallenge</category>
    </item>
    <item>
      <title>Hello DEV! 👋 Full-Stack Dev diving into AI Orchestration</title>
      <dc:creator>sweety</dc:creator>
      <pubDate>Sun, 24 May 2026 04:27:38 +0000</pubDate>
      <link>https://dev.to/sweetyhjh223/hello-dev-full-stack-dev-diving-into-ai-orchestration-2721</link>
      <guid>https://dev.to/sweetyhjh223/hello-dev-full-stack-dev-diving-into-ai-orchestration-2721</guid>
      <description>&lt;p&gt;Hey everyone! 👋 &lt;/p&gt;

&lt;p&gt;I'm super excited to finally join the DEV community. I’ve been browsing articles here for a while, but I decided it was time to step out of the shadows, start documenting my build logs, and connect with fellow developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ What I'm working with:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js, React, Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend &amp;amp; Data:&lt;/strong&gt; Python, Django&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The New Frontier:&lt;/strong&gt;  API &amp;amp; Automated AI Orchestration (AI Agents)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m here to learn from the community, swap war stories about debugging, and meet other devs who love building clean, responsive applications. &lt;/p&gt;

&lt;p&gt;let’s connect! What are you currently building this week?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>machinelearning</category>
      <category>react</category>
    </item>
  </channel>
</rss>
