flowllm 0.1.0__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 +21 -0
- flowllm/app.py +15 -0
- 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.yaml +77 -0
- flowllm/config/empty.yaml +37 -0
- flowllm/config/pydantic_config_parser.py +242 -0
- flowllm/context/base_context.py +79 -0
- flowllm/context/flow_context.py +16 -0
- llmflow/op/prompt_mixin.py → flowllm/context/prompt_handler.py +25 -14
- flowllm/context/registry.py +30 -0
- flowllm/context/service_context.py +147 -0
- flowllm/embedding_model/__init__.py +1 -0
- {llmflow → flowllm}/embedding_model/base_embedding_model.py +93 -2
- {llmflow → flowllm}/embedding_model/openai_compatible_embedding_model.py +71 -13
- 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/expression_parser.py +171 -0
- flowllm/llm/__init__.py +2 -0
- {llmflow → flowllm}/llm/base_llm.py +100 -18
- flowllm/llm/litellm_llm.py +455 -0
- flowllm/llm/openai_compatible_llm.py +439 -0
- flowllm/op/__init__.py +11 -0
- llmflow/op/react/react_v1_op.py → flowllm/op/agent/react_op.py +17 -22
- flowllm/op/akshare/__init__.py +3 -0
- flowllm/op/akshare/get_ak_a_code_op.py +108 -0
- flowllm/op/akshare/get_ak_a_code_prompt.yaml +21 -0
- flowllm/op/akshare/get_ak_a_info_op.py +140 -0
- flowllm/op/base_llm_op.py +64 -0
- flowllm/op/base_op.py +148 -0
- 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/gallery/mock_op.py +42 -0
- flowllm/op/gallery/terminate_op.py +29 -0
- flowllm/op/parallel_op.py +23 -0
- 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 +21 -0
- flowllm/schema/flow_request.py +12 -0
- flowllm/schema/flow_response.py +12 -0
- flowllm/schema/message.py +35 -0
- flowllm/schema/service_config.py +72 -0
- flowllm/schema/tool_call.py +118 -0
- {llmflow → flowllm}/schema/vector_node.py +1 -0
- flowllm/service/__init__.py +3 -0
- flowllm/service/base_service.py +68 -0
- flowllm/service/cmd_service.py +15 -0
- flowllm/service/http_service.py +79 -0
- flowllm/service/mcp_service.py +47 -0
- flowllm/storage/__init__.py +1 -0
- flowllm/storage/cache/__init__.py +1 -0
- flowllm/storage/cache/cache_data_handler.py +104 -0
- flowllm/storage/cache/data_cache.py +375 -0
- flowllm/storage/vector_store/__init__.py +3 -0
- flowllm/storage/vector_store/base_vector_store.py +44 -0
- {llmflow → flowllm/storage}/vector_store/chroma_vector_store.py +11 -10
- {llmflow → flowllm/storage}/vector_store/es_vector_store.py +11 -11
- llmflow/vector_store/file_vector_store.py → flowllm/storage/vector_store/local_vector_store.py +110 -11
- flowllm/utils/common_utils.py +52 -0
- flowllm/utils/fetch_url.py +117 -0
- flowllm/utils/llm_utils.py +28 -0
- flowllm/utils/ridge_v2.py +54 -0
- {llmflow → flowllm}/utils/timer.py +5 -4
- {flowllm-0.1.0.dist-info → flowllm-0.1.2.dist-info}/METADATA +45 -388
- flowllm-0.1.2.dist-info/RECORD +99 -0
- flowllm-0.1.2.dist-info/entry_points.txt +2 -0
- {flowllm-0.1.0.dist-info → flowllm-0.1.2.dist-info}/licenses/LICENSE +1 -1
- flowllm-0.1.2.dist-info/top_level.txt +1 -0
- flowllm-0.1.0.dist-info/RECORD +0 -66
- flowllm-0.1.0.dist-info/entry_points.txt +0 -3
- flowllm-0.1.0.dist-info/top_level.txt +0 -1
- llmflow/app.py +0 -53
- llmflow/config/config_parser.py +0 -80
- llmflow/config/mock_config.yaml +0 -58
- llmflow/embedding_model/__init__.py +0 -5
- llmflow/enumeration/agent_state.py +0 -8
- llmflow/llm/__init__.py +0 -5
- llmflow/llm/openai_compatible_llm.py +0 -283
- llmflow/mcp_server.py +0 -110
- llmflow/op/__init__.py +0 -10
- llmflow/op/base_op.py +0 -125
- llmflow/op/mock_op.py +0 -40
- llmflow/op/vector_store/__init__.py +0 -13
- llmflow/op/vector_store/recall_vector_store_op.py +0 -48
- llmflow/op/vector_store/update_vector_store_op.py +0 -28
- llmflow/op/vector_store/vector_store_action_op.py +0 -46
- llmflow/pipeline/pipeline.py +0 -94
- llmflow/pipeline/pipeline_context.py +0 -37
- llmflow/schema/app_config.py +0 -69
- llmflow/schema/experience.py +0 -144
- llmflow/schema/message.py +0 -68
- llmflow/schema/request.py +0 -32
- llmflow/schema/response.py +0 -29
- llmflow/service/__init__.py +0 -0
- llmflow/service/llmflow_service.py +0 -96
- llmflow/tool/__init__.py +0 -9
- llmflow/tool/base_tool.py +0 -80
- llmflow/tool/code_tool.py +0 -43
- llmflow/tool/dashscope_search_tool.py +0 -162
- llmflow/tool/mcp_tool.py +0 -77
- llmflow/tool/tavily_search_tool.py +0 -109
- llmflow/tool/terminate_tool.py +0 -23
- llmflow/utils/__init__.py +0 -0
- llmflow/utils/common_utils.py +0 -17
- llmflow/utils/file_handler.py +0 -25
- llmflow/utils/http_client.py +0 -156
- llmflow/utils/op_utils.py +0 -102
- llmflow/utils/registry.py +0 -33
- llmflow/vector_store/__init__.py +0 -7
- llmflow/vector_store/base_vector_store.py +0 -136
- {llmflow → flowllm/context}/__init__.py +0 -0
- {llmflow/config → flowllm/enumeration}/__init__.py +0 -0
- {llmflow → flowllm}/enumeration/chunk_enum.py +0 -0
- {llmflow → flowllm}/enumeration/http_enum.py +0 -0
- {llmflow → flowllm}/enumeration/role.py +0 -0
- {llmflow/enumeration → flowllm/flow/parser}/__init__.py +0 -0
- {llmflow/op/react → flowllm/op/agent}/__init__.py +0 -0
- /llmflow/op/react/react_v1_prompt.yaml → /flowllm/op/agent/react_prompt.yaml +0 -0
- {llmflow/pipeline → flowllm/schema}/__init__.py +0 -0
- {llmflow/schema → flowllm/utils}/__init__.py +0 -0
- {llmflow → flowllm}/utils/singleton.py +0 -0
- {flowllm-0.1.0.dist-info → flowllm-0.1.2.dist-info}/WHEEL +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/
|
@@ -190,7 +192,7 @@ License: Apache License
|
|
190
192
|
same "printed page" as the copyright notice for easier
|
191
193
|
identification within third-party archives.
|
192
194
|
|
193
|
-
Copyright 2024
|
195
|
+
Copyright 2024 FlowLLM
|
194
196
|
|
195
197
|
Licensed under the Apache License, Version 2.0 (the "License");
|
196
198
|
you may not use this file except in compliance with the License.
|
@@ -204,394 +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:
|
214
|
-
Requires-Dist:
|
215
|
-
Requires-Dist:
|
216
|
-
Requires-Dist:
|
217
|
-
Requires-Dist:
|
218
|
-
Requires-Dist:
|
219
|
-
Requires-Dist:
|
220
|
-
Requires-Dist:
|
221
|
-
Requires-Dist:
|
222
|
-
Requires-Dist:
|
223
|
-
Requires-Dist:
|
224
|
-
Requires-Dist:
|
225
|
-
Requires-Dist:
|
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"
|
226
254
|
Dynamic: license-file
|
227
|
-
|
228
|
-
# LLMFlow
|
229
|
-
|
230
|
-
[](https://www.python.org/downloads/)
|
231
|
-
[](https://opensource.org/licenses/Apache-2.0)
|
232
|
-
|
233
|
-
LLMFlow 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.
|
234
|
-
|
235
|
-
## 🚀 Key Features
|
236
|
-
|
237
|
-
### 🔧 Modular Architecture
|
238
|
-
- **Pipeline System**: Flexible pipeline configuration supporting both serial and parallel operations
|
239
|
-
- **Operation Registry**: Extensible operation registry with support for custom operations
|
240
|
-
- **Configuration-Driven**: Manage entire applications through YAML configuration files
|
241
|
-
|
242
|
-
### 🤖 LLM Support
|
243
|
-
- **Multi-Provider Compatible**: Support for OpenAI-compatible APIs
|
244
|
-
- **Streaming Responses**: Real-time streaming output support
|
245
|
-
- **Tool Calling**: Built-in tool calling and parallel execution support
|
246
|
-
- **Reasoning Mode**: Chain-of-thought reasoning support
|
247
|
-
|
248
|
-
### 📚 Vector Storage
|
249
|
-
- **Multi-Backend Support**:
|
250
|
-
- Elasticsearch
|
251
|
-
- ChromaDB
|
252
|
-
- Local file storage
|
253
|
-
- **Embedding Models**: Support for multiple embedding models
|
254
|
-
- **Workspace Management**: Multi-tenant vector storage management
|
255
|
-
|
256
|
-
### 🛠️ Rich Tool Ecosystem
|
257
|
-
- **Code Execution**: Python code execution tool
|
258
|
-
- **Web Search**: Integrated Tavily and DashScope search
|
259
|
-
- **MCP Protocol**: Model Context Protocol support
|
260
|
-
- **Termination Control**: Intelligent conversation termination management
|
261
|
-
|
262
|
-
### 🌐 API Services
|
263
|
-
- **RESTful API**: FastAPI-powered HTTP services
|
264
|
-
- **MCP Server**: Model Context Protocol server support
|
265
|
-
- **Multiple Endpoints**: Retriever, summarizer, vector store, agent APIs
|
266
|
-
|
267
|
-
## 📦 Installation
|
268
|
-
|
269
|
-
### Prerequisites
|
270
|
-
- Python 3.12+
|
271
|
-
- pip or poetry
|
272
|
-
|
273
|
-
### Installation Steps
|
274
|
-
|
275
|
-
```bash
|
276
|
-
# Clone the repository
|
277
|
-
git clone https://github.com/your-username/llmflow.git
|
278
|
-
cd llmflow
|
279
|
-
|
280
|
-
# Install dependencies
|
281
|
-
pip install -e .
|
282
|
-
|
283
|
-
# Or using poetry
|
284
|
-
poetry install
|
285
|
-
```
|
286
|
-
|
287
|
-
### Environment Configuration
|
288
|
-
|
289
|
-
Copy the environment template:
|
290
|
-
```bash
|
291
|
-
cp example.env .env
|
292
|
-
```
|
293
|
-
|
294
|
-
Edit the `.env` file to configure necessary API keys:
|
295
|
-
|
296
|
-
```bash
|
297
|
-
# LLM Configuration
|
298
|
-
LLM_API_KEY=sk-your-llm-api-key
|
299
|
-
LLM_BASE_URL=https://your-llm-endpoint/v1
|
300
|
-
|
301
|
-
# Embedding Model Configuration
|
302
|
-
EMBEDDING_API_KEY=sk-your-embedding-api-key
|
303
|
-
EMBEDDING_BASE_URL=https://your-embedding-endpoint/v1
|
304
|
-
|
305
|
-
# Elasticsearch (Optional)
|
306
|
-
ES_HOSTS=http://localhost:9200
|
307
|
-
|
308
|
-
# DashScope Search (Optional)
|
309
|
-
DASHSCOPE_API_KEY=sk-your-dashscope-key
|
310
|
-
```
|
311
|
-
|
312
|
-
## 🏃 Quick Start
|
313
|
-
|
314
|
-
### 1. Start HTTP Service
|
315
|
-
|
316
|
-
```bash
|
317
|
-
llmflow \
|
318
|
-
http_service.port=8001 \
|
319
|
-
llm.default.model_name=qwen3-32b \
|
320
|
-
embedding_model.default.model_name=text-embedding-v4 \
|
321
|
-
vector_store.default.backend=local_file
|
322
|
-
```
|
323
|
-
|
324
|
-
### 2. Start MCP Server
|
325
|
-
|
326
|
-
```bash
|
327
|
-
llmflow_mcp \
|
328
|
-
mcp_transport=stdio \
|
329
|
-
http_service.port=8001 \
|
330
|
-
llm.default.model_name=qwen3-32b \
|
331
|
-
embedding_model.default.model_name=text-embedding-v4 \
|
332
|
-
vector_store.default.backend=local_file
|
333
|
-
```
|
334
|
-
|
335
|
-
### 3. API Usage Examples
|
336
|
-
|
337
|
-
#### Retriever API
|
338
|
-
```python
|
339
|
-
import requests
|
340
|
-
|
341
|
-
response = requests.post('http://localhost:8001/retriever', json={
|
342
|
-
"query": "What is artificial intelligence?",
|
343
|
-
"top_k": 5,
|
344
|
-
"workspace_id": "default",
|
345
|
-
"config": {}
|
346
|
-
})
|
347
|
-
print(response.json())
|
348
|
-
```
|
349
|
-
|
350
|
-
#### Agent API
|
351
|
-
```python
|
352
|
-
response = requests.post('http://localhost:8001/agent', json={
|
353
|
-
"query": "Help me search for the latest AI technology trends",
|
354
|
-
"workspace_id": "default",
|
355
|
-
"config": {}
|
356
|
-
})
|
357
|
-
print(response.json())
|
358
|
-
```
|
359
|
-
|
360
|
-
## ⚙️ Configuration Guide
|
361
|
-
|
362
|
-
### Pipeline Configuration Syntax
|
363
|
-
|
364
|
-
LLMFlow uses an intuitive string syntax to define operation pipelines:
|
365
|
-
|
366
|
-
```yaml
|
367
|
-
api:
|
368
|
-
# Serial execution: op1 -> op2 -> op3
|
369
|
-
retriever: recall_vector_store_op->summarizer_op
|
370
|
-
|
371
|
-
# Parallel execution: [op1 | op2] runs in parallel
|
372
|
-
summarizer: mock1_op->[mock4_op->mock2_op|mock5_op]->mock3_op
|
373
|
-
|
374
|
-
# Mixed mode: combination of serial and parallel
|
375
|
-
agent: react_v1_op
|
376
|
-
```
|
377
|
-
|
378
|
-
### Complete Configuration Example
|
379
|
-
|
380
|
-
```yaml
|
381
|
-
# HTTP Service Configuration
|
382
|
-
http_service:
|
383
|
-
host: "0.0.0.0"
|
384
|
-
port: 8001
|
385
|
-
timeout_keep_alive: 600
|
386
|
-
limit_concurrency: 64
|
387
|
-
|
388
|
-
# Thread Pool Configuration
|
389
|
-
thread_pool:
|
390
|
-
max_workers: 10
|
391
|
-
|
392
|
-
# API Pipeline Definitions
|
393
|
-
api:
|
394
|
-
retriever: recall_vector_store_op
|
395
|
-
summarizer: update_vector_store_op
|
396
|
-
vector_store: vector_store_action_op
|
397
|
-
agent: react_v1_op
|
398
|
-
|
399
|
-
# Operation Configuration
|
400
|
-
op:
|
401
|
-
react_v1_op:
|
402
|
-
backend: react_v1_op
|
403
|
-
llm: default
|
404
|
-
params:
|
405
|
-
max_steps: 10
|
406
|
-
tool_names: "code_tool,tavily_search_tool,terminate_tool"
|
407
|
-
|
408
|
-
# LLM Configuration
|
409
|
-
llm:
|
410
|
-
default:
|
411
|
-
backend: openai_compatible
|
412
|
-
model_name: qwen3-32b
|
413
|
-
params:
|
414
|
-
temperature: 0.6
|
415
|
-
max_retries: 5
|
416
|
-
|
417
|
-
# Embedding Model Configuration
|
418
|
-
embedding_model:
|
419
|
-
default:
|
420
|
-
backend: openai_compatible
|
421
|
-
model_name: text-embedding-v4
|
422
|
-
params:
|
423
|
-
dimensions: 1024
|
424
|
-
|
425
|
-
# Vector Store Configuration
|
426
|
-
vector_store:
|
427
|
-
default:
|
428
|
-
backend: local_file # or elasticsearch, chroma
|
429
|
-
embedding_model: default
|
430
|
-
params:
|
431
|
-
store_dir: "./vector_store_data"
|
432
|
-
```
|
433
|
-
|
434
|
-
## 🧩 Architecture Design
|
435
|
-
|
436
|
-
### Core Components
|
437
|
-
|
438
|
-
```
|
439
|
-
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
440
|
-
│ FastAPI App │ │ MCP Server │ │ Configuration │
|
441
|
-
│ │ │ │ │ Parser │
|
442
|
-
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
443
|
-
│ │ │
|
444
|
-
└───────────────────────┼───────────────────────┘
|
445
|
-
│
|
446
|
-
┌─────────────────┐
|
447
|
-
│ LLMFlow Service │
|
448
|
-
└─────────────────┘
|
449
|
-
│
|
450
|
-
┌─────────────────┐
|
451
|
-
│ Pipeline │
|
452
|
-
│ Context │
|
453
|
-
└─────────────────┘
|
454
|
-
│
|
455
|
-
┌───────────────────┼───────────────────┐
|
456
|
-
│ │ │
|
457
|
-
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
458
|
-
│ Operations │ │ Tools │ │Vector Stores│
|
459
|
-
│ │ │ │ │ │
|
460
|
-
│ • ReAct │ │ • Code │ │ • File │
|
461
|
-
│ • Recall │ │ • Search │ │ • ES │
|
462
|
-
│ • Update │ │ • MCP │ │ • Chroma │
|
463
|
-
│ • Mock │ │ • Terminate │ │ │
|
464
|
-
└─────────────┘ └─────────────┘ └─────────────┘
|
465
|
-
```
|
466
|
-
|
467
|
-
### Data Flow
|
468
|
-
|
469
|
-
```
|
470
|
-
Request → Configuration → Pipeline → Operations → Tools/VectorStore → Response
|
471
|
-
```
|
472
|
-
|
473
|
-
## 🔧 Development Guide
|
474
|
-
|
475
|
-
### Custom Operations
|
476
|
-
|
477
|
-
```python
|
478
|
-
from llmflow.op import OP_REGISTRY
|
479
|
-
from llmflow.op.base_op import BaseOp
|
480
|
-
|
481
|
-
@OP_REGISTRY.register()
|
482
|
-
class CustomOp(BaseOp):
|
483
|
-
def execute(self):
|
484
|
-
# Implement your custom logic
|
485
|
-
request = self.context.request
|
486
|
-
response = self.context.response
|
487
|
-
|
488
|
-
# Process request
|
489
|
-
result = self.process_data(request.query)
|
490
|
-
|
491
|
-
# Update response
|
492
|
-
response.metadata["custom_result"] = result
|
493
|
-
```
|
494
|
-
|
495
|
-
### Custom Tools
|
496
|
-
|
497
|
-
```python
|
498
|
-
from llmflow.tool import TOOL_REGISTRY
|
499
|
-
from llmflow.tool.base_tool import BaseTool
|
500
|
-
|
501
|
-
@TOOL_REGISTRY.register()
|
502
|
-
class CustomTool(BaseTool):
|
503
|
-
name: str = "custom_tool"
|
504
|
-
description: str = "Custom tool description"
|
505
|
-
parameters: dict = {
|
506
|
-
"type": "object",
|
507
|
-
"properties": {
|
508
|
-
"input": {"type": "string", "description": "Input parameter"}
|
509
|
-
},
|
510
|
-
"required": ["input"]
|
511
|
-
}
|
512
|
-
|
513
|
-
def _execute(self, input: str, **kwargs):
|
514
|
-
# Implement tool logic
|
515
|
-
return f"Processing result: {input}"
|
516
|
-
```
|
517
|
-
|
518
|
-
### Custom Vector Stores
|
519
|
-
|
520
|
-
```python
|
521
|
-
from llmflow.vector_store import VECTOR_STORE_REGISTRY
|
522
|
-
from llmflow.vector_store.base_vector_store import BaseVectorStore
|
523
|
-
|
524
|
-
@VECTOR_STORE_REGISTRY.register("custom_store")
|
525
|
-
class CustomVectorStore(BaseVectorStore):
|
526
|
-
def search(self, query: str, top_k: int = 10, **kwargs):
|
527
|
-
# Implement search logic
|
528
|
-
pass
|
529
|
-
|
530
|
-
def insert(self, nodes: List[VectorNode], **kwargs):
|
531
|
-
# Implement insertion logic
|
532
|
-
pass
|
533
|
-
```
|
534
|
-
|
535
|
-
## 🧪 Testing
|
536
|
-
|
537
|
-
```bash
|
538
|
-
# Run tests
|
539
|
-
pytest
|
540
|
-
|
541
|
-
# Run specific tests
|
542
|
-
pytest tests/test_pipeline.py
|
543
|
-
|
544
|
-
# Generate coverage report
|
545
|
-
pytest --cov=llmflow tests/
|
546
|
-
```
|
547
|
-
|
548
|
-
## 🤝 Contributing
|
549
|
-
|
550
|
-
We welcome community contributions! Please follow these steps:
|
551
|
-
|
552
|
-
1. Fork the repository
|
553
|
-
2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
|
554
|
-
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
555
|
-
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
556
|
-
5. Open a Pull Request
|
557
|
-
|
558
|
-
### Development Environment Setup
|
559
|
-
|
560
|
-
```bash
|
561
|
-
# Install development dependencies
|
562
|
-
pip install -e ".[dev]"
|
563
|
-
|
564
|
-
# Install pre-commit hooks
|
565
|
-
pre-commit install
|
566
|
-
|
567
|
-
# Run code formatting
|
568
|
-
black llmflow/
|
569
|
-
isort llmflow/
|
570
|
-
|
571
|
-
# Run type checking
|
572
|
-
mypy llmflow/
|
573
|
-
```
|
574
|
-
|
575
|
-
## 📚 Documentation
|
576
|
-
|
577
|
-
- [API Documentation](docs/api.md)
|
578
|
-
- [Configuration Guide](docs/configuration.md)
|
579
|
-
- [Operations Development](docs/operations.md)
|
580
|
-
- [Tools Development](docs/tools.md)
|
581
|
-
- [Deployment Guide](docs/deployment.md)
|
582
|
-
|
583
|
-
## 🐛 Bug Reports
|
584
|
-
|
585
|
-
If you find bugs or have feature requests, please create an issue on [GitHub Issues](https://github.com/your-username/llmflow/issues).
|
586
|
-
|
587
|
-
## 📄 License
|
588
|
-
|
589
|
-
This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.
|
590
|
-
|
591
|
-
## 🙏 Acknowledgments
|
592
|
-
|
593
|
-
Thanks to all developers and community members who have contributed to the LLMFlow project.
|
594
|
-
|
595
|
-
---
|
596
|
-
|
597
|
-
**LLMFlow** - 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,,
|
@@ -186,7 +186,7 @@
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
187
187
|
identification within third-party archives.
|
188
188
|
|
189
|
-
Copyright 2024
|
189
|
+
Copyright 2024 FlowLLM
|
190
190
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
192
192
|
you may not use this file except in compliance with the License.
|
@@ -0,0 +1 @@
|
|
1
|
+
flowllm
|
flowllm-0.1.0.dist-info/RECORD
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
flowllm-0.1.0.dist-info/licenses/LICENSE,sha256=CpH4VoknEI82jjSPd8K3jQLwvrRAM9LwJAOnppzo-Jk,11343
|
2
|
-
llmflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
|
-
llmflow/app.py,sha256=lArBS_VusANTkdzAT2deS14HY5_trVCweKfSX45jqPo,1621
|
4
|
-
llmflow/mcp_server.py,sha256=hO4QoqKSqaJJ42cVwuLwQ-MgVKn0UB7gQcUS7MOcgu8,3086
|
5
|
-
llmflow/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
-
llmflow/config/config_parser.py,sha256=htypaDcT_-he-wexG75usKkQXHyOaDbQAwANWq5aSbI,3214
|
7
|
-
llmflow/config/mock_config.yaml,sha256=0I66Tz5sXHgU-_EoO8hOyqXEmncXTLoS6JoPkizC6jw,995
|
8
|
-
llmflow/embedding_model/__init__.py,sha256=u5QQPmBmJ1ISom5bI--vrAldMZ3RlMEhY5Uh0wNoLVI,185
|
9
|
-
llmflow/embedding_model/base_embedding_model.py,sha256=vijZE1k2Q27wRrDSF2UYZ1I70Hj9iZPkdiWC_-t4csI,4298
|
10
|
-
llmflow/embedding_model/openai_compatible_embedding_model.py,sha256=7y7ttySiB3_dqwQh9d6fk0KgJ48-97-0yQ1ThgLpc8c,3549
|
11
|
-
llmflow/enumeration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
|
-
llmflow/enumeration/agent_state.py,sha256=BCBj13fm29oTb-MdsVtbW_flmsWEAYpideMD5xkG2B4,143
|
13
|
-
llmflow/enumeration/chunk_enum.py,sha256=EYB0a84qtrph5H7h_m05Qeo5B00B3xnSOt9KBb5CCJY,152
|
14
|
-
llmflow/enumeration/http_enum.py,sha256=ddIYeVz2J8CInzEkhWbz1rPe0qh2FVfryNNE1uc1ioM,141
|
15
|
-
llmflow/enumeration/role.py,sha256=SFMGXmwYFndGIwbr9GxS3OIoHIZ_nO23DeRnqpV4U3g,133
|
16
|
-
llmflow/llm/__init__.py,sha256=u6FdiMYZMbnMbCgOJ-_4vwfOkNtpoG1jxwVhJTWOIhc,142
|
17
|
-
llmflow/llm/base_llm.py,sha256=EtaUpeFX-gEApwRJYkIdfVjKivbFwg5tGSe6P9lZrHM,5906
|
18
|
-
llmflow/llm/openai_compatible_llm.py,sha256=ib6aUiFEsj2i2G8yP5grnV-x2LIDIedU2rWj50FYbAU,11761
|
19
|
-
llmflow/op/__init__.py,sha256=aFyZt6OD_FdXAESTnOdXVfcvQ47JvOcMLxCxNbs5qiE,444
|
20
|
-
llmflow/op/base_op.py,sha256=vQroEM8eoRRWnfsPN5c_FQBxUOnGVObzUxEuoQ3wArc,4901
|
21
|
-
llmflow/op/mock_op.py,sha256=_mWuRayUyrAebmawbzISLAXN2UBjZNRVPZGL7R3Njrs,639
|
22
|
-
llmflow/op/prompt_mixin.py,sha256=MeD9QSy95It2UhCnfSl1qTHY6DGh2h5OAcqZw99VNdE,2217
|
23
|
-
llmflow/op/react/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
|
-
llmflow/op/react/react_v1_op.py,sha256=rx-paa046IkZcj-92D1lqFXShelHrSddKdWfuVXZW9g,3923
|
25
|
-
llmflow/op/react/react_v1_prompt.yaml,sha256=XL8NLutlT5cuJAbWxw1Acu4NKuBoHx5h9iXVr-c30js,1552
|
26
|
-
llmflow/op/vector_store/__init__.py,sha256=xPNPugGcV9h2p5p83mII-fSTwAWgtjPH8pIYQeRhozo,465
|
27
|
-
llmflow/op/vector_store/recall_vector_store_op.py,sha256=AfRKZ8K9iFuG3RgIei-ZgcP7l5oyL1nh_L5IuFJRqFQ,2020
|
28
|
-
llmflow/op/vector_store/update_vector_store_op.py,sha256=ti3fQDaCxlGxTmJzitYhpcXbRviIU1Nb0rXKpxdvbMg,1124
|
29
|
-
llmflow/op/vector_store/vector_store_action_op.py,sha256=4TKDvVWPmJrNCser7qlbXMISMh5JAdKjt5Skqn1l8uI,2071
|
30
|
-
llmflow/pipeline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
31
|
-
llmflow/pipeline/pipeline.py,sha256=QLmOyVeT8RsZyxPRUuucbHlOQ9BC_ctO2436rRULZas,3493
|
32
|
-
llmflow/pipeline/pipeline_context.py,sha256=JYsReQKoejMi08gJ_ya1QiGM6mBqOaVERWcfF4IECuI,961
|
33
|
-
llmflow/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
|
-
llmflow/schema/app_config.py,sha256=Ql8NLtGSLdkYd3ILBSIajKZhZapsoDgiZSS306bc0yo,2020
|
35
|
-
llmflow/schema/experience.py,sha256=Al50tleJakm1f7kO75pnCeo6kEG_D4TkQ35viD5sERA,4881
|
36
|
-
llmflow/schema/message.py,sha256=_zDuNUY2rFhNURv-1lEsQ_i7detryCrtznlD_U3oMFU,2122
|
37
|
-
llmflow/schema/request.py,sha256=qHzQGa8nUoDHGzMLwujR03z3yXQwgxSX9hPrSjXlD3s,801
|
38
|
-
llmflow/schema/response.py,sha256=KHdXX6u3E73QbC4sOIYC-jFClclyMIBY_FnrnZIoodQ,805
|
39
|
-
llmflow/schema/vector_node.py,sha256=2s6YALIYtj1n7iYsfA7W0WhVunuQBobm8rQoMyAgF3Y,361
|
40
|
-
llmflow/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
|
-
llmflow/service/llmflow_service.py,sha256=Hpi_9ZfrJBrESRQUGB39sl640rVezkTTRtNg2aLrJVo,4314
|
42
|
-
llmflow/tool/__init__.py,sha256=A9hPcg6zX0O5k9_A6fOVbTj5wiMbUjuNFFnZLlweBBA,341
|
43
|
-
llmflow/tool/base_tool.py,sha256=3iCvqsh-SKOfIXDuR5XhtkgzjBsmgoj9YEnPxRchDNE,2633
|
44
|
-
llmflow/tool/code_tool.py,sha256=SivJxGZrzFOJ0c-wYU8ftM6AdFdQOnFOxZdTATbQnss,1190
|
45
|
-
llmflow/tool/dashscope_search_tool.py,sha256=7MHm-qATu6CsB4_8tSsjWV_61fC758DbqgboRD0DaDE,6136
|
46
|
-
llmflow/tool/mcp_tool.py,sha256=c1dYW0TLERov15BtwPJPcvl6L1h-O3Xn4SI9VjeuqIQ,2918
|
47
|
-
llmflow/tool/tavily_search_tool.py,sha256=eAtaVIzcURLcm_VA4HjOZJMQs0YjkwzBjyk9JxfcfDo,3646
|
48
|
-
llmflow/tool/terminate_tool.py,sha256=6HR-uUlgzZoI6y8QTu30ug91kUUvPIVVO6iuo3uBlWU,825
|
49
|
-
llmflow/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
-
llmflow/utils/common_utils.py,sha256=RZ7lq_j9tyVkSrlaqfsrAcEIiu58BXHKIdueHtGPU84,363
|
51
|
-
llmflow/utils/file_handler.py,sha256=-M_p4AGn5FtaD7wrzdmMFQvsQtr_4IsS05j9gizobL4,664
|
52
|
-
llmflow/utils/http_client.py,sha256=LJgdbzdQ8e7X6D_pyy0JQ3RY5AItfVNiNpOEJsJOqu8,6196
|
53
|
-
llmflow/utils/op_utils.py,sha256=q2dU5G4-fmOhXogJG5ca7uQczuHDYu4rQooWWgmysz8,3807
|
54
|
-
llmflow/utils/registry.py,sha256=OFbmp1y5aVtqczPDrfT74M8hLoNeoWKcOdsT-OczoUc,921
|
55
|
-
llmflow/utils/singleton.py,sha256=No3otyPDRHu6wQuFRC-w28MkbommVFTLd7H4mT6-Zos,213
|
56
|
-
llmflow/utils/timer.py,sha256=qccPMh27euWIE9m6hZ1N_kDRwfEN97qPhZis68ktLNs,1443
|
57
|
-
llmflow/vector_store/__init__.py,sha256=Zk9mkH3ii9WPchQcG_KHFO89jwHIKZvuvFpr8WRmy-E,282
|
58
|
-
llmflow/vector_store/base_vector_store.py,sha256=_ciUZ52bqyDiaFzKzB5me_wYXsrNDt0PyQzBQQlgYO4,5517
|
59
|
-
llmflow/vector_store/chroma_vector_store.py,sha256=IcTL2-jqy8Tltkml5dn6L29nDcDhX59f500fqeTp5z8,7084
|
60
|
-
llmflow/vector_store/es_vector_store.py,sha256=9kl7KmQBOZSKlHnyrVNXGx4o7Xi7LRurAbB0-8_dPUo,8447
|
61
|
-
llmflow/vector_store/file_vector_store.py,sha256=9KbixHdqm8R32xMVmNqVXqjhjvv0maAsvMnuW7SkII0,6184
|
62
|
-
flowllm-0.1.0.dist-info/METADATA,sha256=89YrxJzuRmT4b_SRXlRgHPK2gff83CeY7StnYuJAMmA,24257
|
63
|
-
flowllm-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
64
|
-
flowllm-0.1.0.dist-info/entry_points.txt,sha256=LxjuRXqMQ3J95vPC_1i7OAhlJX1rXmklOYi2KOLfKpM,83
|
65
|
-
flowllm-0.1.0.dist-info/top_level.txt,sha256=Hv7BK14mg2npiZaCmy-T2TSABJZHh7YKrOeEs0gPrPI,8
|
66
|
-
flowllm-0.1.0.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
llmflow
|