webscout 8.3.1__py3-none-any.whl → 8.3.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of webscout might be problematic. Click here for more details.

Files changed (77) hide show
  1. webscout/AIutel.py +46 -53
  2. webscout/Bing_search.py +418 -0
  3. webscout/Extra/gguf.py +706 -177
  4. webscout/Provider/AISEARCH/genspark_search.py +7 -7
  5. webscout/Provider/GeminiProxy.py +140 -0
  6. webscout/Provider/MCPCore.py +78 -75
  7. webscout/Provider/OPENAI/BLACKBOXAI.py +1 -4
  8. webscout/Provider/OPENAI/GeminiProxy.py +328 -0
  9. webscout/Provider/OPENAI/README.md +2 -0
  10. webscout/Provider/OPENAI/README_AUTOPROXY.md +238 -0
  11. webscout/Provider/OPENAI/__init__.py +15 -1
  12. webscout/Provider/OPENAI/autoproxy.py +332 -39
  13. webscout/Provider/OPENAI/base.py +15 -5
  14. webscout/Provider/OPENAI/e2b.py +0 -1
  15. webscout/Provider/OPENAI/mcpcore.py +109 -70
  16. webscout/Provider/OPENAI/scirachat.py +59 -51
  17. webscout/Provider/OPENAI/toolbaz.py +2 -9
  18. webscout/Provider/OPENAI/xenai.py +514 -0
  19. webscout/Provider/OPENAI/yep.py +8 -2
  20. webscout/Provider/TTI/__init__.py +1 -0
  21. webscout/Provider/TTI/bing.py +231 -0
  22. webscout/Provider/TTS/speechma.py +45 -39
  23. webscout/Provider/TogetherAI.py +366 -0
  24. webscout/Provider/XenAI.py +324 -0
  25. webscout/Provider/__init__.py +8 -3
  26. webscout/Provider/deepseek_assistant.py +378 -0
  27. webscout/auth/__init__.py +44 -0
  28. webscout/auth/api_key_manager.py +189 -0
  29. webscout/auth/auth_system.py +100 -0
  30. webscout/auth/config.py +76 -0
  31. webscout/auth/database.py +400 -0
  32. webscout/auth/exceptions.py +67 -0
  33. webscout/auth/middleware.py +248 -0
  34. webscout/auth/models.py +130 -0
  35. webscout/auth/providers.py +257 -0
  36. webscout/auth/rate_limiter.py +254 -0
  37. webscout/auth/request_models.py +127 -0
  38. webscout/auth/request_processing.py +226 -0
  39. webscout/auth/routes.py +526 -0
  40. webscout/auth/schemas.py +103 -0
  41. webscout/auth/server.py +312 -0
  42. webscout/auth/static/favicon.svg +11 -0
  43. webscout/auth/swagger_ui.py +203 -0
  44. webscout/auth/templates/components/authentication.html +237 -0
  45. webscout/auth/templates/components/base.html +103 -0
  46. webscout/auth/templates/components/endpoints.html +750 -0
  47. webscout/auth/templates/components/examples.html +491 -0
  48. webscout/auth/templates/components/footer.html +75 -0
  49. webscout/auth/templates/components/header.html +27 -0
  50. webscout/auth/templates/components/models.html +286 -0
  51. webscout/auth/templates/components/navigation.html +70 -0
  52. webscout/auth/templates/static/api.js +455 -0
  53. webscout/auth/templates/static/icons.js +168 -0
  54. webscout/auth/templates/static/main.js +784 -0
  55. webscout/auth/templates/static/particles.js +201 -0
  56. webscout/auth/templates/static/styles.css +3353 -0
  57. webscout/auth/templates/static/ui.js +374 -0
  58. webscout/auth/templates/swagger_ui.html +170 -0
  59. webscout/client.py +49 -3
  60. webscout/scout/core/scout.py +104 -26
  61. webscout/scout/element.py +139 -18
  62. webscout/swiftcli/core/cli.py +14 -3
  63. webscout/swiftcli/decorators/output.py +59 -9
  64. webscout/update_checker.py +31 -49
  65. webscout/version.py +1 -1
  66. webscout/webscout_search.py +4 -12
  67. webscout/webscout_search_async.py +3 -10
  68. webscout/yep_search.py +2 -11
  69. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/METADATA +41 -11
  70. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/RECORD +74 -36
  71. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/entry_points.txt +1 -1
  72. webscout/Provider/HF_space/__init__.py +0 -0
  73. webscout/Provider/HF_space/qwen_qwen2.py +0 -206
  74. webscout/Provider/OPENAI/api.py +0 -1320
  75. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/WHEEL +0 -0
  76. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/licenses/LICENSE.md +0 -0
  77. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Modern Particle Background System for WebScout
3
+ * Creates an interactive particle network background
4
+ */
5
+
6
+ class ParticleSystem {
7
+ constructor(canvas) {
8
+ this.canvas = canvas;
9
+ this.ctx = canvas.getContext('2d');
10
+ this.particles = [];
11
+ this.mouse = { x: 0, y: 0 };
12
+ this.animationId = null;
13
+
14
+ this.config = {
15
+ particleCount: 50,
16
+ particleSize: 2,
17
+ connectionDistance: 150,
18
+ mouseRadius: 200,
19
+ speed: 0.5,
20
+ colors: {
21
+ particle: 'rgba(99, 102, 241, 0.6)',
22
+ connection: 'rgba(99, 102, 241, 0.2)',
23
+ mouseConnection: 'rgba(139, 92, 246, 0.4)'
24
+ }
25
+ };
26
+
27
+ this.init();
28
+ }
29
+
30
+ init() {
31
+ this.resize();
32
+ this.createParticles();
33
+ this.bindEvents();
34
+ this.animate();
35
+ }
36
+
37
+ resize() {
38
+ this.canvas.width = window.innerWidth;
39
+ this.canvas.height = window.innerHeight;
40
+ }
41
+
42
+ createParticles() {
43
+ this.particles = [];
44
+ for (let i = 0; i < this.config.particleCount; i++) {
45
+ this.particles.push({
46
+ x: Math.random() * this.canvas.width,
47
+ y: Math.random() * this.canvas.height,
48
+ vx: (Math.random() - 0.5) * this.config.speed,
49
+ vy: (Math.random() - 0.5) * this.config.speed,
50
+ size: Math.random() * this.config.particleSize + 1
51
+ });
52
+ }
53
+ }
54
+
55
+ bindEvents() {
56
+ window.addEventListener('resize', () => this.resize());
57
+
58
+ this.canvas.addEventListener('mousemove', (e) => {
59
+ this.mouse.x = e.clientX;
60
+ this.mouse.y = e.clientY;
61
+ });
62
+
63
+ this.canvas.addEventListener('mouseleave', () => {
64
+ this.mouse.x = -1000;
65
+ this.mouse.y = -1000;
66
+ });
67
+ }
68
+
69
+ updateParticles() {
70
+ this.particles.forEach(particle => {
71
+ // Update position
72
+ particle.x += particle.vx;
73
+ particle.y += particle.vy;
74
+
75
+ // Bounce off edges
76
+ if (particle.x < 0 || particle.x > this.canvas.width) {
77
+ particle.vx *= -1;
78
+ }
79
+ if (particle.y < 0 || particle.y > this.canvas.height) {
80
+ particle.vy *= -1;
81
+ }
82
+
83
+ // Keep particles in bounds
84
+ particle.x = Math.max(0, Math.min(this.canvas.width, particle.x));
85
+ particle.y = Math.max(0, Math.min(this.canvas.height, particle.y));
86
+
87
+ // Mouse interaction
88
+ const dx = this.mouse.x - particle.x;
89
+ const dy = this.mouse.y - particle.y;
90
+ const distance = Math.sqrt(dx * dx + dy * dy);
91
+
92
+ if (distance < this.config.mouseRadius) {
93
+ const force = (this.config.mouseRadius - distance) / this.config.mouseRadius;
94
+ particle.x -= dx * force * 0.01;
95
+ particle.y -= dy * force * 0.01;
96
+ }
97
+ });
98
+ }
99
+
100
+ drawParticles() {
101
+ this.particles.forEach(particle => {
102
+ this.ctx.beginPath();
103
+ this.ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);
104
+ this.ctx.fillStyle = this.config.colors.particle;
105
+ this.ctx.fill();
106
+
107
+ // Add glow effect
108
+ this.ctx.shadowBlur = 10;
109
+ this.ctx.shadowColor = this.config.colors.particle;
110
+ this.ctx.fill();
111
+ this.ctx.shadowBlur = 0;
112
+ });
113
+ }
114
+
115
+ drawConnections() {
116
+ for (let i = 0; i < this.particles.length; i++) {
117
+ for (let j = i + 1; j < this.particles.length; j++) {
118
+ const dx = this.particles[i].x - this.particles[j].x;
119
+ const dy = this.particles[i].y - this.particles[j].y;
120
+ const distance = Math.sqrt(dx * dx + dy * dy);
121
+
122
+ if (distance < this.config.connectionDistance) {
123
+ const opacity = 1 - (distance / this.config.connectionDistance);
124
+ this.ctx.beginPath();
125
+ this.ctx.moveTo(this.particles[i].x, this.particles[i].y);
126
+ this.ctx.lineTo(this.particles[j].x, this.particles[j].y);
127
+ this.ctx.strokeStyle = this.config.colors.connection.replace('0.2', opacity * 0.2);
128
+ this.ctx.lineWidth = 1;
129
+ this.ctx.stroke();
130
+ }
131
+ }
132
+ }
133
+ }
134
+
135
+ drawMouseConnections() {
136
+ this.particles.forEach(particle => {
137
+ const dx = this.mouse.x - particle.x;
138
+ const dy = this.mouse.y - particle.y;
139
+ const distance = Math.sqrt(dx * dx + dy * dy);
140
+
141
+ if (distance < this.config.mouseRadius) {
142
+ const opacity = 1 - (distance / this.config.mouseRadius);
143
+ this.ctx.beginPath();
144
+ this.ctx.moveTo(particle.x, particle.y);
145
+ this.ctx.lineTo(this.mouse.x, this.mouse.y);
146
+ this.ctx.strokeStyle = this.config.colors.mouseConnection.replace('0.4', opacity * 0.4);
147
+ this.ctx.lineWidth = 2;
148
+ this.ctx.stroke();
149
+ }
150
+ });
151
+ }
152
+
153
+ animate() {
154
+ this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
155
+
156
+ this.updateParticles();
157
+ this.drawConnections();
158
+ this.drawParticles();
159
+ this.drawMouseConnections();
160
+
161
+ this.animationId = requestAnimationFrame(() => this.animate());
162
+ }
163
+
164
+ destroy() {
165
+ if (this.animationId) {
166
+ cancelAnimationFrame(this.animationId);
167
+ }
168
+ window.removeEventListener('resize', this.resize);
169
+ }
170
+ }
171
+
172
+ // Initialize particle system when DOM is loaded
173
+ document.addEventListener('DOMContentLoaded', function() {
174
+ // Create canvas element
175
+ const canvas = document.createElement('canvas');
176
+ canvas.id = 'particle-canvas';
177
+ canvas.style.position = 'fixed';
178
+ canvas.style.top = '0';
179
+ canvas.style.left = '0';
180
+ canvas.style.width = '100%';
181
+ canvas.style.height = '100%';
182
+ canvas.style.pointerEvents = 'none';
183
+ canvas.style.zIndex = '1';
184
+ canvas.style.opacity = '0.7';
185
+
186
+ // Insert canvas as first child of body
187
+ document.body.insertBefore(canvas, document.body.firstChild);
188
+
189
+ // Initialize particle system
190
+ const particleSystem = new ParticleSystem(canvas);
191
+
192
+ // Store reference for cleanup
193
+ window.particleSystem = particleSystem;
194
+ });
195
+
196
+ // Cleanup on page unload
197
+ window.addEventListener('beforeunload', function() {
198
+ if (window.particleSystem) {
199
+ window.particleSystem.destroy();
200
+ }
201
+ });