Skip to content

Add AI Court Simulation Notebook #690

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

Dhivya-Bharathy
Copy link
Contributor

@Dhivya-Bharathy Dhivya-Bharathy commented Jun 25, 2025

This notebook simulates a simplified courtroom using AI agents powered by GPT-4o-mini. It features a judge, prosecutor, defense attorney, and witness that interact over a 3-day trial. Ideal for demos, it showcases real-time legal roleplay with minimal setup.

Summary by CodeRabbit

  • New Features
    • Introduced an AI-powered chatbot assistant for answering questions about Chilean government services, featuring multilingual translation and web search capabilities.
    • Added a cybersecurity agent tool to automate the search, filtering, and validation of Proof of Concept (PoC) exploits for CVE vulnerabilities, including example workflows and validation logic.

Copy link
Contributor

coderabbitai bot commented Jun 25, 2025

Walkthrough

Two new Jupyter notebooks have been introduced. The first implements an AI chatbot assistant for answering questions about Chilean government services, integrating translation and web search functionalities. The second notebook provides a lightweight cybersecurity agent that automates the validation of Proof of Concept exploits for CVE vulnerabilities using minimal agent classes and a guided workflow.

Changes

File(s) Change Summary
examples/cookbooks/Chile_Government_Services_Assistant.ipynb Added notebook implementing a multilingual AI chatbot assistant for Chilean government services using Firecrawl and translation tools.
examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb Added notebook introducing a cybersecurity agent for PoC exploit validation and attack intent extraction for CVEs.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Chatbot ("Tomás")
    participant FirecrawlTool
    participant Translator

    User->>Chatbot: Enter query
    Chatbot->>Translator: Translate query to Spanish
    Translator-->>Chatbot: Spanish query
    Chatbot->>FirecrawlTool: Search government services
    FirecrawlTool-->>Chatbot: Search results (Spanish)
    Chatbot->>Translator: Translate results to English
    Translator-->>Chatbot: English results
    Chatbot-->>User: Present results
Loading
sequenceDiagram
    participant User
    participant PockyAgent
    participant AttackIntentAgent
    participant ValidationAgent

    User->>PockyAgent: Provide CVE ID
    PockyAgent->>AttackIntentAgent: Extract attack intent from CVE description
    AttackIntentAgent-->>PockyAgent: Attack intent
    PockyAgent->>ValidationAgent: Validate PoC against attack intent
    ValidationAgent-->>PockyAgent: Validation result (JSON)
    PockyAgent-->>User: Display result
Loading

Suggested labels

Review effort 2/5

Poem

A rabbit hops through code anew,
With Tomás to guide Chile’s queue,
And Pocky checks the PoC’s might,
Ensuring cyber flaws take flight.
From languages swapped to exploits caught,
These notebooks bring what coders sought!
🐇✨


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @Dhivya-Bharathy, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces two new AI-powered Jupyter notebooks into the examples/cookbooks directory. One notebook focuses on providing an AI assistant for government services, while the other demonstrates an AI agent for cybersecurity Proof-of-Concept (PoC) search and validation. It's important to note that the pull request title and description refer to a 'Legalia Ai Mini Court Notebook,' which is not present in the actual changes provided in the patch.

Highlights

  • New Cookbook: Chile Government Services Assistant: A new Jupyter notebook (Chile_Government_Services_Assistant.ipynb) has been added. This notebook showcases an AI chatbot designed to answer questions about Chilean government services, utilizing the Firecrawl API for web content retrieval and deep-translator for language translation.
  • New Cookbook: Pocky Cybersecurity PoC Agent: Another new Jupyter notebook (Pocky_Cybersecurity_PoC_Agent.ipynb) is included. This notebook demonstrates an AI agent capable of automating the search and validation of CVE Proof-of-Concept (PoC) exploits, featuring dummy implementations for attack intent extraction and PoC validation.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces two new Jupyter notebooks: Chile_Government_Services_Assistant.ipynb and Pocky_Cybersecurity_PoC_Agent.ipynb. The Chile_Government_Services_Assistant.ipynb notebook demonstrates an AI chatbot for Chilean government services, while the Pocky_Cybersecurity_PoC_Agent.ipynb notebook showcases a cybersecurity PoC search and validation agent. Both notebooks are well-structured for demo purposes, clearly indicating placeholder logic where real implementations would go. My review identified a few areas in the Chile Government Services Assistant notebook where code readability and error handling robustness could be improved, primarily by reducing redundancy and adopting a more explicit exception-based error management approach.

Comment on lines +149 to +166
" if search_result and hasattr(search_result, 'data') and search_result.data:\n",
" filtered_results = [\n",
" result for result in search_result.data\n",
" if str(result.get(\"url\", \"\")).startswith(\"https://www.chileatiende.gob.cl/fichas\") and not str(result.get(\"url\", \"\")).endswith(\"pdf\")\n",
" ]\n",
" if filtered_results:\n",
" for num, result in enumerate(filtered_results, start=1):\n",
" response_md += self.template.format(\n",
" result_number=num,\n",
" page_title=str(result.get(\"title\", \"\")),\n",
" page_url=str(result.get(\"url\", \"\")),\n",
" page_content=str(result.get(\"markdown\", \"\"))\n",
" )\n",
" return response_md\n",
" else:\n",
" return None\n",
" else:\n",
" return None\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The return None statements are duplicated within this method. This logic can be simplified by assigning search_result.data to a variable and then checking filtered_results once, reducing redundancy and improving readability.

            search_result_data = search_result.data if search_result and hasattr(search_result, 'data') else None
            if search_result_data:
                filtered_results = [
                    result for result in search_result_data
                    if str(result.get("url", "")).startswith("https://www.chileatiende.gob.cl/fichas") and not str(result.get("url", "")).endswith("pdf")
                ]
                if filtered_results:
                    for num, result in enumerate(filtered_results, start=1):
                        response_md += self.template.format(
                            result_number=num,
                            page_title=str(result.get("title", "")),
                            page_url=str(result.get("url", "")),
                            page_content=str(result.get("markdown", ""))
                        )
                    return response_md
            return None

Comment on lines +167 to +168
" except Exception as e:\n",
" return f\"Error during search: {e}\""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Returning an error message as a string makes error handling in the calling code brittle, as it relies on string matching ("Error" not in spanish_answer). It's generally better practice to raise an exception for unexpected errors, allowing the caller to handle different error conditions explicitly. This improves robustness and clarity.

        except Exception as e:
            raise RuntimeError(f"Firecrawl search failed: {e}")

Comment on lines +272 to +283
" spanish_answer = firecrawl_tool.search(spanish_query)\n",
"\n",
" # Only translate if we got a real answer\n",
" if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and \"Error\" not in spanish_answer:\n",
" try:\n",
" english_answer = translate_to_english(spanish_answer)\n",
" print(\"\\nTomás (in English):\\n\", english_answer)\n",
" except Exception as e:\n",
" print(f\"\\nTomás: I found information, but couldn't translate it. Here it is in Spanish:\\n{spanish_answer}\\n(Translation error: {e})\")\n",
" else:\n",
" print(\"\\nTomás: Sorry, I couldn't find relevant information. Try rephrasing your question or ask about another service.\")"
]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Following up on the previous comment, instead of checking for the string 'Error' in the response, it's more robust to catch specific exceptions raised by the firecrawl_tool.search method. This allows for clearer separation of error conditions (e.g., API errors vs. no results found) and more precise error messages to the user.

    try:
        spanish_query = translate_to_spanish(user_input)
        spanish_answer = firecrawl_tool.search(spanish_query)
        if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip():
            try:
                english_answer = translate_to_english(spanish_answer)
                print("\nTomás (in English):\n", english_answer)
            except Exception as e:
                print(f"\nTomás: I found information, but couldn't translate it. Here it is in Spanish:\n{spanish_answer}\n(Translation error: {e})")
        else:
            print("\nTomás: Sorry, I couldn't find relevant information. Try rephrasing your question or ask about another service.")
    except RuntimeError as e:
        print(f"\nTomás: An error occurred during the search: {e}. Please try again later.")
    except Exception as e:
        print(f"\nTomás: An unexpected error occurred: {e}. Please try again later.")

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (4)
examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb (1)

78-80: Security: Avoid hardcoded API key placeholders.

The notebook contains placeholder API keys that users might accidentally commit. Consider using more obvious placeholder text or adding warning comments.

-os.environ["EXA_API_KEY"] = "your api key"
-os.environ["OPENAI_API_KEY"] = "your api key"
+os.environ["EXA_API_KEY"] = "YOUR_EXA_API_KEY_HERE"  # Replace with your actual API key
+os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY_HERE"  # Replace with your actual API key
examples/cookbooks/Chile_Government_Services_Assistant.ipynb (3)

