From e279351e93ec5e34eace7e00a23da1b987cac281 Mon Sep 17 00:00:00 2001 From: Hemang Sarkar Date: Wed, 5 Feb 2025 19:31:45 +0100 Subject: [PATCH 1/8] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 75e581f..d1c4e6a 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ -# **Explorer Proxy** +# **Invariant Proxy** -Explorer Proxy is a lightweight Docker service that acts as an intermediary between AI Agents and LLM providers (such as OpenAI and Anthropic). It captures and forwards agent interactions to the [Invariant Explorer](https://explorer.invariantlabs.ai/), enabling seamless visualization and exploration of traces. +Invariant Proxy is a lightweight Docker service that acts as an intermediary between AI Agents and LLM providers (such as OpenAI and Anthropic). It captures and forwards agent interactions to the [Invariant Explorer](https://explorer.invariantlabs.ai/), enabling seamless debugging, visualization and exploration of traces. -## **Why Use Explorer Proxy?** +## **Why Use Invariant Proxy?** - ✅ **Intercept AI interactions** for better debugging and analysis. -- ✅ **Seamlessly forward API requests** to OpenAI, Anthropic, and other LLM providers. -- ✅ **Automatically store and organize traces** in Invariant Explorer. +- ✅ **Seamlessly forward API requests** to OpenAI, Anthropic, and other LLM providers (supports streaming responses too). +- ✅ **Automatically store and organize traces** in the Invariant Explorer. ## **Getting Started** -To integrate Explorer Proxy with your AI agent, you’ll need to modify how your client interacts with LLM providers. +To integrate the Proxy with your AI agent, you’ll need to modify how your client interacts with LLM providers. ### **🔹 OpenAI Integration** 1. **Get an API Key** From c4fe6ebae330f54e7ef400cf8e24650366e3688b Mon Sep 17 00:00:00 2001 From: Hemang Date: Wed, 5 Feb 2025 19:10:36 +0100 Subject: [PATCH 2/8] Initial test setup. --- .env | 12 +++++++- .gitignore | 1 + run.sh | 29 +++++++++++++++++++ tests/Dockerfile.test | 8 +++++ tests/open_ai/test_chat_without_tool_calls.py | 22 ++++++++++++++ tests/pytest.ini | 2 ++ tests/requirements.txt | 4 +++ tests/util.py | 29 +++++++++++++++++++ 8 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 tests/Dockerfile.test create mode 100644 tests/open_ai/test_chat_without_tool_calls.py create mode 100644 tests/pytest.ini create mode 100644 tests/requirements.txt create mode 100644 tests/util.py diff --git a/.env b/.env index 11b953d..6aaa6ca 100644 --- a/.env +++ b/.env @@ -1 +1,11 @@ -INVARIANT_API_URL=https://explorer.invariantlabs.ai \ No newline at end of file +INVARIANT_API_URL=https://explorer.invariantlabs.ai + +# For the testing stack only +# TODO: Check if these can be removed. +# Currently we rely on the `invariant explorer` command +# to setup a local instance of explorer to test the proxy. +# That requires these variables to be set in the .env file. +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_DB=invariantmonitor +POSTGRES_HOST=database \ No newline at end of file diff --git a/.gitignore b/.gitignore index da00cf7..3f5d309 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__/ .pytest_cache/ .py[oc] +data/ # Coverage and build artifacts .coverage diff --git a/run.sh b/run.sh index 1f50d77..ce3dfc3 100755 --- a/run.sh +++ b/run.sh @@ -20,6 +20,27 @@ down() { docker compose -f docker-compose.local.yml down } + +tests() { + # Run tests + pip install invariant-ai + invariant explorer up -d --build + + until curl -X GET -I http://127.0.0.1/api/v1 --fail --silent --output /dev/null; do + echo "Backend API not available yet - checking health..." + sleep 2 + done + + echo "Backend API is available. Running tests..." + + docker build -t 'explorer-proxy-test' -f ./tests/Dockerfile.test ./tests + + docker run \ + --mount type=bind,source=./tests,target=/tests \ + --network host \ + explorer-proxy-test $@ +} + # ----------------------------- # Command dispatcher # ----------------------------- @@ -36,4 +57,12 @@ case "$1" in "logs") docker compose -f docker-compose.local.yml logs -f ;; + "tests") + shift + tests $@ + ;; + *) + echo "Usage: $0 [up|build|down|logs|tests]" + exit 1 + ;; esac \ No newline at end of file diff --git a/tests/Dockerfile.test b/tests/Dockerfile.test new file mode 100644 index 0000000..54476b4 --- /dev/null +++ b/tests/Dockerfile.test @@ -0,0 +1,8 @@ +FROM mcr.microsoft.com/playwright/python:v1.50.0-noble + +RUN mkdir -p /tests +COPY ./requirements.txt /tests/requirements.txt +WORKDIR /tests +RUN pip install --no-cache-dir -r requirements.txt + +ENTRYPOINT ["pytest", "-s", "-vv"] \ No newline at end of file diff --git a/tests/open_ai/test_chat_without_tool_calls.py b/tests/open_ai/test_chat_without_tool_calls.py new file mode 100644 index 0000000..5f6c7b1 --- /dev/null +++ b/tests/open_ai/test_chat_without_tool_calls.py @@ -0,0 +1,22 @@ +"""Test the chat completions proxy calls without tool calling.""" + +import os + +# add tests folder (parent) to sys.path +import sys + +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from util import * # needed for pytest fixtures + +pytest_plugins = ("pytest_asyncio",) + + +async def test_hello_world(context, url): + """Demo test""" + response = await context.request.get( + f"{url}/api/v1/dataset/byuser/developer/Welcome-to-Explorer" + ) + dataset = await response.json() + assert dataset["name"] == "Welcome-to-Explorer" + assert dataset["user"]["username"] == "developer" diff --git a/tests/pytest.ini b/tests/pytest.ini new file mode 100644 index 0000000..d280de0 --- /dev/null +++ b/tests/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +asyncio_mode = auto \ No newline at end of file diff --git a/tests/requirements.txt b/tests/requirements.txt new file mode 100644 index 0000000..9160ba9 --- /dev/null +++ b/tests/requirements.txt @@ -0,0 +1,4 @@ +openai +pytest +pytest-asyncio +pytest-playwright \ No newline at end of file diff --git a/tests/util.py b/tests/util.py new file mode 100644 index 0000000..d8bfb23 --- /dev/null +++ b/tests/util.py @@ -0,0 +1,29 @@ +"""Util functions for tests""" + +import pytest +from playwright.async_api import async_playwright + + +@pytest.fixture +def url(): + return "http://127.0.0.1" + + +@pytest.fixture +async def playwright(scope="session"): + async with async_playwright() as playwright_instance: + yield playwright_instance + + +@pytest.fixture +async def browser(playwright, scope="session"): + browser = await playwright.firefox.launch(headless=True) + yield browser + await browser.close() + + +@pytest.fixture +async def context(browser): + context = await browser.new_context(ignore_https_errors=True) + yield context + await context.close() From 20ae6ab8f797c718281992628f7c5b881e7d5fa2 Mon Sep 17 00:00:00 2001 From: Hemang Date: Wed, 5 Feb 2025 19:35:17 +0100 Subject: [PATCH 3/8] Add flow diagram. --- README.md | 2 ++ resources/images/invariant-proxy-diagram.png | Bin 0 -> 50696 bytes 2 files changed, 2 insertions(+) create mode 100644 resources/images/invariant-proxy-diagram.png diff --git a/README.md b/README.md index d1c4e6a..7a935a8 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Invariant Proxy is a lightweight Docker service that acts as an intermediary between AI Agents and LLM providers (such as OpenAI and Anthropic). It captures and forwards agent interactions to the [Invariant Explorer](https://explorer.invariantlabs.ai/), enabling seamless debugging, visualization and exploration of traces. +[Invariant Proxy Diagram](resources/images/invariant-proxy-diagram.png) + ## **Why Use Invariant Proxy?** - ✅ **Intercept AI interactions** for better debugging and analysis. - ✅ **Seamlessly forward API requests** to OpenAI, Anthropic, and other LLM providers (supports streaming responses too). diff --git a/resources/images/invariant-proxy-diagram.png b/resources/images/invariant-proxy-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..266bcb2ebb703a784569dacdcdd9bfd1cd446acf GIT binary patch literal 50696 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

k_2CyH%<*Sod&nMdw4s&siSn$k9; zl4=U-z`L{s_&HA~zdhfJS6*TRyozmJ<<{jnU?f=hxhky_jzNj!5YJ{5)!g;48KDCE z2j?~h)gh!o*10v-0gB=`S3N*N8j1Je4_jvrP?}lH9;9)BH3BT#^IY-3x=J9aYyYkU zw6{-)gm`exT>+-xNdLv4xG!!n7xXZr>1&1%hKv=qCHthotTVE^580MJ!U~}IQdWK* zH9rm*2S0D{6n^;qerVSfv^T&vq2wyMT>i`8qw<wZ+KhvmP z_vRKdh0z7BJS0*t;6faj7*^i~2w>P9rN#C1!!KigXw zSoW5$OS^CqNih8tL(mYMuYJ~g0||<+fVMQLTNEkHB7u{0dq7!^Ibpym{t6I7r#=94 z24jadQCq9_I9NJEtgE*@fO|Sq`l+AkkexT|FloT!nY&Nw8nBPG@w7OZRm^El3S2${ zK0#oDl3vreeZkG?Y|y5I@}~EY(>TG)Kqawb_>49?DrH+r{XV6cRgE0hGY#vS*UY}F?!Ed!h!pZK-sWzz#xII?{4~AM? z^PXJZi_;0cR})d3t{8;1Pu$hv-;r;8{xbCA zl1#)lo@Be_@*~z|>b4+XohVLKphs6d1>+Fqh|$itA_#9AJV>_jI2!hXO0A;=JqP8I zp?zst^44%{BLs8ZSl2(U@p|sy4P>ZO2L}AumHtjpG9ukFh_gvUBf;;Wfkc}8Z^uY; zuXpB`u>ae3K!s+5SIFG*K_emnUuhoeQ7E0nD4ImPmAVao(;tI=M+$OZURVE2jRChu z7LLL-_+tl}vv^s|h;YM)U|VMHJgF#UL}9K}JTv;k+KS3oJny5O<2&IOpq=F*z_Vxt zci^X(ADiEN5R;U(Eg?w1A36(b!)NeA%BwJU`qx#OA!hQ|8vO#@Pth2c*wJb1WUc}_ zueY4FRTx<3z%jPK_B7%u=rvRAYV4(;pKll6>%J9l@0t)9f-ijLCpuf7&n+<^gxUt2 zae_|~L#}?HQ5vk1n;3iahwy&JhJyV-DA->zB;bOg0g6Fvn7-#j%x|Y#F1Sp?mws-i@j#tZ9d6+!Esryyl)Vx_o3;MS;=c-?l6OR}^tS zF<<-0@~ztaJ>h!3e4Mg=Zjv$4{PSaM5tC~DQROs# zuDRo;Ha@8&#Tw1tz94hHM8P(&D0sdz@#1d$?anv7;UCg(4bl=;-kz)Qd7UnNOvaGd z*t`b}$!nq#d*S4F?!~Xx@C){}T#gOpM-99mZ@mo{sr1=IU5+e(hbhkA_;^fcXlT>6 zjNsEvMDV$FO6X{(PvaN04?B(`XZ+Mv@jDo74LZ2wHSv5zvG;sZIB@dFcFpMSbpatE>A2?>mu*TZ9DM$RNa5NM?KQR?KE1y*OfeWxN?%{gY z#j70}S4&6g1Oygc)R|y(EN4dCLJfX&Ovz?eAkq`@_of$1!eG-s@=@a-a?|munCN|X zKl`k0X?<%Xzw>SSST)sHtB+HTZ}b1(97gMQR1$7@GE|E@Kn zuGUrb-D{}=NSwyGXb?V602NB5L3?Py%HVdO1_8H~#;iwMvq=gZP4p}98*ZlB2xWv} zNZ({mz4Zr+oCK3e#AGMpezSUmSKK zNsR{%>y)m5TRy>}I53yHJ)Dpun}FEqMZuCVC3k4Kl6QnOd`#eL&Kq!&N4g1uNZx)j zl^-_=?fnyuV$A^ZD)ROIv=r!cDJYKUyMQn72SJ8Z=boDC;ygIb3=01sG>iH0cjSN3 z6{`!-oypd@TM$h2dpb(vCO15AF%M}{+yPpD8z6+Cn5)w9i@Pzo^D(LG0fMg zylf;k$ev3@DvDOyqu*kFiIuTAUthj6{*H?#&a!E{{wGQ4B%I3lMv*yryJeKUDJz}J zQcd-ZNl@wuX`yfwF%L^2mSY^wSUf{d;G@i6u>Jg}D3VcRqyZa=FZ9Up!a(QG14;Dz zt{CbOpdZ3%@5U5vXq_(L^O?--cx-s&B91`irv<0kD-H?K>pG?j+M8xE>2$=x5WBKD zK!mM=D`BW3{%FUWw0%v(@fi`lx0JEjbH+HL_Gv7|U>b4Ei8=NcZP-)@*A#*Us}ZHX zC}&x(wmDxXvD3DZaIu&*_)QAyP_$f~?P(voA~Jwg3UZ*(z%x5%TI__ib-xk;hhrld~9}6Z#OeCgPf?|A08F%P>UkcBQ@qvbrXjWZkHJ`Lk1kAb(yz_?4 zyoZR{;F%bQeI`z2)(}SFjiN*f2lM3Y>SQY}5QCiT_)q^Aj|2CGFhq=%Ve+9YHp7mF z^@`k2a7ez$>s68J{s#+uvY9H-p3oj!EC%)jR38(8AvZnOiV1CIB0F7~kgT%fMysiE zPK(h3>E>@XIfSGjdJ_r_>?Hprn5s>LegM)*!uspoWEC!=GGUrUz`%$q96-dP!eLY| z4i|OIVKmNuOc_nO`$G^hqLh-zccgD$!20iM_jd`gXPg&8H`3(UEl1PhV(MEmQw9)s zs~|OEusijmIBZPZRE24$q06kjR1Q|z^?+7I7u?(IiczNV4got!t7x^h$JRtcp-?*r zv|mM0#{|Lf=@NFT)v`l&AW)QgyRFsHdtH5SLo+A?_S-Zg`3b7WNVvYj6=|CdFY2at z_O>WKJR`z{&-r6lOzGHTuK~7+W3GOfrec1fZ-2S-WQV-{UTfj@3-xn}E(4d$2zrAmpGSpR}j(CVD{dB6K@NftS$qL}%c1<)x=Ju9ZBMeCwhc#8RAboML z@as5Em<~&k^Fu7xyD&H!MMRiB=j`KOnz7>N$=nIdA6NyBwcd3S{1D zJ0K?PsDwX28G;!gfL7DLn%-GSwl!%-&A^q3cDUG@g^R;e>8@LE{ z?CjoVO^eWAiczZNgY59W`rCpl@pm2ZiY!Ey6pTqj9KJ%P0Zn+@3nSZ-R{rQGT`__ytA|7ing@C$s~$t z_7f-VT%y{bakb0wx_^2bV{tYvR4meikr8cW*Ws5B{bO^18`XtjRcpFp(X~1ybc@za zkWxgv9RHbTq9!jn$*M3MLXeS+KF75#8y}GUQKw}3UF+6HD$>cWlBO;7{-n2pR4*ts@HX(ScWqU{6bBd zJt-J4hY?Wh0ltLG3;yN9$18&8E`a@WT!J?ozmM=#>ZatxHE{MkaXn15_1#gdP0J78 z18u|=mh;4tgV9GaZLpv~Dh;TWjX{ z{9Y11=9zy583jS`A_N>2=)V5?Woow8@hh-CE%`;%-VN!FD}l$61SNY%&T|gDsBbjD z{!AfX44sb#sB1mV&vvJ_0OA$mGC5`{l}2UByR>_v^6d)LyFv}D=Nc8nbIO&1Bk$;& zIxa@?qSmn#AfKwM^8}c{l3X{H2DhJh&Jot8yz?MqpJbqU6soD3* zcgFV$$(#&S?4H+W5l&EzcMHt$YaqClR4sYA=nb3QM1oo)zg76XI5gV|wD(q?^nr0M z+5<>mWG!X-8R$~8*h|7bB+Ru%DHhmvLq9EfpAhkU)UYFbtDM~GwZ35Jj1mpHwoyab zQ|ADIfe11o{*IhUlDCa60Kq9`#4G$}KmYD>UJYukoUVt9oHnyH1vP*03dGe5 z4#QVGK@s{{s+Dpmban#(SFg>nD8$}AeW}H9Y)b|a9S-AdDT6~b@V|q5;q{)wv_BQ| zvFdo<;oNF>oZr@DnW31g@!N0T{{C6OlD2j0)%NAGB;hnu%;x7=p=e_t^6sJ(V))J; z;hp^s`2A6CU(i|Z7m{Cn;jz`_y(!HM*6T>|N}_J@iRbc)x)2sNPACs?5CoE3^X0aX zvNs)N;A!lm%rrAYmvWB*S&1Tt&&SlwWP!dTKQOdu_9PupcVM-){_~5Y73$|r=)7+z zBU$%=Uxp5EwMzaQG=!5tVw>Q17S79;LXk`YYjYv+$SI)HpIQj1>-1oj*w-G;Y&b0M z<60nC?ks+V?f?#=PF$(CT6dN-%`Q8Xe92|qDOy=@PB z+PQxTEbj<*I;KpkGbF`*)R>8aA5oMCQ&HqVC}x3h#GnXgD)9Zl`o;@553QFSBBs0Y z+*3K)LrqCo*$Ck>Pt32VkXt?KvC$55DSy6~oyIy~Rdcyj&7*spZcYHUeBgQ3C`vO3 znRQ{lK@=5-Rl;aPjW8_}z(Ry#M-s3{uG>{Ug|<>IoPy4f;@T0CR~iE!?UU^^W4_vzLxK$)j*7hzxu#%Xb#$uE(<6=1mr9B#^RVxmm}aA5>Y;}^)!qK#Q0_1k7~ z#=bc0jwI(kD6O#RWwT8ZJPU@0gINv=L<>SA#*ZQYKaP!1FiyB(a@F=}dF$-EX~cta z$G(2v2vtfd6hs*3S-zCR5CspayFiZDCq8qw;;{GRbcul!8c-mx$Qzr3GlWUadlDRY z-moDQvoCsu5fKb8u$V&=!_r2nbM*AdfygepR@1D-ABl}68?p1(_nEj!d#T`<*!D}Lzjqu%-oo!A zO22;c8n~D2q97`ti7G|-rd5QeBp$CnRc>q!N(kY{Pg383L1I;)dfxl_1%`;|3X_D( z?FTv{UQ-{%9{(nAj*|`%X0x*LZ5Mo1lgh$Hn4&d7X>_2p`w|n**+v5 zUUuRYr&Rb|TpLZ+xdjE4#QpR^Humr#*mfP>mDJ90E@q1PFD{O&9;C|c&b=F3iJ?m3PFva>@52GQ^$0P zXPIX7<)^9jV7HNmNn;^mMYb%m+Lcuy_7?ytTO%U-Nsd){kUai1q?9bEH#c+-LOE=5pE!|ML+67{vf_-bfk7E{F z+z)98zvG8ZFynBYwA`{u9!SH^d|Q``(1Kpd$r$YMp4)Z%lg1zq`)V*o%%t%S2>Y>l zQkMohQxrYl;k1if?jW|+G1N+>;I}Z1H zu^Ij9C*-sb%^*obHet;-&DAP7y`r8pgy-73e}|HubcRV2mgbGZx!r<*wFg z_S;zO8OuMdOuy3i6b~(&2o%D!2@g^%!p}bqKd1mfk0&^bPmlhZL;E5c4!xh*BV~2; zcM3{@fz9JnkB1%=e=rWpKt$Ynkuzn7_Ix7Pfy}#-T-jVYfhsL8F|c)}>$)m@i338y zrsY8>WwRVf_ZTTYU073G%&9VKoL;Q{C8ly#OfeqGDoDOt!I%X`xM#N|{M9qA6)KBvgoyC0mx3BU((&mn=!Al(LK>BZDYg6Cq`Z zb3b#w?{u!~{C)mA{&KzZzR%px{oHfEzk7LpkE2#oY)E3qMvpTdn#%jzR1egB5)8}; z_jMCRsW$yQ+KtqdMg%QssuA~MqlajAIr)liCPkefpQ@n}B$DV9p)J7B3XEYgtu9|F z^nyv>$6bsi==t-2<~FIjT5JU5yk9oOnc&+jQ=q6lK2?r^D}^vs{k0YKm)TO~2BZWl zt3J+W`Hi6;FOs(55>7L>e_wjKjOi#E#~H?gRd;Y;`D|hlD1;Q;TI+%iKyz~p+zEWIn z_9BcHY$NSp*UxW7&ksi<85qYs8>k`MN z9`HM@z~`0;hlgOclMpU&(zpdMh=p#RdxqYAjt`#CmEMHD)X)emsN2XBeVlmq%Z51_ zPM}{$+gl_sm;!B8AUPQXwkKUTAwQ$lcyIz0^7uvIZ#=;(^D+fzT}cv_so6i3Xk85t zZWqJ7d{;0+Z$Sb?H+``nNkUw6v@{E(-J7e7*oV?UF?2aYtc(B2g~sA?10Kvt^E{SSM^z~mY;+Zf z9~Nqr2`N-Pki^2oQQ=xXYnRwtW6%T-W}ebIVZ2*Hwdv;P&w->F<^z^jHh>Xt5Px!v zNdRS%L6TtKI1P%!%mcB%dx;=1_|=j@uRo-g<+-=Fcd;jhhiA$yLHtS(U-(f-1CbJB z2RuI2Eiy_!KY2vl;}I;Y3(S0zXUii7{F1NVE2|b4cC=3(I|lcLf%yFTj%HX4EtP>1 z_o;^CRi>}AEKIebBx~gL8Zw(aM7d*JG5W+iejFMCmO?q#i{4k4bUSpuK<6i|9FB5dzE9SQ)M9 zyZfJ;5$5>bh`TpeMD+zB6Z6PL=G1rSeOt}~x?vYooleW|*{?IR18W}e9(#JYgB!@F z6~qrM83CFRD#BeSp^!Hm&fU6dqP40d^Wsm?n5v-(tV2>s|9jASwCqId%~$rd1I-0$ z3ExrgBBVl-QK}qRY;PALs%9l^O9JbYX|6Lmj`Y=6ptYhRPV5#GE|kLFTte97=Ly8% z3=yfRi2ho8E`Io3Gp*_77 z!LXX<+(}P}B3ckva)R~rKnO%)Ma8A%_#?oUP6rr8ALJE@D5XX0SX3)v z3J@_>o$zbQ+fefb$g*y9v{v2^?3A2}ME*?`>K7@G>x?%`s19V30<&LI2yxi8_{tuo zKqsgv94nld9gVS}EZoi5fNG$cA9|qq!o_B$y>Z_tI+ryZc5?plbOwmW_7R^Vp1#_i zT&v>{rx3|kRySMPSx(}hw-Ivk!W3cg|$yWi-ML>%OB=1D)jE^+DLW69q|Y*O|l z6oP52^46lx4PMV(()b0)>~E_mz1sg{w8wvTiArrIqdRC+Wx?zSv=v*eZkKAa#^r#!})L9ZaD?AhIiR1-q|$|EKS#- z`(p+3t%Vw!Muektc@VZPNU)(YAr&f*+IIFe*yEMgPc&f+Dq?6ppMi}C_f(=;j2G2< zIcMTZ*X(j&)jsHdXG0!tA8~|4h^+2?rx%S#6){TOuJEvFSgWkLnXdV35Kfb$qCyW0 zI@>#8tWg4?3R+BNiIPt|F-q$$#{Pjg@7Us!AHE|yEwCZJ&b6`8g#ZFPPbD1;B=Fgo zHu}M5Q^D&FYA{)#1FqD`VUKMWqFtU}ws!uwH--fbEf=*zv%+{R#wCja#@Gu3vbq>q z=XzGZN%JT)9N@R4(^B)r$=K&%A77@@p^_fQDWDMUB*MV#!*)qMy~T*G{m9CrDtC&Z`-~_--K;Q z!g!eFOT9|2ty@=ntfbIJMXn};ygJDH3a~Pl+|zD zyaF4$BeB$h5IwGBzn19X)ww6IIvRcy+}^1i$o}jA;d27klhu__alFbW>$2ZGm z1xeW*&yTpvn6se0a&vo|f3?_B={-lpZ>PLQZ8ND5w-U4VR>T{_C=Ay^MZ3G(EGAuL zK_Ncqa%7#jN)#eCjPC0uY>p29IenIfJ1@47pYL$t!{wW|g6!1u3-476!k;12em=fl zWZD!k?H8@bj)2}>?d=M7SOk)UQp)p3@8btu?H7B)=>Xr~tzF?n6ub|3`mJ;pCwuY` z5YW36t~oGh6aQ+x>&9tt$JpTIE=`?T519*^YsxV@iKCrsb(gQJzh8#v2p4C3z>eUt znbEuil(Ajra7HIWgmElWzhzjfDap$4(#HgxK!H);Ea+1gN)GBTJR7zG{=frPnPwdA zP~#HapdzR%8yd(rAJI4(4$>xpGdk~U)Q^WGa4J9{_n=Rurot;$$;73w5|05(NSo!j z0~EsQ0nS)dT~S@a8V^|74{%5wrNy0EkCwtP?tppB7WjR!Y^i!^dQR;UlqNwXn|yjL zj=?Z%0QJOwt)J=m|JVL6m5f>mGp$)CvFlDS_G?cuzsRoiDkmTeXSDO)vg5(QwxY1b z2^Pk_*uoDMW(BOTTTOaBRbA;J;X?9%FWY5Uw($;oO`83sKN}f{0HS&og&P1*tri~> zIPYEKaPzU_=Y2ytegiAR%CT}zKAq4-aVu;wQ4;>wR`nrg#-4dNGTbEVwuEnJmmI+d zaEpsbxs+eih)~&j@dh&teRXQlkKD+}t3S*_q`{u7!Fi3*7y9Xg^U7d9x%&F?m36zB z)(&6WeD5&9_MEy;gXrP%XhL&jw%3rR>A|Os08f@wf4gNDZu5JTgpuo-+5pE3WB#lB z0OzY;0b_kP89WJtE6Dm%4ZZvl=nBzy>t*D8BO5#yD@9I#r9##ZP|O>#7i3X~2Z#sb zFWYnwkhsaNuKN&3h%Sh_KV;w{7B>|OlL2}D^~pE-EFSvi~IyN#X!XwUmAH if>g_|TMywz=f$cG-qp7!oHY=GKW7K3eW|Ta Date: Wed, 5 Feb 2025 19:35:49 +0100 Subject: [PATCH 4/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a935a8..1cf390d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Invariant Proxy is a lightweight Docker service that acts as an intermediary between AI Agents and LLM providers (such as OpenAI and Anthropic). It captures and forwards agent interactions to the [Invariant Explorer](https://explorer.invariantlabs.ai/), enabling seamless debugging, visualization and exploration of traces. -[Invariant Proxy Diagram](resources/images/invariant-proxy-diagram.png) +![Invariant Proxy Diagram](resources/images/invariant-proxy-diagram.png) ## **Why Use Invariant Proxy?** - ✅ **Intercept AI interactions** for better debugging and analysis. From 1303be8435d6918372b6fbfc4fa45883a64ebf7c Mon Sep 17 00:00:00 2001 From: Hemang Sarkar Date: Thu, 6 Feb 2025 11:25:16 +0100 Subject: [PATCH 5/8] Add files via upload --- resources/images/invariant-proxy.png | Bin 0 -> 53840 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/images/invariant-proxy.png diff --git a/resources/images/invariant-proxy.png b/resources/images/invariant-proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..9dfb2471de28169feabab3241507b2cb675c9f82 GIT binary patch literal 53840 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 literal 0 HcmV?d00001 From 9ca14ca0ce138fbed4ee1a390370512676828d90 Mon Sep 17 00:00:00 2001 From: Hemang Sarkar Date: Thu, 6 Feb 2025 11:25:33 +0100 Subject: [PATCH 6/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cf390d..3399c6f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Invariant Proxy is a lightweight Docker service that acts as an intermediary between AI Agents and LLM providers (such as OpenAI and Anthropic). It captures and forwards agent interactions to the [Invariant Explorer](https://explorer.invariantlabs.ai/), enabling seamless debugging, visualization and exploration of traces. -![Invariant Proxy Diagram](resources/images/invariant-proxy-diagram.png) +![Invariant Proxy Diagram](resources/images/invariant-proxy.png) ## **Why Use Invariant Proxy?** - ✅ **Intercept AI interactions** for better debugging and analysis. From ab7b32db40b8f571567ad41dd3ca500b83b78eb5 Mon Sep 17 00:00:00 2001 From: Hemang Date: Thu, 6 Feb 2025 11:26:23 +0100 Subject: [PATCH 7/8] Remove unused image. --- resources/images/invariant-proxy-diagram.png | Bin 50696 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/images/invariant-proxy-diagram.png diff --git a/resources/images/invariant-proxy-diagram.png b/resources/images/invariant-proxy-diagram.png deleted file mode 100644 index 266bcb2ebb703a784569dacdcdd9bfd1cd446acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50696 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

k_2CyH%<*Sod&nMdw4s&siSn$k9; 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 if>g_|TMywz=f$cG-qp7!oHY=GKW7K3eW|Ta Date: Thu, 6 Feb 2025 11:27:17 +0100 Subject: [PATCH 8/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3399c6f..345db79 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Invariant Proxy is a lightweight Docker service that acts as an intermediary bet ## **Why Use Invariant Proxy?** - ✅ **Intercept AI interactions** for better debugging and analysis. -- ✅ **Seamlessly forward API requests** to OpenAI, Anthropic, and other LLM providers (supports streaming responses too). +- ✅ **Seamlessly forward API requests** to OpenAI, Anthropic, and other LLM providers (**supports streaming responses too**). - ✅ **Automatically store and organize traces** in the Invariant Explorer. ## **Getting Started**