coze-coding-utils 0.2.3a2__tar.gz → 0.2.3a3__tar.gz
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.
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/PKG-INFO +1 -1
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/pyproject.toml +1 -1
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/helper/stream_runner.py +111 -5
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/.gitignore +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/LICENSE +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/README.md +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/classifier.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/codes.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/exceptions.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/patterns.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/test_classifier.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/file/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/file/file.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/helper/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/helper/agent_helper.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/helper/graph_helper.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/common.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/config.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/err_trace.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/loop_trace.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/node_log.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/parser.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/write_log.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/messages/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/messages/client.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/messages/server.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/converter/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/converter/request_converter.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/converter/response_converter.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/handler.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/types/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/types/request.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/types/response.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/runtime_ctx/__init__.py +0 -0
- {coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/runtime_ctx/context.py +0 -0
|
@@ -7,24 +7,30 @@ from abc import ABC, abstractmethod
|
|
|
7
7
|
from typing import Any, Dict, Iterator, AsyncIterable
|
|
8
8
|
from langchain_core.runnables import RunnableConfig
|
|
9
9
|
from langgraph.graph.state import CompiledStateGraph
|
|
10
|
-
from coze_coding_utils.runtime_ctx.context import Context
|
|
11
10
|
from coze_coding_utils.helper.agent_helper import (
|
|
12
11
|
to_stream_input,
|
|
13
|
-
to_client_message,
|
|
14
12
|
agent_iter_server_messages,
|
|
15
13
|
)
|
|
14
|
+
|
|
15
|
+
from coze_coding_utils.error import classify_error
|
|
16
|
+
import asyncio
|
|
17
|
+
import time
|
|
18
|
+
import traceback
|
|
19
|
+
from typing import Any, Dict, AsyncGenerator, Callable
|
|
20
|
+
from coze_coding_utils.runtime_ctx.context import Context
|
|
16
21
|
from coze_coding_utils.messages.server import (
|
|
22
|
+
create_message_end_dict,
|
|
23
|
+
create_message_error_dict,
|
|
17
24
|
MESSAGE_END_CODE_CANCELED,
|
|
18
|
-
create_message_end_dict, create_message_error_dict,
|
|
19
25
|
)
|
|
20
|
-
from coze_coding_utils.
|
|
26
|
+
from coze_coding_utils.helper.agent_helper import to_client_message
|
|
27
|
+
from coze_coding_utils.error.classifier import ErrorClassifier
|
|
21
28
|
|
|
22
29
|
logger = logging.getLogger(__name__)
|
|
23
30
|
|
|
24
31
|
TIMEOUT_SECONDS = 900
|
|
25
32
|
PING_INTERVAL_SECONDS = 30
|
|
26
33
|
|
|
27
|
-
|
|
28
34
|
class WorkflowEventType:
|
|
29
35
|
WORKFLOW_START = "workflow_start"
|
|
30
36
|
WORKFLOW_END = "workflow_end"
|
|
@@ -450,6 +456,106 @@ class WorkflowStreamRunner(BaseStreamRunner):
|
|
|
450
456
|
pass
|
|
451
457
|
|
|
452
458
|
|
|
459
|
+
async def agent_stream_handler(
|
|
460
|
+
payload: Dict[str, Any],
|
|
461
|
+
ctx: Context,
|
|
462
|
+
run_id: str,
|
|
463
|
+
stream_sse_func: Callable,
|
|
464
|
+
sse_event_func: Callable,
|
|
465
|
+
error_classifier: ErrorClassifier,
|
|
466
|
+
register_task_func: Callable[[str, asyncio.Task], None],
|
|
467
|
+
) -> AsyncGenerator[str, None]:
|
|
468
|
+
task = asyncio.current_task()
|
|
469
|
+
if task:
|
|
470
|
+
register_task_func(run_id, task)
|
|
471
|
+
logger.info(f"Registered agent streaming task for run_id: {run_id}")
|
|
472
|
+
|
|
473
|
+
client_msg, _ = to_client_message(payload)
|
|
474
|
+
t0 = time.time()
|
|
475
|
+
|
|
476
|
+
try:
|
|
477
|
+
async for chunk in stream_sse_func(payload, ctx, need_detail=False):
|
|
478
|
+
yield chunk
|
|
479
|
+
except asyncio.CancelledError:
|
|
480
|
+
logger.info(f"Agent stream cancelled for run_id: {run_id}")
|
|
481
|
+
end_msg = create_message_end_dict(
|
|
482
|
+
code=MESSAGE_END_CODE_CANCELED,
|
|
483
|
+
message="Stream cancelled by user",
|
|
484
|
+
session_id=client_msg.session_id,
|
|
485
|
+
query_msg_id=client_msg.local_msg_id,
|
|
486
|
+
log_id=ctx.logid,
|
|
487
|
+
time_cost_ms=int((time.time() - t0) * 1000),
|
|
488
|
+
reply_id="",
|
|
489
|
+
sequence_id=1,
|
|
490
|
+
)
|
|
491
|
+
yield sse_event_func(end_msg)
|
|
492
|
+
raise
|
|
493
|
+
except Exception as ex:
|
|
494
|
+
err = error_classifier.classify(ex, {"node_name": "agent_stream", "run_id": run_id})
|
|
495
|
+
logger.error(
|
|
496
|
+
f"Unexpected error in agent_stream: [{err.code}] {err.message}, "
|
|
497
|
+
f"traceback: {traceback.format_exc()}"
|
|
498
|
+
)
|
|
499
|
+
error_msg = create_message_error_dict(
|
|
500
|
+
code=str(err.code),
|
|
501
|
+
message=str(ex),
|
|
502
|
+
session_id=client_msg.session_id,
|
|
503
|
+
query_msg_id=client_msg.local_msg_id,
|
|
504
|
+
log_id=ctx.logid,
|
|
505
|
+
reply_id="",
|
|
506
|
+
sequence_id=1,
|
|
507
|
+
local_msg_id=client_msg.local_msg_id,
|
|
508
|
+
)
|
|
509
|
+
yield sse_event_func(error_msg)
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
async def workflow_stream_handler(
|
|
513
|
+
payload: Dict[str, Any],
|
|
514
|
+
ctx: Context,
|
|
515
|
+
run_id: str,
|
|
516
|
+
stream_sse_func: Callable,
|
|
517
|
+
sse_event_func: Callable,
|
|
518
|
+
error_classifier: ErrorClassifier,
|
|
519
|
+
register_task_func: Callable[[str, asyncio.Task], None],
|
|
520
|
+
workflow_debug: bool = False,
|
|
521
|
+
) -> AsyncGenerator[str, None]:
|
|
522
|
+
task = asyncio.current_task()
|
|
523
|
+
if task:
|
|
524
|
+
register_task_func(run_id, task)
|
|
525
|
+
logger.info(f"Registered workflow streaming task for run_id: {run_id}")
|
|
526
|
+
|
|
527
|
+
try:
|
|
528
|
+
async for chunk in stream_sse_func(payload, ctx, need_detail=workflow_debug):
|
|
529
|
+
yield chunk
|
|
530
|
+
except asyncio.CancelledError:
|
|
531
|
+
logger.info(f"Workflow stream cancelled for run_id: {run_id}")
|
|
532
|
+
cancel_event = {
|
|
533
|
+
"type": "error",
|
|
534
|
+
"timestamp": int(time.time() * 1000),
|
|
535
|
+
"log_id": ctx.logid,
|
|
536
|
+
"run_id": run_id,
|
|
537
|
+
"code": "CANCELED",
|
|
538
|
+
"error_msg": "Stream cancelled by user",
|
|
539
|
+
}
|
|
540
|
+
yield sse_event_func(cancel_event)
|
|
541
|
+
raise
|
|
542
|
+
except Exception as ex:
|
|
543
|
+
err = error_classifier.classify(ex, {"node_name": "workflow_stream", "run_id": run_id})
|
|
544
|
+
logger.error(
|
|
545
|
+
f"Unexpected error in workflow_stream: [{err.code}] {err.message}, "
|
|
546
|
+
f"traceback: {traceback.format_exc()}"
|
|
547
|
+
)
|
|
548
|
+
error_event = {
|
|
549
|
+
"type": "error",
|
|
550
|
+
"timestamp": int(time.time() * 1000),
|
|
551
|
+
"log_id": ctx.logid,
|
|
552
|
+
"run_id": run_id,
|
|
553
|
+
"code": str(err.code),
|
|
554
|
+
"error_msg": str(ex),
|
|
555
|
+
}
|
|
556
|
+
yield sse_event_func(error_event)
|
|
557
|
+
|
|
558
|
+
|
|
453
559
|
def get_stream_runner(is_agent: bool) -> BaseStreamRunner:
|
|
454
560
|
if is_agent:
|
|
455
561
|
return AgentStreamRunner()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/__init__.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/classifier.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/codes.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/exceptions.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/error/patterns.py
RENAMED
|
File without changes
|
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/file/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/helper/__init__.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/helper/agent_helper.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/helper/graph_helper.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/err_trace.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/loop_trace.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/node_log.py
RENAMED
|
File without changes
|
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/log/write_log.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/messages/__init__.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/messages/client.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/messages/server.py
RENAMED
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/openai/handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coze_coding_utils-0.2.3a2 → coze_coding_utils-0.2.3a3}/src/coze_coding_utils/runtime_ctx/context.py
RENAMED
|
File without changes
|