darabos commited on
Commit
65b908a
·
unverified ·
2 Parent(s): 23cc388 d9ea375

Merge pull request #64 from biggraph/darabos-tweaks

Browse files
.gitignore CHANGED
@@ -11,4 +11,5 @@ __pycache__
11
  node_modules
12
  dist
13
  build
 
14
  *.egg-info
 
11
  node_modules
12
  dist
13
  build
14
+ joblib-cache
15
  *.egg-info
lynxkite-app/data/AIMO ADDED
@@ -0,0 +1,1039 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "env": "LLM logic",
3
+ "nodes": [
4
+ {
5
+ "id": "View 1",
6
+ "type": "table_view",
7
+ "data": {
8
+ "title": "View",
9
+ "params": {},
10
+ "display": {
11
+ "dataframes": {
12
+ "df": {
13
+ "columns": [
14
+ "id",
15
+ "text",
16
+ "answer",
17
+ "prompt",
18
+ "response",
19
+ "iterations-Loop 1"
20
+ ],
21
+ "data": [
22
+ [
23
+ "229ee8",
24
+ "Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
25
+ 52,
26
+ "Please give a correct solution for this: Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
27
+ "To solve this problem, we need to follow these steps:\n\n1. **Understand the Parabola and Line Intersection:**\n The parabola is given by \\( y = kx^2 - 2kx + l \\).\n The line is given by \\( y = 4 \\).\n\n2. **Find the Intersection Points:**\n Set the equations equal to each other to find the points of intersection \\( A \\) and \\( B \\):\n ",
28
+ 2
29
+ ],
30
+ [
31
+ "246d26",
32
+ "Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
33
+ 250,
34
+ "Please give a correct solution for this: Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
35
+ "To solve this problem, we need to ensure that any two yellow numbers have a sum that is a blue number. \n\nLet's break down the problem:\n\n1. **Understand the problem constraints:**\n - We have three-digit numbers ranging from 111 to 999.\n - Each number must be colored either blue or yellow.\n - The sum of any two yellow numbers must be a blue number.\n\n2. **Define the variables:**\n -",
36
+ 2
37
+ ],
38
+ [
39
+ "2fc4ad",
40
+ "Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
41
+ 702,
42
+ "Please give a correct solution for this: Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
43
+ "Let's break down the problem step by step. \n\n**Understanding the Sparkle Operation:**\n\n1. **Sum of Digits:**\n For a number \\( n \\), the sum of its digits is calculated.\n\n2. **Factorial of Sum:**\n The sparkle is then calculated as \\( n! \\).\n\n**Special Numbers:**\n\nA special number is defined as one that eventually leads to every subsequent number being less than 6. This implies",
44
+ 2
45
+ ],
46
+ [
47
+ "430b63",
48
+ "What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
49
+ 800,
50
+ "Please give a correct solution for this: What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
51
+ "To solve the problem, we need to find the minimum value of the expression \\(5x^2 + 5y^2 - 8xy\\) subject to the constraint \\(|x - 2y| + |y - 2x| = 40\\).\n\nHere are the steps to solve this problem:\n\n1. **Understand the Constraint:**\n The constraint given is \\(|x - 2y| + |y - 2",
52
+ 2
53
+ ],
54
+ [
55
+ "5277ed",
56
+ "There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
57
+ 211,
58
+ "Please give a correct solution for this: There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
59
+ "To solve this problem, we need to find a unique increasing geometric sequence of five 2-digit positive integers. Let's denote the first term of the sequence by \\( a \\) and the common ratio by \\( r \\). The five terms of the sequence can be represented as:\n\n\\[ a, ar, ar^2, ar^3, ar^4 \\]\n\nGiven that all these terms are 2-digit positive integers, we need to find \\",
60
+ 2
61
+ ],
62
+ [
63
+ "739bc9",
64
+ "For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
65
+ 199,
66
+ "Please give a correct solution for this: For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
67
+ "To solve the problem, we need to analyze the equation \\(\\vert \\vert x-1 \\vert - 2 \\vert = \\frac{m}{100}\\) and determine for how many positive integers \\(m\\) the equation has exactly 4 distinct solutions.\n\n### Steps to Solve the Problem:\n\n1. **Understand the Absolute Value Equation:**\n - The equation \\(\\vert \\vert x-1 \\vert - 2 \\vert = \\frac",
68
+ 2
69
+ ],
70
+ [
71
+ "82e2a0",
72
+ "Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
73
+ 185,
74
+ "Please give a correct solution for this: Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
75
+ "To solve this problem, we need to determine the probability \\(\\frac{a}{b}\\) that the highest roll on four 6-sided dice is a 5, and then find the values of \\(a\\) and \\(b\\) such that \\(a\\) and \\(b\\) are relatively prime. Let's break down the steps:\n\n1. **Determine the Sample Space:**\n - Calculate the total number of possible outcomes when rolling four ",
76
+ 2
77
+ ],
78
+ [
79
+ "8ee6f3",
80
+ "The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
81
+ 320,
82
+ "Please give a correct solution for this: The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
83
+ "To solve this problem, we need to find the points \\((x, y)\\) that satisfy the given equation:\n\\[\n((\\text{Abs}(x + y) - 10)^2 + (\\text{Abs}(x - y) - 10)^2)((\\text{Abs}(x) - 8)^2 + (\\text{Abs}(y) - 8)^2) = 0\n\\]\n\nFirst,",
84
+ 2
85
+ ],
86
+ [
87
+ "bedda4",
88
+ "Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
89
+ 480,
90
+ "Please give a correct solution for this: Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
91
+ "To solve this problem, we need to carefully analyze the geometric configuration and calculate the areas of the four regions formed by the lines \\(DP\\) and \\(BQ\\) within the unit square \\(ABCD\\).\n\nLet's break down the problem into manageable parts:\n\n1. **Define the Coordinates:**\n - Place the unit square \\(ABCD\\) in the coordinate plane with \\(A\\) at \\((0, 0)\\),",
92
+ 2
93
+ ],
94
+ [
95
+ "d7e9c9",
96
+ "A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
97
+ 199,
98
+ "Please give a correct solution for this: A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
99
+ "To solve the problem, we need to find the function \\( f \\) that satisfies the given conditions:\n\n1. \\( f(f(f(n))) = 8n - 7 \\)\n2. \\( f(2n) = 2f(n) + 1 \\)\n\nLet's break down the problem step-by-step:\n\n### Step 1: Analyze the Recursion\n\nFirst, let's express",
100
+ 2
101
+ ]
102
+ ]
103
+ }
104
+ }
105
+ },
106
+ "error": null,
107
+ "meta": {
108
+ "outputs": {},
109
+ "type": "table_view",
110
+ "inputs": {
111
+ "input": {
112
+ "type": {
113
+ "type": "<class 'inspect._empty'>"
114
+ },
115
+ "name": "input",
116
+ "position": "left"
117
+ }
118
+ },
119
+ "name": "View",
120
+ "params": {}
121
+ },
122
+ "view": {
123
+ "dataframes": {
124
+ "df": {
125
+ "columns": [
126
+ "id",
127
+ "text",
128
+ "answer",
129
+ "prompt",
130
+ "response"
131
+ ],
132
+ "data": [
133
+ [
134
+ "229ee8",
135
+ "Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
136
+ 52.0,
137
+ "Please give a correct solution for this: Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
138
+ " We start by finding the x-coordinates of points"
139
+ ],
140
+ [
141
+ "246d26",
142
+ "Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
143
+ 250.0,
144
+ "Please give a correct solution for this: Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
145
+ " Let's consider the numbers in the form of"
146
+ ],
147
+ [
148
+ "2fc4ad",
149
+ "Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
150
+ 702.0,
151
+ "Please give a correct solution for this: Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
152
+ " Let $S$ denote the set of all $"
153
+ ],
154
+ [
155
+ "430b63",
156
+ "What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
157
+ 800.0,
158
+ "Please give a correct solution for this: What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
159
+ " We can rewrite the given equation as $|x-"
160
+ ],
161
+ [
162
+ "5277ed",
163
+ "There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
164
+ 211.0,
165
+ "Please give a correct solution for this: There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
166
+ " Let the five terms of the geometric sequence be $"
167
+ ],
168
+ [
169
+ "739bc9",
170
+ "For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
171
+ 199.0,
172
+ "Please give a correct solution for this: For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
173
+ " Let's break down the problem.\n\n"
174
+ ],
175
+ [
176
+ "82e2a0",
177
+ "Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
178
+ 185.0,
179
+ "Please give a correct solution for this: Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
180
+ " The total number of outcomes when rolling four 6"
181
+ ],
182
+ [
183
+ "8ee6f3",
184
+ "The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
185
+ 320.0,
186
+ "Please give a correct solution for this: The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
187
+ " We see that the given equation is equivalent to either"
188
+ ],
189
+ [
190
+ "bedda4",
191
+ "Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
192
+ 480.0,
193
+ "Please give a correct solution for this: Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
194
+ " [asy] size(7cm); pair A"
195
+ ],
196
+ [
197
+ "d7e9c9",
198
+ "A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
199
+ 199.0,
200
+ "Please give a correct solution for this: A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
201
+ " Let $P(n)$ be the assertion that"
202
+ ]
203
+ ]
204
+ }
205
+ }
206
+ }
207
+ },
208
+ "position": {
209
+ "x": 918.8473117253317,
210
+ "y": -788.2139000963755
211
+ },
212
+ "height": 497.0,
213
+ "dragging": false,
214
+ "measured": {
215
+ "height": 497.0,
216
+ "width": 847.0
217
+ },
218
+ "parentId": null,
219
+ "width": 847.0
220
+ },
221
+ {
222
+ "id": "View 2",
223
+ "type": "table_view",
224
+ "data": {
225
+ "title": "View",
226
+ "params": {},
227
+ "display": {
228
+ "dataframes": {
229
+ "df": {
230
+ "columns": [
231
+ "id",
232
+ "text",
233
+ "answer"
234
+ ],
235
+ "data": [
236
+ [
237
+ "229ee8",
238
+ "Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
239
+ 52
240
+ ],
241
+ [
242
+ "246d26",
243
+ "Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
244
+ 250
245
+ ],
246
+ [
247
+ "2fc4ad",
248
+ "Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
249
+ 702
250
+ ],
251
+ [
252
+ "430b63",
253
+ "What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
254
+ 800
255
+ ],
256
+ [
257
+ "5277ed",
258
+ "There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
259
+ 211
260
+ ],
261
+ [
262
+ "739bc9",
263
+ "For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
264
+ 199
265
+ ],
266
+ [
267
+ "82e2a0",
268
+ "Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
269
+ 185
270
+ ],
271
+ [
272
+ "8ee6f3",
273
+ "The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
274
+ 320
275
+ ],
276
+ [
277
+ "bedda4",
278
+ "Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
279
+ 480
280
+ ],
281
+ [
282
+ "d7e9c9",
283
+ "A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
284
+ 199
285
+ ]
286
+ ]
287
+ }
288
+ }
289
+ },
290
+ "error": null,
291
+ "meta": {
292
+ "name": "View",
293
+ "outputs": {},
294
+ "params": {},
295
+ "type": "table_view",
296
+ "inputs": {
297
+ "input": {
298
+ "name": "input",
299
+ "type": {
300
+ "type": "<class 'inspect._empty'>"
301
+ },
302
+ "position": "left"
303
+ }
304
+ }
305
+ },
306
+ "view": {
307
+ "dataframes": {
308
+ "df": {
309
+ "data": [
310
+ [
311
+ "229ee8",
312
+ "Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
313
+ 52.0
314
+ ],
315
+ [
316
+ "246d26",
317
+ "Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
318
+ 250.0
319
+ ],
320
+ [
321
+ "2fc4ad",
322
+ "Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
323
+ 702.0
324
+ ],
325
+ [
326
+ "430b63",
327
+ "What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
328
+ 800.0
329
+ ],
330
+ [
331
+ "5277ed",
332
+ "There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
333
+ 211.0
334
+ ],
335
+ [
336
+ "739bc9",
337
+ "For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
338
+ 199.0
339
+ ],
340
+ [
341
+ "82e2a0",
342
+ "Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
343
+ 185.0
344
+ ],
345
+ [
346
+ "8ee6f3",
347
+ "The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
348
+ 320.0
349
+ ],
350
+ [
351
+ "bedda4",
352
+ "Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
353
+ 480.0
354
+ ],
355
+ [
356
+ "d7e9c9",
357
+ "A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
358
+ 199.0
359
+ ]
360
+ ],
361
+ "columns": [
362
+ "id",
363
+ "text",
364
+ "answer"
365
+ ]
366
+ }
367
+ }
368
+ }
369
+ },
370
+ "position": {
371
+ "x": -109.39082282780262,
372
+ "y": -773.6298092973026
373
+ },
374
+ "height": 491.0,
375
+ "dragging": false,
376
+ "measured": {
377
+ "width": 642.0,
378
+ "height": 491.0
379
+ },
380
+ "parentId": null,
381
+ "width": 642.0
382
+ },
383
+ {
384
+ "id": "Create prompt 1",
385
+ "type": "basic",
386
+ "data": {
387
+ "title": "Create prompt",
388
+ "params": {
389
+ "template": "Please give a correct solution for this: {{text}}"
390
+ },
391
+ "display": null,
392
+ "error": null,
393
+ "collapsed": null,
394
+ "meta": {
395
+ "outputs": {
396
+ "output": {
397
+ "type": {
398
+ "type": "None"
399
+ },
400
+ "name": "output",
401
+ "position": "right"
402
+ }
403
+ },
404
+ "params": {
405
+ "save_as": {
406
+ "type": {
407
+ "type": "<class 'str'>"
408
+ },
409
+ "name": "save_as",
410
+ "default": "prompt"
411
+ },
412
+ "template": {
413
+ "default": null,
414
+ "name": "template",
415
+ "type": {
416
+ "format": "textarea"
417
+ }
418
+ }
419
+ },
420
+ "type": "basic",
421
+ "inputs": {
422
+ "input": {
423
+ "position": "left",
424
+ "type": {
425
+ "type": "<class 'inspect._empty'>"
426
+ },
427
+ "name": "input"
428
+ }
429
+ },
430
+ "name": "Create prompt"
431
+ },
432
+ "__execution_delay": 0.0
433
+ },
434
+ "position": {
435
+ "x": -55.639116348124276,
436
+ "y": -180.9050378792738
437
+ },
438
+ "parentId": null,
439
+ "dragging": false,
440
+ "width": 321.0,
441
+ "measured": {
442
+ "height": 322.0,
443
+ "width": 321.0
444
+ },
445
+ "height": 322.0
446
+ },
447
+ {
448
+ "id": "Create prompt 2",
449
+ "type": "basic",
450
+ "data": {
451
+ "title": "Create prompt",
452
+ "params": {
453
+ "template": "Is this a nice solution? {{response}}"
454
+ },
455
+ "display": null,
456
+ "error": null,
457
+ "__execution_delay": 0.0,
458
+ "meta": {
459
+ "inputs": {
460
+ "input": {
461
+ "name": "input",
462
+ "type": {
463
+ "type": "<class 'inspect._empty'>"
464
+ },
465
+ "position": "left"
466
+ }
467
+ },
468
+ "outputs": {
469
+ "output": {
470
+ "type": {
471
+ "type": "None"
472
+ },
473
+ "position": "right",
474
+ "name": "output"
475
+ }
476
+ },
477
+ "params": {
478
+ "save_as": {
479
+ "name": "save_as",
480
+ "default": "prompt",
481
+ "type": {
482
+ "type": "<class 'str'>"
483
+ }
484
+ },
485
+ "template": {
486
+ "name": "template",
487
+ "type": {
488
+ "format": "textarea"
489
+ },
490
+ "default": null
491
+ }
492
+ },
493
+ "name": "Create prompt",
494
+ "type": "basic"
495
+ },
496
+ "collapsed": null
497
+ },
498
+ "position": {
499
+ "x": 916.0813218020223,
500
+ "y": 27.604649145022677
501
+ },
502
+ "width": 292.0,
503
+ "dragging": false,
504
+ "parentId": null,
505
+ "measured": {
506
+ "height": 278.0,
507
+ "width": 292.0
508
+ },
509
+ "height": 278.0
510
+ },
511
+ {
512
+ "id": "View 3",
513
+ "type": "table_view",
514
+ "data": {
515
+ "title": "View",
516
+ "params": {},
517
+ "display": {
518
+ "dataframes": {
519
+ "df": {
520
+ "columns": [
521
+ "id",
522
+ "text",
523
+ "answer",
524
+ "prompt",
525
+ "response",
526
+ "iterations-Loop 1"
527
+ ],
528
+ "data": [
529
+ [
530
+ "229ee8",
531
+ "Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
532
+ 52,
533
+ "Is this a nice solution? To solve this problem, we need to follow these steps:\n\n1. **Understand the Parabola and Line Intersection:**\n The parabola is given by \\( y = kx^2 - 2kx + l \\).\n The line is given by \\( y = 4 \\).\n\n2. **Find the Intersection Points:**\n Set the equations equal to each other to find the points of intersection \\( A \\) and \\( B \\):\n ",
534
+ "To solve this problem, we need to set the equation of the parabola equal to the equation of the line and solve for the points of intersection. Let's break it down into the steps you've outlined and use Python with SymPy to find the solution.\n\n### Steps:\n\n1. **Understand the Parabola and Line Intersection:**\n - The equation of the parabola is \\( y = kx^2 - 2kx + l \\).\n - The",
535
+ 3
536
+ ],
537
+ [
538
+ "246d26",
539
+ "Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
540
+ 250,
541
+ "Is this a nice solution? To solve this problem, we need to ensure that any two yellow numbers have a sum that is a blue number. \n\nLet's break down the problem:\n\n1. **Understand the problem constraints:**\n - We have three-digit numbers ranging from 111 to 999.\n - Each number must be colored either blue or yellow.\n - The sum of any two yellow numbers must be a blue number.\n\n2. **Define the variables:**\n -",
542
+ "To solve this problem, we need to ensure that for any two yellow numbers, their sum falls within the range of blue numbers. Let's break down the problem step-by-step.\n\n### Problem Breakdown\n\n1. **Define the Variables:**\n - Let \\( Y \\) be a set of three-digit yellow numbers.\n - Let \\( B \\) be a set of three-digit blue numbers.\n - Let \\( \\text{Sum}(a",
543
+ 3
544
+ ],
545
+ [
546
+ "2fc4ad",
547
+ "Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
548
+ 702,
549
+ "Is this a nice solution? Let's break down the problem step by step. \n\n**Understanding the Sparkle Operation:**\n\n1. **Sum of Digits:**\n For a number \\( n \\), the sum of its digits is calculated.\n\n2. **Factorial of Sum:**\n The sparkle is then calculated as \\( n! \\).\n\n**Special Numbers:**\n\nA special number is defined as one that eventually leads to every subsequent number being less than 6. This implies",
550
+ "The solution you've provided for calculating a Sparkle number is a structured approach to solving the problem, but it could be improved in several ways to ensure clarity, efficiency, and completeness. Let's break down the steps and identify potential improvements:\n\n1. **Understanding the Problem:**\n - **Sum of Digits:** Calculate the sum of the digits of a number \\( n \\).\n - **Factorial Calculation:** Compute the factorial of the sum of digits.\n\n2",
551
+ 3
552
+ ],
553
+ [
554
+ "430b63",
555
+ "What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
556
+ 800,
557
+ "Is this a nice solution? To solve the problem, we need to find the minimum value of the expression \\(5x^2 + 5y^2 - 8xy\\) subject to the constraint \\(|x - 2y| + |y - 2x| = 40\\).\n\nHere are the steps to solve this problem:\n\n1. **Understand the Constraint:**\n The constraint given is \\(|x - 2y| + |y - 2",
558
+ "To solve this optimization problem with the given constraint, we can use the method of Lagrange multipliers. This technique is useful when we have a function to maximize or minimize subject to equality constraints.\n\nGiven:\n\\[ f(x, y) = 5x^2 + 5y^2 - 8xy \\]\n\\[ g(x, y) = |x - 2y| + |y - 2x| = 40 \\",
559
+ 3
560
+ ],
561
+ [
562
+ "5277ed",
563
+ "There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
564
+ 211,
565
+ "Is this a nice solution? To solve this problem, we need to find a unique increasing geometric sequence of five 2-digit positive integers. Let's denote the first term of the sequence by \\( a \\) and the common ratio by \\( r \\). The five terms of the sequence can be represented as:\n\n\\[ a, ar, ar^2, ar^3, ar^4 \\]\n\nGiven that all these terms are 2-digit positive integers, we need to find \\",
566
+ "To solve the problem of finding a unique increasing geometric sequence of five 2-digit positive integers \\(a, ar, ar^2, ar^3, ar^4\\), we can follow these steps:\n\n1. **Understand the Problem:**\n We need to find \\(a\\) and \\(r\\) such that \\(a, ar, ar^2, ar^3, ar^4\\) are all 2-digit positive integers. Let",
567
+ 3
568
+ ],
569
+ [
570
+ "739bc9",
571
+ "For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
572
+ 199,
573
+ "Is this a nice solution? To solve the problem, we need to analyze the equation \\(\\vert \\vert x-1 \\vert - 2 \\vert = \\frac{m}{100}\\) and determine for how many positive integers \\(m\\) the equation has exactly 4 distinct solutions.\n\n### Steps to Solve the Problem:\n\n1. **Understand the Absolute Value Equation:**\n - The equation \\(\\vert \\vert x-1 \\vert - 2 \\vert = \\frac",
574
+ "To solve the problem, we need to determine the number of positive integers \\( m \\) for which the equation \\(\\vert \\vert x-1 \\vert - 2 \\vert = \\frac{m}{100}\\) has exactly 4 distinct solutions for \\( x \\).\n\n### Step-by-Step Solution:\n\n1. **Analyze the Absolute Value Equation:**\n The equation \\(\\vert \\vert x-1 \\vert - 2 \\",
575
+ 3
576
+ ],
577
+ [
578
+ "82e2a0",
579
+ "Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
580
+ 185,
581
+ "Is this a nice solution? To solve this problem, we need to determine the probability \\(\\frac{a}{b}\\) that the highest roll on four 6-sided dice is a 5, and then find the values of \\(a\\) and \\(b\\) such that \\(a\\) and \\(b\\) are relatively prime. Let's break down the steps:\n\n1. **Determine the Sample Space:**\n - Calculate the total number of possible outcomes when rolling four ",
582
+ "Sure, to determine if the solution provided is \"nice\" in the context of being clear, concise, and well-organized, let's evaluate the solution for clarity and completeness:\n\n### Solution Breakdown\n\n1. **Determine the Sample Space:**\n - **Calculate the Total Number of Possible Outcomes:**\n Rolling four 6-sided dice means each die has 6 possible outcomes. Therefore, the total number of possible outcomes is:\n \\[\n 6 \\times ",
583
+ 3
584
+ ],
585
+ [
586
+ "8ee6f3",
587
+ "The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
588
+ 320,
589
+ "Is this a nice solution? To solve this problem, we need to find the points \\((x, y)\\) that satisfy the given equation:\n\\[\n((\\text{Abs}(x + y) - 10)^2 + (\\text{Abs}(x - y) - 10)^2)((\\text{Abs}(x) - 8)^2 + (\\text{Abs}(y) - 8)^2) = 0\n\\]\n\nFirst,",
590
+ "To determine if the given solution is \"nice\" (i.e., provides integer or simple coordinates), we need to analyze the equation:\n\n\\[\n((\\text{Abs}(x + y) - 10)^2 + (\\text{Abs}(x - y) - 10)^2)((\\text{Abs}(x) - 8)^2 + (\\text{Abs}(y) - 8)^2) = 0\n",
591
+ 3
592
+ ],
593
+ [
594
+ "bedda4",
595
+ "Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
596
+ 480,
597
+ "Is this a nice solution? To solve this problem, we need to carefully analyze the geometric configuration and calculate the areas of the four regions formed by the lines \\(DP\\) and \\(BQ\\) within the unit square \\(ABCD\\).\n\nLet's break down the problem into manageable parts:\n\n1. **Define the Coordinates:**\n - Place the unit square \\(ABCD\\) in the coordinate plane with \\(A\\) at \\((0, 0)\\),",
598
+ "Yes, this is a nice and clear solution to the problem of calculating the areas of the four regions formed by the lines \\(DP\\) and \\(BQ\\) within a unit square \\(ABCD\\). Here's a step-by-step breakdown of the approach:\n\n1. **Define the Coordinates:**\n - Place the unit square \\(ABCD\\) in the coordinate plane with \\(A\\) at \\((0, 0)\\),",
599
+ 3
600
+ ],
601
+ [
602
+ "d7e9c9",
603
+ "A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
604
+ 199,
605
+ "Is this a nice solution? To solve the problem, we need to find the function \\( f \\) that satisfies the given conditions:\n\n1. \\( f(f(f(n))) = 8n - 7 \\)\n2. \\( f(2n) = 2f(n) + 1 \\)\n\nLet's break down the problem step-by-step:\n\n### Step 1: Analyze the Recursion\n\nFirst, let's express",
606
+ "To solve the problem, we need to find a function \\( f \\) that satisfies the given conditions:\n\n1. \\( f(f(f(n))) = 8n - 7 \\)\n2. \\( f(2n) = 2f(n) + 1 \\)\n\nLet's break down the problem step-by-step:\n\n### Step 1: Analyze the Recursion\n\nGiven the recursive nature of",
607
+ 3
608
+ ]
609
+ ]
610
+ }
611
+ }
612
+ },
613
+ "error": null,
614
+ "view": {
615
+ "dataframes": {
616
+ "df": {
617
+ "columns": [
618
+ "id",
619
+ "text",
620
+ "answer",
621
+ "prompt",
622
+ "response"
623
+ ],
624
+ "data": [
625
+ [
626
+ "229ee8",
627
+ "Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",
628
+ 52.0,
629
+ "Is this a nice solution? We start by finding the x-coordinates of points",
630
+ "no"
631
+ ],
632
+ [
633
+ "246d26",
634
+ "Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",
635
+ 250.0,
636
+ "Is this a nice solution? Let's consider the numbers in the form of",
637
+ "no"
638
+ ],
639
+ [
640
+ "2fc4ad",
641
+ "Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",
642
+ 702.0,
643
+ "Is this a nice solution? Let $S$ denote the set of all $",
644
+ "no"
645
+ ],
646
+ [
647
+ "430b63",
648
+ "What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",
649
+ 800.0,
650
+ "Is this a nice solution? We can rewrite the given equation as $|x-",
651
+ "no"
652
+ ],
653
+ [
654
+ "5277ed",
655
+ "There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",
656
+ 211.0,
657
+ "Is this a nice solution? Let the five terms of the geometric sequence be $",
658
+ "yes"
659
+ ],
660
+ [
661
+ "739bc9",
662
+ "For how many positive integers $m$ does the equation $\\vert \\vert x-1 \\vert -2 \\vert=\\frac{m}{100}$ have $4$ distinct solutions?",
663
+ 199.0,
664
+ "Is this a nice solution? Let's break down the problem.\n\n",
665
+ "yes"
666
+ ],
667
+ [
668
+ "82e2a0",
669
+ "Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",
670
+ 185.0,
671
+ "Is this a nice solution? The total number of outcomes when rolling four 6",
672
+ "no"
673
+ ],
674
+ [
675
+ "8ee6f3",
676
+ "The points $\\left(x, y\\right)$ satisfying $((\\vert x + y \\vert - 10)^2 + ( \\vert x - y \\vert - 10)^2)((\\vert x \\vert - 8)^2 + ( \\vert y \\vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",
677
+ 320.0,
678
+ "Is this a nice solution? We see that the given equation is equivalent to either",
679
+ "no"
680
+ ],
681
+ [
682
+ "bedda4",
683
+ "Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",
684
+ 480.0,
685
+ "Is this a nice solution? [asy] size(7cm); pair A",
686
+ "no"
687
+ ],
688
+ [
689
+ "d7e9c9",
690
+ "A function $f: \\mathbb N \\to \\mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",
691
+ 199.0,
692
+ "Is this a nice solution? Let $P(n)$ be the assertion that",
693
+ "yes"
694
+ ]
695
+ ]
696
+ }
697
+ }
698
+ },
699
+ "meta": {
700
+ "name": "View",
701
+ "type": "table_view",
702
+ "params": {},
703
+ "inputs": {
704
+ "input": {
705
+ "type": {
706
+ "type": "<class 'inspect._empty'>"
707
+ },
708
+ "name": "input",
709
+ "position": "left"
710
+ }
711
+ },
712
+ "outputs": {}
713
+ }
714
+ },
715
+ "position": {
716
+ "x": 1997.201620358635,
717
+ "y": -45.77336526660309
718
+ },
719
+ "height": 599.0,
720
+ "dragging": false,
721
+ "width": 1046.0,
722
+ "measured": {
723
+ "height": 599.0,
724
+ "width": 1046.0
725
+ },
726
+ "parentId": null
727
+ },
728
+ {
729
+ "id": "Loop 1",
730
+ "type": "basic",
731
+ "data": {
732
+ "title": "Loop",
733
+ "params": {
734
+ "max_iterations": 10.0
735
+ },
736
+ "display": null,
737
+ "error": null,
738
+ "meta": {
739
+ "outputs": {
740
+ "output": {
741
+ "type": {
742
+ "type": "None"
743
+ },
744
+ "position": "left",
745
+ "name": "output"
746
+ }
747
+ },
748
+ "name": "Loop",
749
+ "params": {
750
+ "max_iterations": {
751
+ "default": 3.0,
752
+ "type": {
753
+ "type": "<class 'int'>"
754
+ },
755
+ "name": "max_iterations"
756
+ }
757
+ },
758
+ "inputs": {
759
+ "input": {
760
+ "name": "input",
761
+ "type": {
762
+ "type": "<class 'inspect._empty'>"
763
+ },
764
+ "position": "right"
765
+ }
766
+ },
767
+ "type": "basic"
768
+ }
769
+ },
770
+ "position": {
771
+ "x": 174.3218329398557,
772
+ "y": 350.51597142125047
773
+ },
774
+ "width": 362.0,
775
+ "height": 175.0,
776
+ "parentId": null,
777
+ "dragging": false,
778
+ "measured": {
779
+ "height": 175.0,
780
+ "width": 362.0
781
+ }
782
+ },
783
+ {
784
+ "id": "Input CSV 1",
785
+ "type": "basic",
786
+ "data": {
787
+ "title": "Input CSV",
788
+ "params": {
789
+ "filename": "data/aimo-examples.csv",
790
+ "key": "problem"
791
+ },
792
+ "display": null,
793
+ "error": null,
794
+ "meta": {
795
+ "outputs": {
796
+ "output": {
797
+ "type": {
798
+ "type": "None"
799
+ },
800
+ "position": "right",
801
+ "name": "output"
802
+ }
803
+ },
804
+ "inputs": {},
805
+ "params": {
806
+ "filename": {
807
+ "type": {
808
+ "format": "path"
809
+ },
810
+ "name": "filename",
811
+ "default": null
812
+ },
813
+ "key": {
814
+ "type": {
815
+ "type": "<class 'str'>"
816
+ },
817
+ "name": "key",
818
+ "default": null
819
+ }
820
+ },
821
+ "name": "Input CSV",
822
+ "position": {
823
+ "y": 108.0,
824
+ "x": 297.0
825
+ },
826
+ "type": "basic"
827
+ },
828
+ "__execution_delay": 0.0,
829
+ "collapsed": null
830
+ },
831
+ "position": {
832
+ "x": -679.7002594023377,
833
+ "y": -415.71560732240505
834
+ },
835
+ "width": 344.0,
836
+ "height": 302.0
837
+ },
838
+ {
839
+ "id": "Ask LLM 3",
840
+ "type": "basic",
841
+ "data": {
842
+ "title": "Ask LLM",
843
+ "params": {
844
+ "model": "SultanR/SmolTulu-1.7b-Instruct",
845
+ "accepted_regex": null,
846
+ "max_tokens": 100.0
847
+ },
848
+ "display": null,
849
+ "error": null,
850
+ "meta": {
851
+ "position": {
852
+ "x": 822.0,
853
+ "y": 124.0
854
+ },
855
+ "outputs": {
856
+ "output": {
857
+ "type": {
858
+ "type": "None"
859
+ },
860
+ "name": "output",
861
+ "position": "right"
862
+ }
863
+ },
864
+ "inputs": {
865
+ "input": {
866
+ "name": "input",
867
+ "type": {
868
+ "type": "<class 'inspect._empty'>"
869
+ },
870
+ "position": "left"
871
+ }
872
+ },
873
+ "params": {
874
+ "accepted_regex": {
875
+ "default": null,
876
+ "name": "accepted_regex",
877
+ "type": {
878
+ "type": "<class 'str'>"
879
+ }
880
+ },
881
+ "max_tokens": {
882
+ "type": {
883
+ "type": "<class 'int'>"
884
+ },
885
+ "default": 100.0,
886
+ "name": "max_tokens"
887
+ },
888
+ "model": {
889
+ "default": null,
890
+ "type": {
891
+ "type": "<class 'str'>"
892
+ },
893
+ "name": "model"
894
+ }
895
+ },
896
+ "name": "Ask LLM",
897
+ "type": "basic"
898
+ },
899
+ "collapsed": null,
900
+ "__execution_delay": 0.0
901
+ },
902
+ "position": {
903
+ "x": 404.2326800558385,
904
+ "y": -173.5420967906593
905
+ },
906
+ "width": 372.0,
907
+ "height": 331.0
908
+ },
909
+ {
910
+ "id": "Ask LLM 1",
911
+ "type": "basic",
912
+ "data": {
913
+ "title": "Ask LLM",
914
+ "params": {
915
+ "model": "SultanR/SmolTulu-1.7b-Instruct",
916
+ "accepted_regex": "yes|no",
917
+ "max_tokens": "100"
918
+ },
919
+ "display": null,
920
+ "error": null,
921
+ "meta": {
922
+ "outputs": {
923
+ "output": {
924
+ "position": "right",
925
+ "name": "output",
926
+ "type": {
927
+ "type": "None"
928
+ }
929
+ }
930
+ },
931
+ "name": "Ask LLM",
932
+ "inputs": {
933
+ "input": {
934
+ "name": "input",
935
+ "type": {
936
+ "type": "<class 'inspect._empty'>"
937
+ },
938
+ "position": "left"
939
+ }
940
+ },
941
+ "params": {
942
+ "max_tokens": {
943
+ "default": 100.0,
944
+ "type": {
945
+ "type": "<class 'int'>"
946
+ },
947
+ "name": "max_tokens"
948
+ },
949
+ "accepted_regex": {
950
+ "type": {
951
+ "type": "<class 'str'>"
952
+ },
953
+ "default": null,
954
+ "name": "accepted_regex"
955
+ },
956
+ "model": {
957
+ "default": null,
958
+ "type": {
959
+ "type": "<class 'str'>"
960
+ },
961
+ "name": "model"
962
+ }
963
+ },
964
+ "type": "basic",
965
+ "position": {
966
+ "y": 509.0,
967
+ "x": 868.0
968
+ }
969
+ },
970
+ "collapsed": null,
971
+ "__execution_delay": 0.0
972
+ },
973
+ "position": {
974
+ "x": 1382.8452916325896,
975
+ "y": 6.3459091373125105
976
+ },
977
+ "width": 408.0,
978
+ "height": 328.0
979
+ }
980
+ ],
981
+ "edges": [
982
+ {
983
+ "id": "Input CSV 1 View 2",
984
+ "source": "Input CSV 1",
985
+ "target": "View 2",
986
+ "sourceHandle": "output",
987
+ "targetHandle": "input"
988
+ },
989
+ {
990
+ "id": "Input CSV 1 Create prompt 1",
991
+ "source": "Input CSV 1",
992
+ "target": "Create prompt 1",
993
+ "sourceHandle": "output",
994
+ "targetHandle": "input"
995
+ },
996
+ {
997
+ "id": "Create prompt 1 Ask LLM 3",
998
+ "source": "Create prompt 1",
999
+ "target": "Ask LLM 3",
1000
+ "sourceHandle": "output",
1001
+ "targetHandle": "input"
1002
+ },
1003
+ {
1004
+ "id": "Ask LLM 3 Create prompt 2",
1005
+ "source": "Ask LLM 3",
1006
+ "target": "Create prompt 2",
1007
+ "sourceHandle": "output",
1008
+ "targetHandle": "input"
1009
+ },
1010
+ {
1011
+ "id": "Ask LLM 3 Loop 1",
1012
+ "source": "Ask LLM 3",
1013
+ "target": "Loop 1",
1014
+ "sourceHandle": "output",
1015
+ "targetHandle": "input"
1016
+ },
1017
+ {
1018
+ "id": "Ask LLM 3 View 1",
1019
+ "source": "Ask LLM 3",
1020
+ "target": "View 1",
1021
+ "sourceHandle": "output",
1022
+ "targetHandle": "input"
1023
+ },
1024
+ {
1025
+ "id": "Create prompt 2 Ask LLM 1",
1026
+ "source": "Create prompt 2",
1027
+ "target": "Ask LLM 1",
1028
+ "sourceHandle": "output",
1029
+ "targetHandle": "input"
1030
+ },
1031
+ {
1032
+ "id": "Ask LLM 1 View 3",
1033
+ "source": "Ask LLM 1",
1034
+ "target": "View 3",
1035
+ "sourceHandle": "output",
1036
+ "targetHandle": "input"
1037
+ }
1038
+ ]
1039
+ }
lynxkite-app/data/Graph RAG CHANGED
@@ -7,22 +7,24 @@
7
  "data": {
8
  "title": "Input document",
9
  "params": {
10
- "filename": "/Users/danieldarabos/lynxkite-2000/example-pizza.md"
11
  },
12
  "display": null,
13
  "error": null,
 
14
  "meta": {
15
- "name": "Input document",
16
  "params": {
17
  "filename": {
18
- "name": "filename",
19
- "default": null,
20
  "type": {
21
  "format": "path"
22
- }
 
 
23
  }
24
  },
25
  "inputs": {},
 
26
  "outputs": {
27
  "output": {
28
  "name": "output",
@@ -31,16 +33,17 @@
31
  },
32
  "position": "right"
33
  }
34
- },
35
- "type": "basic",
36
- "sub_nodes": null
37
- }
38
  },
39
  "position": {
40
- "x": -849.9937814890327,
41
- "y": -303.5069988257918
42
  },
43
- "parentId": null
 
 
44
  },
45
  {
46
  "id": "View 1",
@@ -188,7 +191,6 @@
188
  "error": null,
189
  "meta": {
190
  "name": "View",
191
- "params": {},
192
  "inputs": {
193
  "input": {
194
  "name": "input",
@@ -199,8 +201,8 @@
199
  }
200
  },
201
  "outputs": {},
202
- "type": "table_view",
203
- "sub_nodes": null
204
  },
205
  "beingResized": false
206
  },
@@ -209,8 +211,8 @@
209
  "y": -562.3096858852143
210
  },
211
  "parentId": null,
212
- "width": 539,
213
- "height": 296
214
  },
215
  {
216
  "id": "Split document 1",
@@ -223,25 +225,26 @@
223
  "display": null,
224
  "error": null,
225
  "meta": {
226
- "name": "Split document",
227
  "params": {
228
  "delimiter": {
229
  "name": "delimiter",
230
- "default": "\\n\\n",
231
  "type": {
232
  "type": "<class 'str'>"
233
- }
 
234
  }
235
  },
 
236
  "inputs": {
237
  "input": {
238
- "name": "input",
239
  "type": {
240
  "type": "<class 'inspect._empty'>"
241
  },
242
- "position": "left"
 
243
  }
244
  },
 
245
  "outputs": {
246
  "output": {
247
  "name": "output",
@@ -250,16 +253,16 @@
250
  },
251
  "position": "right"
252
  }
253
- },
254
- "type": "basic",
255
- "sub_nodes": null
256
  }
257
  },
258
  "position": {
259
- "x": -465.5338722898887,
260
- "y": -303.0364587440906
261
  },
262
- "parentId": null
 
 
263
  },
264
  {
265
  "id": "Input chat 1",
@@ -271,7 +274,9 @@
271
  },
272
  "display": null,
273
  "error": null,
 
274
  "meta": {
 
275
  "name": "Input chat",
276
  "params": {
277
  "chat": {
@@ -285,25 +290,24 @@
285
  "inputs": {},
286
  "outputs": {
287
  "output": {
288
- "name": "output",
289
  "type": {
290
  "type": "None"
291
  },
292
- "position": "right"
293
  }
294
- },
295
- "type": "basic",
296
- "sub_nodes": null
297
  },
 
298
  "beingResized": false
299
  },
300
  "position": {
301
- "x": -857.4114014537504,
302
- "y": 146.20705074522004
303
  },
304
  "parentId": null,
305
- "width": 346,
306
- "height": 120
307
  },
308
  {
309
  "id": "Create prompt 1",
@@ -311,56 +315,59 @@
311
  "data": {
312
  "title": "Create prompt",
313
  "params": {
314
- "save_as": "prompt",
315
- "template": "\n{% for item in rag %}\n---\n{{item}}\n{% endfor %}\n---\nIs the information above sufficient to answer the following question?\n- {{text}}\n\nIf the information is insufficient please say so. Otherwise, provide the answer."
316
  },
317
  "display": null,
318
  "error": null,
 
 
319
  "meta": {
320
  "name": "Create prompt",
321
- "params": {
322
- "save_as": {
323
- "name": "save_as",
324
- "default": "prompt",
325
- "type": {
326
- "type": "<class 'str'>"
327
- }
328
- },
329
- "template": {
330
- "name": "template",
331
- "default": null,
332
- "type": {
333
- "format": "textarea"
334
- }
335
- }
336
- },
337
  "inputs": {
338
  "input": {
339
- "name": "input",
340
  "type": {
341
  "type": "<class 'inspect._empty'>"
342
  },
343
- "position": "left"
344
  }
345
  },
346
  "outputs": {
347
  "output": {
348
  "name": "output",
 
349
  "type": {
350
  "type": "None"
 
 
 
 
 
 
 
351
  },
352
- "position": "right"
 
 
 
 
 
 
 
 
353
  }
354
  },
355
- "type": "basic",
356
- "sub_nodes": null
357
  }
358
  },
359
  "position": {
360
  "x": 324.81988008998496,
361
  "y": -9.071826950189632
362
  },
363
- "parentId": null
 
 
364
  },
365
  {
366
  "id": "RAG 1",
@@ -369,8 +376,8 @@
369
  "title": "RAG",
370
  "params": {
371
  "engine": "Custom",
372
- "input_field": "text",
373
  "db_field": "text",
 
374
  "num_matches": "1"
375
  },
376
  "display": null,
@@ -378,16 +385,6 @@
378
  "meta": {
379
  "name": "RAG",
380
  "params": {
381
- "engine": {
382
- "name": "engine",
383
- "default": "Chroma",
384
- "type": {
385
- "enum": [
386
- "Chroma",
387
- "Custom"
388
- ]
389
- }
390
- },
391
  "input_field": {
392
  "name": "input_field",
393
  "default": "text",
@@ -402,20 +399,39 @@
402
  "type": "<class 'str'>"
403
  }
404
  },
 
 
 
 
 
 
 
 
 
 
405
  "num_matches": {
406
- "name": "num_matches",
407
- "default": 10,
408
  "type": {
409
  "type": "<class 'int'>"
410
- }
 
 
 
 
 
 
 
 
 
 
 
411
  }
412
  },
413
  "inputs": {
414
  "input": {
415
- "name": "input",
416
  "type": {
417
  "type": "<class 'inspect._empty'>"
418
  },
 
419
  "position": "left"
420
  },
421
  "db": {
@@ -426,24 +442,16 @@
426
  "position": "top"
427
  }
428
  },
429
- "outputs": {
430
- "output": {
431
- "name": "output",
432
- "type": {
433
- "type": "None"
434
- },
435
- "position": "right"
436
- }
437
- },
438
- "type": "basic",
439
- "sub_nodes": null
440
  }
441
  },
442
  "position": {
443
- "x": -449.6099563104567,
444
- "y": 56.69054032617606
445
  },
446
- "parentId": null
 
 
447
  },
448
  {
449
  "id": "View 3",
@@ -470,31 +478,30 @@
470
  }
471
  },
472
  "error": null,
 
473
  "meta": {
474
  "name": "View",
475
  "params": {},
476
  "inputs": {
477
  "input": {
478
- "name": "input",
479
  "type": {
480
  "type": "<class 'inspect._empty'>"
481
  },
482
- "position": "left"
 
483
  }
484
  },
485
  "outputs": {},
486
- "type": "table_view",
487
- "sub_nodes": null
488
- },
489
- "beingResized": false
490
  },
491
  "position": {
492
- "x": -557.8656197388839,
493
- "y": 397.32347851191355
494
  },
495
  "parentId": null,
496
- "width": 296,
497
- "height": 228
498
  },
499
  {
500
  "id": "Ask LLM 1",
@@ -502,63 +509,66 @@
502
  "data": {
503
  "title": "Ask LLM",
504
  "params": {
505
- "model": "google/gemma-2-2b-it",
506
- "accepted_regex": null,
507
- "max_tokens": 100
508
  },
509
  "display": null,
510
  "error": null,
 
 
511
  "meta": {
512
- "name": "Ask LLM",
513
- "params": {
514
- "model": {
515
- "name": "model",
516
- "default": null,
517
  "type": {
518
- "type": "<class 'str'>"
519
  }
520
- },
 
 
521
  "accepted_regex": {
522
- "name": "accepted_regex",
523
- "default": null,
524
  "type": {
525
  "type": "<class 'str'>"
526
- }
 
 
527
  },
528
  "max_tokens": {
529
  "name": "max_tokens",
530
- "default": 100,
531
  "type": {
532
  "type": "<class 'int'>"
533
  }
534
- }
535
- },
536
- "inputs": {
537
- "input": {
538
- "name": "input",
539
  "type": {
540
- "type": "<class 'inspect._empty'>"
541
  },
542
- "position": "left"
 
543
  }
544
  },
545
  "outputs": {
546
  "output": {
547
- "name": "output",
548
  "type": {
549
  "type": "None"
550
  },
551
- "position": "right"
 
552
  }
553
  },
554
- "type": "basic",
555
- "sub_nodes": null
556
  }
557
  },
558
  "position": {
559
  "x": 649.0730411878703,
560
  "y": 29.290926423828694
561
  },
 
 
562
  "parentId": null
563
  },
564
  {
@@ -585,7 +595,7 @@
585
  "Available options: Coke, Diet Coke, Sprite, Root Beer, Lemonade."
586
  ],
587
  "\n\n---\n### 6. **Drinks**\n\n---\n| Size | Price |\n|--------------------|---------------|\n| 20 oz Bottle | $1.99 |\n| 2-Liter Bottle | $3.50 |\n\n---\nAvailable options: Coke, Diet Coke, Sprite, Root Beer, Lemonade.\n\n---\nIs the information above sufficient to answer the following question?\n- What's your cheapest drink?\n\nIf the information is insufficient please say so. Otherwise, provide the answer.",
588
- "The information is sufficient to answer the question. \n\n**Answer:** The cheapest drink is the 20 oz bottle of Coke at $1.99. \n"
589
  ]
590
  ]
591
  }
@@ -593,27 +603,28 @@
593
  },
594
  "error": null,
595
  "meta": {
596
- "name": "View",
 
597
  "params": {},
598
  "inputs": {
599
  "input": {
600
- "name": "input",
601
  "type": {
602
  "type": "<class 'inspect._empty'>"
603
  },
604
- "position": "left"
605
  }
606
  },
607
- "outputs": {},
608
- "type": "table_view",
609
- "sub_nodes": null
610
  }
611
  },
612
  "position": {
613
- "x": 927.877424966716,
614
- "y": -205.07566047558328
615
  },
616
- "parentId": null
 
 
617
  },
618
  {
619
  "id": "Build document graph 1",
@@ -623,37 +634,38 @@
623
  "params": {},
624
  "display": null,
625
  "error": null,
 
626
  "meta": {
627
  "name": "Build document graph",
628
  "params": {},
629
- "inputs": {
630
- "input": {
631
- "name": "input",
632
- "type": {
633
- "type": "<class 'inspect._empty'>"
634
- },
635
- "position": "top"
636
- }
637
- },
638
  "outputs": {
639
  "output": {
640
  "name": "output",
 
641
  "type": {
642
  "type": "None"
643
- },
644
- "position": "right"
645
  }
646
  },
647
- "type": "basic",
648
- "sub_nodes": null
649
- },
650
- "collapsed": true
 
 
 
 
 
 
 
651
  },
652
  "position": {
653
  "x": -36.39166052931119,
654
  "y": -212.34993098590766
655
  },
656
- "parentId": null
 
 
657
  },
658
  {
659
  "id": "Add neighbors 1",
@@ -664,42 +676,41 @@
664
  "display": null,
665
  "error": null,
666
  "meta": {
667
- "name": "Add neighbors",
668
- "params": {},
669
  "inputs": {
670
  "nodes": {
671
- "name": "nodes",
672
  "type": {
673
  "type": "<class 'inspect._empty'>"
674
  },
 
675
  "position": "top"
676
  },
677
- "edges": {
678
- "name": "edges",
 
679
  "type": {
680
  "type": "<class 'inspect._empty'>"
681
- },
682
- "position": "top"
683
  },
684
- "item": {
685
- "name": "item",
 
686
  "type": {
687
  "type": "<class 'inspect._empty'>"
688
- },
689
- "position": "left"
690
  }
691
  },
 
 
692
  "outputs": {
693
  "output": {
 
694
  "name": "output",
695
  "type": {
696
  "type": "None"
697
- },
698
- "position": "right"
699
  }
700
- },
701
- "type": "basic",
702
- "sub_nodes": null
703
  },
704
  "collapsed": true
705
  },
@@ -707,7 +718,9 @@
707
  "x": -2.516468588848724,
708
  "y": 167.64180115746848
709
  },
710
- "parentId": null
 
 
711
  },
712
  {
713
  "id": "Predict links 1",
@@ -717,25 +730,26 @@
717
  "params": {},
718
  "display": null,
719
  "error": null,
 
720
  "meta": {
721
  "name": "Predict links",
722
- "params": {},
723
  "inputs": {
724
- "nodes": {
725
- "name": "nodes",
726
  "type": {
727
  "type": "<class 'inspect._empty'>"
728
  },
 
729
  "position": "top"
730
  },
731
- "edges": {
732
- "name": "edges",
 
733
  "type": {
734
  "type": "<class 'inspect._empty'>"
735
- },
736
- "position": "top"
737
  }
738
  },
 
739
  "outputs": {
740
  "output": {
741
  "name": "output",
@@ -745,17 +759,16 @@
745
  "position": "right"
746
  }
747
  },
748
- "type": "basic",
749
- "position": {
750
- "x": 656,
751
- "y": 179
752
- }
753
- }
754
  },
755
  "position": {
756
  "x": 34.865308360949726,
757
  "y": -37.44504613652989
758
  },
 
 
759
  "parentId": null
760
  }
761
  ],
 
7
  "data": {
8
  "title": "Input document",
9
  "params": {
10
+ "filename": "data/example-pizza.md"
11
  },
12
  "display": null,
13
  "error": null,
14
+ "__execution_delay": 0.0,
15
  "meta": {
16
+ "type": "basic",
17
  "params": {
18
  "filename": {
 
 
19
  "type": {
20
  "format": "path"
21
+ },
22
+ "name": "filename",
23
+ "default": null
24
  }
25
  },
26
  "inputs": {},
27
+ "name": "Input document",
28
  "outputs": {
29
  "output": {
30
  "name": "output",
 
33
  },
34
  "position": "right"
35
  }
36
+ }
37
+ },
38
+ "collapsed": null
 
39
  },
40
  "position": {
41
+ "x": -1138.7178641442829,
42
+ "y": -307.0280242240266
43
  },
44
+ "parentId": null,
45
+ "width": 290.0,
46
+ "height": 217.0
47
  },
48
  {
49
  "id": "View 1",
 
191
  "error": null,
192
  "meta": {
193
  "name": "View",
 
194
  "inputs": {
195
  "input": {
196
  "name": "input",
 
201
  }
202
  },
203
  "outputs": {},
204
+ "params": {},
205
+ "type": "table_view"
206
  },
207
  "beingResized": false
208
  },
 
211
  "y": -562.3096858852143
212
  },
213
  "parentId": null,
214
+ "width": 909.0,
215
+ "height": 367.0
216
  },
217
  {
218
  "id": "Split document 1",
 
225
  "display": null,
226
  "error": null,
227
  "meta": {
 
228
  "params": {
229
  "delimiter": {
230
  "name": "delimiter",
 
231
  "type": {
232
  "type": "<class 'str'>"
233
+ },
234
+ "default": "\\n\\n"
235
  }
236
  },
237
+ "type": "basic",
238
  "inputs": {
239
  "input": {
 
240
  "type": {
241
  "type": "<class 'inspect._empty'>"
242
  },
243
+ "position": "left",
244
+ "name": "input"
245
  }
246
  },
247
+ "name": "Split document",
248
  "outputs": {
249
  "output": {
250
  "name": "output",
 
253
  },
254
  "position": "right"
255
  }
256
+ }
 
 
257
  }
258
  },
259
  "position": {
260
+ "x": -671.5138580866221,
261
+ "y": -394.5831190981944
262
  },
263
+ "parentId": null,
264
+ "height": 200.0,
265
+ "width": 200.0
266
  },
267
  {
268
  "id": "Input chat 1",
 
274
  },
275
  "display": null,
276
  "error": null,
277
+ "__execution_delay": 0.0,
278
  "meta": {
279
+ "type": "basic",
280
  "name": "Input chat",
281
  "params": {
282
  "chat": {
 
290
  "inputs": {},
291
  "outputs": {
292
  "output": {
293
+ "position": "right",
294
  "type": {
295
  "type": "None"
296
  },
297
+ "name": "output"
298
  }
299
+ }
 
 
300
  },
301
+ "collapsed": null,
302
  "beingResized": false
303
  },
304
  "position": {
305
+ "x": -1169.0221491975267,
306
+ "y": 142.6860253469853
307
  },
308
  "parentId": null,
309
+ "width": 347.0,
310
+ "height": 197.0
311
  },
312
  {
313
  "id": "Create prompt 1",
 
315
  "data": {
316
  "title": "Create prompt",
317
  "params": {
318
+ "template": "\n{% for item in rag %}\n---\n{{item}}\n{% endfor %}\n---\nIs the information above sufficient to answer the following question?\n- {{text}}\n\nIf the information is insufficient please say so. Otherwise, provide the answer.",
319
+ "save_as": "prompt"
320
  },
321
  "display": null,
322
  "error": null,
323
+ "collapsed": null,
324
+ "__execution_delay": 0.0,
325
  "meta": {
326
  "name": "Create prompt",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
  "inputs": {
328
  "input": {
329
+ "position": "left",
330
  "type": {
331
  "type": "<class 'inspect._empty'>"
332
  },
333
+ "name": "input"
334
  }
335
  },
336
  "outputs": {
337
  "output": {
338
  "name": "output",
339
+ "position": "right",
340
  "type": {
341
  "type": "None"
342
+ }
343
+ }
344
+ },
345
+ "params": {
346
+ "save_as": {
347
+ "type": {
348
+ "type": "<class 'str'>"
349
  },
350
+ "default": "prompt",
351
+ "name": "save_as"
352
+ },
353
+ "template": {
354
+ "default": null,
355
+ "type": {
356
+ "format": "textarea"
357
+ },
358
+ "name": "template"
359
  }
360
  },
361
+ "type": "basic"
 
362
  }
363
  },
364
  "position": {
365
  "x": 324.81988008998496,
366
  "y": -9.071826950189632
367
  },
368
+ "height": 362.0,
369
+ "parentId": null,
370
+ "width": 270.0
371
  },
372
  {
373
  "id": "RAG 1",
 
376
  "title": "RAG",
377
  "params": {
378
  "engine": "Custom",
 
379
  "db_field": "text",
380
+ "input_field": "text",
381
  "num_matches": "1"
382
  },
383
  "display": null,
 
385
  "meta": {
386
  "name": "RAG",
387
  "params": {
 
 
 
 
 
 
 
 
 
 
388
  "input_field": {
389
  "name": "input_field",
390
  "default": "text",
 
399
  "type": "<class 'str'>"
400
  }
401
  },
402
+ "engine": {
403
+ "type": {
404
+ "enum": [
405
+ "Chroma",
406
+ "Custom"
407
+ ]
408
+ },
409
+ "name": "engine",
410
+ "default": "RagEngine.Chroma"
411
+ },
412
  "num_matches": {
 
 
413
  "type": {
414
  "type": "<class 'int'>"
415
+ },
416
+ "name": "num_matches",
417
+ "default": 10.0
418
+ }
419
+ },
420
+ "outputs": {
421
+ "output": {
422
+ "name": "output",
423
+ "type": {
424
+ "type": "None"
425
+ },
426
+ "position": "right"
427
  }
428
  },
429
  "inputs": {
430
  "input": {
 
431
  "type": {
432
  "type": "<class 'inspect._empty'>"
433
  },
434
+ "name": "input",
435
  "position": "left"
436
  },
437
  "db": {
 
442
  "position": "top"
443
  }
444
  },
445
+ "type": "basic"
 
 
 
 
 
 
 
 
 
 
446
  }
447
  },
448
  "position": {
449
+ "x": -645.0268659124858,
450
+ "y": 44.3669514323544
451
  },
452
+ "parentId": null,
453
+ "width": 423.0,
454
+ "height": 424.0
455
  },
456
  {
457
  "id": "View 3",
 
478
  }
479
  },
480
  "error": null,
481
+ "beingResized": false,
482
  "meta": {
483
  "name": "View",
484
  "params": {},
485
  "inputs": {
486
  "input": {
 
487
  "type": {
488
  "type": "<class 'inspect._empty'>"
489
  },
490
+ "position": "left",
491
+ "name": "input"
492
  }
493
  },
494
  "outputs": {},
495
+ "type": "table_view"
496
+ }
 
 
497
  },
498
  "position": {
499
+ "x": -43.795911596608875,
500
+ "y": 457.1809102819045
501
  },
502
  "parentId": null,
503
+ "width": 296.0,
504
+ "height": 228.0
505
  },
506
  {
507
  "id": "Ask LLM 1",
 
509
  "data": {
510
  "title": "Ask LLM",
511
  "params": {
512
+ "max_tokens": 100.0,
513
+ "accepted_regex": "",
514
+ "model": "SultanR/SmolTulu-1.7b-Instruct"
515
  },
516
  "display": null,
517
  "error": null,
518
+ "collapsed": null,
519
+ "__execution_delay": 0.0,
520
  "meta": {
521
+ "inputs": {
522
+ "input": {
523
+ "position": "left",
524
+ "name": "input",
 
525
  "type": {
526
+ "type": "<class 'inspect._empty'>"
527
  }
528
+ }
529
+ },
530
+ "params": {
531
  "accepted_regex": {
 
 
532
  "type": {
533
  "type": "<class 'str'>"
534
+ },
535
+ "default": null,
536
+ "name": "accepted_regex"
537
  },
538
  "max_tokens": {
539
  "name": "max_tokens",
540
+ "default": 100.0,
541
  "type": {
542
  "type": "<class 'int'>"
543
  }
544
+ },
545
+ "model": {
 
 
 
546
  "type": {
547
+ "type": "<class 'str'>"
548
  },
549
+ "default": null,
550
+ "name": "model"
551
  }
552
  },
553
  "outputs": {
554
  "output": {
 
555
  "type": {
556
  "type": "None"
557
  },
558
+ "position": "right",
559
+ "name": "output"
560
  }
561
  },
562
+ "name": "Ask LLM",
563
+ "type": "basic"
564
  }
565
  },
566
  "position": {
567
  "x": 649.0730411878703,
568
  "y": 29.290926423828694
569
  },
570
+ "height": 329.0,
571
+ "width": 249.0,
572
  "parentId": null
573
  },
574
  {
 
595
  "Available options: Coke, Diet Coke, Sprite, Root Beer, Lemonade."
596
  ],
597
  "\n\n---\n### 6. **Drinks**\n\n---\n| Size | Price |\n|--------------------|---------------|\n| 20 oz Bottle | $1.99 |\n| 2-Liter Bottle | $3.50 |\n\n---\nAvailable options: Coke, Diet Coke, Sprite, Root Beer, Lemonade.\n\n---\nIs the information above sufficient to answer the following question?\n- What's your cheapest drink?\n\nIf the information is insufficient please say so. Otherwise, provide the answer.",
598
+ "The provided information is sufficient to answer the question:\n\n- **Cheapest Drink:** \n\nThe cheapest drink is the 20 oz Bottle of Coke, which costs $1.99.\n\n**Why?**\n- The 20 oz Bottle of Coke is the only option listed with a price of $1.99, making it the most cost-effective option among the given drink sizes and prices."
599
  ]
600
  ]
601
  }
 
603
  },
604
  "error": null,
605
  "meta": {
606
+ "outputs": {},
607
+ "type": "table_view",
608
  "params": {},
609
  "inputs": {
610
  "input": {
611
+ "position": "left",
612
  "type": {
613
  "type": "<class 'inspect._empty'>"
614
  },
615
+ "name": "input"
616
  }
617
  },
618
+ "name": "View"
 
 
619
  }
620
  },
621
  "position": {
622
+ "x": 1017.4149773467798,
623
+ "y": -71.64715104646865
624
  },
625
+ "height": 644.0,
626
+ "parentId": null,
627
+ "width": 502.0
628
  },
629
  {
630
  "id": "Build document graph 1",
 
634
  "params": {},
635
  "display": null,
636
  "error": null,
637
+ "collapsed": true,
638
  "meta": {
639
  "name": "Build document graph",
640
  "params": {},
 
 
 
 
 
 
 
 
 
641
  "outputs": {
642
  "output": {
643
  "name": "output",
644
+ "position": "right",
645
  "type": {
646
  "type": "None"
647
+ }
 
648
  }
649
  },
650
+ "inputs": {
651
+ "input": {
652
+ "position": "top",
653
+ "name": "input",
654
+ "type": {
655
+ "type": "<class 'inspect._empty'>"
656
+ }
657
+ }
658
+ },
659
+ "type": "basic"
660
+ }
661
  },
662
  "position": {
663
  "x": -36.39166052931119,
664
  "y": -212.34993098590766
665
  },
666
+ "width": 200.0,
667
+ "parentId": null,
668
+ "height": 80.0
669
  },
670
  {
671
  "id": "Add neighbors 1",
 
676
  "display": null,
677
  "error": null,
678
  "meta": {
679
+ "type": "basic",
 
680
  "inputs": {
681
  "nodes": {
 
682
  "type": {
683
  "type": "<class 'inspect._empty'>"
684
  },
685
+ "name": "nodes",
686
  "position": "top"
687
  },
688
+ "item": {
689
+ "position": "left",
690
+ "name": "item",
691
  "type": {
692
  "type": "<class 'inspect._empty'>"
693
+ }
 
694
  },
695
+ "edges": {
696
+ "name": "edges",
697
+ "position": "top",
698
  "type": {
699
  "type": "<class 'inspect._empty'>"
700
+ }
 
701
  }
702
  },
703
+ "params": {},
704
+ "name": "Add neighbors",
705
  "outputs": {
706
  "output": {
707
+ "position": "right",
708
  "name": "output",
709
  "type": {
710
  "type": "None"
711
+ }
 
712
  }
713
+ }
 
 
714
  },
715
  "collapsed": true
716
  },
 
718
  "x": -2.516468588848724,
719
  "y": 167.64180115746848
720
  },
721
+ "parentId": null,
722
+ "height": 56.0,
723
+ "width": 200.0
724
  },
725
  {
726
  "id": "Predict links 1",
 
730
  "params": {},
731
  "display": null,
732
  "error": null,
733
+ "__execution_delay": null,
734
  "meta": {
735
  "name": "Predict links",
 
736
  "inputs": {
737
+ "edges": {
 
738
  "type": {
739
  "type": "<class 'inspect._empty'>"
740
  },
741
+ "name": "edges",
742
  "position": "top"
743
  },
744
+ "nodes": {
745
+ "name": "nodes",
746
+ "position": "top",
747
  "type": {
748
  "type": "<class 'inspect._empty'>"
749
+ }
 
750
  }
751
  },
752
+ "type": "basic",
753
  "outputs": {
754
  "output": {
755
  "name": "output",
 
759
  "position": "right"
760
  }
761
  },
762
+ "params": {}
763
+ },
764
+ "collapsed": true
 
 
 
765
  },
766
  "position": {
767
  "x": 34.865308360949726,
768
  "y": -37.44504613652989
769
  },
770
+ "height": 200.0,
771
+ "width": 200.0,
772
  "parentId": null
773
  }
774
  ],
lynxkite-app/data/Image processing CHANGED
@@ -7,22 +7,11 @@
7
  "data": {
8
  "title": "Open image",
9
  "params": {
10
- "filename": "/Users/danieldarabos/Downloads/mimic-a-fraction.png"
11
  },
12
  "display": null,
13
  "error": null,
14
  "meta": {
15
- "name": "Open image",
16
- "params": {
17
- "filename": {
18
- "name": "filename",
19
- "default": null,
20
- "type": {
21
- "type": "<class 'str'>"
22
- }
23
- }
24
- },
25
- "inputs": {},
26
  "outputs": {
27
  "output": {
28
  "name": "output",
@@ -32,15 +21,29 @@
32
  "position": "right"
33
  }
34
  },
35
- "type": "basic",
36
- "sub_nodes": null
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
38
  },
39
  "position": {
40
- "x": 19.215964588549014,
41
- "y": 205.21642829186527
42
  },
43
- "parentId": null
 
 
44
  },
45
  {
46
  "id": "View image 1",
@@ -48,30 +51,31 @@
48
  "data": {
49
  "title": "View image",
50
  "params": {},
51
- "display": "data:image/jpeg;base64,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",
52
  "error": null,
53
  "meta": {
54
- "name": "View image",
55
- "params": {},
56
  "inputs": {
57
  "image": {
58
  "name": "image",
59
  "type": {
60
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
61
  },
62
  "position": "left"
63
  }
64
  },
65
- "outputs": {},
66
- "type": "image",
67
- "sub_nodes": null
68
  }
69
  },
70
  "position": {
71
  "x": 371.2152385614552,
72
  "y": -243.68185336918702
73
  },
74
- "parentId": null
 
 
75
  },
76
  {
77
  "id": "Flip verically 1",
@@ -82,35 +86,38 @@
82
  "display": null,
83
  "error": null,
84
  "meta": {
85
- "name": "Flip verically",
86
- "params": {},
87
- "inputs": {
88
- "image": {
89
- "name": "image",
90
- "type": {
91
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
92
- },
93
- "position": "left"
94
- }
95
- },
96
  "outputs": {
97
  "output": {
 
98
  "name": "output",
99
  "type": {
100
  "type": "None"
101
- },
102
- "position": "right"
103
  }
104
  },
105
  "type": "basic",
106
- "sub_nodes": null
107
- }
 
 
 
 
 
 
 
 
 
 
 
 
108
  },
109
  "position": {
110
- "x": 258.90660520478934,
111
- "y": 582.9425419285425
112
  },
113
- "parentId": null
 
 
114
  },
115
  {
116
  "id": "View image 2",
@@ -118,29 +125,30 @@
118
  "data": {
119
  "title": "View image",
120
  "params": {},
121
- "display": "data:image/jpeg;base64,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",
122
  "error": null,
123
  "meta": {
124
- "name": "View image",
125
- "params": {},
126
  "inputs": {
127
  "image": {
128
- "name": "image",
129
  "type": {
130
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
131
  },
132
- "position": "left"
133
  }
134
  },
135
- "outputs": {},
136
- "type": "image",
137
- "sub_nodes": null
138
  }
139
  },
140
  "position": {
141
  "x": 1027.1387925400982,
142
  "y": 251.36630333493974
143
  },
 
 
144
  "parentId": null
145
  },
146
  {
@@ -151,36 +159,39 @@
151
  "params": {},
152
  "display": null,
153
  "error": null,
 
 
154
  "meta": {
155
- "name": "To grayscale",
156
  "params": {},
157
- "inputs": {
158
- "image": {
159
- "name": "image",
160
- "type": {
161
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
162
- },
163
- "position": "left"
164
- }
165
- },
166
  "outputs": {
167
  "output": {
168
- "name": "output",
169
  "type": {
170
  "type": "None"
171
  },
172
- "position": "right"
 
173
  }
174
  },
175
- "type": "basic",
176
- "sub_nodes": null
 
 
 
 
 
 
 
 
177
  }
178
  },
179
  "position": {
180
  "x": 826.1911193192234,
181
  "y": 579.1542134884979
182
  },
183
- "parentId": null
 
 
184
  },
185
  {
186
  "id": "Blur 1",
@@ -193,11 +204,11 @@
193
  "display": null,
194
  "error": null,
195
  "meta": {
196
- "name": "Blur",
197
  "params": {
198
  "radius": {
 
199
  "name": "radius",
200
- "default": null,
201
  "type": {
202
  "type": "<class 'float'>"
203
  }
@@ -207,11 +218,12 @@
207
  "image": {
208
  "name": "image",
209
  "type": {
210
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
211
  },
212
  "position": "left"
213
  }
214
  },
 
215
  "outputs": {
216
  "output": {
217
  "name": "output",
@@ -220,16 +232,16 @@
220
  },
221
  "position": "right"
222
  }
223
- },
224
- "type": "basic",
225
- "sub_nodes": null
226
  }
227
  },
228
  "position": {
229
  "x": 505.15961556359304,
230
  "y": 539.8477981917164
231
  },
232
- "parentId": null
 
 
233
  }
234
  ],
235
  "edges": [
 
7
  "data": {
8
  "title": "Open image",
9
  "params": {
10
+ "filename": "https://media.licdn.com/dms/image/v2/C4E03AQEq4tdJKQiNHQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1657270040827?e=2147483647&v=beta&t=lDxix0_0-_K7NUFqgPdzxY5-P7f73bWpPS_XRre842c"
11
  },
12
  "display": null,
13
  "error": null,
14
  "meta": {
 
 
 
 
 
 
 
 
 
 
 
15
  "outputs": {
16
  "output": {
17
  "name": "output",
 
21
  "position": "right"
22
  }
23
  },
24
+ "name": "Open image",
25
+ "inputs": {},
26
+ "params": {
27
+ "filename": {
28
+ "name": "filename",
29
+ "type": {
30
+ "type": "<class 'str'>"
31
+ },
32
+ "default": null
33
+ }
34
+ },
35
+ "type": "basic"
36
+ },
37
+ "__execution_delay": 0.0,
38
+ "collapsed": null
39
  },
40
  "position": {
41
+ "x": -316.51795927908694,
42
+ "y": 122.80901061526373
43
  },
44
+ "width": 422.0,
45
+ "parentId": null,
46
+ "height": 222.0
47
  },
48
  {
49
  "id": "View image 1",
 
51
  "data": {
52
  "title": "View image",
53
  "params": {},
54
+ "display": "data:image/jpeg;base64,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",
55
  "error": null,
56
  "meta": {
57
+ "type": "image",
58
+ "outputs": {},
59
  "inputs": {
60
  "image": {
61
  "name": "image",
62
  "type": {
63
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
64
  },
65
  "position": "left"
66
  }
67
  },
68
+ "name": "View image",
69
+ "params": {}
 
70
  }
71
  },
72
  "position": {
73
  "x": 371.2152385614552,
74
  "y": -243.68185336918702
75
  },
76
+ "parentId": null,
77
+ "width": 265.0,
78
+ "height": 288.0
79
  },
80
  {
81
  "id": "Flip verically 1",
 
86
  "display": null,
87
  "error": null,
88
  "meta": {
 
 
 
 
 
 
 
 
 
 
 
89
  "outputs": {
90
  "output": {
91
+ "position": "right",
92
  "name": "output",
93
  "type": {
94
  "type": "None"
95
+ }
 
96
  }
97
  },
98
  "type": "basic",
99
+ "params": {},
100
+ "name": "Flip verically",
101
+ "inputs": {
102
+ "image": {
103
+ "name": "image",
104
+ "position": "left",
105
+ "type": {
106
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "collapsed": true,
112
+ "__execution_delay": null
113
  },
114
  "position": {
115
+ "x": 228.3853393986406,
116
+ "y": 245.68255477059915
117
  },
118
+ "width": 200.0,
119
+ "parentId": null,
120
+ "height": 200.0
121
  },
122
  {
123
  "id": "View image 2",
 
125
  "data": {
126
  "title": "View image",
127
  "params": {},
128
+ "display": "data:image/jpeg;base64,UklGRoADAABXRUJQVlA4IHQDAAAwNQCdASrIAMgAPm0ukkYyMaGhrtt5UkANiWluu7AObIPJl9NfJmVCwA06FIbr8ZA3WaSJ7/dHH5er4u683qcKWcW7qn4VGE7XCnSEtZUZsarT1ox9y8J2EionbqsxfkAAIOk7JTtvXiLVAeVPQlEW3R4aJSLoxXCJTuGOqcp6fJ7+tzWWmOSq1IqFDN7536TfOvEoiw/K8AQcP06J13RTpwyFow3MFoK9BWZDv0mPqMmHjuC7Hb5MkHc6QnQihSek5PyYdUN4+yG0NpM3NK0+lOSMpu5jaeY5YrFUKke5nLaJ0Mu/3it1akkzebF4fRj8xdIkJDrC4xD4RcyC8aQ1zI4MjffvaCX8X0jbNJ5n5xzGOOU9kFhpry6Uy30xVtGdrEYwbGflOPdNp1u0tiKemkGylZmdj/9rbvWo0IYnCFLs1tAQ1fpkGVQYVo4FA68IbkKvB2KNxrQ17ySt96mzi6ODrNuVzsgisAS/q2ILoOlZL2nfdCNWb523fz7hEM319hb+aWTmo2zExKfWXzUZRGWy09rt8rQZXW5qBKTs5vsYabOjubwNNfFoX7dv32XwAAD++LH6dpCJbVSQouNoBCx0XMzcYw+6o+G//GpIy1eD9A/1cvAp/zhr1mDURDqx2xBgY79tNgsjX9AArhyCNX/BRq/st/uDXRqUv7Wx+Pl/40TsVhng3/XrKZXhDYKnD2aAAyOHG8yS8FTlr5aM6Nh//ra74YvdX+3/j/RLZDm6wRAbHmTF1ZWhK3HdcgOeU+RMXPeCEL8zqEcm3nMeTpuJhH7GTnjejYZx6OrdHAWBghyiaVrgH9f2nXLm1VZ4AgOokXq16NNjRz3FgLYzr7qd94Y2TRJW/cGAcaH5CN5+iXZy4LY2JaCo5I4//pJ/TthQ8SBbQdOIDZPayUXSmAo7cTuD/rk97N3QBGdx5oIzTeSYL8FZfiH/nJLQARX7PafEYZBW9a/ZMjDSPg9GFTPL4BL42F32uL8ZcYLrpkRGRW6jbjmj7GuGSwV5+YuKOhEAf2ZVwU55UjaxRygygrjlYc8FoCe+HyL6rJ5V3jfZvZy1Nw3CdfX4CWQ5/gUjrgONEGb7g2SL/nS9dGgl2gAHKKCzEneCdL38wwsnQYPGdrerT/4uEWM1T24cHLkgBmT+zH6YiwG7DkqEmAbjF4AAAA==",
129
  "error": null,
130
  "meta": {
131
+ "outputs": {},
 
132
  "inputs": {
133
  "image": {
134
+ "position": "left",
135
  "type": {
136
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
137
  },
138
+ "name": "image"
139
  }
140
  },
141
+ "name": "View image",
142
+ "params": {},
143
+ "type": "image"
144
  }
145
  },
146
  "position": {
147
  "x": 1027.1387925400982,
148
  "y": 251.36630333493974
149
  },
150
+ "width": 222.0,
151
+ "height": 291.0,
152
  "parentId": null
153
  },
154
  {
 
159
  "params": {},
160
  "display": null,
161
  "error": null,
162
+ "collapsed": true,
163
+ "__execution_delay": null,
164
  "meta": {
165
+ "type": "basic",
166
  "params": {},
 
 
 
 
 
 
 
 
 
167
  "outputs": {
168
  "output": {
 
169
  "type": {
170
  "type": "None"
171
  },
172
+ "position": "right",
173
+ "name": "output"
174
  }
175
  },
176
+ "name": "To grayscale",
177
+ "inputs": {
178
+ "image": {
179
+ "position": "left",
180
+ "type": {
181
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
182
+ },
183
+ "name": "image"
184
+ }
185
+ }
186
  }
187
  },
188
  "position": {
189
  "x": 826.1911193192234,
190
  "y": 579.1542134884979
191
  },
192
+ "parentId": null,
193
+ "width": 200.0,
194
+ "height": 200.0
195
  },
196
  {
197
  "id": "Blur 1",
 
204
  "display": null,
205
  "error": null,
206
  "meta": {
207
+ "type": "basic",
208
  "params": {
209
  "radius": {
210
+ "default": 5.0,
211
  "name": "radius",
 
212
  "type": {
213
  "type": "<class 'float'>"
214
  }
 
218
  "image": {
219
  "name": "image",
220
  "type": {
221
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
222
  },
223
  "position": "left"
224
  }
225
  },
226
+ "name": "Blur",
227
  "outputs": {
228
  "output": {
229
  "name": "output",
 
232
  },
233
  "position": "right"
234
  }
235
+ }
 
 
236
  }
237
  },
238
  "position": {
239
  "x": 505.15961556359304,
240
  "y": 539.8477981917164
241
  },
242
+ "parentId": null,
243
+ "height": 200.0,
244
+ "width": 200.0
245
  }
246
  ],
247
  "edges": [
lynxkite-app/data/LynxScribe demo CHANGED
@@ -7,41 +7,43 @@
7
  "data": {
8
  "title": "Input chat",
9
  "params": {
10
- "chat": "who is the CIO of Lynx?"
11
  },
12
  "display": null,
13
  "error": null,
 
14
  "meta": {
15
- "outputs": {
16
- "output": {
17
- "type": {
18
- "type": "None"
19
- },
20
- "position": "right",
21
- "name": "output"
22
- }
23
- },
24
  "inputs": {},
25
  "params": {
26
  "chat": {
 
27
  "type": {
28
  "type": "<class 'str'>"
29
  },
30
- "name": "chat",
31
- "default": null
 
 
 
 
 
 
 
 
32
  }
33
  },
34
  "name": "Input chat",
35
  "type": "basic"
36
- }
 
37
  },
38
  "position": {
39
  "x": -493.5496596237119,
40
  "y": 20.90123252513356
41
  },
42
  "height": 186.0,
43
- "parentId": null,
44
- "width": 259.0
45
  },
46
  {
47
  "id": "View 1",
@@ -57,7 +59,7 @@
57
  ],
58
  "data": [
59
  [
60
- "The Chief Innovation Officer (CIO) of Lynx Analytics is Gabor Benedek. He is responsible for defining the methodological roadmap for Lynx's predictive analytics consulting and product development departments. If you need more specific information or have follow-up questions, feel free to ask!\n\nPlease visit https://www.lynxanalytics.com/team-leadership for further information."
61
  ]
62
  ]
63
  }
@@ -66,27 +68,27 @@
66
  "error": null,
67
  "meta": {
68
  "type": "table_view",
69
- "outputs": {},
70
- "params": {},
71
  "name": "View",
72
  "inputs": {
73
  "input": {
74
- "position": "left",
75
  "name": "input",
76
  "type": {
77
  "type": "<class 'inspect._empty'>"
78
- }
 
79
  }
80
- }
 
 
81
  }
82
  },
83
  "position": {
84
- "x": 722.1450069267316,
85
- "y": -785.6076562320527
86
  },
87
- "height": 950.0,
88
  "parentId": null,
89
- "width": 1256.0
90
  },
91
  {
92
  "id": "LLM 1",
@@ -100,35 +102,35 @@
100
  "error": null,
101
  "meta": {
102
  "inputs": {},
 
 
 
 
 
 
 
 
 
103
  "type": "basic",
104
- "name": "LLM",
105
  "params": {
106
  "name": {
 
107
  "name": "name",
108
  "type": {
109
  "type": "<class 'str'>"
110
- },
111
- "default": "openai"
112
  }
113
  },
114
- "outputs": {
115
- "output": {
116
- "name": "output",
117
- "type": {
118
- "type": "None"
119
- },
120
- "position": "top"
121
- }
122
- }
123
  }
124
  },
125
  "position": {
126
  "x": -312.5774211084781,
127
  "y": 1093.4019527511366
128
  },
129
- "height": 200.0,
130
  "width": 200.0,
131
- "parentId": null
132
  },
133
  {
134
  "id": "Scenario selector 1",
@@ -136,49 +138,49 @@
136
  "data": {
137
  "title": "Scenario selector",
138
  "params": {
139
- "node_types": "intent_cluster",
140
- "scenario_file": "/home/darabos/nvme/lynxscribe/examples/chat_api/scenarios.yaml"
141
  },
142
  "display": null,
143
  "error": null,
144
  "meta": {
145
- "type": "basic",
146
- "name": "Scenario selector",
147
- "inputs": {},
148
- "outputs": {
149
- "output": {
150
- "type": {
151
- "type": "None"
152
- },
153
- "position": "top",
154
- "name": "output"
155
- }
156
- },
157
  "params": {
158
  "scenario_file": {
159
  "type": {
160
  "type": "<class 'str'>"
161
  },
162
- "default": null,
163
- "name": "scenario_file"
164
  },
165
  "node_types": {
 
166
  "type": {
167
  "type": "<class 'str'>"
168
  },
169
- "name": "node_types",
170
- "default": "intent_cluster"
171
  }
172
- }
 
 
 
 
 
 
 
 
 
 
 
 
173
  }
174
  },
175
  "position": {
176
  "x": -549.1300345090008,
177
  "y": 1086.4852248156676
178
  },
179
- "width": 200.0,
180
  "height": 200.0,
181
- "parentId": null
182
  },
183
  {
184
  "id": "Chat API 1",
@@ -192,48 +194,48 @@
192
  "error": null,
193
  "meta": {
194
  "name": "Chat API",
 
195
  "outputs": {
196
  "output": {
197
- "position": "top",
198
- "name": "output",
199
  "type": {
200
  "type": "None"
201
- }
202
- }
203
- },
204
- "params": {
205
- "model": {
206
- "type": {
207
- "type": "<class 'str'>"
208
  },
209
- "default": "gpt-4o-mini",
210
- "name": "model"
211
  }
212
  },
213
  "inputs": {
214
- "knowledge_base": {
 
215
  "type": {
216
  "type": "<class 'inspect._empty'>"
217
  },
218
- "name": "knowledge_base",
219
  "position": "bottom"
220
  },
221
- "chatbot": {
 
 
222
  "type": {
223
  "type": "<class 'inspect._empty'>"
224
- },
225
- "position": "bottom",
226
- "name": "chatbot"
227
  },
228
- "chat_processor": {
229
- "position": "bottom",
230
  "type": {
231
  "type": "<class 'inspect._empty'>"
232
  },
233
- "name": "chat_processor"
 
234
  }
235
  },
236
- "type": "basic"
 
 
 
 
 
 
 
 
237
  }
238
  },
239
  "position": {
@@ -241,8 +243,8 @@
241
  "y": 258.20943122219336
242
  },
243
  "parentId": null,
244
- "height": 200.0,
245
- "width": 200.0
246
  },
247
  {
248
  "id": "Knowledge base 1",
@@ -250,13 +252,15 @@
250
  "data": {
251
  "title": "Knowledge base",
252
  "params": {
253
- "nodes_path": "/home/darabos/nvme/lynxscribe/examples/chat_api/data/lynx/nodes.pickle",
254
  "edges_path": "/home/darabos/nvme/lynxscribe/examples/chat_api/data/lynx/edges.pickle",
255
- "template_cluster_path": "/home/darabos/nvme/lynxscribe/examples/chat_api/data/lynx/tempclusters.pickle"
256
  },
257
  "display": null,
258
  "error": null,
259
  "meta": {
 
 
260
  "params": {
261
  "nodes_path": {
262
  "name": "nodes_path",
@@ -265,31 +269,29 @@
265
  "type": "<class 'str'>"
266
  }
267
  },
268
- "edges_path": {
269
  "type": {
270
  "type": "<class 'str'>"
271
  },
272
- "name": "edges_path",
273
- "default": "edges.pickle"
274
- },
275
- "template_cluster_path": {
276
  "name": "template_cluster_path",
277
- "default": "tempclusters.pickle",
 
 
 
 
278
  "type": {
279
  "type": "<class 'str'>"
280
  }
281
  }
282
  },
283
- "name": "Knowledge base",
284
  "inputs": {},
285
- "type": "basic",
286
  "outputs": {
287
  "output": {
 
288
  "name": "output",
289
  "type": {
290
  "type": "None"
291
- },
292
- "position": "top"
293
  }
294
  }
295
  }
@@ -298,9 +300,9 @@
298
  "x": 598.8683124946176,
299
  "y": 609.9499973808545
300
  },
 
301
  "height": 320.0,
302
- "parentId": null,
303
- "width": 336.0
304
  },
305
  {
306
  "id": "RAG chatbot 1",
@@ -309,74 +311,74 @@
309
  "title": "RAG chatbot",
310
  "params": {
311
  "limits_by_type": "{\"information\": [2, 3], \"summary\": [2, 3]}",
312
- "negative_answer": "I'm sorry, but the data I've been trained on does not contain any information related to your question.",
313
  "max_results": "5",
 
314
  "strict_limits": true
315
  },
316
  "display": null,
317
  "error": null,
318
  "meta": {
319
- "params": {
320
- "negative_answer": {
321
- "default": "I'm sorry, but the data I've been trained on does not contain any information related to your question.",
322
- "name": "negative_answer",
323
  "type": {
324
- "type": "<class 'str'>"
325
  }
326
- },
 
 
327
  "max_results": {
328
- "name": "max_results",
329
  "type": {
330
  "type": "<class 'int'>"
331
  },
332
- "default": 5.0
333
  },
334
  "strict_limits": {
335
- "default": true,
336
  "name": "strict_limits",
 
337
  "type": {
338
  "type": "<class 'bool'>"
339
  }
340
  },
 
 
 
 
 
 
 
341
  "limits_by_type": {
342
- "name": "limits_by_type",
343
  "default": "{}",
 
344
  "type": {
345
  "type": "<class 'str'>"
346
  }
347
  }
348
  },
349
- "outputs": {
350
- "output": {
351
- "type": {
352
- "type": "None"
353
- },
354
- "position": "top",
355
- "name": "output"
356
- }
357
- },
358
- "type": "basic",
359
  "name": "RAG chatbot",
 
360
  "inputs": {
361
  "rag_graph": {
362
- "name": "rag_graph",
363
  "type": {
364
  "type": "<class 'inspect._empty'>"
365
  },
 
366
  "position": "bottom"
367
  },
368
- "scenario_selector": {
369
- "name": "scenario_selector",
 
370
  "type": {
371
  "type": "<class 'inspect._empty'>"
372
- },
373
- "position": "bottom"
374
  },
375
- "llm": {
376
- "name": "llm",
377
  "type": {
378
  "type": "<class 'inspect._empty'>"
379
  },
 
380
  "position": "bottom"
381
  }
382
  }
@@ -387,9 +389,9 @@
387
  "x": -533.1301830766971,
388
  "y": 547.294980747757
389
  },
390
- "width": 339.0,
391
  "parentId": null,
392
- "height": 399.0
 
393
  },
394
  {
395
  "id": "RAG graph 1",
@@ -400,43 +402,43 @@
400
  "display": null,
401
  "error": null,
402
  "meta": {
403
- "name": "RAG graph",
404
  "inputs": {
405
- "vector_store": {
406
- "name": "vector_store",
407
  "type": {
408
  "type": "<class 'inspect._empty'>"
409
  },
410
- "position": "bottom"
 
411
  },
412
- "text_embedder": {
 
413
  "type": {
414
  "type": "<class 'inspect._empty'>"
415
  },
416
- "position": "bottom",
417
- "name": "text_embedder"
418
  }
419
  },
 
420
  "params": {},
421
  "outputs": {
422
  "output": {
423
  "position": "top",
424
- "name": "output",
425
  "type": {
426
  "type": "None"
427
- }
 
428
  }
429
- },
430
- "type": "basic"
431
  }
432
  },
433
  "position": {
434
  "x": -817.8208895639339,
435
  "y": 1014.836542916127
436
  },
437
- "height": 200.0,
438
  "width": 200.0,
439
- "parentId": null
440
  },
441
  {
442
  "id": "Vector store 1",
@@ -453,31 +455,31 @@
453
  "meta": {
454
  "params": {
455
  "collection_name": {
456
- "default": "lynx",
457
  "type": {
458
  "type": "<class 'str'>"
459
  },
 
460
  "name": "collection_name"
461
  },
462
  "name": {
463
  "default": "chromadb",
464
- "name": "name",
465
  "type": {
466
  "type": "<class 'str'>"
467
- }
 
468
  }
469
  },
 
470
  "name": "Vector store",
471
  "outputs": {
472
  "output": {
473
- "name": "output",
474
  "type": {
475
  "type": "None"
476
  },
477
- "position": "top"
 
478
  }
479
  },
480
- "type": "basic",
481
  "inputs": {}
482
  }
483
  },
@@ -500,33 +502,33 @@
500
  "display": null,
501
  "error": null,
502
  "meta": {
503
- "type": "basic",
504
  "params": {
505
  "model": {
 
506
  "type": {
507
  "type": "<class 'str'>"
508
  },
509
- "name": "model",
510
- "default": "text-embedding-ada-002"
511
- }
512
- },
513
- "inputs": {
514
- "llm": {
515
- "name": "llm",
516
- "position": "bottom",
517
- "type": {
518
- "type": "<class 'inspect._empty'>"
519
- }
520
  }
521
  },
522
  "name": "Text embedder",
523
  "outputs": {
524
  "output": {
525
- "name": "output",
526
  "type": {
527
  "type": "None"
528
  },
529
- "position": "top"
 
 
 
 
 
 
 
 
 
 
 
530
  }
531
  }
532
  }
@@ -536,8 +538,8 @@
536
  "y": 1343.5978526690794
537
  },
538
  "width": 200.0,
539
- "parentId": null,
540
- "height": 200.0
541
  },
542
  {
543
  "id": "LLM 2",
@@ -550,36 +552,36 @@
550
  "display": null,
551
  "error": null,
552
  "meta": {
553
- "inputs": {},
 
 
 
 
 
 
 
 
 
554
  "type": "basic",
 
555
  "params": {
556
  "name": {
557
- "name": "name",
558
  "default": "openai",
 
559
  "type": {
560
  "type": "<class 'str'>"
561
  }
562
  }
563
- },
564
- "outputs": {
565
- "output": {
566
- "name": "output",
567
- "type": {
568
- "type": "None"
569
- },
570
- "position": "top"
571
- }
572
- },
573
- "name": "LLM"
574
  }
575
  },
576
  "position": {
577
  "x": -727.6171373682814,
578
  "y": 1649.7242636905507
579
  },
580
- "height": 200.0,
581
  "width": 200.0,
582
- "parentId": null
 
583
  },
584
  {
585
  "id": "Truncate history 1",
@@ -592,18 +594,6 @@
592
  "display": null,
593
  "error": null,
594
  "meta": {
595
- "name": "Truncate history",
596
- "inputs": {},
597
- "type": "basic",
598
- "params": {
599
- "max_tokens": {
600
- "type": {
601
- "type": "<class 'int'>"
602
- },
603
- "default": 10000.0,
604
- "name": "max_tokens"
605
- }
606
- },
607
  "outputs": {
608
  "output": {
609
  "type": {
@@ -612,7 +602,19 @@
612
  "name": "output",
613
  "position": "top"
614
  }
615
- }
 
 
 
 
 
 
 
 
 
 
 
 
616
  }
617
  },
618
  "position": {
@@ -620,8 +622,8 @@
620
  "y": 1044.7639853229612
621
  },
622
  "height": 200.0,
623
- "parentId": null,
624
- "width": 200.0
625
  },
626
  {
627
  "id": "Chat processor 1",
@@ -631,38 +633,38 @@
631
  "params": {},
632
  "display": null,
633
  "error": null,
634
- "collapsed": true,
635
  "__execution_delay": null,
 
636
  "meta": {
 
637
  "inputs": {
638
  "processor": {
 
639
  "position": "bottom",
640
  "type": {
641
  "type": "<class 'inspect._empty'>"
642
- },
643
- "name": "processor"
644
  }
645
  },
646
  "params": {},
647
- "name": "Chat processor",
648
  "outputs": {
649
  "output": {
650
- "position": "top",
651
- "name": "output",
652
  "type": {
653
  "type": "None"
654
- }
 
 
655
  }
656
- },
657
- "type": "basic"
658
  }
659
  },
660
  "position": {
661
  "x": 182.89729246405872,
662
  "y": 778.546274223181
663
  },
664
- "width": 200.0,
665
  "parentId": null,
 
666
  "height": 200.0
667
  },
668
  {
@@ -671,23 +673,26 @@
671
  "data": {
672
  "title": "Mask",
673
  "params": {
674
675
- "regex": "([a-z0-9!#$%&'*+\\/=?^_`{|.}~-]+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)",
676
  "mask_pattern": "masked_email_address_{}",
677
- "name": "email"
 
 
678
  },
679
  "display": null,
680
  "error": null,
681
  "meta": {
 
682
  "outputs": {
683
  "output": {
684
  "position": "top",
 
685
  "type": {
686
  "type": "None"
687
- },
688
- "name": "output"
689
  }
690
  },
 
 
691
  "params": {
692
  "name": {
693
  "default": "",
@@ -698,17 +703,10 @@
698
  },
699
  "exceptions": {
700
  "name": "exceptions",
701
- "default": "",
702
- "type": {
703
- "type": "<class 'str'>"
704
- }
705
- },
706
- "mask_pattern": {
707
- "default": "",
708
  "type": {
709
  "type": "<class 'str'>"
710
  },
711
- "name": "mask_pattern"
712
  },
713
  "regex": {
714
  "type": {
@@ -716,20 +714,24 @@
716
  },
717
  "name": "regex",
718
  "default": ""
 
 
 
 
 
 
 
719
  }
720
- },
721
- "type": "basic",
722
- "inputs": {},
723
- "name": "Mask"
724
  }
725
  },
726
  "position": {
727
  "x": 233.69759202223884,
728
  "y": 1041.6145468043276
729
  },
730
- "width": 200.0,
731
  "parentId": null,
732
- "height": 200.0
733
  },
734
  {
735
  "id": "Mask 2",
@@ -737,54 +739,54 @@
737
  "data": {
738
  "title": "Mask",
739
  "params": {
740
- "mask_pattern": "masked_credit_card_number_{}",
741
- "exceptions": "",
742
  "regex": "((?:(?:\\\\d{4}[- ]?){3}\\\\d{4}|\\\\d{15,16}))(?![\\\\d])",
743
- "name": "credit_card"
 
 
744
  },
745
  "display": null,
746
  "error": null,
747
  "meta": {
748
- "name": "Mask",
749
  "outputs": {
750
  "output": {
751
  "name": "output",
 
752
  "type": {
753
  "type": "None"
754
- },
755
- "position": "top"
756
  }
757
  },
758
- "type": "basic",
759
  "inputs": {},
 
 
760
  "params": {
761
- "mask_pattern": {
762
- "default": "",
763
  "type": {
764
  "type": "<class 'str'>"
765
  },
766
- "name": "mask_pattern"
 
767
  },
768
- "name": {
769
  "default": "",
770
- "name": "name",
771
  "type": {
772
  "type": "<class 'str'>"
773
- }
 
774
  },
775
- "exceptions": {
776
- "default": "",
777
  "type": {
778
  "type": "<class 'str'>"
779
  },
780
- "name": "exceptions"
781
  },
782
- "regex": {
 
783
  "default": "",
784
  "type": {
785
  "type": "<class 'str'>"
786
- },
787
- "name": "regex"
788
  }
789
  }
790
  }
@@ -793,9 +795,9 @@
793
  "x": 513.2761671440603,
794
  "y": 1034.8547191984255
795
  },
796
- "height": 200.0,
797
  "parentId": null,
798
- "width": 200.0
799
  },
800
  {
801
  "id": "Test Chat API 2",
@@ -807,46 +809,46 @@
807
  },
808
  "display": null,
809
  "error": null,
 
 
810
  "meta": {
811
- "outputs": {
812
- "output": {
813
- "position": "right",
814
  "type": {
815
- "type": "None"
816
  },
817
- "name": "output"
818
  }
819
  },
820
- "type": "basic",
821
  "inputs": {
822
- "chat_api": {
823
- "name": "chat_api",
 
824
  "type": {
825
  "type": "<class 'inspect._empty'>"
826
- },
827
- "position": "bottom"
828
  },
829
- "message": {
 
830
  "type": {
831
  "type": "<class 'inspect._empty'>"
832
  },
833
- "name": "message",
834
- "position": "left"
835
  }
836
  },
837
- "name": "Test Chat API",
838
- "params": {
839
- "show_details": {
840
  "type": {
841
- "type": "<class 'bool'>"
842
  },
843
- "name": "show_details",
844
- "default": false
845
  }
846
- }
847
- },
848
- "__execution_delay": 0.0,
849
- "collapsed": false
850
  },
851
  "position": {
852
  "x": -57.377776548056346,
 
7
  "data": {
8
  "title": "Input chat",
9
  "params": {
10
+ "chat": "who is the CTO of Lynx?"
11
  },
12
  "display": null,
13
  "error": null,
14
+ "collapsed": null,
15
  "meta": {
 
 
 
 
 
 
 
 
 
16
  "inputs": {},
17
  "params": {
18
  "chat": {
19
+ "default": null,
20
  "type": {
21
  "type": "<class 'str'>"
22
  },
23
+ "name": "chat"
24
+ }
25
+ },
26
+ "outputs": {
27
+ "output": {
28
+ "name": "output",
29
+ "type": {
30
+ "type": "None"
31
+ },
32
+ "position": "right"
33
  }
34
  },
35
  "name": "Input chat",
36
  "type": "basic"
37
+ },
38
+ "__execution_delay": 0.0
39
  },
40
  "position": {
41
  "x": -493.5496596237119,
42
  "y": 20.90123252513356
43
  },
44
  "height": 186.0,
45
+ "width": 259.0,
46
+ "parentId": null
47
  },
48
  {
49
  "id": "View 1",
 
59
  ],
60
  "data": [
61
  [
62
+ "TheThe Chief Technology Officer (CTO) of Lynx Analytics is Chema Lizano. He leads the technology strategy and roadmap at the company, overseeing the vision, development, and implementation of solutions across various clients and environments. If you have any more questions regarding our team or services, feel free to ask!\n\nPlease visit https://www.lynxanalytics.com/board for further information."
63
  ]
64
  ]
65
  }
 
68
  "error": null,
69
  "meta": {
70
  "type": "table_view",
 
 
71
  "name": "View",
72
  "inputs": {
73
  "input": {
 
74
  "name": "input",
75
  "type": {
76
  "type": "<class 'inspect._empty'>"
77
+ },
78
+ "position": "left"
79
  }
80
+ },
81
+ "outputs": {},
82
+ "params": {}
83
  }
84
  },
85
  "position": {
86
+ "x": 731.7440706129762,
87
+ "y": -716.4943976910913
88
  },
89
+ "width": 1256.0,
90
  "parentId": null,
91
+ "height": 950.0
92
  },
93
  {
94
  "id": "LLM 1",
 
102
  "error": null,
103
  "meta": {
104
  "inputs": {},
105
+ "outputs": {
106
+ "output": {
107
+ "type": {
108
+ "type": "None"
109
+ },
110
+ "name": "output",
111
+ "position": "top"
112
+ }
113
+ },
114
  "type": "basic",
 
115
  "params": {
116
  "name": {
117
+ "default": "openai",
118
  "name": "name",
119
  "type": {
120
  "type": "<class 'str'>"
121
+ }
 
122
  }
123
  },
124
+ "name": "LLM"
 
 
 
 
 
 
 
 
125
  }
126
  },
127
  "position": {
128
  "x": -312.5774211084781,
129
  "y": 1093.4019527511366
130
  },
131
+ "parentId": null,
132
  "width": 200.0,
133
+ "height": 200.0
134
  },
135
  {
136
  "id": "Scenario selector 1",
 
138
  "data": {
139
  "title": "Scenario selector",
140
  "params": {
141
+ "scenario_file": "/home/darabos/nvme/lynxscribe/examples/chat_api/scenarios.yaml",
142
+ "node_types": "intent_cluster"
143
  },
144
  "display": null,
145
  "error": null,
146
  "meta": {
 
 
 
 
 
 
 
 
 
 
 
 
147
  "params": {
148
  "scenario_file": {
149
  "type": {
150
  "type": "<class 'str'>"
151
  },
152
+ "name": "scenario_file",
153
+ "default": null
154
  },
155
  "node_types": {
156
+ "default": "intent_cluster",
157
  "type": {
158
  "type": "<class 'str'>"
159
  },
160
+ "name": "node_types"
 
161
  }
162
+ },
163
+ "inputs": {},
164
+ "outputs": {
165
+ "output": {
166
+ "position": "top",
167
+ "name": "output",
168
+ "type": {
169
+ "type": "None"
170
+ }
171
+ }
172
+ },
173
+ "type": "basic",
174
+ "name": "Scenario selector"
175
  }
176
  },
177
  "position": {
178
  "x": -549.1300345090008,
179
  "y": 1086.4852248156676
180
  },
181
+ "parentId": null,
182
  "height": 200.0,
183
+ "width": 200.0
184
  },
185
  {
186
  "id": "Chat API 1",
 
194
  "error": null,
195
  "meta": {
196
  "name": "Chat API",
197
+ "type": "basic",
198
  "outputs": {
199
  "output": {
 
 
200
  "type": {
201
  "type": "None"
 
 
 
 
 
 
 
202
  },
203
+ "position": "top",
204
+ "name": "output"
205
  }
206
  },
207
  "inputs": {
208
+ "chatbot": {
209
+ "name": "chatbot",
210
  "type": {
211
  "type": "<class 'inspect._empty'>"
212
  },
 
213
  "position": "bottom"
214
  },
215
+ "chat_processor": {
216
+ "name": "chat_processor",
217
+ "position": "bottom",
218
  "type": {
219
  "type": "<class 'inspect._empty'>"
220
+ }
 
 
221
  },
222
+ "knowledge_base": {
 
223
  "type": {
224
  "type": "<class 'inspect._empty'>"
225
  },
226
+ "position": "bottom",
227
+ "name": "knowledge_base"
228
  }
229
  },
230
+ "params": {
231
+ "model": {
232
+ "default": "gpt-4o-mini",
233
+ "type": {
234
+ "type": "<class 'str'>"
235
+ },
236
+ "name": "model"
237
+ }
238
+ }
239
  }
240
  },
241
  "position": {
 
243
  "y": 258.20943122219336
244
  },
245
  "parentId": null,
246
+ "width": 200.0,
247
+ "height": 200.0
248
  },
249
  {
250
  "id": "Knowledge base 1",
 
252
  "data": {
253
  "title": "Knowledge base",
254
  "params": {
255
+ "template_cluster_path": "/home/darabos/nvme/lynxscribe/examples/chat_api/data/lynx/tempclusters.pickle",
256
  "edges_path": "/home/darabos/nvme/lynxscribe/examples/chat_api/data/lynx/edges.pickle",
257
+ "nodes_path": "/home/darabos/nvme/lynxscribe/examples/chat_api/data/lynx/nodes.pickle"
258
  },
259
  "display": null,
260
  "error": null,
261
  "meta": {
262
+ "name": "Knowledge base",
263
+ "type": "basic",
264
  "params": {
265
  "nodes_path": {
266
  "name": "nodes_path",
 
269
  "type": "<class 'str'>"
270
  }
271
  },
272
+ "template_cluster_path": {
273
  "type": {
274
  "type": "<class 'str'>"
275
  },
 
 
 
 
276
  "name": "template_cluster_path",
277
+ "default": "tempclusters.pickle"
278
+ },
279
+ "edges_path": {
280
+ "name": "edges_path",
281
+ "default": "edges.pickle",
282
  "type": {
283
  "type": "<class 'str'>"
284
  }
285
  }
286
  },
 
287
  "inputs": {},
 
288
  "outputs": {
289
  "output": {
290
+ "position": "top",
291
  "name": "output",
292
  "type": {
293
  "type": "None"
294
+ }
 
295
  }
296
  }
297
  }
 
300
  "x": 598.8683124946176,
301
  "y": 609.9499973808545
302
  },
303
+ "width": 336.0,
304
  "height": 320.0,
305
+ "parentId": null
 
306
  },
307
  {
308
  "id": "RAG chatbot 1",
 
311
  "title": "RAG chatbot",
312
  "params": {
313
  "limits_by_type": "{\"information\": [2, 3], \"summary\": [2, 3]}",
 
314
  "max_results": "5",
315
+ "negative_answer": "I'm sorry, but the data I've been trained on does not contain any information related to your question.",
316
  "strict_limits": true
317
  },
318
  "display": null,
319
  "error": null,
320
  "meta": {
321
+ "outputs": {
322
+ "output": {
323
+ "position": "top",
324
+ "name": "output",
325
  "type": {
326
+ "type": "None"
327
  }
328
+ }
329
+ },
330
+ "params": {
331
  "max_results": {
332
+ "default": 5.0,
333
  "type": {
334
  "type": "<class 'int'>"
335
  },
336
+ "name": "max_results"
337
  },
338
  "strict_limits": {
 
339
  "name": "strict_limits",
340
+ "default": true,
341
  "type": {
342
  "type": "<class 'bool'>"
343
  }
344
  },
345
+ "negative_answer": {
346
+ "default": "I'm sorry, but the data I've been trained on does not contain any information related to your question.",
347
+ "name": "negative_answer",
348
+ "type": {
349
+ "type": "<class 'str'>"
350
+ }
351
+ },
352
  "limits_by_type": {
 
353
  "default": "{}",
354
+ "name": "limits_by_type",
355
  "type": {
356
  "type": "<class 'str'>"
357
  }
358
  }
359
  },
 
 
 
 
 
 
 
 
 
 
360
  "name": "RAG chatbot",
361
+ "type": "basic",
362
  "inputs": {
363
  "rag_graph": {
 
364
  "type": {
365
  "type": "<class 'inspect._empty'>"
366
  },
367
+ "name": "rag_graph",
368
  "position": "bottom"
369
  },
370
+ "llm": {
371
+ "name": "llm",
372
+ "position": "bottom",
373
  "type": {
374
  "type": "<class 'inspect._empty'>"
375
+ }
 
376
  },
377
+ "scenario_selector": {
 
378
  "type": {
379
  "type": "<class 'inspect._empty'>"
380
  },
381
+ "name": "scenario_selector",
382
  "position": "bottom"
383
  }
384
  }
 
389
  "x": -533.1301830766971,
390
  "y": 547.294980747757
391
  },
 
392
  "parentId": null,
393
+ "height": 399.0,
394
+ "width": 339.0
395
  },
396
  {
397
  "id": "RAG graph 1",
 
402
  "display": null,
403
  "error": null,
404
  "meta": {
405
+ "type": "basic",
406
  "inputs": {
407
+ "text_embedder": {
 
408
  "type": {
409
  "type": "<class 'inspect._empty'>"
410
  },
411
+ "position": "bottom",
412
+ "name": "text_embedder"
413
  },
414
+ "vector_store": {
415
+ "position": "bottom",
416
  "type": {
417
  "type": "<class 'inspect._empty'>"
418
  },
419
+ "name": "vector_store"
 
420
  }
421
  },
422
+ "name": "RAG graph",
423
  "params": {},
424
  "outputs": {
425
  "output": {
426
  "position": "top",
 
427
  "type": {
428
  "type": "None"
429
+ },
430
+ "name": "output"
431
  }
432
+ }
 
433
  }
434
  },
435
  "position": {
436
  "x": -817.8208895639339,
437
  "y": 1014.836542916127
438
  },
439
+ "parentId": null,
440
  "width": 200.0,
441
+ "height": 200.0
442
  },
443
  {
444
  "id": "Vector store 1",
 
455
  "meta": {
456
  "params": {
457
  "collection_name": {
 
458
  "type": {
459
  "type": "<class 'str'>"
460
  },
461
+ "default": "lynx",
462
  "name": "collection_name"
463
  },
464
  "name": {
465
  "default": "chromadb",
 
466
  "type": {
467
  "type": "<class 'str'>"
468
+ },
469
+ "name": "name"
470
  }
471
  },
472
+ "type": "basic",
473
  "name": "Vector store",
474
  "outputs": {
475
  "output": {
 
476
  "type": {
477
  "type": "None"
478
  },
479
+ "position": "top",
480
+ "name": "output"
481
  }
482
  },
 
483
  "inputs": {}
484
  }
485
  },
 
502
  "display": null,
503
  "error": null,
504
  "meta": {
 
505
  "params": {
506
  "model": {
507
+ "default": "text-embedding-ada-002",
508
  "type": {
509
  "type": "<class 'str'>"
510
  },
511
+ "name": "model"
 
 
 
 
 
 
 
 
 
 
512
  }
513
  },
514
  "name": "Text embedder",
515
  "outputs": {
516
  "output": {
 
517
  "type": {
518
  "type": "None"
519
  },
520
+ "position": "top",
521
+ "name": "output"
522
+ }
523
+ },
524
+ "type": "basic",
525
+ "inputs": {
526
+ "llm": {
527
+ "type": {
528
+ "type": "<class 'inspect._empty'>"
529
+ },
530
+ "name": "llm",
531
+ "position": "bottom"
532
  }
533
  }
534
  }
 
538
  "y": 1343.5978526690794
539
  },
540
  "width": 200.0,
541
+ "height": 200.0,
542
+ "parentId": null
543
  },
544
  {
545
  "id": "LLM 2",
 
552
  "display": null,
553
  "error": null,
554
  "meta": {
555
+ "outputs": {
556
+ "output": {
557
+ "position": "top",
558
+ "name": "output",
559
+ "type": {
560
+ "type": "None"
561
+ }
562
+ }
563
+ },
564
+ "name": "LLM",
565
  "type": "basic",
566
+ "inputs": {},
567
  "params": {
568
  "name": {
 
569
  "default": "openai",
570
+ "name": "name",
571
  "type": {
572
  "type": "<class 'str'>"
573
  }
574
  }
575
+ }
 
 
 
 
 
 
 
 
 
 
576
  }
577
  },
578
  "position": {
579
  "x": -727.6171373682814,
580
  "y": 1649.7242636905507
581
  },
 
582
  "width": 200.0,
583
+ "parentId": null,
584
+ "height": 200.0
585
  },
586
  {
587
  "id": "Truncate history 1",
 
594
  "display": null,
595
  "error": null,
596
  "meta": {
 
 
 
 
 
 
 
 
 
 
 
 
597
  "outputs": {
598
  "output": {
599
  "type": {
 
602
  "name": "output",
603
  "position": "top"
604
  }
605
+ },
606
+ "type": "basic",
607
+ "params": {
608
+ "max_tokens": {
609
+ "default": 10000.0,
610
+ "name": "max_tokens",
611
+ "type": {
612
+ "type": "<class 'int'>"
613
+ }
614
+ }
615
+ },
616
+ "name": "Truncate history",
617
+ "inputs": {}
618
  }
619
  },
620
  "position": {
 
622
  "y": 1044.7639853229612
623
  },
624
  "height": 200.0,
625
+ "width": 200.0,
626
+ "parentId": null
627
  },
628
  {
629
  "id": "Chat processor 1",
 
633
  "params": {},
634
  "display": null,
635
  "error": null,
 
636
  "__execution_delay": null,
637
+ "collapsed": true,
638
  "meta": {
639
+ "name": "Chat processor",
640
  "inputs": {
641
  "processor": {
642
+ "name": "processor",
643
  "position": "bottom",
644
  "type": {
645
  "type": "<class 'inspect._empty'>"
646
+ }
 
647
  }
648
  },
649
  "params": {},
650
+ "type": "basic",
651
  "outputs": {
652
  "output": {
 
 
653
  "type": {
654
  "type": "None"
655
+ },
656
+ "position": "top",
657
+ "name": "output"
658
  }
659
+ }
 
660
  }
661
  },
662
  "position": {
663
  "x": 182.89729246405872,
664
  "y": 778.546274223181
665
  },
 
666
  "parentId": null,
667
+ "width": 200.0,
668
  "height": 200.0
669
  },
670
  {
 
673
  "data": {
674
  "title": "Mask",
675
  "params": {
 
 
676
  "mask_pattern": "masked_email_address_{}",
677
+ "name": "email",
678
679
+ "regex": "([a-z0-9!#$%&'*+\\/=?^_`{|.}~-]+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)"
680
  },
681
  "display": null,
682
  "error": null,
683
  "meta": {
684
+ "inputs": {},
685
  "outputs": {
686
  "output": {
687
  "position": "top",
688
+ "name": "output",
689
  "type": {
690
  "type": "None"
691
+ }
 
692
  }
693
  },
694
+ "type": "basic",
695
+ "name": "Mask",
696
  "params": {
697
  "name": {
698
  "default": "",
 
703
  },
704
  "exceptions": {
705
  "name": "exceptions",
 
 
 
 
 
 
 
706
  "type": {
707
  "type": "<class 'str'>"
708
  },
709
+ "default": ""
710
  },
711
  "regex": {
712
  "type": {
 
714
  },
715
  "name": "regex",
716
  "default": ""
717
+ },
718
+ "mask_pattern": {
719
+ "default": "",
720
+ "type": {
721
+ "type": "<class 'str'>"
722
+ },
723
+ "name": "mask_pattern"
724
  }
725
+ }
 
 
 
726
  }
727
  },
728
  "position": {
729
  "x": 233.69759202223884,
730
  "y": 1041.6145468043276
731
  },
732
+ "height": 200.0,
733
  "parentId": null,
734
+ "width": 200.0
735
  },
736
  {
737
  "id": "Mask 2",
 
739
  "data": {
740
  "title": "Mask",
741
  "params": {
 
 
742
  "regex": "((?:(?:\\\\d{4}[- ]?){3}\\\\d{4}|\\\\d{15,16}))(?![\\\\d])",
743
+ "exceptions": "",
744
+ "name": "credit_card",
745
+ "mask_pattern": "masked_credit_card_number_{}"
746
  },
747
  "display": null,
748
  "error": null,
749
  "meta": {
 
750
  "outputs": {
751
  "output": {
752
  "name": "output",
753
+ "position": "top",
754
  "type": {
755
  "type": "None"
756
+ }
 
757
  }
758
  },
 
759
  "inputs": {},
760
+ "name": "Mask",
761
+ "type": "basic",
762
  "params": {
763
+ "exceptions": {
 
764
  "type": {
765
  "type": "<class 'str'>"
766
  },
767
+ "default": "",
768
+ "name": "exceptions"
769
  },
770
+ "regex": {
771
  "default": "",
 
772
  "type": {
773
  "type": "<class 'str'>"
774
+ },
775
+ "name": "regex"
776
  },
777
+ "mask_pattern": {
778
+ "name": "mask_pattern",
779
  "type": {
780
  "type": "<class 'str'>"
781
  },
782
+ "default": ""
783
  },
784
+ "name": {
785
+ "name": "name",
786
  "default": "",
787
  "type": {
788
  "type": "<class 'str'>"
789
+ }
 
790
  }
791
  }
792
  }
 
795
  "x": 513.2761671440603,
796
  "y": 1034.8547191984255
797
  },
798
+ "width": 200.0,
799
  "parentId": null,
800
+ "height": 200.0
801
  },
802
  {
803
  "id": "Test Chat API 2",
 
809
  },
810
  "display": null,
811
  "error": null,
812
+ "collapsed": false,
813
+ "__execution_delay": 0.0,
814
  "meta": {
815
+ "params": {
816
+ "show_details": {
817
+ "default": false,
818
  "type": {
819
+ "type": "<class 'bool'>"
820
  },
821
+ "name": "show_details"
822
  }
823
  },
 
824
  "inputs": {
825
+ "message": {
826
+ "name": "message",
827
+ "position": "left",
828
  "type": {
829
  "type": "<class 'inspect._empty'>"
830
+ }
 
831
  },
832
+ "chat_api": {
833
+ "position": "bottom",
834
  "type": {
835
  "type": "<class 'inspect._empty'>"
836
  },
837
+ "name": "chat_api"
 
838
  }
839
  },
840
+ "outputs": {
841
+ "output": {
842
+ "position": "right",
843
  "type": {
844
+ "type": "None"
845
  },
846
+ "name": "output"
 
847
  }
848
+ },
849
+ "name": "Test Chat API",
850
+ "type": "basic"
851
+ }
852
  },
853
  "position": {
854
  "x": -57.377776548056346,
lynxkite-app/data/PyTorch demo CHANGED
@@ -11,25 +11,28 @@
11
  "error": null,
12
  "meta": {
13
  "name": "Input: features",
14
- "params": {},
15
- "inputs": {},
16
  "outputs": {
17
  "x": {
 
18
  "name": "x",
19
  "type": {
20
  "type": "tensor"
21
- },
22
- "position": "top"
23
  }
24
  },
25
- "type": "basic",
26
- "sub_nodes": null
27
- }
 
 
28
  },
29
  "position": {
30
  "x": -108.60604658638658,
31
  "y": 63.96065124378427
32
  },
 
 
33
  "parentId": null
34
  },
35
  {
@@ -40,10 +43,13 @@
40
  "params": {},
41
  "display": null,
42
  "error": null,
 
 
43
  "meta": {
44
  "name": "Input: graph edges",
45
- "params": {},
46
  "inputs": {},
 
 
47
  "outputs": {
48
  "edges": {
49
  "name": "edges",
@@ -52,16 +58,16 @@
52
  },
53
  "position": "top"
54
  }
55
- },
56
- "type": "basic",
57
- "sub_nodes": null
58
  }
59
  },
60
  "position": {
61
  "x": 180.7373888617958,
62
  "y": 58.54904654355781
63
  },
64
- "parentId": null
 
 
65
  },
66
  {
67
  "id": "Linear 1",
@@ -74,43 +80,44 @@
74
  "display": null,
75
  "error": null,
76
  "meta": {
77
- "name": "Linear",
78
- "params": {
79
- "output_dim": {
80
- "name": "output_dim",
81
- "default": "same",
82
- "type": {
83
- "type": "<class 'str'>"
84
- }
85
- }
86
- },
87
  "inputs": {
88
  "x": {
89
- "name": "x",
90
  "type": {
91
  "type": "tensor"
92
  },
93
- "position": "bottom"
 
94
  }
95
  },
 
 
96
  "outputs": {
97
  "x": {
98
- "name": "x",
99
  "type": {
100
  "type": "tensor"
101
  },
102
- "position": "top"
 
103
  }
104
  },
105
- "type": "basic",
106
- "sub_nodes": null
 
 
 
 
 
 
 
107
  }
108
  },
109
  "position": {
110
- "x": 56.938816909128036,
111
- "y": -573.5634543506885
112
  },
113
- "parentId": null
 
 
114
  },
115
  {
116
  "id": "Activation 1",
@@ -123,11 +130,30 @@
123
  "display": null,
124
  "error": null,
125
  "meta": {
 
 
 
 
 
 
 
 
 
126
  "name": "Activation",
 
 
 
 
 
 
 
 
 
 
127
  "params": {
128
  "type": {
 
129
  "name": "type",
130
- "default": 1,
131
  "type": {
132
  "enum": [
133
  "ReLU",
@@ -137,34 +163,16 @@
137
  ]
138
  }
139
  }
140
- },
141
- "inputs": {
142
- "x": {
143
- "name": "x",
144
- "type": {
145
- "type": "tensor"
146
- },
147
- "position": "bottom"
148
- }
149
- },
150
- "outputs": {
151
- "x": {
152
- "name": "x",
153
- "type": {
154
- "type": "tensor"
155
- },
156
- "position": "top"
157
- }
158
- },
159
- "type": "basic",
160
- "sub_nodes": null
161
  }
162
  },
163
  "position": {
164
- "x": 84.15324804216073,
165
- "y": -729.2300004316357
166
  },
167
- "parentId": null
 
 
168
  },
169
  {
170
  "id": "Dropout 1",
@@ -177,16 +185,7 @@
177
  "display": null,
178
  "error": null,
179
  "meta": {
180
- "name": "Dropout",
181
- "params": {
182
- "p": {
183
- "name": "p",
184
- "default": 0.5,
185
- "type": {
186
- "type": "<class 'float'>"
187
- }
188
- }
189
- },
190
  "inputs": {
191
  "x": {
192
  "name": "x",
@@ -196,59 +195,34 @@
196
  "position": "bottom"
197
  }
198
  },
199
- "outputs": {
200
- "x": {
201
- "name": "x",
 
202
  "type": {
203
- "type": "tensor"
204
  },
205
- "position": "top"
206
  }
207
  },
208
- "type": "basic",
209
- "sub_nodes": null
210
- }
211
- },
212
- "position": {
213
- "x": 56.938816909128036,
214
- "y": -889.4846386414522
215
- },
216
- "parentId": null
217
- },
218
- {
219
- "id": "Repeat 1",
220
- "type": "area",
221
- "data": {
222
- "title": "Repeat",
223
- "params": {
224
- "times": "3"
225
- },
226
- "display": null,
227
- "error": null,
228
- "meta": {
229
- "name": "Repeat",
230
- "params": {
231
- "times": {
232
- "name": "times",
233
- "default": 1,
234
  "type": {
235
- "type": "<class 'int'>"
236
  }
237
  }
238
- },
239
- "inputs": {},
240
- "outputs": {},
241
- "type": "area",
242
- "sub_nodes": null
243
  }
244
  },
245
  "position": {
246
- "x": -48.6249442834993,
247
- "y": -970.0583599108166
248
  },
 
249
  "parentId": null,
250
- "width": 400,
251
- "height": 600
252
  },
253
  {
254
  "id": "Graph conv 1",
@@ -261,11 +235,21 @@
261
  "display": null,
262
  "error": null,
263
  "meta": {
 
 
 
 
 
 
 
 
 
 
264
  "name": "Graph conv",
265
  "params": {
266
  "type": {
267
  "name": "type",
268
- "default": 1,
269
  "type": {
270
  "enum": [
271
  "GCNConv",
@@ -278,10 +262,10 @@
278
  },
279
  "inputs": {
280
  "x": {
281
- "name": "x",
282
  "type": {
283
  "type": "tensor"
284
  },
 
285
  "position": "bottom"
286
  },
287
  "edges": {
@@ -291,61 +275,17 @@
291
  },
292
  "position": "bottom"
293
  }
294
- },
295
- "outputs": {
296
- "x": {
297
- "name": "x",
298
- "type": {
299
- "type": "tensor"
300
- },
301
- "position": "top"
302
- }
303
- },
304
- "type": "basic",
305
- "sub_nodes": null
306
  }
307
  },
308
  "position": {
309
  "x": 64.08886242755246,
310
  "y": -269.43023573181557
311
  },
 
 
312
  "parentId": null
313
  },
314
- {
315
- "id": "Repeat 2",
316
- "type": "area",
317
- "data": {
318
- "title": "Repeat",
319
- "params": {
320
- "times": "5"
321
- },
322
- "display": null,
323
- "error": null,
324
- "meta": {
325
- "name": "Repeat",
326
- "params": {
327
- "times": {
328
- "name": "times",
329
- "default": 1,
330
- "type": {
331
- "type": "<class 'int'>"
332
- }
333
- }
334
- },
335
- "inputs": {},
336
- "outputs": {},
337
- "type": "area",
338
- "sub_nodes": null
339
- }
340
- },
341
- "position": {
342
- "x": -46.21033706832179,
343
- "y": -326.2712248181098
344
- },
345
- "parentId": null,
346
- "width": 400,
347
- "height": 200
348
- },
349
  {
350
  "id": "Supervised loss 1",
351
  "type": "basic",
@@ -354,19 +294,22 @@
354
  "params": {},
355
  "display": null,
356
  "error": null,
 
 
357
  "meta": {
358
- "name": "Supervised loss",
359
  "params": {},
 
360
  "inputs": {
361
- "x": {
362
- "name": "x",
363
  "type": {
364
  "type": "tensor"
365
  },
366
  "position": "bottom"
367
  },
368
- "y": {
369
- "name": "y",
370
  "type": {
371
  "type": "tensor"
372
  },
@@ -375,22 +318,22 @@
375
  },
376
  "outputs": {
377
  "loss": {
378
- "name": "loss",
379
  "type": {
380
  "type": "tensor"
381
  },
382
- "position": "top"
383
  }
384
- },
385
- "type": "basic",
386
- "sub_nodes": null
387
  }
388
  },
389
  "position": {
390
  "x": 110.53693593362718,
391
  "y": -1123.9976567905628
392
  },
393
- "parentId": null
 
 
394
  },
395
  {
396
  "id": "Input: label 1",
@@ -400,27 +343,30 @@
400
  "params": {},
401
  "display": null,
402
  "error": null,
 
 
403
  "meta": {
404
- "name": "Input: label",
405
- "params": {},
406
  "inputs": {},
407
  "outputs": {
408
  "y": {
409
- "name": "y",
410
  "type": {
411
  "type": "tensor"
412
  },
413
- "position": "top"
 
414
  }
415
  },
 
416
  "type": "basic",
417
- "sub_nodes": null
418
  }
419
  },
420
  "position": {
421
  "x": 666.110498676668,
422
  "y": -898.6721561114967
423
  },
 
 
424
  "parentId": null
425
  },
426
  {
@@ -429,17 +375,23 @@
429
  "data": {
430
  "title": "Optimizer",
431
  "params": {
432
- "type": "AdamW",
433
- "lr": 0.001
434
  },
435
  "display": null,
436
  "error": null,
437
  "meta": {
438
  "name": "Optimizer",
 
439
  "params": {
 
 
 
 
 
 
 
440
  "type": {
441
- "name": "type",
442
- "default": 1,
443
  "type": {
444
  "enum": [
445
  "AdamW",
@@ -450,35 +402,136 @@
450
  "Paged AdamW",
451
  "Galore AdamW"
452
  ]
453
- }
454
- },
455
- "lr": {
456
- "name": "lr",
457
- "default": 0.001,
458
- "type": {
459
- "type": "<class 'float'>"
460
- }
461
  }
462
  },
463
  "inputs": {
464
  "loss": {
 
 
 
465
  "name": "loss",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
466
  "type": {
467
  "type": "tensor"
468
  },
469
  "position": "bottom"
470
  }
471
  },
472
- "outputs": {},
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
473
  "type": "basic",
474
- "sub_nodes": null
 
 
 
 
 
 
 
 
 
475
  }
476
  },
477
  "position": {
478
- "x": 165.28398260528976,
479
- "y": -1338.6254108128633
480
  },
481
- "parentId": null
 
482
  }
483
  ],
484
  "edges": [
@@ -537,6 +590,34 @@
537
  "target": "Optimizer 1",
538
  "sourceHandle": "loss",
539
  "targetHandle": "loss"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
540
  }
541
  ]
542
  }
 
11
  "error": null,
12
  "meta": {
13
  "name": "Input: features",
14
+ "type": "basic",
 
15
  "outputs": {
16
  "x": {
17
+ "position": "top",
18
  "name": "x",
19
  "type": {
20
  "type": "tensor"
21
+ }
 
22
  }
23
  },
24
+ "params": {},
25
+ "inputs": {}
26
+ },
27
+ "collapsed": true,
28
+ "__execution_delay": null
29
  },
30
  "position": {
31
  "x": -108.60604658638658,
32
  "y": 63.96065124378427
33
  },
34
+ "width": 200.0,
35
+ "height": 200.0,
36
  "parentId": null
37
  },
38
  {
 
43
  "params": {},
44
  "display": null,
45
  "error": null,
46
+ "__execution_delay": null,
47
+ "collapsed": true,
48
  "meta": {
49
  "name": "Input: graph edges",
 
50
  "inputs": {},
51
+ "params": {},
52
+ "type": "basic",
53
  "outputs": {
54
  "edges": {
55
  "name": "edges",
 
58
  },
59
  "position": "top"
60
  }
61
+ }
 
 
62
  }
63
  },
64
  "position": {
65
  "x": 180.7373888617958,
66
  "y": 58.54904654355781
67
  },
68
+ "width": 200.0,
69
+ "parentId": null,
70
+ "height": 200.0
71
  },
72
  {
73
  "id": "Linear 1",
 
80
  "display": null,
81
  "error": null,
82
  "meta": {
 
 
 
 
 
 
 
 
 
 
83
  "inputs": {
84
  "x": {
 
85
  "type": {
86
  "type": "tensor"
87
  },
88
+ "position": "bottom",
89
+ "name": "x"
90
  }
91
  },
92
+ "type": "basic",
93
+ "name": "Linear",
94
  "outputs": {
95
  "x": {
 
96
  "type": {
97
  "type": "tensor"
98
  },
99
+ "position": "top",
100
+ "name": "x"
101
  }
102
  },
103
+ "params": {
104
+ "output_dim": {
105
+ "name": "output_dim",
106
+ "type": {
107
+ "type": "<class 'str'>"
108
+ },
109
+ "default": "same"
110
+ }
111
+ }
112
  }
113
  },
114
  "position": {
115
+ "x": 78.37881963123723,
116
+ "y": -528.3012263817914
117
  },
118
+ "parentId": null,
119
+ "width": 204.0,
120
+ "height": 140.0
121
  },
122
  {
123
  "id": "Activation 1",
 
130
  "display": null,
131
  "error": null,
132
  "meta": {
133
+ "outputs": {
134
+ "x": {
135
+ "position": "top",
136
+ "type": {
137
+ "type": "tensor"
138
+ },
139
+ "name": "x"
140
+ }
141
+ },
142
  "name": "Activation",
143
+ "type": "basic",
144
+ "inputs": {
145
+ "x": {
146
+ "position": "bottom",
147
+ "name": "x",
148
+ "type": {
149
+ "type": "tensor"
150
+ }
151
+ }
152
+ },
153
  "params": {
154
  "type": {
155
+ "default": "OptionsFor_type.ReLU",
156
  "name": "type",
 
157
  "type": {
158
  "enum": [
159
  "ReLU",
 
163
  ]
164
  }
165
  }
166
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  }
168
  },
169
  "position": {
170
+ "x": 98.44658319023353,
171
+ "y": -741.1411130550297
172
  },
173
+ "height": 154.0,
174
+ "parentId": null,
175
+ "width": 173.0
176
  },
177
  {
178
  "id": "Dropout 1",
 
185
  "display": null,
186
  "error": null,
187
  "meta": {
188
+ "type": "basic",
 
 
 
 
 
 
 
 
 
189
  "inputs": {
190
  "x": {
191
  "name": "x",
 
195
  "position": "bottom"
196
  }
197
  },
198
+ "name": "Dropout",
199
+ "params": {
200
+ "p": {
201
+ "default": 0.5,
202
  "type": {
203
+ "type": "<class 'float'>"
204
  },
205
+ "name": "p"
206
  }
207
  },
208
+ "outputs": {
209
+ "x": {
210
+ "position": "top",
211
+ "name": "x",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  "type": {
213
+ "type": "tensor"
214
  }
215
  }
216
+ }
 
 
 
 
217
  }
218
  },
219
  "position": {
220
+ "x": 73.61437458187964,
221
+ "y": -929.9824215609918
222
  },
223
+ "width": 207.0,
224
  "parentId": null,
225
+ "height": 159.0
 
226
  },
227
  {
228
  "id": "Graph conv 1",
 
235
  "display": null,
236
  "error": null,
237
  "meta": {
238
+ "outputs": {
239
+ "x": {
240
+ "type": {
241
+ "type": "tensor"
242
+ },
243
+ "name": "x",
244
+ "position": "top"
245
+ }
246
+ },
247
+ "type": "basic",
248
  "name": "Graph conv",
249
  "params": {
250
  "type": {
251
  "name": "type",
252
+ "default": "OptionsFor_type.GCNConv",
253
  "type": {
254
  "enum": [
255
  "GCNConv",
 
262
  },
263
  "inputs": {
264
  "x": {
 
265
  "type": {
266
  "type": "tensor"
267
  },
268
+ "name": "x",
269
  "position": "bottom"
270
  },
271
  "edges": {
 
275
  },
276
  "position": "bottom"
277
  }
278
+ }
 
 
 
 
 
 
 
 
 
 
 
279
  }
280
  },
281
  "position": {
282
  "x": 64.08886242755246,
283
  "y": -269.43023573181557
284
  },
285
+ "height": 200.0,
286
+ "width": 200.0,
287
  "parentId": null
288
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  {
290
  "id": "Supervised loss 1",
291
  "type": "basic",
 
294
  "params": {},
295
  "display": null,
296
  "error": null,
297
+ "collapsed": true,
298
+ "__execution_delay": null,
299
  "meta": {
300
+ "type": "basic",
301
  "params": {},
302
+ "name": "Supervised loss",
303
  "inputs": {
304
+ "y": {
305
+ "name": "y",
306
  "type": {
307
  "type": "tensor"
308
  },
309
  "position": "bottom"
310
  },
311
+ "x": {
312
+ "name": "x",
313
  "type": {
314
  "type": "tensor"
315
  },
 
318
  },
319
  "outputs": {
320
  "loss": {
321
+ "position": "top",
322
  "type": {
323
  "type": "tensor"
324
  },
325
+ "name": "loss"
326
  }
327
+ }
 
 
328
  }
329
  },
330
  "position": {
331
  "x": 110.53693593362718,
332
  "y": -1123.9976567905628
333
  },
334
+ "parentId": null,
335
+ "height": 80.0,
336
+ "width": 204.0
337
  },
338
  {
339
  "id": "Input: label 1",
 
343
  "params": {},
344
  "display": null,
345
  "error": null,
346
+ "collapsed": true,
347
+ "__execution_delay": null,
348
  "meta": {
 
 
349
  "inputs": {},
350
  "outputs": {
351
  "y": {
 
352
  "type": {
353
  "type": "tensor"
354
  },
355
+ "position": "top",
356
+ "name": "y"
357
  }
358
  },
359
+ "name": "Input: label",
360
  "type": "basic",
361
+ "params": {}
362
  }
363
  },
364
  "position": {
365
  "x": 666.110498676668,
366
  "y": -898.6721561114967
367
  },
368
+ "width": 200.0,
369
+ "height": 73.0,
370
  "parentId": null
371
  },
372
  {
 
375
  "data": {
376
  "title": "Optimizer",
377
  "params": {
378
+ "lr": 0.001,
379
+ "type": "AdamW"
380
  },
381
  "display": null,
382
  "error": null,
383
  "meta": {
384
  "name": "Optimizer",
385
+ "outputs": {},
386
  "params": {
387
+ "lr": {
388
+ "default": 0.001,
389
+ "name": "lr",
390
+ "type": {
391
+ "type": "<class 'float'>"
392
+ }
393
+ },
394
  "type": {
 
 
395
  "type": {
396
  "enum": [
397
  "AdamW",
 
402
  "Paged AdamW",
403
  "Galore AdamW"
404
  ]
405
+ },
406
+ "name": "type",
407
+ "default": "OptionsFor_type.AdamW"
 
 
 
 
 
408
  }
409
  },
410
  "inputs": {
411
  "loss": {
412
+ "type": {
413
+ "type": "tensor"
414
+ },
415
  "name": "loss",
416
+ "position": "bottom"
417
+ }
418
+ },
419
+ "type": "basic"
420
+ }
421
+ },
422
+ "position": {
423
+ "x": 115.25730958703494,
424
+ "y": -1431.5320892753364
425
+ },
426
+ "width": 200.0,
427
+ "height": 233.0,
428
+ "parentId": null
429
+ },
430
+ {
431
+ "id": "Repeat 3",
432
+ "type": "basic",
433
+ "data": {
434
+ "title": "Repeat",
435
+ "params": {
436
+ "times": 1.0
437
+ },
438
+ "display": null,
439
+ "error": null,
440
+ "meta": {
441
+ "type": "basic",
442
+ "position": {
443
+ "y": 340.0,
444
+ "x": 371.0
445
+ },
446
+ "outputs": {
447
+ "output": {
448
+ "name": "output",
449
  "type": {
450
  "type": "tensor"
451
  },
452
  "position": "bottom"
453
  }
454
  },
455
+ "name": "Repeat",
456
+ "params": {
457
+ "times": {
458
+ "name": "times",
459
+ "default": 1.0,
460
+ "type": {
461
+ "type": "<class 'int'>"
462
+ }
463
+ }
464
+ },
465
+ "inputs": {
466
+ "input": {
467
+ "type": {
468
+ "type": "tensor"
469
+ },
470
+ "position": "top",
471
+ "name": "input"
472
+ }
473
+ }
474
+ }
475
+ },
476
+ "position": {
477
+ "x": -245.1288628776232,
478
+ "y": -276.90661040974317
479
+ },
480
+ "width": 200.0,
481
+ "height": 200.0
482
+ },
483
+ {
484
+ "id": "Repeat 1",
485
+ "type": "basic",
486
+ "data": {
487
+ "title": "Repeat",
488
+ "params": {
489
+ "times": 1.0
490
+ },
491
+ "display": null,
492
+ "error": null,
493
+ "meta": {
494
+ "outputs": {
495
+ "output": {
496
+ "position": "bottom",
497
+ "type": {
498
+ "type": "tensor"
499
+ },
500
+ "name": "output"
501
+ }
502
+ },
503
+ "params": {
504
+ "times": {
505
+ "default": 1.0,
506
+ "type": {
507
+ "type": "<class 'int'>"
508
+ },
509
+ "name": "times"
510
+ }
511
+ },
512
+ "position": {
513
+ "x": 387.0,
514
+ "y": 337.0
515
+ },
516
  "type": "basic",
517
+ "name": "Repeat",
518
+ "inputs": {
519
+ "input": {
520
+ "name": "input",
521
+ "position": "top",
522
+ "type": {
523
+ "type": "tensor"
524
+ }
525
+ }
526
+ }
527
  }
528
  },
529
  "position": {
530
+ "x": -258.0088683218416,
531
+ "y": -737.3822225246788
532
  },
533
+ "width": 200.0,
534
+ "height": 200.0
535
  }
536
  ],
537
  "edges": [
 
590
  "target": "Optimizer 1",
591
  "sourceHandle": "loss",
592
  "targetHandle": "loss"
593
+ },
594
+ {
595
+ "id": "Graph conv 1 Repeat 3",
596
+ "source": "Graph conv 1",
597
+ "target": "Repeat 3",
598
+ "sourceHandle": "x",
599
+ "targetHandle": "input"
600
+ },
601
+ {
602
+ "id": "Repeat 3 Graph conv 1",
603
+ "source": "Repeat 3",
604
+ "target": "Graph conv 1",
605
+ "sourceHandle": "output",
606
+ "targetHandle": "x"
607
+ },
608
+ {
609
+ "id": "Dropout 1 Repeat 1",
610
+ "source": "Dropout 1",
611
+ "target": "Repeat 1",
612
+ "sourceHandle": "x",
613
+ "targetHandle": "input"
614
+ },
615
+ {
616
+ "id": "Repeat 1 Linear 1",
617
+ "source": "Repeat 1",
618
+ "target": "Linear 1",
619
+ "sourceHandle": "output",
620
+ "targetHandle": "x"
621
  }
622
  ]
623
  }
lynxkite-app/data/aimo-examples.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "id","problem","answer"
2
+ "229ee8","Let $k, l > 0$ be parameters. The parabola $y = kx^2 - 2kx + l$ intersects the line $y = 4$ at two points $A$ and $B$. These points are distance 6 apart. What is the sum of the squares of the distances from $A$ and $B$ to the origin?",52
3
+ "246d26","Each of the three-digits numbers $111$ to $999$ is coloured blue or yellow in such a way that the sum of any two (not necessarily different) yellow numbers is equal to a blue number. What is the maximum possible number of yellow numbers there can be?",250
4
+ "2fc4ad","Let the `sparkle' operation on positive integer $n$ consist of calculating the sum of the digits of $n$ and taking its factorial, e.g. the sparkle of 13 is $4! = 24$. A robot starts with a positive integer on a blackboard, then after each second for the rest of eternity, replaces the number on the board with its sparkle. For some `special' numbers, if they're the first number, then eventually every number that appears will be less than 6. How many such special numbers are there with at most 36 digits?",702
5
+ "430b63","What is the minimum value of $5x^2+5y^2-8xy$ when $x$ and $y$ range over all real numbers such that $|x-2y| + |y-2x| = 40$?",800
6
+ "5277ed","There exists a unique increasing geometric sequence of five 2-digit positive integers. What is their sum?",211
7
+ "739bc9","For how many positive integers $m$ does the equation $\vert \vert x-1 \vert -2 \vert=\frac{m}{100}$ have $4$ distinct solutions?",199
8
+ "82e2a0","Suppose that we roll four 6-sided fair dice with faces numbered 1 to~6. Let $a/b$ be the probability that the highest roll is a 5, where $a$ and $b$ are relatively prime positive integers. Find $a + b$.",185
9
+ "8ee6f3","The points $\left(x, y\right)$ satisfying $((\vert x + y \vert - 10)^2 + ( \vert x - y \vert - 10)^2)((\vert x \vert - 8)^2 + ( \vert y \vert - 8)^2) = 0$ enclose a convex polygon. What is the area of this convex polygon?",320
10
+ "bedda4","Let $ABCD$ be a unit square. Let $P$ be the point on $AB$ such that $|AP| = 1/{20}$ and let $Q$ be the point on $AD$ such that $|AQ| = 1/{24}$. The lines $DP$ and $BQ$ divide the square into four regions. Find the ratio between the areas of the largest region and the smallest region.",480
11
+ "d7e9c9","A function $f: \mathbb N \to \mathbb N$ satisfies the following two conditions for all positive integers $n$:$f(f(f(n)))=8n-7$ and $f(2n)=2f(n)+1$. Calculate $f(100)$.",199
lynxkite-app/data/example-pizza.md ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ hello
2
+
3
+ ### 1. **Overview**
4
+
5
+ This document outlines the pricing structure and available options for our pizza delivery service. The goal is to provide clear guidance on the pricing tiers, additional offerings, and optional extras to ensure consistency across all locations and platforms (phone, online, in-app). All pricing is based on current market trends, food costs, and competitive analysis.
6
+
7
+ ---
8
+
9
+ ### 2. **Pizza Options**
10
+
11
+ #### 2.1 **Size & Base Pricing**
12
+
13
+ | Size | Diameter | Price (Cheese Pizza) |
14
+ |------------------|------------|----------------------|
15
+ | Small | 10 inches | $8.99 |
16
+ | Medium | 12 inches | $11.99 |
17
+ | Large | 14 inches | $14.99 |
18
+ | Extra Large | 16 inches | $17.99 |
19
+
20
+ **Note**: Cheese pizza pricing includes sauce and cheese. Toppings are additional (see section 2.3).
21
+
22
+ #### 2.2 **Crust Options**
23
+
24
+ | Crust Type | Description | Price Adjustment |
25
+ |------------------|------------------------------------------|------------------|
26
+ | Classic Hand-Tossed | Soft, airy texture | No Change |
27
+ | Thin & Crispy | Light and crunchy | No Change |
28
+ | Stuffed Crust | Filled with mozzarella | +$2.00 (M-XL) |
29
+ | Gluten-Free | 10" only; made with rice flour | +$2.50 (Small Only) |
30
+
31
+ ---
32
+
33
+ ### 3. **Toppings**
34
+
35
+ #### 3.1 **Standard Toppings**
36
+ **Price per topping:**
37
+
38
+ - Small: $1.00
39
+ - Medium: $1.50
40
+ - Large: $2.00
41
+ - Extra Large: $2.50
42
+
43
+ | Topping | Category |
44
+ |------------------|----------------|
45
+ | Pepperoni | Meat |
46
+ | Sausage | Meat |
47
+ | Mushrooms | Vegetable |
48
+ | Onions | Vegetable |
49
+ | Bell Peppers | Vegetable |
50
+ | Olives | Vegetable |
51
+ | Extra Cheese | Dairy |
52
+
53
+ #### 3.2 **Premium Toppings**
54
+ **Price per topping:**
55
+
56
+ - Small: $1.75
57
+ - Medium: $2.25
58
+ - Large: $2.75
59
+ - Extra Large: $3.25
60
+
61
+ | Topping | Category |
62
+ |------------------|----------------|
63
+ | Grilled Chicken | Meat |
64
+ | Bacon | Meat |
65
+ | Sun-Dried Tomatoes| Vegetable |
66
+ | Artichoke Hearts | Vegetable |
67
+ | Feta Cheese | Dairy |
68
+ | Vegan Cheese | Dairy Alternative |
69
+
70
+ ---
71
+
72
+ ### 4. **Specialty Pizzas**
73
+
74
+ Specialty pizzas include a combination of premium toppings and are available in all sizes. Prices below are for Medium size, with additional costs for upgrading to larger sizes.
75
+
76
+ | Pizza Name | Description | Price (Medium) |
77
+ |----------------------|----------------------------------------------------|-----------------|
78
+ | Meat Lover’s | Pepperoni, sausage, bacon, ham | $16.99 |
79
+ | Veggie Delight | Mushrooms, bell peppers, onions, olives | $14.99 |
80
+ | BBQ Chicken | BBQ sauce, grilled chicken, red onions, cilantro | $17.99 |
81
+ | Margherita | Fresh mozzarella, tomatoes, basil | $15.99 |
82
+ | Hawaiian | Ham, pineapple | $14.99 |
83
+
84
+ ---
85
+
86
+ ### 5. **Additional Menu Items**
87
+
88
+ #### 5.1 **Side Orders**
89
+
90
+ | Item | Description | Price |
91
+ |--------------------|--------------------------------------|---------------|
92
+ | Garlic Breadsticks | Served with marinara dipping sauce | $5.99 |
93
+ | Chicken Wings | Buffalo, BBQ, or plain (10 pieces) | $9.99 |
94
+ | Mozzarella Sticks | Served with marinara (8 pieces) | $6.99 |
95
+ | Caesar Salad | Romaine, croutons, Caesar dressing | $7.99 |
96
+
97
+ #### 5.2 **Desserts**
98
+
99
+ | Item | Description | Price |
100
+ |--------------------|--------------------------------------|---------------|
101
+ | Chocolate Brownies | Chewy and rich (6 pieces) | $4.99 |
102
+ | Cinnamon Sticks | Dusted with cinnamon sugar | $5.99 |
103
+
104
+ ---
105
+
106
+ ### 6. **Drinks**
107
+
108
+ | Size | Price |
109
+ |--------------------|---------------|
110
+ | 20 oz Bottle | $1.99 |
111
+ | 2-Liter Bottle | $3.50 |
112
+
113
+ Available options: Coke, Diet Coke, Sprite, Root Beer, Lemonade.
114
+
115
+ ---
116
+
117
+ ### 7. **Delivery Fees & Minimum Order**
118
+
119
+ - **Delivery Fee**: $2.99
120
+ - **Minimum Order**: $12.00
121
+
122
+ *Note: Delivery fees and minimum order thresholds apply to all delivery orders within a 5-mile radius. Additional charges may apply for orders outside this zone.*
123
+
124
+ ---
125
+
126
+ ### 8. **Promotions & Discounts**
127
+
128
+ - **Monday Madness**: Buy one large pizza, get a second pizza for 50% off.
129
+ - **Student Discount**: 10% off with valid student ID (pickup only).
130
+ - **Family Deal**: 2 large pizzas, 1 side, and 2-liter soda for $29.99.
131
+
132
+ ---
133
+
134
+ ### 9. **Conclusion**
135
+
136
+ This pricing and menu structure is designed to offer a wide range of choices for our customers while maintaining competitive pricing and ensuring profitability. Please ensure all team members are familiar with the details in this document and implement it accordingly.
lynxkite-app/data/night demo ADDED
The diff for this file is too large to render. See raw diff
 
lynxkite-app/web/src/workspace/nodes/NodeParameter.tsx CHANGED
@@ -24,7 +24,8 @@ export default function NodeParameter({ name, value, meta, onChange }: NodeParam
24
  <textarea className="textarea textarea-bordered w-full max-w-xs"
25
  rows={6}
26
  value={value}
27
- onChange={(evt) => onChange(evt.currentTarget.value)}
 
28
  />
29
  </> : meta?.type?.enum ? <>
30
  <ParamName name={name} />
 
24
  <textarea className="textarea textarea-bordered w-full max-w-xs"
25
  rows={6}
26
  value={value}
27
+ onChange={(evt) => onChange(evt.currentTarget.value, { delay: 2 })}
28
+ onBlur={(evt) => onChange(evt.currentTarget.value, { delay: 0 })}
29
  />
30
  </> : meta?.type?.enum ? <>
31
  <ParamName name={name} />
lynxkite-graph-analytics/pyproject.toml CHANGED
@@ -6,9 +6,11 @@ readme = "README.md"
6
  requires-python = ">=3.11"
7
  dependencies = [
8
  "grand-cypher>=0.12.0",
 
9
  "lynxkite-core",
10
  "matplotlib>=3.10.0",
11
  "networkx>=3.4.2",
 
12
  "pandas>=2.2.3",
13
  "polars[gpu]>=1.14.0",
14
  ]
 
6
  requires-python = ">=3.11"
7
  dependencies = [
8
  "grand-cypher>=0.12.0",
9
+ "joblib>=1.4.2",
10
  "lynxkite-core",
11
  "matplotlib>=3.10.0",
12
  "networkx>=3.4.2",
13
+ "osmnx>=2.0.1",
14
  "pandas>=2.2.3",
15
  "polars[gpu]>=1.14.0",
16
  ]
lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/lynxkite_ops.py CHANGED
@@ -6,13 +6,16 @@ from collections import deque
6
  import dataclasses
7
  import functools
8
  import grandcypher
 
9
  import matplotlib
10
  import networkx as nx
11
  import pandas as pd
12
  import polars as pl
13
  import traceback
14
  import typing
 
15
 
 
16
  ENV = "LynxKite Graph Analytics"
17
  op = ops.op_registration(ENV)
18
 
@@ -52,6 +55,8 @@ class Bundle:
52
  d = dict(graph.nodes(data=True))
53
  nodes = pd.DataFrame(d.values(), index=d.keys())
54
  nodes["id"] = nodes.index
 
 
55
  return cls(
56
  dfs={"edges": edges, "nodes": nodes},
57
  relations=[
@@ -187,6 +192,32 @@ def import_csv(
187
  )
188
 
189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  @op("Create scale-free graph")
191
  def create_scale_free_graph(*, nodes: int = 10):
192
  """Creates a scale-free graph with the given number of nodes."""
@@ -213,6 +244,11 @@ def discard_loop_edges(graph: nx.Graph):
213
  return graph
214
 
215
 
 
 
 
 
 
216
  @op("SQL")
217
  def sql(bundle: Bundle, *, query: ops.LongStr, save_as: str = "result"):
218
  """Run a SQL query on the DataFrames in the bundle. Save the results as a new DataFrame."""
@@ -286,7 +322,9 @@ def _map_color(value):
286
  colors = cmap.colors[: len(categories)]
287
  return [
288
  "#{:02x}{:02x}{:02x}".format(int(r * 255), int(g * 255), int(b * 255))
289
- for r, g, b in [colors[categories.get_loc(v)] for v in value]
 
 
290
  ]
291
 
292
 
@@ -295,10 +333,35 @@ def visualize_graph(graph: Bundle, *, color_nodes_by: ops.NodeAttribute = None):
295
  nodes = graph.dfs["nodes"].copy()
296
  if color_nodes_by:
297
  nodes["color"] = _map_color(nodes[color_nodes_by])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  nodes = nodes.to_records()
299
  edges = graph.dfs["edges"].drop_duplicates(["source", "target"])
300
  edges = edges.to_records()
301
- pos = nx.spring_layout(graph.to_nx(), iterations=max(1, int(10000 / len(nodes))))
302
  v = {
303
  "animationDuration": 500,
304
  "animationEasingUpdate": "quinticInOut",
@@ -308,7 +371,7 @@ def visualize_graph(graph: Bundle, *, color_nodes_by: ops.NodeAttribute = None):
308
  "roam": True,
309
  "lineStyle": {
310
  "color": "gray",
311
- "curveness": 0.3,
312
  },
313
  "emphasis": {
314
  "focus": "adjacency",
 
6
  import dataclasses
7
  import functools
8
  import grandcypher
9
+ import joblib
10
  import matplotlib
11
  import networkx as nx
12
  import pandas as pd
13
  import polars as pl
14
  import traceback
15
  import typing
16
+ import zipfile
17
 
18
+ mem = joblib.Memory("../joblib-cache")
19
  ENV = "LynxKite Graph Analytics"
20
  op = ops.op_registration(ENV)
21
 
 
55
  d = dict(graph.nodes(data=True))
56
  nodes = pd.DataFrame(d.values(), index=d.keys())
57
  nodes["id"] = nodes.index
58
+ if "index" in nodes.columns:
59
+ nodes.drop(columns=["index"], inplace=True)
60
  return cls(
61
  dfs={"edges": edges, "nodes": nodes},
62
  relations=[
 
192
  )
193
 
194
 
195
+ @op("Import GraphML")
196
+ @mem.cache
197
+ def import_graphml(*, filename: str):
198
+ """Imports a GraphML file."""
199
+ if filename.endswith(".zip"):
200
+ with zipfile.ZipFile(filename, "r") as z:
201
+ for fn in z.namelist():
202
+ if fn.endswith(".graphml"):
203
+ with z.open(fn) as f:
204
+ G = nx.read_graphml(f)
205
+ break
206
+ else:
207
+ raise ValueError("No GraphML file found in the ZIP archive.")
208
+ else:
209
+ G = nx.read_graphml(filename)
210
+ return G
211
+
212
+
213
+ @op("Graph from OSM")
214
+ @mem.cache
215
+ def import_osm(*, location: str):
216
+ import osmnx as ox
217
+
218
+ return ox.graph.graph_from_place(location, network_type="drive")
219
+
220
+
221
  @op("Create scale-free graph")
222
  def create_scale_free_graph(*, nodes: int = 10):
223
  """Creates a scale-free graph with the given number of nodes."""
 
244
  return graph
245
 
246
 
247
+ @op("Discard parallel edges")
248
+ def discard_parallel_edges(graph: nx.Graph):
249
+ return nx.DiGraph(graph)
250
+
251
+
252
  @op("SQL")
253
  def sql(bundle: Bundle, *, query: ops.LongStr, save_as: str = "result"):
254
  """Run a SQL query on the DataFrames in the bundle. Save the results as a new DataFrame."""
 
322
  colors = cmap.colors[: len(categories)]
323
  return [
324
  "#{:02x}{:02x}{:02x}".format(int(r * 255), int(g * 255), int(b * 255))
325
+ for r, g, b in [
326
+ colors[min(len(colors) - 1, categories.get_loc(v))] for v in value
327
+ ]
328
  ]
329
 
330
 
 
333
  nodes = graph.dfs["nodes"].copy()
334
  if color_nodes_by:
335
  nodes["color"] = _map_color(nodes[color_nodes_by])
336
+ for cols in ["x y", "long lat"]:
337
+ x, y = cols.split()
338
+ if (
339
+ x in nodes.columns
340
+ and nodes[x].dtype == "float64"
341
+ and y in nodes.columns
342
+ and nodes[y].dtype == "float64"
343
+ ):
344
+ cx, cy = nodes[x].mean(), nodes[y].mean()
345
+ dx, dy = nodes[x].std(), nodes[y].std()
346
+ # Scale up to avoid float precision issues and because eCharts omits short edges.
347
+ scale_x = 100 / max(dx, dy)
348
+ scale_y = scale_x
349
+ if y == "lat":
350
+ scale_y *= -1
351
+ pos = {
352
+ node_id: ((row[x] - cx) * scale_x, (row[y] - cy) * scale_y)
353
+ for node_id, row in nodes.iterrows()
354
+ }
355
+ curveness = 0 # Street maps are better with straight streets.
356
+ break
357
+ else:
358
+ pos = nx.spring_layout(
359
+ graph.to_nx(), iterations=max(1, int(10000 / len(nodes)))
360
+ )
361
+ curveness = 0.3
362
  nodes = nodes.to_records()
363
  edges = graph.dfs["edges"].drop_duplicates(["source", "target"])
364
  edges = edges.to_records()
 
365
  v = {
366
  "animationDuration": 500,
367
  "animationEasingUpdate": "quinticInOut",
 
371
  "roam": True,
372
  "lineStyle": {
373
  "color": "gray",
374
+ "curveness": curveness,
375
  },
376
  "emphasis": {
377
  "focus": "adjacency",
lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/pytorch_model_ops.py CHANGED
@@ -65,3 +65,11 @@ reg(
65
  P.basic("lr", 0.001),
66
  ],
67
  )
 
 
 
 
 
 
 
 
 
65
  P.basic("lr", 0.001),
66
  ],
67
  )
68
+
69
+ ops.register_passive_op(
70
+ ENV,
71
+ "Repeat",
72
+ inputs=[ops.Input(name="input", position="top", type="tensor")],
73
+ outputs=[ops.Output(name="output", position="bottom", type="tensor")],
74
+ params=[ops.Parameter.basic("times", 1, int)],
75
+ )
lynxkite-graph-analytics/uv.lock CHANGED
@@ -10,26 +10,60 @@ resolution-markers = [
10
  ]
11
 
12
  [[package]]
13
- name = "anyio"
14
- version = "4.8.0"
15
  source = { registry = "https://pypi.org/simple" }
16
- dependencies = [
17
- { name = "idna" },
18
- { name = "sniffio" },
19
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
20
- ]
21
- sdist = { url = "https://files.pythonhosted.org/packages/a3/73/199a98fc2dae33535d6b8e8e6ec01f8c1d76c9adb096c6b7d64823038cde/anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", size = 181126 }
22
  wheels = [
23
- { url = "https://files.pythonhosted.org/packages/46/eb/e7f063ad1fec6b3178a3cd82d1a3c4de82cccf283fc42746168188e1cdd5/anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a", size = 96041 },
24
  ]
25
 
26
  [[package]]
27
- name = "certifi"
28
- version = "2025.1.31"
29
  source = { registry = "https://pypi.org/simple" }
30
- sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
31
  wheels = [
32
- { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  ]
34
 
35
  [[package]]
@@ -99,13 +133,13 @@ wheels = [
99
  [[package]]
100
  name = "cudf-polars-cu12"
101
  version = "24.12.0"
102
- source = { registry = "https://pypi.nvidia.com/" }
103
  dependencies = [
104
  { name = "polars" },
105
  { name = "pylibcudf-cu12" },
106
  ]
107
  wheels = [
108
- { url = "https://pypi.nvidia.com/cudf-polars-cu12/cudf_polars_cu12-24.12.0-py3-none-any.whl", hash = "sha256:3d2058f75251fd4921618bb1d4cfba0c99b670a12756df0d3f51559aca2298fa" },
109
  ]
110
 
111
  [[package]]
@@ -195,6 +229,23 @@ wheels = [
195
  { url = "https://files.pythonhosted.org/packages/99/3b/406d17b1f63e04a82aa621936e6e1c53a8c05458abd66300ac85ea7f9ae9/fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977", size = 1111638 },
196
  ]
197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  [[package]]
199
  name = "grand-cypher"
200
  version = "0.12.0"
@@ -216,49 +267,21 @@ dependencies = [
216
  sdist = { url = "https://files.pythonhosted.org/packages/65/c6/27400e2d81bd769ebe65c695cead44c8efb55ac3769826a01c9223d65709/grandiso-2.2.0.tar.gz", hash = "sha256:66f292d27328e13122065c7905ad0ac79c4649f69a35e7b98a3631654a0bf77c", size = 16277 }
217
 
218
  [[package]]
219
- name = "h11"
220
- version = "0.14.0"
221
- source = { registry = "https://pypi.org/simple" }
222
- sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 }
223
- wheels = [
224
- { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
225
- ]
226
-
227
- [[package]]
228
- name = "httpcore"
229
- version = "1.0.7"
230
- source = { registry = "https://pypi.org/simple" }
231
- dependencies = [
232
- { name = "certifi" },
233
- { name = "h11" },
234
- ]
235
- sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 }
236
- wheels = [
237
- { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 },
238
- ]
239
-
240
- [[package]]
241
- name = "httpx"
242
- version = "0.28.1"
243
  source = { registry = "https://pypi.org/simple" }
244
- dependencies = [
245
- { name = "anyio" },
246
- { name = "certifi" },
247
- { name = "httpcore" },
248
- { name = "idna" },
249
- ]
250
- sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
251
  wheels = [
252
- { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
253
  ]
254
 
255
  [[package]]
256
- name = "idna"
257
- version = "3.10"
258
  source = { registry = "https://pypi.org/simple" }
259
- sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
260
  wheels = [
261
- { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
262
  ]
263
 
264
  [[package]]
@@ -339,23 +362,23 @@ wheels = [
339
  [[package]]
340
  name = "libcudf-cu12"
341
  version = "24.12.0"
342
- source = { registry = "https://pypi.nvidia.com/" }
343
  dependencies = [
344
  { name = "libkvikio-cu12" },
345
  { name = "nvidia-nvcomp-cu12" },
346
  ]
347
  wheels = [
348
- { url = "https://pypi.nvidia.com/libcudf-cu12/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:1e78a247f31c6045221f3142a5fd15210d53c91043c5a4e260b67b5ddff43164" },
349
- { url = "https://pypi.nvidia.com/libcudf-cu12/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:47b7537a314b4462c24938f4e9118ea65bfe2de7440e99ecf278a38a14abf9ab" },
350
  ]
351
 
352
  [[package]]
353
  name = "libkvikio-cu12"
354
  version = "24.12.1"
355
- source = { registry = "https://pypi.nvidia.com/" }
356
  wheels = [
357
- { url = "https://pypi.nvidia.com/libkvikio-cu12/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:7ed5d27263204a237ea7a14ce176ed885888c8daf47341ae0fbcecd55fb2c694" },
358
- { url = "https://pypi.nvidia.com/libkvikio-cu12/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:c4f333dbbffc35ba94a028db3b24ddb1c3dfddff9c6fb0f17488dc662a86f481" },
359
  ]
360
 
361
  [[package]]
@@ -387,27 +410,29 @@ version = "0.1.0"
387
  source = { virtual = "." }
388
  dependencies = [
389
  { name = "grand-cypher" },
 
390
  { name = "lynxkite-core" },
391
  { name = "matplotlib" },
392
  { name = "networkx" },
393
- { name = "nx-cugraph-cu12" },
394
  { name = "pandas" },
395
  { name = "polars", extra = ["gpu"] },
396
  ]
397
 
398
  [package.optional-dependencies]
399
  gpu = [
400
- { name = "httpx" },
401
  ]
402
 
403
  [package.metadata]
404
  requires-dist = [
405
  { name = "grand-cypher", specifier = ">=0.12.0" },
406
- { name = "httpx", marker = "extra == 'gpu'" },
407
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
408
  { name = "matplotlib", specifier = ">=3.10.0" },
409
  { name = "networkx", specifier = ">=3.4.2" },
410
- { name = "nx-cugraph-cu12", specifier = ">=24.12.0" },
 
411
  { name = "pandas", specifier = ">=2.2.3" },
412
  { name = "polars", extras = ["gpu"], specifier = ">=1.14.0" },
413
  ]
@@ -517,69 +542,69 @@ wheels = [
517
  [[package]]
518
  name = "nvidia-cublas-cu12"
519
  version = "12.8.3.14"
520
- source = { registry = "https://pypi.nvidia.com/" }
521
  wheels = [
522
- { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:93a4e0e386cc7f6e56c822531396de8170ed17068a1e18f987574895044cd8c3" },
523
- { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44" },
524
- { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.8.3.14-py3-none-win_amd64.whl", hash = "sha256:9ae5eae500aead01fc4bdfc458209df638b1a3551557ce11a78eea9ece602ae9" },
525
  ]
526
 
527
  [[package]]
528
  name = "nvidia-curand-cu12"
529
  version = "10.3.9.55"
530
- source = { registry = "https://pypi.nvidia.com/" }
531
  wheels = [
532
- { url = "https://pypi.nvidia.com/nvidia-curand-cu12/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b6bb90c044fa9b07cedae2ef29077c4cf851fb6fdd6d862102321f359dca81e9" },
533
- { url = "https://pypi.nvidia.com/nvidia-curand-cu12/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86" },
534
- { url = "https://pypi.nvidia.com/nvidia-curand-cu12/nvidia_curand_cu12-10.3.9.55-py3-none-win_amd64.whl", hash = "sha256:570d82475fe7f3d8ed01ffbe3b71796301e0e24c98762ca018ff8ce4f5418e1f" },
535
  ]
536
 
537
  [[package]]
538
  name = "nvidia-cusolver-cu12"
539
  version = "11.7.2.55"
540
- source = { registry = "https://pypi.nvidia.com/" }
541
  dependencies = [
542
  { name = "nvidia-cublas-cu12" },
543
  { name = "nvidia-cusparse-cu12" },
544
  { name = "nvidia-nvjitlink-cu12" },
545
  ]
546
  wheels = [
547
- { url = "https://pypi.nvidia.com/nvidia-cusolver-cu12/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:0fd9e98246f43c15bee5561147ad235dfdf2d037f5d07c9d41af3f7f72feb7cc" },
548
- { url = "https://pypi.nvidia.com/nvidia-cusolver-cu12/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b" },
549
- { url = "https://pypi.nvidia.com/nvidia-cusolver-cu12/nvidia_cusolver_cu12-11.7.2.55-py3-none-win_amd64.whl", hash = "sha256:a5a516c55da5c5aba98420d9bc9bcab18245f21ec87338cc1f930eb18dd411ac" },
550
  ]
551
 
552
  [[package]]
553
  name = "nvidia-cusparse-cu12"
554
  version = "12.5.7.53"
555
- source = { registry = "https://pypi.nvidia.com/" }
556
  dependencies = [
557
  { name = "nvidia-nvjitlink-cu12" },
558
  ]
559
  wheels = [
560
- { url = "https://pypi.nvidia.com/nvidia-cusparse-cu12/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d869c6146ca80f4305b62e02d924b4aaced936f8173e3cef536a67eed2a91af1" },
561
- { url = "https://pypi.nvidia.com/nvidia-cusparse-cu12/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d" },
562
- { url = "https://pypi.nvidia.com/nvidia-cusparse-cu12/nvidia_cusparse_cu12-12.5.7.53-py3-none-win_amd64.whl", hash = "sha256:82c201d6781bacf6bb7c654f0446728d0fe596dfdd82ef4a04c204ce3e107441" },
563
  ]
564
 
565
  [[package]]
566
  name = "nvidia-nvcomp-cu12"
567
  version = "4.1.0.6"
568
- source = { registry = "https://pypi.nvidia.com/" }
569
  wheels = [
570
- { url = "https://pypi.nvidia.com/nvidia-nvcomp-cu12/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:3bff6267fa6aae59a98155262e5e9da6142e798dac5afd01f7389b23bce89803" },
571
- { url = "https://pypi.nvidia.com/nvidia-nvcomp-cu12/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:aaff831f0fdbf20631df32e411ede37ddf5fd7297f78e77346441cd0d72cb787" },
572
- { url = "https://pypi.nvidia.com/nvidia-nvcomp-cu12/nvidia_nvcomp_cu12-4.1.0.6-py3-none-win_amd64.whl", hash = "sha256:df24bedfe9df8be67ae7c59f5d21223f082c5ce689679909ee4985c563a0a89f" },
573
  ]
574
 
575
  [[package]]
576
  name = "nvidia-nvjitlink-cu12"
577
  version = "12.8.61"
578
- source = { registry = "https://pypi.nvidia.com/" }
579
  wheels = [
580
- { url = "https://pypi.nvidia.com/nvidia-nvjitlink-cu12/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17" },
581
- { url = "https://pypi.nvidia.com/nvidia-nvjitlink-cu12/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b80ecab31085dda3ce3b41d043be0ec739216c3fc633b8abe212d5a30026df0" },
582
- { url = "https://pypi.nvidia.com/nvidia-nvjitlink-cu12/nvidia_nvjitlink_cu12-12.8.61-py3-none-win_amd64.whl", hash = "sha256:1166a964d25fdc0eae497574d38824305195a5283324a21ccb0ce0c802cbf41c" },
583
  ]
584
 
585
  [[package]]
@@ -597,15 +622,30 @@ wheels = [
597
  [[package]]
598
  name = "nx-cugraph-cu12"
599
  version = "24.12.0"
600
- source = { registry = "https://pypi.nvidia.com/" }
601
  dependencies = [
602
  { name = "cupy-cuda12x" },
603
  { name = "networkx" },
604
  { name = "numpy" },
605
  { name = "pylibcugraph-cu12" },
606
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
607
  wheels = [
608
- { url = "https://pypi.nvidia.com/nx-cugraph-cu12/nx_cugraph_cu12-24.12.0-py3-none-any.whl", hash = "sha256:a6bd906e498aefb7cfb0f7ec36d1fd776a72baee275da1452888ea82970956b6" },
609
  ]
610
 
611
  [[package]]
@@ -763,7 +803,7 @@ wheels = [
763
  [[package]]
764
  name = "pylibcudf-cu12"
765
  version = "24.12.0"
766
- source = { registry = "https://pypi.nvidia.com/" }
767
  dependencies = [
768
  { name = "cuda-python" },
769
  { name = "libcudf-cu12" },
@@ -774,16 +814,16 @@ dependencies = [
774
  { name = "typing-extensions" },
775
  ]
776
  wheels = [
777
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c61587a6d9e9f392745b9b238f3eebcfacbbf21e3c7d9fedf7a1a672284fcce" },
778
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6459baed065bc76fbc7ef34e14912982971c1a9d4bffb2699909d78a95b0b8a3" },
779
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd130e347c28716912b89a1f7ff653ca6e202bfbc79f5abbedd7918bb9124f34" },
780
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e2bb951f1a2fddf1976b84aa4e6d1280689da22014d6d1d5f48364cc1b32e2d" },
781
  ]
782
 
783
  [[package]]
784
  name = "pylibcugraph-cu12"
785
  version = "24.12.0"
786
- source = { registry = "https://pypi.nvidia.com/" }
787
  dependencies = [
788
  { name = "nvidia-cublas-cu12" },
789
  { name = "nvidia-curand-cu12" },
@@ -792,17 +832,12 @@ dependencies = [
792
  { name = "pylibraft-cu12" },
793
  { name = "rmm-cu12" },
794
  ]
795
- wheels = [
796
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:314d0c35cf2fadee224577e23c141fae4c59532c7a4a9a9ccfbcfac0bfdd75a7" },
797
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bcc370b63c3b7da535c4c33658bbd8dde8ccef1dc63a5d6454afb462b8316de4" },
798
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fa100594d5d7f1d4d1405e1628d879bf3a39431169a6bd65619cb73f8ffe99fc" },
799
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3ffdf0788aec9791b2483de45db0eeb2a1bafc0ae9ca8d34c8a5998a36b3120e" },
800
- ]
801
 
802
  [[package]]
803
  name = "pylibraft-cu12"
804
  version = "24.12.0"
805
- source = { registry = "https://pypi.nvidia.com/" }
806
  dependencies = [
807
  { name = "cuda-python" },
808
  { name = "numpy" },
@@ -812,11 +847,37 @@ dependencies = [
812
  { name = "nvidia-cusparse-cu12" },
813
  { name = "rmm-cu12" },
814
  ]
 
 
 
 
 
 
 
 
 
 
 
 
815
  wheels = [
816
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f3102f3b7886ad9583672fa2d47c3a941215e34d0ee3a8d3a32cebc2dfcc8606" },
817
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47d3915fd3cdf4022acbd0315f88b12155399ef0b0e77fcac050c459ab6b31b0" },
818
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:af4c259b275ce36f998b5adb16fd55582f90a20c5223029e02c9a59dc7ce5331" },
819
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:291b804ba21c34bbab17da34d6cc6ee86b9750f2714dfbd339c5906fefb7201e" },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
820
  ]
821
 
822
  [[package]]
@@ -828,6 +889,35 @@ wheels = [
828
  { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 },
829
  ]
830
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
831
  [[package]]
832
  name = "python-dateutil"
833
  version = "2.9.0.post0"
@@ -849,38 +939,73 @@ wheels = [
849
  { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 },
850
  ]
851
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
852
  [[package]]
853
  name = "rmm-cu12"
854
  version = "24.12.1"
855
- source = { registry = "https://pypi.nvidia.com/" }
856
  dependencies = [
857
  { name = "cuda-python" },
858
  { name = "numba" },
859
  { name = "numpy" },
860
  ]
861
  wheels = [
862
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d509d735201d1b0bc05b3e148e23a6216eabcfec67006a4e9311b6c25766023f" },
863
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1d6b166aaf9b81495ff33f2fe5a29ad12dc1ed6089daf9f387160e7734fc901" },
864
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317a6641fb37f3efa6e8eb76eeb568970a8c439e0090529520861fd139ef6f0c" },
865
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9460a386e34f1921c8d06204f320d705511de899ababb45302d314da036da5a" },
866
  ]
867
 
868
  [[package]]
869
- name = "six"
870
- version = "1.17.0"
871
  source = { registry = "https://pypi.org/simple" }
872
- sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
 
 
 
873
  wheels = [
874
- { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
875
  ]
876
 
877
  [[package]]
878
- name = "sniffio"
879
- version = "1.3.1"
880
  source = { registry = "https://pypi.org/simple" }
881
- sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
882
  wheels = [
883
- { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
884
  ]
885
 
886
  [[package]]
@@ -900,3 +1025,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a
900
  wheels = [
901
  { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 },
902
  ]
 
 
 
 
 
 
 
 
 
 
10
  ]
11
 
12
  [[package]]
13
+ name = "certifi"
14
+ version = "2025.1.31"
15
  source = { registry = "https://pypi.org/simple" }
16
+ sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
 
 
 
 
 
17
  wheels = [
18
+ { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
19
  ]
20
 
21
  [[package]]
22
+ name = "charset-normalizer"
23
+ version = "3.4.1"
24
  source = { registry = "https://pypi.org/simple" }
25
+ sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 }
26
  wheels = [
27
+ { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 },
28
+ { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 },
29
+ { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 },
30
+ { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 },
31
+ { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 },
32
+ { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 },
33
+ { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 },
34
+ { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 },
35
+ { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 },
36
+ { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 },
37
+ { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 },
38
+ { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 },
39
+ { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 },
40
+ { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 },
41
+ { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 },
42
+ { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 },
43
+ { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 },
44
+ { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 },
45
+ { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 },
46
+ { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 },
47
+ { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 },
48
+ { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 },
49
+ { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 },
50
+ { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 },
51
+ { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 },
52
+ { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 },
53
+ { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 },
54
+ { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 },
55
+ { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 },
56
+ { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 },
57
+ { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 },
58
+ { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 },
59
+ { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 },
60
+ { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 },
61
+ { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 },
62
+ { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 },
63
+ { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 },
64
+ { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 },
65
+ { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 },
66
+ { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 },
67
  ]
68
 
69
  [[package]]
 
133
  [[package]]
134
  name = "cudf-polars-cu12"
135
  version = "24.12.0"
136
+ source = { registry = "https://pypi.org/simple" }
137
  dependencies = [
138
  { name = "polars" },
139
  { name = "pylibcudf-cu12" },
140
  ]
141
  wheels = [
142
+ { url = "https://files.pythonhosted.org/packages/0f/6e/3d0b2d19ac853347f435f49815d471d461315d8f6e74f165624f16ddc7db/cudf_polars_cu12-24.12.0-py3-none-any.whl", hash = "sha256:3d2058f75251fd4921618bb1d4cfba0c99b670a12756df0d3f51559aca2298fa", size = 79456 },
143
  ]
144
 
145
  [[package]]
 
229
  { url = "https://files.pythonhosted.org/packages/99/3b/406d17b1f63e04a82aa621936e6e1c53a8c05458abd66300ac85ea7f9ae9/fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977", size = 1111638 },
230
  ]
231
 
232
+ [[package]]
233
+ name = "geopandas"
234
+ version = "1.0.1"
235
+ source = { registry = "https://pypi.org/simple" }
236
+ dependencies = [
237
+ { name = "numpy" },
238
+ { name = "packaging" },
239
+ { name = "pandas" },
240
+ { name = "pyogrio" },
241
+ { name = "pyproj" },
242
+ { name = "shapely" },
243
+ ]
244
+ sdist = { url = "https://files.pythonhosted.org/packages/39/08/2cf5d85356e45b10b8d066cf4c3ba1e9e3185423c48104eed87e8afd0455/geopandas-1.0.1.tar.gz", hash = "sha256:b8bf70a5534588205b7a56646e2082fb1de9a03599651b3d80c99ea4c2ca08ab", size = 317736 }
245
+ wheels = [
246
+ { url = "https://files.pythonhosted.org/packages/c4/64/7d344cfcef5efddf9cf32f59af7f855828e9d74b5f862eddf5bfd9f25323/geopandas-1.0.1-py3-none-any.whl", hash = "sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6", size = 323587 },
247
+ ]
248
+
249
  [[package]]
250
  name = "grand-cypher"
251
  version = "0.12.0"
 
267
  sdist = { url = "https://files.pythonhosted.org/packages/65/c6/27400e2d81bd769ebe65c695cead44c8efb55ac3769826a01c9223d65709/grandiso-2.2.0.tar.gz", hash = "sha256:66f292d27328e13122065c7905ad0ac79c4649f69a35e7b98a3631654a0bf77c", size = 16277 }
268
 
269
  [[package]]
270
+ name = "idna"
271
+ version = "3.10"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  source = { registry = "https://pypi.org/simple" }
273
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
 
 
 
 
 
 
274
  wheels = [
275
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
276
  ]
277
 
278
  [[package]]
279
+ name = "joblib"
280
+ version = "1.4.2"
281
  source = { registry = "https://pypi.org/simple" }
282
+ sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 }
283
  wheels = [
284
+ { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 },
285
  ]
286
 
287
  [[package]]
 
362
  [[package]]
363
  name = "libcudf-cu12"
364
  version = "24.12.0"
365
+ source = { registry = "https://pypi.org/simple" }
366
  dependencies = [
367
  { name = "libkvikio-cu12" },
368
  { name = "nvidia-nvcomp-cu12" },
369
  ]
370
  wheels = [
371
+ { url = "https://files.pythonhosted.org/packages/fa/ea/efccbbeb4012cdd247e3d12ed19c4cd70a770e6c22c1456d8cb569818083/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:1e78a247f31c6045221f3142a5fd15210d53c91043c5a4e260b67b5ddff43164", size = 454436993 },
372
+ { url = "https://files.pythonhosted.org/packages/88/93/dc3a27c3904aa12a32def0df330f15a85d0f01e0420b18bc0efa8b3245ba/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:47b7537a314b4462c24938f4e9118ea65bfe2de7440e99ecf278a38a14abf9ab", size = 457847164 },
373
  ]
374
 
375
  [[package]]
376
  name = "libkvikio-cu12"
377
  version = "24.12.1"
378
+ source = { registry = "https://pypi.org/simple" }
379
  wheels = [
380
+ { url = "https://files.pythonhosted.org/packages/24/17/8dbef99dc5a73dbf56dea090ba1c345cc4343bf8d13f331a8091d0e1c362/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:7ed5d27263204a237ea7a14ce176ed885888c8daf47341ae0fbcecd55fb2c694", size = 1875299 },
381
+ { url = "https://files.pythonhosted.org/packages/0a/31/3be8facaf2f15849629a030e8fb1696ec80228270860b9ffd869a17a6a71/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:c4f333dbbffc35ba94a028db3b24ddb1c3dfddff9c6fb0f17488dc662a86f481", size = 1989095 },
382
  ]
383
 
384
  [[package]]
 
410
  source = { virtual = "." }
411
  dependencies = [
412
  { name = "grand-cypher" },
413
+ { name = "joblib" },
414
  { name = "lynxkite-core" },
415
  { name = "matplotlib" },
416
  { name = "networkx" },
417
+ { name = "osmnx" },
418
  { name = "pandas" },
419
  { name = "polars", extra = ["gpu"] },
420
  ]
421
 
422
  [package.optional-dependencies]
423
  gpu = [
424
+ { name = "nx-cugraph-cu12" },
425
  ]
426
 
427
  [package.metadata]
428
  requires-dist = [
429
  { name = "grand-cypher", specifier = ">=0.12.0" },
430
+ { name = "joblib", specifier = ">=1.4.2" },
431
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
432
  { name = "matplotlib", specifier = ">=3.10.0" },
433
  { name = "networkx", specifier = ">=3.4.2" },
434
+ { name = "nx-cugraph-cu12", marker = "extra == 'gpu'", specifier = ">=24.12.0" },
435
+ { name = "osmnx", specifier = ">=2.0.1" },
436
  { name = "pandas", specifier = ">=2.2.3" },
437
  { name = "polars", extras = ["gpu"], specifier = ">=1.14.0" },
438
  ]
 
542
  [[package]]
543
  name = "nvidia-cublas-cu12"
544
  version = "12.8.3.14"
545
+ source = { registry = "https://pypi.org/simple" }
546
  wheels = [
547
+ { url = "https://files.pythonhosted.org/packages/ed/63/684a6f72f52671ea222c12ecde9bdf748a0ba025e2ad3ec374e466c26eb6/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:93a4e0e386cc7f6e56c822531396de8170ed17068a1e18f987574895044cd8c3", size = 604900717 },
548
+ { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630 },
549
+ { url = "https://files.pythonhosted.org/packages/6c/54/fbfa3315b936d3358517f7da5f9f2557c279bf210e5261f0cf66cc0f9832/nvidia_cublas_cu12-12.8.3.14-py3-none-win_amd64.whl", hash = "sha256:9ae5eae500aead01fc4bdfc458209df638b1a3551557ce11a78eea9ece602ae9", size = 578387959 },
550
  ]
551
 
552
  [[package]]
553
  name = "nvidia-curand-cu12"
554
  version = "10.3.9.55"
555
+ source = { registry = "https://pypi.org/simple" }
556
  wheels = [
557
+ { url = "https://files.pythonhosted.org/packages/f4/13/bbcf48e2f8a6a9adef58f130bc968810528a4e66bbbe62fad335241e699f/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b6bb90c044fa9b07cedae2ef29077c4cf851fb6fdd6d862102321f359dca81e9", size = 63623836 },
558
+ { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038 },
559
+ { url = "https://files.pythonhosted.org/packages/d6/f0/91252f3cffe3f3c233a8e17262c21b41534652edfe783c1e58ea1c92c115/nvidia_curand_cu12-10.3.9.55-py3-none-win_amd64.whl", hash = "sha256:570d82475fe7f3d8ed01ffbe3b71796301e0e24c98762ca018ff8ce4f5418e1f", size = 62761446 },
560
  ]
561
 
562
  [[package]]
563
  name = "nvidia-cusolver-cu12"
564
  version = "11.7.2.55"
565
+ source = { registry = "https://pypi.org/simple" }
566
  dependencies = [
567
  { name = "nvidia-cublas-cu12" },
568
  { name = "nvidia-cusparse-cu12" },
569
  { name = "nvidia-nvjitlink-cu12" },
570
  ]
571
  wheels = [
572
+ { url = "https://files.pythonhosted.org/packages/8c/ce/4214a892e804b20bf66d04f04a473006fc2d3dac158160ef85f1bc906639/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:0fd9e98246f43c15bee5561147ad235dfdf2d037f5d07c9d41af3f7f72feb7cc", size = 260094827 },
573
+ { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342 },
574
+ { url = "https://files.pythonhosted.org/packages/c4/f9/e0e6f8b7aecd13e0f9e937d116fb3211329a0a92b9bea9624b1368de307a/nvidia_cusolver_cu12-11.7.2.55-py3-none-win_amd64.whl", hash = "sha256:a5a516c55da5c5aba98420d9bc9bcab18245f21ec87338cc1f930eb18dd411ac", size = 249600787 },
575
  ]
576
 
577
  [[package]]
578
  name = "nvidia-cusparse-cu12"
579
  version = "12.5.7.53"
580
+ source = { registry = "https://pypi.org/simple" }
581
  dependencies = [
582
  { name = "nvidia-nvjitlink-cu12" },
583
  ]
584
  wheels = [
585
+ { url = "https://files.pythonhosted.org/packages/2e/a2/313db0453087f5324a5900380ca2e57e050c8de76f407b5e11383dc762ae/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d869c6146ca80f4305b62e02d924b4aaced936f8173e3cef536a67eed2a91af1", size = 291963692 },
586
+ { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180 },
587
+ { url = "https://files.pythonhosted.org/packages/7c/48/64b01653919a3d1d9b5117c156806ab0db8312c7496ff646477a5c1545bf/nvidia_cusparse_cu12-12.5.7.53-py3-none-win_amd64.whl", hash = "sha256:82c201d6781bacf6bb7c654f0446728d0fe596dfdd82ef4a04c204ce3e107441", size = 288767123 },
588
  ]
589
 
590
  [[package]]
591
  name = "nvidia-nvcomp-cu12"
592
  version = "4.1.0.6"
593
+ source = { registry = "https://pypi.org/simple" }
594
  wheels = [
595
+ { url = "https://files.pythonhosted.org/packages/91/51/17e3acc3b53e5a6d97db7ed79035e8b5f13aefa1f5a8e703287418eac2b4/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:3bff6267fa6aae59a98155262e5e9da6142e798dac5afd01f7389b23bce89803", size = 28724365 },
596
+ { url = "https://files.pythonhosted.org/packages/f6/3e/c90004db47c527c4f253c1c866facefbd2a5059ba50035a6967712b3b125/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:aaff831f0fdbf20631df32e411ede37ddf5fd7297f78e77346441cd0d72cb787", size = 28944826 },
597
+ { url = "https://files.pythonhosted.org/packages/ef/97/be4151c26d13741237e1b58d6fac097b79b552bee4a9c89d7f150c4959fb/nvidia_nvcomp_cu12-4.1.0.6-py3-none-win_amd64.whl", hash = "sha256:df24bedfe9df8be67ae7c59f5d21223f082c5ce689679909ee4985c563a0a89f", size = 75296662 },
598
  ]
599
 
600
  [[package]]
601
  name = "nvidia-nvjitlink-cu12"
602
  version = "12.8.61"
603
+ source = { registry = "https://pypi.org/simple" }
604
  wheels = [
605
+ { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473 },
606
+ { url = "https://files.pythonhosted.org/packages/af/53/698f3758f48c5fcb1112721e40cc6714da3980d3c7e93bae5b29dafa9857/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b80ecab31085dda3ce3b41d043be0ec739216c3fc633b8abe212d5a30026df0", size = 38374634 },
607
+ { url = "https://files.pythonhosted.org/packages/7f/c6/0d1b2bfeb2ef42c06db0570c4d081e5cde4450b54c09e43165126cfe6ff6/nvidia_nvjitlink_cu12-12.8.61-py3-none-win_amd64.whl", hash = "sha256:1166a964d25fdc0eae497574d38824305195a5283324a21ccb0ce0c802cbf41c", size = 268514099 },
608
  ]
609
 
610
  [[package]]
 
622
  [[package]]
623
  name = "nx-cugraph-cu12"
624
  version = "24.12.0"
625
+ source = { registry = "https://pypi.org/simple" }
626
  dependencies = [
627
  { name = "cupy-cuda12x" },
628
  { name = "networkx" },
629
  { name = "numpy" },
630
  { name = "pylibcugraph-cu12" },
631
  ]
632
+ sdist = { url = "https://files.pythonhosted.org/packages/2e/a1/e968a05bc2980fa4ad66b3fe8e5411a48c3079f6faa4d4ed89d29d82a956/nx_cugraph_cu12-24.12.0.tar.gz", hash = "sha256:a21b60b57cad982678570a69cbbe6d58fb171b12e8c99b296f68bf89ac517813", size = 5259 }
633
+
634
+ [[package]]
635
+ name = "osmnx"
636
+ version = "2.0.1"
637
+ source = { registry = "https://pypi.org/simple" }
638
+ dependencies = [
639
+ { name = "geopandas" },
640
+ { name = "networkx" },
641
+ { name = "numpy" },
642
+ { name = "pandas" },
643
+ { name = "requests" },
644
+ { name = "shapely" },
645
+ ]
646
+ sdist = { url = "https://files.pythonhosted.org/packages/15/c4/dec0738e6defe0299ebb51a39b6c624f4093faad1f67e684859ba312dd30/osmnx-2.0.1.tar.gz", hash = "sha256:24bb7dc4c0d548ce11a61a79de08bdeea7d74f2d1889a93b60da825051c0e374", size = 86437 }
647
  wheels = [
648
+ { url = "https://files.pythonhosted.org/packages/77/59/4de56d8db7694831bea788de3a44e196a73f5c1053560b2ccf18282782c8/osmnx-2.0.1-py3-none-any.whl", hash = "sha256:6532b28f4eaf0c7621f03f77873e64c2e4de5bf46aeafb4faa84413bc9f34f62", size = 99641 },
649
  ]
650
 
651
  [[package]]
 
803
  [[package]]
804
  name = "pylibcudf-cu12"
805
  version = "24.12.0"
806
+ source = { registry = "https://pypi.org/simple" }
807
  dependencies = [
808
  { name = "cuda-python" },
809
  { name = "libcudf-cu12" },
 
814
  { name = "typing-extensions" },
815
  ]
816
  wheels = [
817
+ { url = "https://files.pythonhosted.org/packages/ee/0f/5a78a8bb72726de1ea50735c2e02588564542b8a0ad1069a067d9fe8e301/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c61587a6d9e9f392745b9b238f3eebcfacbbf21e3c7d9fedf7a1a672284fcce", size = 36400678 },
818
+ { url = "https://files.pythonhosted.org/packages/98/c9/66fe3954244f809b5b9a201e33d7cf8c663b09b0911443374b01333fe28a/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6459baed065bc76fbc7ef34e14912982971c1a9d4bffb2699909d78a95b0b8a3", size = 37259282 },
819
+ { url = "https://files.pythonhosted.org/packages/fa/1b/5f43e550262de73dfab17bbc8b2ee3f0add116be28c7ed6ba61a53135859/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd130e347c28716912b89a1f7ff653ca6e202bfbc79f5abbedd7918bb9124f34", size = 36317440 },
820
+ { url = "https://files.pythonhosted.org/packages/8e/2c/653ca775cefafeea2158d0c94296e6b78e050af2892f89fe21697bb737af/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e2bb951f1a2fddf1976b84aa4e6d1280689da22014d6d1d5f48364cc1b32e2d", size = 37180377 },
821
  ]
822
 
823
  [[package]]
824
  name = "pylibcugraph-cu12"
825
  version = "24.12.0"
826
+ source = { registry = "https://pypi.org/simple" }
827
  dependencies = [
828
  { name = "nvidia-cublas-cu12" },
829
  { name = "nvidia-curand-cu12" },
 
832
  { name = "pylibraft-cu12" },
833
  { name = "rmm-cu12" },
834
  ]
835
+ sdist = { url = "https://files.pythonhosted.org/packages/78/0f/10642063a2b228a3e9e192f5fbb1e9cf2b3914025bcb3f77fbf93d97b9b4/pylibcugraph_cu12-24.12.0.tar.gz", hash = "sha256:f8943c94db9333c53193fc575dd426f50dbdefe26c96c6715d5bbebd130b3a86", size = 3773 }
 
 
 
 
 
836
 
837
  [[package]]
838
  name = "pylibraft-cu12"
839
  version = "24.12.0"
840
+ source = { registry = "https://pypi.org/simple" }
841
  dependencies = [
842
  { name = "cuda-python" },
843
  { name = "numpy" },
 
847
  { name = "nvidia-cusparse-cu12" },
848
  { name = "rmm-cu12" },
849
  ]
850
+ sdist = { url = "https://files.pythonhosted.org/packages/97/21/7528b474119607168aae1e94148614761effbec8c45ae31f323ea75e7d68/pylibraft_cu12-24.12.0.tar.gz", hash = "sha256:88370c81ec6cad13c14f5b6df18845596cfb067f9c009d8d118fc0a2f3c78833", size = 5613 }
851
+
852
+ [[package]]
853
+ name = "pyogrio"
854
+ version = "0.10.0"
855
+ source = { registry = "https://pypi.org/simple" }
856
+ dependencies = [
857
+ { name = "certifi" },
858
+ { name = "numpy" },
859
+ { name = "packaging" },
860
+ ]
861
+ sdist = { url = "https://files.pythonhosted.org/packages/a5/8f/5a784595524a79c269f2b1c880f4fdb152867df700c97005dda51997da02/pyogrio-0.10.0.tar.gz", hash = "sha256:ec051cb568324de878828fae96379b71858933413e185148acb6c162851ab23c", size = 281950 }
862
  wheels = [
863
+ { url = "https://files.pythonhosted.org/packages/8d/2c/c761e6adeb81bd4029a137b3240e7214a8c9aaf225883356196afd6ef9d8/pyogrio-0.10.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5b1a51431a27a1cb3e4e19558939c1423106e06e7b67d6285f4fba9c2d0a91b9", size = 15083526 },
864
+ { url = "https://files.pythonhosted.org/packages/c3/e5/983aa9ddf2ff784e973d6b2ec3e874065d6655a5329ca26311b0f3b9f92f/pyogrio-0.10.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:216d69cd77b2b4a0c9d7d449bc239f8b77f3d73f4a05d9c738a0745b236902d8", size = 16457867 },
865
+ { url = "https://files.pythonhosted.org/packages/fa/9a/7103eee7aa3b6ec88e072ef18a05c3aae1ed96fe00009a7a5ce139b50f30/pyogrio-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2f0b75f0077ce33256aec6278c2a9c3b79bf0637ddf4f93d3ab2609f0501d96", size = 23926332 },
866
+ { url = "https://files.pythonhosted.org/packages/8b/b2/2ca124343aba24b9a5dcd7c1f43da81e652849cfaf3110d3f507a80af0a1/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0a47f702d29808c557d2ebea8542c23903f021eae44e16838adef2ab4281c71b", size = 23138693 },
867
+ { url = "https://files.pythonhosted.org/packages/ae/15/501aa4823c142232169d54255ab343f28c4ea9e7fa489b8433dcc873a942/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:11e6c71d12da6b445e77d0fc0198db1bd35a77e03a0685e45338cbab9ce02add", size = 24062952 },
868
+ { url = "https://files.pythonhosted.org/packages/94/8d/24f21e6a93ca418231aee3bddade7a0766c89c523832f29e08a8860f83e6/pyogrio-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0d74e91a9c0ff2f9abe01b556ff663977193b2d6922208406172d0fc833beff", size = 16172573 },
869
+ { url = "https://files.pythonhosted.org/packages/b5/b5/3c5dfd0b50cbce6f3d4e42c0484647feb1809dbe20e225c4c6abd067e69f/pyogrio-0.10.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2d6558b180e020f71ab7aa7f82d592ed3305c9f698d98f6d0a4637ec7a84c4ce", size = 15079211 },
870
+ { url = "https://files.pythonhosted.org/packages/b8/9a/1ba9c707a094976f343bd0177741eaba0e842fa05ecd8ab97192db4f2ec1/pyogrio-0.10.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a99102037eead8ba491bc57825c1e395ee31c9956d7bff7b4a9e4fdbff3a13c2", size = 16442782 },
871
+ { url = "https://files.pythonhosted.org/packages/5e/bb/b4250746c2c85fea5004cae93e9e25ad01516e9e94e04de780a2e78139da/pyogrio-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4c373281d7cbf560c5b61f8f3c7442103ad7f1c7ac4ef3a84572ed7a5dd2f6", size = 23899832 },
872
+ { url = "https://files.pythonhosted.org/packages/bd/4c/79e47e40a8e54e79a45133786a0a58209534f580591c933d40c5ed314fe7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:19f18411bdf836d24cdc08b9337eb3ec415e4ac4086ba64516b36b73a2e88622", size = 23081469 },
873
+ { url = "https://files.pythonhosted.org/packages/47/78/2b62c8a340bcb0ea56b9ddf2ef5fd3d1f101dc0e98816b9e6da87c5ac3b7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1abbcdd9876f30bebf1df8a0273f6cdeb29d03259290008275c7fddebe139f20", size = 24024758 },
874
+ { url = "https://files.pythonhosted.org/packages/43/97/34605480f06b0ad9611bf58a174eccc6f3673275f3d519cf763391892881/pyogrio-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc", size = 16160294 },
875
+ { url = "https://files.pythonhosted.org/packages/14/4a/4c8e4f5b9edbca46e0f8d6c1c0b56c0d4af0900c29f4bea22d37853c07f3/pyogrio-0.10.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c90478209537a31dcc65664a87a04c094bb0e08efe502908a6682b8cec0259bf", size = 15076879 },
876
+ { url = "https://files.pythonhosted.org/packages/5f/be/7db0644eef9ef3382518399aaf3332827c43018112d2a74f78784fd496ec/pyogrio-0.10.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:fec45e1963b7058e5a1aa98598aed07c0858512c833d6aad2c672c3ec98bbf04", size = 16440405 },
877
+ { url = "https://files.pythonhosted.org/packages/96/77/f199230ba86fe88b1f57e71428c169ed982de68a32d6082cd7c12d0f5d55/pyogrio-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28cb139f8a5d0365ede602230104b407ae52bb6b55173c8d5a35424d28c4a2c5", size = 23871511 },
878
+ { url = "https://files.pythonhosted.org/packages/25/ac/ca483bec408b59c54f7129b0244cc9de21d8461aefe89ece7bd74ad33807/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cea0187fcc2d574e52af8cfab041fa0a7ad71d5ef6b94b49a3f3d2a04534a27e", size = 23048830 },
879
+ { url = "https://files.pythonhosted.org/packages/d7/3e/c35f2d8dad95b24e568c468f09ff60fb61945065465e0ec7868400596566/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7c02b207ea8cf09c501ea3e95d29152781a00d3c32267286bc36fa457c332205", size = 23996873 },
880
+ { url = "https://files.pythonhosted.org/packages/27/5d/0deb16d228362a097ee3258d0a887c9c0add4b9678bb4847b08a241e124d/pyogrio-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848", size = 16158260 },
881
  ]
882
 
883
  [[package]]
 
889
  { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 },
890
  ]
891
 
892
+ [[package]]
893
+ name = "pyproj"
894
+ version = "3.7.0"
895
+ source = { registry = "https://pypi.org/simple" }
896
+ dependencies = [
897
+ { name = "certifi" },
898
+ ]
899
+ sdist = { url = "https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz", hash = "sha256:bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813", size = 225577 }
900
+ wheels = [
901
+ { url = "https://files.pythonhosted.org/packages/e2/8f/15ff6ab10a08050e94afcd544962a1a930d0bb7ca102ad39795a847eb340/pyproj-3.7.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:e66d8d42dbdf232e121546c5a1dec097caf0454e4885c09a8e03cdcee0753c03", size = 6272213 },
902
+ { url = "https://files.pythonhosted.org/packages/2d/4d/610fe2a17de71b4fe210af69ce25f2d65379ba0a48299129894d0d0988ee/pyproj-3.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7764b64a0aefe40134a2828b3a40be88f6c8b7832c45d8a9f2bd592ace4b2a3b", size = 4634548 },
903
+ { url = "https://files.pythonhosted.org/packages/d6/27/0327d0b0fcdfc4cf72696a2effca2963e524dcd846a0274ba503f8bf2648/pyproj-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53c442c5081dc95346996f5c4323fde2caafc69c6e60b4707aa46e88244f1e04", size = 6333913 },
904
+ { url = "https://files.pythonhosted.org/packages/3c/e5/2cb256148c730b9c3f74bfb3c03904f5070499c6dcaea153073a9642c6c6/pyproj-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc5b305d4d5d7697885681d9b660623e328227612823d5c660e0a9566cb48838", size = 9460363 },
905
+ { url = "https://files.pythonhosted.org/packages/ba/a3/4aa1e8e78ad18aa170efd2c94c1931bf2a34c526683b874d06e40fa323f6/pyproj-3.7.0-cp311-cp311-win32.whl", hash = "sha256:de2b47d748dc41cccb6b3b713d4d7dc9aa1046a82141c8665026908726426abc", size = 5820551 },
906
+ { url = "https://files.pythonhosted.org/packages/26/0c/b084e8839a117eaad8cb4fbaa81bbb24c6f183de0ee95c6c4e2770ab6f09/pyproj-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:38cba7c4c5679e40242dd959133e95b908d3b912dd66291094fd13510e8517ff", size = 6231788 },
907
+ { url = "https://files.pythonhosted.org/packages/bd/19/be806b711e9ebfb80411c653054157db128fffdd7f8493e3064136c8d880/pyproj-3.7.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:8cbec92bdd6e9933ca08795c12717d1384e9b51cf4b1acf0d753db255a75c51e", size = 6261400 },
908
+ { url = "https://files.pythonhosted.org/packages/99/3b/8497995e8cae0049d013679c6a7ac6c57b816d590c733a388748dafe5af5/pyproj-3.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8c4a8e4d3ba76c3adac3c087544cf92f7f9a19ea34946904a13fca48cc1c0106", size = 4637848 },
909
+ { url = "https://files.pythonhosted.org/packages/ea/f7/2a5b46d6f8da913d58d44942ab06ca4803b5424b73259b15344cf90040f6/pyproj-3.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82624fb42aa31f6b1a860fbc0316babd07fd712642bc31022df4e9b4056bf463", size = 6324856 },
910
+ { url = "https://files.pythonhosted.org/packages/36/83/c257771077bcf9da20d0e97abc834f9037c219986cc76d40183903a30464/pyproj-3.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1bbb3f89c68d4a6835c40b2da8b27680eec60e8cc7cdb08c09bcc725b2b62", size = 9525831 },
911
+ { url = "https://files.pythonhosted.org/packages/d6/50/a635de79def69fe03cdef3a4bd3bec780c30987bce3a15dd7099afb2506f/pyproj-3.7.0-cp312-cp312-win32.whl", hash = "sha256:952515d5592167ad4436b355485f82acebed2a49b46722159e4584b75a763dd3", size = 5811864 },
912
+ { url = "https://files.pythonhosted.org/packages/a1/8b/96bc8c8f3eca4eb7fa3758fde0b755d1df30a19f494376e3ee8de1ef4e79/pyproj-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1", size = 6224720 },
913
+ { url = "https://files.pythonhosted.org/packages/bf/da/a17c452bea1ff4cd58d6dc573055b9c8fb6af114b7d2c694782aec770865/pyproj-3.7.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:94e8b903a9e83448fd2379c49dec3e8cd83c9ed36f54354e68b601cef56d5426", size = 6254898 },
914
+ { url = "https://files.pythonhosted.org/packages/c2/31/ab07b389f2caa527c95ab2ea1940d28879bd2a19e67b2529cb3e94648d26/pyproj-3.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:64cb5c17d6f6305a8b978a40f95560c87c5b363fcac40632337955664437875a", size = 4628612 },
915
+ { url = "https://files.pythonhosted.org/packages/1d/24/def3ded6529db3e3d8351ad73481730249ab57d8d876d502f86d7958ce06/pyproj-3.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c54e9bdda7ab9c4a5af50f9d6e6ee7704e05fafd504896b96ed1208c7aea098", size = 6315895 },
916
+ { url = "https://files.pythonhosted.org/packages/dd/14/07314f78302105d199fb25e73376d723efe9c2ef3906463aae209913a6d3/pyproj-3.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24fa4e9e0abba875f9524808410cc520067eaf38fd5549ed0ef7c43ac39923c9", size = 9466144 },
917
+ { url = "https://files.pythonhosted.org/packages/00/f2/2a116920db3496e3ff3c94d7d8d15da41374f35cfe1b9e79682eca500a61/pyproj-3.7.0-cp313-cp313-win32.whl", hash = "sha256:b9e8353fc3c79dc14d1f5ac758a1a6e4eee04102c3c0b138670f121f5ac52eb4", size = 5807180 },
918
+ { url = "https://files.pythonhosted.org/packages/f8/33/3c8c6302717096b54aa14ccbb271045ba04629e21cbf348f2f2dc94f69b4/pyproj-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509", size = 6218036 },
919
+ ]
920
+
921
  [[package]]
922
  name = "python-dateutil"
923
  version = "2.9.0.post0"
 
939
  { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 },
940
  ]
941
 
942
+ [[package]]
943
+ name = "requests"
944
+ version = "2.32.3"
945
+ source = { registry = "https://pypi.org/simple" }
946
+ dependencies = [
947
+ { name = "certifi" },
948
+ { name = "charset-normalizer" },
949
+ { name = "idna" },
950
+ { name = "urllib3" },
951
+ ]
952
+ sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
953
+ wheels = [
954
+ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
955
+ ]
956
+
957
  [[package]]
958
  name = "rmm-cu12"
959
  version = "24.12.1"
960
+ source = { registry = "https://pypi.org/simple" }
961
  dependencies = [
962
  { name = "cuda-python" },
963
  { name = "numba" },
964
  { name = "numpy" },
965
  ]
966
  wheels = [
967
+ { url = "https://files.pythonhosted.org/packages/0e/c3/b08d5282116dd930e68a0ccbdecd750880efc451e0d2150e764793f03070/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d509d735201d1b0bc05b3e148e23a6216eabcfec67006a4e9311b6c25766023f", size = 1933478 },
968
+ { url = "https://files.pythonhosted.org/packages/c7/ce/c32c1a95d53b1a22aeb258af7afa68a73a995c6c2f533fb774d2078d3cca/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1d6b166aaf9b81495ff33f2fe5a29ad12dc1ed6089daf9f387160e7734fc901", size = 1984701 },
969
+ { url = "https://files.pythonhosted.org/packages/c2/4b/32f7920f130536e7e1a8ea7feb591cab7fcb85aaff28311c4e8057ec23da/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317a6641fb37f3efa6e8eb76eeb568970a8c439e0090529520861fd139ef6f0c", size = 1923807 },
970
+ { url = "https://files.pythonhosted.org/packages/1d/f2/56faa578aefdab498f6eb73dde3316f99390769786e0cdbb6c7a6abbbf86/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9460a386e34f1921c8d06204f320d705511de899ababb45302d314da036da5a", size = 1975053 },
971
  ]
972
 
973
  [[package]]
974
+ name = "shapely"
975
+ version = "2.0.7"
976
  source = { registry = "https://pypi.org/simple" }
977
+ dependencies = [
978
+ { name = "numpy" },
979
+ ]
980
+ sdist = { url = "https://files.pythonhosted.org/packages/21/c0/a911d1fd765d07a2b6769ce155219a281bfbe311584ebe97340d75c5bdb1/shapely-2.0.7.tar.gz", hash = "sha256:28fe2997aab9a9dc026dc6a355d04e85841546b2a5d232ed953e3321ab958ee5", size = 283413 }
981
  wheels = [
982
+ { url = "https://files.pythonhosted.org/packages/1d/ad/21798c2fec013e289f8ab91d42d4d3299c315b8c4460c08c75fef0901713/shapely-2.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5cf23400cb25deccf48c56a7cdda8197ae66c0e9097fcdd122ac2007e320bc34", size = 1473091 },
983
+ { url = "https://files.pythonhosted.org/packages/15/63/eef4f180f1b5859c70e7f91d2f2570643e5c61e7d7c40743d15f8c6cbc42/shapely-2.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f1da01c04527f7da59ee3755d8ee112cd8967c15fab9e43bba936b81e2a013", size = 1332921 },
984
+ { url = "https://files.pythonhosted.org/packages/fe/67/77851dd17738bbe7762a0ef1acf7bc499d756f68600dd68a987d78229412/shapely-2.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f623b64bb219d62014781120f47499a7adc30cf7787e24b659e56651ceebcb0", size = 2427949 },
985
+ { url = "https://files.pythonhosted.org/packages/0b/a5/2c8dbb0f383519771df19164e3bf3a8895d195d2edeab4b6040f176ee28e/shapely-2.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6d95703efaa64aaabf278ced641b888fc23d9c6dd71f8215091afd8a26a66e3", size = 2529282 },
986
+ { url = "https://files.pythonhosted.org/packages/dc/4e/e1d608773c7fe4cde36d48903c0d6298e3233dc69412403783ac03fa5205/shapely-2.0.7-cp311-cp311-win32.whl", hash = "sha256:2f6e4759cf680a0f00a54234902415f2fa5fe02f6b05546c662654001f0793a2", size = 1295751 },
987
+ { url = "https://files.pythonhosted.org/packages/27/57/8ec7c62012bed06731f7ee979da7f207bbc4b27feed5f36680b6a70df54f/shapely-2.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:b52f3ab845d32dfd20afba86675c91919a622f4627182daec64974db9b0b4608", size = 1442684 },
988
+ { url = "https://files.pythonhosted.org/packages/4f/3e/ea100eec5811bafd0175eb21828a3be5b0960f65250f4474391868be7c0f/shapely-2.0.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4c2b9859424facbafa54f4a19b625a752ff958ab49e01bc695f254f7db1835fa", size = 1482451 },
989
+ { url = "https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5aed1c6764f51011d69a679fdf6b57e691371ae49ebe28c3edb5486537ffbd51", size = 1345765 },
990
+ { url = "https://files.pythonhosted.org/packages/fd/dd/b35d7891d25cc11066a70fb8d8169a6a7fca0735dd9b4d563a84684969a3/shapely-2.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73c9ae8cf443187d784d57202199bf9fd2d4bb7d5521fe8926ba40db1bc33e8e", size = 2421540 },
991
+ { url = "https://files.pythonhosted.org/packages/62/de/8dbd7df60eb23cb983bb698aac982944b3d602ef0ce877a940c269eae34e/shapely-2.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9469f49ff873ef566864cb3516091881f217b5d231c8164f7883990eec88b73", size = 2525741 },
992
+ { url = "https://files.pythonhosted.org/packages/96/64/faf0413ebc7a84fe7a0790bf39ec0b02b40132b68e57aba985c0b6e4e7b6/shapely-2.0.7-cp312-cp312-win32.whl", hash = "sha256:6bca5095e86be9d4ef3cb52d56bdd66df63ff111d580855cb8546f06c3c907cd", size = 1296552 },
993
+ { url = "https://files.pythonhosted.org/packages/63/05/8a1c279c226d6ad7604d9e237713dd21788eab96db97bf4ce0ea565e5596/shapely-2.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:f86e2c0259fe598c4532acfcf638c1f520fa77c1275912bbc958faecbf00b108", size = 1443464 },
994
+ { url = "https://files.pythonhosted.org/packages/c6/21/abea43effbfe11f792e44409ee9ad7635aa93ef1c8ada0ef59b3c1c3abad/shapely-2.0.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a0c09e3e02f948631c7763b4fd3dd175bc45303a0ae04b000856dedebefe13cb", size = 1481618 },
995
+ { url = "https://files.pythonhosted.org/packages/d9/71/af688798da36fe355a6e6ffe1d4628449cb5fa131d57fc169bcb614aeee7/shapely-2.0.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:06ff6020949b44baa8fc2e5e57e0f3d09486cd5c33b47d669f847c54136e7027", size = 1345159 },
996
+ { url = "https://files.pythonhosted.org/packages/67/47/f934fe2b70d31bb9774ad4376e34f81666deed6b811306ff574faa3d115e/shapely-2.0.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6dbf096f961ca6bec5640e22e65ccdec11e676344e8157fe7d636e7904fd36", size = 2410267 },
997
+ { url = "https://files.pythonhosted.org/packages/f5/8a/2545cc2a30afc63fc6176c1da3b76af28ef9c7358ed4f68f7c6a9d86cf5b/shapely-2.0.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adeddfb1e22c20548e840403e5e0b3d9dc3daf66f05fa59f1fcf5b5f664f0e98", size = 2514128 },
998
+ { url = "https://files.pythonhosted.org/packages/87/54/2344ce7da39676adec94e84fbaba92a8f1664e4ae2d33bd404dafcbe607f/shapely-2.0.7-cp313-cp313-win32.whl", hash = "sha256:a7f04691ce1c7ed974c2f8b34a1fe4c3c5dfe33128eae886aa32d730f1ec1913", size = 1295783 },
999
+ { url = "https://files.pythonhosted.org/packages/d7/1e/6461e5cfc8e73ae165b8cff6eb26a4d65274fad0e1435137c5ba34fe4e88/shapely-2.0.7-cp313-cp313-win_amd64.whl", hash = "sha256:aaaf5f7e6cc234c1793f2a2760da464b604584fb58c6b6d7d94144fd2692d67e", size = 1442300 },
1000
  ]
1001
 
1002
  [[package]]
1003
+ name = "six"
1004
+ version = "1.17.0"
1005
  source = { registry = "https://pypi.org/simple" }
1006
+ sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
1007
  wheels = [
1008
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
1009
  ]
1010
 
1011
  [[package]]
 
1025
  wheels = [
1026
  { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 },
1027
  ]
1028
+
1029
+ [[package]]
1030
+ name = "urllib3"
1031
+ version = "2.3.0"
1032
+ source = { registry = "https://pypi.org/simple" }
1033
+ sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 }
1034
+ wheels = [
1035
+ { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 },
1036
+ ]
lynxkite-lynxscribe/README.md CHANGED
@@ -15,3 +15,12 @@ Run tests with:
15
  ```bash
16
  uv run pytest
17
  ```
 
 
 
 
 
 
 
 
 
 
15
  ```bash
16
  uv run pytest
17
  ```
18
+
19
+ The LLM agent flow examples use local models.
20
+
21
+ ```bash
22
+ uv pip install infinity-emb[all]
23
+ infinity_emb v2 --model-id michaelfeil/bge-small-en-v1.5
24
+ uv pip install "sglang[all]>=0.4.2.post2" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer/
25
+ python -m sglang.launch_server --model-path SultanR/SmolTulu-1.7b-Instruct --port 8080
26
+ ```
lynxkite-lynxscribe/src/lynxkite_plugins/lynxscribe/__init__.py CHANGED
@@ -1,2 +1,5 @@
1
  from . import lynxscribe_ops
2
  from . import llm_ops
 
 
 
 
1
  from . import lynxscribe_ops
2
  from . import llm_ops
3
+ from .lynxscribe_ops import api_service_post, api_service_get
4
+
5
+ __all__ = ["api_service_post", "api_service_get"]
lynxkite-lynxscribe/src/lynxkite_plugins/lynxscribe/llm_ops.py CHANGED
@@ -120,7 +120,7 @@ def ask_llm(input, *, model: str, accepted_regex: str = None, max_tokens: int =
120
  options = {}
121
  if accepted_regex:
122
  options["extra_body"] = {
123
- "guided_regex": accepted_regex,
124
  }
125
  results = chat(
126
  model=model,
@@ -212,7 +212,7 @@ def rag(
212
  results = [db[int(r)] for r in results["ids"][0]]
213
  return {**input, "rag": results, "_collection": collection}
214
  if engine == RagEngine.Custom:
215
- model = "google/gemma-2-2b-it"
216
  chat = input[input_field]
217
  embeddings = [embedding(input=[r[db_field]], model=model) for r in db]
218
  q = embedding(input=[chat], model=model)
 
120
  options = {}
121
  if accepted_regex:
122
  options["extra_body"] = {
123
+ "regex": accepted_regex,
124
  }
125
  results = chat(
126
  model=model,
 
212
  results = [db[int(r)] for r in results["ids"][0]]
213
  return {**input, "rag": results, "_collection": collection}
214
  if engine == RagEngine.Custom:
215
+ model = "michaelfeil/bge-small-en-v1.5"
216
  chat = input[input_field]
217
  embeddings = [embedding(input=[r[db_field]], model=model) for r in db]
218
  q = embedding(input=[chat], model=model)
lynxkite-lynxscribe/src/lynxkite_plugins/lynxscribe/lynxscribe_ops.py CHANGED
@@ -160,11 +160,12 @@ async def test_chat_api(message, chat_api, *, show_details=False):
160
  model="",
161
  messages=[{"role": "user", "content": message["text"]}],
162
  )
163
- response = await chat_api.answer(request)
 
164
  if show_details:
165
- return {**response.__dict__}
166
  else:
167
- return {"answer": response.choices[0].message.content}
168
 
169
 
170
  @op("Input chat")
@@ -237,22 +238,9 @@ async def get_chat_api(ws):
237
 
238
  async def stream_chat_api_response(request):
239
  chat_api = await get_chat_api(request["model"])
240
- response = await chat_api.answer(request)
241
- response = response.model_dump()
242
- yield json.dumps(
243
- {
244
- **response,
245
- "id": "asd",
246
- "object": "chat.completion.chunk",
247
- "model": request["model"],
248
- "choices": [
249
- {
250
- "index": 0,
251
- "delta": {"role": "assistant", "content": response["answer"]},
252
- }
253
- ],
254
- }
255
- )
256
 
257
 
258
  async def api_service_post(request):
 
160
  model="",
161
  messages=[{"role": "user", "content": message["text"]}],
162
  )
163
+ response = await chat_api.answer(request, stream=False)
164
+ answer = response.choices[0].message.content
165
  if show_details:
166
+ return {"answer": answer, **response.__dict__}
167
  else:
168
+ return {"answer": answer}
169
 
170
 
171
  @op("Input chat")
 
238
 
239
  async def stream_chat_api_response(request):
240
  chat_api = await get_chat_api(request["model"])
241
+ request = ChatCompletionPrompt(**request)
242
+ async for chunk in await chat_api.answer(request, stream=True):
243
+ yield chunk.model_dump_json()
 
 
 
 
 
 
 
 
 
 
 
 
 
244
 
245
 
246
  async def api_service_post(request):
lynxkite-pillow-example/pyproject.toml CHANGED
@@ -5,6 +5,7 @@ description = "An example LynxKite plugin that wraps some Pillow image processin
5
  readme = "README.md"
6
  requires-python = ">=3.11"
7
  dependencies = [
 
8
  "lynxkite-core",
9
  "pillow>=11.1.0",
10
  ]
 
5
  readme = "README.md"
6
  requires-python = ">=3.11"
7
  dependencies = [
8
+ "fsspec>=2025.2.0",
9
  "lynxkite-core",
10
  "pillow>=11.1.0",
11
  ]
lynxkite-pillow-example/src/lynxkite_plugins/pillow_example/__init__.py CHANGED
@@ -4,6 +4,7 @@ from lynxkite.core import ops
4
  from lynxkite.core.executors import one_by_one
5
  from PIL import Image, ImageFilter
6
  import base64
 
7
  import io
8
 
9
  ENV = "Pillow"
@@ -13,12 +14,15 @@ one_by_one.register(ENV, cache=False)
13
 
14
  @op("Open image")
15
  def open_image(*, filename: str):
16
- return Image.open(filename)
 
 
17
 
18
 
19
  @op("Save image")
20
  def save_image(image: Image, *, filename: str):
21
- image.save(filename)
 
22
 
23
 
24
  @op("Crop")
@@ -59,7 +63,7 @@ def to_grayscale(image: Image):
59
  @op("View image", view="image")
60
  def view_image(image: Image):
61
  buffered = io.BytesIO()
62
- image.save(buffered, format="JPEG")
63
  b64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
64
  data_url = "data:image/jpeg;base64," + b64
65
  return data_url
 
4
  from lynxkite.core.executors import one_by_one
5
  from PIL import Image, ImageFilter
6
  import base64
7
+ import fsspec
8
  import io
9
 
10
  ENV = "Pillow"
 
14
 
15
  @op("Open image")
16
  def open_image(*, filename: str):
17
+ with fsspec.open(filename, "rb") as f:
18
+ data = io.BytesIO(f.read())
19
+ return Image.open(data)
20
 
21
 
22
  @op("Save image")
23
  def save_image(image: Image, *, filename: str):
24
+ with fsspec.open(filename, "wb") as f:
25
+ image.save(f)
26
 
27
 
28
  @op("Crop")
 
63
  @op("View image", view="image")
64
  def view_image(image: Image):
65
  buffered = io.BytesIO()
66
+ image.save(buffered, format="webp")
67
  b64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
68
  data_url = "data:image/jpeg;base64," + b64
69
  return data_url
lynxkite-pillow-example/uv.lock CHANGED
@@ -1,22 +1,33 @@
1
  version = 1
2
  requires-python = ">=3.11"
3
 
 
 
 
 
 
 
 
 
 
4
  [[package]]
5
  name = "lynxkite-core"
6
  version = "0.1.0"
7
  source = { virtual = "../lynxkite-core" }
8
 
9
  [[package]]
10
- name = "lynxkite-pillow"
11
  version = "0.1.0"
12
  source = { virtual = "." }
13
  dependencies = [
 
14
  { name = "lynxkite-core" },
15
  { name = "pillow" },
16
  ]
17
 
18
  [package.metadata]
19
  requires-dist = [
 
20
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
21
  { name = "pillow", specifier = ">=11.1.0" },
22
  ]
 
1
  version = 1
2
  requires-python = ">=3.11"
3
 
4
+ [[package]]
5
+ name = "fsspec"
6
+ version = "2025.2.0"
7
+ source = { registry = "https://pypi.org/simple" }
8
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/79/68612ed99700e6413de42895aa725463e821a6b3be75c87fcce1b4af4c70/fsspec-2025.2.0.tar.gz", hash = "sha256:1c24b16eaa0a1798afa0337aa0db9b256718ab2a89c425371f5628d22c3b6afd", size = 292283 }
9
+ wheels = [
10
+ { url = "https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl", hash = "sha256:9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b", size = 184484 },
11
+ ]
12
+
13
  [[package]]
14
  name = "lynxkite-core"
15
  version = "0.1.0"
16
  source = { virtual = "../lynxkite-core" }
17
 
18
  [[package]]
19
+ name = "lynxkite-pillow-example"
20
  version = "0.1.0"
21
  source = { virtual = "." }
22
  dependencies = [
23
+ { name = "fsspec" },
24
  { name = "lynxkite-core" },
25
  { name = "pillow" },
26
  ]
27
 
28
  [package.metadata]
29
  requires-dist = [
30
+ { name = "fsspec", specifier = ">=2025.2.0" },
31
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
32
  { name = "pillow", specifier = ">=11.1.0" },
33
  ]