69-70: Security: API key exposure risk.

Similar to the other notebook, the API key placeholders could be accidentally committed with real values.

-os.environ['FIRECRAWL_API_KEY'] = "your api key here"
-os.environ['OPENAI_API_KEY'] = "your api key here"
+os.environ['FIRECRAWL_API_KEY'] = "YOUR_FIRECRAWL_API_KEY_HERE"  # Replace with your actual API key
+os.environ['OPENAI_API_KEY'] = "YOUR_OPENAI_API_KEY_HERE"  # Replace with your actual API key

138-139: Input validation could be more robust.

The search query validation only checks length but doesn't validate content quality or sanitize input.

     def search(self, search: str) -> str:
-        if not search or len(search) < 5:
-            return "Error: Please provide a valid search query (at least 5 characters)."
+        if not search or len(search.strip()) < 5:
+            return "Error: Please provide a valid search query (at least 5 characters)."
+        
+        # Basic sanitization
+        search = search.strip()
+        if not search.replace(' ', '').isalnum():
+            return "Error: Search query contains invalid characters."

150-153: URL filtering logic is too restrictive.

The filtering only allows URLs starting with a specific government domain and excludes PDFs. This might miss relevant information from other authoritative sources.

Consider expanding the filter to include other Chilean government domains:

                 filtered_results = [
                     result for result in search_result.data
-                    if str(result.get("url", "")).startswith("https://www.chileatiende.gob.cl/fichas") and not str(result.get("url", "")).endswith("pdf")
+                    if (str(result.get("url", "")).startswith("https://www.chileatiende.gob.cl/") or 
+                        str(result.get("url", "")).startswith("https://www.gob.cl/")) and 
+                        not str(result.get("url", "")).endswith("pdf")
                 ]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2f3ce5c and a48b926.

📒 Files selected for processing (2)
  • examples/cookbooks/Chile_Government_Services_Assistant.ipynb (1 hunks)
  • examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: quick-test
  • GitHub Check: test-core (3.11)
  • GitHub Check: test-examples
  • GitHub Check: Run tests and collect coverage
  • GitHub Check: performance-test
  • GitHub Check: GitGuardian Security Checks
🔇 Additional comments (6)
examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb (2)

1-232: Major inconsistency with PR objectives.

This notebook implements a cybersecurity PoC validation tool, but the PR objectives clearly state this should be a "Legalia Ai Mini Court Notebook" that simulates a courtroom environment with legal roles. The delivered content doesn't match the intended purpose.

Likely an incorrect or invalid review comment.


