devesh1011 commited on
Commit
4b0553d
·
1 Parent(s): 9b09514

code changes

Browse files
agents/info_extractor_agent.py CHANGED
@@ -1,6 +1,40 @@
1
  from agno.agent import Agent
2
  from agno.models.google import Gemini
3
  from textwrap import dedent
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  info_extractor = Agent(
6
  model=Gemini(id="gemini-2.0-flash-001", response_modalities=["text"]),
@@ -28,5 +62,5 @@ info_extractor = Agent(
28
  9. **Strict JSON Output:** Ensure the output is valid JSON and perfectly matches the structure defined by the `DemoSummary` model. Do not include any extra text or conversational filler outside the JSON.
29
  """
30
  ),
31
- # response_model=DemoSummary,
32
  )
 
1
  from agno.agent import Agent
2
  from agno.models.google import Gemini
3
  from textwrap import dedent
4
+ from pydantic import Field, BaseModel
5
+ from typing import List
6
+
7
+
8
+ class ProductDemoSummary(BaseModel):
9
+ product_name: str = Field(
10
+ ..., description="The name of the product or solution demonstrated."
11
+ )
12
+ prospect_company: str = Field(
13
+ ..., description="The name of the prospective customer's company."
14
+ )
15
+ sales_rep: str = Field(
16
+ ..., description="The name of the sales representative who conducted the demo."
17
+ )
18
+ summary_points: List[str] = Field(
19
+ ..., description="A list of high-level summary points from the demo call."
20
+ )
21
+ pain_points_discussed: List[str] = Field(
22
+ ...,
23
+ description="A list of specific pain points or challenges discussed by the prospect.",
24
+ )
25
+ features_demonstrated: List[str] = Field(
26
+ ...,
27
+ description="A list of specific features demonstrated, including their start and end timestamps.",
28
+ )
29
+ next_steps: List[str] = Field(
30
+ ...,
31
+ description="A list of agreed-upon next steps or action items after the demo.",
32
+ )
33
+ unanswered_questions: List[str] = Field(
34
+ ...,
35
+ description="A list of questions from the prospect that were not fully answered during the call.",
36
+ )
37
+
38
 
39
  info_extractor = Agent(
40
  model=Gemini(id="gemini-2.0-flash-001", response_modalities=["text"]),
 
62
  9. **Strict JSON Output:** Ensure the output is valid JSON and perfectly matches the structure defined by the `DemoSummary` model. Do not include any extra text or conversational filler outside the JSON.
63
  """
64
  ),
65
+ response_model=ProductDemoSummary,
66
  )
agents/site_builder_agent.py CHANGED
@@ -1,73 +1,91 @@
1
  from agno.agent import Agent
2
  from agno.models.google import Gemini
3
  from textwrap import dedent
4
- from pydantic import BaseModel, Field
5
-
6
-
7
- class HtmlContent(BaseModel):
8
- content: str = Field(
9
- ..., description="The generated HTML content for the microsite."
10
- )
11
-
12
 
13
  microsite_builder_agent = Agent(
14
- model=Gemini(id="gemini-2.0-flash-001", response_modalities=["text"]),
15
  description=dedent(
16
  """\
17
- Generates a personalized, interactive HTML microsite from demo call data.
 
18
  It combines structured extracted information with raw transcription details
19
  to create a visually appealing and informative recap page for prospects."""
20
  ),
 
21
  instructions=dedent(
22
- f"""\
23
- You are an expert web developer specializing in creating concise, engaging, and personalized microsites for product demo recaps.
 
 
 
 
 
 
24
 
25
- **Your Task:**
26
- Generate a complete, single-page HTML document for a product demo recap microsite.
27
- The HTML should be fully self-contained (no external CSS files, use Tailwind CSS CDN).
28
- It must be responsive, visually appealing, and **have clean, minimal formatting (avoid excessive newlines or unnecessary whitespace)**.
29
 
30
- **Inputs:**
31
- - `extracted_info_json`: A JSON string containing structured data about the demo (product, prospect, features, pain points, next steps, etc.).
32
- - `raw_transcription`: The full, verbatim transcription of the demo call, including timestamps and speaker identification. This is crucial for creating "Watch this moment" links.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
  **Microsite Structure & Content Requirements:**
35
 
36
- 1. **HTML Boilerplate:** Include `<!DOCTYPE html>`, `<html>`, `<head>`, `<body>`.
37
- 2. **Meta Tags:** Include `viewport` for responsiveness.
38
- 3. **Title:** Use the `product_name` and `prospect_company` for the page title.
39
- 4. **Tailwind CSS:** Load from CDN: `<script src="https://cdn.tailwindcss.com"></script>`.
40
- 5. **Font:** Load Inter font via Google Fonts CDN in `<head>` and apply `font-family: 'Inter', sans-serif;` via a `<style>` block.
41
- 6. **Overall Styling:**
42
- * Use a clean, modern design with `bg-gray-100` for the body.
43
- * Content should be in a white card (`bg-white rounded-lg shadow-md`) with good padding.
44
- * Apply rounded corners to elements.
45
- * Ensure appropriate spacing (padding, margin classes).
46
- * Center text for headers and CTAs.
47
- 7. **Header Section:**
48
- * Prominent `<h1>` for the recap title (e.g., "Recap for [Prospect Company] - [Product Name] Demo").
49
- * `<p>` tag for "Presented by [Sales Rep's Name] ([Product Name])".
50
- 8. **Summary Section (`<section>`):**
51
- * `<h2>` title: "Key Summary Points".
52
- * Unordered list (`<ul>`) with `list-disc list-inside` for `summary_points`.
53
- 9. **Pain Points Discussed Section (`<section>`):**
54
- * `<h2>` title: "Pain Points Discussed".
55
- * Unordered list (`<ul>`) with `list-disc list-inside` for `pain_points_discussed`.
56
- 10. **Features Demonstrated Section (`<section>`):**
57
- * `<h2>` title: "Features Demonstrated".
58
- * If `features_demonstrated` is empty, use a `<p>` tag: "No features were explicitly demonstrated in this call."
59
- * If features exist, use an unordered list (`<ul>`). For each feature:
60
- * Display `name`.
61
- * Create a button/link `<a>` with Tailwind classes (e.g., `inline-block bg-blue-500 hover:bg-blue-600 text-white text-xs font-semibold py-1 px-2 rounded ml-2`) labeled "Watch this moment".
62
- * The `href` for this link MUST be `{{demo_recording_url}}#t={{timestamp_start_in_seconds}}`. Convert `HH:MM:SS` to total seconds for the hash (e.g., 00:00:30 becomes 30).
63
- 11. **Next Steps Section (`<section>`):**
64
- * `<h2>` title: "Next Steps".
65
- * Unordered list (`<ul>`) with `list-disc list-inside` for `next_steps`.
66
- 12. **Call to Action (CTA) (`<div>`):**
67
- * Centered `<div>`.
68
- * A prominent button `<a>` with Tailwind classes (e.g., `bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded`) labeled "Schedule a Follow-Up". This can point to a placeholder link (`#`).
69
- 13. **Strict HTML Output:** Output ONLY the complete HTML document. Do not include any other text, preambles, explanations, or conversational filler outside the HTML. **Ensure minimal newlines and whitespace within the HTML for a compact output.**
70
- """
71
  ),
72
- response_model=HtmlContent, # Agent will return an HtmlContent object containing the raw HTML string
73
  )
 
1
  from agno.agent import Agent
2
  from agno.models.google import Gemini
3
  from textwrap import dedent
4
+ from tools import save_html_to_file, deploy_html_file_with_digest
 
 
 
 
 
 
 
5
 
6
  microsite_builder_agent = Agent(
7
+ model=Gemini(id="gemini-2.0-flash-001"),
8
  description=dedent(
9
  """\
10
+ Generates a personalized, interactive HTML microsite from demo call data,
11
+ saves it to a file, deploys it to Netlify, and returns deployment details.
12
  It combines structured extracted information with raw transcription details
13
  to create a visually appealing and informative recap page for prospects."""
14
  ),
15
+ tools=[save_html_to_file, deploy_html_file_with_digest],
16
  instructions=dedent(
17
+ """\
18
+ You are an expert web developer and deployment specialist.
19
+
20
+ **Your Overall Task:**
21
+ Your goal is to take product demo information, generate an HTML microsite, save it, deploy it to Netlify, and return the deployment details.
22
+
23
+ **Inputs You Will Receive:**
24
+ You will receive a JSON string containing extracted demo information. Parse this to get product_name, prospect_company, sales_rep, summary_points, pain_points_discussed, features_demonstrated, and next_steps.
25
 
26
+ **Step-by-Step Workflow You Must Follow:**
 
 
 
27
 
28
+ 1. **Parse Inputs:**
29
+ * Parse the input JSON to extract all necessary data fields (product_name, prospect_company, etc.).
30
+ * Handle missing fields gracefully with defaults.
31
+
32
+ 2. **Generate HTML Microsite:**
33
+ * Create a complete, single-page HTML document following the requirements below.
34
+ * Make it self-contained with Tailwind CSS via CDN.
35
+
36
+ 3. **Save HTML to File:**
37
+ * Call: save_html_file(html_content="[your generated HTML]")
38
+ * This returns the file path string.
39
+
40
+ 4. **Deploy HTML File to Netlify:**
41
+ * Call: deploy_html_file_with_digest(title="Product Demo Recap", html_file_path="/path/from/step3")
42
+ * EXAMPLE: deploy_html_file_with_digest(title="VisionPro Acme Corp Recap", html_file_path="/home/user/microsites/demo_20250610_123456.html")
43
+ * Use the EXACT file path returned from step 3.
44
+ * Create a descriptive title using product and company names.
45
+ * Do NOT pass access_token parameter.
46
+
47
+ 5. **Return Deployment Information:**
48
+ * Return ONLY the deployment result dictionary from step 4, nothing else.
49
+ * Do NOT include file paths, HTML content, or any other text.
50
+ * Do NOT concatenate or combine any other information with the deployment result.
51
+ * Your response must be EXACTLY the dictionary returned by the deploy_html_file_with_digest tool.
52
 
53
  **Microsite Structure & Content Requirements:**
54
 
55
+ 1. **Core HTML:** Standard `<!DOCTYPE html>`, `<html lang="en">`, `<head>`, `<body>`.
56
+ 2. **Meta:** UTF-8 charset, responsive viewport.
57
+ 3. **Title:** Dynamic, e.g., "Demo Recap: [Product Name] for [Prospect Company]".
58
+ 4. **CSS:** Tailwind CSS via CDN.
59
+ 5. **Font:** Modern sans-serif (e.g., Inter, Nunito) via CDN, applied to body.
60
+ 6. **Layout:** Centered main content, consistent spacing, good readability.
61
+ 7. **Header:**
62
+ * `<h1>`: "Demo Recap: [Product Name] for [Prospect Company]".
63
+ * `<p>`: "Presented by: [Sales Rep's Name] | Date: [Current Date]".
64
+ 8. **Sections:** Logical blocks (`<section>`) for Summary, Pain Points, Features, Next Steps.
65
+ * `<h2>`: Clear titles for each section.
66
+ 9. **Summary:** Unordered list of `summary_points`.
67
+ 10. **Pain Points:** Unordered list of `pain_points_discussed`.
68
+ 11. **Features Demonstrated:**
69
+ * Handle empty/missing `features_demonstrated` gracefully.
70
+ * For each feature: display `name`.
71
+ * Convert `timestamp_start_hh_mm_ss` to total seconds.
72
+ * Link/button: "Watch this moment", `href="{{demo_recording_url}}#t={{timestamp_in_seconds}}"`.
73
+ 12. **Next Steps:** Unordered list of `next_steps`.
74
+ 13. **Call to Action (CTA):** Prominent button, e.g., "Schedule a Follow-Up".
75
+ 14. **Footer (Optional):** Simple copyright or generated by notice.
76
+
77
+ **Visual Appeal & Modern Design Principles:**
78
+
79
+ * **Overall:** Polished, trustworthy, modern SaaS feel. Clarity and premium feel are key.
80
+ * **Color Palette:** Professional, modern. Use a primary color for accents, lighter shades for backgrounds, and ensure high contrast for text.
81
+ * **Typography:** Clear hierarchy (font sizes/weights). Sufficient line height for readability.
82
+ * **Card Design:** Main content in a well-defined card. Sections/items can use softer cards.
83
+ * **Spacing & Layout:** Generous whitespace. Consistent use of spacing utilities. Consider Grid/Flexbox for complex layouts.
84
+ * **Interactivity:** Clear hover states for buttons/links. Subtle transitions.
85
+ * **Icons (Optional):** Simple, professional SVGs for visual interest if easily self-contained.
86
+ * **Shadows & Depth:** Subtle box shadows to create depth.
87
+ * **Professionalism:** Avoid flashy or distracting elements.
88
+ You MUST generate a complete, runnable HTML file.
89
+ """
90
  ),
 
91
  )
app.py CHANGED
@@ -46,7 +46,6 @@ def generate_microsite_app(audio_file_obj, audio_format_str, use_cache_bool):
46
  for response in microsite_workflow.run(
47
  audio_source=audio_source_path,
48
  audio_format=audio_format_str.lower(), # Ensure format is lowercase
49
- use_transcription_cache=use_cache_bool,
50
  ):
51
  processing_log_entries.append(f"🔄 Workflow event: {response.event.value}")
52
 
@@ -169,7 +168,7 @@ h1 { text-align: center; }
169
  .gr-button { box-shadow: 0 1px 3px 0 rgba(0,0,0,.1), 0 1px 2px 0 rgba(0,0,0,.06); }
170
  """
171
 
172
- with gr.Blocks(theme="dark_default", css=custom_css) as demo:
173
  gr.Markdown(f"<h1>{app_title}</h1>")
174
  gr.HTML(app_intro_markdown)
175
 
 
46
  for response in microsite_workflow.run(
47
  audio_source=audio_source_path,
48
  audio_format=audio_format_str.lower(), # Ensure format is lowercase
 
49
  ):
50
  processing_log_entries.append(f"🔄 Workflow event: {response.event.value}")
51
 
 
168
  .gr-button { box-shadow: 0 1px 3px 0 rgba(0,0,0,.1), 0 1px 2px 0 rgba(0,0,0,.06); }
169
  """
170
 
171
+ with gr.Blocks(theme="dark", css=custom_css) as demo:
172
  gr.Markdown(f"<h1>{app_title}</h1>")
173
  gr.HTML(app_intro_markdown)
174
 
microsites/demo_20250610_154317.html ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Demo Recap: Vision Pro for Unknown</title>
7
+ <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
8
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
9
+ <style>
10
+ body {
11
+ font-family: 'Inter', sans-serif;
12
+ background-color: #f7f7f7;
13
+ color: #333;
14
+ }
15
+ .container {
16
+ max-width: 800px;
17
+ margin: 20px auto;
18
+ padding: 20px;
19
+ }
20
+ .card {
21
+ background-color: #fff;
22
+ border-radius: 10px;
23
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
24
+ padding: 20px;
25
+ margin-bottom: 20px;
26
+ }
27
+ .section-title {
28
+ font-size: 1.5rem;
29
+ font-weight: 600;
30
+ margin-bottom: 15px;
31
+ color: #2d3748;
32
+ }
33
+ ul {
34
+ list-style: none;
35
+ padding: 0;
36
+ }
37
+ li {
38
+ padding: 8px 0;
39
+ border-bottom: 1px solid #e2e8f0;
40
+ }
41
+ li:last-child {
42
+ border-bottom: none;
43
+ }
44
+ .btn {
45
+ background-color: #4c6ef5;
46
+ color: white;
47
+ padding: 10px 20px;
48
+ border-radius: 5px;
49
+ text-decoration: none;
50
+ display: inline-block;
51
+ transition: background-color 0.3s ease;
52
+ }
53
+ .btn:hover {
54
+ background-color: #2f4acc;
55
+ }
56
+ </style>
57
+ </head>
58
+ <body>
59
+ <div class="container">
60
+ <div class="card">
61
+ <header class="mb-8">
62
+ <h1 class="text-2xl font-bold text-gray-800">Demo Recap: Vision Pro for Unknown</h1>
63
+ <p class="text-gray-600">Presented by: AI Sales Rep | Date: 2024-01-01</p>
64
+ </header>
65
+
66
+ <section class="mb-6">
67
+ <h2 class="section-title">Summary</h2>
68
+ <ul>
69
+ <li>AI sales rep cold calls prospect about Vision Pro.</li>
70
+ <li>Prospect initially declined due to high price.</li>
71
+ <li>AI sales rep proposes financing option to make it more affordable.</li>
72
+ <li>Prospect agrees to fill out financing application.</li>
73
+ </ul>
74
+ </section>
75
+
76
+ <section class="mb-6">
77
+ <h2 class="section-title">Pain Points Discussed</h2>
78
+ <ul>
79
+ <li>High price of Vision Pro</li>
80
+ </ul>
81
+ </section>
82
+
83
+ <section class="mb-6">
84
+ <h2 class="section-title">Features Demonstrated</h2>
85
+ <p>No features were demonstrated during this demo.</p>
86
+ </section>
87
+
88
+ <section class="mb-6">
89
+ <h2 class="section-title">Next Steps</h2>
90
+ <ul>
91
+ <li>Prospect to fill out financing application.</li>
92
+ <li>AI Sales Rep sent the link to the prospect</li>
93
+ </ul>
94
+ </section>
95
+
96
+ <div class="text-center">
97
+ <a href="#" class="btn">Schedule a Follow-Up</a>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </body>
102
+ </html>
microsites/demo_20250610_162043.html ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Demo Recap: Vision Pro for Unknown</title>
7
+ <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
8
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
9
+ <style>
10
+ body {
11
+ font-family: 'Inter', sans-serif;
12
+ background-color: #f3f4f6;
13
+ color: #333;
14
+ }
15
+ .container {
16
+ max-width: 900px;
17
+ margin: 2rem auto;
18
+ padding: 2rem;
19
+ background-color: #fff;
20
+ box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05);
21
+ border-radius: 0.5rem;
22
+ }
23
+ h1 {
24
+ font-size: 2.5rem;
25
+ font-weight: 700;
26
+ color: #2d3748;
27
+ margin-bottom: 0.5rem;
28
+ }
29
+ h2 {
30
+ font-size: 1.75rem;
31
+ font-weight: 600;
32
+ color: #4a5568;
33
+ margin-top: 2rem;
34
+ margin-bottom: 1rem;
35
+ }
36
+ ul {
37
+ list-style: disc;
38
+ margin-left: 1.5rem;
39
+ margin-bottom: 1rem;
40
+ }
41
+ li {
42
+ margin-bottom: 0.5rem;
43
+ }
44
+ .feature-item {
45
+ margin-bottom: 1rem;
46
+ padding: 1rem;
47
+ border-radius: 0.375rem;
48
+ background-color: #edf2f7;
49
+ }
50
+ .feature-name {
51
+ font-weight: 500;
52
+ color: #2d3748;
53
+ }
54
+ .watch-button {
55
+ display: inline-block;
56
+ padding: 0.5rem 1rem;
57
+ background-color: #4CAF50;
58
+ color: white;
59
+ text-decoration: none;
60
+ border-radius: 0.375rem;
61
+ transition: background-color 0.2s ease-in-out;
62
+ }
63
+ .watch-button:hover {
64
+ background-color: #367c39;
65
+ }
66
+ .cta-button {
67
+ display: inline-block;
68
+ padding: 0.75rem 1.5rem;
69
+ background-color: #3b82f6;
70
+ color: white;
71
+ font-weight: 600;
72
+ text-decoration: none;
73
+ border-radius: 0.375rem;
74
+ transition: background-color 0.2s ease-in-out;
75
+ }
76
+ .cta-button:hover {
77
+ background-color: #2563eb;
78
+ }
79
+ .footer {
80
+ margin-top: 3rem;
81
+ text-align: center;
82
+ color: #718096;
83
+ }
84
+ </style>
85
+ </head>
86
+ <body>
87
+ <div class="container">
88
+ <h1>Demo Recap: Vision Pro for Unknown</h1>
89
+ <p>Presented by: AI Sales Rep | Date: 2024-01-03</p>
90
+
91
+ <section>
92
+ <h2>Summary</h2>
93
+ <ul>
94
+ <li>AI sales representative cold calls a prospect about Vision Pro.</li>
95
+ <li>The prospect was concerned about the high price of Vision Pro.</li>
96
+ <li>The AI sales rep suggests financing options to make it more affordable.</li>
97
+ <li>The AI sales rep sends a link for the prospect to fill out for financing pre-approval.</li>
98
+ <li>The prospect agrees to fill out the form to get pre-approved for financing.</li>
99
+ </ul>
100
+ </section>
101
+
102
+ <section>
103
+ <h2>Pain Points Discussed</h2>
104
+ <ul>
105
+ <li>High price of Vision Pro</li>
106
+ </ul>
107
+ </section>
108
+
109
+ <section>
110
+ <h2>Features Demonstrated</h2>
111
+ <p>No features were demonstrated during this demo.</p>
112
+ </section>
113
+
114
+ <section>
115
+ <h2>Next Steps</h2>
116
+ <ul>
117
+ <li>Prospect to fill out the financing form.</li>
118
+ <li>Sales rep to follow up after form completion.</li>
119
+ </ul>
120
+ </section>
121
+
122
+ <section>
123
+ <a href="#" class="cta-button">Schedule a Follow-Up</a>
124
+ </section>
125
+
126
+ <footer class="footer">
127
+ <p>&copy; 2024 Generated by DemoWizard</p>
128
+ </footer>
129
+ </div>
130
+ </body>
131
+ </html>
microsites/demo_20250610_162335.html ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Demo Recap: Vision Pro for Unknown</title>
7
+ <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
8
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
9
+ <style>
10
+ body {
11
+ font-family: 'Inter', sans-serif;
12
+ background-color: #f3f4f6;
13
+ color: #1e293b;
14
+ }
15
+ .container {
16
+ max-width: 800px;
17
+ margin: 2rem auto;
18
+ padding: 2rem;
19
+ background-color: #fff;
20
+ border-radius: 0.5rem;
21
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
22
+ }
23
+ h1 {
24
+ font-size: 2.5rem;
25
+ font-weight: 700;
26
+ margin-bottom: 1rem;
27
+ color: #2d3748;
28
+ }
29
+ h2 {
30
+ font-size: 1.75rem;
31
+ font-weight: 600;
32
+ margin-top: 2rem;
33
+ margin-bottom: 1rem;
34
+ color: #2d3748;
35
+ }
36
+ ul {
37
+ list-style-type: disc;
38
+ margin-left: 1.5rem;
39
+ margin-bottom: 1rem;
40
+ }
41
+ li {
42
+ margin-bottom: 0.5rem;
43
+ }
44
+ .cta-button {
45
+ display: inline-block;
46
+ padding: 0.75rem 1.5rem;
47
+ background-color: #4c51bf;
48
+ color: #fff;
49
+ font-weight: 500;
50
+ text-decoration: none;
51
+ border-radius: 0.375rem;
52
+ transition: background-color 0.2s ease-in-out;
53
+ }
54
+ .cta-button:hover {
55
+ background-color: #374151;
56
+ }
57
+ .feature-item {
58
+ margin-bottom: 1rem;
59
+ padding: 1rem;
60
+ border-radius: 0.375rem;
61
+ background-color: #edf2f7;
62
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
63
+ }
64
+ .feature-watch-button {
65
+ display: inline-block;
66
+ padding: 0.5rem 1rem;
67
+ background-color: #6b7280;
68
+ color: #fff;
69
+ font-size: 0.875rem;
70
+ border-radius: 0.375rem;
71
+ text-decoration: none;
72
+ transition: background-color 0.2s ease-in-out;
73
+ }
74
+ .feature-watch-button:hover {
75
+ background-color: #4a5568;
76
+ }
77
+ </style>
78
+ </head>
79
+ <body>
80
+ <div class="container">
81
+ <h1>Demo Recap: Vision Pro for Unknown</h1>
82
+ <p>Presented by: AI Sales Rep | Date: 2024-01-03</p>
83
+
84
+ <section>
85
+ <h2>Summary</h2>
86
+ <ul>
87
+ <li>AI sales rep cold calls a prospect interested in Vision Pro.</li>
88
+ <li>Prospect initially hesitant due to high price.</li>
89
+ <li>AI sales rep suggests financing options to make it more affordable.</li>
90
+ <li>Prospect agrees to fill out a financing application.</li>
91
+ </ul>
92
+ </section>
93
+
94
+ <section>
95
+ <h2>Pain Points Discussed</h2>
96
+ <ul>
97
+ <li>High price of Vision Pro</li>
98
+ </ul>
99
+ </section>
100
+
101
+ <section>
102
+ <h2>Features Demonstrated</h2>
103
+ </section>
104
+
105
+ <section>
106
+ <h2>Next Steps</h2>
107
+ <ul>
108
+ <li>Prospect to fill out financing application.</li>
109
+ <li>Sales rep to send financing application link.</li>
110
+ </ul>
111
+ </section>
112
+
113
+ <a href="#" class="cta-button">Schedule a Follow-Up</a>
114
+
115
+ <footer>
116
+ <p class="text-center text-gray-500 text-sm mt-4">Generated by AI</p>
117
+ </footer>
118
+ </div>
119
+ </body>
120
+ </html>
pyproject.toml CHANGED
@@ -10,6 +10,10 @@ dependencies = [
10
  "google>=3.0.0",
11
  "google-genai>=1.19.0",
12
  "gradio>=5.33.0",
 
13
  "netlify-python>=0.3.2",
 
 
 
14
  "python-dotenv>=1.1.0",
15
  ]
 
10
  "google>=3.0.0",
11
  "google-genai>=1.19.0",
12
  "gradio>=5.33.0",
13
+ "langsmith>=0.3.45",
14
  "netlify-python>=0.3.2",
15
+ "openinference-instrumentation-agno>=0.1.6",
16
+ "opentelemetry-exporter-otlp>=1.34.1",
17
+ "opentelemetry-sdk>=1.34.1",
18
  "python-dotenv>=1.1.0",
19
  ]
uv.lock CHANGED
@@ -3,7 +3,8 @@ revision = 1
3
  requires-python = ">=3.12"
4
  resolution-markers = [
5
  "python_full_version >= '3.13'",
6
- "python_full_version < '3.13'",
 
7
  ]
8
 
9
  [[package]]
@@ -132,6 +133,39 @@ wheels = [
132
  { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618 },
133
  ]
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  [[package]]
136
  name = "charset-normalizer"
137
  version = "3.4.2"
@@ -306,9 +340,21 @@ wheels = [
306
  { url = "https://files.pythonhosted.org/packages/c4/ae/64fccdebf5811453ce53b0d5ee23d4f27ef173ef36d3b67dad791a0007aa/google_genai-1.19.0-py3-none-any.whl", hash = "sha256:a2955612e4af8c84f83eb43c1ce4e74e1b714732926d0705e639761938192466", size = 200043 },
307
  ]
308
 
 
 
 
 
 
 
 
 
 
 
 
 
309
  [[package]]
310
  name = "gradio"
311
- version = "5.33.0"
312
  source = { registry = "https://pypi.org/simple" }
313
  dependencies = [
314
  { name = "aiofiles" },
@@ -341,14 +387,14 @@ dependencies = [
341
  { name = "urllib3", marker = "sys_platform == 'emscripten'" },
342
  { name = "uvicorn", marker = "sys_platform != 'emscripten'" },
343
  ]
344
- sdist = { url = "https://files.pythonhosted.org/packages/b0/97/908eb543fbce7c69250d6fbe87b6ccf4ce397d31bceb360b40316357c68c/gradio-5.33.0.tar.gz", hash = "sha256:0cba3a1596fda6cb0048dd7ddc2d57e6238a047c0df9dee5a4a0e5c2a74e8e50", size = 64888401 }
345
  wheels = [
346
- { url = "https://files.pythonhosted.org/packages/4f/c3/c9b09b8d7efd63d83a9c8d9c53b02e1b77238e14305a7ee561e0a8990465/gradio-5.33.0-py3-none-any.whl", hash = "sha256:165e412e1510a22471901744722f99a52cb56465a7e9609f1e400cac9999e9d8", size = 54208887 },
347
  ]
348
 
349
  [[package]]
350
  name = "gradio-client"
351
- version = "1.10.2"
352
  source = { registry = "https://pypi.org/simple" }
353
  dependencies = [
354
  { name = "fsspec" },
@@ -358,9 +404,9 @@ dependencies = [
358
  { name = "typing-extensions" },
359
  { name = "websockets" },
360
  ]
361
- sdist = { url = "https://files.pythonhosted.org/packages/d2/86/6684afe8691b024200fdc8983924f04b5f76bb401b9c700e5752a23595a0/gradio_client-1.10.2.tar.gz", hash = "sha256:bf71ba95714784fa77ca0cfb20189ad91c55e563c2dc71722d023a97f1815d7f", size = 321294 }
362
  wheels = [
363
- { url = "https://files.pythonhosted.org/packages/9b/1b/b372308c263379ae3ebc440512432979458330113bdee26cef86c89bf48e/gradio_client-1.10.2-py3-none-any.whl", hash = "sha256:6de67b6224123d264c7887caa0586b2a9e2c369ec32ca38927cf8a841694edcd", size = 323311 },
364
  ]
365
 
366
  [[package]]
@@ -372,6 +418,34 @@ wheels = [
372
  { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090 },
373
  ]
374
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
375
  [[package]]
376
  name = "h11"
377
  version = "0.16.0"
@@ -452,6 +526,18 @@ wheels = [
452
  { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
453
  ]
454
 
 
 
 
 
 
 
 
 
 
 
 
 
455
  [[package]]
456
  name = "jinja2"
457
  version = "3.1.6"
@@ -464,6 +550,24 @@ wheels = [
464
  { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 },
465
  ]
466
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
467
  [[package]]
468
  name = "markdown-it-py"
469
  version = "3.0.0"
@@ -533,7 +637,11 @@ dependencies = [
533
  { name = "google" },
534
  { name = "google-genai" },
535
  { name = "gradio" },
 
536
  { name = "netlify-python" },
 
 
 
537
  { name = "python-dotenv" },
538
  ]
539
 
@@ -544,7 +652,11 @@ requires-dist = [
544
  { name = "google", specifier = ">=3.0.0" },
545
  { name = "google-genai", specifier = ">=1.19.0" },
546
  { name = "gradio", specifier = ">=5.33.0" },
 
547
  { name = "netlify-python", specifier = ">=0.3.2" },
 
 
 
548
  { name = "python-dotenv", specifier = ">=1.1.0" },
549
  ]
550
 
@@ -603,6 +715,175 @@ wheels = [
603
  { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345 },
604
  ]
605
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
606
  [[package]]
607
  name = "orjson"
608
  version = "3.10.18"
@@ -725,6 +1006,20 @@ wheels = [
725
  { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 },
726
  ]
727
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
728
  [[package]]
729
  name = "pyasn1"
730
  version = "0.6.1"
@@ -746,6 +1041,15 @@ wheels = [
746
  { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259 },
747
  ]
748
 
 
 
 
 
 
 
 
 
 
749
  [[package]]
750
  name = "pydantic"
751
  version = "2.11.5"
@@ -902,7 +1206,7 @@ wheels = [
902
 
903
  [[package]]
904
  name = "requests"
905
- version = "2.32.3"
906
  source = { registry = "https://pypi.org/simple" }
907
  dependencies = [
908
  { name = "certifi" },
@@ -910,9 +1214,21 @@ dependencies = [
910
  { name = "idna" },
911
  { name = "urllib3" },
912
  ]
913
- sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
914
  wheels = [
915
- { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
 
 
 
 
 
 
 
 
 
 
 
 
916
  ]
917
 
918
  [[package]]
@@ -1190,3 +1506,97 @@ wheels = [
1190
  { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 },
1191
  { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 },
1192
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  requires-python = ">=3.12"
4
  resolution-markers = [
5
  "python_full_version >= '3.13'",
6
+ "python_full_version >= '3.12.4' and python_full_version < '3.13'",
7
+ "python_full_version < '3.12.4'",
8
  ]
9
 
10
  [[package]]
 
133
  { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618 },
134
  ]
135
 
136
+ [[package]]
137
+ name = "cffi"
138
+ version = "1.17.1"
139
+ source = { registry = "https://pypi.org/simple" }
140
+ dependencies = [
141
+ { name = "pycparser" },
142
+ ]
143
+ sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 }
144
+ wheels = [
145
+ { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 },
146
+ { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 },
147
+ { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 },
148
+ { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 },
149
+ { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 },
150
+ { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 },
151
+ { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 },
152
+ { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 },
153
+ { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 },
154
+ { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 },
155
+ { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 },
156
+ { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 },
157
+ { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 },
158
+ { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 },
159
+ { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 },
160
+ { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 },
161
+ { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 },
162
+ { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 },
163
+ { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 },
164
+ { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 },
165
+ { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 },
166
+ { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 },
167
+ ]
168
+
169
  [[package]]
170
  name = "charset-normalizer"
171
  version = "3.4.2"
 
340
  { url = "https://files.pythonhosted.org/packages/c4/ae/64fccdebf5811453ce53b0d5ee23d4f27ef173ef36d3b67dad791a0007aa/google_genai-1.19.0-py3-none-any.whl", hash = "sha256:a2955612e4af8c84f83eb43c1ce4e74e1b714732926d0705e639761938192466", size = 200043 },
341
  ]
342
 
343
+ [[package]]
344
+ name = "googleapis-common-protos"
345
+ version = "1.70.0"
346
+ source = { registry = "https://pypi.org/simple" }
347
+ dependencies = [
348
+ { name = "protobuf" },
349
+ ]
350
+ sdist = { url = "https://files.pythonhosted.org/packages/39/24/33db22342cf4a2ea27c9955e6713140fedd51e8b141b5ce5260897020f1a/googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257", size = 145903 }
351
+ wheels = [
352
+ { url = "https://files.pythonhosted.org/packages/86/f1/62a193f0227cf15a920390abe675f386dec35f7ae3ffe6da582d3ade42c7/googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8", size = 294530 },
353
+ ]
354
+
355
  [[package]]
356
  name = "gradio"
357
+ version = "5.33.1"
358
  source = { registry = "https://pypi.org/simple" }
359
  dependencies = [
360
  { name = "aiofiles" },
 
387
  { name = "urllib3", marker = "sys_platform == 'emscripten'" },
388
  { name = "uvicorn", marker = "sys_platform != 'emscripten'" },
389
  ]
390
+ sdist = { url = "https://files.pythonhosted.org/packages/5d/b9/1b59586d91dc5fa083c067789c06a6fbd288242351b506f5af26109188cb/gradio-5.33.1.tar.gz", hash = "sha256:f74c737aa92fc02b4d7dca7e50ee13ddce548aa16c9fcbe907ceabf93722f94d", size = 64908955 }
391
  wheels = [
392
+ { url = "https://files.pythonhosted.org/packages/8a/de/209775586904b55395e046b0e201d74a0bf91aa06fd087fb0fdcbaa39134/gradio-5.33.1-py3-none-any.whl", hash = "sha256:c4329b04280d62041fbf0113e94fb5c4d20e0555ce1ac69174bf98225350159b", size = 54221598 },
393
  ]
394
 
395
  [[package]]
396
  name = "gradio-client"
397
+ version = "1.10.3"
398
  source = { registry = "https://pypi.org/simple" }
399
  dependencies = [
400
  { name = "fsspec" },
 
404
  { name = "typing-extensions" },
405
  { name = "websockets" },
406
  ]
407
+ sdist = { url = "https://files.pythonhosted.org/packages/0b/91/a31536da8fd18ed1c1d5b05929b7291a7bfe5963dfcd37a20a42fc2194f0/gradio_client-1.10.3.tar.gz", hash = "sha256:9e99b88e47f05dc3b68e40a3f3f83819f8d0ddcd43466ad385fe42e137825774", size = 321637 }
408
  wheels = [
409
+ { url = "https://files.pythonhosted.org/packages/ea/72/1e76abc821f8efaaeb2e3bd727a6c97bf87c6a9a0ffacfed0647e587824a/gradio_client-1.10.3-py3-none-any.whl", hash = "sha256:941e7f8d9a160f88487e9780a3db2736a40ea2b8b69d53ffdb306e47ef658b76", size = 323599 },
410
  ]
411
 
412
  [[package]]
 
418
  { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090 },
419
  ]
420
 
421
+ [[package]]
422
+ name = "grpcio"
423
+ version = "1.73.0"
424
+ source = { registry = "https://pypi.org/simple" }
425
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/7b/ca3f561aeecf0c846d15e1b38921a60dffffd5d4113931198fbf455334ee/grpcio-1.73.0.tar.gz", hash = "sha256:3af4c30918a7f0d39de500d11255f8d9da4f30e94a2033e70fe2a720e184bd8e", size = 12786424 }
426
+ wheels = [
427
+ { url = "https://files.pythonhosted.org/packages/9d/4d/e938f3a0e51a47f2ce7e55f12f19f316e7074770d56a7c2765e782ec76bc/grpcio-1.73.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:fb9d7c27089d9ba3746f18d2109eb530ef2a37452d2ff50f5a6696cd39167d3b", size = 5334911 },
428
+ { url = "https://files.pythonhosted.org/packages/13/56/f09c72c43aa8d6f15a71f2c63ebdfac9cf9314363dea2598dc501d8370db/grpcio-1.73.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:128ba2ebdac41e41554d492b82c34586a90ebd0766f8ebd72160c0e3a57b9155", size = 10601460 },
429
+ { url = "https://files.pythonhosted.org/packages/20/e3/85496edc81e41b3c44ebefffc7bce133bb531120066877df0f910eabfa19/grpcio-1.73.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:068ecc415f79408d57a7f146f54cdf9f0acb4b301a52a9e563973dc981e82f3d", size = 5759191 },
430
+ { url = "https://files.pythonhosted.org/packages/88/cc/fef74270a6d29f35ad744bfd8e6c05183f35074ff34c655a2c80f3b422b2/grpcio-1.73.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ddc1cfb2240f84d35d559ade18f69dcd4257dbaa5ba0de1a565d903aaab2968", size = 6409961 },
431
+ { url = "https://files.pythonhosted.org/packages/b0/e6/13cfea15e3b8f79c4ae7b676cb21fab70978b0fde1e1d28bb0e073291290/grpcio-1.73.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53007f70d9783f53b41b4cf38ed39a8e348011437e4c287eee7dd1d39d54b2f", size = 6003948 },
432
+ { url = "https://files.pythonhosted.org/packages/c2/ed/b1a36dad4cc0dbf1f83f6d7b58825fefd5cc9ff3a5036e46091335649473/grpcio-1.73.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4dd8d8d092efede7d6f48d695ba2592046acd04ccf421436dd7ed52677a9ad29", size = 6103788 },
433
+ { url = "https://files.pythonhosted.org/packages/e7/c8/d381433d3d46d10f6858126d2d2245ef329e30f3752ce4514c93b95ca6fc/grpcio-1.73.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:70176093d0a95b44d24baa9c034bb67bfe2b6b5f7ebc2836f4093c97010e17fd", size = 6749508 },
434
+ { url = "https://files.pythonhosted.org/packages/87/0a/ff0c31dbd15e63b34320efafac647270aa88c31aa19ff01154a73dc7ce86/grpcio-1.73.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:085ebe876373ca095e24ced95c8f440495ed0b574c491f7f4f714ff794bbcd10", size = 6284342 },
435
+ { url = "https://files.pythonhosted.org/packages/fd/73/f762430c0ba867403b9d6e463afe026bf019bd9206eee753785239719273/grpcio-1.73.0-cp312-cp312-win32.whl", hash = "sha256:cfc556c1d6aef02c727ec7d0016827a73bfe67193e47c546f7cadd3ee6bf1a60", size = 3669319 },
436
+ { url = "https://files.pythonhosted.org/packages/10/8b/3411609376b2830449cf416f457ad9d2aacb7f562e1b90fdd8bdedf26d63/grpcio-1.73.0-cp312-cp312-win_amd64.whl", hash = "sha256:bbf45d59d090bf69f1e4e1594832aaf40aa84b31659af3c5e2c3f6a35202791a", size = 4335596 },
437
+ { url = "https://files.pythonhosted.org/packages/60/da/6f3f7a78e5455c4cbe87c85063cc6da05d65d25264f9d4aed800ece46294/grpcio-1.73.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:da1d677018ef423202aca6d73a8d3b2cb245699eb7f50eb5f74cae15a8e1f724", size = 5335867 },
438
+ { url = "https://files.pythonhosted.org/packages/53/14/7d1f2526b98b9658d7be0bb163fd78d681587de6709d8b0c74b4b481b013/grpcio-1.73.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:36bf93f6a657f37c131d9dd2c391b867abf1426a86727c3575393e9e11dadb0d", size = 10595587 },
439
+ { url = "https://files.pythonhosted.org/packages/02/24/a293c398ae44e741da1ed4b29638edbb002258797b07a783f65506165b4c/grpcio-1.73.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:d84000367508ade791d90c2bafbd905574b5ced8056397027a77a215d601ba15", size = 5765793 },
440
+ { url = "https://files.pythonhosted.org/packages/e1/24/d84dbd0b5bf36fb44922798d525a85cefa2ffee7b7110e61406e9750ed15/grpcio-1.73.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c98ba1d928a178ce33f3425ff823318040a2b7ef875d30a0073565e5ceb058d9", size = 6415494 },
441
+ { url = "https://files.pythonhosted.org/packages/5e/85/c80dc65aed8e9dce3d54688864bac45331d9c7600985541f18bd5cb301d4/grpcio-1.73.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a73c72922dfd30b396a5f25bb3a4590195ee45ecde7ee068acb0892d2900cf07", size = 6007279 },
442
+ { url = "https://files.pythonhosted.org/packages/37/fc/207c00a4c6fa303d26e2cbd62fbdb0582facdfd08f55500fd83bf6b0f8db/grpcio-1.73.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:10e8edc035724aba0346a432060fd192b42bd03675d083c01553cab071a28da5", size = 6105505 },
443
+ { url = "https://files.pythonhosted.org/packages/72/35/8fe69af820667b87ebfcb24214e42a1d53da53cb39edd6b4f84f6b36da86/grpcio-1.73.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f5cdc332b503c33b1643b12ea933582c7b081957c8bc2ea4cc4bc58054a09288", size = 6753792 },
444
+ { url = "https://files.pythonhosted.org/packages/e2/d8/738c77c1e821e350da4a048849f695ff88a02b291f8c69db23908867aea6/grpcio-1.73.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:07ad7c57233c2109e4ac999cb9c2710c3b8e3f491a73b058b0ce431f31ed8145", size = 6287593 },
445
+ { url = "https://files.pythonhosted.org/packages/09/ec/8498eabc018fa39ae8efe5e47e3f4c1bc9ed6281056713871895dc998807/grpcio-1.73.0-cp313-cp313-win32.whl", hash = "sha256:0eb5df4f41ea10bda99a802b2a292d85be28958ede2a50f2beb8c7fc9a738419", size = 3668637 },
446
+ { url = "https://files.pythonhosted.org/packages/d7/35/347db7d2e7674b621afd21b12022e7f48c7b0861b5577134b4e939536141/grpcio-1.73.0-cp313-cp313-win_amd64.whl", hash = "sha256:38cf518cc54cd0c47c9539cefa8888549fcc067db0b0c66a46535ca8032020c4", size = 4335872 },
447
+ ]
448
+
449
  [[package]]
450
  name = "h11"
451
  version = "0.16.0"
 
526
  { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
527
  ]
528
 
529
+ [[package]]
530
+ name = "importlib-metadata"
531
+ version = "8.7.0"
532
+ source = { registry = "https://pypi.org/simple" }
533
+ dependencies = [
534
+ { name = "zipp" },
535
+ ]
536
+ sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641 }
537
+ wheels = [
538
+ { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656 },
539
+ ]
540
+
541
  [[package]]
542
  name = "jinja2"
543
  version = "3.1.6"
 
550
  { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 },
551
  ]
552
 
553
+ [[package]]
554
+ name = "langsmith"
555
+ version = "0.3.45"
556
+ source = { registry = "https://pypi.org/simple" }
557
+ dependencies = [
558
+ { name = "httpx" },
559
+ { name = "orjson", marker = "platform_python_implementation != 'PyPy'" },
560
+ { name = "packaging" },
561
+ { name = "pydantic" },
562
+ { name = "requests" },
563
+ { name = "requests-toolbelt" },
564
+ { name = "zstandard" },
565
+ ]
566
+ sdist = { url = "https://files.pythonhosted.org/packages/be/86/b941012013260f95af2e90a3d9415af4a76a003a28412033fc4b09f35731/langsmith-0.3.45.tar.gz", hash = "sha256:1df3c6820c73ed210b2c7bc5cdb7bfa19ddc9126cd03fdf0da54e2e171e6094d", size = 348201 }
567
+ wheels = [
568
+ { url = "https://files.pythonhosted.org/packages/6a/f4/c206c0888f8a506404cb4f16ad89593bdc2f70cf00de26a1a0a7a76ad7a3/langsmith-0.3.45-py3-none-any.whl", hash = "sha256:5b55f0518601fa65f3bb6b1a3100379a96aa7b3ed5e9380581615ba9c65ed8ed", size = 363002 },
569
+ ]
570
+
571
  [[package]]
572
  name = "markdown-it-py"
573
  version = "3.0.0"
 
637
  { name = "google" },
638
  { name = "google-genai" },
639
  { name = "gradio" },
640
+ { name = "langsmith" },
641
  { name = "netlify-python" },
642
+ { name = "openinference-instrumentation-agno" },
643
+ { name = "opentelemetry-exporter-otlp" },
644
+ { name = "opentelemetry-sdk" },
645
  { name = "python-dotenv" },
646
  ]
647
 
 
652
  { name = "google", specifier = ">=3.0.0" },
653
  { name = "google-genai", specifier = ">=1.19.0" },
654
  { name = "gradio", specifier = ">=5.33.0" },
655
+ { name = "langsmith", specifier = ">=0.3.45" },
656
  { name = "netlify-python", specifier = ">=0.3.2" },
657
+ { name = "openinference-instrumentation-agno", specifier = ">=0.1.6" },
658
+ { name = "opentelemetry-exporter-otlp", specifier = ">=1.34.1" },
659
+ { name = "opentelemetry-sdk", specifier = ">=1.34.1" },
660
  { name = "python-dotenv", specifier = ">=1.1.0" },
661
  ]
662
 
 
715
  { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345 },
716
  ]
717
 
718
+ [[package]]
719
+ name = "openinference-instrumentation"
720
+ version = "0.1.32"
721
+ source = { registry = "https://pypi.org/simple" }
722
+ dependencies = [
723
+ { name = "openinference-semantic-conventions" },
724
+ { name = "opentelemetry-api" },
725
+ { name = "opentelemetry-sdk" },
726
+ ]
727
+ sdist = { url = "https://files.pythonhosted.org/packages/cb/0d/317dcf8fc1d2ea7db4b55afff6a535136c43fcfcffecd562a54f3b56d184/openinference_instrumentation-0.1.32.tar.gz", hash = "sha256:f59e02d9b45acc8aab4c11c00f6cc6ff6b63a2487e04741cf145702e85408072", size = 21438 }
728
+ wheels = [
729
+ { url = "https://files.pythonhosted.org/packages/81/2a/ad75feeba2024d56dc7b3748b7fc2206ea26b6a2b4c9039572212cf9d7d6/openinference_instrumentation-0.1.32-py3-none-any.whl", hash = "sha256:dbc11a6e1cb719522749b0cd1226feaecdbeeaebe7ff0b73ecb31143a9d92b57", size = 26856 },
730
+ ]
731
+
732
+ [[package]]
733
+ name = "openinference-instrumentation-agno"
734
+ version = "0.1.6"
735
+ source = { registry = "https://pypi.org/simple" }
736
+ dependencies = [
737
+ { name = "openinference-instrumentation" },
738
+ { name = "openinference-semantic-conventions" },
739
+ { name = "opentelemetry-api" },
740
+ { name = "opentelemetry-instrumentation" },
741
+ { name = "opentelemetry-semantic-conventions" },
742
+ { name = "typing-extensions" },
743
+ { name = "wrapt" },
744
+ ]
745
+ sdist = { url = "https://files.pythonhosted.org/packages/8a/9d/4f1fad85a7484494e9b4aa3a827e80680e6056bc3311fcf4d1bede4a216e/openinference_instrumentation_agno-0.1.6.tar.gz", hash = "sha256:af09f2b7d100227dd71d604f507fcbb800be5ad4ed62b922cb838f6ca6123cc1", size = 11499 }
746
+ wheels = [
747
+ { url = "https://files.pythonhosted.org/packages/97/1c/19d69e7334eb3f9e1ad417d1f813104c6643f5146f0a60818decec203b37/openinference_instrumentation_agno-0.1.6-py3-none-any.whl", hash = "sha256:9f34f894ddbcc37bf123a892f1aa4f153301eef3d8443d6855642845bc9f0bcb", size = 13143 },
748
+ ]
749
+
750
+ [[package]]
751
+ name = "openinference-semantic-conventions"
752
+ version = "0.1.18"
753
+ source = { registry = "https://pypi.org/simple" }
754
+ sdist = { url = "https://files.pythonhosted.org/packages/0f/26/fcc8c6629fa64ddfc053dab699f2c5b0bde87587195c1688d804ce3f03d8/openinference_semantic_conventions-0.1.18.tar.gz", hash = "sha256:b214d183dd70bf6a83cafdeb3c4f0ec1fa5fbd74e5064c608f1471fe31a7f109", size = 10462 }
755
+ wheels = [
756
+ { url = "https://files.pythonhosted.org/packages/85/10/ab679a729e44132683a757183b46829751f046acf8cc4373420502fd49dc/openinference_semantic_conventions-0.1.18-py3-none-any.whl", hash = "sha256:5e6d2a60599ef701b2a104d119d299f06fb4b47ebb18f3ea4857483ff0ff3c61", size = 10271 },
757
+ ]
758
+
759
+ [[package]]
760
+ name = "opentelemetry-api"
761
+ version = "1.34.1"
762
+ source = { registry = "https://pypi.org/simple" }
763
+ dependencies = [
764
+ { name = "importlib-metadata" },
765
+ { name = "typing-extensions" },
766
+ ]
767
+ sdist = { url = "https://files.pythonhosted.org/packages/4d/5e/94a8cb759e4e409022229418294e098ca7feca00eb3c467bb20cbd329bda/opentelemetry_api-1.34.1.tar.gz", hash = "sha256:64f0bd06d42824843731d05beea88d4d4b6ae59f9fe347ff7dfa2cc14233bbb3", size = 64987 }
768
+ wheels = [
769
+ { url = "https://files.pythonhosted.org/packages/a5/3a/2ba85557e8dc024c0842ad22c570418dc02c36cbd1ab4b832a93edf071b8/opentelemetry_api-1.34.1-py3-none-any.whl", hash = "sha256:b7df4cb0830d5a6c29ad0c0691dbae874d8daefa934b8b1d642de48323d32a8c", size = 65767 },
770
+ ]
771
+
772
+ [[package]]
773
+ name = "opentelemetry-exporter-otlp"
774
+ version = "1.34.1"
775
+ source = { registry = "https://pypi.org/simple" }
776
+ dependencies = [
777
+ { name = "opentelemetry-exporter-otlp-proto-grpc" },
778
+ { name = "opentelemetry-exporter-otlp-proto-http" },
779
+ ]
780
+ sdist = { url = "https://files.pythonhosted.org/packages/44/ba/786b4de7e39d88043622d901b92c4485835f43e0be76c2824d2687911bc2/opentelemetry_exporter_otlp-1.34.1.tar.gz", hash = "sha256:71c9ad342d665d9e4235898d205db17c5764cd7a69acb8a5dcd6d5e04c4c9988", size = 6173 }
781
+ wheels = [
782
+ { url = "https://files.pythonhosted.org/packages/00/c1/259b8d8391c968e8f005d8a0ccefcb41aeef64cf55905cd0c0db4e22aaee/opentelemetry_exporter_otlp-1.34.1-py3-none-any.whl", hash = "sha256:f4a453e9cde7f6362fd4a090d8acf7881d1dc585540c7b65cbd63e36644238d4", size = 7040 },
783
+ ]
784
+
785
+ [[package]]
786
+ name = "opentelemetry-exporter-otlp-proto-common"
787
+ version = "1.34.1"
788
+ source = { registry = "https://pypi.org/simple" }
789
+ dependencies = [
790
+ { name = "opentelemetry-proto" },
791
+ ]
792
+ sdist = { url = "https://files.pythonhosted.org/packages/86/f0/ff235936ee40db93360233b62da932d4fd9e8d103cd090c6bcb9afaf5f01/opentelemetry_exporter_otlp_proto_common-1.34.1.tar.gz", hash = "sha256:b59a20a927facd5eac06edaf87a07e49f9e4a13db487b7d8a52b37cb87710f8b", size = 20817 }
793
+ wheels = [
794
+ { url = "https://files.pythonhosted.org/packages/72/e8/8b292a11cc8d8d87ec0c4089ae21b6a58af49ca2e51fa916435bc922fdc7/opentelemetry_exporter_otlp_proto_common-1.34.1-py3-none-any.whl", hash = "sha256:8e2019284bf24d3deebbb6c59c71e6eef3307cd88eff8c633e061abba33f7e87", size = 18834 },
795
+ ]
796
+
797
+ [[package]]
798
+ name = "opentelemetry-exporter-otlp-proto-grpc"
799
+ version = "1.34.1"
800
+ source = { registry = "https://pypi.org/simple" }
801
+ dependencies = [
802
+ { name = "googleapis-common-protos" },
803
+ { name = "grpcio" },
804
+ { name = "opentelemetry-api" },
805
+ { name = "opentelemetry-exporter-otlp-proto-common" },
806
+ { name = "opentelemetry-proto" },
807
+ { name = "opentelemetry-sdk" },
808
+ { name = "typing-extensions" },
809
+ ]
810
+ sdist = { url = "https://files.pythonhosted.org/packages/41/f7/bb63837a3edb9ca857aaf5760796874e7cecddc88a2571b0992865a48fb6/opentelemetry_exporter_otlp_proto_grpc-1.34.1.tar.gz", hash = "sha256:7c841b90caa3aafcfc4fee58487a6c71743c34c6dc1787089d8b0578bbd794dd", size = 22566 }
811
+ wheels = [
812
+ { url = "https://files.pythonhosted.org/packages/b4/42/0a4dd47e7ef54edf670c81fc06a83d68ea42727b82126a1df9dd0477695d/opentelemetry_exporter_otlp_proto_grpc-1.34.1-py3-none-any.whl", hash = "sha256:04bb8b732b02295be79f8a86a4ad28fae3d4ddb07307a98c7aa6f331de18cca6", size = 18615 },
813
+ ]
814
+
815
+ [[package]]
816
+ name = "opentelemetry-exporter-otlp-proto-http"
817
+ version = "1.34.1"
818
+ source = { registry = "https://pypi.org/simple" }
819
+ dependencies = [
820
+ { name = "googleapis-common-protos" },
821
+ { name = "opentelemetry-api" },
822
+ { name = "opentelemetry-exporter-otlp-proto-common" },
823
+ { name = "opentelemetry-proto" },
824
+ { name = "opentelemetry-sdk" },
825
+ { name = "requests" },
826
+ { name = "typing-extensions" },
827
+ ]
828
+ sdist = { url = "https://files.pythonhosted.org/packages/19/8f/954bc725961cbe425a749d55c0ba1df46832a5999eae764d1a7349ac1c29/opentelemetry_exporter_otlp_proto_http-1.34.1.tar.gz", hash = "sha256:aaac36fdce46a8191e604dcf632e1f9380c7d5b356b27b3e0edb5610d9be28ad", size = 15351 }
829
+ wheels = [
830
+ { url = "https://files.pythonhosted.org/packages/79/54/b05251c04e30c1ac70cf4a7c5653c085dfcf2c8b98af71661d6a252adc39/opentelemetry_exporter_otlp_proto_http-1.34.1-py3-none-any.whl", hash = "sha256:5251f00ca85872ce50d871f6d3cc89fe203b94c3c14c964bbdc3883366c705d8", size = 17744 },
831
+ ]
832
+
833
+ [[package]]
834
+ name = "opentelemetry-instrumentation"
835
+ version = "0.55b1"
836
+ source = { registry = "https://pypi.org/simple" }
837
+ dependencies = [
838
+ { name = "opentelemetry-api" },
839
+ { name = "opentelemetry-semantic-conventions" },
840
+ { name = "packaging" },
841
+ { name = "wrapt" },
842
+ ]
843
+ sdist = { url = "https://files.pythonhosted.org/packages/cb/69/d8995f229ddf4d98b9c85dd126aeca03dd1742f6dc5d3bc0d2f6dae1535c/opentelemetry_instrumentation-0.55b1.tar.gz", hash = "sha256:2dc50aa207b9bfa16f70a1a0571e011e737a9917408934675b89ef4d5718c87b", size = 28552 }
844
+ wheels = [
845
+ { url = "https://files.pythonhosted.org/packages/60/7d/8ddfda1506c2fcca137924d5688ccabffa1aed9ec0955b7d0772de02cec3/opentelemetry_instrumentation-0.55b1-py3-none-any.whl", hash = "sha256:cbb1496b42bc394e01bc63701b10e69094e8564e281de063e4328d122cc7a97e", size = 31108 },
846
+ ]
847
+
848
+ [[package]]
849
+ name = "opentelemetry-proto"
850
+ version = "1.34.1"
851
+ source = { registry = "https://pypi.org/simple" }
852
+ dependencies = [
853
+ { name = "protobuf" },
854
+ ]
855
+ sdist = { url = "https://files.pythonhosted.org/packages/66/b3/c3158dd012463bb7c0eb7304a85a6f63baeeb5b4c93a53845cf89f848c7e/opentelemetry_proto-1.34.1.tar.gz", hash = "sha256:16286214e405c211fc774187f3e4bbb1351290b8dfb88e8948af209ce85b719e", size = 34344 }
856
+ wheels = [
857
+ { url = "https://files.pythonhosted.org/packages/28/ab/4591bfa54e946350ce8b3f28e5c658fe9785e7cd11e9c11b1671a867822b/opentelemetry_proto-1.34.1-py3-none-any.whl", hash = "sha256:eb4bb5ac27f2562df2d6857fc557b3a481b5e298bc04f94cc68041f00cebcbd2", size = 55692 },
858
+ ]
859
+
860
+ [[package]]
861
+ name = "opentelemetry-sdk"
862
+ version = "1.34.1"
863
+ source = { registry = "https://pypi.org/simple" }
864
+ dependencies = [
865
+ { name = "opentelemetry-api" },
866
+ { name = "opentelemetry-semantic-conventions" },
867
+ { name = "typing-extensions" },
868
+ ]
869
+ sdist = { url = "https://files.pythonhosted.org/packages/6f/41/fe20f9036433da8e0fcef568984da4c1d1c771fa072ecd1a4d98779dccdd/opentelemetry_sdk-1.34.1.tar.gz", hash = "sha256:8091db0d763fcd6098d4781bbc80ff0971f94e260739aa6afe6fd379cdf3aa4d", size = 159441 }
870
+ wheels = [
871
+ { url = "https://files.pythonhosted.org/packages/07/1b/def4fe6aa73f483cabf4c748f4c25070d5f7604dcc8b52e962983491b29e/opentelemetry_sdk-1.34.1-py3-none-any.whl", hash = "sha256:308effad4059562f1d92163c61c8141df649da24ce361827812c40abb2a1e96e", size = 118477 },
872
+ ]
873
+
874
+ [[package]]
875
+ name = "opentelemetry-semantic-conventions"
876
+ version = "0.55b1"
877
+ source = { registry = "https://pypi.org/simple" }
878
+ dependencies = [
879
+ { name = "opentelemetry-api" },
880
+ { name = "typing-extensions" },
881
+ ]
882
+ sdist = { url = "https://files.pythonhosted.org/packages/5d/f0/f33458486da911f47c4aa6db9bda308bb80f3236c111bf848bd870c16b16/opentelemetry_semantic_conventions-0.55b1.tar.gz", hash = "sha256:ef95b1f009159c28d7a7849f5cbc71c4c34c845bb514d66adfdf1b3fff3598b3", size = 119829 }
883
+ wheels = [
884
+ { url = "https://files.pythonhosted.org/packages/1a/89/267b0af1b1d0ba828f0e60642b6a5116ac1fd917cde7fc02821627029bd1/opentelemetry_semantic_conventions-0.55b1-py3-none-any.whl", hash = "sha256:5da81dfdf7d52e3d37f8fe88d5e771e191de924cfff5f550ab0b8f7b2409baed", size = 196223 },
885
+ ]
886
+
887
  [[package]]
888
  name = "orjson"
889
  version = "3.10.18"
 
1006
  { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 },
1007
  ]
1008
 
1009
+ [[package]]
1010
+ name = "protobuf"
1011
+ version = "5.29.5"
1012
+ source = { registry = "https://pypi.org/simple" }
1013
+ sdist = { url = "https://files.pythonhosted.org/packages/43/29/d09e70352e4e88c9c7a198d5645d7277811448d76c23b00345670f7c8a38/protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84", size = 425226 }
1014
+ wheels = [
1015
+ { url = "https://files.pythonhosted.org/packages/5f/11/6e40e9fc5bba02988a214c07cf324595789ca7820160bfd1f8be96e48539/protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079", size = 422963 },
1016
+ { url = "https://files.pythonhosted.org/packages/81/7f/73cefb093e1a2a7c3ffd839e6f9fcafb7a427d300c7f8aef9c64405d8ac6/protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc", size = 434818 },
1017
+ { url = "https://files.pythonhosted.org/packages/dd/73/10e1661c21f139f2c6ad9b23040ff36fee624310dc28fba20d33fdae124c/protobuf-5.29.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e38c5add5a311f2a6eb0340716ef9b039c1dfa428b28f25a7838ac329204a671", size = 418091 },
1018
+ { url = "https://files.pythonhosted.org/packages/6c/04/98f6f8cf5b07ab1294c13f34b4e69b3722bb609c5b701d6c169828f9f8aa/protobuf-5.29.5-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:fa18533a299d7ab6c55a238bf8629311439995f2e7eca5caaff08663606e9015", size = 319824 },
1019
+ { url = "https://files.pythonhosted.org/packages/85/e4/07c80521879c2d15f321465ac24c70efe2381378c00bf5e56a0f4fbac8cd/protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:63848923da3325e1bf7e9003d680ce6e14b07e55d0473253a690c3a8b8fd6e61", size = 319942 },
1020
+ { url = "https://files.pythonhosted.org/packages/7e/cc/7e77861000a0691aeea8f4566e5d3aa716f2b1dece4a24439437e41d3d25/protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5", size = 172823 },
1021
+ ]
1022
+
1023
  [[package]]
