prompty 0.1.36__tar.gz → 0.1.37__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. {prompty-0.1.36 → prompty-0.1.37}/PKG-INFO +1 -1
  2. {prompty-0.1.36 → prompty-0.1.37}/prompty/tracer.py +11 -1
  3. {prompty-0.1.36 → prompty-0.1.37}/pyproject.toml +1 -1
  4. {prompty-0.1.36 → prompty-0.1.37}/tests/test_tracing.py +12 -0
  5. {prompty-0.1.36 → prompty-0.1.37}/LICENSE +0 -0
  6. {prompty-0.1.36 → prompty-0.1.37}/README.md +0 -0
  7. {prompty-0.1.36 → prompty-0.1.37}/prompty/__init__.py +0 -0
  8. {prompty-0.1.36 → prompty-0.1.37}/prompty/azure/__init__.py +0 -0
  9. {prompty-0.1.36 → prompty-0.1.37}/prompty/azure/executor.py +0 -0
  10. {prompty-0.1.36 → prompty-0.1.37}/prompty/azure/processor.py +0 -0
  11. {prompty-0.1.36 → prompty-0.1.37}/prompty/azure_beta/__init__.py +0 -0
  12. {prompty-0.1.36 → prompty-0.1.37}/prompty/azure_beta/executor.py +0 -0
  13. {prompty-0.1.36 → prompty-0.1.37}/prompty/cli.py +0 -0
  14. {prompty-0.1.36 → prompty-0.1.37}/prompty/core.py +0 -0
  15. {prompty-0.1.36 → prompty-0.1.37}/prompty/invoker.py +0 -0
  16. {prompty-0.1.36 → prompty-0.1.37}/prompty/openai/__init__.py +0 -0
  17. {prompty-0.1.36 → prompty-0.1.37}/prompty/openai/executor.py +0 -0
  18. {prompty-0.1.36 → prompty-0.1.37}/prompty/openai/processor.py +0 -0
  19. {prompty-0.1.36 → prompty-0.1.37}/prompty/parsers.py +0 -0
  20. {prompty-0.1.36 → prompty-0.1.37}/prompty/renderers.py +0 -0
  21. {prompty-0.1.36 → prompty-0.1.37}/prompty/serverless/__init__.py +0 -0
  22. {prompty-0.1.36 → prompty-0.1.37}/prompty/serverless/executor.py +0 -0
  23. {prompty-0.1.36 → prompty-0.1.37}/prompty/serverless/processor.py +0 -0
  24. {prompty-0.1.36 → prompty-0.1.37}/prompty/utils.py +0 -0
  25. {prompty-0.1.36 → prompty-0.1.37}/tests/__init__.py +0 -0
  26. {prompty-0.1.36 → prompty-0.1.37}/tests/fake_azure_executor.py +0 -0
  27. {prompty-0.1.36 → prompty-0.1.37}/tests/fake_serverless_executor.py +0 -0
  28. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/1contoso.md +0 -0
  29. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/2contoso.md +0 -0
  30. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/3contoso.md +0 -0
  31. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/4contoso.md +0 -0
  32. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/basic.prompty.md +0 -0
  33. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/camping.jpg +0 -0
  34. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/context.prompty.md +0 -0
  35. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/contoso_multi.md +0 -0
  36. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/faithfulness.prompty.md +0 -0
  37. {prompty-0.1.36 → prompty-0.1.37}/tests/generated/groundedness.prompty.md +0 -0
  38. {prompty-0.1.36 → prompty-0.1.37}/tests/hello_world-goodbye_world-hello_again.embedding.json +0 -0
  39. {prompty-0.1.36 → prompty-0.1.37}/tests/hello_world.embedding.json +0 -0
  40. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/__init__.py +0 -0
  41. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/basic.prompty +0 -0
  42. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/basic.prompty.execution.json +0 -0
  43. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/basic_json_output.prompty +0 -0
  44. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/camping.jpg +0 -0
  45. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/chat.prompty +0 -0
  46. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/context.json +0 -0
  47. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/context.prompty +0 -0
  48. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/context.prompty.execution.json +0 -0
  49. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/embedding.prompty +0 -0
  50. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/embedding.prompty.execution.json +0 -0
  51. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/evaluation.prompty +0 -0
  52. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/faithfulness.prompty +0 -0
  53. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/faithfulness.prompty.execution.json +0 -0
  54. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/fake.prompty +0 -0
  55. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/funcfile.json +0 -0
  56. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/funcfile.prompty +0 -0
  57. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/functions.prompty +0 -0
  58. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/functions.prompty.execution.json +0 -0
  59. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/groundedness.prompty +0 -0
  60. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/groundedness.prompty.execution.json +0 -0
  61. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/prompty.json +0 -0
  62. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/serverless.prompty +0 -0
  63. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/serverless.prompty.execution.json +0 -0
  64. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/serverless_stream.prompty +0 -0
  65. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/serverless_stream.prompty.execution.json +0 -0
  66. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/streaming.prompty +0 -0
  67. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/streaming.prompty.execution.json +0 -0
  68. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/structured_output.prompty +0 -0
  69. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/structured_output.prompty.execution.json +0 -0
  70. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/structured_output_schema.json +0 -0
  71. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/sub/__init__.py +0 -0
  72. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/sub/basic.prompty +0 -0
  73. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/sub/sub/__init__.py +0 -0
  74. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/sub/sub/basic.prompty +0 -0
  75. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/sub/sub/prompty.json +0 -0
  76. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/sub/sub/test.py +0 -0
  77. {prompty-0.1.36 → prompty-0.1.37}/tests/prompts/test.py +0 -0
  78. {prompty-0.1.36 → prompty-0.1.37}/tests/prompty.json +0 -0
  79. {prompty-0.1.36 → prompty-0.1.37}/tests/test_common.py +0 -0
  80. {prompty-0.1.36 → prompty-0.1.37}/tests/test_execute.py +0 -0
  81. {prompty-0.1.36 → prompty-0.1.37}/tests/test_factory_invoker.py +0 -0
  82. {prompty-0.1.36 → prompty-0.1.37}/tests/test_path_exec.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prompty