55-55: ```shell
#!/bin/bash

Check available versions for each package individually

packages=(praisonaiagents exa-py python-dotenv requests beautifulsoup4)
for pkg in "${packages[@]}"; do
echo -e "\n=== $pkg ==="
pip index versions "$pkg" || echo "⚠️ Unable to fetch versions for $pkg"
done


</details>
<details>
<summary>examples/cookbooks/Chile_Government_Services_Assistant.ipynb (4)</summary>

`1-300`: **Major inconsistency with PR objectives.**

This notebook implements a Chilean government services assistant, which doesn't align with the PR objectives of creating a "Legalia Ai Mini Court Notebook" for courtroom simulation.




> Likely an incorrect or invalid review comment.

---

`94-109`: **Good error handling in translation functions.**

The translation functions properly handle exceptions and provide fallback behavior, which is essential for a user-facing application.

---

`131-132`: **Good input validation in FirecrawlTool constructor.**

The API key validation prevents runtime errors and provides clear error messages.

---

`264-283`: **Well-structured main chat loop.**

The chat loop properly handles user input, exit conditions, and error scenarios. The bilingual approach with fallback to Spanish is user-friendly.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment on lines +105 to +118
"class ValidationAgent:\n",
" def __init__(self, input_json):\n",
" self.input_json = input_json\n",
" def run(self):\n",
" # Dummy validation logic for notebook demo\n",
" data = json.loads(self.input_json)\n",
" return True if \"attack_intent\" in data and \"poc_sample\" in data else False\n",
"\n",
"class AttackIntentAgent:\n",
" def __init__(self, description):\n",
" self.description = description\n",
" def run(self):\n",
" # Dummy intent extraction for notebook demo\n",
" return f\"Intent for: {self.description[:50]}...\""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Dummy implementations lack meaningful functionality.

The agent classes are minimal stubs that don't demonstrate real functionality. The ValidationAgent.run() method only checks for JSON keys existence, and AttackIntentAgent.run() returns a truncated string.

Consider implementing more realistic demo logic that shows the intended workflow:

 class ValidationAgent:
     def __init__(self, input_json):
         self.input_json = input_json
     def run(self):
-        # Dummy validation logic for notebook demo
-        data = json.loads(self.input_json)
-        return True if "attack_intent" in data and "poc_sample" in data else False
+        # Enhanced demo validation logic
+        try:
+            data = json.loads(self.input_json)
+            if "attack_intent" in data and "poc_sample" in data:
+                # Simulate basic validation checks
+                poc = data["poc_sample"].lower()
+                intent = data["attack_intent"].lower()
+                # Basic keyword matching for demo
+                return any(keyword in poc for keyword in ["exploit", "payload", "vulnerability"])
+            return False
+        except json.JSONDecodeError:
+            return False
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"class ValidationAgent:\n",
" def __init__(self, input_json):\n",
" self.input_json = input_json\n",
" def run(self):\n",
" # Dummy validation logic for notebook demo\n",
" data = json.loads(self.input_json)\n",
" return True if \"attack_intent\" in data and \"poc_sample\" in data else False\n",
"\n",
"class AttackIntentAgent:\n",
" def __init__(self, description):\n",
" self.description = description\n",
" def run(self):\n",
" # Dummy intent extraction for notebook demo\n",
" return f\"Intent for: {self.description[:50]}...\""
class ValidationAgent:
def __init__(self, input_json):
self.input_json = input_json
def run(self):
# Enhanced demo validation logic
try:
data = json.loads(self.input_json)
if "attack_intent" in data and "poc_sample" in data:
# Simulate basic validation checks
poc = data["poc_sample"].lower()
intent = data["attack_intent"].lower()
# Basic keyword matching for demo
return any(keyword in poc for keyword in ["exploit", "payload", "vulnerability"])
return False
except json.JSONDecodeError:
return False
class AttackIntentAgent:
def __init__(self, description):
self.description = description
def run(self):
# Dummy intent extraction for notebook demo
return f"Intent for: {self.description[:50]}..."
🤖 Prompt for AI Agents
In examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb around lines 105 to
118, the ValidationAgent and AttackIntentAgent classes have placeholder methods
that only perform trivial checks or return simple strings. To fix this, enhance
ValidationAgent.run() to perform actual validation logic on the input JSON, such
as verifying data formats or required fields beyond mere key presence.
Similarly, update AttackIntentAgent.run() to implement a basic intent extraction
or analysis based on the description text, demonstrating a meaningful processing
step rather than just returning a truncated string. This will better illustrate
the intended workflow and functionality.

Comment on lines +174 to +190
"def run_pocky_for_cve(cve_id):\n",
" # Example: Simulate fetching a description and PoC (replace with real logic)\n",
" description = f\"Description for {cve_id} (replace with real Exa/OpenAI search)\"\n",
" poc_sample = f\"PoC code for {cve_id} (replace with real PoC search)\"\n",
"\n",
" # Stage 2: Attack Intent\n",
" intent = AttackIntentAgent(description).run()\n",
" print(f\"Attack Intent: {intent}\")\n",
"\n",
" # Stage 3: Validation\n",
" validation_input = json.dumps({\"attack_intent\": intent, \"poc_sample\": poc_sample}, indent=2)\n",
" valid = ValidationAgent(validation_input).run()\n",
" print(f\"Validation Result: {valid}\")\n",
" if valid:\n",
" print(f\"PoC for {cve_id} is valid and ready to use.\")\n",
" else:\n",
" print(f\"PoC for {cve_id} failed validation.\")"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Main function uses only placeholder data.

The run_pocky_for_cve function doesn't integrate with the imported APIs (OpenAI, Exa) and only uses hardcoded placeholder strings, making it ineffective for demonstration purposes.

Implement basic integration with the imported APIs to make the demo functional:

 def run_pocky_for_cve(cve_id):
-    # Example: Simulate fetching a description and PoC (replace with real logic)
-    description = f"Description for {cve_id} (replace with real Exa/OpenAI search)"
-    poc_sample = f"PoC code for {cve_id} (replace with real PoC search)"
+    # Basic demo integration with Exa search
+    try:
+        exa = Exa(api_key=os.environ.get("EXA_API_KEY"))
+        search_results = exa.search(f"CVE {cve_id} proof of concept", num_results=1)
+        description = search_results.results[0].text if search_results.results else f"No description found for {cve_id}"
+        poc_sample = f"PoC sample for {cve_id} (extracted from search results)"
+    except Exception as e:
+        description = f"Error fetching description for {cve_id}: {e}"
+        poc_sample = f"Error fetching PoC for {cve_id}"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"def run_pocky_for_cve(cve_id):\n",
" # Example: Simulate fetching a description and PoC (replace with real logic)\n",
" description = f\"Description for {cve_id} (replace with real Exa/OpenAI search)\"\n",
" poc_sample = f\"PoC code for {cve_id} (replace with real PoC search)\"\n",
"\n",
" # Stage 2: Attack Intent\n",
" intent = AttackIntentAgent(description).run()\n",
" print(f\"Attack Intent: {intent}\")\n",
"\n",
" # Stage 3: Validation\n",
" validation_input = json.dumps({\"attack_intent\": intent, \"poc_sample\": poc_sample}, indent=2)\n",
" valid = ValidationAgent(validation_input).run()\n",
" print(f\"Validation Result: {valid}\")\n",
" if valid:\n",
" print(f\"PoC for {cve_id} is valid and ready to use.\")\n",
" else:\n",
" print(f\"PoC for {cve_id} failed validation.\")"
def run_pocky_for_cve(cve_id):
# Basic demo integration with Exa search
try:
exa = Exa(api_key=os.environ.get("EXA_API_KEY"))
search_results = exa.search(f"CVE {cve_id} proof of concept", num_results=1)
description = search_results.results[0].text if search_results.results else f"No description found for {cve_id}"
poc_sample = f"PoC sample for {cve_id} (extracted from search results)"
except Exception as e:
description = f"Error fetching description for {cve_id}: {e}"
poc_sample = f"Error fetching PoC for {cve_id}"
# Stage 2: Attack Intent
intent = AttackIntentAgent(description).run()
print(f"Attack Intent: {intent}")
# Stage 3: Validation
validation_input = json.dumps({"attack_intent": intent, "poc_sample": poc_sample}, indent=2)
valid = ValidationAgent(validation_input).run()
print(f"Validation Result: {valid}")
if valid:
print(f"PoC for {cve_id} is valid and ready to use.")
else:
print(f"PoC for {cve_id} failed validation.")
🤖 Prompt for AI Agents
In examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb around lines 174 to
190, the run_pocky_for_cve function uses only placeholder strings for
description and PoC instead of calling the imported OpenAI and Exa APIs. To fix
this, replace the hardcoded description and poc_sample with actual calls to the
OpenAI and Exa APIs to fetch real data based on the cve_id, ensuring the
function demonstrates meaningful integration and functionality.

Comment on lines +275 to +276
" if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and \"Error\" not in spanish_answer:\n",
" try:\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Potential issue with error detection.

The condition "Error" not in spanish_answer for error detection is fragile and could produce false positives if legitimate content contains the word "Error".

-    if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and "Error" not in spanish_answer:
+    if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and not spanish_answer.startswith("Error"):
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
" if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and \"Error\" not in spanish_answer:\n",
" try:\n",
if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and not spanish_answer.startswith("Error"):
try:
🤖 Prompt for AI Agents
In examples/cookbooks/Chile_Government_Services_Assistant.ipynb around lines 275
to 276, the current error detection condition checks if the string "Error" is
not in spanish_answer, which is fragile and may cause false positives. Replace
this check with a more robust error detection mechanism, such as using a
specific error flag, error code, or a more precise pattern matching to reliably
identify actual errors without misclassifying valid content.

Copy link

codecov bot commented Jun 25, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 14.50%. Comparing base (e9f23e1) to head (a48b926).
Report is 170 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #690   +/-   ##
=======================================
  Coverage   14.50%   14.50%           
=======================================
  Files          25       25           
  Lines        2517     2517           
  Branches      357      357           
=======================================
  Hits          365      365           
  Misses       2136     2136           
  Partials       16       16           
Flag Coverage Δ
quick-validation 0.00% <ø> (ø)
unit-tests 14.50% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Dhivya-Bharathy Dhivya-Bharathy changed the title Add Legalia Ai Mini Court Notebook Add AI Court Simulation Notebook Jun 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant