flowllm 0.1.1__py3-none-any.whl → 0.1.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.
- flowllm/__init__.py +15 -6
- flowllm/app.py +4 -14
- flowllm/client/__init__.py +25 -0
- flowllm/client/async_http_client.py +81 -0
- flowllm/client/http_client.py +81 -0
- flowllm/client/mcp_client.py +133 -0
- flowllm/client/sync_mcp_client.py +116 -0
- flowllm/config/__init__.py +1 -0
- flowllm/config/{default_config.yaml → default.yaml} +3 -8
- flowllm/config/empty.yaml +37 -0
- flowllm/config/pydantic_config_parser.py +17 -17
- flowllm/context/base_context.py +27 -7
- flowllm/context/flow_context.py +6 -18
- flowllm/context/registry.py +5 -1
- flowllm/context/service_context.py +81 -37
- flowllm/embedding_model/__init__.py +1 -1
- flowllm/embedding_model/base_embedding_model.py +91 -0
- flowllm/embedding_model/openai_compatible_embedding_model.py +63 -5
- flowllm/flow/__init__.py +1 -0
- flowllm/flow/base_flow.py +72 -0
- flowllm/flow/base_tool_flow.py +15 -0
- flowllm/flow/gallery/__init__.py +8 -0
- flowllm/flow/gallery/cmd_flow.py +11 -0
- flowllm/flow/gallery/code_tool_flow.py +30 -0
- flowllm/flow/gallery/dashscope_search_tool_flow.py +34 -0
- flowllm/flow/gallery/deepsearch_tool_flow.py +39 -0
- flowllm/flow/gallery/expression_tool_flow.py +18 -0
- flowllm/flow/gallery/mock_tool_flow.py +67 -0
- flowllm/flow/gallery/tavily_search_tool_flow.py +30 -0
- flowllm/flow/gallery/terminate_tool_flow.py +30 -0
- flowllm/flow/parser/__init__.py +0 -0
- flowllm/{flow_engine/simple_flow_engine.py → flow/parser/expression_parser.py} +25 -67
- flowllm/llm/__init__.py +2 -1
- flowllm/llm/base_llm.py +94 -4
- flowllm/llm/litellm_llm.py +455 -0
- flowllm/llm/openai_compatible_llm.py +205 -5
- flowllm/op/__init__.py +11 -3
- flowllm/op/agent/__init__.py +0 -0
- flowllm/op/agent/react_op.py +83 -0
- flowllm/op/agent/react_prompt.yaml +28 -0
- flowllm/op/akshare/__init__.py +3 -0
- flowllm/op/akshare/get_ak_a_code_op.py +14 -22
- flowllm/op/akshare/get_ak_a_info_op.py +17 -20
- flowllm/op/{llm_base_op.py → base_llm_op.py} +6 -5
- flowllm/op/base_op.py +14 -35
- flowllm/op/base_ray_op.py +313 -0
- flowllm/op/code/__init__.py +1 -0
- flowllm/op/code/execute_code_op.py +42 -0
- flowllm/op/gallery/__init__.py +2 -0
- flowllm/op/{mock_op.py → gallery/mock_op.py} +4 -4
- flowllm/op/gallery/terminate_op.py +29 -0
- flowllm/op/parallel_op.py +2 -9
- flowllm/op/search/__init__.py +3 -0
- flowllm/op/search/dashscope_deep_research_op.py +260 -0
- flowllm/op/search/dashscope_search_op.py +179 -0
- flowllm/op/search/dashscope_search_prompt.yaml +13 -0
- flowllm/op/search/tavily_search_op.py +102 -0
- flowllm/op/sequential_op.py +1 -9
- flowllm/schema/flow_request.py +12 -0
- flowllm/schema/service_config.py +12 -16
- flowllm/schema/tool_call.py +13 -5
- flowllm/schema/vector_node.py +1 -0
- flowllm/service/__init__.py +3 -2
- flowllm/service/base_service.py +50 -41
- flowllm/service/cmd_service.py +15 -0
- flowllm/service/http_service.py +34 -42
- flowllm/service/mcp_service.py +13 -11
- flowllm/storage/cache/__init__.py +1 -0
- flowllm/storage/cache/cache_data_handler.py +104 -0
- flowllm/{utils/dataframe_cache.py → storage/cache/data_cache.py} +136 -92
- flowllm/storage/vector_store/__init__.py +3 -3
- flowllm/storage/vector_store/es_vector_store.py +1 -2
- flowllm/storage/vector_store/local_vector_store.py +0 -1
- flowllm/utils/common_utils.py +9 -21
- flowllm/utils/fetch_url.py +16 -12
- flowllm/utils/llm_utils.py +28 -0
- flowllm/utils/ridge_v2.py +54 -0
- {flowllm-0.1.1.dist-info → flowllm-0.1.2.dist-info}/METADATA +43 -390
- flowllm-0.1.2.dist-info/RECORD +99 -0
- flowllm-0.1.2.dist-info/entry_points.txt +2 -0
- flowllm/flow_engine/__init__.py +0 -1
- flowllm/flow_engine/base_flow_engine.py +0 -34
- flowllm-0.1.1.dist-info/RECORD +0 -62
- flowllm-0.1.1.dist-info/entry_points.txt +0 -4
- {flowllm-0.1.1.dist-info → flowllm-0.1.2.dist-info}/WHEEL +0 -0
- {flowllm-0.1.1.dist-info → flowllm-0.1.2.dist-info}/licenses/LICENSE +0 -0
- {flowllm-0.1.1.dist-info → flowllm-0.1.2.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: flowllm
|
3
|
-
Version: 0.1.
|
4
|
-
Summary:
|
3
|
+
Version: 0.1.2
|
4
|
+
Summary: A flexible framework for building LLM-powered flows and mcp services
|
5
|
+
Author-email: FlowLLM Team <flowllm@example.com>
|
6
|
+
Maintainer-email: FlowLLM Team <flowllm@example.com>
|
5
7
|
License: Apache License
|
6
8
|
Version 2.0, January 2004
|
7
9
|
http://www.apache.org/licenses/
|
@@ -204,398 +206,49 @@ License: Apache License
|
|
204
206
|
See the License for the specific language governing permissions and
|
205
207
|
limitations under the License.
|
206
208
|
|
207
|
-
|
209
|
+
Keywords: llm,ai,flow,framework,openai,chatgpt,language-model,mcp,http
|
210
|
+
Classifier: Development Status :: 3 - Alpha
|
211
|
+
Classifier: Intended Audience :: Developers
|
212
|
+
Classifier: Intended Audience :: Science/Research
|
208
213
|
Classifier: License :: OSI Approved :: Apache Software License
|
209
214
|
Classifier: Operating System :: OS Independent
|
215
|
+
Classifier: Programming Language :: Python :: 3
|
216
|
+
Classifier: Programming Language :: Python :: 3.12
|
217
|
+
Classifier: Programming Language :: Python :: 3.13
|
218
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
219
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
220
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
221
|
+
Classifier: Typing :: Typed
|
210
222
|
Requires-Python: >=3.12
|
211
223
|
Description-Content-Type: text/markdown
|
212
224
|
License-File: LICENSE
|
213
|
-
Requires-Dist: dashscope>=1.19.1
|
214
|
-
Requires-Dist: elasticsearch>=8.14.0
|
215
|
-
Requires-Dist: fastapi>=0.115.13
|
216
|
-
Requires-Dist: fastmcp>=2.10.6
|
217
|
-
Requires-Dist: loguru>=0.7.3
|
218
|
-
Requires-Dist: mcp>=1.9.4
|
219
|
-
Requires-Dist: numpy>=2.3.0
|
220
|
-
Requires-Dist: openai>=1.88.0
|
221
|
-
Requires-Dist: pydantic>=2.11.7
|
222
|
-
Requires-Dist: PyYAML>=6.0.2
|
223
|
-
Requires-Dist: Requests>=2.32.4
|
224
|
-
Requires-Dist: uvicorn>=0.34.3
|
225
|
-
Requires-Dist: setuptools>=75.0
|
226
225
|
Requires-Dist: akshare
|
226
|
+
Requires-Dist: beautifulsoup4
|
227
|
+
Requires-Dist: dashscope
|
228
|
+
Requires-Dist: elasticsearch
|
229
|
+
Requires-Dist: fastapi
|
230
|
+
Requires-Dist: fastmcp
|
231
|
+
Requires-Dist: httpx
|
232
|
+
Requires-Dist: litellm
|
233
|
+
Requires-Dist: loguru
|
234
|
+
Requires-Dist: mcp
|
235
|
+
Requires-Dist: numpy
|
236
|
+
Requires-Dist: openai
|
237
|
+
Requires-Dist: pandas
|
238
|
+
Requires-Dist: pydantic
|
239
|
+
Requires-Dist: PyYAML
|
240
|
+
Requires-Dist: ray
|
241
|
+
Requires-Dist: requests
|
242
|
+
Requires-Dist: scikit-learn
|
243
|
+
Requires-Dist: tavily-python
|
244
|
+
Requires-Dist: tqdm
|
245
|
+
Requires-Dist: urllib3
|
246
|
+
Requires-Dist: uvicorn[standard]
|
247
|
+
Requires-Dist: chromadb
|
248
|
+
Requires-Dist: elasticsearch
|
249
|
+
Requires-Dist: ray
|
250
|
+
Provides-Extra: distributed
|
251
|
+
Requires-Dist: ray; extra == "distributed"
|
252
|
+
Provides-Extra: all
|
253
|
+
Requires-Dist: flowllm[distributed]; extra == "all"
|
227
254
|
Dynamic: license-file
|
228
|
-
|
229
|
-
# flowllm
|
230
|
-
|
231
|
-
[](https://www.python.org/downloads/)
|
232
|
-
[](https://opensource.org/licenses/Apache-2.0)
|
233
|
-
|
234
|
-
flowllm is a flexible large language model workflow framework that provides a modular pipeline architecture for building complex AI applications. The framework supports multiple LLM providers, vector storage backends, and tool integrations, enabling you to easily build Retrieval-Augmented Generation (RAG), intelligent agents, and other AI-powered applications.
|
235
|
-
|
236
|
-
## 🚀 Key Features
|
237
|
-
|
238
|
-
### 🔧 Modular Architecture
|
239
|
-
- **Pipeline System**: Flexible pipeline configuration supporting both serial and parallel operations
|
240
|
-
- **Operation Registry**: Extensible operation registry with support for custom operations
|
241
|
-
- **Configuration-Driven**: Manage entire applications through YAML configuration files
|
242
|
-
|
243
|
-
### 🤖 LLM Support
|
244
|
-
- **Multi-Provider Compatible**: Support for OpenAI-compatible APIs
|
245
|
-
- **Streaming Responses**: Real-time streaming output support
|
246
|
-
- **Tool Calling**: Built-in tool calling and parallel execution support
|
247
|
-
- **Reasoning Mode**: Chain-of-thought reasoning support
|
248
|
-
|
249
|
-
### 📚 Vector Storage
|
250
|
-
- **Multi-Backend Support**:
|
251
|
-
- Elasticsearch
|
252
|
-
- ChromaDB
|
253
|
-
- Local file storage
|
254
|
-
- **Embedding Models**: Support for multiple embedding models
|
255
|
-
- **Workspace Management**: Multi-tenant vector storage management
|
256
|
-
|
257
|
-
### 🛠️ Rich Tool Ecosystem
|
258
|
-
- **Code Execution**: Python code execution tool
|
259
|
-
- **Web Search**: Integrated Tavily and DashScope search
|
260
|
-
- **MCP Protocol**: Model Context Protocol support
|
261
|
-
- **Termination Control**: Intelligent conversation termination management
|
262
|
-
|
263
|
-
### 🌐 API Services
|
264
|
-
- **RESTful API**: FastAPI-powered HTTP services
|
265
|
-
- **MCP Server**: Model Context Protocol server support
|
266
|
-
- **Multiple Endpoints**: Retriever, summarizer, vector store, agent APIs
|
267
|
-
|
268
|
-
## 📦 Installation
|
269
|
-
|
270
|
-
### Prerequisites
|
271
|
-
- Python 3.12+
|
272
|
-
- pip or poetry
|
273
|
-
|
274
|
-
### Installation Steps
|
275
|
-
|
276
|
-
```bash
|
277
|
-
# Clone the repository
|
278
|
-
git clone https://github.com/your-username/flowllm.git
|
279
|
-
cd flowllm
|
280
|
-
|
281
|
-
# Install dependencies
|
282
|
-
pip install -e .
|
283
|
-
|
284
|
-
# Or using poetry
|
285
|
-
poetry install
|
286
|
-
```
|
287
|
-
|
288
|
-
### Environment Configuration
|
289
|
-
|
290
|
-
Copy the environment template:
|
291
|
-
```bash
|
292
|
-
cp example.env .env
|
293
|
-
```
|
294
|
-
|
295
|
-
Edit the `.env` file to configure necessary API keys:
|
296
|
-
|
297
|
-
```bash
|
298
|
-
# LLM Configuration
|
299
|
-
LLM_API_KEY=sk-your-llm-api-key
|
300
|
-
LLM_BASE_URL=https://your-llm-endpoint/v1
|
301
|
-
|
302
|
-
# Embedding Model Configuration
|
303
|
-
EMBEDDING_API_KEY=sk-your-embedding-api-key
|
304
|
-
EMBEDDING_BASE_URL=https://your-embedding-endpoint/v1
|
305
|
-
|
306
|
-
# Elasticsearch (Optional)
|
307
|
-
ES_HOSTS=http://localhost:9200
|
308
|
-
|
309
|
-
# DashScope Search (Optional)
|
310
|
-
DASHSCOPE_API_KEY=sk-your-dashscope-key
|
311
|
-
```
|
312
|
-
|
313
|
-
## 🏃 Quick Start
|
314
|
-
|
315
|
-
### 1. Start HTTP Service
|
316
|
-
|
317
|
-
```bash
|
318
|
-
flowllm \
|
319
|
-
http_service.port=8001 \
|
320
|
-
llm.default.model_name=qwen3-32b \
|
321
|
-
embedding_model.default.model_name=text-embedding-v4 \
|
322
|
-
vector_store.default.backend=local_file
|
323
|
-
```
|
324
|
-
|
325
|
-
### 2. Start MCP Server
|
326
|
-
|
327
|
-
```bash
|
328
|
-
flowllm_mcp \
|
329
|
-
mcp_transport=stdio \
|
330
|
-
http_service.port=8001 \
|
331
|
-
llm.default.model_name=qwen3-32b \
|
332
|
-
embedding_model.default.model_name=text-embedding-v4 \
|
333
|
-
vector_store.default.backend=local_file
|
334
|
-
```
|
335
|
-
|
336
|
-
### 3. API Usage Examples
|
337
|
-
|
338
|
-
#### Retriever API
|
339
|
-
```python
|
340
|
-
import requests
|
341
|
-
|
342
|
-
response = requests.post('http://localhost:8001/retriever', json={
|
343
|
-
"query": "What is artificial intelligence?",
|
344
|
-
"top_k": 5,
|
345
|
-
"workspace_id": "default",
|
346
|
-
"config": {}
|
347
|
-
})
|
348
|
-
print(response.json())
|
349
|
-
```
|
350
|
-
|
351
|
-
#### Agent API
|
352
|
-
```python
|
353
|
-
response = requests.post('http://localhost:8001/agent', json={
|
354
|
-
"query": "Help me search for the latest AI technology trends",
|
355
|
-
"workspace_id": "default",
|
356
|
-
"config": {}
|
357
|
-
})
|
358
|
-
print(response.json())
|
359
|
-
```
|
360
|
-
|
361
|
-
## ⚙️ Configuration Guide
|
362
|
-
|
363
|
-
### Pipeline Configuration Syntax
|
364
|
-
|
365
|
-
flowllm uses an intuitive string syntax to define operation pipelines:
|
366
|
-
|
367
|
-
```yaml
|
368
|
-
api:
|
369
|
-
# Serial execution: op1 -> op2 -> op3
|
370
|
-
retriever: recall_vector_store_op->summarizer_op
|
371
|
-
|
372
|
-
# Parallel execution: [op1 | op2] runs in parallel
|
373
|
-
summarizer: mock1_op->[mock4_op->mock2_op|mock5_op]->mock3_op
|
374
|
-
|
375
|
-
# Mixed mode: combination of serial and parallel
|
376
|
-
agent: react_v1_op
|
377
|
-
```
|
378
|
-
|
379
|
-
### Complete Configuration Example
|
380
|
-
|
381
|
-
```yaml
|
382
|
-
# HTTP Service Configuration
|
383
|
-
http_service:
|
384
|
-
host: "0.0.0.0"
|
385
|
-
port: 8001
|
386
|
-
timeout_keep_alive: 600
|
387
|
-
limit_concurrency: 64
|
388
|
-
|
389
|
-
# Thread Pool Configuration
|
390
|
-
thread_pool:
|
391
|
-
max_workers: 10
|
392
|
-
|
393
|
-
# API Pipeline Definitions
|
394
|
-
api:
|
395
|
-
retriever: recall_vector_store_op
|
396
|
-
summarizer: update_vector_store_op
|
397
|
-
vector_store: vector_store_action_op
|
398
|
-
agent: react_v1_op
|
399
|
-
|
400
|
-
# Operation Configuration
|
401
|
-
op:
|
402
|
-
react_v1_op:
|
403
|
-
backend: react_v1_op
|
404
|
-
llm: default
|
405
|
-
params:
|
406
|
-
max_steps: 10
|
407
|
-
tool_names: "code_tool,tavily_search_tool,terminate_tool"
|
408
|
-
|
409
|
-
# LLM Configuration
|
410
|
-
llm:
|
411
|
-
default:
|
412
|
-
backend: openai_compatible
|
413
|
-
model_name: qwen3-32b
|
414
|
-
params:
|
415
|
-
temperature: 0.6
|
416
|
-
max_retries: 5
|
417
|
-
|
418
|
-
# Embedding Model Configuration
|
419
|
-
embedding_model:
|
420
|
-
default:
|
421
|
-
backend: openai_compatible
|
422
|
-
model_name: text-embedding-v4
|
423
|
-
params:
|
424
|
-
dimensions: 1024
|
425
|
-
|
426
|
-
# Vector Store Configuration
|
427
|
-
vector_store:
|
428
|
-
default:
|
429
|
-
backend: local_file # or elasticsearch, chroma
|
430
|
-
embedding_model: default
|
431
|
-
params:
|
432
|
-
store_dir: "./vector_store_data"
|
433
|
-
```
|
434
|
-
|
435
|
-
## 🧩 Architecture Design
|
436
|
-
|
437
|
-
### Core Components
|
438
|
-
|
439
|
-
```
|
440
|
-
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
441
|
-
│ FastAPI App │ │ MCP Server │ │ Configuration │
|
442
|
-
│ │ │ │ │ Parser │
|
443
|
-
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
444
|
-
│ │ │
|
445
|
-
└───────────────────────┼───────────────────────┘
|
446
|
-
│
|
447
|
-
┌─────────────────┐
|
448
|
-
│ flowllm Service │
|
449
|
-
└─────────────────┘
|
450
|
-
│
|
451
|
-
┌─────────────────┐
|
452
|
-
│ Pipeline │
|
453
|
-
│ Context │
|
454
|
-
└─────────────────┘
|
455
|
-
│
|
456
|
-
┌───────────────────┼───────────────────┐
|
457
|
-
│ │ │
|
458
|
-
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
459
|
-
│ Operations │ │ Tools │ │Vector Stores│
|
460
|
-
│ │ │ │ │ │
|
461
|
-
│ • ReAct │ │ • Code │ │ • File │
|
462
|
-
│ • Recall │ │ • Search │ │ • ES │
|
463
|
-
│ • Update │ │ • MCP │ │ • Chroma │
|
464
|
-
│ • Mock │ │ • Terminate │ │ │
|
465
|
-
└─────────────┘ └─────────────┘ └─────────────┘
|
466
|
-
```
|
467
|
-
|
468
|
-
### Data Flow
|
469
|
-
|
470
|
-
```
|
471
|
-
Request → Configuration → Pipeline → Operations → Tools/VectorStore → Response
|
472
|
-
```
|
473
|
-
|
474
|
-
## 🔧 Development Guide
|
475
|
-
|
476
|
-
### Custom Operations
|
477
|
-
|
478
|
-
```python
|
479
|
-
from old.op import OP_REGISTRY
|
480
|
-
from old.op.base_op import BaseOp
|
481
|
-
|
482
|
-
|
483
|
-
@OP_REGISTRY.register()
|
484
|
-
class CustomOp(BaseOp):
|
485
|
-
def execute(self):
|
486
|
-
# Implement your custom logic
|
487
|
-
request = self.context.request
|
488
|
-
response = self.context.response
|
489
|
-
|
490
|
-
# Process request
|
491
|
-
result = self.process_data(request.query)
|
492
|
-
|
493
|
-
# Update response
|
494
|
-
response.metadata["custom_result"] = result
|
495
|
-
```
|
496
|
-
|
497
|
-
### Custom Tools
|
498
|
-
|
499
|
-
```python
|
500
|
-
from old.tool import TOOL_REGISTRY
|
501
|
-
from old.tool.base_tool import BaseTool
|
502
|
-
|
503
|
-
|
504
|
-
@TOOL_REGISTRY.register()
|
505
|
-
class CustomTool(BaseTool):
|
506
|
-
name: str = "custom_tool"
|
507
|
-
description: str = "Custom tool description"
|
508
|
-
parameters: dict = {
|
509
|
-
"type": "object",
|
510
|
-
"properties": {
|
511
|
-
"input": {"type": "string", "description": "Input parameter"}
|
512
|
-
},
|
513
|
-
"required": ["input"]
|
514
|
-
}
|
515
|
-
|
516
|
-
def _execute(self, input: str, **kwargs):
|
517
|
-
# Implement tool logic
|
518
|
-
return f"Processing result: {input}"
|
519
|
-
```
|
520
|
-
|
521
|
-
### Custom Vector Stores
|
522
|
-
|
523
|
-
```python
|
524
|
-
from old.vector_store import VECTOR_STORE_REGISTRY
|
525
|
-
from old.vector_store.base_vector_store import BaseVectorStore
|
526
|
-
|
527
|
-
|
528
|
-
@VECTOR_STORE_REGISTRY.register("custom_store")
|
529
|
-
class CustomVectorStore(BaseVectorStore):
|
530
|
-
def search(self, query: str, top_k: int = 10, **kwargs):
|
531
|
-
# Implement search logic
|
532
|
-
pass
|
533
|
-
|
534
|
-
def insert(self, nodes: List[VectorNode], **kwargs):
|
535
|
-
# Implement insertion logic
|
536
|
-
pass
|
537
|
-
```
|
538
|
-
|
539
|
-
## 🧪 Testing
|
540
|
-
|
541
|
-
```bash
|
542
|
-
# Run tests
|
543
|
-
pytest
|
544
|
-
|
545
|
-
# Run specific tests
|
546
|
-
pytest tests/test_pipeline.py
|
547
|
-
|
548
|
-
# Generate coverage report
|
549
|
-
pytest --cov=flowllm tests/
|
550
|
-
```
|
551
|
-
|
552
|
-
## 🤝 Contributing
|
553
|
-
|
554
|
-
We welcome community contributions! Please follow these steps:
|
555
|
-
|
556
|
-
1. Fork the repository
|
557
|
-
2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
|
558
|
-
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
559
|
-
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
560
|
-
5. Open a Pull Request
|
561
|
-
|
562
|
-
### Development Environment Setup
|
563
|
-
|
564
|
-
```bash
|
565
|
-
# Install development dependencies
|
566
|
-
pip install -e ".[dev]"
|
567
|
-
|
568
|
-
# Install pre-commit hooks
|
569
|
-
pre-commit install
|
570
|
-
|
571
|
-
# Run code formatting
|
572
|
-
black flowllm/
|
573
|
-
isort flowllm/
|
574
|
-
|
575
|
-
# Run type checking
|
576
|
-
mypy flowllm/
|
577
|
-
```
|
578
|
-
|
579
|
-
## 📚 Documentation
|
580
|
-
|
581
|
-
- [API Documentation](docs/api.md)
|
582
|
-
- [Configuration Guide](docs/configuration.md)
|
583
|
-
- [Operations Development](docs/operations.md)
|
584
|
-
- [Tools Development](docs/tools.md)
|
585
|
-
- [Deployment Guide](docs/deployment.md)
|
586
|
-
|
587
|
-
## 🐛 Bug Reports
|
588
|
-
|
589
|
-
If you find bugs or have feature requests, please create an issue on [GitHub Issues](https://github.com/your-username/flowllm/issues).
|
590
|
-
|
591
|
-
## 📄 License
|
592
|
-
|
593
|
-
This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.
|
594
|
-
|
595
|
-
## 🙏 Acknowledgments
|
596
|
-
|
597
|
-
Thanks to all developers and community members who have contributed to the flowllm project.
|
598
|
-
|
599
|
-
---
|
600
|
-
|
601
|
-
**flowllm** - Making AI workflow development simple and powerful 🚀
|
@@ -0,0 +1,99 @@
|
|
1
|
+
flowllm/__init__.py,sha256=8BSQq5dCwf6h773C8ctRCfqElhRi26NOxcNvc7MlW7g,436
|
2
|
+
flowllm/app.py,sha256=oo_7c1sXeWOEkdIL40b_Yv-vkvu6YWhs3w49SojE4bs,238
|
3
|
+
flowllm/client/__init__.py,sha256=ruBU6hBC7LWoVg5oNdZBTqi3MhNUhkCYAHhPj-UJKEA,815
|
4
|
+
flowllm/client/async_http_client.py,sha256=w3YUsCTlART3HvAIpf30ZIX4m7L7k9f9iZejkNBq_h8,3026
|
5
|
+
flowllm/client/http_client.py,sha256=rk6-hF3lqwn8a2igQjBuRz7JOV9lJJrNYlC7Xk18Zwo,2930
|
6
|
+
flowllm/client/mcp_client.py,sha256=dFJvHqqVpUv7icIUNKdJpfQI1FXx3zF76Lgnbyyp8Go,4867
|
7
|
+
flowllm/client/sync_mcp_client.py,sha256=Csv5hwlPDDCktM9qqLqdQkSG039ooiSurN5DMcJfrq8,4305
|
8
|
+
flowllm/config/__init__.py,sha256=fUjhShdU7qN6hfj7blDt7nHBQGlWwbhaa_p9_6vDpg8,57
|
9
|
+
flowllm/config/default.yaml,sha256=aMbEVThmwd7T-d9s3ovj8ljcIj-rNTMSJjGunXZQ3Vo,2015
|
10
|
+
flowllm/config/empty.yaml,sha256=Ysnu12YDBo9fJ2F6ha2rhEgDiUD7KbkqNYZ2TVk28V8,625
|
11
|
+
flowllm/config/pydantic_config_parser.py,sha256=J6o0NwimyLTMhKmSkmlNXv71JngzgupY9EFuBzqr7ts,6942
|
12
|
+
flowllm/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
|
+
flowllm/context/base_context.py,sha256=NTP6EzfIlcjvwT5-wYDL5_gDoH88rAxTqsknR97txYg,2227
|
14
|
+
flowllm/context/flow_context.py,sha256=-r96PgXC7BXVjA6bbUKw_cI5r3VRgQJ0AqG3iES4xSw,463
|
15
|
+
flowllm/context/prompt_handler.py,sha256=LbMJDwrzz8HF7HVDyphVSWI1X4QHMebJqLP4XeXkXOE,2667
|
16
|
+
flowllm/context/registry.py,sha256=zJf8SYi8ziFTdf2EG9Ut2_3sxEffchrl81W-VbcoEns,1110
|
17
|
+
flowllm/context/service_context.py,sha256=PnLiH1AwcYxpg6YAsVin2y82QDvbYmt8eg8qsJom3cw,5786
|
18
|
+
flowllm/embedding_model/__init__.py,sha256=jHxnI2xySqYcu7Y2wxmlmpIyYeKH_4PuNCBNvouXhEE,78
|
19
|
+
flowllm/embedding_model/base_embedding_model.py,sha256=oIySUu6_ROEXw13jtKYUtnL0bgBQdHtNZqnPPxatG9I,8021
|
20
|
+
flowllm/embedding_model/openai_compatible_embedding_model.py,sha256=N873ZlMdoB6iRu-oXkXlNNkIdH6F4hFN3ND7EA0FcwA,5490
|
21
|
+
flowllm/enumeration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
+
flowllm/enumeration/chunk_enum.py,sha256=EYB0a84qtrph5H7h_m05Qeo5B00B3xnSOt9KBb5CCJY,152
|
23
|
+
flowllm/enumeration/http_enum.py,sha256=ddIYeVz2J8CInzEkhWbz1rPe0qh2FVfryNNE1uc1ioM,141
|
24
|
+
flowllm/enumeration/role.py,sha256=SFMGXmwYFndGIwbr9GxS3OIoHIZ_nO23DeRnqpV4U3g,133
|
25
|
+
flowllm/flow/__init__.py,sha256=m2SCRH8CbDGsYXaUn99FGD9bz5KoDpLAcFu1GXu3GCo,22
|
26
|
+
flowllm/flow/base_flow.py,sha256=wngyIzkKMbv_tI_kSGnQuoU1kiC7KKvGz3t2R-ziyMk,2445
|
27
|
+
flowllm/flow/base_tool_flow.py,sha256=eC-V9kafecsXJixqXGfmD1DF70tA8ClM2f4rnW2K1vU,368
|
28
|
+
flowllm/flow/gallery/__init__.py,sha256=fT1aFrcw-QvFkEnPkOXHMZNK9IDapH0U_iEfwRbq7oI,391
|
29
|
+
flowllm/flow/gallery/cmd_flow.py,sha256=nqwMufrJWsJLmNaIVwJ6M11Hnxfpl1FvW07EC95qzN0,337
|
30
|
+
flowllm/flow/gallery/code_tool_flow.py,sha256=s-97BHplWO4Me4eTPNDltZL7XcGIAsz8IBL86mMoiVk,1075
|
31
|
+
flowllm/flow/gallery/dashscope_search_tool_flow.py,sha256=RxyWNQ-h0tt7236H7fAURqDEKNvccI5jGQA07TAKbLg,1153
|
32
|
+
flowllm/flow/gallery/deepsearch_tool_flow.py,sha256=_3JUiNivDGZxo-i1zHtX3MPMuqJSZXEZ2A2Mm_IUIY8,1426
|
33
|
+
flowllm/flow/gallery/expression_tool_flow.py,sha256=U0s9znCPSFwuqc7SalidjDGI-0kr9KGK3fWEQCN_q58,665
|
34
|
+
flowllm/flow/gallery/mock_tool_flow.py,sha256=InDQnMgHKUoiMbpUQ4Fa7HJaQ6TczbFjvZ7R2onZycE,2424
|
35
|
+
flowllm/flow/gallery/tavily_search_tool_flow.py,sha256=DJeHx-ry4cAOaVsRy28Kob3ecwnq41bsAo0gTmokArE,1046
|
36
|
+
flowllm/flow/gallery/terminate_tool_flow.py,sha256=6BgJE81ODLXXvc6GH6n1_twh5O052zHB62PEGm7OtH8,1103
|
37
|
+
flowllm/flow/parser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
|
+
flowllm/flow/parser/expression_parser.py,sha256=E8ZGmrdFpOgUQBtXxtVXb-BD7RUtfLkcWsIQBKTqdcA,5990
|
39
|
+
flowllm/llm/__init__.py,sha256=c2akU1k4IVT6PoW3FdKlFmQNZj7MVCzV_VTUw5VpDrc,99
|
40
|
+
flowllm/llm/base_llm.py,sha256=6YDlb9B9q4zQGQjFLVKNdd7JoELws9IzHebs2nDfUzc,9554
|
41
|
+
flowllm/llm/litellm_llm.py,sha256=EcgPMUo3i9TJ440bVwHzMQC8zuzSoYVdRdsr94jFziA,19387
|
42
|
+
flowllm/llm/openai_compatible_llm.py,sha256=MKbe4-p4NkCBCCkrty0mFsBTRpXctI-7rz0-2kzvNQo,18534
|
43
|
+
flowllm/op/__init__.py,sha256=4tRRZGMB3g_ketMW9Tk3fUcxkGAmNjmzfZWHeF4Jfbg,201
|
44
|
+
flowllm/op/base_llm_op.py,sha256=vDbXuhv1s94FmRCk6W55Y5A1qrJMCoT6LyfZjUwJykA,2669
|
45
|
+
flowllm/op/base_op.py,sha256=F-wdUwYfFWr-UJXJDN9qxI7B87ETfGidPvbakziYs3U,4147
|
46
|
+
flowllm/op/base_ray_op.py,sha256=-nRbad0pQ4qkZaDbonBDf6qh_dzktzOTCc-XkiLiIT4,11238
|
47
|
+
flowllm/op/parallel_op.py,sha256=Q66uB-uINsBj_m6NH140kiQPN1o9aw-wkc_5y74EaRY,551
|
48
|
+
flowllm/op/sequential_op.py,sha256=F8YTNCvPL0WsC_6Al9utnCErGnnnsEpaw4MVeUX3Skk,477
|
49
|
+
flowllm/op/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
+
flowllm/op/agent/react_op.py,sha256=2pL19P3cD-pUjimCBWUhdVE_B6dxcjLH3empU12L5IA,3683
|
51
|
+
flowllm/op/agent/react_prompt.yaml,sha256=XL8NLutlT5cuJAbWxw1Acu4NKuBoHx5h9iXVr-c30js,1552
|
52
|
+
flowllm/op/akshare/__init__.py,sha256=PaCPzBv-csRgmtmBjoYqxvOgAB3Vp8EeSGP3rGw6rc8,178
|
53
|
+
flowllm/op/akshare/get_ak_a_code_op.py,sha256=Pa766YbR_SPLHbQZQpW0UBBUBcXqigeEj10ypp3V3K4,3855
|
54
|
+
flowllm/op/akshare/get_ak_a_code_prompt.yaml,sha256=NwGJygecUwspQvrg98GdMpcmQESpZ2Kf5YprhM2PyZU,608
|
55
|
+
flowllm/op/akshare/get_ak_a_info_op.py,sha256=R0O4Ze_1oNjNIREJd6SoANWewrAnasg8R033lbqF81o,4497
|
56
|
+
flowllm/op/code/__init__.py,sha256=5lV5jHJ-qTdyf5yprrgWZTmu5n68T2gXFByhTIMI_I0,43
|
57
|
+
flowllm/op/code/execute_code_op.py,sha256=y6_CkllKJpxPqD0c6IVcbluK9RK8lCKifDIoCHqFHdE,1114
|
58
|
+
flowllm/op/gallery/__init__.py,sha256=5S2pzO65wOpE7PnirS6FiBN1uEm49Y40PZiW9EnGMn0,112
|
59
|
+
flowllm/op/gallery/mock_op.py,sha256=3GfqtOQm87A9TmZTD5Z4jcAxqPbtvmNQA7qTFcp897E,664
|
60
|
+
flowllm/op/gallery/terminate_op.py,sha256=dHiXONYDXkhePsmzAMa8FRktodZroB_G-UXApTNME3w,866
|
61
|
+
flowllm/op/search/__init__.py,sha256=iCxX7lBOWmgBM-xiLUN3SAB3LtYiS4Dk9ZEew-vlIBM,160
|
62
|
+
flowllm/op/search/dashscope_deep_research_op.py,sha256=FjWsk7UIIj6P3rqgcl9Nvo7BhIJGHHcOF4F-AltfZfo,11498
|
63
|
+
flowllm/op/search/dashscope_search_op.py,sha256=qlCOZLNlb8K4VCfOyrcQ21iNPojVPBujOWgKcNbzcEA,6931
|
64
|
+
flowllm/op/search/dashscope_search_prompt.yaml,sha256=NPsS3QCo8xlRpWw7fyMpuYBeOXSAtXscwGO-cVgUNFw,355
|
65
|
+
flowllm/op/search/tavily_search_op.py,sha256=F9gD0rLRo5sTvoeSP8CW2nqoAyDLNJjBYNU5-eH98z8,3814
|
66
|
+
flowllm/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
67
|
+
flowllm/schema/flow_request.py,sha256=jaOgEJ7XRWNgS_QTCBOOsa6hKtdgqnXVC7S4Vi6lMBg,338
|
68
|
+
flowllm/schema/flow_response.py,sha256=BusrfkJ8OCGk9Tp1KCWVSt33L2t_pYpn9QRqS0bjDcw,323
|
69
|
+
flowllm/schema/message.py,sha256=yxbKvH7TRECozUYdm141q84QGoqyOe3krSXgzWRdWHs,1220
|
70
|
+
flowllm/schema/service_config.py,sha256=Gaw-EKuwc7kmdR1yaVN04qruaESeUSguivK4JUfCPBQ,2324
|
71
|
+
flowllm/schema/tool_call.py,sha256=lz8x5hVuF2w05QHscgWmWuyfvU_FVxp7Ut0_L8oy1ig,3959
|
72
|
+
flowllm/schema/vector_node.py,sha256=Urs9EyzzjuQVYPCB_Pfp0iK2npWWCJSXdT6uDLdT05w,362
|
73
|
+
flowllm/service/__init__.py,sha256=Jr-f0i1yCIoM4XZ3SbOcqMU81Np3YgNZs6z36YfUpzQ,110
|
74
|
+
flowllm/service/base_service.py,sha256=6KJnIVkaIBNHwtQY83LmEMoTiMK5qI0ZtNMmIVjEZ5E,2335
|
75
|
+
flowllm/service/cmd_service.py,sha256=TfN2TLVNR75jUcAgjeOkxsA7ORCkERvRkuCE3Get7f0,464
|
76
|
+
flowllm/service/http_service.py,sha256=Kidb-J6FYpAtKhdH2pawFwPnrBTSEuwmT8iK6nMd2cQ,2807
|
77
|
+
flowllm/service/mcp_service.py,sha256=DR116-EeFBI_Sqbxu0X2NJ1e4cD8-T6kTYzPEPYsCuY,1889
|
78
|
+
flowllm/storage/__init__.py,sha256=wlGDDqp6nM4TLoEAXtSglgB0-K2YHAq_DNnsHTBQj8s,41
|
79
|
+
flowllm/storage/cache/__init__.py,sha256=KyLfUg3gJ4SvHMRagtZDL8cp5s5SRsN9H-_y4uRf2II,34
|
80
|
+
flowllm/storage/cache/cache_data_handler.py,sha256=fNnVwKOTOL3fZfukIN2gy3txlxiwr3CR9t3tVnIusvw,2700
|
81
|
+
flowllm/storage/cache/data_cache.py,sha256=cVz20JUkGgXzB5YgZiyeiBYpA0nRFyBtxhgVVQkFeA4,12144
|
82
|
+
flowllm/storage/vector_store/__init__.py,sha256=0DH2mkNiQ_cB5yPzm2Xc-7qsFHz1ytMkGUptWGZkyuU,143
|
83
|
+
flowllm/storage/vector_store/base_vector_store.py,sha256=V5b3kux6rJROjyMZzzHu_09ornvO_zZzcPgzZFF8Hv0,1635
|
84
|
+
flowllm/storage/vector_store/chroma_vector_store.py,sha256=BHcfhMBBDaoQOywfhYgp87v6OjTf0ePyTI2h-MWQywc,7067
|
85
|
+
flowllm/storage/vector_store/es_vector_store.py,sha256=Idkj2IVnXBc6Hbqs6A76LbiP-1pMZbWSECYogWy27Do,8452
|
86
|
+
flowllm/storage/vector_store/local_vector_store.py,sha256=p8xg2cmv17bm1UYXZBhLMAGulOE8v70Iw4oTM0Ls61s,10396
|
87
|
+
flowllm/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
|
+
flowllm/utils/common_utils.py,sha256=v9vTK_FrOsyXNZN2-CRJ6zLrCqaSX0-LNpt6IFt6sNg,1232
|
89
|
+
flowllm/utils/fetch_url.py,sha256=pOYiliL4kTGQKERCHrFhammBsbv9XzSvVyBQDMgXKEY,4404
|
90
|
+
flowllm/utils/llm_utils.py,sha256=ywhf1LGe2aKEaL5PyOpoOAbiekrQVOcpxUJ4ARPioQQ,1121
|
91
|
+
flowllm/utils/ridge_v2.py,sha256=XIn6nu4jUV7_QUCeyhSEhm-4ltueaS7JdbDQmSQFnRE,1802
|
92
|
+
flowllm/utils/singleton.py,sha256=No3otyPDRHu6wQuFRC-w28MkbommVFTLd7H4mT6-Zos,213
|
93
|
+
flowllm/utils/timer.py,sha256=8aj3dIYOyxNDNdlcitezdepxEptqkx69aw6JNFWsr30,1492
|
94
|
+
flowllm-0.1.2.dist-info/licenses/LICENSE,sha256=kFfPsL7YvEW4jPATpyvUPdtEgftLK53zQrVYJ0eBASY,11337
|
95
|
+
flowllm-0.1.2.dist-info/METADATA,sha256=cMEQ5Agae0ktU38cIPqBJfBN5OAVKN2WS6gRrsN8ehg,14756
|
96
|
+
flowllm-0.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
97
|
+
flowllm-0.1.2.dist-info/entry_points.txt,sha256=PcKC61HCKtF4ONb4HnrIY6J2JeV1bsi_l0O2m99A2Wg,45
|
98
|
+
flowllm-0.1.2.dist-info/top_level.txt,sha256=a2tZBwbrnw4uiydMI5kAEGz-cxG25rf6v0QM1sYIrjs,8
|
99
|
+
flowllm-0.1.2.dist-info/RECORD,,
|
flowllm/flow_engine/__init__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
from flowllm.flow_engine import simple_flow_engine
|
@@ -1,34 +0,0 @@
|
|
1
|
-
from abc import ABC
|
2
|
-
from typing import Optional
|
3
|
-
|
4
|
-
from flowllm.context.flow_context import FlowContext
|
5
|
-
from flowllm.op.base_op import BaseOp
|
6
|
-
from flowllm.utils.timer import timer
|
7
|
-
|
8
|
-
|
9
|
-
class BaseFlowEngine(ABC):
|
10
|
-
|
11
|
-
def __init__(self, flow_name: str, flow_content: str, flow_context: FlowContext):
|
12
|
-
self.flow_name: str = flow_name
|
13
|
-
self.flow_content: str = flow_content
|
14
|
-
self.flow_context: FlowContext = flow_context
|
15
|
-
|
16
|
-
self._parsed_flow: Optional[BaseOp] = None
|
17
|
-
self._parsed_ops_cache = {}
|
18
|
-
|
19
|
-
def _parse_flow(self):
|
20
|
-
raise NotImplementedError
|
21
|
-
|
22
|
-
def _create_op(self, op_name: str):
|
23
|
-
raise NotImplementedError
|
24
|
-
|
25
|
-
def _print_flow(self):
|
26
|
-
raise NotImplementedError
|
27
|
-
|
28
|
-
def _execute_flow(self):
|
29
|
-
raise NotImplementedError
|
30
|
-
|
31
|
-
def __call__(self):
|
32
|
-
self._parse_flow()
|
33
|
-
self._print_flow()
|
34
|
-
return self._execute_flow()
|
flowllm-0.1.1.dist-info/RECORD
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
flowllm/__init__.py,sha256=26Kp9GihT8ffNaUVNZIPq3mp0gp2iLgHMX_Yq5ot04Y,237
|
2
|
-
flowllm/app.py,sha256=4NGAPrFMJB9dHVp7_AUbi8gSHDJjaE0I80Z1Jx-TSVQ,654
|
3
|
-
flowllm/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
-
flowllm/config/default_config.yaml,sha256=nqjz9r5B8Tyx2hH8mZpMmZgS7Hv4XgjpEGs0n6K5VdY,2038
|
5
|
-
flowllm/config/pydantic_config_parser.py,sha256=pIrryo79YW9Otx3P4KQm2u_80_MmpQBKRwcK8wyQJkQ,6947
|
6
|
-
flowllm/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
-
flowllm/context/base_context.py,sha256=R8uP3I-cLIJBodGfGlbUaBJ1pqCTbMasn3pkCFoCKVQ,1441
|
8
|
-
flowllm/context/flow_context.py,sha256=xcXUWxjsiyjHDe5QoT8KJGmeyXITBw0zkZV6qIDKCOQ,811
|
9
|
-
flowllm/context/prompt_handler.py,sha256=LbMJDwrzz8HF7HVDyphVSWI1X4QHMebJqLP4XeXkXOE,2667
|
10
|
-
flowllm/context/registry.py,sha256=UvF-Exrzp7vt9bpfa4EdpbwmbqhbLJokvW2cht1Gm8o,897
|
11
|
-
flowllm/context/service_context.py,sha256=-FMmB-NgTxRdCXepbzukVmynh3BqBZibP2ifuSf0R7s,3497
|
12
|
-
flowllm/embedding_model/__init__.py,sha256=n0du4LYWRXlXDJDZRYE5h2CFeyAIPU76BHpdVU2UFG4,101
|
13
|
-
flowllm/embedding_model/base_embedding_model.py,sha256=kONFQF-pljIEW3Zn2FSr2hIDCzahmmsLsXj8zjmW4Rg,4295
|
14
|
-
flowllm/embedding_model/openai_compatible_embedding_model.py,sha256=x7nQh4uaReIWyDt9ffr9xOaeoIR4hgp0VxcZgTIOyPg,3479
|
15
|
-
flowllm/enumeration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
|
-
flowllm/enumeration/chunk_enum.py,sha256=EYB0a84qtrph5H7h_m05Qeo5B00B3xnSOt9KBb5CCJY,152
|
17
|
-
flowllm/enumeration/http_enum.py,sha256=ddIYeVz2J8CInzEkhWbz1rPe0qh2FVfryNNE1uc1ioM,141
|
18
|
-
flowllm/enumeration/role.py,sha256=SFMGXmwYFndGIwbr9GxS3OIoHIZ_nO23DeRnqpV4U3g,133
|
19
|
-
flowllm/flow_engine/__init__.py,sha256=bzS4GjSsNA-IzjoA9E1o1JnbYbzSZlCxXyGsDohweKE,50
|
20
|
-
flowllm/flow_engine/base_flow_engine.py,sha256=Iy48HNLXFwTOCWY_eU-xFtQaqZFIubNfQqoYB1V64xU,900
|
21
|
-
flowllm/flow_engine/simple_flow_engine.py,sha256=7Us1G90O0HRnZ1JIlq9pvxBqENyhIJu6hqr7AIq6IVA,7645
|
22
|
-
flowllm/llm/__init__.py,sha256=ItnDIENsu1vSMaIVjVZ5fvHH5rtesM43_U_dZGPiaQk,70
|
23
|
-
flowllm/llm/base_llm.py,sha256=JmPxLdp-x0T7QpzTO_odJgkjWclfEsTPWlbRGp00BPA,5746
|
24
|
-
flowllm/llm/openai_compatible_llm.py,sha256=vwxs6MdCVx0_bcw_IoLxvpdu3mZlRcFkrF2wp81y0Wo,9965
|
25
|
-
flowllm/op/__init__.py,sha256=t4Xo1weDuiL_5B7aPLs7YEq4bBPFq3kEnojJgPiD1lk,292
|
26
|
-
flowllm/op/base_op.py,sha256=K-UoAAj2OGK7_QMgmKJw6rwx2lb4tLzeRio3l3QSDz0,4813
|
27
|
-
flowllm/op/llm_base_op.py,sha256=L_M8PvXiElsZW6-i9DXhcnNo84crgGMHleQ52niGlxg,2655
|
28
|
-
flowllm/op/mock_op.py,sha256=Y2tyIf5GeZgogCmUJKaFdX1U3ZS7GNITU-AP3-9u6XE,679
|
29
|
-
flowllm/op/parallel_op.py,sha256=_6FzBmnqYuNKgXwLpwKru8RRjieyuGMyvBPnEhuizJs,849
|
30
|
-
flowllm/op/sequential_op.py,sha256=7BeCxdEoDV0AnvRcBkfox7yMAVg8m55vWqjtD_uzUVg,759
|
31
|
-
flowllm/op/akshare/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
|
-
flowllm/op/akshare/get_ak_a_code_op.py,sha256=otD1cszLbBB-2NNJnbGdJSNfHasayD63a-yX34IPln0,4194
|
33
|
-
flowllm/op/akshare/get_ak_a_code_prompt.yaml,sha256=NwGJygecUwspQvrg98GdMpcmQESpZ2Kf5YprhM2PyZU,608
|
34
|
-
flowllm/op/akshare/get_ak_a_info_op.py,sha256=BSHt22Q-1o_StaFp5wR09ThZZgGjPbA8dKtTJvvJq5g,4830
|
35
|
-
flowllm/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
|
-
flowllm/schema/flow_response.py,sha256=BusrfkJ8OCGk9Tp1KCWVSt33L2t_pYpn9QRqS0bjDcw,323
|
37
|
-
flowllm/schema/message.py,sha256=yxbKvH7TRECozUYdm141q84QGoqyOe3krSXgzWRdWHs,1220
|
38
|
-
flowllm/schema/service_config.py,sha256=4DmveDy_ly0bguhU85NerBIz_oIASdFAaHg_qVQpbBk,2381
|
39
|
-
flowllm/schema/tool_call.py,sha256=va8veCNB0WB2kEjud1AP8gVUVgwMZgw3vOlijnMUugs,3724
|
40
|
-
flowllm/schema/vector_node.py,sha256=2s6YALIYtj1n7iYsfA7W0WhVunuQBobm8rQoMyAgF3Y,361
|
41
|
-
flowllm/service/__init__.py,sha256=3qVEcHwG8qhdC1TSoU4t8kLCJykMxBYKIPwK7vVVM5U,103
|
42
|
-
flowllm/service/base_service.py,sha256=cH4mAoRdBEXBAaWbdi-L7VmGbQvc1StPRKzZB8rGDRM,2833
|
43
|
-
flowllm/service/http_service.py,sha256=lFN-PNmxkHjl3MdB874jFe-7-27iC4tYQZLwNPvgAEc,3205
|
44
|
-
flowllm/service/mcp_service.py,sha256=SVhfgZrioX_9hLK5DgEwqFjcgDMvKMubos08nFbGqfQ,1616
|
45
|
-
flowllm/storage/__init__.py,sha256=wlGDDqp6nM4TLoEAXtSglgB0-K2YHAq_DNnsHTBQj8s,41
|
46
|
-
flowllm/storage/vector_store/__init__.py,sha256=o1U7UIVoonOj36Rm-0pUnQaKENOzlG81a7gWPj_Tx2U,227
|
47
|
-
flowllm/storage/vector_store/base_vector_store.py,sha256=V5b3kux6rJROjyMZzzHu_09ornvO_zZzcPgzZFF8Hv0,1635
|
48
|
-
flowllm/storage/vector_store/chroma_vector_store.py,sha256=BHcfhMBBDaoQOywfhYgp87v6OjTf0ePyTI2h-MWQywc,7067
|
49
|
-
flowllm/storage/vector_store/es_vector_store.py,sha256=qbyQVZ-ONV2Aw82-8oERsN82allYtayAx1Bj_1D9YGE,8448
|
50
|
-
flowllm/storage/vector_store/local_vector_store.py,sha256=-JZ0l78jGyWWo5Sr9LVUldjKgjQUbVp4foLLU64w37I,10397
|
51
|
-
flowllm/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
|
-
flowllm/utils/common_utils.py,sha256=wb4nKF-GE53eYFrH1UYltKIJ27Z0uSOa9AMvK66noyg,1550
|
53
|
-
flowllm/utils/dataframe_cache.py,sha256=JpSAL3yKeIOhgA-DEhhadzSClFIj-m45zbXsNHUb1_0,9725
|
54
|
-
flowllm/utils/fetch_url.py,sha256=wuH_1MB__DquYzrZD-a5VgOnJB-sZvw1xEpRo5SjFqc,4431
|
55
|
-
flowllm/utils/singleton.py,sha256=No3otyPDRHu6wQuFRC-w28MkbommVFTLd7H4mT6-Zos,213
|
56
|
-
flowllm/utils/timer.py,sha256=8aj3dIYOyxNDNdlcitezdepxEptqkx69aw6JNFWsr30,1492
|
57
|
-
flowllm-0.1.1.dist-info/licenses/LICENSE,sha256=kFfPsL7YvEW4jPATpyvUPdtEgftLK53zQrVYJ0eBASY,11337
|
58
|
-
flowllm-0.1.1.dist-info/METADATA,sha256=wMnmj5yEAUrSebhVHblwPEY8vCqix8-nVMJ19iVTCPM,24229
|
59
|
-
flowllm-0.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
60
|
-
flowllm-0.1.1.dist-info/entry_points.txt,sha256=7U3zwalx4qZGw2uWsDhSjo-xJB094M2plYsbXKk9ouk,113
|
61
|
-
flowllm-0.1.1.dist-info/top_level.txt,sha256=a2tZBwbrnw4uiydMI5kAEGz-cxG25rf6v0QM1sYIrjs,8
|
62
|
-
flowllm-0.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|