agentgear-ai 0.1.16__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 (44) hide show
  1. agentgear/__init__.py +18 -0
  2. agentgear/cli/__init__.py +1 -0
  3. agentgear/cli/main.py +125 -0
  4. agentgear/sdk/__init__.py +6 -0
  5. agentgear/sdk/client.py +276 -0
  6. agentgear/sdk/decorators.py +65 -0
  7. agentgear/sdk/integrations/openai.py +52 -0
  8. agentgear/sdk/prompt.py +23 -0
  9. agentgear/sdk/trace.py +59 -0
  10. agentgear/server/__init__.py +1 -0
  11. agentgear/server/app/__init__.py +1 -0
  12. agentgear/server/app/api/__init__.py +1 -0
  13. agentgear/server/app/api/auth.py +156 -0
  14. agentgear/server/app/api/datasets.py +185 -0
  15. agentgear/server/app/api/evaluations.py +69 -0
  16. agentgear/server/app/api/evaluators.py +157 -0
  17. agentgear/server/app/api/llm_models.py +39 -0
  18. agentgear/server/app/api/metrics.py +18 -0
  19. agentgear/server/app/api/projects.py +139 -0
  20. agentgear/server/app/api/prompts.py +227 -0
  21. agentgear/server/app/api/runs.py +75 -0
  22. agentgear/server/app/api/seed.py +106 -0
  23. agentgear/server/app/api/settings.py +135 -0
  24. agentgear/server/app/api/spans.py +56 -0
  25. agentgear/server/app/api/tokens.py +67 -0
  26. agentgear/server/app/api/users.py +116 -0
  27. agentgear/server/app/auth.py +80 -0
  28. agentgear/server/app/config.py +26 -0
  29. agentgear/server/app/db.py +41 -0
  30. agentgear/server/app/deps.py +46 -0
  31. agentgear/server/app/main.py +77 -0
  32. agentgear/server/app/migrations.py +88 -0
  33. agentgear/server/app/models.py +339 -0
  34. agentgear/server/app/schemas.py +343 -0
  35. agentgear/server/app/utils/email.py +30 -0
  36. agentgear/server/app/utils/llm.py +27 -0
  37. agentgear/server/static/assets/index-BAAzXAln.js +121 -0
  38. agentgear/server/static/assets/index-CE45MZx1.css +1 -0
  39. agentgear/server/static/index.html +13 -0
  40. agentgear_ai-0.1.16.dist-info/METADATA +387 -0
  41. agentgear_ai-0.1.16.dist-info/RECORD +44 -0
  42. agentgear_ai-0.1.16.dist-info/WHEEL +4 -0
  43. agentgear_ai-0.1.16.dist-info/entry_points.txt +2 -0
  44. agentgear_ai-0.1.16.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1 @@