3
- Version: 0.1.36
3
+ Version: 0.1.37
4
4
  Summary: Prompty is a new asset class and format for LLM prompts that aims to provide observability, understandability, and portability for developers. It includes spec, tooling, and a runtime. This Prompty runtime supports Python
5
5
  Author-Email: Seth Juarez <seth.juarez@microsoft.com>
6
6
  License: MIT
@@ -28,6 +28,10 @@ def sanitize(key: str, value: Any) -> Any:
28
28
  class Tracer:
29
29
  _tracers: Dict[str, Callable[[str], Iterator[Callable[[str, Any], None]]]] = {}
30
30
 
31
+ SIGNATURE = "signature"
32
+ INPUTS = "inputs"
33
+ RESULT = "result"
34
+
31
35
  @classmethod
32
36
  def add(
33
37
  cls, name: str, tracer: Callable[[str], Iterator[Callable[[str, Any], None]]]
@@ -40,11 +44,17 @@ class Tracer:
40
44
 
41
45
  @classmethod
42
46
  @contextlib.contextmanager
43
- def start(cls, name: str) -> Iterator[Callable[[str, Any], None]]:
47
+ def start(cls, name: str, attributes: Dict[str, Any] = None) -> Iterator[Callable[[str, Any], None]]:
44
48
  with contextlib.ExitStack() as stack:
45
49
  traces = [
46
50
  stack.enter_context(tracer(name)) for tracer in cls._tracers.values()
47
51
  ]
52
+
53
+ if attributes:
54
+ for trace in traces:
55
+ for key, value in attributes.items():
56
+ trace(key, value)
57
+
48
58
  yield lambda key, value: [
49
59
  # normalize and sanitize any trace values
50
60
  trace(key, sanitize(key, to_dict(value)))
@@ -15,7 +15,7 @@ dependencies = [
15
15
  "click>=8.1.7",
16
16
  "aiofiles>=24.1.0",
17
17
  ]
18
- version = "0.1.36"
18
+ version = "0.1.37"
19
19
 
20
20
  [project.license]
21
21
  text = "MIT"
@@ -296,3 +296,15 @@ async def test_streaming_async():
296
296
  if isinstance(result, AsyncIterator):
297
297
  async for item in result:
298
298
  print(item)
299
+
300
+ @trace
301
+ def test_tracing_attributes():
302
+ with Tracer.start("Test1", {Tracer.SIGNATURE: "test1", "two": 2}) as trace:
303
+ trace(Tracer.INPUTS, 3)
304
+ trace(Tracer.INPUTS, 4)
305
+ with Tracer.start("Test2", {"signature": "5", "six": 6}) as trace:
306
+ trace("inputs", 7)
307
+ trace(Tracer.RESULT, 8)
308
+ with Tracer.start("Test3", {"signature": "9", "ten": 10}) as trace:
309
+ trace("inputs", 11)
310
+ trace(Tracer.RESULT, 12)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes