whatap-python 2.0.2rc1__tar.gz → 2.1.0__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.
Files changed (242) hide show
  1. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/PKG-INFO +1 -1
  2. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/__init__.py +89 -8
  3. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/agent/linux/amd64/whatap_python +0 -0
  4. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/agent/linux/arm64/whatap_python +0 -0
  5. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/agent/windows/whatap_python.exe +0 -0
  6. whatap_python-2.1.0/whatap/build.py +4 -0
  7. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/conf/configuration.py +52 -1
  8. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/conf/configure.py +1 -1
  9. whatap_python-2.1.0/whatap/counter/tasks/llm_evaluator_task.py +501 -0
  10. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/counter/tasks/llm_log_sink_task.py +67 -0
  11. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/counter/tasks/llm_stat_task.py +1 -0
  12. whatap_python-2.1.0/whatap/llm/__init__.py +17 -0
  13. whatap_python-2.1.0/whatap/llm/evaluators/__init__.py +136 -0
  14. whatap_python-2.1.0/whatap/llm/evaluators/base.py +114 -0
  15. whatap_python-2.1.0/whatap/llm/evaluators/builtins/__init__.py +91 -0
  16. whatap_python-2.1.0/whatap/llm/evaluators/builtins/answer_relevance.py +46 -0
  17. whatap_python-2.1.0/whatap/llm/evaluators/builtins/combined_judge.py +271 -0
  18. whatap_python-2.1.0/whatap/llm/evaluators/builtins/factuality.py +71 -0
  19. whatap_python-2.1.0/whatap/llm/evaluators/builtins/hallucination.py +97 -0
  20. whatap_python-2.1.0/whatap/llm/evaluators/builtins/llm_judge.py +516 -0
  21. whatap_python-2.1.0/whatap/llm/evaluators/builtins/pii_leak.py +214 -0
  22. whatap_python-2.1.0/whatap/llm/evaluators/builtins/prompt_injection.py +71 -0
  23. whatap_python-2.1.0/whatap/llm/evaluators/builtins/toxicity.py +53 -0
  24. whatap_python-2.1.0/whatap/llm/evaluators/builtins/url_scan.py +194 -0
  25. whatap_python-2.1.0/whatap/llm/evaluators/registry.py +192 -0
  26. whatap_python-2.1.0/whatap/llm/evaluators/sampler.py +83 -0
  27. whatap_python-2.1.0/whatap/llm/evaluators/scope.py +334 -0
  28. whatap_python-2.1.0/whatap/llm/features.py +66 -0
  29. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/__init__.py +1 -0
  30. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_log_sink_pack.py +11 -3
  31. whatap_python-2.1.0/whatap/llm/log_sink_packs/llm_step_eval_status.py +94 -0
  32. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_step_status.py +7 -3
  33. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_tx_status.py +8 -2
  34. whatap_python-2.1.0/whatap/llm/prompt_meta.py +288 -0
  35. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/anthropic/messages/messages.py +5 -2
  36. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/anthropic/messages/messages_context.py +5 -5
  37. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/anthropic/messages/messages_extractor.py +5 -2
  38. whatap_python-2.1.0/whatap/llm/providers/interceptor.py +182 -0
  39. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/chat/chat.py +5 -2
  40. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/chat/chat_context.py +5 -5
  41. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/chat/chat_extractor.py +9 -8
  42. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/completions/completions.py +5 -2
  43. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/completions/completions_context.py +0 -1
  44. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/embeddings/embeddings.py +8 -3
  45. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/embeddings/embeddings_context.py +0 -1
  46. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/responses/responses.py +5 -2
  47. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/responses/responses_context.py +4 -4
  48. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/responses/responses_extractor.py +7 -6
  49. whatap_python-2.1.0/whatap/llm/stats/__init__.py +35 -0
  50. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/stats/active_stat.py +14 -5
  51. whatap_python-2.1.0/whatap/llm/stats/answer_relevance_eval_stat.py +10 -0
  52. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/stats/api_status_stat.py +9 -2
  53. whatap_python-2.1.0/whatap/llm/stats/base_stat.py +107 -0
  54. whatap_python-2.1.0/whatap/llm/stats/combined_judge_eval_stat.py +11 -0
  55. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/stats/error_stat.py +7 -4
  56. whatap_python-2.1.0/whatap/llm/stats/eval_stat.py +225 -0
  57. whatap_python-2.1.0/whatap/llm/stats/factuality_eval_stat.py +10 -0
  58. whatap_python-2.1.0/whatap/llm/stats/feature_stat.py +104 -0
  59. whatap_python-2.1.0/whatap/llm/stats/finish_stat.py +105 -0
  60. whatap_python-2.1.0/whatap/llm/stats/hallucination_eval_stat.py +10 -0
  61. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/stats/perf_stat.py +15 -3
  62. whatap_python-2.1.0/whatap/llm/stats/pii_leak_eval_stat.py +12 -0
  63. whatap_python-2.1.0/whatap/llm/stats/prompt_injection_eval_stat.py +10 -0
  64. whatap_python-2.1.0/whatap/llm/stats/token_usage_stat.py +133 -0
  65. whatap_python-2.1.0/whatap/llm/stats/toxicity_eval_stat.py +10 -0
  66. whatap_python-2.1.0/whatap/llm/stats/url_scan_eval_stat.py +12 -0
  67. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/async_sender.py +19 -2
  68. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/udp_session.py +31 -2
  69. whatap_python-2.1.0/whatap/trace/mod/application/fastapi/__init__.py +31 -0
  70. whatap_python-2.1.0/whatap/trace/mod/application/fastapi/endpoint.py +73 -0
  71. whatap_python-2.1.0/whatap/trace/mod/application/fastapi/exception_log.py +63 -0
  72. whatap_python-2.1.0/whatap/trace/mod/application/fastapi/instrumentation.py +204 -0
  73. whatap_python-2.1.0/whatap/trace/mod/application/fastapi/scope.py +115 -0
  74. whatap_python-2.1.0/whatap/trace/mod/application/fastapi/transaction.py +67 -0
  75. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/util.py +29 -3
  76. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/httpc/util.py +61 -19
  77. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/trace_handler.py +28 -7
  78. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap_python.egg-info/PKG-INFO +1 -1
  79. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap_python.egg-info/SOURCES.txt +35 -1
  80. whatap_python-2.0.2rc1/whatap/build.py +0 -4
  81. whatap_python-2.0.2rc1/whatap/llm/__init__.py +0 -1
  82. whatap_python-2.0.2rc1/whatap/llm/providers/interceptor.py +0 -85
  83. whatap_python-2.0.2rc1/whatap/llm/stats/__init__.py +0 -15
  84. whatap_python-2.0.2rc1/whatap/llm/stats/base_stat.py +0 -67
  85. whatap_python-2.0.2rc1/whatap/llm/stats/feature_stat.py +0 -63
  86. whatap_python-2.0.2rc1/whatap/llm/stats/token_usage_stat.py +0 -104
  87. whatap_python-2.0.2rc1/whatap/trace/mod/application/fastapi.py +0 -476
  88. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/README.md +0 -0
  89. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/pyproject.toml +0 -0
  90. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/setup.cfg +0 -0
  91. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/setup.py +0 -0
  92. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/LICENSE +0 -0
  93. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/README.rst +0 -0
  94. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/__main__.py +0 -0
  95. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/agent/darwin/amd64/whatap_python +0 -0
  96. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/agent/darwin/arm64/whatap_python +0 -0
  97. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/bootstrap/__init__.py +0 -0
  98. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/bootstrap/sitecustomize.py +0 -0
  99. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/conf/__init__.py +0 -0
  100. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/conf/license.py +0 -0
  101. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/control/__init__.py +0 -0
  102. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/counter/__init__.py +0 -0
  103. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/counter/counter_manager.py +0 -0
  104. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/counter/tasks/__init__.py +0 -0
  105. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/counter/tasks/base_task.py +0 -0
  106. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/counter/tasks/openfiledescriptor.py +0 -0
  107. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/io/__init__.py +0 -0
  108. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/io/data_inputx.py +0 -0
  109. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/io/data_outputx.py +0 -0
  110. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/definitions.py +0 -0
  111. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_input_message.py +0 -0
  112. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_output_message.py +0 -0
  113. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_system_message.py +0 -0
  114. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_tool_calls.py +0 -0
  115. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/log_sink_packs/llm_tool_results.py +0 -0
  116. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/pricing.py +0 -0
  117. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/__init__.py +0 -0
  118. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/anthropic/__init__.py +0 -0
  119. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/anthropic/messages/__init__.py +0 -0
  120. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/__init__.py +0 -0
  121. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/chat/__init__.py +0 -0
  122. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/completions/__init__.py +0 -0
  123. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/completions/completions_extractor.py +0 -0
  124. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/content_parser.py +0 -0
  125. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/embeddings/__init__.py +0 -0
  126. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/embeddings/embeddings_extractor.py +0 -0
  127. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/openai/responses/__init__.py +0 -0
  128. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/providers/stream_accumulator.py +0 -0
  129. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/llm/stats/meter.py +0 -0
  130. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/__init__.py +0 -0
  131. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/packet_enum.py +0 -0
  132. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/packet_type_enum.py +0 -0
  133. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/param_def.py +0 -0
  134. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/stackhelper.py +0 -0
  135. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/net/udp_thread.py +0 -0
  136. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/pack/__init__.py +0 -0
  137. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/pack/logSinkPack.py +0 -0
  138. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/pack/pack.py +0 -0
  139. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/pack/pack_enum.py +0 -0
  140. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/pack/tagCountPack.py +0 -0
  141. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/scripts/__init__.py +0 -0
  142. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/__init__.py +0 -0
  143. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/__init__.py +0 -0
  144. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/amqp/__init__.py +0 -0
  145. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/amqp/kombu.py +0 -0
  146. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/amqp/pika.py +0 -0
  147. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/__init__.py +0 -0
  148. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/bottle.py +0 -0
  149. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/celery.py +0 -0
  150. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/cherrypy.py +0 -0
  151. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/django.py +0 -0
  152. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/django_asgi.py +0 -0
  153. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/django_py3.py +0 -0
  154. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/flask.py +0 -0
  155. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/frappe.py +0 -0
  156. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/graphql.py +0 -0
  157. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/nameko.py +0 -0
  158. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/odoo.py +0 -0
  159. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/starlette.py +0 -0
  160. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/tornado.py +0 -0
  161. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/application/wsgi.py +0 -0
  162. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/__init__.py +0 -0
  163. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/cxoracle.py +0 -0
  164. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/mongo.py +0 -0
  165. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/mysql.py +0 -0
  166. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/neo4j.py +0 -0
  167. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/psycopg2.py +0 -0
  168. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/psycopg3.py +0 -0
  169. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/redis.py +0 -0
  170. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/sqlalchemy.py +0 -0
  171. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/database/sqlite3.py +0 -0
  172. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/email/__init__.py +0 -0
  173. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/email/smtp.py +0 -0
  174. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/httpc/__init__.py +0 -0
  175. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/httpc/django.py +0 -0
  176. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/httpc/httplib.py +0 -0
  177. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/httpc/httpx.py +0 -0
  178. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/httpc/requests.py +0 -0
  179. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/httpc/urllib3.py +0 -0
  180. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/logging.py +0 -0
  181. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/plugin.py +0 -0
  182. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/standalone/__init__.py +0 -0
  183. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/standalone/multiple.py +0 -0
  184. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/mod/standalone/single.py +0 -0
  185. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/simple_trace_context.py +0 -0
  186. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/trace_context.py +0 -0
  187. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/trace_context_manager.py +0 -0
  188. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/trace_error.py +0 -0
  189. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/trace_import.py +0 -0
  190. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/trace/trace_module_definition.py +0 -0
  191. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/__init__.py +0 -0
  192. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/bit_util.py +0 -0
  193. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/cardinality/__init__.py +0 -0
  194. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/cardinality/hyperloglog.py +0 -0
  195. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/cardinality/murmurhash.py +0 -0
  196. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/cardinality/registerset.py +0 -0
  197. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/compare_util.py +0 -0
  198. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/date_util.py +0 -0
  199. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/debug_util.py +0 -0
  200. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/escape_literal_sql.py +0 -0
  201. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/frame_util.py +0 -0
  202. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/hash_util.py +0 -0
  203. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/hexa32.py +0 -0
  204. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/int_set.py +0 -0
  205. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/ip_util.py +0 -0
  206. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/keygen.py +0 -0
  207. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/linked_list.py +0 -0
  208. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/linked_map.py +0 -0
  209. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/metering_util.py +0 -0
  210. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/request_double_queue.py +0 -0
  211. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/request_queue.py +0 -0
  212. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/string_util.py +0 -0
  213. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/throttle_util.py +0 -0
  214. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/util/userid_util.py +0 -0
  215. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/__init__.py +0 -0
  216. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/blob_value.py +0 -0
  217. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/boolean_value.py +0 -0
  218. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/decimal_value.py +0 -0
  219. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/double_summary.py +0 -0
  220. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/double_value.py +0 -0
  221. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/float_array.py +0 -0
  222. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/float_value.py +0 -0
  223. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/int_array.py +0 -0
  224. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/ip4_value.py +0 -0
  225. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/list_value.py +0 -0
  226. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/long_array.py +0 -0
  227. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/long_summary.py +0 -0
  228. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/map_value.py +0 -0
  229. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/null_value.py +0 -0
  230. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/number_value.py +0 -0
  231. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/summary_value.py +0 -0
  232. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/text_array.py +0 -0
  233. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/text_hash_value.py +0 -0
  234. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/text_value.py +0 -0
  235. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/value.py +0 -0
  236. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/value/value_enum.py +0 -0
  237. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap/whatap.conf +0 -0
  238. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap_python.egg-info/dependency_links.txt +0 -0
  239. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap_python.egg-info/entry_points.txt +0 -0
  240. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap_python.egg-info/not-zip-safe +0 -0
  241. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap_python.egg-info/requires.txt +0 -0
  242. {whatap_python-2.0.2rc1 → whatap_python-2.1.0}/whatap_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: whatap-python
