quraite 0.1.3__py3-none-any.whl → 0.1.4__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.
Files changed (49) hide show
  1. quraite/__init__.py +4 -0
  2. quraite/adapters/agno_adapter.py +50 -92
  3. quraite/adapters/base.py +26 -76
  4. quraite/adapters/bedrock_agents_adapter.py +23 -76
  5. quraite/adapters/flowise_adapter.py +31 -72
  6. quraite/adapters/google_adk_adapter.py +28 -94
  7. quraite/adapters/http_adapter.py +28 -44
  8. quraite/adapters/langchain_adapter.py +51 -118
  9. quraite/adapters/langchain_server_adapter.py +37 -89
  10. quraite/adapters/langflow_adapter.py +15 -60
  11. quraite/adapters/n8n_adapter.py +19 -63
  12. quraite/adapters/openai_agents_adapter.py +35 -59
  13. quraite/adapters/pydantic_ai_adapter.py +27 -97
  14. quraite/adapters/smolagents_adapter.py +21 -82
  15. quraite/constants/framework.py +14 -0
  16. quraite/schema/__init__.py +4 -0
  17. quraite/schema/invoke.py +46 -0
  18. quraite/schema/message.py +20 -21
  19. quraite/serve/__init__.py +4 -0
  20. quraite/serve/cloudflared.py +3 -2
  21. quraite/serve/server.py +305 -0
  22. quraite/tracing/__init__.py +8 -5
  23. quraite/tracing/constants.py +0 -14
  24. quraite/tracing/setup.py +129 -0
  25. quraite/tracing/span_exporter.py +6 -6
  26. quraite/tracing/span_processor.py +6 -7
  27. quraite/tracing/tool_extractors.py +1 -1
  28. quraite/tracing/trace.py +36 -24
  29. quraite/utils/json_utils.py +2 -2
  30. {quraite-0.1.3.dist-info → quraite-0.1.4.dist-info}/METADATA +54 -62
  31. quraite-0.1.4.dist-info/RECORD +37 -0
  32. quraite/schema/response.py +0 -16
  33. quraite/serve/local_agent.py +0 -361
  34. quraite/traces/traces_adk_openinference.json +0 -379
  35. quraite/traces/traces_agno_multi_agent.json +0 -669
  36. quraite/traces/traces_agno_openinference.json +0 -321
  37. quraite/traces/traces_crewai_openinference.json +0 -155
  38. quraite/traces/traces_langgraph_openinference.json +0 -349
  39. quraite/traces/traces_langgraph_openinference_multi_agent.json +0 -2705
  40. quraite/traces/traces_langgraph_traceloop.json +0 -510
  41. quraite/traces/traces_openai_agents_multi_agent_1.json +0 -402
  42. quraite/traces/traces_openai_agents_openinference.json +0 -341
  43. quraite/traces/traces_pydantic_openinference.json +0 -286
  44. quraite/traces/traces_pydantic_openinference_multi_agent_1.json +0 -399
  45. quraite/traces/traces_pydantic_openinference_multi_agent_2.json +0 -398
  46. quraite/traces/traces_smol_agents_openinference.json +0 -397
  47. quraite/traces/traces_smol_agents_tool_calling_openinference.json +0 -704
  48. quraite-0.1.3.dist-info/RECORD +0 -49
  49. {quraite-0.1.3.dist-info → quraite-0.1.4.dist-info}/WHEEL +0 -0
@@ -1,4 +1,3 @@
1
- import typing
2
1
 