1
+ .react-flow{direction:ltr}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:grab}.react-flow__node.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:#ffffff80;padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.left-3{left:.75rem}.top-1\/2{top:50%}.top-6{top:1.5rem}.z-10{z-index:10}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-\[500px\]{height:500px}.h-fit{height:-moz-fit-content;height:fit-content}.max-h-60{max-height:15rem}.min-h-\[200px\]{min-height:200px}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-5{width:1.25rem}.w-60{width:15rem}.w-64{width:16rem}.w-8{width:2rem}.w-full{width:100%}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.scroll-mt-8{scroll-margin-top:2rem}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-16>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-slate-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(241 245 249 / var(--tw-divide-opacity, 1))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(226 232 240 / var(--tw-divide-opacity, 1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-amber-100{--tw-border-opacity: 1;border-color:rgb(254 243 199 / var(--tw-border-opacity, 1))}.border-blue-100{--tw-border-opacity: 1;border-color:rgb(219 234 254 / var(--tw-border-opacity, 1))}.border-brand-600{--tw-border-opacity: 1;border-color:rgb(36 90 176 / var(--tw-border-opacity, 1))}.border-orange-100{--tw-border-opacity: 1;border-color:rgb(255 237 213 / var(--tw-border-opacity, 1))}.border-purple-100{--tw-border-opacity: 1;border-color:rgb(243 232 255 / var(--tw-border-opacity, 1))}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-slate-600{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white\/20{border-color:#fff3}.border-white\/40{border-color:#fff6}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-black\/30{background-color:#0000004d}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-brand-100{--tw-bg-opacity: 1;background-color:rgb(220 236 255 / var(--tw-bg-opacity, 1))}.bg-brand-50{--tw-bg-opacity: 1;background-color:rgb(240 247 255 / var(--tw-bg-opacity, 1))}.bg-brand-600{--tw-bg-opacity: 1;background-color:rgb(36 90 176 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-50\/50{background-color:#f8fafc80}.bg-slate-800\/50{background-color:#1e293b80}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/70{background-color:#ffffffb3}.bg-white\/80{background-color:#fffc}.bg-yellow-400{--tw-bg-opacity: 1;background-color:rgb(250 204 21 / var(--tw-bg-opacity, 1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-\[\#eef2ff\]{--tw-gradient-from: #eef2ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(238 242 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-900{--tw-gradient-from: #0f172a var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-\[\#f0f9ff\]{--tw-gradient-to: #f0f9ff var(--tw-gradient-to-position)}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.to-slate-800{--tw-gradient-to: #1e293b var(--tw-gradient-to-position)}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[11px\]{font-size:11px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-brand-600{--tw-text-opacity: 1;color:rgb(36 90 176 / var(--tw-text-opacity, 1))}.text-brand-700{--tw-text-opacity: 1;color:rgb(31 74 141 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-800{--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.text-pink-600{--tw-text-opacity: 1;color:rgb(219 39 119 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.decoration-slate-300{text-decoration-color:#cbd5e1}.underline-offset-2{text-underline-offset:2px}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black\/5{--tw-ring-color: rgb(0 0 0 / .05)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.animate-fade-in{animation:fadeIn .5s ease-out forwards}.animate-slide-up{animation:slideUp .5s ease-out forwards}body{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1));-webkit-transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}::-webkit-scrollbar-thumb:hover{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.hover\:border-brand-300:hover{--tw-border-opacity: 1;border-color:rgb(137 190 255 / var(--tw-border-opacity, 1))}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-brand-100:hover{--tw-bg-opacity: 1;background-color:rgb(220 236 255 / var(--tw-bg-opacity, 1))}.hover\:bg-brand-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 247 255 / var(--tw-bg-opacity, 1))}.hover\:bg-brand-700:hover{--tw-bg-opacity: 1;background-color:rgb(31 74 141 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-700:hover{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-200:hover{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50\/80:hover{background-color:#f8fafccc}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:from-blue-500:hover{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-blue-400:hover{--tw-gradient-to: #60a5fa var(--tw-gradient-to-position)}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-blue-900:hover{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.hover\:text-brand-700:hover{--tw-text-opacity: 1;color:rgb(31 74 141 / var(--tw-text-opacity, 1))}.hover\:text-brand-800:hover{--tw-text-opacity: 1;color:rgb(30 62 115 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-slate-700:hover{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-blue-400:focus{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.focus\:border-brand-500:focus{--tw-border-opacity: 1;border-color:rgb(49 116 217 / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-100:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width: 640px){.sm\:block{display:block}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[1\.2fr_1fr\]{grid-template-columns:1.2fr 1fr}.md\:p-10{padding:2.5rem}}@media (min-width: 1024px){.lg\:block{display:block}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-\[1fr_350px\]{grid-template-columns:1fr 350px}}
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>AgentGear</title>
7
+ <script type="module" crossorigin src="/assets/index-BAAzXAln.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-CE45MZx1.css">
9
+ </head>
10
+ <body class="bg-slate-50">
11
+ <div id="root"></div>
12
+ </body>
13
+ </html>
@@ -0,0 +1,387 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentgear-ai
3
+ Version: 0.1.16
4
+ Summary: AgentGear: LLM observability, prompt management, and agentic tracing platform with SDK, FastAPI backend, and dashboard.
5
+ Project-URL: Homepage, https://github.com/debpanda/agentgear
6
+ Project-URL: Repository, https://github.com/debpanda/agentgear
7
+ Project-URL: Issues, https://github.com/debpanda/agentgear/issues
8
+ Author: AgentGear Contributors
9
+ License-Expression: Apache-2.0
10
+ License-File: LICENSE
11
+ Keywords: agents,fastapi,llm,observability,prompts,sdk,tracing
12
+ Classifier: Framework :: FastAPI
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Software Development :: Libraries
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: fastapi>=0.110
22
+ Requires-Dist: httpx>=0.27
23
+ Requires-Dist: itsdangerous>=2.2
24
+ Requires-Dist: jinja2>=3.1
25
+ Requires-Dist: pydantic-settings>=2.0
26
+ Requires-Dist: pydantic>=2.6
27
+ Requires-Dist: python-dateutil>=2.8
28
+ Requires-Dist: python-multipart>=0.0.9
29
+ Requires-Dist: requests>=2.31
30
+ Requires-Dist: sqlalchemy>=2.0
31
+ Requires-Dist: typer>=0.9
32
+ Requires-Dist: uvicorn[standard]>=0.27
33
+ Provides-Extra: cli
34
+ Requires-Dist: typer[all]>=0.9; extra == 'cli'
35
+ Provides-Extra: dev
36
+ Requires-Dist: coverage>=7.4; extra == 'dev'
37
+ Requires-Dist: mypy>=1.8; extra == 'dev'
38
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
39
+ Requires-Dist: pytest>=7.4; extra == 'dev'
40
+ Requires-Dist: ruff>=0.3; extra == 'dev'
41
+ Requires-Dist: types-python-dateutil; extra == 'dev'
42
+ Provides-Extra: server
43
+ Requires-Dist: uvicorn[standard]>=0.27; extra == 'server'
44
+ Description-Content-Type: text/markdown
45
+
46
+ # AgentGear
47
+
48
+ <p align="center">
49
+ <img src="https://raw.githubusercontent.com/debpanda/agentgear/main/docs/assets/agentgear-logo.svg" alt="# AgentGear
50
+
51
+ ![AgentGear](https://img.shields.io/pypi/v/agentgear-ai.svg) ![License](https://img.shields.io/badge/license-MIT-blue.svg)
52
+
53
+ **AgentGear** is the all-in-one open-source platform for **LLM Observability, Prompt Engineering, and Agent Tracing**. It helps you debug, evaluate, and optimize your AI agents with a beautiful, locally hosted dashboard.
54
+
55
+ ## 🚀 Quick Start
56
+
57
+ Get started in 30 seconds. No complex setup required.
58
+
59
+ ### 1. Install
60
+ ```bash
61
+ pip install agentgear-ai
62
+ ```
63
+
64
+ ### 2. Run the UI
65
+ ```bash
66
+ agentgear ui
67
+ ```
68
+ The dashboard will open at http://localhost:8000.
69
+
70
+ ---
71
+
72
+ ## ✨ Features
73
+
74
+ - **🔍 Agent Tracing**: Visualise your agent's thought process with interactive graphs.
75
+ - **📝 Prompt Registry**: Version, tag, and test your prompts.
76
+ - **🧪 Playground**: Experiment with different LLMs (OpenAI, Anthropic, Gemini, etc.) directly in the UI.
77
+ - **📊 Datasets & Evaluations**: Upload test cases (CSV/JSON) and run LLM-as-a-Judge evaluators to catch regressions.
78
+ - **📈 Metrics**: Track token usage, latency, and costs.
79
+ - **🔒 Secure**: Runs locally on your machine. Your data stays with you.
80
+
81
+ ## 📚 Documentation
82
+
83
+ For full documentation on how to instrument your code, visit the **[Documentation](http://localhost:8000/guide)** page within the dashboard.
84
+
85
+ ### Basic Instrumentation Example
86
+
87
+ ```python
88
+ from agentgear import instrument, start_trace
89
+
90
+ # 1. Initialize
91
+ instrument(
92
+ project_id="my-project",
93
+ api_key="...", # Not needed for local dev
94
+ )
95
+
96
+ # 2. Decorate your functions
97
+ @trace_span(name="generate_story")
98
+ def generate_story(topic):
99
+ # Your LLM call here...
100
+ return "Once upon a time..."
101
+ ```
102
+
103
+ ## 🛠 Configuration
104
+
105
+ AgentGear works out of the box, but you can configure it via environment variables:
106
+
107
+ - `AGENTGEAR_DATABASE_URL`: Custom database path (default: `sqlite:///~/.agentgear/agentgear.db`)
108
+ - `OPENAI_API_KEY`: Required for Playground and Evaluations.
109
+
110
+ ---
111
+
112
+ ## Quick Start
113
+
114
+ ### Prerequisites
115
+ - Python 3.10+
116
+ - Node 18+ (with npm/pnpm/yarn) — only needed if you want to hack on the UI locally; production install uses the bundled build
117
+ - SQLite (default) or Postgres (for cloud)
118
+
119
+ ### 1) Install SDK
120
+ ```bash
121
+ pip install agentgear-ai
122
+ ```
123
+ > Package name is `agentgear-ai`, import path remains `import agentgear`.
124
+
125
+ ### 2) Initialize backend (SQLite dev)
126
+ ```bash
127
+ agentgear init-db
128
+ ```
129
+ > Default SQLite file lives at `~/.agentgear/agentgear.db`. Set `AGENTGEAR_DATABASE_URL` to override (absolute path recommended).
130
+
131
+ ### 3) Launch API + dashboard (served from the Python package)
132
+ ```bash
133
+ agentgear ui # FastAPI + packaged React dashboard on :8000
134
+ # open http://localhost:8000
135
+ # first visit prompts you to set an admin username/password
136
+ ```
137
+
138
+ ### 4) Create project + token (from CLI)
139
+ ```bash
140
+ agentgear create-project --name "My Project"
141
+ agentgear create-token --project <project_id>
142
+ ```
143
+ Copy the token (shown once). Use it in SDK calls via `X-AgentGear-Key`.
144
+
145
+ ### 5) Forgot the password?
146
+ - Set env vars, restart the server, and sign in with the override:
147
+ - `export AGENTGEAR_ADMIN_USERNAME=admin`
148
+ - `export AGENTGEAR_ADMIN_PASSWORD=change-me`
149
+ - `agentgear ui`
150
+ - Clear the env vars afterward if you want to go back to the stored admin user.
151
+
152
+ ---
153
+
154
+ ## SDK Usage
155
+
156
+ ### Configure client
157
+ ```python
158
+ from agentgear import AgentGearClient
159
+
160
+ # Remote mode (FastAPI running elsewhere)
161
+ client = AgentGearClient(
162
+ base_url="https://your-api.example.com",
163
+ api_key="ag_live_...",
164
+ project_id="proj_123",
165
+ local=False,
166
+ )
167
+
168
+ # Local mode (writes directly to SQLite, no API key needed)
169
+ local_client = AgentGearClient(
170
+ project_id="proj_123",
171
+ local=True,
172
+ )
173
+ ```
174
+
175
+ ### Observe decorator
176
+ ```python
177
+ from agentgear import observe
178
+
179
+ @observe(client, name="chat-complete", prompt_version_id="pv_abc")
180
+ def complete(prompt: str) -> str:
181
+ # call your LLM here
182
+ return "response"
183
+
184
+ complete("hi")
185
+ ```
186
+ Captures args, output, latency, prompt version, and errors; logs a run.
187
+
188
+ ### Trace spans
189
+ ```python
190
+ from agentgear import trace
191
+
192
+ run = client.log_run(name="pipeline", input_text="user input")
193
+ with trace(client, run_id=run["id"], name="retrieve") as span:
194
+ # retrieval work
195
+ pass
196
+ with trace(client, run_id=run["id"], name="generate", parent_id=span.span_id):
197
+ # generation work
198
+ pass
199
+ ```
200
+
201
+ ### Prompt templating
202
+ ```python
203
+ from agentgear import Prompt
204
+
205
+ prompt = Prompt(name="greeting", template="Hello {{ name }}!", version_id="pv_1")
206
+ rendered = prompt.render(name="AgentGear")
207
+ # register / version prompt
208
+ client.register_prompt(name=prompt.name, content=prompt.template, description="Greeting")
209
+ client.create_prompt_version(prompt_id="<prompt_id>", content="Hi {{ name }}!")
210
+ ```
211
+
212
+ ### OpenAI chat instrumentation
213
+ ```python
214
+ from openai import OpenAI
215
+ from agentgear.sdk.integrations.openai import instrument_openai_chat
216
+
217
+ raw_client = OpenAI(api_key="sk-...")
218
+ client = AgentGearClient(base_url="http://localhost:8000", api_key="ag_live_...", project_id="proj_123")
219
+ instrumented = instrument_openai_chat(raw_client, agentgear=client, model="gpt-4o", prompt_version_id="pv_123")
220
+
221
+ resp = instrumented.chat.completions.create(model="gpt-4o", messages=[{"role":"user","content":"Hello"}])
222
+ ```
223
+
224
+ ### End-to-end example (log run + spans + prompt link)
225
+ ```python
226
+ from agentgear import AgentGearClient, trace
227
+
228
+ client = AgentGearClient(
229
+ base_url="http://localhost:8000",
230
+ api_key="ag_live_...", # from CLI token creation
231
+ project_id="proj_123",
232
+ )
233
+
234
+ # Register a prompt (keeps version history)
235
+ prompt = client.register_prompt(name="retrieval-chat", content="Answer using {context}")
236
+ pv = client.create_prompt_version(prompt_id=prompt["id"], content="Answer using {context}. Be concise.")
237
+
238
+ # Log a run and nested spans
239
+ run = client.log_run(
240
+ name="qa-flow",
241
+ input_text="What is AgentGear?",
242
+ prompt_version_id=pv["id"],
243
+ token_usage={"prompt": 150, "completion": 120},
244
+ )
245
+
246
+ with trace(client, run_id=run["id"], name="retrieve") as span:
247
+ # do retrieval...
248
+ pass
249
+
250
+ with trace(client, run_id=run["id"], name="generate", parent_id=span.span_id) as _:
251
+ # call model...
252
+ pass
253
+ ```
254
+
255
+ ---
256
+
257
+ ## Backend (FastAPI)
258
+
259
+ ### Core entities
260
+ - **Project**: id, name, description, created_at
261
+ - **API Token**: id, project_id, key_hash (SHA-256), scopes, revoked, last_used_at
262
+ - **Prompt / PromptVersion**: registry + versioning
263
+ - **Run**: logged LLM call with tokens/cost/latency
264
+ - **Span**: child spans for workflows
265
+
266
+ ### Auth
267
+ - Header: `X-AgentGear-Key: <token>`
268
+ - Scopes (examples): `runs.write`, `prompts.read`, `prompts.write`, `tokens.manage`
269
+ - Dashboard login: first visit prompts you to set an admin username/password.
270
+ - Password reset: set `AGENTGEAR_ADMIN_USERNAME` and `AGENTGEAR_ADMIN_PASSWORD`, restart, sign in, then clear the env vars if you want to go back to the stored admin user.
271
+ - Local mode (`AGENTGEAR_LOCAL_MODE=true`) bypasses auth for dev; keep it `false` in any shared or remote environment.
272
+
273
+ ### Key endpoints
274
+ - `POST /api/projects`, `GET /api/projects`, `GET /api/projects/{id}`
275
+ - `POST /api/projects/{id}/tokens`, `GET /api/projects/{id}/tokens`, `DELETE /api/projects/{id}/tokens/{token_id}`
276
+ - `POST /api/prompts`, `GET /api/prompts`, `GET /api/prompts/{id}`, `POST /api/prompts/{id}/versions`, `GET /api/prompts/{id}/versions`
277
+ - `POST /api/runs`, `GET /api/runs`, `GET /api/runs/{id}`
278
+ - `POST /api/spans`, `GET /api/spans?run_id=`
279
+ - `GET /api/metrics/summary`, `GET /api/health`
280
+
281
+ ### Configuration (env)
282
+ | Var | Default | Description |
283
+ | --- | --- | --- |
284
+ | `AGENTGEAR_DATABASE_URL` | `sqlite:///~/.agentgear/agentgear.db` | DB connection (absolute path recommended; Postgres e.g. `postgresql+psycopg://user:pass@host/db`) |
285
+ | `AGENTGEAR_API_HOST` | `0.0.0.0` | Bind host |
286
+ | `AGENTGEAR_API_PORT` | `8000` | Bind port |
287
+ | `AGENTGEAR_SECRET_KEY` | `agentgear-dev-secret` | Signing/crypto secret |
288
+ | `AGENTGEAR_ALLOW_ORIGINS` | `*` | CORS allowlist |
289
+ | `AGENTGEAR_LOCAL_MODE` | `false` | If true, bypasses auth (dev only) |
290
+ | `AGENTGEAR_ADMIN_USERNAME` | `None` | Optional: override admin login username (e.g. for reset) |
291
+ | `AGENTGEAR_ADMIN_PASSWORD` | `None` | Optional: override admin login password (e.g. for reset) |
292
+
293
+ ---
294
+
295
+ ## Dashboard (React + Vite + Tailwind)
296
+ - Packaged build is bundled with the PyPI wheel and served from `/` when you run `agentgear ui`.
297
+ - For local UI tweaks, use the dev server (below); production installs can skip Node entirely.
298
+ - `/projects`: list + create projects
299
+ - `/projects/:id`: overview (stats, prompts, runs, tokens)
300
+ - `/projects/:id/tokens`: create/revoke tokens (shows raw token once)
301
+ - `/runs`: list runs with latency/cost
302
+ - `/runs/:id`: run detail + spans
303
+ - `/prompts`: prompt registry
304
+ - `/prompts/:id`: versions + add version
305
+
306
+ ### Run frontend locally
307
+ ```bash
308
+ cd frontend
309
+ npm install
310
+ npm run dev
311
+ # set API target if not localhost:
312
+ # export VITE_AGENTGEAR_API=http://localhost:8000
313
+ ```
314
+ > Production installs get the built dashboard bundled inside the Python package and served from `/` when you run `agentgear ui`.
315
+
316
+ ### Common UI flows
317
+ - Sign in (or complete first-time admin setup) at `/`.
318
+ - Create a project and issue an API token from the Tokens tab (token shown once).
319
+ - Browse runs/spans with latency and cost, filter by project.
320
+ - Manage prompts and versions, and see which runs reference each prompt version.
321
+
322
+ ---
323
+
324
+ ## CLI (Typer)
325
+ ```bash
326
+ agentgear --help
327
+ agentgear init-db
328
+ agentgear create-project --name "Demo"
329
+ agentgear create-token --project <project_id> --scopes runs.write prompts.read prompts.write tokens.manage
330
+ agentgear list-projects
331
+ agentgear demo-data
332
+ agentgear ui --host 0.0.0.0 --port 8000 --reload
333
+ ```
334
+
335
+ ---
336
+
337
+ ## Deployment
338
+
339
+ ### Postgres example
340
+ ```bash
341
+ export AGENTGEAR_DATABASE_URL="postgresql+psycopg://user:pass@host:5432/agentgear"
342
+ export AGENTGEAR_LOCAL_MODE=false
343
+ agentgear init-db
344
+ agentgear ui --host 0.0.0.0 --port 8000 --reload=false
345
+ ```
346
+
347
+ ### Production notes
348
+ - Use Postgres for durability and concurrency.
349
+ - Keep `AGENTGEAR_SECRET_KEY` secret.
350
+ - Issue per-project tokens with least-privilege scopes.
351
+ - Put FastAPI behind HTTPS + reverse proxy (nginx, Caddy, ALB).
352
+ - Restrict CORS to trusted origins.
353
+
354
+ ---
355
+
356
+ ## Data Model Overview
357
+ - `projects`: id, name, description, created_at
358
+ - `api_keys`: id, project_id, key_hash, scopes (JSON), revoked, last_used_at
359
+ - `prompts`: id, project_id, name, description
360
+ - `prompt_versions`: id, prompt_id, version, content, metadata
361
+ - `runs`: id, project_id, prompt_version_id, input/output, tokens, cost, latency, error, metadata
362
+ - `spans`: id, project_id, run_id, parent_id, name, timing, metadata
363
+
364
+ ---
365
+
366
+ ## Testing & Dev
367
+ - Lint (Python): `ruff check .`
368
+ - Tests (Python): `pytest`
369
+ - Frontend lint: `npm run lint --prefix frontend`
370
+ - Frontend test (placeholder): `npm run test --prefix frontend`
371
+
372
+ ---
373
+
374
+ ## Releasing to PyPI (manual)
375
+ ```bash
376
+ pip install build twine
377
+ python -m build
378
+ twine upload dist/*
379
+ ```
380
+
381
+ ---
382
+
383
+ ## Contributing
384
+ See `CONTRIBUTING.md` for setup, standards, and review process. PRs welcome!
385
+
386
+ ## License
387
+ Apache 2.0. See `LICENSE`.
@@ -0,0 +1,44 @@
1
+ agentgear/__init__.py,sha256=SlicrOaUJe-7CYCLB7gWEXyQjXly8Wt1dRVHhBVWbC0,528
2
+ agentgear/cli/__init__.py,sha256=23Mz_sVEtHKRAxopQaFKt6FYDaYj4ZG3S9ag1JIlIbA,14
3
+ agentgear/cli/main.py,sha256=Eb9b4w6hcjnuB6k9bq_1FOrEcYTZQMI30HjLi4eVE-Y,3614
4
+ agentgear/sdk/__init__.py,sha256=ckpPAp9juaaBBsLKTQa9D9NfyfgJ-2g3W1CLMkvk8tI,233
5
+ agentgear/sdk/client.py,sha256=X2dPBkVVi3dm9AFiFXtplGkYch2gExpttyqVL4bTsCA,9787
6
+ agentgear/sdk/decorators.py,sha256=kLTvVUcwO0gyk84qelI6Eg0l5N0NkCT3CHfXioOfWgY,1925
7
+ agentgear/sdk/prompt.py,sha256=uCxgK3tvG0K7-Jy1SBEjwF_2tByKZv1Bk_lu909SSZw,566
8
+ agentgear/sdk/trace.py,sha256=EE6RardRMlbuH4xtBQca30mgkFnYR4vQGEnebyiWgbw,1613
9
+ agentgear/sdk/integrations/openai.py,sha256=XBLF-O7LlxqDoSJl68rSPn5YHuW_t1DbWsspFBYVpdk,1620
10
+ agentgear/server/__init__.py,sha256=yFLFzdR3Pfw1wKCdFho_hzgCHpJ7Ydl0l9dWplWogFw,27
11
+ agentgear/server/app/__init__.py,sha256=z5a0mdZH4zxkNrPHTuZEyvw83ksZMtZLIBWRTyxoTQA,40
12
+ agentgear/server/app/auth.py,sha256=AX56w8NxD_RzOM-aNMwaFQDK5GVx_UFF5XIGHeWhlkQ,2861
13
+ agentgear/server/app/config.py,sha256=0juO0apw8Dy1pMSgcOP4OOPJIqU5WIa7bu0OGt84EqE,724
14
+ agentgear/server/app/db.py,sha256=7tilF_IdY3880l0wlBcSqtmwyRUjcFVD4Udwd-tCPQ0,997
15
+ agentgear/server/app/deps.py,sha256=Evo0Bht4UMV3OtL9KJ26Ec7fdgssF8v2_pvYDn-1ZlY,1852
16
+ agentgear/server/app/main.py,sha256=q32TkZXO0EVOJruMRETzJQ0hLj9SzKeKEebJ_GXQmy8,2871
17
+ agentgear/server/app/migrations.py,sha256=TBZFh1iyN8uqG7YnD6ZzIWngLycP3RJsNULz_HKlvfo,3866
18
+ agentgear/server/app/models.py,sha256=YWc5CPg9yiD8IAL4zHaSdfDXGnmZ-oAypxFP7TtdWJ8,14748
19
+ agentgear/server/app/schemas.py,sha256=XXLGhi5iZkHSP7Adt2N1DPH5lBWuiUUw2YVOja9KHCc,7912
20
+ agentgear/server/app/api/__init__.py,sha256=VEhPu4LDYQ2OdSfjeJe_DQ6EXwBYzggwm2YzUwSqZ-Y,21
21
+ agentgear/server/app/api/auth.py,sha256=Vvl4_BcO5pztZEBHEqjKeAbjBxdZyhkFrbthgIcM6ZM,6554
22
+ agentgear/server/app/api/datasets.py,sha256=cMFtTawQUy2vkwyNH3bicXPyhQEYc8yCDkZEw7FL2MU,6676
23
+ agentgear/server/app/api/evaluations.py,sha256=FqMMfxKHtoCtG7_k-j23WDLQerbD0frxvfN50bv5lR0,2523
24
+ agentgear/server/app/api/evaluators.py,sha256=u-2hRTDQqqk-uVNllXa_cf54U4DYWV-ny41w2hUaNM8,5569
25
+ agentgear/server/app/api/llm_models.py,sha256=-tiaTUB7IvWNttWGQpDiVfQcrcNpXwAzOb8r4kNYhsk,1233
26
+ agentgear/server/app/api/metrics.py,sha256=bVYvvc_Jh1yGKX5aAGXl0zukUiQXcV4K6z3E5flC2ls,758
27
+ agentgear/server/app/api/projects.py,sha256=MixIXD6zDrLKbpWinFKClWVc7F9cnNyNi5xlGsvPfbA,5284
28
+ agentgear/server/app/api/prompts.py,sha256=PQc5P2Rqb5qrql0xbwGKdA3ayzIQOvdeUAt50QPxI5Y,8370
29
+ agentgear/server/app/api/runs.py,sha256=dCHO-agw1oonFS9A1qSXdVjeGsXa47f6LzcE3zCPmEo,2965
30
+ agentgear/server/app/api/seed.py,sha256=gn892LVZ3kamb_91oM9KavogKP8kbInWqfQH7C4t-ik,3226
31
+ agentgear/server/app/api/settings.py,sha256=1mUyP3Y1I8P-qqUuxxWLTckdNrSVFaqlsuy9H-qR0Oc,4854
32
+ agentgear/server/app/api/spans.py,sha256=2Veuhi0d2E4d13kMOJcEg6COo7DHtpwU5QDsdzcN7EQ,2013
33
+ agentgear/server/app/api/tokens.py,sha256=_1crWZ1y2bb5xcJZ_-UJ_QgDggATGgYr6LNTXEgytrA,2284
34
+ agentgear/server/app/api/users.py,sha256=Az3nSePsYqHTgWXwqEhEHj2SY7QfheATf6dvrNQdRTY,4435
35
+ agentgear/server/app/utils/email.py,sha256=salIQywCLqP0xir6OyFIzc2xWW6cGPaCT1-ufanBAJY,1153
36
+ agentgear/server/app/utils/llm.py,sha256=NUqqoJoyHu0htxDeSdbN8nMKL3Dp2GE733ASXbYr6tw,984
37
+ agentgear/server/static/index.html,sha256=doABlC23jQ17y8z7rpvaWT1uR26J-p8MsUANE9Nlkm0,414
38
+ agentgear/server/static/assets/index-BAAzXAln.js,sha256=-5OIUZR2yvzib_u3ARf5GpwfVHFrVozxfNJeW8ImM3Q,519553
39
+ agentgear/server/static/assets/index-CE45MZx1.css,sha256=D8ICNwARvMeSTwXb-9QQ-taOPPxet9Rco4iPfsEwb8Y,33897
40
+ agentgear_ai-0.1.16.dist-info/METADATA,sha256=8WuqmblKW_4UKKkk5Y_2K4pQABITfrzdBBe6uOedZPU,12880
41
+ agentgear_ai-0.1.16.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
42
+ agentgear_ai-0.1.16.dist-info/entry_points.txt,sha256=EkJiwGkShhXu_chOdtu2Jg8ncGMKjxfgiN97KIOZZ6A,53
43
+ agentgear_ai-0.1.16.dist-info/licenses/LICENSE,sha256=iry4mKA3CGog4c_PnAy_eMmIHElC46j_uc9_gZsMU-c,11244
44
+ agentgear_ai-0.1.16.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ agentgear = agentgear.cli.main:app