1024
  name = "pyasn1"
1025
  version = "0.6.1"
 
1041
  { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259 },
1042
  ]
1043
 
1044
+ [[package]]
1045
+ name = "pycparser"
1046
+ version = "2.22"
1047
+ source = { registry = "https://pypi.org/simple" }
1048
+ sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 }
1049
+ wheels = [
1050
+ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 },
1051
+ ]
1052
+
1053
  [[package]]
1054
  name = "pydantic"
1055
  version = "2.11.5"
 
1206
 
1207
  [[package]]
1208
  name = "requests"
1209
+ version = "2.32.4"
1210
  source = { registry = "https://pypi.org/simple" }
1211
  dependencies = [
1212
  { name = "certifi" },
 
1214
  { name = "idna" },
1215
  { name = "urllib3" },
1216
  ]
1217
+ sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 }
1218
  wheels = [
1219
+ { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 },
1220
+ ]
1221
+
1222
+ [[package]]
1223
+ name = "requests-toolbelt"
1224
+ version = "1.0.0"
1225
+ source = { registry = "https://pypi.org/simple" }
1226
+ dependencies = [
1227
+ { name = "requests" },
1228
+ ]
1229
+ sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888 }
1230
+ wheels = [
1231
+ { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 },
1232
  ]
1233
 
1234
  [[package]]
 
1506
  { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 },
1507
  { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 },
1508
  ]
1509
+
1510
+ [[package]]
1511
+ name = "wrapt"
1512
+ version = "1.17.2"
1513
+ source = { registry = "https://pypi.org/simple" }
1514
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531 }
1515
+ wheels = [
1516
+ { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799 },
1517
+ { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821 },
1518
+ { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919 },
1519
+ { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721 },
1520
+ { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899 },
1521
+ { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222 },
1522
+ { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707 },
1523
+ { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685 },
1524
+ { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567 },
1525
+ { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672 },
1526
+ { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865 },
1527
+ { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800 },
1528
+ { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824 },
1529
+ { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920 },
1530
+ { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690 },
1531
+ { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861 },
1532
+ { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174 },
1533
+ { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721 },
1534
+ { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763 },
1535
+ { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585 },
1536
+ { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676 },
1537
+ { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871 },
1538
+ { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312 },
1539
+ { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062 },
1540
+ { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155 },
1541
+ { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471 },
1542
+ { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208 },
1543
+ { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339 },
1544
+ { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232 },
1545
+ { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476 },
1546
+ { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377 },
1547
+ { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986 },
1548
+ { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750 },
1549
+ { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594 },
1550
+ ]
1551
+
1552
+ [[package]]
1553
+ name = "zipp"
1554
+ version = "3.23.0"
1555
+ source = { registry = "https://pypi.org/simple" }
1556
+ sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547 }
1557
+ wheels = [
1558
+ { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276 },
1559
+ ]
1560
+
1561
+ [[package]]
1562
+ name = "zstandard"
1563
+ version = "0.23.0"
1564
+ source = { registry = "https://pypi.org/simple" }
1565
+ dependencies = [
1566
+ { name = "cffi", marker = "platform_python_implementation == 'PyPy'" },
1567
+ ]
1568
+ sdist = { url = "https://files.pythonhosted.org/packages/ed/f6/2ac0287b442160a89d726b17a9184a4c615bb5237db763791a7fd16d9df1/zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09", size = 681701 }
1569
+ wheels = [
1570
+ { url = "https://files.pythonhosted.org/packages/7b/83/f23338c963bd9de687d47bf32efe9fd30164e722ba27fb59df33e6b1719b/zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094", size = 788713 },
1571
+ { url = "https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8", size = 633459 },
1572
+ { url = "https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1", size = 4945707 },
1573
+ { url = "https://files.pythonhosted.org/packages/cd/2e/2051f5c772f4dfc0aae3741d5fc72c3dcfe3aaeb461cc231668a4db1ce14/zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072", size = 5306545 },
1574
+ { url = "https://files.pythonhosted.org/packages/0a/9e/a11c97b087f89cab030fa71206963090d2fecd8eb83e67bb8f3ffb84c024/zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20", size = 5337533 },
1575
+ { url = "https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373", size = 5436510 },
1576
+ { url = "https://files.pythonhosted.org/packages/81/4f/c21383d97cb7a422ddf1ae824b53ce4b51063d0eeb2afa757eb40804a8ef/zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db", size = 4859973 },
1577
+ { url = "https://files.pythonhosted.org/packages/ab/15/08d22e87753304405ccac8be2493a495f529edd81d39a0870621462276ef/zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772", size = 4936968 },
1578
+ { url = "https://files.pythonhosted.org/packages/eb/fa/f3670a597949fe7dcf38119a39f7da49a8a84a6f0b1a2e46b2f71a0ab83f/zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105", size = 5467179 },
1579
+ { url = "https://files.pythonhosted.org/packages/4e/a9/dad2ab22020211e380adc477a1dbf9f109b1f8d94c614944843e20dc2a99/zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba", size = 4848577 },
1580
+ { url = "https://files.pythonhosted.org/packages/08/03/dd28b4484b0770f1e23478413e01bee476ae8227bbc81561f9c329e12564/zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd", size = 4693899 },
1581
+ { url = "https://files.pythonhosted.org/packages/2b/64/3da7497eb635d025841e958bcd66a86117ae320c3b14b0ae86e9e8627518/zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a", size = 5199964 },
1582
+ { url = "https://files.pythonhosted.org/packages/43/a4/d82decbab158a0e8a6ebb7fc98bc4d903266bce85b6e9aaedea1d288338c/zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90", size = 5655398 },
1583
+ { url = "https://files.pythonhosted.org/packages/f2/61/ac78a1263bc83a5cf29e7458b77a568eda5a8f81980691bbc6eb6a0d45cc/zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35", size = 5191313 },
1584
+ { url = "https://files.pythonhosted.org/packages/e7/54/967c478314e16af5baf849b6ee9d6ea724ae5b100eb506011f045d3d4e16/zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d", size = 430877 },
1585
+ { url = "https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b", size = 495595 },
1586
+ { url = "https://files.pythonhosted.org/packages/80/f1/8386f3f7c10261fe85fbc2c012fdb3d4db793b921c9abcc995d8da1b7a80/zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9", size = 788975 },
1587
+ { url = "https://files.pythonhosted.org/packages/16/e8/cbf01077550b3e5dc86089035ff8f6fbbb312bc0983757c2d1117ebba242/zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a", size = 633448 },
1588
+ { url = "https://files.pythonhosted.org/packages/06/27/4a1b4c267c29a464a161aeb2589aff212b4db653a1d96bffe3598f3f0d22/zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2", size = 4945269 },
1589
+ { url = "https://files.pythonhosted.org/packages/7c/64/d99261cc57afd9ae65b707e38045ed8269fbdae73544fd2e4a4d50d0ed83/zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5", size = 5306228 },
1590
+ { url = "https://files.pythonhosted.org/packages/7a/cf/27b74c6f22541f0263016a0fd6369b1b7818941de639215c84e4e94b2a1c/zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f", size = 5336891 },
1591
+ { url = "https://files.pythonhosted.org/packages/fa/18/89ac62eac46b69948bf35fcd90d37103f38722968e2981f752d69081ec4d/zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed", size = 5436310 },
1592
+ { url = "https://files.pythonhosted.org/packages/a8/a8/5ca5328ee568a873f5118d5b5f70d1f36c6387716efe2e369010289a5738/zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea", size = 4859912 },
1593
+ { url = "https://files.pythonhosted.org/packages/ea/ca/3781059c95fd0868658b1cf0440edd832b942f84ae60685d0cfdb808bca1/zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847", size = 4936946 },
1594
+ { url = "https://files.pythonhosted.org/packages/ce/11/41a58986f809532742c2b832c53b74ba0e0a5dae7e8ab4642bf5876f35de/zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171", size = 5466994 },
1595
+ { url = "https://files.pythonhosted.org/packages/83/e3/97d84fe95edd38d7053af05159465d298c8b20cebe9ccb3d26783faa9094/zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840", size = 4848681 },
1596
+ { url = "https://files.pythonhosted.org/packages/6e/99/cb1e63e931de15c88af26085e3f2d9af9ce53ccafac73b6e48418fd5a6e6/zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690", size = 4694239 },
1597
+ { url = "https://files.pythonhosted.org/packages/ab/50/b1e703016eebbc6501fc92f34db7b1c68e54e567ef39e6e59cf5fb6f2ec0/zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b", size = 5200149 },
1598
+ { url = "https://files.pythonhosted.org/packages/aa/e0/932388630aaba70197c78bdb10cce2c91fae01a7e553b76ce85471aec690/zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057", size = 5655392 },
1599
+ { url = "https://files.pythonhosted.org/packages/02/90/2633473864f67a15526324b007a9f96c96f56d5f32ef2a56cc12f9548723/zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33", size = 5191299 },
1600
+ { url = "https://files.pythonhosted.org/packages/b0/4c/315ca5c32da7e2dc3455f3b2caee5c8c2246074a61aac6ec3378a97b7136/zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd", size = 430862 },
1601
+ { url = "https://files.pythonhosted.org/packages/a2/bf/c6aaba098e2d04781e8f4f7c0ba3c7aa73d00e4c436bcc0cf059a66691d1/zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b", size = 495578 },
1602
+ ]