flock-core 0.5.7__py3-none-any.whl → 0.5.8__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 flock-core might be problematic. Click here for more details.
- flock/agent.py +336 -80
- flock/artifacts.py +2 -2
- flock/components.py +38 -30
- flock/correlation_engine.py +3 -6
- flock/dashboard/collector.py +9 -9
- flock/dashboard/events.py +8 -8
- flock/dashboard/service.py +7 -7
- flock/engines/dspy_engine.py +560 -64
- flock/engines/examples/simple_batch_engine.py +36 -20
- flock/examples.py +2 -2
- flock/helper/cli_helper.py +2 -2
- flock/logging/formatters/themed_formatter.py +3 -1
- flock/mcp/config.py +1 -2
- flock/mcp/tool.py +1 -2
- flock/orchestrator.py +2 -2
- flock/store.py +2 -2
- flock/utilities.py +1 -1
- flock/visibility.py +3 -3
- {flock_core-0.5.7.dist-info → flock_core-0.5.8.dist-info}/METADATA +97 -2
- {flock_core-0.5.7.dist-info → flock_core-0.5.8.dist-info}/RECORD +23 -23
- {flock_core-0.5.7.dist-info → flock_core-0.5.8.dist-info}/WHEEL +0 -0
- {flock_core-0.5.7.dist-info → flock_core-0.5.8.dist-info}/entry_points.txt +0 -0
- {flock_core-0.5.7.dist-info → flock_core-0.5.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -27,14 +27,44 @@ class BatchSummary(BaseModel):
|
|
|
27
27
|
class SimpleBatchEngine(EngineComponent):
|
|
28
28
|
"""Example engine that processes items individually or in batches.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
The engine simply annotates each item with the current batch size so tests can
|
|
34
|
-
verify that all artifacts were processed together.
|
|
30
|
+
The engine auto-detects batch mode via ctx.is_batch flag and processes
|
|
31
|
+
accordingly. It annotates each item with the current batch size so tests
|
|
32
|
+
can verify that all artifacts were processed together.
|
|
35
33
|
"""
|
|
36
34
|
|
|
37
|
-
async def evaluate(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
|
|
35
|
+
async def evaluate(self, agent, ctx, inputs: EvalInputs, output_group) -> EvalResult:
|
|
36
|
+
"""Process single item or batch with auto-detection.
|
|
37
|
+
|
|
38
|
+
Auto-detects batch mode via ctx.is_batch flag (set by orchestrator when
|
|
39
|
+
BatchSpec flushes accumulated artifacts).
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
agent: Agent instance
|
|
43
|
+
ctx: Execution context (check ctx.is_batch for batch mode)
|
|
44
|
+
inputs: EvalInputs with input artifacts
|
|
45
|
+
output_group: OutputGroup defining what artifacts to produce
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
EvalResult with BatchSummary artifact
|
|
49
|
+
"""
|
|
50
|
+
# Auto-detect batch mode from context
|
|
51
|
+
is_batch = bool(getattr(ctx, "is_batch", False))
|
|
52
|
+
|
|
53
|
+
if is_batch:
|
|
54
|
+
# Batch mode: Process all items together
|
|
55
|
+
items = inputs.all_as(BatchItem)
|
|
56
|
+
if not items:
|
|
57
|
+
return EvalResult.empty()
|
|
58
|
+
|
|
59
|
+
batch_size = len(items)
|
|
60
|
+
summary = BatchSummary(batch_size=batch_size, values=[item.value for item in items])
|
|
61
|
+
|
|
62
|
+
state = dict(inputs.state)
|
|
63
|
+
state["batch_size"] = summary.batch_size
|
|
64
|
+
state["processed_values"] = list(summary.values)
|
|
65
|
+
|
|
66
|
+
return EvalResult.from_object(summary, agent=agent, state=state)
|
|
67
|
+
# Single mode: Process one item
|
|
38
68
|
item = inputs.first_as(BatchItem)
|
|
39
69
|
if item is None:
|
|
40
70
|
return EvalResult.empty()
|
|
@@ -45,17 +75,3 @@ class SimpleBatchEngine(EngineComponent):
|
|
|
45
75
|
state.setdefault("processed_values", list(annotated.values))
|
|
46
76
|
|
|
47
77
|
return EvalResult.from_object(annotated, agent=agent, state=state)
|
|
48
|
-
|
|
49
|
-
async def evaluate_batch(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
|
|
50
|
-
items = inputs.all_as(BatchItem)
|
|
51
|
-
if not items:
|
|
52
|
-
return EvalResult.empty()
|
|
53
|
-
|
|
54
|
-
batch_size = len(items)
|
|
55
|
-
summary = BatchSummary(batch_size=batch_size, values=[item.value for item in items])
|
|
56
|
-
|
|
57
|
-
state = dict(inputs.state)
|
|
58
|
-
state["batch_size"] = summary.batch_size
|
|
59
|
-
state["processed_values"] = list(summary.values)
|
|
60
|
-
|
|
61
|
-
return EvalResult.from_object(summary, agent=agent, state=state)
|
flock/examples.py
CHANGED
|
@@ -50,7 +50,7 @@ def announce(tagline: Tagline) -> dict[str, str]:
|
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
class MovieEngine(EngineComponent):
|
|
53
|
-
async def evaluate(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
|
|
53
|
+
async def evaluate(self, agent, ctx, inputs: EvalInputs, output_group) -> EvalResult:
|
|
54
54
|
idea = Idea(**inputs.artifacts[0].payload)
|
|
55
55
|
synopsis = f"{idea.topic} told as a {idea.genre} adventure."
|
|
56
56
|
movie = Movie(fun_title=idea.topic.upper(), runtime=120, synopsis=synopsis)
|
|
@@ -63,7 +63,7 @@ class MovieEngine(EngineComponent):
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
class TaglineEngine(EngineComponent):
|
|
66
|
-
async def evaluate(self, agent, ctx, inputs: EvalInputs) -> EvalResult:
|
|
66
|
+
async def evaluate(self, agent, ctx, inputs: EvalInputs, output_group) -> EvalResult:
|
|
67
67
|
movie = Movie(**inputs.artifacts[0].payload)
|
|
68
68
|
tagline = Tagline(line=f"Don't miss {movie.fun_title}!")
|
|
69
69
|
artifact = Artifact(
|
flock/helper/cli_helper.py
CHANGED
|
@@ -2,7 +2,7 @@ from importlib.metadata import PackageNotFoundError, version
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
try:
|
|
5
|
-
__version__ = version("flock-
|
|
5
|
+
__version__ = version("flock-core")
|
|
6
6
|
except PackageNotFoundError:
|
|
7
7
|
__version__ = "0.5.0b"
|
|
8
8
|
|
|
@@ -52,7 +52,7 @@ def init_console(clear_screen: bool = True, show_banner: bool = True, model: str
|
|
|
52
52
|
│ ▒█▀▀▀ █░░ █▀▀█ █▀▀ █░█ │
|
|
53
53
|
│ ▒█▀▀▀ █░░ █░░█ █░░ █▀▄ │
|
|
54
54
|
│ ▒█░░░ ▀▀▀ ▀▀▀▀ ▀▀▀ ▀░▀ │
|
|
55
|
-
|
|
55
|
+
╰━━━━━━━━━v{__version__}━━━━━━━━━╯
|
|
56
56
|
🦆 🐤 🐧 🐓
|
|
57
57
|
""",
|
|
58
58
|
justify="center",
|
|
@@ -298,7 +298,9 @@ def create_rich_renderable(
|
|
|
298
298
|
)
|
|
299
299
|
return Group(*sub_tables)
|
|
300
300
|
rendered_items = [
|
|
301
|
-
create_rich_renderable(
|
|
301
|
+
create_rich_renderable(
|
|
302
|
+
"- " + str(item), level + 1, theme, styles, max_length=max_length
|
|
303
|
+
)
|
|
302
304
|
for item in value
|
|
303
305
|
]
|
|
304
306
|
if all(isinstance(item, str) for item in rendered_items):
|
flock/mcp/config.py
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"""Base Config for MCP Clients."""
|
|
2
2
|
|
|
3
3
|
import importlib
|
|
4
|
-
from typing import TYPE_CHECKING, Any, Literal, TypeVar
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Literal, Self, TypeVar
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel, ConfigDict, Field, create_model
|
|
7
|
-
from typing_extensions import Self
|
|
8
7
|
|
|
9
8
|
from flock.mcp.types import (
|
|
10
9
|
FlockListRootsMCPCallback,
|
flock/mcp/tool.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Represents a MCP Tool in a format which is compatible with Flock's ecosystem."""
|
|
2
2
|
|
|
3
|
-
from typing import Any, TypeVar
|
|
3
|
+
from typing import Any, Self, TypeVar
|
|
4
4
|
|
|
5
5
|
from dspy import Tool as DSPyTool
|
|
6
6
|
from dspy.adapters.types.tool import convert_input_schema_to_tool_args
|
|
@@ -8,7 +8,6 @@ from mcp import Tool
|
|
|
8
8
|
from mcp.types import CallToolResult, TextContent, ToolAnnotations
|
|
9
9
|
from opentelemetry import trace
|
|
10
10
|
from pydantic import BaseModel, Field
|
|
11
|
-
from typing_extensions import Self
|
|
12
11
|
|
|
13
12
|
from flock.logging.logging import get_logger
|
|
14
13
|
|
flock/orchestrator.py
CHANGED
|
@@ -8,7 +8,7 @@ import os
|
|
|
8
8
|
from asyncio import Task
|
|
9
9
|
from collections.abc import AsyncGenerator, Iterable, Mapping, Sequence
|
|
10
10
|
from contextlib import asynccontextmanager
|
|
11
|
-
from datetime import
|
|
11
|
+
from datetime import UTC, datetime
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
from typing import TYPE_CHECKING, Any
|
|
14
14
|
from uuid import uuid4
|
|
@@ -1334,7 +1334,7 @@ class Flock(metaclass=AutoTracedMeta):
|
|
|
1334
1334
|
|
|
1335
1335
|
if artifacts:
|
|
1336
1336
|
try:
|
|
1337
|
-
timestamp = datetime.now(
|
|
1337
|
+
timestamp = datetime.now(UTC)
|
|
1338
1338
|
records = [
|
|
1339
1339
|
ConsumptionRecord(
|
|
1340
1340
|
artifact_id=artifact.id,
|
flock/store.py
CHANGED
|
@@ -15,7 +15,7 @@ from asyncio import Lock
|
|
|
15
15
|
from collections import defaultdict
|
|
16
16
|
from collections.abc import Iterable
|
|
17
17
|
from dataclasses import dataclass, field
|
|
18
|
-
from datetime import datetime, timedelta
|
|
18
|
+
from datetime import UTC, datetime, timedelta
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
from typing import Any, TypeVar
|
|
21
21
|
from uuid import UUID
|
|
@@ -85,7 +85,7 @@ class ConsumptionRecord:
|
|
|
85
85
|
consumer: str
|
|
86
86
|
run_id: str | None = None
|
|
87
87
|
correlation_id: str | None = None
|
|
88
|
-
consumed_at: datetime = field(default_factory=lambda: datetime.now(
|
|
88
|
+
consumed_at: datetime = field(default_factory=lambda: datetime.now(UTC))
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
@dataclass(slots=True)
|
flock/utilities.py
CHANGED
|
@@ -228,7 +228,7 @@ class LoggingUtility(AgentComponent):
|
|
|
228
228
|
await queue.put({"kind": "end"})
|
|
229
229
|
try:
|
|
230
230
|
await asyncio.wait_for(task, timeout=2.0)
|
|
231
|
-
except
|
|
231
|
+
except TimeoutError: # pragma: no cover - defensive cancel
|
|
232
232
|
task.cancel()
|
|
233
233
|
|
|
234
234
|
async def _abort_stream(self, agent, ctx: Context) -> None:
|
flock/visibility.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
"""Artifact visibility policies."""
|
|
5
5
|
|
|
6
|
-
from datetime import datetime, timedelta
|
|
6
|
+
from datetime import UTC, datetime, timedelta
|
|
7
7
|
from typing import TYPE_CHECKING, Literal
|
|
8
8
|
|
|
9
9
|
from pydantic import BaseModel, Field, PrivateAttr
|
|
@@ -69,10 +69,10 @@ class AfterVisibility(Visibility):
|
|
|
69
69
|
kind: Literal["After"] = "After"
|
|
70
70
|
ttl: timedelta = Field(default=timedelta())
|
|
71
71
|
then: Visibility | None = None
|
|
72
|
-
_created_at: datetime = PrivateAttr(default_factory=lambda: datetime.now(
|
|
72
|
+
_created_at: datetime = PrivateAttr(default_factory=lambda: datetime.now(UTC))
|
|
73
73
|
|
|
74
74
|
def allows(self, agent: AgentIdentity, *, now: datetime | None = None) -> bool:
|
|
75
|
-
now = now or datetime.now(
|
|
75
|
+
now = now or datetime.now(UTC)
|
|
76
76
|
if now - self._created_at >= self.ttl:
|
|
77
77
|
if self.then:
|
|
78
78
|
return self.then.allows(agent, now=now)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flock-core
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.8
|
|
4
4
|
Summary: Flock: A declrative framework for building and orchestrating AI agents.
|
|
5
5
|
Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
|
|
6
6
|
License: MIT
|
|
7
7
|
License-File: LICENSE
|
|
8
|
-
Requires-Python: >=3.
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
9
|
Requires-Dist: aiosqlite>=0.20.0
|
|
10
10
|
Requires-Dist: devtools>=0.12.2
|
|
11
11
|
Requires-Dist: dspy==3.0.3
|
|
@@ -424,6 +424,101 @@ quality_control = flock.agent("qc").consumes(
|
|
|
424
424
|
<img alt="Event Batch" src="docs/assets/images/batch.png" width="800">
|
|
425
425
|
</p>
|
|
426
426
|
|
|
427
|
+
### 🌟 Fan-Out Publishing (New in 0.5)
|
|
428
|
+
|
|
429
|
+
**Produce multiple outputs from a single agent execution:**
|
|
430
|
+
|
|
431
|
+
```python
|
|
432
|
+
# Generate 10 diverse product ideas from one brief
|
|
433
|
+
idea_generator = (
|
|
434
|
+
flock.agent("generator")
|
|
435
|
+
.consumes(ProductBrief)
|
|
436
|
+
.publishes(ProductIdea, fan_out=10) # Produces 10 ideas per brief!
|
|
437
|
+
)
|
|
438
|
+
|
|
439
|
+
# With WHERE filtering - only publish high-quality ideas
|
|
440
|
+
idea_generator = (
|
|
441
|
+
flock.agent("generator")
|
|
442
|
+
.consumes(ProductBrief)
|
|
443
|
+
.publishes(
|
|
444
|
+
ProductIdea,
|
|
445
|
+
fan_out=20, # Generate 20 candidates
|
|
446
|
+
where=lambda idea: idea.score >= 8.0 # Only publish score >= 8
|
|
447
|
+
)
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
# With VALIDATE - enforce quality standards
|
|
451
|
+
code_reviewer = (
|
|
452
|
+
flock.agent("reviewer")
|
|
453
|
+
.consumes(CodeSubmission)
|
|
454
|
+
.publishes(
|
|
455
|
+
BugReport,
|
|
456
|
+
fan_out=5,
|
|
457
|
+
validate=lambda bug: bug.severity in ["Critical", "High", "Medium", "Low"]
|
|
458
|
+
)
|
|
459
|
+
)
|
|
460
|
+
|
|
461
|
+
# With Dynamic Visibility - control access per artifact
|
|
462
|
+
notification_agent = (
|
|
463
|
+
flock.agent("notifier")
|
|
464
|
+
.consumes(Alert)
|
|
465
|
+
.publishes(
|
|
466
|
+
Notification,
|
|
467
|
+
fan_out=3,
|
|
468
|
+
visibility=lambda n: PrivateVisibility(agents=[n.recipient]) # Dynamic!
|
|
469
|
+
)
|
|
470
|
+
)
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
**What just happened:**
|
|
474
|
+
- ✅ **fan_out=N** - Agent produces N artifacts per execution (not just 1!)
|
|
475
|
+
- ✅ **where** - Filter outputs before publishing (reduce noise, save costs)
|
|
476
|
+
- ✅ **validate** - Enforce quality standards (fail-fast on bad outputs)
|
|
477
|
+
- ✅ **Dynamic visibility** - Control access per artifact based on content
|
|
478
|
+
|
|
479
|
+
**Real-world impact:**
|
|
480
|
+
- 🎯 **Content Generation** - Generate 10 blog post ideas, filter to top 3 by score
|
|
481
|
+
- 🐛 **Code Review** - Produce 5 potential bugs, validate severity levels
|
|
482
|
+
- 📧 **Notifications** - Create 3 notification variants, target specific agents
|
|
483
|
+
- 🧪 **A/B Testing** - Generate N variations, filter by quality metrics
|
|
484
|
+
|
|
485
|
+
**🤯 Multi-Output Fan-Out (New in 0.5)**
|
|
486
|
+
|
|
487
|
+
**The truly mind-blowing part:** Fan-out works across **multiple output types**:
|
|
488
|
+
|
|
489
|
+
```python
|
|
490
|
+
# Generate 3 of EACH type = 9 total artifacts in ONE LLM call!
|
|
491
|
+
multi_master = (
|
|
492
|
+
flock.agent("multi_master")
|
|
493
|
+
.consumes(Idea)
|
|
494
|
+
.publishes(Movie, MovieScript, MovieCampaign, fan_out=3)
|
|
495
|
+
)
|
|
496
|
+
|
|
497
|
+
# Single execution produces:
|
|
498
|
+
# - 3 complete Movie artifacts (with title, genre, cast, plot)
|
|
499
|
+
# - 3 complete MovieScript artifacts (with characters, scenes, pages)
|
|
500
|
+
# - 3 complete MovieCampaign artifacts (with taglines, poster descriptions)
|
|
501
|
+
# = 9 complex artifacts, ~100+ fields total, full Pydantic validation, ONE LLM call!
|
|
502
|
+
|
|
503
|
+
await flock.publish(Idea(story_idea="An action thriller set in space"))
|
|
504
|
+
await flock.run_until_idle()
|
|
505
|
+
|
|
506
|
+
# Result: 9 artifacts on the blackboard, all validated, all ready
|
|
507
|
+
movies = await flock.store.get_by_type(Movie) # 3 movies
|
|
508
|
+
scripts = await flock.store.get_by_type(MovieScript) # 3 scripts
|
|
509
|
+
campaigns = await flock.store.get_by_type(MovieCampaign) # 3 campaigns
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
**Why this is revolutionary:**
|
|
513
|
+
- ⚡ **Massive efficiency** - 1 LLM call generates 9 production-ready artifacts
|
|
514
|
+
- ✅ **Full validation** - All 100+ fields validated with Pydantic constraints
|
|
515
|
+
- 🎯 **Coherent generation** - Movie/Script/Campaign are thematically aligned (same LLM context)
|
|
516
|
+
- 💰 **Cost optimized** - 9 artifacts for the price of 1 API call
|
|
517
|
+
|
|
518
|
+
**Can any other agent framework do this?** We haven't found one. 🚀
|
|
519
|
+
|
|
520
|
+
**📖 [Full Fan-Out Guide →](https://whiteducksoftware.github.io/flock/guides/fan-out/)**
|
|
521
|
+
|
|
427
522
|
### Visibility Controls (The Security)
|
|
428
523
|
|
|
429
524
|
**Unlike other frameworks, Flock has zero-trust security built-in:**
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
flock/__init__.py,sha256=fvp4ltfaAGmYliShuTY_XVIpOUN6bMXbWiBnwb1NBoM,310
|
|
2
|
-
flock/agent.py,sha256=
|
|
2
|
+
flock/agent.py,sha256=wGSbqND9e4CxPxnkJk2r5z30nfpmd5JWebS3L0PGflo,59815
|
|
3
3
|
flock/artifact_collector.py,sha256=8rsg5NzmXeXKNT07TqX1_Z6aAGud2dXKzvS0jhjX3gQ,6372
|
|
4
|
-
flock/artifacts.py,sha256=
|
|
4
|
+
flock/artifacts.py,sha256=QIUlol5hzUZO_8SINCqsN_Xr8fHixsc01QbFV_WIIj0,2527
|
|
5
5
|
flock/batch_accumulator.py,sha256=YcZSpdYMhm8wAGqKEF49NJ_Jl2HZX78NrJYqfyHqTuE,8003
|
|
6
6
|
flock/cli.py,sha256=lPtKxEXnGtyuTh0gyG3ixEIFS4Ty6Y0xsPd6SpUTD3U,4526
|
|
7
|
-
flock/components.py,sha256=
|
|
8
|
-
flock/correlation_engine.py,sha256=
|
|
9
|
-
flock/examples.py,sha256=
|
|
10
|
-
flock/orchestrator.py,sha256=
|
|
7
|
+
flock/components.py,sha256=BvNa5E3mXYdB1wTFw5YGbdWil3bA0-I5qDkgxTnFDao,8358
|
|
8
|
+
flock/correlation_engine.py,sha256=vvcBC43LWafq4ocT2WxrExJjMJ_B9Xags_6u_c6alDg,8005
|
|
9
|
+
flock/examples.py,sha256=7_OkEx6hPfaj4rE2mxpGzb1ZcbHlsXTpWaMNBZ1tOqA,3660
|
|
10
|
+
flock/orchestrator.py,sha256=lVxou7BnRwM9LyFMeG4DeGoFrUSkIFj2UekV6O3erwA,62886
|
|
11
11
|
flock/orchestrator_component.py,sha256=jHYKv-58Rsu3Qsa6QYEx4iMWyJfpSqjowGZWfv-BKDI,25017
|
|
12
12
|
flock/registry.py,sha256=s0-H-TMtOsDZiZQCc7T1tYiWQg3OZHn5T--jaI_INIc,4786
|
|
13
13
|
flock/runtime.py,sha256=uEq_zpCd--zqVAGU95uQt9QXqp2036iWo2lRr1JGlM8,8651
|
|
14
14
|
flock/service.py,sha256=JDdjjPTPH6NFezAr8x6svtqxIGXA7-AyHS11GF57g9Q,11041
|
|
15
|
-
flock/store.py,sha256=
|
|
15
|
+
flock/store.py,sha256=3uPTF0Mp7nses9ICBtyrY25SryOx2H0tL9fyzO0c1qM,45779
|
|
16
16
|
flock/subscription.py,sha256=0fqjGVAr-3u1azSsXJ-xVjnUgSSYVO2a0Gd_zln2tZA,5422
|
|
17
|
-
flock/utilities.py,sha256=
|
|
18
|
-
flock/visibility.py,sha256=
|
|
17
|
+
flock/utilities.py,sha256=TiwGugN6jpRn2LdRLq1thU2vANcLXrzMXa_zZ9FCc7Y,12101
|
|
18
|
+
flock/visibility.py,sha256=uwscg32t6Dp9LuA_EVDT5-_1lotzZWWS9Dl1foyJDxo,2926
|
|
19
19
|
flock/api/themes.py,sha256=BOj1e0LHx6BDLdnVdXh1LKsbQ_ZeubH9UCoj08dC1yc,1886
|
|
20
20
|
flock/dashboard/__init__.py,sha256=_W6Id_Zb7mkSz0iHY1nfdUqF9p9uV_NyHsU7PFsRnFI,813
|
|
21
|
-
flock/dashboard/collector.py,sha256=
|
|
22
|
-
flock/dashboard/events.py,sha256=
|
|
21
|
+
flock/dashboard/collector.py,sha256=kCfhu8opZdboqBpOCGsQ_eJdA8mohWgkDIKe5MKs9Gk,21688
|
|
22
|
+
flock/dashboard/events.py,sha256=yeg_gfRE7TmDk0IBYdrgyvSuHa5zS64W-Jed0vi5gjQ,7611
|
|
23
23
|
flock/dashboard/graph_builder.py,sha256=jdiaruce5uRybndlA4aiOXW-gKkHeGtnndzYQ1WyU9Y,32006
|
|
24
24
|
flock/dashboard/launcher.py,sha256=dCfwaeMLtyIkik3aVSEsbBdABS5ADRlKWYkih7sF5hM,8196
|
|
25
|
-
flock/dashboard/service.py,sha256=
|
|
25
|
+
flock/dashboard/service.py,sha256=mFkDl_tXyIkxRdEDOy4SAq4RvpEMvcs2039yQM0tWTs,52351
|
|
26
26
|
flock/dashboard/websocket.py,sha256=_DCZApJPXc8OQnxFDFS9TA9ozq7kM73QByRj-_a8n-8,9508
|
|
27
27
|
flock/dashboard/models/__init__.py,sha256=T4Yz8IXMm7lBqa2HLDSv7WJBtaKcdZIlTrz6GHNFZxs,68
|
|
28
28
|
flock/dashboard/models/graph.py,sha256=oQAGAVMV32tim8xscUxZ9nFOci0RvryjdPf1sJgiGxQ,5402
|
|
@@ -30,9 +30,9 @@ flock/dashboard/static_v2/index.html,sha256=0KNfWwmpr0JmVNbalnsaQta0y3XlVhOQ_HSt
|
|
|
30
30
|
flock/dashboard/static_v2/assets/index-DFRnI_mt.js,sha256=qeezaWLISr_EKNBBh8v0jzspd2KRcz8jW1r0p7z0Ht0,764860
|
|
31
31
|
flock/dashboard/static_v2/assets/index-fPLNdmp1.css,sha256=skpvfkkrlw7WbmBh7HN-rUKAtKP-gpuLUH4klUgFHT4,74529
|
|
32
32
|
flock/engines/__init__.py,sha256=waNyObJ8PKCLFZL3WUFynxSK-V47m559P3Px-vl_OSc,124
|
|
33
|
-
flock/engines/dspy_engine.py,sha256=
|
|
33
|
+
flock/engines/dspy_engine.py,sha256=z6OEWcoGrizSK0dO34nJUJz_JQg6vftlhocRI394HYk,73295
|
|
34
34
|
flock/engines/examples/__init__.py,sha256=cDAjF8_NPL7nhpwa_xxgnPYRAXZWppKE2HkxmL8LGAI,126
|
|
35
|
-
flock/engines/examples/simple_batch_engine.py,sha256=
|
|
35
|
+
flock/engines/examples/simple_batch_engine.py,sha256=XgbOQZmHvNl-0QQEc4Wg-CxK2p4m6LOK6HJxV6zLrto,2844
|
|
36
36
|
flock/frontend/README.md,sha256=0dEzu4UxacGfSstz9_R0KSeFWJ1vNRi0p-KLIay_TfU,26212
|
|
37
37
|
flock/frontend/index.html,sha256=BFg1VR_YVAJ_MGN16xa7sT6wTGwtFYUhfJhGuKv89VM,312
|
|
38
38
|
flock/frontend/package-lock.json,sha256=vNOaISeq3EfEDDEsFYPWFaMsqypDgQIE0P_u6tzE0g4,150798
|
|
@@ -156,7 +156,7 @@ flock/frontend/src/types/theme.ts,sha256=bjV2zWxBJilEXeosjSSirw05dL7zICShUDx2H0o
|
|
|
156
156
|
flock/frontend/src/utils/artifacts.ts,sha256=JjbNXKgcBaUJdR7VKDi0LK0T3d-ltYt4HHbiQNB3rmI,790
|
|
157
157
|
flock/frontend/src/utils/mockData.ts,sha256=XysjTPAcq6P7BXD8yHv-zJ5vNsxG1T5TLJjX4phOU_w,2316
|
|
158
158
|
flock/frontend/src/utils/performance.ts,sha256=ZcZjR8DKwF2ixveng2tKIRiW8wZ-ee_RPZFfi1jm4Zo,507
|
|
159
|
-
flock/helper/cli_helper.py,sha256=
|
|
159
|
+
flock/helper/cli_helper.py,sha256=9Tv_uZY43zzJj36NxCdg10kbidvjV8N7BQkbhWz82b4,50066
|
|
160
160
|
flock/logging/__init__.py,sha256=RyR9jTC0q02Fh0L8easQfki2uCOSTii5MPhrxcqQNsg,163
|
|
161
161
|
flock/logging/auto_trace.py,sha256=XN7_8iRO46FOHiy23F5_Iw7KFYAbALDmau6HOZAM2XY,5543
|
|
162
162
|
flock/logging/logging.py,sha256=hYq4Il1ApRytARQfJUsMqnjGJiLW2Y5Ou7s2zHRlns4,20128
|
|
@@ -164,7 +164,7 @@ flock/logging/telemetry.py,sha256=oLVGARUyYqXfeZjh9CPlnPHnvadUxUs8V5NWHWg7l4U,82
|
|
|
164
164
|
flock/logging/trace_and_logged.py,sha256=oEMr60Mh2nACiupaIKmWtRkYlqmoWAUUZFxD4UYqHdY,11358
|
|
165
165
|
flock/logging/formatters/enum_builder.py,sha256=JMZCxZxm7TX2uVD9l4nIeSPKmSFZV-5v7omXS1Qu1cI,969
|
|
166
166
|
flock/logging/formatters/theme_builder.py,sha256=RubV95MY04zB5MIK7814dFoLsTU_wpS7in-GcEjN14o,17007
|
|
167
|
-
flock/logging/formatters/themed_formatter.py,sha256=
|
|
167
|
+
flock/logging/formatters/themed_formatter.py,sha256=mUOR1BWBvgRkVjDA1aUaKj--MJ02POcGi1psMkcA2E0,20117
|
|
168
168
|
flock/logging/formatters/themes.py,sha256=80BRJJB0LZr11N0yQw2f8vdb_9179qjQO8PoeBaLMN0,10680
|
|
169
169
|
flock/logging/span_middleware/baggage_span_processor.py,sha256=gJfRl8FeB6jdtghTaRHCrOaTo4fhPMRKgjqtZj-8T48,1118
|
|
170
170
|
flock/logging/telemetry_exporter/base_exporter.py,sha256=T8l7GwjIulc2KbkgmhJbQ_psrLNwTGNSi23jvw6MKVA,1205
|
|
@@ -173,9 +173,9 @@ flock/logging/telemetry_exporter/file_exporter.py,sha256=uTgQZSKfbLjzypirBbiVncc
|
|
|
173
173
|
flock/logging/telemetry_exporter/sqlite_exporter.py,sha256=754G8s4X-JHHpCdoNydJnPX4NZijZk9URutfPWFIT7s,3479
|
|
174
174
|
flock/mcp/__init__.py,sha256=QuANhTz09E2fFhtp2yJ716WxXKwEpCMTGqHj54VRs2Q,2512
|
|
175
175
|
flock/mcp/client.py,sha256=FRkuWNohFhzAzv-8aLz8Nd3CxkCf_SgHpfbPGTjRbMg,25790
|
|
176
|
-
flock/mcp/config.py,sha256=
|
|
176
|
+
flock/mcp/config.py,sha256=Bk8V2NdbUKwoOvOYdRw-FmEqug2jMjTuGftMUu7tNkI,14821
|
|
177
177
|
flock/mcp/manager.py,sha256=X54Ph5CtcIIZNuWndSH2sZijVjVBpPCNHS4M-B1bViU,10942
|
|
178
|
-
flock/mcp/tool.py,sha256=
|
|
178
|
+
flock/mcp/tool.py,sha256=rp4iMMnEu6xxEFxjX6In4rmBFwFAtmhPDzNGMsm56Qw,5368
|
|
179
179
|
flock/mcp/servers/sse/__init__.py,sha256=qyfDdkZkgscHOkFREvsvoNtzA-CCnXPNma5w9uaIUCo,51
|
|
180
180
|
flock/mcp/servers/sse/flock_sse_server.py,sha256=dbkRAcn11V9bBEoPlCMuuzuErTjHigqsnvGYJL4v2ts,3685
|
|
181
181
|
flock/mcp/servers/stdio/__init__.py,sha256=jgWpJAJ3cV1klZ70gasXrdrpUCsMkVtEAeX0QoVhMGQ,53
|
|
@@ -530,8 +530,8 @@ flock/themes/zenburned.toml,sha256=UEmquBbcAO3Zj652XKUwCsNoC2iQSlIh-q5c6DH-7Kc,1
|
|
|
530
530
|
flock/themes/zenwritten-dark.toml,sha256=-dgaUfg1iCr5Dv4UEeHv_cN4GrPUCWAiHSxWK20X1kI,1663
|
|
531
531
|
flock/themes/zenwritten-light.toml,sha256=G1iEheCPfBNsMTGaVpEVpDzYBHA_T-MV27rolUYolmE,1666
|
|
532
532
|
flock/utility/output_utility_component.py,sha256=yVHhlIIIoYKziI5UyT_zvQb4G-NsxCTgLwA1wXXTTj4,9047
|
|
533
|
-
flock_core-0.5.
|
|
534
|
-
flock_core-0.5.
|
|
535
|
-
flock_core-0.5.
|
|
536
|
-
flock_core-0.5.
|
|
537
|
-
flock_core-0.5.
|
|
533
|
+
flock_core-0.5.8.dist-info/METADATA,sha256=-YTxJyohimdEDkoYR2aSsuts3WQ4WC-uW68MSzQJSxo,45182
|
|
534
|
+
flock_core-0.5.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
535
|
+
flock_core-0.5.8.dist-info/entry_points.txt,sha256=UQdPmtHd97gSA_IdLt9MOd-1rrf_WO-qsQeIiHWVrp4,42
|
|
536
|
+
flock_core-0.5.8.dist-info/licenses/LICENSE,sha256=U3IZuTbC0yLj7huwJdldLBipSOHF4cPf6cUOodFiaBE,1072
|
|
537
|
+
flock_core-0.5.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|