julee 0.1.6__py3-none-any.whl → 0.1.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.
- julee/__init__.py +1 -1
- julee/contrib/polling/apps/worker/pipelines.py +3 -1
- julee/contrib/polling/tests/unit/apps/worker/test_pipelines.py +3 -0
- julee/domain/models/assembly_specification/knowledge_service_query.py +1 -1
- julee/domain/models/assembly_specification/tests/test_knowledge_service_query.py +3 -3
- julee/domain/use_cases/extract_assemble_data.py +11 -54
- julee/domain/use_cases/pointable_json_schema.py +102 -0
- julee/domain/use_cases/tests/test_extract_assemble_data.py +143 -2
- julee/domain/use_cases/tests/test_pointable_json_schema.py +451 -0
- julee/domain/use_cases/validate_document.py +2 -0
- julee/fixtures/knowledge_service_queries.yaml +4 -4
- julee/services/knowledge_service/anthropic/knowledge_service.py +53 -6
- julee/services/knowledge_service/anthropic/tests/test_knowledge_service.py +143 -0
- julee/services/knowledge_service/factory.py +2 -0
- julee/services/knowledge_service/knowledge_service.py +5 -0
- julee/services/knowledge_service/memory/knowledge_service.py +28 -4
- julee/services/knowledge_service/memory/test_knowledge_service.py +1 -1
- julee/util/temporal/decorators.py +4 -4
- julee/util/tests/test_decorators.py +1 -1
- {julee-0.1.6.dist-info → julee-0.1.8.dist-info}/METADATA +1 -1
- {julee-0.1.6.dist-info → julee-0.1.8.dist-info}/RECORD +24 -22
- {julee-0.1.6.dist-info → julee-0.1.8.dist-info}/WHEEL +1 -1
- {julee-0.1.6.dist-info → julee-0.1.8.dist-info}/licenses/LICENSE +0 -0
- {julee-0.1.6.dist-info → julee-0.1.8.dist-info}/top_level.txt +0 -0
|
@@ -319,3 +319,146 @@ class TestAnthropicKnowledgeService:
|
|
|
319
319
|
assert call_args[1]["model"] == anthropic_ks_module.DEFAULT_MODEL
|
|
320
320
|
assert call_args[1]["max_tokens"] == anthropic_ks_module.DEFAULT_MAX_TOKENS
|
|
321
321
|
assert "temperature" not in call_args[1] # Not set by default
|
|
322
|
+
|
|
323
|
+
@patch.dict("os.environ", {"ANTHROPIC_API_KEY": "test-key"})
|
|
324
|
+
async def test_execute_query_with_json_assistant_prompt(
|
|
325
|
+
self,
|
|
326
|
+
knowledge_service_config: KnowledgeServiceConfig,
|
|
327
|
+
) -> None:
|
|
328
|
+
"""Test execute_query with assistant prompt that starts with { for JSON parsing."""
|
|
329
|
+
# Mock response that would be concatenated with {
|
|
330
|
+
mock_client = MagicMock()
|
|
331
|
+
mock_response = MagicMock()
|
|
332
|
+
mock_content_block = MagicMock()
|
|
333
|
+
mock_content_block.type = "text"
|
|
334
|
+
mock_content_block.text = '"name": "John", "age": 30}'
|
|
335
|
+
mock_response.content = [mock_content_block]
|
|
336
|
+
mock_response.usage.input_tokens = 100
|
|
337
|
+
mock_response.usage.output_tokens = 20
|
|
338
|
+
mock_response.stop_reason = "end_turn"
|
|
339
|
+
mock_client.messages.create = AsyncMock(return_value=mock_response)
|
|
340
|
+
|
|
341
|
+
with patch(
|
|
342
|
+
"julee.services.knowledge_service.anthropic.knowledge_service.AsyncAnthropic"
|
|
343
|
+
) as mock_anthropic:
|
|
344
|
+
mock_anthropic.return_value = mock_client
|
|
345
|
+
|
|
346
|
+
service = anthropic_ks.AnthropicKnowledgeService()
|
|
347
|
+
|
|
348
|
+
query_text = "What is the person's data?"
|
|
349
|
+
output_schema = {
|
|
350
|
+
"type": "object",
|
|
351
|
+
"properties": {"name": {"type": "string"}, "age": {"type": "number"}},
|
|
352
|
+
"required": ["name", "age"],
|
|
353
|
+
"additionalProperties": False,
|
|
354
|
+
}
|
|
355
|
+
assistant_prompt = "{"
|
|
356
|
+
|
|
357
|
+
result = await service.execute_query(
|
|
358
|
+
knowledge_service_config,
|
|
359
|
+
query_text,
|
|
360
|
+
output_schema=output_schema,
|
|
361
|
+
assistant_prompt=assistant_prompt,
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
# Verify the response was parsed as JSON after concatenation
|
|
365
|
+
assert result.result_data["response"] == {"name": "John", "age": 30}
|
|
366
|
+
assert isinstance(result.result_data["response"], dict)
|
|
367
|
+
|
|
368
|
+
# Verify API call included assistant message
|
|
369
|
+
mock_client.messages.create.assert_called_once()
|
|
370
|
+
call_args = mock_client.messages.create.call_args
|
|
371
|
+
messages = call_args[1]["messages"]
|
|
372
|
+
assert len(messages) == 2
|
|
373
|
+
assert messages[0]["role"] == "user"
|
|
374
|
+
assert messages[1]["role"] == "assistant"
|
|
375
|
+
assert messages[1]["content"] == "{"
|
|
376
|
+
|
|
377
|
+
@patch.dict("os.environ", {"ANTHROPIC_API_KEY": "test-key"})
|
|
378
|
+
async def test_execute_query_with_schema_but_no_assistant_prompt(
|
|
379
|
+
self,
|
|
380
|
+
knowledge_service_config: KnowledgeServiceConfig,
|
|
381
|
+
) -> None:
|
|
382
|
+
"""Test execute_query with schema but no assistant prompt - should parse response directly."""
|
|
383
|
+
# Mock response with complete JSON
|
|
384
|
+
mock_client = MagicMock()
|
|
385
|
+
mock_response = MagicMock()
|
|
386
|
+
mock_content_block = MagicMock()
|
|
387
|
+
mock_content_block.type = "text"
|
|
388
|
+
mock_content_block.text = '{"name": "Jane", "age": 25}'
|
|
389
|
+
mock_response.content = [mock_content_block]
|
|
390
|
+
mock_response.usage.input_tokens = 100
|
|
391
|
+
mock_response.usage.output_tokens = 20
|
|
392
|
+
mock_response.stop_reason = "end_turn"
|
|
393
|
+
mock_client.messages.create = AsyncMock(return_value=mock_response)
|
|
394
|
+
|
|
395
|
+
with patch(
|
|
396
|
+
"julee.services.knowledge_service.anthropic.knowledge_service.AsyncAnthropic"
|
|
397
|
+
) as mock_anthropic:
|
|
398
|
+
mock_anthropic.return_value = mock_client
|
|
399
|
+
|
|
400
|
+
service = anthropic_ks.AnthropicKnowledgeService()
|
|
401
|
+
|
|
402
|
+
query_text = "What is the person's data?"
|
|
403
|
+
output_schema = {
|
|
404
|
+
"type": "object",
|
|
405
|
+
"properties": {"name": {"type": "string"}, "age": {"type": "number"}},
|
|
406
|
+
"required": ["name", "age"],
|
|
407
|
+
"additionalProperties": False,
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
result = await service.execute_query(
|
|
411
|
+
knowledge_service_config,
|
|
412
|
+
query_text,
|
|
413
|
+
output_schema=output_schema,
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
# Verify the response was parsed as JSON directly
|
|
417
|
+
assert result.result_data["response"] == {"name": "Jane", "age": 25}
|
|
418
|
+
assert isinstance(result.result_data["response"], dict)
|
|
419
|
+
|
|
420
|
+
# Verify API call had no assistant message
|
|
421
|
+
mock_client.messages.create.assert_called_once()
|
|
422
|
+
call_args = mock_client.messages.create.call_args
|
|
423
|
+
messages = call_args[1]["messages"]
|
|
424
|
+
assert len(messages) == 1
|
|
425
|
+
assert messages[0]["role"] == "user"
|
|
426
|
+
|
|
427
|
+
@patch.dict("os.environ", {"ANTHROPIC_API_KEY": "test-key"})
|
|
428
|
+
async def test_execute_query_json_parse_error_with_schema(
|
|
429
|
+
self,
|
|
430
|
+
knowledge_service_config: KnowledgeServiceConfig,
|
|
431
|
+
) -> None:
|
|
432
|
+
"""Test execute_query raises ValueError when JSON parsing fails with schema."""
|
|
433
|
+
# Mock response with invalid JSON
|
|
434
|
+
mock_client = MagicMock()
|
|
435
|
+
mock_response = MagicMock()
|
|
436
|
+
mock_content_block = MagicMock()
|
|
437
|
+
mock_content_block.type = "text"
|
|
438
|
+
mock_content_block.text = '"name": "John", invalid json}'
|
|
439
|
+
mock_response.content = [mock_content_block]
|
|
440
|
+
mock_response.usage.input_tokens = 100
|
|
441
|
+
mock_response.usage.output_tokens = 20
|
|
442
|
+
mock_response.stop_reason = "end_turn"
|
|
443
|
+
mock_client.messages.create = AsyncMock(return_value=mock_response)
|
|
444
|
+
|
|
445
|
+
with patch(
|
|
446
|
+
"julee.services.knowledge_service.anthropic.knowledge_service.AsyncAnthropic"
|
|
447
|
+
) as mock_anthropic:
|
|
448
|
+
mock_anthropic.return_value = mock_client
|
|
449
|
+
|
|
450
|
+
service = anthropic_ks.AnthropicKnowledgeService()
|
|
451
|
+
|
|
452
|
+
output_schema = {"type": "object", "additionalProperties": False}
|
|
453
|
+
assistant_prompt = "{"
|
|
454
|
+
|
|
455
|
+
with pytest.raises(
|
|
456
|
+
ValueError,
|
|
457
|
+
match="Expected valid JSON response when output schema provided",
|
|
458
|
+
):
|
|
459
|
+
await service.execute_query(
|
|
460
|
+
knowledge_service_config,
|
|
461
|
+
"Test query",
|
|
462
|
+
output_schema=output_schema,
|
|
463
|
+
assistant_prompt=assistant_prompt,
|
|
464
|
+
)
|
|
@@ -47,6 +47,7 @@ class ConfigurableKnowledgeService(KnowledgeService):
|
|
|
47
47
|
self,
|
|
48
48
|
config: KnowledgeServiceConfig,
|
|
49
49
|
query_text: str,
|
|
50
|
+
output_schema: dict[str, Any] | None = None,
|
|
50
51
|
service_file_ids: list[str] | None = None,
|
|
51
52
|
query_metadata: dict[str, Any] | None = None,
|
|
52
53
|
assistant_prompt: str | None = None,
|
|
@@ -56,6 +57,7 @@ class ConfigurableKnowledgeService(KnowledgeService):
|
|
|
56
57
|
return await service.execute_query(
|
|
57
58
|
config=config,
|
|
58
59
|
query_text=query_text,
|
|
60
|
+
output_schema=output_schema,
|
|
59
61
|
service_file_ids=service_file_ids,
|
|
60
62
|
query_metadata=query_metadata,
|
|
61
63
|
assistant_prompt=assistant_prompt,
|
|
@@ -111,6 +111,7 @@ class KnowledgeService(Protocol):
|
|
|
111
111
|
self,
|
|
112
112
|
config: "KnowledgeServiceConfig",
|
|
113
113
|
query_text: str,
|
|
114
|
+
output_schema: dict[str, Any] | None = None,
|
|
114
115
|
service_file_ids: list[str] | None = None,
|
|
115
116
|
query_metadata: dict[str, Any] | None = None,
|
|
116
117
|
assistant_prompt: str | None = None,
|
|
@@ -124,6 +125,10 @@ class KnowledgeService(Protocol):
|
|
|
124
125
|
Args:
|
|
125
126
|
config: KnowledgeServiceConfig for the service to use
|
|
126
127
|
query_text: The query to execute (natural language or structured)
|
|
128
|
+
output_schema: Optional JSON schema for structured response.
|
|
129
|
+
When provided, the service will attempt to return
|
|
130
|
+
results conforming to this schema using structured
|
|
131
|
+
outputs or schema-guided prompting.
|
|
127
132
|
service_file_ids: Optional list of service file IDs to provide as
|
|
128
133
|
context for the query. These are the IDs returned
|
|
129
134
|
by the knowledge service from register_file
|
|
@@ -7,6 +7,7 @@ configurable canned query responses. Useful for testing and development
|
|
|
7
7
|
scenarios where external service dependencies should be avoided.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
+
import json
|
|
10
11
|
import logging
|
|
11
12
|
from collections import deque
|
|
12
13
|
from datetime import datetime, timezone
|
|
@@ -204,6 +205,7 @@ class MemoryKnowledgeService(KnowledgeService):
|
|
|
204
205
|
self,
|
|
205
206
|
config: KnowledgeServiceConfig,
|
|
206
207
|
query_text: str,
|
|
208
|
+
output_schema: dict[str, Any] | None = None,
|
|
207
209
|
service_file_ids: list[str] | None = None,
|
|
208
210
|
query_metadata: dict[str, Any] | None = None,
|
|
209
211
|
assistant_prompt: str | None = None,
|
|
@@ -213,9 +215,9 @@ class MemoryKnowledgeService(KnowledgeService):
|
|
|
213
215
|
Args:
|
|
214
216
|
config: KnowledgeServiceConfig for this operation
|
|
215
217
|
query_text: The query to execute
|
|
218
|
+
output_schema: Optional JSON schema for structured response
|
|
216
219
|
service_file_ids: Optional list of service file IDs for query
|
|
217
|
-
query_metadata: Optional service-specific metadata
|
|
218
|
-
memory implementation)
|
|
220
|
+
query_metadata: Optional service-specific metadata
|
|
219
221
|
assistant_prompt: Optional assistant message content (ignored in
|
|
220
222
|
memory implementation)
|
|
221
223
|
|
|
@@ -225,12 +227,29 @@ class MemoryKnowledgeService(KnowledgeService):
|
|
|
225
227
|
Raises:
|
|
226
228
|
ValueError: If no canned query results are available
|
|
227
229
|
"""
|
|
230
|
+
# Handle schema embedding if provided (same as Anthropic service)
|
|
231
|
+
if output_schema:
|
|
232
|
+
# Build query with embedded schema
|
|
233
|
+
schema_json = json.dumps(output_schema, indent=2)
|
|
234
|
+
enhanced_query_text = f"""{query_text}
|
|
235
|
+
|
|
236
|
+
Please structure your response according to this JSON schema:
|
|
237
|
+
{schema_json}
|
|
238
|
+
|
|
239
|
+
Return only valid JSON that conforms to this schema, without any surrounding
|
|
240
|
+
text or markdown formatting."""
|
|
241
|
+
has_schema = True
|
|
242
|
+
else:
|
|
243
|
+
enhanced_query_text = query_text
|
|
244
|
+
has_schema = False
|
|
245
|
+
|
|
228
246
|
logger.debug(
|
|
229
247
|
"Executing query with MemoryKnowledgeService",
|
|
230
248
|
extra={
|
|
231
249
|
"knowledge_service_id": config.knowledge_service_id,
|
|
232
|
-
"query_text":
|
|
250
|
+
"query_text": enhanced_query_text,
|
|
233
251
|
"document_count": (len(service_file_ids) if service_file_ids else 0),
|
|
252
|
+
"has_output_schema": has_schema,
|
|
234
253
|
},
|
|
235
254
|
)
|
|
236
255
|
|
|
@@ -252,12 +271,17 @@ class MemoryKnowledgeService(KnowledgeService):
|
|
|
252
271
|
# Pop and return the next canned result
|
|
253
272
|
result = self._canned_query_results.popleft()
|
|
254
273
|
|
|
274
|
+
# For memory service, the canned response should already be a parsed object
|
|
275
|
+
# This maintains compatibility with existing tests regardless of schema presence
|
|
276
|
+
response_value = result.result_data.get("response")
|
|
277
|
+
|
|
255
278
|
# Update the result to reflect the actual query parameters
|
|
256
279
|
updated_result = QueryResult(
|
|
257
280
|
query_id=result.query_id,
|
|
258
|
-
query_text=
|
|
281
|
+
query_text=enhanced_query_text if has_schema else query_text,
|
|
259
282
|
result_data={
|
|
260
283
|
**result.result_data,
|
|
284
|
+
"response": response_value,
|
|
261
285
|
"queried_documents": service_file_ids or [],
|
|
262
286
|
"service": "memory",
|
|
263
287
|
"knowledge_service_id": config.knowledge_service_id,
|
|
@@ -245,7 +245,7 @@ class TestMemoryKnowledgeService:
|
|
|
245
245
|
memory_service.add_canned_query_result(sample_query_result)
|
|
246
246
|
|
|
247
247
|
result = await memory_service.execute_query(
|
|
248
|
-
knowledge_service_config, query_text, document_ids
|
|
248
|
+
knowledge_service_config, query_text, service_file_ids=document_ids
|
|
249
249
|
)
|
|
250
250
|
|
|
251
251
|
# Should return updated result with actual query parameters
|
|
@@ -243,9 +243,9 @@ def temporal_workflow_proxy(
|
|
|
243
243
|
retry_methods_set = set(retry_methods or [])
|
|
244
244
|
|
|
245
245
|
# Create default retry policy for methods that need it
|
|
246
|
-
|
|
246
|
+
default_retry_policy = RetryPolicy(
|
|
247
247
|
initial_interval=timedelta(seconds=1),
|
|
248
|
-
maximum_attempts=
|
|
248
|
+
maximum_attempts=4,
|
|
249
249
|
backoff_coefficient=1.0,
|
|
250
250
|
maximum_interval=timedelta(seconds=1),
|
|
251
251
|
)
|
|
@@ -315,7 +315,7 @@ def temporal_workflow_proxy(
|
|
|
315
315
|
|
|
316
316
|
# Add retry policy if this method needs it
|
|
317
317
|
if method_name in retry_methods_set:
|
|
318
|
-
retry_policy =
|
|
318
|
+
retry_policy = default_retry_policy
|
|
319
319
|
|
|
320
320
|
# Log the call
|
|
321
321
|
logger.debug(
|
|
@@ -408,7 +408,7 @@ def temporal_workflow_proxy(
|
|
|
408
408
|
super(cls, proxy_self).__init__()
|
|
409
409
|
# Set instance variables for consistency with manual pattern
|
|
410
410
|
proxy_self.activity_timeout = timedelta(seconds=default_timeout_seconds)
|
|
411
|
-
proxy_self.
|
|
411
|
+
proxy_self.activity_default_retry_policy = default_retry_policy
|
|
412
412
|
logger.debug(f"Initialized {cls.__name__}")
|
|
413
413
|
|
|
414
414
|
cls.__init__ = __init__
|
|
@@ -682,7 +682,7 @@ class TestWorkflowProxyIntegration:
|
|
|
682
682
|
|
|
683
683
|
# Check instance attributes
|
|
684
684
|
assert hasattr(proxy, "activity_timeout")
|
|
685
|
-
assert hasattr(proxy, "
|
|
685
|
+
assert hasattr(proxy, "activity_default_retry_policy")
|
|
686
686
|
|
|
687
687
|
def test_different_repositories_get_different_types(self) -> None:
|
|
688
688
|
"""Test that different repositories extract their respective types."""
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
julee/__init__.py,sha256=
|
|
1
|
+
julee/__init__.py,sha256=R9tfeeZks10ifpwqvOXycLbfcvUoDB1hFJX4DGHNSMk,111
|
|
2
2
|
julee/worker.py,sha256=26k7LkpLft8emjVsSRCK7VmbtTEaBxjokX_5CC52LDM,7231
|
|
3
3
|
julee/api/__init__.py,sha256=bJECAJifuV-pochMVeDqKhQ63jvXel3W4Y0_NK9gn8s,801
|
|
4
4
|
julee/api/app.py,sha256=I4a7fi9rE_0r92jmMusOxlcMalFnTy8qb4yyxKYg6-Q,4955
|
|
@@ -29,7 +29,7 @@ julee/contrib/__init__.py,sha256=RFlW03DFJQxINJCCif7s67LPOKW4rI4BuYWTUbakkGc,503
|
|
|
29
29
|
julee/contrib/polling/__init__.py,sha256=xk0bRSShKdJXcm8CMqJ7tQWSBdLwOLLj05-pXd2cUSM,2115
|
|
30
30
|
julee/contrib/polling/apps/__init__.py,sha256=f1SCPBxN5pD-okEz7Bc7q8ApVSmhTxxb7edZq3z7ejU,619
|
|
31
31
|
julee/contrib/polling/apps/worker/__init__.py,sha256=a7q35Tmmia0NxfCxwMeWeOq5ZacZ082VYxe_9hseYOE,619
|
|
32
|
-
julee/contrib/polling/apps/worker/pipelines.py,sha256=
|
|
32
|
+
julee/contrib/polling/apps/worker/pipelines.py,sha256=dAdQH5NI1E_GeWUGx-ihO_HBaeKZHLhWD4UPPHTd89w,11133
|
|
33
33
|
julee/contrib/polling/domain/__init__.py,sha256=9TGbfrNXaQgjrCOUwAifidSQ3CP7FAqQUNVpXk5GAUo,576
|
|
34
34
|
julee/contrib/polling/domain/models/__init__.py,sha256=AUgbHTVy2AHYTfaLKG1DvtE11UB1B-xzaFVCtQoHzC0,369
|
|
35
35
|
julee/contrib/polling/domain/models/polling_config.py,sha256=6n89yP5c1XblKvnj4vialLgrmqzLcY3p_LV_4aTYaUo,1720
|
|
@@ -47,7 +47,7 @@ julee/contrib/polling/infrastructure/temporal/manager.py,sha256=90T5jikv7F-wB4cC
|
|
|
47
47
|
julee/contrib/polling/infrastructure/temporal/proxies.py,sha256=eiYr1d0tXkREpbJx7nG5Otc7FCxNJrLFtj2CMzJd5iM,1509
|
|
48
48
|
julee/contrib/polling/tests/__init__.py,sha256=0GSU_Gc9HtB0h6w5_c1qUdMWqCp2FVx-BV-IOR9_uo0,175
|
|
49
49
|
julee/contrib/polling/tests/unit/__init__.py,sha256=8QbeJjQZj0nIKd3F1eTXCR9utxZtiYQzkTyk4yGhCvM,160
|
|
50
|
-
julee/contrib/polling/tests/unit/apps/worker/test_pipelines.py,sha256=
|
|
50
|
+
julee/contrib/polling/tests/unit/apps/worker/test_pipelines.py,sha256=HpKQQD5YcCwO403uQnvbUS88jmqIYIBORCHFmgfTOmI,23413
|
|
51
51
|
julee/contrib/polling/tests/unit/infrastructure/__init__.py,sha256=BEFimVM4poUCs2AKZOggF4L07T96L85UnfIkt8qxFys,238
|
|
52
52
|
julee/contrib/polling/tests/unit/infrastructure/services/__init__.py,sha256=WCf2KzGeMChltre8YYf8IUtElgP4NmdugNOmKxno0Lw,190
|
|
53
53
|
julee/contrib/polling/tests/unit/infrastructure/services/polling/__init__.py,sha256=ygTzYEe2Zok4pwmGOd2G_Gf5sE5kaC6xHiFmZADiYvs,228
|
|
@@ -160,11 +160,11 @@ julee/domain/models/assembly/tests/factories.py,sha256=8piauYltuzpNkX5I2g5PJ9bxX
|
|
|
160
160
|
julee/domain/models/assembly/tests/test_assembly.py,sha256=4eKIjpAeN0XoFRFDpaShjh7pOsTEy6QzXm1TshOJwvg,16460
|
|
161
161
|
julee/domain/models/assembly_specification/__init__.py,sha256=8oHXxCUAwplrL1lTKNyLQg7QxFapmPgroU0W6TMWTNA,804
|
|
162
162
|
julee/domain/models/assembly_specification/assembly_specification.py,sha256=bolyMo8eubj--W5k9yC_CZLU-99eXPTkSPtwjHcJmho,6783
|
|
163
|
-
julee/domain/models/assembly_specification/knowledge_service_query.py,sha256=
|
|
163
|
+
julee/domain/models/assembly_specification/knowledge_service_query.py,sha256=cC9LChu7oIY_zie38lOTnu-RaH4_AwAfLz8-ZdDxN9Y,4275
|
|
164
164
|
julee/domain/models/assembly_specification/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
165
|
julee/domain/models/assembly_specification/tests/factories.py,sha256=CfVY65UW9PtC3isPervUH5pvtzquiHhxClyCG1LqAro,2370
|
|
166
166
|
julee/domain/models/assembly_specification/tests/test_assembly_specification.py,sha256=AyW8eepsUAaY_TcE7zrQBl8lxE3o06i0ux26nECE9UE,18220
|
|
167
|
-
julee/domain/models/assembly_specification/tests/test_knowledge_service_query.py,sha256=
|
|
167
|
+
julee/domain/models/assembly_specification/tests/test_knowledge_service_query.py,sha256=m_qaoNVITbQ-307jJVcNKXIrFEBmPBoy4rBGB2gv5Lc,10421
|
|
168
168
|
julee/domain/models/custom_fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
169
169
|
julee/domain/models/custom_fields/content_stream.py,sha256=DRpGjMSUuUwOzbJW-_pVy43IgvqQYn_Qi0612QJjlpY,2348
|
|
170
170
|
julee/domain/models/custom_fields/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -194,16 +194,18 @@ julee/domain/repositories/knowledge_service_query.py,sha256=9qrWMLT9Xxms9Q7fMjBb
|
|
|
194
194
|
julee/domain/repositories/policy.py,sha256=-1Miwk_wmblr9QqVb4aZ_ajk9YIwPUXhxfhGG5CTuFQ,1874
|
|
195
195
|
julee/domain/use_cases/__init__.py,sha256=rKJyunXCHorEyxPfKDEYD27kese53e5spCfFTbDxpOc,534
|
|
196
196
|
julee/domain/use_cases/decorators.py,sha256=mMlR5ws94frAZEUEjj545cZpwnTimZI6JVpMlGu3EpA,3497
|
|
197
|
-
julee/domain/use_cases/extract_assemble_data.py,sha256=
|
|
197
|
+
julee/domain/use_cases/extract_assemble_data.py,sha256=6ZJszs6bVI_CUjBaEutTKFtQxAQZygpFjFtg4HIja3s,23353
|
|
198
198
|
julee/domain/use_cases/initialize_system_data.py,sha256=CIYasO96HQMKXh098Gw3r2rerPKsVXRRVLsxnSJnVfo,31330
|
|
199
|
-
julee/domain/use_cases/
|
|
199
|
+
julee/domain/use_cases/pointable_json_schema.py,sha256=-e8EJ9F4LfDhTDNugv7xxLNSb3WguKGBnZUS6Ci7Mek,4028
|
|
200
|
+
julee/domain/use_cases/validate_document.py,sha256=zVrvZQgyqTsE6_W3GiYlg8NupEK89y1q5ZDqNFpiuiE,28297
|
|
200
201
|
julee/domain/use_cases/tests/__init__.py,sha256=xKgoU78i5zK5mlZ2NNfp8nhbnb9fIcNwCTcQD0j9gEw,199
|
|
201
|
-
julee/domain/use_cases/tests/test_extract_assemble_data.py,sha256=
|
|
202
|
+
julee/domain/use_cases/tests/test_extract_assemble_data.py,sha256=kC_bfAU37pBuSyzGc9cVDYgNgl1TScLSiZoimp4EWkM,27298
|
|
202
203
|
julee/domain/use_cases/tests/test_initialize_system_data.py,sha256=1IyjuNPMBdnqCqn425vQpHrpVFJtvi_6N3hC6i2LoFE,17949
|
|
204
|
+
julee/domain/use_cases/tests/test_pointable_json_schema.py,sha256=OUkQA6FW1-3Wkm40qKVqCitEkHch1_U4tGkgkxdoZZ8,15970
|
|
203
205
|
julee/domain/use_cases/tests/test_validate_document.py,sha256=JVMx3pXUbzYMLnT3Ah3UnCN8TUzEFzBv_D-QuKGelcw,50953
|
|
204
206
|
julee/fixtures/documents.yaml,sha256=QMPbdMtjvsf08iFuNa4U2Kx7nTIGVpeRMlp-eeW9dY0,4918
|
|
205
207
|
julee/fixtures/knowledge_service_configs.yaml,sha256=SfJO1SJFzYtF2Y7XTZmhl3d9Eiv2-xMrHKW1kI7NhI0,1378
|
|
206
|
-
julee/fixtures/knowledge_service_queries.yaml,sha256=
|
|
208
|
+
julee/fixtures/knowledge_service_queries.yaml,sha256=aBN84Ni2rk3pqJnKGgxqx8IbEOrpKdPg_rxPHygCgO4,1799
|
|
207
209
|
julee/maintenance/__init__.py,sha256=tThzvZBQ4bTSiXVfLVuHI2uLQOhZRMfND1ndj26BNu0,65
|
|
208
210
|
julee/maintenance/release.py,sha256=DavyBtyFb-hngtg8K36LjNx76DfrPDgFUbZePDW2lhk,7733
|
|
209
211
|
julee/repositories/__init__.py,sha256=mJpDFYP5f4LBhavYSnC3SnTcWnozMCz7aXje4iB5pyU,571
|
|
@@ -245,15 +247,15 @@ julee/repositories/temporal/activity_names.py,sha256=qg0ZJvnMPaTHHnu9fHxzsDTjUb5
|
|
|
245
247
|
julee/repositories/temporal/proxies.py,sha256=eKNEOD_HuNeDxA62eJpR_Zf2KpZ-xnL91UKsV7_aXVc,4783
|
|
246
248
|
julee/services/__init__.py,sha256=LNoQvHMWQi1YMQW0xWw9KeTHOVMsYdhLj-nvu4HClFU,560
|
|
247
249
|
julee/services/knowledge_service/__init__.py,sha256=xsrMieT-IezlINBEAkM9KAMy5ZDODQqDtbqpK8DMhXM,1148
|
|
248
|
-
julee/services/knowledge_service/factory.py,sha256=
|
|
249
|
-
julee/services/knowledge_service/knowledge_service.py,sha256
|
|
250
|
+
julee/services/knowledge_service/factory.py,sha256=j2aAwTrpr0TA6cIm2IjhdTP03XSnNxK2WtVfURSy3dc,4699
|
|
251
|
+
julee/services/knowledge_service/knowledge_service.py,sha256=3VzVTTnjVl4oAzF5zNyN5FWH0vNiwwaNdKLcN9PYDBM,6725
|
|
250
252
|
julee/services/knowledge_service/test_factory.py,sha256=FKuzOooeNKdbJU6S-LmqT6Q6ZYo_6sVAV7MUVQKBCLI,3956
|
|
251
253
|
julee/services/knowledge_service/anthropic/__init__.py,sha256=eO_85w4dd9hgzcnsqMoE0bvcjBtTuIhyQ0vqdPHdoQ4,297
|
|
252
|
-
julee/services/knowledge_service/anthropic/knowledge_service.py,sha256=
|
|
253
|
-
julee/services/knowledge_service/anthropic/tests/test_knowledge_service.py,sha256=
|
|
254
|
+
julee/services/knowledge_service/anthropic/knowledge_service.py,sha256=wNljMvdZFyxEjDBnc2o5Q_D8jBdJcWhj3fvuF-vVCFo,14069
|
|
255
|
+
julee/services/knowledge_service/anthropic/tests/test_knowledge_service.py,sha256=rUBhqgB1bSvb9RM41Y_V9DR4djANHw6N1hRVFMjDTtw,19010
|
|
254
256
|
julee/services/knowledge_service/memory/__init__.py,sha256=QgAw_Bt3ctn2S2c2OeTwOSADqEx-UIsG1dnoyITifW0,364
|
|
255
|
-
julee/services/knowledge_service/memory/knowledge_service.py,sha256=
|
|
256
|
-
julee/services/knowledge_service/memory/test_knowledge_service.py,sha256=
|
|
257
|
+
julee/services/knowledge_service/memory/knowledge_service.py,sha256=WXY5YvIdXSyWV83nRgx-k4M7qrrIwQTR6AA3j719Nrc,10947
|
|
258
|
+
julee/services/knowledge_service/memory/test_knowledge_service.py,sha256=zZkqQjRS4eFq4IxHdgETiJfVPX7d_03N1je9EDF8iR0,13021
|
|
257
259
|
julee/services/temporal/__init__.py,sha256=xPfg55wTler89fH4NbAt7uawGOJlz8vQiKJzi7ONAHM,1376
|
|
258
260
|
julee/services/temporal/activities.py,sha256=UhXDt50tJbaKQ6n1BpQWs3lUBY9UuTdhS0hiov2k5-w,3319
|
|
259
261
|
julee/services/temporal/activity_names.py,sha256=OG0XqCLt40m8h7nglV-k6K5Oyk9bUexND9M1OJ2zfoo,817
|
|
@@ -272,17 +274,17 @@ julee/util/repos/temporal/proxies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
|
272
274
|
julee/util/repos/temporal/proxies/file_storage.py,sha256=djmIlKn2yrRHvk5j9SRv7GuwPuVHh9gXFt-_m7uxLis,2458
|
|
273
275
|
julee/util/temporal/__init__.py,sha256=86xXEL8K5NAhT4s2H1uov8jV68NLkJiCZl2GDJaLnPg,491
|
|
274
276
|
julee/util/temporal/activities.py,sha256=j-xV12x-5KJQWT1I8_KhIWtPVYysLJo9A2Xwx4e31bc,4383
|
|
275
|
-
julee/util/temporal/decorators.py,sha256=
|
|
277
|
+
julee/util/temporal/decorators.py,sha256=5CRkIKVKfBGD1qmjTZ1Gmfgagwp0bgE7GMwENXonhC4,17976
|
|
276
278
|
julee/util/tests/__init__.py,sha256=guP9qBQwD15l3fIX1kYS8v67pKHAHOCCqib9Us_eJ1Y,61
|
|
277
|
-
julee/util/tests/test_decorators.py,sha256=
|
|
279
|
+
julee/util/tests/test_decorators.py,sha256=0tRCoSyQtwUi1-ZaiMlS9Xd7KGy4yV2wh9J0oWNI8lU,27454
|
|
278
280
|
julee/util/validation/__init__.py,sha256=Jp8A3iXEvLRaj07Z2UPnOBVO2QAUOW5ITCwMdLAgQyw,769
|
|
279
281
|
julee/util/validation/repository.py,sha256=li0bLav8ZpRqPe7aaOaZQQItdf_Ll-ZWJs7NpF8nmm0,3135
|
|
280
282
|
julee/util/validation/type_guards.py,sha256=sH9NfnrWAOQnLKQQNpJRdz1ygkt5nTUmKyjVDOE8iME,12548
|
|
281
283
|
julee/workflows/__init__.py,sha256=sHXZm4EPvsch6IYcJGqGuPJIep8XZQ8XvEju5b34tTs,724
|
|
282
284
|
julee/workflows/extract_assemble.py,sha256=ZldmLdwwn1LomDJg4gNGYrnY87tiXtU8em3-l_fqLGs,7876
|
|
283
285
|
julee/workflows/validate_document.py,sha256=Cwl-XgcQWeVCC-cGOAslS1vCjQosiWUi79c2uQfTYNc,8230
|
|
284
|
-
julee-0.1.
|
|
285
|
-
julee-0.1.
|
|
286
|
-
julee-0.1.
|
|
287
|
-
julee-0.1.
|
|
288
|
-
julee-0.1.
|
|
286
|
+
julee-0.1.8.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
287
|
+
julee-0.1.8.dist-info/METADATA,sha256=41d1fSBvm9TJRzzMfmbO1WgCJdnb8E3_liBA46INUKg,4454
|
|
288
|
+
julee-0.1.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
289
|
+
julee-0.1.8.dist-info/top_level.txt,sha256=woyPXhn9n-aM3oekZ341P1enrjj6nIcTwOxQL32VCLc,6
|
|
290
|
+
julee-0.1.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|