3
- Version: 2.0.2rc1
3
+ Version: 2.1.0
4
4
  Summary: Monitoring and Profiling Service
5
5
  Home-page: https://www.whatap.io
6
6
  Author: whatap
@@ -301,9 +301,45 @@ from whatap.trace.trace_module_definition import DEFINITION, IMPORT_HOOKS, \
301
301
  PLUGIN
302
302
 
303
303
 
304
+ def _build_ignore_instrumentation_set():
305
+ """whatap.conf 의 ignore_instrumentation_set 값을 정규화하여 반환.
306
+ Configure.load() 가 _set 접미사 키를 콤마 split 해 list 로 만들지만,
307
+ 환경변수/직접 setProperty 등 다른 경로로 들어온 경우(str)도 함께 처리한다.
308
+ """
309
+ raw = getattr(conf, 'ignore_instrumentation_set', None) or []
310
+ if isinstance(raw, str):
311
+ raw = raw.split(',')
312
+ return {str(item).strip().lower() for item in raw if item and str(item).strip()}
313
+
314
+
315
+ def _is_instrumentation_ignored(definition_key, ignore_set):
316
+ """DEFINITION 키(예: 'database.redis', 'logging')가 무시 대상인지 판정.
317
+
318
+ 매칭 규칙(셋 중 하나라도 맞으면 True):
319
+ 1) 키 전체가 일치 예: 'database.redis' == 'database.redis'
320
+ 2) 카테고리(점 앞)와 일치 예: 'database' → 'database.*' 모두
321
+ 3) 라이브러리(점 뒤)와 일치 예: 'redis' → 'database.redis'
322
+ """
323
+ if not ignore_set:
324
+ return False
325
+ key_lower = definition_key.lower()
326
+ if key_lower in ignore_set:
327
+ return True
328
+ if '.' in key_lower:
329
+ category, lib = key_lower.split('.', 1)
330
+ if category in ignore_set or lib in ignore_set:
331
+ return True
332
+ return False
333
+
334
+
304
335
  def hooks(home):