3
2
  from opentelemetry.context import (
4
3
  _SUPPRESS_INSTRUMENTATION_KEY,
@@ -7,24 +6,24 @@ from opentelemetry.context import (
7
6
  detach,
8
7
  set_value,
9
8
  )
10
- from opentelemetry.sdk.trace.export import ReadableSpan, SpanExporter, SpanProcessor
9
+ from opentelemetry.sdk.trace.export import ReadableSpan, SpanProcessor
11
10
  from opentelemetry.trace import Span, logger
12
11
 
13
- from quraite.tracing.span_exporter import QuraiteInMemorySpanExporter
12
+ from quraite.tracing.span_exporter import QuraiteSpanExporter
14
13
 
15
14
 
16
- class QuraiteSimpleSpanProcessor(SpanProcessor):
15
+ class QuraiteSpanProcessor(SpanProcessor):
17
16
  """Simple SpanProcessor implementation.
18
17
 
19
18
  SimpleSpanProcessor is an implementation of `SpanProcessor` that
20
19
  passes ended spans directly to the configured `SpanExporter`.
21
20
  """
22
21
 
23
- def __init__(self, span_exporter: SpanExporter):
24
- self.span_exporter: QuraiteInMemorySpanExporter = span_exporter
22
+ def __init__(self, span_exporter: QuraiteSpanExporter):
23
+ self.span_exporter: QuraiteSpanExporter = span_exporter
25
24
 
26
25
  def on_start(
27
- self, span: Span, parent_context: typing.Optional[Context] = None
26
+ self, span: Span, parent_context: Context | None = None
28
27
  ) -> None:
29
28
  pass
30
29
 
@@ -10,7 +10,7 @@ from typing import Any, Protocol
10
10
 
11
11
  from openinference.semconv.trace import SpanAttributes
12
12
 
13
- from quraite.tracing.constants import Framework
13
+ from quraite.constants.framework import Framework
14
14
 
15
15
 
16
16
  class ToolCallInfo:
quraite/tracing/trace.py CHANGED
@@ -3,23 +3,28 @@ from __future__ import annotations
3
3
 
4
4
  import json
5
5
  from functools import cached_property
6
- from typing import Any, List, Optional
6
+ from typing import Any
7
7
 
8
8
  from openinference.semconv.trace import OpenInferenceSpanKindValues, SpanAttributes
9
9
  from opentelemetry.sdk.trace import ReadableSpan
10
10
  from opentelemetry.sdk.trace import Span as OTelSpan
11
11
  from pydantic import BaseModel, ConfigDict, Field
12
12
 
13
+ from quraite.constants.framework import Framework
13
14
  from quraite.logger import get_logger
14
- from quraite.schema.message import AssistantMessage, AssistantMessageMetadata
15
+ from quraite.schema.message import (
16
+ AssistantMessage,
17
+ AssistantMessageMetadata,
18
+ MessageContentText,
19
+ SystemMessage,
20
+ ToolCall,
21
+ ToolMessage,
22
+ ToolMessageMetadata,
23
+ )
15
24
  from quraite.schema.message import CostInfo as MessageCostInfo
16
25
  from quraite.schema.message import LatencyInfo as MessageLatencyInfo
17
- from quraite.schema.message import MessageContentText
18
26
  from quraite.schema.message import ModelInfo as MessageModelInfo
19
- from quraite.schema.message import SystemMessage
20
27
  from quraite.schema.message import TokenInfo as MessageTokenInfo
21
- from quraite.schema.message import ToolCall, ToolMessage, ToolMessageMetadata
22
- from quraite.tracing.constants import Framework
23
28
  from quraite.tracing.types import Event, Link, Resource, SpanContext, SpanKind, Status
24
29
  from quraite.tracing.utils import unflatten_messages
25
30
 
@@ -153,7 +158,7 @@ class AgentSpan(BaseModel):
153
158
  )
154
159
  )
155
160
 
156
- def to_llm_messages(self) -> List[dict[str, Any]]:
161
+ def to_llm_messages(self) -> list[dict[str, Any]]:
157
162
  """
158
163
  Convert LLM span to output messages.
159
164
 
@@ -309,15 +314,21 @@ class AgentTrace(BaseModel):
309
314
  arguments_str = function.get("arguments", "")
310
315
 
311
316
  # Parse arguments - could be JSON string or already a dict
312
- arguments = {}
313
- if arguments_str:
314
- if isinstance(arguments_str, str):
317
+ arguments = arguments_str if isinstance(arguments_str, dict) else {}
318
+ if isinstance(arguments_str, str):
319
+ result: str | dict = arguments_str
320
+ for _ in range(3):
315
321
  try:
316
- arguments = json.loads(arguments_str)
322
+ result = json.loads(result)
323
+ if not isinstance(result, str):
324
+ break
317
325
  except (json.JSONDecodeError, TypeError):
318
- arguments = {}
319
- elif isinstance(arguments_str, dict):
320
- arguments = arguments_str
326
+ logger.exception(
327
+ "Error loading JSON from arguments_str"
328
+ )
329
+ result = {}
330
+ break
331
+ arguments = result if isinstance(result, dict) else {}
321
332
 
322
333
  tool_calls_list.append(
323
334
  ToolCall(
@@ -405,9 +416,9 @@ class AgentTrace(BaseModel):
405
416
 
406
417
  def to_agent_trajectory(
407
418
  self,
408
- framework: Optional[Framework] = Framework.DEFAULT,
409
- only_leaf_llms: Optional[bool] = True,
410
- ) -> List[AssistantMessage | ToolMessage]:
419
+ framework: Framework | None = Framework.DEFAULT,
420
+ only_leaf_llms: bool | None = True,
421
+ ) -> list[AssistantMessage | ToolMessage]:
411
422
  """
412
423
  Convert trace spans to agent trajectory.
413
424
 
@@ -468,7 +479,7 @@ class AgentTrace(BaseModel):
468
479
  return any(child_id in llm_span_ids for child_id in children)
469
480
 
470
481
  # Collect messages from spans
471
- messages: List[AssistantMessage | ToolMessage] = []
482
+ messages: list[AssistantMessage | ToolMessage] = []
472
483
 
473
484
  for span in sorted_spans:
474
485
  span_id = str(span.context.span_id) if span.context.span_id else None
@@ -489,15 +500,16 @@ class AgentTrace(BaseModel):
489
500
  # Use span method to extract tool message
490
501
  tool_msg = span.to_tool_message(framework=framework)
491
502
  if tool_msg:
492
- converted = self._convert_tool_message(tool_msg)
493
- if converted:
494
- converted.metadata = self._extract_tool_metadata(span)
495
- messages.append(converted)
503
+ converted_tool = self._convert_tool_message(tool_msg)
504
+ if converted_tool:
505
+ tool_metadata = self._extract_tool_metadata(span)
506
+ converted_tool.metadata = tool_metadata
507
+ messages.append(converted_tool)
496
508
 
497
509
  return messages
498
510
 
499
511
  @cached_property
500
- def system_messages(self) -> List[SystemMessage]:
512
+ def system_messages(self) -> list[SystemMessage]:
501
513
  """
502
514
  Extract unique system messages from all LLM spans in the trace.
503
515
 
@@ -505,7 +517,7 @@ class AgentTrace(BaseModel):
505
517
  List of unique system messages from LLM input messages (deduplicated)
506
518
  """
507
519
  seen_messages = set()
508
- system_messages: List[SystemMessage] = []
520
+ system_messages: list[SystemMessage] = []
509
521
 
510
522
  for span in self.spans:
511
523
  if span.is_llm_call():
@@ -58,7 +58,7 @@ def parse_malformed_object(obj_str: str) -> dict[str, Any]:
58
58
  """
59
59
  Manually parse a malformed object string with key=value pairs.
60
60
  """
61
- result = {}
61
+ result: dict[str, Any] = {}
62
62
 
63
63
  # Remove outer braces
64
64
  content = obj_str.strip()[1:-1]
@@ -173,7 +173,7 @@ def parse_content_object(content_str: str) -> dict[str, Any]:
173
173
  return {"raw": content_str}
174
174
 
175
175
  content = content_str[start:end]
176
- result = {}
176
+ result: dict[str, Any] = {}
177
177
 
178
178
  # Split by commas, handling nested structures
179
179
  parts = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: quraite
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: This project provides adaptors and methods to integrate with the Quraite platform
5
5
  Author: Shiv Mohith
6
6
  Author-email: Shiv Mohith <shivmohith8@gmail.com>
@@ -92,55 +92,43 @@ pip install 'quraite[langchain,pydantic-ai,agno]'
92
92
  Pass your compiled LangChain agent to the adapter and expose it as an HTTP API:
93
93
 
94
94
  ```python
95
- import asyncio
96
- import uvicorn
97
95
  from dotenv import load_dotenv
98
- from openinference.instrumentation import TracerProvider
99
- from openinference.instrumentation.langchain import LangChainInstrumentor
100
96
 
101
- from quraite.adapters import LangChainAdapter
102
- from quraite.serve.local_agent import LocalAgentServer
103
- from quraite.tracing.span_exporter import QuraiteInMemorySpanExporter
104
- from quraite.tracing.span_processor import QuraiteSimpleSpanProcessor
97
+ from quraite import run_agent
98
+ from quraite.adapters import LangchainAdapter
99
+ from quraite.tracing import Framework, setup_tracing
105
100
 
106
101
  load_dotenv()
107
102
 
108
- # Set up tracing
109
- # Use Quraite's in-memory span exporter to capture the agent trajectory
110
- # and use it for evaluation.
111
- tracer_provider = TracerProvider()
112
- quraite_span_exporter = QuraiteInMemorySpanExporter()
113
- quraite_span_processor = QuraiteSimpleSpanProcessor(quraite_span_exporter)
114
- tracer_provider.add_span_processor(quraite_span_processor)
115
- LangChainInstrumentor().instrument(tracer_provider=tracer_provider)
116
-
117
103
  # Your compiled LangChain agent (created elsewhere)
118
104
  # agent = create_agent(...)
119
105
 
120
- # Wrap with Quraite adapter
121
- adapter = LangChainAdapter(
106
+ # Setup tracing once
107
+ tracer_provider = setup_tracing([Framework.LANGCHAIN])
108
+
109
+ # Create adapter with tracer provider
110
+ adapter = LangchainAdapter(
122
111
  agent_graph=agent, # Pass your compiled LangChain agent here
123
112
  tracer_provider=tracer_provider,
124
113
  )
125
114
 
126
- # Create and start server with Cloudflare tunnel
127
- server = LocalAgentServer(
128
- wrapped_agent=adapter,
115
+ # Option 1: Use run_agent to start the server (simplest)
116
+ run_agent(
117
+ adapter,
129
118
  agent_id="your-agent-id", # Optional: for Quraite platform integration
130
- )
131
-
132
- app = server.create_app(
133
119
  port=8080,
134
120
  host="0.0.0.0",
135
121
  tunnel="cloudflare", # Options: "cloudflare", "ngrok", or "none"
136
122
  )
137
123
 
138
- # Option 1: Use the start method to start the server
139
- asyncio.run(server.start(host="0.0.0.0", port=8080))
124
+ # Option 2: Use create_app for more control (e.g., with uvicorn reload)
125
+ from quraite import create_app
126
+ import uvicorn
127
+
128
+ app = create_app(adapter, agent_id="your-agent-id")
140
129
 
141
- # Option 2: Use uvicorn to start the server for auto-reload
142
- # if __name__ == "__main__":
143
- # uvicorn.run("local_server:app", host="0.0.0.0", port=8080, reload=True)
130
+ if __name__ == "__main__":
131
+ uvicorn.run("local_server:app", host="0.0.0.0", port=8080, reload=True)
144
132
  ```
145
133
 
146
134
  The server exposes:
@@ -191,20 +179,14 @@ Most agent frameworks return agent steps, but lack critical observability data.
191
179
  To enable tracing:
192
180
 
193
181
  ```python
194
- from openinference.instrumentation import TracerProvider
195
- from quraite.tracing.span_exporter import QuraiteInMemorySpanExporter
196
- from quraite.tracing.span_processor import QuraiteSimpleSpanProcessor
197
-
198
- tracer_provider = TracerProvider()
182
+ from quraite.tracing import Framework, setup_tracing
199
183
 
200
- # Add Quraite span exporter and processor to the tracer provider
201
- quraite_span_exporter = QuraiteInMemorySpanExporter()
202
- quraite_span_processor = QuraiteSimpleSpanProcessor(quraite_span_exporter)
203
- tracer_provider.add_span_processor(quraite_span_processor)
184
+ # Setup tracing once at app startup
185
+ tracer_provider = setup_tracing([Framework.LANGCHAIN])
204
186
 
205
- # Instrument your framework with OpenInference
206
- from openinference.instrumentation.langchain import LangChainInstrumentor
207
- LangChainInstrumentor().instrument(tracer_provider=tracer_provider)
187
+ # Pass to adapter
188
+ from quraite.adapters import LangchainAdapter
189
+ adapter = LangchainAdapter(agent_graph=agent, tracer_provider=tracer_provider)
208
190
  ```
209
191
 
210
192
  ### Message Schema
@@ -245,16 +227,18 @@ tool_msg = ToolMessage(
245
227
  )
246
228
  ```
247
229
 
248
- ### Response Format
230
+ ### Invoke Input and Output
249
231
 
250
- Agent invocations return an `AgentInvocationResponse`:
232
+ Agent invocations use structured `InvokeInput` and return `InvokeOutput`:
251
233
 
252
234
  ```python
253
- from quraite.schema.response import AgentInvocationResponse
235
+ from quraite.schema.invoke import InvokeInput, InvokeOutput
254
236
 
255
- response: AgentInvocationResponse = await adapter.ainvoke(
256
- input=[user_msg],
257
- session_id="session-123"
237
+ response: InvokeOutput = await adapter.ainvoke(
238
+ input=InvokeInput(
239
+ user_message=user_msg,
240
+ session_id="session-123"
241
+ )
258
242
  )
259
243
 
260
244
  # Access trajectory (list of messages)
@@ -292,37 +276,45 @@ All adapters inherit from `BaseAdapter`:
292
276
 
293
277
  ```python
294
278
  from quraite.adapters.base import BaseAdapter
279
+ from quraite.schema.invoke import InvokeInput, InvokeOutput
295
280
 
296
281
  class MyAdapter(BaseAdapter):
297
282
  async def ainvoke(
298
283
  self,
299
- input: List[AgentMessage],
300
- session_id: str | None,
301
- ) -> AgentInvocationResponse:
284
+ input: InvokeInput,
285
+ ) -> InvokeOutput:
302
286
  # Implementation
287
+ # Access user_message: input.user_message
288
+ # Access session_id: input.session_id
303
289
  pass
304
290
  ```
305
291
 
306
- ### LocalAgentServer
292
+ ### Running Your Agent
307
293
 
308
- Create a local HTTP server for your agent:
294
+ Use `run_agent` or `create_app` to start a local HTTP server for your agent:
309
295
 
310
296
  ```python
311
- import asyncio
312
- from quraite.serve.local_agent import LocalAgentServer
297
+ from quraite import run_agent, create_app
313
298
 
314
- server = LocalAgentServer(
315
- wrapped_agent=adapter,
299
+ # Simple approach: run_agent handles everything
300
+ run_agent(
301
+ adapter,
316
302
  agent_id="optional-agent-id",
317
- )
318
-
319
- app = server.create_app(
320
303
  port=8080,
321
304
  host="0.0.0.0",
322
305
  tunnel="cloudflare", # or "ngrok" or "none"
323
306
  )
324
307
 
325
- asyncio.run(server.start(host="0.0.0.0", port=8080))
308
+ # Advanced approach: create_app for more control (e.g., uvicorn reload)
309
+ import uvicorn
310
+
311
+ app = create_app(
312
+ adapter,
313
+ agent_id="optional-agent-id",
314
+ )
315
+
316
+ if __name__ == "__main__":
317
+ uvicorn.run("local_server:app", host="0.0.0.0", port=8080, reload=True)
326
318
  ```
327
319
 
328
320
  ## Development
@@ -0,0 +1,37 @@
1
+ quraite/__init__.py,sha256=7jS37UVvrYYGKwjhChMCHiSFN4zaAFquZL9weIQMJPE,166
2
+ quraite/adapters/__init__.py,sha256=-2FPY_cUHtIKVlB7O3SUkgrEp1iybJ1z3VM52SjYk3I,4842
3
+ quraite/adapters/agno_adapter.py,sha256=pVq5C3mOBAYb62lpjsjmS-2KtDJtnai0mAk4dxvEhyM,4184
4
+ quraite/adapters/base.py,sha256=PIeWZTMzp9SEXtkYyd-Qc2uNhMjie2mRT6U3xTJHSdo,2358
5
+ quraite/adapters/bedrock_agents_adapter.py,sha256=knwz6RA1-aibMIMWCrsf-L81XBAehVWjCWs8s-MI2Zw,12024
6
+ quraite/adapters/flowise_adapter.py,sha256=2uyCbC7mUpZljrJZRnFzdMw3piECZVViQ6jR75FlppA,8682
7
+ quraite/adapters/google_adk_adapter.py,sha256=jxawemzLxQOf0FaCz39Se_0nAWR1h0UHYeUK-9vFSI8,5264
8
+ quraite/adapters/http_adapter.py,sha256=qf0nS8LzC10fbolCQ62HItGoAYoNN0o-qv_Yooqyn-8,7370
9
+ quraite/adapters/langchain_adapter.py,sha256=FCt9K3MCqG-lj71QapKhSELwCjY_Fc3DHhL_-YoQrns,8993
10
+ quraite/adapters/langchain_server_adapter.py,sha256=KbakUla41-mMFhNdb4Q1Ie8rRCmLU-fzMx-lGRolSLI,7504
11
+ quraite/adapters/langflow_adapter.py,sha256=D1dh7L9UrhONPwVGtcfj8G4LguRTpzOyskQJ_mb7TTg,5249
12
+ quraite/adapters/n8n_adapter.py,sha256=TJdDLA2IEd_wCKQRCs9qzs-9iLoPoENefExUGi7H1XY,6417
13
+ quraite/adapters/openai_agents_adapter.py,sha256=lcc2v1Q89E1j9A12IY8UfMoxM39HlJuIrhxZXax0SzI,8537
14
+ quraite/adapters/pydantic_ai_adapter.py,sha256=MzdA-qPZxkMEVYafXcwDG-_7P3JRP1D1__BXAh6GNnA,8171
15
+ quraite/adapters/smolagents_adapter.py,sha256=aJyLf5-6dMh1bQQ91KoaeVBGVyIRz7fbqXFIMO9DsF8,3106
16
+ quraite/constants/framework.py,sha256=ZPTXUP6HtkzGUUQgDBr6rV6AXHC-Uf3RJ-XArmjqsbI,311
17
+ quraite/logger.py,sha256=Py5GRQfD_s5FVb2Ziz5JxJk9AT4ve6w_iePbOSQkwH4,1601
18
+ quraite/schema/__init__.py,sha256=-oZxv5ufJWyzZo8YDrP5USYr-UPtl7qPCzIvV2PvtbI,165
19
+ quraite/schema/invoke.py,sha256=vHgQGro8uGC8sw-JzgQUJ8CrzVRWlC5A14OhIvuyZYM,1317
20
+ quraite/schema/message.py,sha256=84dCcV-Dm4vkM1DGxNerYPd-ybz_hvPBRUky_dcHX20,2226
21
+ quraite/serve/__init__.py,sha256=GCRJSZKCXJXMjvg1e8HhXLTdCbFoR7abcNB7rYS2Gcs,158
22
+ quraite/serve/cloudflared.py,sha256=YIQkUq0pIwJDLkZoVhcO77O3yMyI1rAhN0ywzN4fsws,6518
23
+ quraite/serve/server.py,sha256=Hw7yDdzAfQi-8FtwEpn-mKuJlEUJi-hlZJR5VSlgys8,9756
24
+ quraite/tracing/__init__.py,sha256=eemwel7P00Outi6v0OAP5KnUWPlWzoRrQW-aiRAAEds,843
25
+ quraite/tracing/constants.py,sha256=y43slSQiyoGWoHmos30w20Bts9r-YsrlZYjYxzLmSLw,48
26
+ quraite/tracing/setup.py,sha256=YUEcsJse653uc-TXwczC34MaFc2q952umUROjGKjSgk,4717
27
+ quraite/tracing/span_exporter.py,sha256=3ZM1RwZ53PU7CM_5KZjix0Oi46q7nk4ThNj0eTa53Vo,3880
28
+ quraite/tracing/span_processor.py,sha256=uXnTJKqs89-qGidBE33I5J0e6vZ25GXzfdeKcfnUd58,1383
29
+ quraite/tracing/tool_extractors.py,sha256=3ai2iavPUunf_lZArll6k3qZWHWTLsJDrlnDjLMTUTg,9802
30
+ quraite/tracing/trace.py,sha256=siXt246DACghHmr--I5oazmWG_wRzpr0gaku_lUi-ts,22030
31
+ quraite/tracing/types.py,sha256=sWyp-7Qc8zsWN6ltem8OSTRIgKWbqnQSfsTKX6RrrB8,4948
32
+ quraite/tracing/utils.py,sha256=Vm5q_iN_K1f_nEMpkQzv6jiUPpS2Yzo_VP5ZVmJZdBQ,5673
33
+ quraite/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ quraite/utils/json_utils.py,sha256=7obT8t92z6dK8nerGgfjVL_v5y96e8wX8eglGAHI50Y,18718
35
+ quraite-0.1.4.dist-info/WHEEL,sha256=5w2T7AS2mz1-rW9CNagNYWRCaB0iQqBMYLwKdlgiR4Q,78
36
+ quraite-0.1.4.dist-info/METADATA,sha256=xv9GN6JbHYMvrzEJ2wcxF9IVyo20gBQjghH6jykZBgM,11398
37
+ quraite-0.1.4.dist-info/RECORD,,
@@ -1,16 +0,0 @@
1
- from typing import List, Optional
2
-
3
- from pydantic import BaseModel
4
-
5
- from quraite.schema.message import AgentMessage
6
- from quraite.tracing.trace import AgentTrace
7
-
8
-
9
- class AgentInvocationResponse(BaseModel):
10
- """
11
- Response model for agent invocation.
12
- """
13
-
14
- agent_trace: Optional[AgentTrace] = None
15
- agent_trajectory: Optional[List[AgentMessage]] = None
16
- agent_final_response: Optional[str] = None