336
+ ignore_set = _build_ignore_instrumentation_set()
337
+ skipped_keys = []
305
338
  try:
306
339
  for key, value_list in DEFINITION.items():
340
+ if _is_instrumentation_ignored(key, ignore_set):
341
+ skipped_keys.append(key)
342
+ continue
307
343
  for value in value_list:
308
344
  if len(value) >= 3 and isinstance(value[2], str):
309
345
  module_path = value[2]
@@ -318,7 +354,14 @@ def hooks(home):
318
354
  logging.debug(e, extra={'id': 'MODULE ERROR'})
319
355
  finally:
320
356
  try:
321
- if conf.trace_logging_enabled:
357
+ if skipped_keys:
358
+ logging.debug(
359
+ 'WHATAP: ignore_instrumentation_set skipped: {}'.format(
360
+ ','.join(skipped_keys)),
361
+ extra={'id': 'WA_IGN'})
362
+
363
+ if conf.trace_logging_enabled and not _is_instrumentation_ignored(
364
+ 'logging', ignore_set):
322
365
  logging_module = sys.modules.get("logging")
323
366
  from whatap.trace.mod.logging import instrument_logging
324
367
  instrument_logging(logging_module)
@@ -535,12 +578,47 @@ def go(batch=False, opts={}, llm=False):
535
578
  label = 'LLM golang module' if llm else 'golang module'
536
579
 
537
580
  if sys.platform == 'win32':
538
- DETACHED_PROCESS = 0x00000008
581
+ # SESSIONNAME 환경변수는 NSSM이 부모 세션에서 상속받아 부정확함
582
+ # ProcessIdToSessionId로 실제 프로세스 세션 ID 확인
583
+ try:
584
+ import ctypes
585
+ _sid = ctypes.c_ulong(0)
586
+ ctypes.windll.kernel32.ProcessIdToSessionId(
587
+ ctypes.windll.kernel32.GetCurrentProcessId(),
588
+ ctypes.byref(_sid)
589
+ )
590
+ is_session0 = (_sid.value == 0)
591
+ except Exception:
592
+ is_session0 = not os.environ.get('SESSIONNAME')
593
+
539
594
  cmd_args.append('foreground')
540
- process = subprocess.Popen(cmd_args,
541
- cwd=home_path, env=newenv,
542
- creationflags=DETACHED_PROCESS,
543
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
595
+
596
+ if is_session0:
597
+ # Session 0에서만 WHATAP_FOREGROUND=1 추가 주입.
598
+ # IsAnInteractiveSession()이 false로 떨어지는 경로에서
599
+ # foreground CLI 인자를 보강하는 안전망.
600
+ newenv['WHATAP_FOREGROUND'] = '1'
601
+
602
+ # Session 0에서는 PIPE를 읽지 않으면 버퍼 고갈로 Go 프로세스가 블로킹됨
603
+ # 로그 파일로 리디렉션
604
+ # CREATE_NO_WINDOW: Session 0 서비스 컨텍스트에 적합한 플래그
605
+ CREATE_NO_WINDOW = 0x08000000
606
+ log_dir = os.path.join(home_path, 'logs')
607
+ go_log_path = os.path.join(log_dir, AGENT_NAME + '.log')
608
+ try:
609
+ go_out = open(go_log_path, 'ab')
610
+ except Exception:
611
+ go_out = subprocess.DEVNULL
612
+ process = subprocess.Popen(cmd_args,
613
+ cwd=home_path, env=newenv,
614
+ creationflags=CREATE_NO_WINDOW,
615
+ stdout=go_out, stderr=go_out)
616
+ else:
617
+ DETACHED_PROCESS = 0x00000008
618
+ process = subprocess.Popen(cmd_args,
619
+ cwd=home_path, env=newenv,
620
+ creationflags=DETACHED_PROCESS,
621
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
544
622
  else:
545
623
  process = subprocess.Popen(cmd_args,
546
624
  cwd=home_path, env=newenv,
@@ -549,8 +627,11 @@ def go(batch=False, opts={}, llm=False):
549
627
 
550
628
  time.sleep(0.5)
551
629
  if process.poll() is not None:
552
- stdouts, errs = process.communicate()
553
- whatap_print("executed {} ".format(label), str(stdouts,"utf8"), str(errs, "utf8"))
630
+ if sys.platform == 'win32' and is_session0:
631
+ whatap_print("executed {} (exit code: {}, log: {})".format(label, process.returncode, go_log_path))
632
+ else:
633
+ stdouts, errs = process.communicate()
634
+ whatap_print("executed {} ".format(label), str(stdouts,"utf8"), str(errs, "utf8"))
554
635
  else:
555
636
  write_file(home, file_name, str(process.pid))
556
637
  whatap_print("executed {} in background (PID: {})".format(label, process.pid))
@@ -0,0 +1,4 @@
1
+ app = 'Python'
2
+ name = 'whatap-python'
3
+ version = '2.1.0'
4
+ release_date = '20260610'
@@ -19,6 +19,13 @@ Configuration = {
19
19
  "trace_ignore_url_prefix": None,
20
20
  "trace_websocket_enabled": False,
21
21
 
22
+ # 자동 계측에서 제외할 라이브러리 목록(콤마 구분).
23
+ # - DEFINITION 키 전체: database.redis, llm.openai
24
+ # - 카테고리만: database (database.* 전부 스킵)
25
+ # - 라이브러리 이름만: redis, openai, django (해당 키만 스킵)
26
+ # 예: ignore_instrumentation_set=redis,openai,application.django
27
+ "ignore_instrumentation_set": [],
28
+
22
29
  "llm_api_hosts": "",
23
30
 
24
31
  "debug": False,
@@ -225,5 +232,49 @@ Configuration = {
225
232
  "force_llm_net_udp_port": False,
226
233
  "llm_model_pricing": "",
227
234
  "llm_perf_sketch_enabled": True,
228
- "llm_perf_sketch_k": 200
235
+ "llm_perf_sketch_k": 200,
236
+
237
+ # ── LLM Evaluation ──
238
+ # 평가 파이프라인 마스터 토글. false면 enqueue/worker가 동작하지 않음.
239
+ "llm_eval_enabled": False,
240
+ # judge LLM 호출 평가자의 샘플링 비율 (0.0 ~ 1.0).
241
+ # 1.0 (기본) — 모든 judge 평가자 항상 실행
242
+ # 0.1 — judge 평가자 10% 만 실행 (비용 1/10)
243
+ # 0.0 — judge 평가자 전부 skip
244
+ # 규칙 기반 평가자 (PIILeak / URLScan 등 USES_LLM_JUDGE=False) 는 영향 X.
245
+ # 결정론적 샘플링 — 같은 txid 는 항상 같은 결정.
246
+ "llm_eval_sample_rate": 1.0,
247
+ # 평가 큐 최대 크기. 초과 시 drop + LLM030 경고.
248
+ "llm_eval_buffer_limit": 1000,
249
+ # 평가자 실행에 쓸 ThreadPoolExecutor worker 수.
250
+ "llm_eval_workers": 4,
251
+ # judge LLM 1회 호출의 최대 대기 시간 (초). 초과 시 TimeoutError → judge_error
252
+ # 로 graceful degrade. user app 의 event loop 가 hang/backpressure 일 때
253
+ # 평가 워커가 무기한 블록되는 것을 차단. 0 또는 음수면 무제한 (legacy 동작).
254
+ "llm_eval_judge_timeout_sec": 30,
255
+ # judge LLM 호출도 기존 인스트루멘테이션 (intercept) 으로 추적할지 여부.
256
+ # False (기본): judge 호출은 intercept 우회 → 메트릭/logsink 에 안 잡힘.
257
+ # (eval 결과 점수만 LlmStepEvalStatus + llm_eval_stat 로 송출)
258
+ # True : judge 호출이 llm_step_status pack + 메트릭에 잡힘 (사용자 호출과 동일).
259
+ # cost/token/latency 가시화. 메트릭 카운트 2배 증가 가능 (user + judge).
260
+ "llm_eval_track_judge_calls": False,
261
+ # 활성 평가자 csv. 미지정 (빈 값) 이면 default 3 종 자동 활성:
262
+ # combined_judge, pii_leak, url_scan
263
+ # 개별 aspect evaluator (hallucination / answer_relevance / toxicity /
264
+ # prompt_injection / factuality) 는 combined_judge 가 1회 judge 호출로 이미
265
+ # 모두 산출하므로 default 에서 제외 — 명시 활성 시에만 별도 evaluator 가 추가
266
+ # judge 호출을 발생시킴.
267
+ #
268
+ # 가용 라벨 (각 라벨이 evaluator 1개 + 동명 stat 카테고리에 매핑):
269
+ # combined_judge — 1번의 LLM judge 호출로 5 의미 aspect 동시 평가
270
+ # (hallucination / answer_relevance / toxicity /
271
+ # prompt_injection / factuality)
272
+ # pii_leak — 정규식 + Luhn 으로 PII 노출 탐지 (LLM 호출 X)
273
+ # url_scan — URL 추출 + suspicious 패턴 매칭 (LLM 호출 X)
274
+ # hallucination / answer_relevance / toxicity / prompt_injection / factuality
275
+ # — combined_judge 대신 개별 evaluator 만 쓰고 싶을 때
276
+ # 예: "combined_judge,pii_leak,url_scan" (default 와 동일)
277
+ # 예: "pii_leak,url_scan" (정형 평가만, LLM judge 0회)
278
+ # 예: "hallucination,toxicity,pii_leak" (개별 aspect — combined 대신)
279
+ "llm_eval_evaluators": "",
229
280
  }
@@ -60,7 +60,7 @@ class Configure(object):
60
60
  except Exception as e:
61
61
  print('WHATAP: ', e)
62
62
  continue
63
- if not getattr(cls, "license") and getattr(cls, "accesskey"):
63
+ if not getattr(cls, "license", None) and getattr(cls, "accesskey", None):
64
64
  setattr(cls, "license", getattr(cls, "accesskey"))
65
65
  for callback in cls.observers:
66
66
  callback()