From e2eec8f23858a7b36cac1d3e16b659628beca53f Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Mon, 18 Mar 2024 17:20:15 +0100 Subject: [PATCH 01/47] gtag --- website/README.md | 41 ---------------------------- website/docs/Basics/Installation.md | 1 - website/docs/Basics/Introduction.mdx | 2 ++ website/docs/Basics/Quickstart.md | 1 + website/docusaurus.config.js | 8 ++++++ 5 files changed, 11 insertions(+), 42 deletions(-) delete mode 100644 website/README.md diff --git a/website/README.md b/website/README.md deleted file mode 100644 index 0c6c2c27..00000000 --- a/website/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Website - -This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. - -### Installation - -``` -$ yarn -``` - -### Local Development - -``` -$ yarn start -``` - -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. - -### Build - -``` -$ yarn build -``` - -This command generates static content into the `build` directory and can be served using any static contents hosting service. - -### Deployment - -Using SSH: - -``` -$ USE_SSH=true yarn deploy -``` - -Not using SSH: - -``` -$ GIT_USER= yarn deploy -``` - -If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/website/docs/Basics/Installation.md b/website/docs/Basics/Installation.md index 4bc5ae46..d183d3ec 100644 --- a/website/docs/Basics/Installation.md +++ b/website/docs/Basics/Installation.md @@ -2,7 +2,6 @@ sidebar_position: 2 --- - # Setup ## Install diff --git a/website/docs/Basics/Introduction.mdx b/website/docs/Basics/Introduction.mdx index b79bb85e..f45713c0 100644 --- a/website/docs/Basics/Introduction.mdx +++ b/website/docs/Basics/Introduction.mdx @@ -3,6 +3,8 @@ sidebar_position: 1 slug: / --- + + # Introduction
diff --git a/website/docs/Basics/Quickstart.md b/website/docs/Basics/Quickstart.md index 34ce6c8d..cdf15c94 100644 --- a/website/docs/Basics/Quickstart.md +++ b/website/docs/Basics/Quickstart.md @@ -3,6 +3,7 @@ sidebar_position: 2 --- + # Deployment Guide ## Run an Example AI Sales agent diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index ddb237f1..22e6843d 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -58,6 +58,13 @@ const config = { theme: { customCss: './src/css/custom.css', }, + gtag: { + trackingID: 'G-EP3BJCDSBW', + anonymizeIP: true, + }, + googleTagManager: { + containerId: 'GTM-W7H24KQZ', + }, }), ], ], @@ -143,3 +150,4 @@ const config = { }; export default config; + From 8649ddf5e1164dffe18665818d26e196b021e654 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Mon, 18 Mar 2024 19:40:24 +0100 Subject: [PATCH 02/47] api gtag --- .../_build/doctrees/environment.pickle | Bin 444039 -> 425336 bytes api-website/_build/doctrees/index.doctree | Bin 6087 -> 6097 bytes .../_build/doctrees/salesgpt/modules.doctree | Bin 2779 -> 2789 bytes .../doctrees/salesgpt/salesgpt.agents.doctree | Bin 126469 -> 126693 bytes .../doctrees/salesgpt/salesgpt.chains.doctree | Bin 81189 -> 68767 bytes .../_build/doctrees/salesgpt/salesgpt.doctree | Bin 3961 -> 3971 bytes .../doctrees/salesgpt/salesgpt.logger.doctree | Bin 10596 -> 10606 bytes .../salesgpt/salesgpt.parsers.doctree | Bin 16765 -> 16775 bytes .../salesgpt/salesgpt.prompts.doctree | Bin 2841 -> 2851 bytes .../salesgpt/salesgpt.prompts_cn.doctree | Bin 2870 -> 2880 bytes .../salesgpt/salesgpt.salesgptapi.doctree | Bin 10627 -> 13861 bytes .../doctrees/salesgpt/salesgpt.stages.doctree | Bin 2832 -> 2842 bytes .../salesgpt/salesgpt.templates.doctree | Bin 26036 -> 22976 bytes .../doctrees/salesgpt/salesgpt.tools.doctree | Bin 8151 -> 8161 bytes .../salesgpt/salesgpt.version.doctree | Bin 3085 -> 3095 bytes api-website/_build/html/.buildinfo | 2 +- api-website/_build/html/_static/pygments.css | 1 + api-website/_build/html/genindex.html | 17 ++++++++- api-website/_build/html/index.html | 15 ++++++-- api-website/_build/html/objects.inv | Bin 1065 -> 1085 bytes api-website/_build/html/py-modindex.html | 11 +++++- api-website/_build/html/salesgpt/modules.html | 15 ++++++-- .../_build/html/salesgpt/salesgpt.agents.html | 21 +++++++---- .../_build/html/salesgpt/salesgpt.chains.html | 19 +++++++--- .../_build/html/salesgpt/salesgpt.html | 17 +++++++-- .../_build/html/salesgpt/salesgpt.logger.html | 15 ++++++-- .../html/salesgpt/salesgpt.parsers.html | 15 ++++++-- .../html/salesgpt/salesgpt.prompts.html | 15 ++++++-- .../html/salesgpt/salesgpt.prompts_cn.html | 15 ++++++-- .../html/salesgpt/salesgpt.salesgptapi.html | 33 ++++++++++++++---- .../_build/html/salesgpt/salesgpt.stages.html | 15 ++++++-- .../html/salesgpt/salesgpt.templates.html | 17 ++++++--- .../_build/html/salesgpt/salesgpt.tools.html | 15 ++++++-- .../html/salesgpt/salesgpt.version.html | 15 ++++++-- api-website/_build/html/search.html | 11 +++++- api-website/_build/html/searchindex.js | 2 +- api-website/conf.py | 4 ++- 37 files changed, 233 insertions(+), 57 deletions(-) diff --git a/api-website/_build/doctrees/environment.pickle b/api-website/_build/doctrees/environment.pickle index 6976cd9b9f1829d12ec806d093dc5fa36280ae4b..c100d5a63a0d676f6c775ba0ad49c6ffa56205be 100644 GIT binary patch literal 425336 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 tsaQ*}@`|Y1 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 diff --git a/api-website/_build/doctrees/salesgpt/salesgpt.chains.doctree b/api-website/_build/doctrees/salesgpt/salesgpt.chains.doctree index 0f6684286d94bbd00eb3ea6b2131bf8c8e29b409..f374483cc6fa9ff23dd9fbfed359e14ec4df65e1 100644 GIT binary patch delta 6960 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 delta 9182 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 Kn9Z-$s~7<>YZC$h delta 32 ocmaDC^dyL-fpu!+MwUs6n-?g~W@P-c*+w~ph0$sAMD@Fj0NOVUSpWb4 diff --git a/api-website/_build/doctrees/salesgpt/salesgpt.parsers.doctree b/api-website/_build/doctrees/salesgpt/salesgpt.parsers.doctree index f1162b09174a7dd3601d5abd9c81aec802afeda8..1f3e8fd24d75b1d35f3f55f093ad0c4885931f65 100644 GIT binary patch delta 59 zcmey{#Ms`<$kM<%wPqvBR7T*qA=?u-d7^aO=AZU`i~w+i B52^qF diff --git a/api-website/_build/doctrees/salesgpt/salesgpt.prompts.doctree b/api-website/_build/doctrees/salesgpt/salesgpt.prompts.doctree index 5d54dcf7ccabda79a9862f4bd6bf54a8d991353d..cc012b8554c1f974334992a00ab68150ba3c544f 100644 GIT binary patch delta 43 zcmbO!wpfg%fpx0HMwWbLt{%4h(vpJGk|}T4 delta 40 wcmX>gwoQzsfpx0(MwT|_%~P0XGcx9GHehvSVcnb|+mkXmmr-}~a?Y8I01UXFJ_<})0d?KchsISIz?*2`;sFjDkd+zzY z_nhyZGiQdbPnOP?UUF{!xO9)q4#S|_(SBeisc!H`l@lYeWOO8voQdhZ{)t$^Kj81` z+~7~@>PR9UpVS9PF?~f|FSD0mSZ?~ChEn-mslNVob!IfKtG)hFbcqqrXZm5~QMuMa z-VLpM*w7p)+Q6YTw^&ztZS|0B>*~x&q%N4QeFvVbvF@&3elnpE(r$!L8z+sBR+_5J z%X7vi&Ra%C&Ba?J2-rL@Uul^A)hM{z zma)BDyNLy0(C&lBwcoR2@Wt9IYzB_h?PhPl2X$^~KBM+)UAX#9457LBoQR~rRl5^< z>U-GRaJ;@BEf?w+&~nh;TsK9E9)6Afyn7hhMB%LcQx=5*$E@^u#$&|oWw+pW$GaAh z#0w2!=^jbC*&;k?2ucrV1vmiptwFNlQ^4EQ|I;%o}I&{wKFKFSlb zQ>ww;w5=FZ^`p5xXwK7^wMWhck-N4U|By1N>bv$G*tTzX$5=cBf4chER@mt7V|@^H zUt~2f?QvM&&qILr_AO?#S+!(TiH%Ierjm&q-j?wS5P2CLd*ByqgS1~Jysu|~t~Ol3Bf@_CmjJ(*Zx~^Xs$( zXnBv8raaY*)H%LhtSw?~6>CteA+d&OrHk$rH>BtB$hotsXDmLVCuUS73L9M=AUT>E z^BhAfizEz%jN0+c^pe^fk>zN}8ejB0?+$6N<{{AaT7PpwJ(1}32Niubb`*Y)+r5G^ zb%Q&2q)fUanl}RXZ0p(AqGFG$8l*c^vDUIf82Gjfe>hI=Fr7;jMmwJmS80-Enxu(S zz{5}Iz3;i(`LO&xlCb1{z?MYZ8+IFZBx?nKg#6^FfC(}xb`dy=%vONoCfck59H+(+ zaVh&#vuJREnFDC24@L9k;RK`FJv&u$xz*5%@- zVQ}1QzIw3*W`G7|$OMm?Vx3$MS}7=iWs^nBIUE_bPP~2wsHrpXmqTw|=`VxGYk5RU zcnn}JPaZx6AACExEAB0A$Xqpi-2awKad8Z}a5jx2J28I+O2LJ#7 delta 1163 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 DV%84j delta 36 scmbO((JR5yz&e#_BTF*N=0cX)jEr@gdD&c97>`U2WJ=w + + + + Index — SalesGPT documentation - + @@ -157,6 +166,8 @@

D

@@ -203,6 +214,10 @@

H

I

+
  • input_keys (salesgpt.agents.SalesGPT property)
  • diff --git a/api-website/_build/html/index.html b/api-website/_build/html/index.html index d31ab981..9a74ccae 100644 --- a/api-website/_build/html/index.html +++ b/api-website/_build/html/index.html @@ -1,11 +1,20 @@ - - + + + + + + Welcome to SalesGPT’s documentation! — SalesGPT documentation - + diff --git a/api-website/_build/html/objects.inv b/api-website/_build/html/objects.inv index a4dcd25e0084ada1bc9b2747781c8dba6fb81876..1a139297b8abc2db2a8479041eae6b8334fb02f9 100644 GIT binary patch delta 978 zcmV;@11c?zobx@mjuty;C!O0721rs@$9dy=5V2Jy39_te+u z>-9;B!S*_F05>6*l^15d0cMyPq6h=E6B>!;L&ZzO0KG%18+_Y;Ecd!%ul@YZ8+5Z6 zCddwItrFT^CyfKQ_pqz7v){<_FhCJw+RB#3C6JZAOuD5;ysfcsio+{0~&#r+N zMhdRrT6m@HG%jhOuWNyp*W&9&WIY`tr5(Z3J!CXef(BXHYZNe(Dx1 zu;v%Y{KuRzaTo280i4$}*TJIrq0E$ns_u79`v;f4FnF?v38ZdOmyTW5dl ze4S&p6W+xuWqh{-nQ)L73OlHqU(*UcQ>HyHyv;E#&RK2;Tx4@8p0+&vveB)ni`Lcu z#}Y&;8zhO7>ZHO))e8)P$M0QrTDkG~xgEg&gSsRX3kh5LoW99t+t`7|TP`c2v5hn> zjXPtNaDUy|=G^qP;5HjV?7~p`j9t=p<*5n}J&18vFFGRxZHT-RNg7*MEI$5)QT_GiUIZKBXm2HiMmBEFIuE zjJ1EU&DdRSy})4agqX9P&9I~0bXz_KShPZqa3?qlv=MmvK0OQBc7?4@e1DzPWQX=j z(z=9aq;&a#kqt0(^B(o1P8{8}pNkiug4_3!=BU5>e}Df`$V!^ZUV7KH zzJFR+yC;l^=BA(Uv~PYJ-t1^Lp|)yl?AM3d!$J5htMU4e=RBn!T};mKr0&7**TXOp zqHvqu^0TijEb7;J#aplE>W(ny7}^ zU279(k2)JPQBASierFE8Z+FlsK+wpz4@-(#Ij)%KBqD6bm(;k4mx_vx6@%cHG8<(d zCT?^>J#4|H;y8Usn&?O^NbU1!lsitRXrkJ)fyiQin6>aCFrNEciL<0 z_4Xu_CEIc0NJGmB_rBSCBFB@7$iInIj0t-=QBqNmClY!c@{C`pyD>(&KunNBxYKsLZ zQ75BI1w0k3IVq`Xywb9$K-%CCr9`pP3eun}Qo+d?YlVs;HY z*Mc(%*TPF>wsBr$>be$+{91ff^Q7LRrs8dN zNtz?3t0+aqwSU6TP}{f31>+!8eHrt)Vy_f(lW{AO^wpRK12lDoVp^qlLDNDCc)4b7 z*$r%0F}y*hO$AKo7Kh(EzE%KE-UR!u zjdhCCj(8WJl(NkRL?l2?$RD6~e_539P*CM~{%a0#Va{yb;{un9@s#1=-9^{B%9>EW zkHv|QCP^ZmYNhIC}4V^6j_&Fy;FZ+q}}P-mpTT)?_`i@)TvZEQf{H4`OK*kqa# z+WJ^VLVtI*IlFx=xTyxKlfDK57R}2}*N3{iy(u}Nj)yo&g@_} zqJK88P3~9w+Px#(mF4jKhkK6FtxiThJgU3*$KQS#agsfoDm3wp@L|?q%twcc?ywWz z=otnN##3~t=mobET@XAN=g^^|7u=0{LGrNmqming-OdGJ_FybPBh?tY85T~#ce4UI z2Jjjg4iP~shaD3gMfmNwmKrv(>!|2Z(Kid;wb>whzi^`?>V6Bh6o=`3(L@JoUTRlQ ggWO>`MI+UY4Mb$y{i@~GoZiCi&znN=A8kR*LWm9FWdHyG diff --git a/api-website/_build/html/py-modindex.html b/api-website/_build/html/py-modindex.html index 538012f2..05e82a4c 100644 --- a/api-website/_build/html/py-modindex.html +++ b/api-website/_build/html/py-modindex.html @@ -2,9 +2,18 @@ + + + + Python Module Index — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/modules.html b/api-website/_build/html/salesgpt/modules.html index ecd8e0ec..ab4b01ca 100644 --- a/api-website/_build/html/salesgpt/modules.html +++ b/api-website/_build/html/salesgpt/modules.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/salesgpt.agents.html b/api-website/_build/html/salesgpt/salesgpt.agents.html index f94548da..6323db1f 100644 --- a/api-website/_build/html/salesgpt/salesgpt.agents.html +++ b/api-website/_build/html/salesgpt/salesgpt.agents.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.agents module — SalesGPT documentation - + @@ -124,7 +133,7 @@

    salesgpt.agents module

    -class salesgpt.agents.SalesGPT(*, name: str | None = None, memory: BaseMemory | None = None, callbacks: List[BaseCallbackHandler] | BaseCallbackManager | None = None, verbose: bool = None, tags: List[str] | None = None, metadata: Dict[str, Any] | None = None, callback_manager: BaseCallbackManager | None = None, conversation_history: List[str] = [], conversation_stage_id: str = '1', current_conversation_stage: str = 'Introduction: Start the conversation by introducing yourself and your company. Be polite and respectful while keeping the tone of the conversation professional. Your greeting should be welcoming. Always clarify in your greeting the reason why you are calling.', stage_analyzer_chain: StageAnalyzerChain = FieldInfo(default=Ellipsis, extra={}), sales_agent_executor: AgentExecutor | None = FieldInfo(default=Ellipsis, extra={}), knowledge_base: RetrievalQA | None = FieldInfo(default=Ellipsis, extra={}), sales_conversation_utterance_chain: SalesConversationChain = FieldInfo(default=Ellipsis, extra={}), conversation_stage_dict: Dict = {'1': 'Introduction: Start the conversation by introducing yourself and your company. Be polite and respectful while keeping the tone of the conversation professional. Your greeting should be welcoming. Always clarify in your greeting the reason why you are calling.', '2': 'Qualification: Qualify the prospect by confirming if they are the right person to talk to regarding your product/service. Ensure that they have the authority to make purchasing decisions.', '3': 'Value proposition: Briefly explain how your product/service can benefit the prospect. Focus on the unique selling points and value proposition of your product/service that sets it apart from competitors.', '4': "Needs analysis: Ask open-ended questions to uncover the prospect's needs and pain points. Listen carefully to their responses and take notes.", '5': "Solution presentation: Based on the prospect's needs, present your product/service as the solution that can address their pain points.", '6': 'Objection handling: Address any objections that the prospect may have regarding your product/service. Be prepared to provide evidence or testimonials to support your claims.', '7': 'Close: Ask for the sale by proposing a next step. This could be a demo, a trial or a meeting with decision-makers. Ensure to summarize what has been discussed and reiterate the benefits.', '8': "End conversation: It's time to end the call as there is nothing else to be said."}, model_name: str = 'gpt-3.5-turbo-0613', use_tools: bool = False, salesperson_name: str = 'Ted Lasso', salesperson_role: str = 'Business Development Representative', company_name: str = 'Sleep Haven', company_business: str = 'Sleep Haven is a premium mattress company that provides customers with the most comfortable and supportive sleeping experience possible. We offer a range of high-quality mattresses, pillows, and bedding accessories that are designed to meet the unique needs of our customers.', company_values: str = "Our mission at Sleep Haven is to help people achieve a better night's sleep by providing them with the best possible sleep solutions. We believe that quality sleep is essential to overall health and well-being, and we are committed to helping our customers achieve optimal sleep by offering exceptional products and customer service.", conversation_purpose: str = 'find out whether they are looking to achieve better sleep via buying a premier mattress.', conversation_type: str = 'call')
    +class salesgpt.agents.SalesGPT(*, name: str | None = None, memory: BaseMemory | None = None, callbacks: List[BaseCallbackHandler] | BaseCallbackManager | None = None, verbose: bool = None, tags: List[str] | None = None, metadata: Dict[str, Any] | None = None, callback_manager: BaseCallbackManager | None = None, conversation_history: List[str] = [], conversation_stage_id: str = '1', current_conversation_stage: str = 'Introduction: Start the conversation by introducing yourself and your company. Be polite and respectful while keeping the tone of the conversation professional. Your greeting should be welcoming. Always clarify in your greeting the reason why you are calling.', stage_analyzer_chain: StageAnalyzerChain = FieldInfo(annotation=NoneType, required=True), sales_agent_executor: CustomAgentExecutor | None = FieldInfo(annotation=NoneType, required=True), knowledge_base: RetrievalQA | None = FieldInfo(annotation=NoneType, required=True), sales_conversation_utterance_chain: SalesConversationChain = FieldInfo(annotation=NoneType, required=True), conversation_stage_dict: Dict = {'1': 'Introduction: Start the conversation by introducing yourself and your company. Be polite and respectful while keeping the tone of the conversation professional. Your greeting should be welcoming. Always clarify in your greeting the reason why you are calling.', '2': 'Qualification: Qualify the prospect by confirming if they are the right person to talk to regarding your product/service. Ensure that they have the authority to make purchasing decisions.', '3': 'Value proposition: Briefly explain how your product/service can benefit the prospect. Focus on the unique selling points and value proposition of your product/service that sets it apart from competitors.', '4': "Needs analysis: Ask open-ended questions to uncover the prospect's needs and pain points. Listen carefully to their responses and take notes.", '5': "Solution presentation: Based on the prospect's needs, present your product/service as the solution that can address their pain points.", '6': 'Objection handling: Address any objections that the prospect may have regarding your product/service. Be prepared to provide evidence or testimonials to support your claims.', '7': 'Close: Ask for the sale by proposing a next step. This could be a demo, a trial or a meeting with decision-makers. Ensure to summarize what has been discussed and reiterate the benefits.', '8': "End conversation: It's time to end the call as there is nothing else to be said."}, model_name: str = 'gpt-3.5-turbo-0613', use_tools: bool = False, salesperson_name: str = 'Ted Lasso', salesperson_role: str = 'Business Development Representative', company_name: str = 'Sleep Haven', company_business: str = 'Sleep Haven is a premium mattress company that provides customers with the most comfortable and supportive sleeping experience possible. We offer a range of high-quality mattresses, pillows, and bedding accessories that are designed to meet the unique needs of our customers.', company_values: str = "Our mission at Sleep Haven is to help people achieve a better night's sleep by providing them with the best possible sleep solutions. We believe that quality sleep is essential to overall health and well-being, and we are committed to helping our customers achieve optimal sleep by offering exceptional products and customer service.", conversation_purpose: str = 'find out whether they are looking to achieve better sleep via buying a premier mattress.', conversation_type: str = 'call')

    Bases: Chain

    Controller model for the Sales Agent.

    @@ -289,7 +298,7 @@

    Returns human_step(human_input)

    Processes the human input and appends it to the conversation history.

    -

    This method takes the human input as a string, formats it by adding “User: ” at the beginning and ” <END_OF_TURN>” at the end, and then appends this formatted string to the conversation history.

    +

    This method takes the human input as a string, formats it by adding “User: “ at the beginning and “ <END_OF_TURN>” at the end, and then appends this formatted string to the conversation history.

    Args:

    human_input (str): The input string from the human user.

    @@ -348,7 +357,7 @@

    Returns
    -sales_agent_executor: AgentExecutor | None
    +sales_agent_executor: CustomAgentExecutor | None

    diff --git a/api-website/_build/html/salesgpt/salesgpt.chains.html b/api-website/_build/html/salesgpt/salesgpt.chains.html index e668ece2..4e031bae 100644 --- a/api-website/_build/html/salesgpt/salesgpt.chains.html +++ b/api-website/_build/html/salesgpt/salesgpt.chains.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.chains module — SalesGPT documentation - + @@ -101,7 +110,7 @@

    salesgpt.chains module

    -class salesgpt.chains.SalesConversationChain(*, name: str | None = None, memory: BaseMemory | None = None, callbacks: List[BaseCallbackHandler] | BaseCallbackManager | None = None, verbose: bool = None, tags: List[str] | None = None, metadata: Dict[str, Any] | None = None, callback_manager: BaseCallbackManager | None = None, prompt: BasePromptTemplate, llm: Runnable[PromptValue | str | Sequence[BaseMessage | Tuple[str, str] | str | Dict[str, Any]], str] | Runnable[PromptValue | str | Sequence[BaseMessage | Tuple[str, str] | str | Dict[str, Any]], BaseMessage], output_key: str = 'text', output_parser: BaseLLMOutputParser = None, return_final_only: bool = True, llm_kwargs: dict = None)
    +class salesgpt.chains.SalesConversationChain(*, name: str | None = None, memory: BaseMemory | None = None, callbacks: List[BaseCallbackHandler] | BaseCallbackManager | None = None, verbose: bool = None, tags: List[str] | None = None, metadata: Dict[str, Any] | None = None, callback_manager: BaseCallbackManager | None = None, prompt: BasePromptTemplate, llm: Runnable[PromptValue | str | Sequence[BaseMessage], str] | Runnable[PromptValue | str | Sequence[BaseMessage], BaseMessage], output_key: str = 'text', output_parser: BaseLLMOutputParser = None, return_final_only: bool = True, llm_kwargs: dict = None)

    Bases: LLMChain

    Chain to generate the next utterance for the conversation.

    @@ -114,7 +123,7 @@
    -class salesgpt.chains.StageAnalyzerChain(*, name: str | None = None, memory: BaseMemory | None = None, callbacks: List[BaseCallbackHandler] | BaseCallbackManager | None = None, verbose: bool = None, tags: List[str] | None = None, metadata: Dict[str, Any] | None = None, callback_manager: BaseCallbackManager | None = None, prompt: BasePromptTemplate, llm: Runnable[PromptValue | str | Sequence[BaseMessage | Tuple[str, str] | str | Dict[str, Any]], str] | Runnable[PromptValue | str | Sequence[BaseMessage | Tuple[str, str] | str | Dict[str, Any]], BaseMessage], output_key: str = 'text', output_parser: BaseLLMOutputParser = None, return_final_only: bool = True, llm_kwargs: dict = None)
    +class salesgpt.chains.StageAnalyzerChain(*, name: str | None = None, memory: BaseMemory | None = None, callbacks: List[BaseCallbackHandler] | BaseCallbackManager | None = None, verbose: bool = None, tags: List[str] | None = None, metadata: Dict[str, Any] | None = None, callback_manager: BaseCallbackManager | None = None, prompt: BasePromptTemplate, llm: Runnable[PromptValue | str | Sequence[BaseMessage], str] | Runnable[PromptValue | str | Sequence[BaseMessage], BaseMessage], output_key: str = 'text', output_parser: BaseLLMOutputParser = None, return_final_only: bool = True, llm_kwargs: dict = None)

    Bases: LLMChain

    Chain to analyze which conversation stage should the conversation move into.

    diff --git a/api-website/_build/html/salesgpt/salesgpt.html b/api-website/_build/html/salesgpt/salesgpt.html index bec63171..317625ff 100644 --- a/api-website/_build/html/salesgpt/salesgpt.html +++ b/api-website/_build/html/salesgpt/salesgpt.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt package — SalesGPT documentation - + @@ -161,6 +170,8 @@

    SubmodulesSalesGPTAPI

diff --git a/api-website/_build/html/salesgpt/salesgpt.logger.html b/api-website/_build/html/salesgpt/salesgpt.logger.html index 03e8665b..bc1ca4e0 100644 --- a/api-website/_build/html/salesgpt/salesgpt.logger.html +++ b/api-website/_build/html/salesgpt/salesgpt.logger.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.logger module — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/salesgpt.parsers.html b/api-website/_build/html/salesgpt/salesgpt.parsers.html index af1bffd9..4afdfa76 100644 --- a/api-website/_build/html/salesgpt/salesgpt.parsers.html +++ b/api-website/_build/html/salesgpt/salesgpt.parsers.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.parsers module — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/salesgpt.prompts.html b/api-website/_build/html/salesgpt/salesgpt.prompts.html index 0ba991ea..88af4589 100644 --- a/api-website/_build/html/salesgpt/salesgpt.prompts.html +++ b/api-website/_build/html/salesgpt/salesgpt.prompts.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.prompts module — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html b/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html index 00148eb0..c56307e8 100644 --- a/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html +++ b/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.prompts_cn module — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html b/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html index ca6c29e6..3088e99e 100644 --- a/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html +++ b/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.salesgptapi module — SalesGPT documentation - + @@ -60,6 +69,8 @@
  • SalesGPTAPI
  • @@ -98,16 +109,26 @@

    salesgpt.salesgptapi module

    -class salesgpt.salesgptapi.SalesGPTAPI(config_path: str, verbose: bool = False, max_num_turns: int = 10)
    +class salesgpt.salesgptapi.SalesGPTAPI(config_path: str, verbose: bool = True, max_num_turns: int = 20, use_tools=True)

    Bases: object

    -USE_TOOLS = False
    +USE_TOOLS = True
    -do(conversation_history: [<class 'str'>], human_input=None)
    +do(human_input=None) +
    + +
    +
    +async do_stream(conversation_history: [<class 'str'>], human_input=None)
    +
    + +
    +
    +initialize_agent()
    diff --git a/api-website/_build/html/salesgpt/salesgpt.stages.html b/api-website/_build/html/salesgpt/salesgpt.stages.html index 873ebc97..2fb594b7 100644 --- a/api-website/_build/html/salesgpt/salesgpt.stages.html +++ b/api-website/_build/html/salesgpt/salesgpt.stages.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.stages module — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/salesgpt.templates.html b/api-website/_build/html/salesgpt/salesgpt.templates.html index a5ed4744..46c862a9 100644 --- a/api-website/_build/html/salesgpt/salesgpt.templates.html +++ b/api-website/_build/html/salesgpt/salesgpt.templates.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.templates module — SalesGPT documentation - + @@ -99,7 +108,7 @@

    salesgpt.templates module

    -class salesgpt.templates.CustomPromptTemplateForTools(*, name: str | None = None, input_variables: List[str], input_types: Dict[str, Any] = None, output_parser: BaseOutputParser | None = None, partial_variables: Mapping[str, Any] = None, metadata: Dict[str, Any] | None = None, tags: List[str] | None = None, template: str, tools_getter: Callable)
    +class salesgpt.templates.CustomPromptTemplateForTools(*, name: str | None = None, input_variables: List[str], input_types: Dict[str, Any] = None, output_parser: BaseOutputParser | None = None, partial_variables: Mapping[str, str | Callable[[], str]] = None, template: str, tools_getter: Callable)

    Bases: StringPromptTemplate

    diff --git a/api-website/_build/html/salesgpt/salesgpt.tools.html b/api-website/_build/html/salesgpt/salesgpt.tools.html index a6b696f3..6b02141a 100644 --- a/api-website/_build/html/salesgpt/salesgpt.tools.html +++ b/api-website/_build/html/salesgpt/salesgpt.tools.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.tools module — SalesGPT documentation - + diff --git a/api-website/_build/html/salesgpt/salesgpt.version.html b/api-website/_build/html/salesgpt/salesgpt.version.html index 48d7e6c7..dbf4c9bb 100644 --- a/api-website/_build/html/salesgpt/salesgpt.version.html +++ b/api-website/_build/html/salesgpt/salesgpt.version.html @@ -1,11 +1,20 @@ - - + + + + + + salesgpt.version module — SalesGPT documentation - + diff --git a/api-website/_build/html/search.html b/api-website/_build/html/search.html index 7945312a..9f29f064 100644 --- a/api-website/_build/html/search.html +++ b/api-website/_build/html/search.html @@ -2,9 +2,18 @@ + + + + Search — SalesGPT documentation - + diff --git a/api-website/_build/html/searchindex.js b/api-website/_build/html/searchindex.js index 30be12a5..b24b1ed9 100644 --- a/api-website/_build/html/searchindex.js +++ b/api-website/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["index", "salesgpt/modules", "salesgpt/salesgpt", "salesgpt/salesgpt.agents", "salesgpt/salesgpt.chains", "salesgpt/salesgpt.logger", "salesgpt/salesgpt.parsers", "salesgpt/salesgpt.prompts", "salesgpt/salesgpt.prompts_cn", "salesgpt/salesgpt.salesgptapi", "salesgpt/salesgpt.stages", "salesgpt/salesgpt.templates", "salesgpt/salesgpt.tools", "salesgpt/salesgpt.version"], "filenames": ["index.rst", "salesgpt/modules.rst", "salesgpt/salesgpt.rst", "salesgpt/salesgpt.agents.rst", "salesgpt/salesgpt.chains.rst", "salesgpt/salesgpt.logger.rst", "salesgpt/salesgpt.parsers.rst", "salesgpt/salesgpt.prompts.rst", "salesgpt/salesgpt.prompts_cn.rst", "salesgpt/salesgpt.salesgptapi.rst", "salesgpt/salesgpt.stages.rst", "salesgpt/salesgpt.templates.rst", "salesgpt/salesgpt.tools.rst", "salesgpt/salesgpt.version.rst"], "titles": ["Welcome to SalesGPT\u2019s documentation!", "salesgpt", "salesgpt package", "salesgpt.agents module", "salesgpt.chains module", "salesgpt.logger module", "salesgpt.parsers module", "salesgpt.prompts module", "salesgpt.prompts_cn module", "salesgpt.salesgptapi module", "salesgpt.stages module", "salesgpt.templates module", "salesgpt.tools module", "salesgpt.version module"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": 0, "run": [], "run_api": [], "messagelist": [], "conversation_histori": [2, 3, 9], "human_sai": [], "model_config": [], "model_field": [], "chat_with_sales_ag": [], "say_hello": [], "packag": 1, "submodul": 1, "agent": [0, 1, 2, 4, 6], "acal": [2, 3], "acompletion_with_retri": [2, 3], "astep": [2, 3], "company_busi": [2, 3], "company_nam": [2, 3], "company_valu": [2, 3], "conversation_purpos": [2, 3], "conversation_stage_dict": [2, 3], "conversation_stage_id": [2, 3], "conversation_typ": [2, 3], "current_conversation_stag": [2, 3], "determine_conversation_stag": [2, 3], "from_llm": [2, 3, 4], "human_step": [2, 3], "input_kei": [2, 3], "knowledge_bas": [2, 3, 12], "model_nam": [2, 3, 12], "output_kei": [2, 3, 4], "retrieve_conversation_stag": [2, 3], "sales_agent_executor": [2, 3], "sales_conversation_utterance_chain": [2, 3], "salesperson_nam": [2, 3], "salesperson_rol": [2, 3], "seed_ag": [2, 3], "stage_analyzer_chain": [2, 3], "step": [2, 3], "use_tool": [2, 3, 9], "chain": [0, 1, 2, 3], "salesconversationchain": [0, 1, 2, 3, 4], "stageanalyzerchain": [0, 1, 2, 3, 4], "logger": [0, 1, 2], "timefilt": [0, 1, 2, 5], "filter": [2, 5], "time_logg": [0, 1, 2, 5], "parser": [0, 1, 2, 4], "salesconvooutputpars": [0, 1, 2, 6], "ai_prefix": [2, 6], "get_format_instruct": [2, 6], "pars": [2, 6], "verbos": [2, 3, 4, 6, 9], "prompt": [0, 1, 2, 3, 4, 11], "prompts_cn": [0, 1, 2], "salesgptapi": [0, 1, 2], "do": [2, 9], "stage": [0, 1, 2, 3, 4], "templat": [0, 1, 2], "customprompttemplatefortool": [0, 1, 2, 11], "format": [2, 3, 6, 11], "tools_gett": [2, 11], "tool": [0, 1, 2, 3], "get_tool": [0, 1, 2, 12], "setup_knowledge_bas": [0, 1, 2, 12], "version": [0, 1, 2], "content": 1, "class": [3, 4, 5, 6, 9, 11], "list": [3, 4, 11], "str": [3, 4, 6, 9, 11, 12], "base": [3, 4, 5, 6, 9, 11], "basemodel": [], "classvar": [], "configdict": [], "configur": [], "model": 3, "should": [3, 4, 5, 6], "dictionari": 3, "conform": [], "pydant": [], "config": [], "dict": [3, 4, 11], "fieldinfo": 3, "annot": [], "requir": [], "true": [3, 4, 5], "metadata": [3, 4, 11], "about": [], "field": [], "defin": [], "map": 11, "name": [3, 4, 5, 6, 11], "thi": [0, 3, 4, 5], "replac": [], "__fields__": [], "from": 3, "v1": [], "async": 3, "req": [], "memori": [3, 4], "basememori": [3, 4], "none": [3, 4, 6, 9, 11, 12], "callback": [3, 4], "basecallbackhandl": [3, 4], "basecallbackmanag": [3, 4], "callback_manag": [3, 4], "bool": [3, 4, 6, 9], "tag": [3, 4, 11], "ani": [0, 3, 4, 5, 11], "1": 3, "introduct": 3, "start": [3, 5], "convers": [3, 4], "introduc": 3, "yourself": 3, "your": 3, "compani": 3, "Be": 3, "polit": 3, "respect": 3, "while": 3, "keep": 3, "tone": 3, "profession": 3, "greet": 3, "welcom": 3, "alwai": 3, "clarifi": 3, "reason": 3, "why": 3, "you": [3, 4], "ar": [0, 3, 4, 5], "call": 3, "nonetyp": [], "agentexecutor": 3, "retrievalqa": 3, "2": 3, "qualif": 3, "qualifi": 3, "prospect": 3, "confirm": 3, "thei": 3, "right": 3, "person": 3, "talk": 3, "regard": 3, "product": [3, 12], "servic": 3, "ensur": 3, "have": [0, 3], "author": 3, "make": 3, "purchas": 3, "decis": 3, "3": [3, 12], "valu": 3, "proposit": 3, "briefli": 3, "explain": 3, "how": [3, 6], "can": 3, "benefit": 3, "focu": 3, "uniqu": 3, "sell": [3, 4], "point": 3, "set": 3, "apart": 3, "competitor": 3, "4": 3, "need": 3, "analysi": 3, "ask": 3, "open": 3, "end": [3, 5], "question": 3, "uncov": 3, "": 3, "pain": 3, "listen": 3, "carefulli": 3, "respons": [3, 4], "take": 3, "note": 3, "5": [3, 12], "solut": 3, "present": 3, "address": 3, "6": 3, "object": [3, 9], "handl": 3, "mai": [3, 5], "prepar": 3, "provid": 3, "evid": 3, "testimoni": 3, "support": 3, "claim": 3, "7": 3, "close": 3, "sale": [3, 4], "propos": 3, "next": [3, 4], "could": 3, "demo": 3, "trial": 3, "meet": 3, "maker": 3, "summar": 3, "what": 3, "ha": 3, "been": 3, "discuss": 3, "reiter": 3, "8": 3, "It": [3, 5], "time": [3, 5], "i": [3, 5, 12], "noth": 3, "els": 3, "said": 3, "gpt": [3, 12], "turbo": [3, 12], "0613": 3, "fals": [3, 4, 5, 6, 9], "ted": 3, "lasso": 3, "busi": 3, "develop": 3, "repres": 3, "sleep": 3, "haven": 3, "premium": 3, "mattress": 3, "custom": 3, "most": 3, "comfort": 3, "experi": 3, "possibl": 3, "we": [0, 3, 12], "offer": 3, "rang": 3, "high": 3, "qualiti": 3, "pillow": 3, "bed": 3, "accessori": 3, "design": 3, "our": 3, "mission": 3, "help": 3, "peopl": 3, "achiev": 3, "better": 3, "night": 3, "them": 3, "best": 3, "believ": 3, "essenti": 3, "overal": 3, "health": 3, "well": 3, "being": 3, "commit": 3, "optim": 3, "except": 3, "find": 3, "out": 3, "whether": 3, "look": 3, "via": 3, "bui": 3, "premier": 3, "control": 3, "arg": [3, 5, 11], "kwarg": [3, 11], "asynchron": 3, "execut": [3, 5], "input": [3, 11], "singl": 3, "expect": [], "onli": [], "one": [], "param": [], "contain": [], "all": [], "specifi": 5, "return_only_output": [], "return": [5, 11], "output": [3, 6], "If": [3, 5], "new": [], "kei": 3, "gener": [3, 4], "both": [], "default": 3, "us": 3, "These": [], "addit": 3, "pass": [3, 11], "dure": [], "construct": [], "runtim": [], "propag": [], "other": [], "string": [3, 11, 12], "option": 3, "associ": [], "include_run_info": [], "includ": [], "info": 5, "A": [3, 11], "llm": [3, 4, 6], "tenac": 3, "retri": 3, "complet": 3, "stream": 3, "manipul": 3, "chunk": 3, "downstream": 3, "applic": 3, "classmethod": [3, 4], "chatlitellm": [3, 4], "initi": 3, "human_input": [3, 9], "properti": 3, "baseprompttempl": 4, "runnabl": 4, "promptvalu": 4, "basemessag": 4, "text": [4, 6, 12], "output_pars": [4, 11], "basellmoutputpars": 4, "return_final_onli": 4, "llm_kwarg": 4, "llmchain": 4, "utter": [3, 4], "use_custom_prompt": 4, "custom_prompt": 4, "an": [3, 4], "ai": [4, 6], "me": 4, "pencil": 4, "get": [3, 4], "analyz": [3, 4], "which": [3, 4], "move": 4, "record": 5, "determin": [3, 5], "log": 5, "otherwis": [3, 5], "deem": 5, "appropri": 5, "modifi": 5, "place": 5, "func": 5, "decor": [3, 5], "function": [3, 5], "taken": 5, "agentoutputpars": 6, "instruct": 6, "agentact": 6, "agentfinish": 6, "action": 6, "finish": 6, "config_path": 9, "max_num_turn": 9, "int": 9, "10": 9, "input_vari": 11, "input_typ": 11, "baseoutputpars": 11, "partial_vari": 11, "callabl": [5, 11], "stringprompttempl": 11, "argument": [3, 11], "exampl": 11, "variable1": 11, "foo": 11, "product_catalog": 12, "assum": 12, "catalog": 12, "simpli": 12, "inform": 13, "red": [], "just": 0, "begun": 0, "build": 0, "websit": 0, "still": 0, "activ": 0, "work": 0, "suggest": 0, "improv": 0, "readabl": 0, "desir": 0, "pleas": 0, "contact": 0, "chemik": 0, "bit": 0, "github": 0, "more": [], "add": [], "toctre": [], "maxdepth": [], "caption": [], "type": [], "variabl": 3, "sequenc": 4, "tupl": [3, 4], "ellipsi": 3, "extra": 3, "deprec": [], "sinc": [], "0": [], "ainvok": [], "instead": [], "method": 3, "implement": 3, "yet": 3, "length": 3, "arbitrari": 3, "keyword": 3, "rais": [], "notimplementederror": 3, "current": 3, "indic": 3, "librari": 3, "case": 3, "failur": 3, "creat": 3, "_create_retry_decor": 3, "appli": 3, "_completion_with_retri": 3, "actual": 3, "The": [3, 5], "languag": 3, "result": 3, "fail": 3, "after": [3, 5], "maximum": 3, "number": 3, "_acal": 3, "empti": 3, "flag": 3, "histori": 3, "join": 3, "each": 3, "entri": 3, "separ": 3, "newlin": 3, "charact": 3, "id": 3, "also": 3, "print": 3, "retriev": 3, "correspond": 3, "final": 3, "process": 3, "human": 3, "append": 3, "ad": 3, "user": 3, "begin": 3, "end_of_turn": 3, "overridden": 3, "subclass": 3, "extract": 3, "data": 3, "up": 3, "found": 3, "seed": 3, "clear": 3, "reset": 3, "_call": 3, "befor": 5, "calcul": 5, "level": 5, "given": 3, "instanc": 3, "check": 3, "knowledg": 3, "executor": 3, "enabl": 3, "api": 0, "doc": [], "raw": [], "html": [], "div": [], "wy": [], "menu": [], "href": [], "http": [], "vercel": [], "app": [], "btn": [], "primari": []}, "objects": {"": [[2, 0, 0, "-", "salesgpt"]], "salesgpt": [[3, 0, 0, "-", "agents"], [4, 0, 0, "-", "chains"], [5, 0, 0, "-", "logger"], [6, 0, 0, "-", "parsers"], [7, 0, 0, "-", "prompts"], [8, 0, 0, "-", "prompts_cn"], [9, 0, 0, "-", "salesgptapi"], [10, 0, 0, "-", "stages"], [11, 0, 0, "-", "templates"], [12, 0, 0, "-", "tools"], [13, 0, 0, "-", "version"]], "salesgpt.agents": [[3, 1, 1, "", "SalesGPT"]], "salesgpt.agents.SalesGPT": [[3, 2, 1, "", "acall"], [3, 2, 1, "", "acompletion_with_retry"], [3, 2, 1, "", "astep"], [3, 3, 1, "", "company_business"], [3, 3, 1, "", "company_name"], [3, 3, 1, "", "company_values"], [3, 3, 1, "", "conversation_history"], [3, 3, 1, "", "conversation_purpose"], [3, 3, 1, "", "conversation_stage_dict"], [3, 3, 1, "", "conversation_stage_id"], [3, 3, 1, "", "conversation_type"], [3, 3, 1, "", "current_conversation_stage"], [3, 2, 1, "", "determine_conversation_stage"], [3, 2, 1, "", "from_llm"], [3, 2, 1, "", "human_step"], [3, 4, 1, "", "input_keys"], [3, 3, 1, "", "knowledge_base"], [3, 3, 1, "", "model_name"], [3, 4, 1, "", "output_keys"], [3, 2, 1, "", "retrieve_conversation_stage"], [3, 3, 1, "", "sales_agent_executor"], [3, 3, 1, "", "sales_conversation_utterance_chain"], [3, 3, 1, "", "salesperson_name"], [3, 3, 1, "", "salesperson_role"], [3, 2, 1, "", "seed_agent"], [3, 3, 1, "", "stage_analyzer_chain"], [3, 2, 1, "", "step"], [3, 3, 1, "", "use_tools"]], "salesgpt.chains": [[4, 1, 1, "", "SalesConversationChain"], [4, 1, 1, "", "StageAnalyzerChain"]], "salesgpt.chains.SalesConversationChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.chains.StageAnalyzerChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.logger": [[5, 1, 1, "", "TimeFilter"], [5, 5, 1, "", "time_logger"]], "salesgpt.logger.TimeFilter": [[5, 2, 1, "", "filter"]], "salesgpt.parsers": [[6, 1, 1, "", "SalesConvoOutputParser"]], "salesgpt.parsers.SalesConvoOutputParser": [[6, 3, 1, "", "ai_prefix"], [6, 2, 1, "", "get_format_instructions"], [6, 2, 1, "", "parse"], [6, 3, 1, "", "verbose"]], "salesgpt.salesgptapi": [[9, 1, 1, "", "SalesGPTAPI"]], "salesgpt.salesgptapi.SalesGPTAPI": [[9, 3, 1, "", "USE_TOOLS"], [9, 2, 1, "", "do"]], "salesgpt.templates": [[11, 1, 1, "", "CustomPromptTemplateForTools"]], "salesgpt.templates.CustomPromptTemplateForTools": [[11, 2, 1, "", "format"], [11, 3, 1, "", "template"], [11, 3, 1, "", "tools_getter"]], "salesgpt.tools": [[12, 5, 1, "", "get_tools"], [12, 5, 1, "", "setup_knowledge_base"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"welcom": 0, "salesgpt": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "": 0, "document": 0, "indic": 0, "tabl": 0, "run": [], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "run_api": [], "packag": 2, "submodul": 2, "agent": 3, "chain": 4, "logger": 5, "parser": 6, "prompt": 7, "prompts_cn": 8, "salesgptapi": 9, "stage": 10, "templat": 11, "tool": 12, "version": 13, "content": [0, 2], "note": [], "paramet": 3, "rais": 3, "return": 3}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"salesgpt": [[1, "salesgpt"]], "salesgpt package": [[2, "salesgpt-package"]], "Submodules": [[2, "submodules"]], "Contents:": [[2, null], [0, null]], "Module contents": [[2, "module-salesgpt"]], "salesgpt.agents module": [[3, "module-salesgpt.agents"]], "Parameters": [[3, "parameters"], [3, "id1"], [3, "id3"]], "Raises": [[3, "raises"], [3, "id2"]], "Returns": [[3, "returns"], [3, "id4"]], "salesgpt.chains module": [[4, "module-salesgpt.chains"]], "salesgpt.logger module": [[5, "module-salesgpt.logger"]], "salesgpt.parsers module": [[6, "module-salesgpt.parsers"]], "salesgpt.prompts module": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn module": [[8, "module-salesgpt.prompts_cn"]], "salesgpt.salesgptapi module": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages module": [[10, "module-salesgpt.stages"]], "salesgpt.templates module": [[11, "module-salesgpt.templates"]], "salesgpt.tools module": [[12, "module-salesgpt.tools"]], "salesgpt.version module": [[13, "module-salesgpt.version"]], "Welcome to SalesGPT\u2019s documentation!": [[0, "welcome-to-salesgpt-s-documentation"]], "Indices and tables": [[0, "indices-and-tables"]]}, "indexentries": {"module": [[2, "module-salesgpt"], [3, "module-salesgpt.agents"], [4, "module-salesgpt.chains"], [5, "module-salesgpt.logger"], [6, "module-salesgpt.parsers"], [7, "module-salesgpt.prompts"], [8, "module-salesgpt.prompts_cn"], [9, "module-salesgpt.salesgptapi"], [10, "module-salesgpt.stages"], [11, "module-salesgpt.templates"], [12, "module-salesgpt.tools"], [13, "module-salesgpt.version"]], "salesgpt": [[2, "module-salesgpt"]], "salesgpt (class in salesgpt.agents)": [[3, "salesgpt.agents.SalesGPT"]], "acall() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acall"]], "acompletion_with_retry() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acompletion_with_retry"]], "astep() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.astep"]], "company_business (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_business"]], "company_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_name"]], "company_values (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_values"]], "conversation_history (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_history"]], "conversation_purpose (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_purpose"]], "conversation_stage_dict (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_dict"]], "conversation_stage_id (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_id"]], "conversation_type (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_type"]], "current_conversation_stage (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.current_conversation_stage"]], "determine_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.determine_conversation_stage"]], "from_llm() (salesgpt.agents.salesgpt class method)": [[3, "salesgpt.agents.SalesGPT.from_llm"]], "human_step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.human_step"]], "input_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.input_keys"]], "knowledge_base (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.knowledge_base"]], "model_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.model_name"]], "output_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.output_keys"]], "retrieve_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.retrieve_conversation_stage"]], "sales_agent_executor (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_agent_executor"]], "sales_conversation_utterance_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_conversation_utterance_chain"]], "salesgpt.agents": [[3, "module-salesgpt.agents"]], "salesperson_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_name"]], "salesperson_role (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_role"]], "seed_agent() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.seed_agent"]], "stage_analyzer_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.stage_analyzer_chain"]], "step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.step"]], "use_tools (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.use_tools"]], "salesconversationchain (class in salesgpt.chains)": [[4, "salesgpt.chains.SalesConversationChain"]], "stageanalyzerchain (class in salesgpt.chains)": [[4, "salesgpt.chains.StageAnalyzerChain"]], "from_llm() (salesgpt.chains.salesconversationchain class method)": [[4, "salesgpt.chains.SalesConversationChain.from_llm"]], "from_llm() (salesgpt.chains.stageanalyzerchain class method)": [[4, "salesgpt.chains.StageAnalyzerChain.from_llm"]], "salesgpt.chains": [[4, "module-salesgpt.chains"]], "timefilter (class in salesgpt.logger)": [[5, "salesgpt.logger.TimeFilter"]], "filter() (salesgpt.logger.timefilter method)": [[5, "salesgpt.logger.TimeFilter.filter"]], "salesgpt.logger": [[5, "module-salesgpt.logger"]], "time_logger() (in module salesgpt.logger)": [[5, "salesgpt.logger.time_logger"]], "salesconvooutputparser (class in salesgpt.parsers)": [[6, "salesgpt.parsers.SalesConvoOutputParser"]], "ai_prefix (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.ai_prefix"]], "get_format_instructions() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.get_format_instructions"]], "parse() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.parse"]], "salesgpt.parsers": [[6, "module-salesgpt.parsers"]], "verbose (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.verbose"]], "salesgpt.prompts": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn": [[8, "module-salesgpt.prompts_cn"]], "salesgptapi (class in salesgpt.salesgptapi)": [[9, "salesgpt.salesgptapi.SalesGPTAPI"]], "use_tools (salesgpt.salesgptapi.salesgptapi attribute)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.USE_TOOLS"]], "do() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do"]], "salesgpt.salesgptapi": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages": [[10, "module-salesgpt.stages"]], "customprompttemplatefortools (class in salesgpt.templates)": [[11, "salesgpt.templates.CustomPromptTemplateForTools"]], "format() (salesgpt.templates.customprompttemplatefortools method)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.format"]], "salesgpt.templates": [[11, "module-salesgpt.templates"]], "template (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.template"]], "tools_getter (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.tools_getter"]], "get_tools() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_tools"]], "salesgpt.tools": [[12, "module-salesgpt.tools"]], "setup_knowledge_base() (in module salesgpt.tools)": [[12, "salesgpt.tools.setup_knowledge_base"]], "salesgpt.version": [[13, "module-salesgpt.version"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["index", "salesgpt/modules", "salesgpt/salesgpt", "salesgpt/salesgpt.agents", "salesgpt/salesgpt.chains", "salesgpt/salesgpt.logger", "salesgpt/salesgpt.parsers", "salesgpt/salesgpt.prompts", "salesgpt/salesgpt.prompts_cn", "salesgpt/salesgpt.salesgptapi", "salesgpt/salesgpt.stages", "salesgpt/salesgpt.templates", "salesgpt/salesgpt.tools", "salesgpt/salesgpt.version"], "filenames": ["index.rst", "salesgpt/modules.rst", "salesgpt/salesgpt.rst", "salesgpt/salesgpt.agents.rst", "salesgpt/salesgpt.chains.rst", "salesgpt/salesgpt.logger.rst", "salesgpt/salesgpt.parsers.rst", "salesgpt/salesgpt.prompts.rst", "salesgpt/salesgpt.prompts_cn.rst", "salesgpt/salesgpt.salesgptapi.rst", "salesgpt/salesgpt.stages.rst", "salesgpt/salesgpt.templates.rst", "salesgpt/salesgpt.tools.rst", "salesgpt/salesgpt.version.rst"], "titles": ["Welcome to SalesGPT\u2019s documentation!", "salesgpt", "salesgpt package", "salesgpt.agents module", "salesgpt.chains module", "salesgpt.logger module", "salesgpt.parsers module", "salesgpt.prompts module", "salesgpt.prompts_cn module", "salesgpt.salesgptapi module", "salesgpt.stages module", "salesgpt.templates module", "salesgpt.tools module", "salesgpt.version module"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": 0, "run": [], "run_api": [], "messagelist": [], "conversation_histori": [2, 3, 9], "human_sai": [], "model_config": [], "model_field": [], "chat_with_sales_ag": [], "say_hello": [], "packag": 1, "submodul": 1, "agent": [0, 1, 2, 4, 6], "acal": [2, 3], "acompletion_with_retri": [2, 3], "astep": [2, 3], "company_busi": [2, 3], "company_nam": [2, 3], "company_valu": [2, 3], "conversation_purpos": [2, 3], "conversation_stage_dict": [2, 3], "conversation_stage_id": [2, 3], "conversation_typ": [2, 3], "current_conversation_stag": [2, 3], "determine_conversation_stag": [2, 3], "from_llm": [2, 3, 4], "human_step": [2, 3], "input_kei": [2, 3], "knowledge_bas": [2, 3, 12], "model_nam": [2, 3, 12], "output_kei": [2, 3, 4], "retrieve_conversation_stag": [2, 3], "sales_agent_executor": [2, 3], "sales_conversation_utterance_chain": [2, 3], "salesperson_nam": [2, 3], "salesperson_rol": [2, 3], "seed_ag": [2, 3], "stage_analyzer_chain": [2, 3], "step": [2, 3], "use_tool": [2, 3, 9], "chain": [0, 1, 2, 3], "salesconversationchain": [0, 1, 2, 3, 4], "stageanalyzerchain": [0, 1, 2, 3, 4], "logger": [0, 1, 2], "timefilt": [0, 1, 2, 5], "filter": [2, 5], "time_logg": [0, 1, 2, 5], "parser": [0, 1, 2, 4], "salesconvooutputpars": [0, 1, 2, 6], "ai_prefix": [2, 6], "get_format_instruct": [2, 6], "pars": [2, 6], "verbos": [2, 3, 4, 6, 9], "prompt": [0, 1, 2, 3, 4, 11], "prompts_cn": [0, 1, 2], "salesgptapi": [0, 1, 2], "do": [2, 9], "stage": [0, 1, 2, 3, 4], "templat": [0, 1, 2], "customprompttemplatefortool": [0, 1, 2, 11], "format": [2, 3, 6, 11], "tools_gett": [2, 11], "tool": [0, 1, 2, 3], "get_tool": [0, 1, 2, 12], "setup_knowledge_bas": [0, 1, 2, 12], "version": [0, 1, 2], "content": 1, "class": [3, 4, 5, 6, 9, 11], "list": [3, 4, 11], "str": [3, 4, 6, 9, 11, 12], "base": [3, 4, 5, 6, 9, 11], "basemodel": [], "classvar": [], "configdict": [], "configur": [], "model": 3, "should": [3, 4, 5, 6], "dictionari": 3, "conform": [], "pydant": [], "config": [], "dict": [3, 4, 11], "fieldinfo": 3, "annot": 3, "requir": 3, "true": [3, 4, 5, 9], "metadata": [3, 4], "about": [], "field": [], "defin": [], "map": 11, "name": [3, 4, 5, 6, 11], "thi": [0, 3, 4, 5], "replac": [], "__fields__": [], "from": 3, "v1": [], "async": [3, 9], "req": [], "memori": [3, 4], "basememori": [3, 4], "none": [3, 4, 6, 9, 11, 12], "callback": [3, 4], "basecallbackhandl": [3, 4], "basecallbackmanag": [3, 4], "callback_manag": [3, 4], "bool": [3, 4, 6, 9], "tag": [3, 4], "ani": [0, 3, 4, 5, 11], "1": 3, "introduct": 3, "start": [3, 5], "convers": [3, 4], "introduc": 3, "yourself": 3, "your": 3, "compani": 3, "Be": 3, "polit": 3, "respect": 3, "while": 3, "keep": 3, "tone": 3, "profession": 3, "greet": 3, "welcom": 3, "alwai": 3, "clarifi": 3, "reason": 3, "why": 3, "you": [3, 4], "ar": [0, 3, 4, 5], "call": 3, "nonetyp": 3, "agentexecutor": [], "retrievalqa": 3, "2": 3, "qualif": 3, "qualifi": 3, "prospect": 3, "confirm": 3, "thei": 3, "right": 3, "person": 3, "talk": 3, "regard": 3, "product": [3, 12], "servic": 3, "ensur": 3, "have": [0, 3], "author": 3, "make": 3, "purchas": 3, "decis": 3, "3": [3, 12], "valu": 3, "proposit": 3, "briefli": 3, "explain": 3, "how": [3, 6], "can": 3, "benefit": 3, "focu": 3, "uniqu": 3, "sell": [3, 4], "point": 3, "set": 3, "apart": 3, "competitor": 3, "4": 3, "need": 3, "analysi": 3, "ask": 3, "open": 3, "end": [3, 5], "question": 3, "uncov": 3, "": 3, "pain": 3, "listen": 3, "carefulli": 3, "respons": [3, 4], "take": 3, "note": 3, "5": [3, 12], "solut": 3, "present": 3, "address": 3, "6": 3, "object": [3, 9], "handl": 3, "mai": [3, 5], "prepar": 3, "provid": 3, "evid": 3, "testimoni": 3, "support": 3, "claim": 3, "7": 3, "close": 3, "sale": [3, 4], "propos": 3, "next": [3, 4], "could": 3, "demo": 3, "trial": 3, "meet": 3, "maker": 3, "summar": 3, "what": 3, "ha": 3, "been": 3, "discuss": 3, "reiter": 3, "8": 3, "It": [3, 5], "time": [3, 5], "i": [3, 5, 12], "noth": 3, "els": 3, "said": 3, "gpt": [3, 12], "turbo": [3, 12], "0613": 3, "fals": [3, 4, 5, 6], "ted": 3, "lasso": 3, "busi": 3, "develop": 3, "repres": 3, "sleep": 3, "haven": 3, "premium": 3, "mattress": 3, "custom": 3, "most": 3, "comfort": 3, "experi": 3, "possibl": 3, "we": [0, 3, 12], "offer": 3, "rang": 3, "high": 3, "qualiti": 3, "pillow": 3, "bed": 3, "accessori": 3, "design": 3, "our": 3, "mission": 3, "help": 3, "peopl": 3, "achiev": 3, "better": 3, "night": 3, "them": 3, "best": 3, "believ": 3, "essenti": 3, "overal": 3, "health": 3, "well": 3, "being": 3, "commit": 3, "optim": 3, "except": 3, "find": 3, "out": 3, "whether": 3, "look": 3, "via": 3, "bui": 3, "premier": 3, "control": 3, "arg": [3, 5, 11], "kwarg": [3, 11], "asynchron": 3, "execut": [3, 5], "input": [3, 11], "singl": 3, "expect": [], "onli": [], "one": [], "param": [], "contain": [], "all": [], "specifi": 5, "return_only_output": [], "return": [5, 11], "output": [3, 6], "If": [3, 5], "new": [], "kei": 3, "gener": [3, 4], "both": [], "default": 3, "us": 3, "These": [], "addit": 3, "pass": [3, 11], "dure": [], "construct": [], "runtim": [], "propag": [], "other": [], "string": [3, 11, 12], "option": 3, "associ": [], "include_run_info": [], "includ": [], "info": 5, "A": [3, 11], "llm": [3, 4, 6], "tenac": 3, "retri": 3, "complet": 3, "stream": 3, "manipul": 3, "chunk": 3, "downstream": 3, "applic": 3, "classmethod": [3, 4], "chatlitellm": [3, 4], "initi": 3, "human_input": [3, 9], "properti": 3, "baseprompttempl": 4, "runnabl": 4, "promptvalu": 4, "basemessag": 4, "text": [4, 6, 12], "output_pars": [4, 11], "basellmoutputpars": 4, "return_final_onli": 4, "llm_kwarg": 4, "llmchain": 4, "utter": [3, 4], "use_custom_prompt": 4, "custom_prompt": 4, "an": [3, 4], "ai": [4, 6], "me": 4, "pencil": 4, "get": [3, 4], "analyz": [3, 4], "which": [3, 4], "move": 4, "record": 5, "determin": [3, 5], "log": 5, "otherwis": [3, 5], "deem": 5, "appropri": 5, "modifi": 5, "place": 5, "func": 5, "decor": [3, 5], "function": [3, 5], "taken": 5, "agentoutputpars": 6, "instruct": 6, "agentact": 6, "agentfinish": 6, "action": 6, "finish": 6, "config_path": 9, "max_num_turn": 9, "int": 9, "10": [], "input_vari": 11, "input_typ": 11, "baseoutputpars": 11, "partial_vari": 11, "callabl": [5, 11], "stringprompttempl": 11, "argument": [3, 11], "exampl": 11, "variable1": 11, "foo": 11, "product_catalog": 12, "assum": 12, "catalog": 12, "simpli": 12, "inform": 13, "red": [], "just": 0, "begun": 0, "build": 0, "websit": 0, "still": 0, "activ": 0, "work": 0, "suggest": 0, "improv": 0, "readabl": 0, "desir": 0, "pleas": 0, "contact": 0, "chemik": 0, "bit": 0, "github": 0, "more": [], "add": [], "toctre": [], "maxdepth": [], "caption": [], "type": [], "variabl": 3, "sequenc": 4, "tupl": 3, "ellipsi": [], "extra": [], "deprec": [], "sinc": [], "0": [], "ainvok": [], "instead": [], "method": 3, "implement": 3, "yet": 3, "length": 3, "arbitrari": 3, "keyword": 3, "rais": [], "notimplementederror": 3, "current": 3, "indic": 3, "librari": 3, "case": 3, "failur": 3, "creat": 3, "_create_retry_decor": 3, "appli": 3, "_completion_with_retri": 3, "actual": 3, "The": [3, 5], "languag": 3, "result": 3, "fail": 3, "after": [3, 5], "maximum": 3, "number": 3, "_acal": 3, "empti": 3, "flag": 3, "histori": 3, "join": 3, "each": 3, "entri": 3, "separ": 3, "newlin": 3, "charact": 3, "id": 3, "also": 3, "print": 3, "retriev": 3, "correspond": 3, "final": 3, "process": 3, "human": 3, "append": 3, "ad": 3, "user": 3, "begin": 3, "end_of_turn": 3, "overridden": 3, "subclass": 3, "extract": 3, "data": 3, "up": 3, "found": 3, "seed": 3, "clear": 3, "reset": 3, "_call": 3, "befor": 5, "calcul": 5, "level": 5, "given": 3, "instanc": 3, "check": 3, "knowledg": 3, "executor": 3, "enabl": 3, "api": 0, "doc": [], "raw": [], "html": [], "div": [], "wy": [], "menu": [], "href": [], "http": [], "vercel": [], "app": [], "btn": [], "primari": [], "do_stream": [2, 9], "initialize_ag": [2, 9], "customagentexecutor": 3, "20": 9}, "objects": {"": [[2, 0, 0, "-", "salesgpt"]], "salesgpt": [[3, 0, 0, "-", "agents"], [4, 0, 0, "-", "chains"], [5, 0, 0, "-", "logger"], [6, 0, 0, "-", "parsers"], [7, 0, 0, "-", "prompts"], [8, 0, 0, "-", "prompts_cn"], [9, 0, 0, "-", "salesgptapi"], [10, 0, 0, "-", "stages"], [11, 0, 0, "-", "templates"], [12, 0, 0, "-", "tools"], [13, 0, 0, "-", "version"]], "salesgpt.agents": [[3, 1, 1, "", "SalesGPT"]], "salesgpt.agents.SalesGPT": [[3, 2, 1, "", "acall"], [3, 2, 1, "", "acompletion_with_retry"], [3, 2, 1, "", "astep"], [3, 3, 1, "", "company_business"], [3, 3, 1, "", "company_name"], [3, 3, 1, "", "company_values"], [3, 3, 1, "", "conversation_history"], [3, 3, 1, "", "conversation_purpose"], [3, 3, 1, "", "conversation_stage_dict"], [3, 3, 1, "", "conversation_stage_id"], [3, 3, 1, "", "conversation_type"], [3, 3, 1, "", "current_conversation_stage"], [3, 2, 1, "", "determine_conversation_stage"], [3, 2, 1, "", "from_llm"], [3, 2, 1, "", "human_step"], [3, 4, 1, "", "input_keys"], [3, 3, 1, "", "knowledge_base"], [3, 3, 1, "", "model_name"], [3, 4, 1, "", "output_keys"], [3, 2, 1, "", "retrieve_conversation_stage"], [3, 3, 1, "", "sales_agent_executor"], [3, 3, 1, "", "sales_conversation_utterance_chain"], [3, 3, 1, "", "salesperson_name"], [3, 3, 1, "", "salesperson_role"], [3, 2, 1, "", "seed_agent"], [3, 3, 1, "", "stage_analyzer_chain"], [3, 2, 1, "", "step"], [3, 3, 1, "", "use_tools"]], "salesgpt.chains": [[4, 1, 1, "", "SalesConversationChain"], [4, 1, 1, "", "StageAnalyzerChain"]], "salesgpt.chains.SalesConversationChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.chains.StageAnalyzerChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.logger": [[5, 1, 1, "", "TimeFilter"], [5, 5, 1, "", "time_logger"]], "salesgpt.logger.TimeFilter": [[5, 2, 1, "", "filter"]], "salesgpt.parsers": [[6, 1, 1, "", "SalesConvoOutputParser"]], "salesgpt.parsers.SalesConvoOutputParser": [[6, 3, 1, "", "ai_prefix"], [6, 2, 1, "", "get_format_instructions"], [6, 2, 1, "", "parse"], [6, 3, 1, "", "verbose"]], "salesgpt.salesgptapi": [[9, 1, 1, "", "SalesGPTAPI"]], "salesgpt.salesgptapi.SalesGPTAPI": [[9, 3, 1, "", "USE_TOOLS"], [9, 2, 1, "", "do"], [9, 2, 1, "", "do_stream"], [9, 2, 1, "", "initialize_agent"]], "salesgpt.templates": [[11, 1, 1, "", "CustomPromptTemplateForTools"]], "salesgpt.templates.CustomPromptTemplateForTools": [[11, 2, 1, "", "format"], [11, 3, 1, "", "template"], [11, 3, 1, "", "tools_getter"]], "salesgpt.tools": [[12, 5, 1, "", "get_tools"], [12, 5, 1, "", "setup_knowledge_base"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"welcom": 0, "salesgpt": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "": 0, "document": 0, "indic": 0, "tabl": 0, "run": [], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "run_api": [], "packag": 2, "submodul": 2, "agent": 3, "chain": 4, "logger": 5, "parser": 6, "prompt": 7, "prompts_cn": 8, "salesgptapi": 9, "stage": 10, "templat": 11, "tool": 12, "version": 13, "content": [0, 2], "note": [], "paramet": 3, "rais": 3, "return": 3}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Welcome to SalesGPT\u2019s documentation!": [[0, "welcome-to-salesgpt-s-documentation"]], "Contents:": [[0, null], [2, null]], "Indices and tables": [[0, "indices-and-tables"]], "salesgpt": [[1, "salesgpt"]], "salesgpt package": [[2, "salesgpt-package"]], "Submodules": [[2, "submodules"]], "Module contents": [[2, "module-salesgpt"]], "salesgpt.agents module": [[3, "module-salesgpt.agents"]], "Parameters": [[3, "parameters"], [3, "id1"], [3, "id3"]], "Raises": [[3, "raises"], [3, "id2"]], "Returns": [[3, "returns"], [3, "id4"]], "salesgpt.chains module": [[4, "module-salesgpt.chains"]], "salesgpt.logger module": [[5, "module-salesgpt.logger"]], "salesgpt.parsers module": [[6, "module-salesgpt.parsers"]], "salesgpt.prompts module": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn module": [[8, "module-salesgpt.prompts_cn"]], "salesgpt.salesgptapi module": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages module": [[10, "module-salesgpt.stages"]], "salesgpt.templates module": [[11, "module-salesgpt.templates"]], "salesgpt.tools module": [[12, "module-salesgpt.tools"]], "salesgpt.version module": [[13, "module-salesgpt.version"]]}, "indexentries": {"module": [[2, "module-salesgpt"], [3, "module-salesgpt.agents"], [4, "module-salesgpt.chains"], [5, "module-salesgpt.logger"], [6, "module-salesgpt.parsers"], [7, "module-salesgpt.prompts"], [8, "module-salesgpt.prompts_cn"], [9, "module-salesgpt.salesgptapi"], [10, "module-salesgpt.stages"], [11, "module-salesgpt.templates"], [12, "module-salesgpt.tools"], [13, "module-salesgpt.version"]], "salesgpt": [[2, "module-salesgpt"]], "salesgpt (class in salesgpt.agents)": [[3, "salesgpt.agents.SalesGPT"]], "acall() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acall"]], "acompletion_with_retry() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acompletion_with_retry"]], "astep() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.astep"]], "company_business (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_business"]], "company_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_name"]], "company_values (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_values"]], "conversation_history (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_history"]], "conversation_purpose (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_purpose"]], "conversation_stage_dict (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_dict"]], "conversation_stage_id (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_id"]], "conversation_type (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_type"]], "current_conversation_stage (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.current_conversation_stage"]], "determine_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.determine_conversation_stage"]], "from_llm() (salesgpt.agents.salesgpt class method)": [[3, "salesgpt.agents.SalesGPT.from_llm"]], "human_step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.human_step"]], "input_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.input_keys"]], "knowledge_base (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.knowledge_base"]], "model_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.model_name"]], "output_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.output_keys"]], "retrieve_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.retrieve_conversation_stage"]], "sales_agent_executor (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_agent_executor"]], "sales_conversation_utterance_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_conversation_utterance_chain"]], "salesgpt.agents": [[3, "module-salesgpt.agents"]], "salesperson_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_name"]], "salesperson_role (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_role"]], "seed_agent() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.seed_agent"]], "stage_analyzer_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.stage_analyzer_chain"]], "step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.step"]], "use_tools (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.use_tools"]], "salesconversationchain (class in salesgpt.chains)": [[4, "salesgpt.chains.SalesConversationChain"]], "stageanalyzerchain (class in salesgpt.chains)": [[4, "salesgpt.chains.StageAnalyzerChain"]], "from_llm() (salesgpt.chains.salesconversationchain class method)": [[4, "salesgpt.chains.SalesConversationChain.from_llm"]], "from_llm() (salesgpt.chains.stageanalyzerchain class method)": [[4, "salesgpt.chains.StageAnalyzerChain.from_llm"]], "salesgpt.chains": [[4, "module-salesgpt.chains"]], "timefilter (class in salesgpt.logger)": [[5, "salesgpt.logger.TimeFilter"]], "filter() (salesgpt.logger.timefilter method)": [[5, "salesgpt.logger.TimeFilter.filter"]], "salesgpt.logger": [[5, "module-salesgpt.logger"]], "time_logger() (in module salesgpt.logger)": [[5, "salesgpt.logger.time_logger"]], "salesconvooutputparser (class in salesgpt.parsers)": [[6, "salesgpt.parsers.SalesConvoOutputParser"]], "ai_prefix (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.ai_prefix"]], "get_format_instructions() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.get_format_instructions"]], "parse() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.parse"]], "salesgpt.parsers": [[6, "module-salesgpt.parsers"]], "verbose (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.verbose"]], "salesgpt.prompts": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn": [[8, "module-salesgpt.prompts_cn"]], "salesgptapi (class in salesgpt.salesgptapi)": [[9, "salesgpt.salesgptapi.SalesGPTAPI"]], "use_tools (salesgpt.salesgptapi.salesgptapi attribute)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.USE_TOOLS"]], "do() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do"]], "do_stream() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do_stream"]], "initialize_agent() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.initialize_agent"]], "salesgpt.salesgptapi": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages": [[10, "module-salesgpt.stages"]], "customprompttemplatefortools (class in salesgpt.templates)": [[11, "salesgpt.templates.CustomPromptTemplateForTools"]], "format() (salesgpt.templates.customprompttemplatefortools method)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.format"]], "salesgpt.templates": [[11, "module-salesgpt.templates"]], "template (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.template"]], "tools_getter (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.tools_getter"]], "get_tools() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_tools"]], "salesgpt.tools": [[12, "module-salesgpt.tools"]], "setup_knowledge_base() (in module salesgpt.tools)": [[12, "salesgpt.tools.setup_knowledge_base"]], "salesgpt.version": [[13, "module-salesgpt.version"]]}}) \ No newline at end of file diff --git a/api-website/conf.py b/api-website/conf.py index 4229a462..9e96ba99 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -27,9 +27,11 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinx.ext.autodoc' +extensions = ['sphinx.ext.autodoc', + "sphinxcontrib.googleanalytics" ] +googleanalytics_id = "G-N73Z2D8W81" # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From c0d06e5dfa7194f8efea8c8f9c367c7ccaae171c Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Mon, 18 Mar 2024 23:06:22 +0100 Subject: [PATCH 03/47] apigtagv2 --- api-website/conf.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/api-website/conf.py b/api-website/conf.py index 9e96ba99..b58b9afa 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -28,10 +28,15 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.autodoc', - "sphinxcontrib.googleanalytics" + "sphinxcontrib.googleanalytics", + 'sphinxcontrib.gtagjs' ] googleanalytics_id = "G-N73Z2D8W81" + +gtagjs_ids = [ + 'GTM-W7H24KQZ', +] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 6c068173f0bfa21c86f0d4df6cdfebfb778c41f1 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Mon, 18 Mar 2024 23:13:25 +0100 Subject: [PATCH 04/47] pokus gtag --- api-website/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-website/conf.py b/api-website/conf.py index b58b9afa..769b4b2f 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -32,7 +32,7 @@ 'sphinxcontrib.gtagjs' ] -googleanalytics_id = "G-N73Z2D8W81" +googleanalytics_id = "GTM-W7H24KQZ" gtagjs_ids = [ 'GTM-W7H24KQZ', From adf13165be5d5e3d605a6cf272e7827654e1c63d Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Tue, 19 Mar 2024 15:49:56 +0100 Subject: [PATCH 05/47] new gtag container --- api-website/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-website/conf.py b/api-website/conf.py index 769b4b2f..eaf7c117 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -35,7 +35,7 @@ googleanalytics_id = "GTM-W7H24KQZ" gtagjs_ids = [ - 'GTM-W7H24KQZ', + 'GTM-NX3SZD79', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 5341f2c3ead30aea27d4654ffb72c6744cf3e138 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Tue, 19 Mar 2024 16:09:05 +0100 Subject: [PATCH 06/47] gtag v2 --- api-website/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-website/conf.py b/api-website/conf.py index eaf7c117..a43fecd0 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -32,7 +32,7 @@ 'sphinxcontrib.gtagjs' ] -googleanalytics_id = "GTM-W7H24KQZ" +googleanalytics_id = "GTM-NX3SZD79" gtagjs_ids = [ 'GTM-NX3SZD79', From 2f682a8805df2511be9d0911bc54827b1da1198e Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Tue, 19 Mar 2024 16:18:16 +0100 Subject: [PATCH 07/47] gtag --- api-website/_static/google_analytics_tracker.js | 4 ++++ api-website/conf.py | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 api-website/_static/google_analytics_tracker.js diff --git a/api-website/_static/google_analytics_tracker.js b/api-website/_static/google_analytics_tracker.js new file mode 100644 index 00000000..11381ec4 --- /dev/null +++ b/api-website/_static/google_analytics_tracker.js @@ -0,0 +1,4 @@ +window.dataLayer = window.dataLayer || []; +function gtag(){dataLayer.push(arguments);} +gtag('js', new Date()); +gtag('config', 'GTM-NX3SZD79'); \ No newline at end of file diff --git a/api-website/conf.py b/api-website/conf.py index a43fecd0..337c8c4a 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -37,6 +37,10 @@ gtagjs_ids = [ 'GTM-NX3SZD79', ] + +def setup(app): + app.add_javascript("https://www.googletagmanager.com/gtag/js?id=GTM-NX3SZD79") + app.add_javascript("google_analytics_tracker.js") # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From c393cc233d71c84df8475a58d747b595fd05cf9b Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Tue, 19 Mar 2024 16:27:54 +0100 Subject: [PATCH 08/47] v3 --- api-website/conf.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index 337c8c4a..65c2160e 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -38,10 +38,21 @@ 'GTM-NX3SZD79', ] +MATHJAX_CONFIG_JS = """ +window.dataLayer = window.dataLayer || []; +function gtag(){dataLayer.push(arguments);} +gtag('js', new Date()); +gtag('config', 'GTM-NX3SZD79', { 'anonymize_ip': true }); +""" + +# 2. Create a setup() function if you don't already have one. +# (If you do, just add to your existing setup() function.) def setup(app): - app.add_javascript("https://www.googletagmanager.com/gtag/js?id=GTM-NX3SZD79") - app.add_javascript("google_analytics_tracker.js") -# Add any paths that contain templates here, relative to this directory. + # 3. Tell Sphinx to add your JS code. Sphinx will insert + # the `body` into the html inside a + """ + # 2. Create a setup() function if you don't already have one. # (If you do, just add to your existing setup() function.) def setup(app): # 3. Tell Sphinx to add your JS code. Sphinx will insert # the `body` into the html inside a - - Index — SalesGPT documentation @@ -27,6 +18,15 @@ + + + @@ -123,6 +123,8 @@

    A

      +
    • conversation_purpose (salesgpt.agents.SalesGPT attribute) +
    • conversation_stage_dict (salesgpt.agents.SalesGPT attribute)
    • conversation_stage_id (salesgpt.agents.SalesGPT attribute) @@ -195,10 +199,18 @@

      F

      G

      @@ -399,6 +411,10 @@

      S

    • salesperson_role (salesgpt.agents.SalesGPT attribute)
    • seed_agent() (salesgpt.agents.SalesGPT method) +
    • +
    • send_email_tool() (in module salesgpt.tools) +
    • +
    • send_email_with_gmail() (in module salesgpt.tools)
    • setup_knowledge_base() (in module salesgpt.tools)
    • @@ -431,10 +447,6 @@

      U

      -
      diff --git a/api-website/_build/html/index.html b/api-website/_build/html/index.html index 9a74ccae..38b1c6f0 100644 --- a/api-website/_build/html/index.html +++ b/api-website/_build/html/index.html @@ -3,15 +3,6 @@ - - - - Welcome to SalesGPT’s documentation! — SalesGPT documentation @@ -28,6 +19,15 @@ + + + @@ -130,7 +130,14 @@

      Welcome to SalesGPT’s documentation!Tools

    • diff --git a/api-website/_build/html/objects.inv b/api-website/_build/html/objects.inv index 1a139297b8abc2db2a8479041eae6b8334fb02f9..bf03955a7b8e17c58990dc0b5f01874aa5a8a3cb 100644 GIT binary patch delta 1072 zcmV-01kd}u2$u1EJ4em8odP#vZFoVhW9TZ74e#swvyG9C=H?(%$bAq1Kt{CcddK`5UnNM8Vz;O zJ?Y>M*cZYK)ZK67u>)0_hrqZ8UKlC3f_ve8yy2EM`o0=ydoR8oL{;k;DeXw&R8~^* zBM$#g@(wfB)qmn0Oh?=n>tz($3#0Kf4E}5i$puI~+{S$F`Bw(5jkqnTdTQ(~2CR05 z;zrjufxD+DyxcRk`~>!+7+#?diG^-cs&eYk0ppyHb@GV8l}>vngr&+iqP*;5Hj<7j**}4fb4$Vgo-)Wx^#0;HF@1)BuY-GxqjswrXg8!Rdz3QAn+FNISO zN_$L0Cm7L1&Mdb8wSF|VGw(J&{+`CsPh37tm48Dz7EaV$!C!}rQ?P6WJ(E~DCDc&n z{$iU@$E)uKg_9F<&h|Rfj`q{hSGp~6BH0NMj#I}L3c4LjbqY_PY+3)P_w zVYIKtw+EaGz=8~&>!YfmHSP#yc+1-XE3^Fz8hiJ-LhNq?;TzSBc$>{zdx2uw*5%Ie zaDM|wS$ARZ25-aX#T)JEX*ZxmM{U1#9dv!x}r zt9h5;r;-<40wk5hwQyF;X<3FYBGP(7-IiDJR<@zjg-P&REth2JbrplAy%~@v~j` z)Ys_i^+}4s_BwF@HzAjm7iPWzW|$eG2m`ef8j0pZ#Y@8gy+f)SeA|C4_qt-Q{rt@v zbh8*H$PQ|)653uU1zA3{|9@GnTUx=0Qs{jG7NaalK^Su@1Ao2e<)tuQ2?m<-8vmqv zk0of?WTPt$A{VS(DXAO0F^blpoO6iQl5UKKJm{KKa0ToWVFvQ9w|)Yth;!SXD$Tvm zu7MXu3a;QLS@@dwK{+TIva7j{>BLhIbd?6E6rC9`|SXvtYtG(hPckjBP$DA>77zJ2!&Mv9xZhxr`(+h<=%x>N-?0 z4MpSQ>MkC`6Y?D7^83RlyuQEx`jB?Xc?L?Jh^2F}wj-24s;kgxO*JKq{(@OOO2SB6 zTT=1rg~B1Bp%RSfBxjJDfm+@g`}D6?F2L8_=znJ}*L`ae4z?pRXYiLkr6o=_gPmS1 z9pE{PwSTeA*j;VCz+mr$n6sVDu%q2{TRsL@v_g+?CpZeU5qSDOJqy`(g{@9}f1T81 zhxSU+x`bz>boqgi4KQ@`9`&P69No2_ix;ty7p>4p;s>yT+xL>@sK5JvfB#X)N}9@E zdVklozFJtjCya^arl0V%Z+;uz>}WQjwrXtb*N57}LHI4J@%oSFJf$C9OwRD6?!oWZ z!!Q!0c(hq)5qgEhS)-Q zsD{~HYZGUWIvX@mO|jd4XAZt^chD(7&`!v>4~kkju9)Z~B5cQ()VPV4ii(aEgW#7k z8)Y9RZgfIDY{8}CIDJT(=twO{?el4rJ5Hx)qS~{8$YOt(wfvaZd+_tCHc|WoU}+R7 DErRbi diff --git a/api-website/_build/html/py-modindex.html b/api-website/_build/html/py-modindex.html index 05e82a4c..dce4ae42 100644 --- a/api-website/_build/html/py-modindex.html +++ b/api-website/_build/html/py-modindex.html @@ -2,15 +2,6 @@ - - - - Python Module Index — SalesGPT documentation @@ -27,6 +18,15 @@ + + + diff --git a/api-website/_build/html/salesgpt/modules.html b/api-website/_build/html/salesgpt/modules.html index ab4b01ca..cb24eaea 100644 --- a/api-website/_build/html/salesgpt/modules.html +++ b/api-website/_build/html/salesgpt/modules.html @@ -3,15 +3,6 @@ - - - - salesgpt — SalesGPT documentation @@ -28,6 +19,15 @@ + + + @@ -130,7 +130,14 @@

      salesgpt

  • salesgpt.tools module
  • diff --git a/api-website/_build/html/salesgpt/salesgpt.agents.html b/api-website/_build/html/salesgpt/salesgpt.agents.html index 6323db1f..707a16b9 100644 --- a/api-website/_build/html/salesgpt/salesgpt.agents.html +++ b/api-website/_build/html/salesgpt/salesgpt.agents.html @@ -3,15 +3,6 @@ - - - - salesgpt.agents module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + @@ -63,6 +63,7 @@
  • SalesGPT
    • SalesGPT.acall()
    • SalesGPT.acompletion_with_retry()
    • +
    • SalesGPT.adetermine_conversation_stage()
    • SalesGPT.astep()
    • SalesGPT.company_business
    • SalesGPT.company_name
    • @@ -138,21 +139,22 @@

      Controller model for the Sales Agent.

      -acall(*args, **kwargs)
      -

      This method is currently not implemented.

      +acall(inputs: Dict[str, Any]) Dict[str, Any] +

      Executes one step of the sales agent.

      +

      This function overrides the input temporarily with the current state of the conversation, +generates the agent’s utterance using either the sales agent executor or the sales conversation utterance chain, +adds the agent’s response to the conversation history, and returns the AI message.

      Parameters

      -
      *argstuple

      Variable length argument list.

      -
      -
      **kwargsdict

      Arbitrary keyword arguments.

      +
      inputsDict[str, Any]

      The initial inputs for the sales agent.

      -
      -

      Raises

      +
      +

      Returns

      -
      NotImplementedError

      Indicates that this method has not been implemented yet.

      +
      Dict[str, Any]

      The AI message generated by the sales agent.

      @@ -163,7 +165,7 @@

      Raises< async acompletion_with_retry(llm: Any, **kwargs: Any) Any

      Use tenacity to retry the async completion call.

      This method uses the tenacity library to retry the asynchronous completion call in case of failure. -It creates a retry decorator using the ‘_create_retry_decorator’ method and applies it to the +It creates a retry decorator using the ‘_create_retry_decorator’ method and applies it to the ‘_completion_with_retry’ function which makes the actual asynchronous completion call.

      Parameters

      @@ -174,15 +176,15 @@

      Parameters

      -
      -

      Returns

      +
      +

      Returns

      Any

      The result of the completion function call.

      -
      -

      Raises

      +
      +

      Raises

      Exception

      If the completion function call fails after the maximum number of retries.

      @@ -190,6 +192,22 @@

      Raises

      +
      +
      +adetermine_conversation_stage()
      +

      Determines the current conversation stage based on the conversation history.

      +

      This method uses the stage_analyzer_chain to analyze the conversation history and determine the current stage. +The conversation history is joined into a single string, with each entry separated by a newline character. +The current conversation stage ID is also passed to the stage_analyzer_chain.

      +

      The method then prints the determined conversation stage ID and retrieves the corresponding conversation stage +from the conversation_stage_dict dictionary using the retrieve_conversation_stage method.

      +

      Finally, the method prints the determined conversation stage.

      +
      +
      Returns:

      None

      +
      +
      +
      +
      astep(stream: bool = False)
      @@ -197,7 +215,7 @@

      Raises

      If the stream argument is set to False, it calls the _acall method with an empty dictionary as input. If the stream argument is set to True, it returns a streaming generator object for manipulating streaming chunks in downstream applications.

      -
      Args:

      stream (bool, optional): A flag indicating whether to return a streaming generator object. +

      Args:

      stream (bool, optional): A flag indicating whether to return a streaming generator object. Defaults to False.

      Returns:

      Generator: A streaming generator object if stream is set to True. Otherwise, it returns None.

      @@ -394,11 +412,11 @@

      Returns
      step(stream: bool = False)
      -

      Executes a step in the conversation. If the stream argument is set to True, -it returns a streaming generator object for manipulating streaming chunks in downstream applications. +

      Executes a step in the conversation. If the stream argument is set to True, +it returns a streaming generator object for manipulating streaming chunks in downstream applications. If the stream argument is set to False, it calls the _call method with an empty dictionary as input.

      -
      Args:

      stream (bool, optional): A flag indicating whether to return a streaming generator object. +

      Args:

      stream (bool, optional): A flag indicating whether to return a streaming generator object. Defaults to False.

      Returns:

      Generator: A streaming generator object if stream is set to True. Otherwise, it returns None.

      diff --git a/api-website/_build/html/salesgpt/salesgpt.chains.html b/api-website/_build/html/salesgpt/salesgpt.chains.html index 4e031bae..d97b8096 100644 --- a/api-website/_build/html/salesgpt/salesgpt.chains.html +++ b/api-website/_build/html/salesgpt/salesgpt.chains.html @@ -3,15 +3,6 @@ - - - - salesgpt.chains module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/salesgpt/salesgpt.html b/api-website/_build/html/salesgpt/salesgpt.html index 317625ff..f85cc16c 100644 --- a/api-website/_build/html/salesgpt/salesgpt.html +++ b/api-website/_build/html/salesgpt/salesgpt.html @@ -3,15 +3,6 @@ - - - - salesgpt package — SalesGPT documentation @@ -28,6 +19,15 @@ + + + @@ -105,6 +105,7 @@

      SubmodulesSalesGPT
      • SalesGPT.acall()
      • SalesGPT.acompletion_with_retry()
      • +
      • SalesGPT.adetermine_conversation_stage()
      • SalesGPT.astep()
      • SalesGPT.company_business
      • SalesGPT.company_name
      • @@ -168,7 +169,6 @@

        Submodulessalesgpt.prompts_cn module
      • salesgpt.salesgptapi module
        • SalesGPTAPI
            -
          • SalesGPTAPI.USE_TOOLS
          • SalesGPTAPI.do()
          • SalesGPTAPI.do_stream()
          • SalesGPTAPI.initialize_agent()
          • @@ -187,7 +187,14 @@

            Submodulessalesgpt.tools module diff --git a/api-website/_build/html/salesgpt/salesgpt.logger.html b/api-website/_build/html/salesgpt/salesgpt.logger.html index bc1ca4e0..786eb3ff 100644 --- a/api-website/_build/html/salesgpt/salesgpt.logger.html +++ b/api-website/_build/html/salesgpt/salesgpt.logger.html @@ -3,15 +3,6 @@ - - - - salesgpt.logger module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + @@ -123,8 +123,8 @@
            salesgpt.logger.time_logger(func)

            Decorator function to log the time taken by any function.

            -

            This decorator logs the execution time of the decorated function. It logs the start time before the function -execution, the end time after the function execution, and calculates the execution time. The function name and +

            This decorator logs the execution time of the decorated function. It logs the start time before the function +execution, the end time after the function execution, and calculates the execution time. The function name and execution time are then logged at the INFO level.

            Args:

            func (Callable): The function to be decorated.

            diff --git a/api-website/_build/html/salesgpt/salesgpt.parsers.html b/api-website/_build/html/salesgpt/salesgpt.parsers.html index 4afdfa76..e71da579 100644 --- a/api-website/_build/html/salesgpt/salesgpt.parsers.html +++ b/api-website/_build/html/salesgpt/salesgpt.parsers.html @@ -3,15 +3,6 @@ - - - - salesgpt.parsers module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/salesgpt/salesgpt.prompts.html b/api-website/_build/html/salesgpt/salesgpt.prompts.html index 88af4589..a44b3f08 100644 --- a/api-website/_build/html/salesgpt/salesgpt.prompts.html +++ b/api-website/_build/html/salesgpt/salesgpt.prompts.html @@ -3,15 +3,6 @@ - - - - salesgpt.prompts module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html b/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html index c56307e8..3f8459cf 100644 --- a/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html +++ b/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html @@ -3,15 +3,6 @@ - - - - salesgpt.prompts_cn module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html b/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html index 3088e99e..866e66e6 100644 --- a/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html +++ b/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html @@ -3,15 +3,6 @@ - - - - salesgpt.salesgptapi module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + @@ -67,7 +67,6 @@
          • Prompts_cn
          • SalesGPT API
            • SalesGPTAPI
                -
              • SalesGPTAPI.USE_TOOLS
              • SalesGPTAPI.do()
              • SalesGPTAPI.do_stream()
              • SalesGPTAPI.initialize_agent()
              • @@ -109,16 +108,11 @@

                salesgpt.salesgptapi module

                -class salesgpt.salesgptapi.SalesGPTAPI(config_path: str, verbose: bool = True, max_num_turns: int = 20, use_tools=True)
                +class salesgpt.salesgptapi.SalesGPTAPI(config_path: str, verbose: bool = True, max_num_turns: int = 20, model_name: str = 'gpt-3.5-turbo', product_catalog: str = 'examples/sample_product_catalog.txt', use_tools=True)

                Bases: object

                -
                -
                -USE_TOOLS = True
                -
                -
                -do(human_input=None)
                +async do(human_input=None)
                diff --git a/api-website/_build/html/salesgpt/salesgpt.stages.html b/api-website/_build/html/salesgpt/salesgpt.stages.html index 2fb594b7..0b3868c5 100644 --- a/api-website/_build/html/salesgpt/salesgpt.stages.html +++ b/api-website/_build/html/salesgpt/salesgpt.stages.html @@ -3,15 +3,6 @@ - - - - salesgpt.stages module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/salesgpt/salesgpt.templates.html b/api-website/_build/html/salesgpt/salesgpt.templates.html index 46c862a9..4cb04514 100644 --- a/api-website/_build/html/salesgpt/salesgpt.templates.html +++ b/api-website/_build/html/salesgpt/salesgpt.templates.html @@ -3,15 +3,6 @@ - - - - salesgpt.templates module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/salesgpt/salesgpt.tools.html b/api-website/_build/html/salesgpt/salesgpt.tools.html index 6b02141a..c7dad912 100644 --- a/api-website/_build/html/salesgpt/salesgpt.tools.html +++ b/api-website/_build/html/salesgpt/salesgpt.tools.html @@ -3,15 +3,6 @@ - - - - salesgpt.tools module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + @@ -69,7 +69,14 @@
              • Stages
              • Templates
              • Tools
              • @@ -102,11 +109,51 @@

                salesgpt.tools module

                +
                +
                +salesgpt.tools.completion_bedrock(model_id, system_prompt, messages, max_tokens=1000)
                +

                High-level API call to generate a message with Anthropic Claude.

                +
                + +
                + +

                Generate a calendly invitation link based on the single query string

                +
                + +
                + +

                Generate a stripe payment link for a customer based on a single query string.

                +
                + +
                +
                +salesgpt.tools.get_mail_body_subject_from_query(query)
                +
                + +
                +
                +salesgpt.tools.get_product_id_from_query(query, product_price_id_mapping_path)
                +
                +
                -salesgpt.tools.get_tools(knowledge_base)
                +salesgpt.tools.get_tools(product_catalog)
                +
                +
                +salesgpt.tools.send_email_tool(query)
                +

                Sends an email based on the single query string

                +
                + +
                +
                +salesgpt.tools.send_email_with_gmail(email_details)
                +

                .env should include GMAIL_MAIL and GMAIL_APP_PASSWORD to work correctly

                +
                +
                salesgpt.tools.setup_knowledge_base(product_catalog: str = None, model_name: str = 'gpt-3.5-turbo')
                diff --git a/api-website/_build/html/salesgpt/salesgpt.version.html b/api-website/_build/html/salesgpt/salesgpt.version.html index dbf4c9bb..921763cf 100644 --- a/api-website/_build/html/salesgpt/salesgpt.version.html +++ b/api-website/_build/html/salesgpt/salesgpt.version.html @@ -3,15 +3,6 @@ - - - - salesgpt.version module — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/search.html b/api-website/_build/html/search.html index 9f29f064..71374236 100644 --- a/api-website/_build/html/search.html +++ b/api-website/_build/html/search.html @@ -2,15 +2,6 @@ - - - - Search — SalesGPT documentation @@ -28,6 +19,15 @@ + + + diff --git a/api-website/_build/html/searchindex.js b/api-website/_build/html/searchindex.js index b24b1ed9..4a4c5d5c 100644 --- a/api-website/_build/html/searchindex.js +++ b/api-website/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["index", "salesgpt/modules", "salesgpt/salesgpt", "salesgpt/salesgpt.agents", "salesgpt/salesgpt.chains", "salesgpt/salesgpt.logger", "salesgpt/salesgpt.parsers", "salesgpt/salesgpt.prompts", "salesgpt/salesgpt.prompts_cn", "salesgpt/salesgpt.salesgptapi", "salesgpt/salesgpt.stages", "salesgpt/salesgpt.templates", "salesgpt/salesgpt.tools", "salesgpt/salesgpt.version"], "filenames": ["index.rst", "salesgpt/modules.rst", "salesgpt/salesgpt.rst", "salesgpt/salesgpt.agents.rst", "salesgpt/salesgpt.chains.rst", "salesgpt/salesgpt.logger.rst", "salesgpt/salesgpt.parsers.rst", "salesgpt/salesgpt.prompts.rst", "salesgpt/salesgpt.prompts_cn.rst", "salesgpt/salesgpt.salesgptapi.rst", "salesgpt/salesgpt.stages.rst", "salesgpt/salesgpt.templates.rst", "salesgpt/salesgpt.tools.rst", "salesgpt/salesgpt.version.rst"], "titles": ["Welcome to SalesGPT\u2019s documentation!", "salesgpt", "salesgpt package", "salesgpt.agents module", "salesgpt.chains module", "salesgpt.logger module", "salesgpt.parsers module", "salesgpt.prompts module", "salesgpt.prompts_cn module", "salesgpt.salesgptapi module", "salesgpt.stages module", "salesgpt.templates module", "salesgpt.tools module", "salesgpt.version module"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": 0, "run": [], "run_api": [], "messagelist": [], "conversation_histori": [2, 3, 9], "human_sai": [], "model_config": [], "model_field": [], "chat_with_sales_ag": [], "say_hello": [], "packag": 1, "submodul": 1, "agent": [0, 1, 2, 4, 6], "acal": [2, 3], "acompletion_with_retri": [2, 3], "astep": [2, 3], "company_busi": [2, 3], "company_nam": [2, 3], "company_valu": [2, 3], "conversation_purpos": [2, 3], "conversation_stage_dict": [2, 3], "conversation_stage_id": [2, 3], "conversation_typ": [2, 3], "current_conversation_stag": [2, 3], "determine_conversation_stag": [2, 3], "from_llm": [2, 3, 4], "human_step": [2, 3], "input_kei": [2, 3], "knowledge_bas": [2, 3, 12], "model_nam": [2, 3, 12], "output_kei": [2, 3, 4], "retrieve_conversation_stag": [2, 3], "sales_agent_executor": [2, 3], "sales_conversation_utterance_chain": [2, 3], "salesperson_nam": [2, 3], "salesperson_rol": [2, 3], "seed_ag": [2, 3], "stage_analyzer_chain": [2, 3], "step": [2, 3], "use_tool": [2, 3, 9], "chain": [0, 1, 2, 3], "salesconversationchain": [0, 1, 2, 3, 4], "stageanalyzerchain": [0, 1, 2, 3, 4], "logger": [0, 1, 2], "timefilt": [0, 1, 2, 5], "filter": [2, 5], "time_logg": [0, 1, 2, 5], "parser": [0, 1, 2, 4], "salesconvooutputpars": [0, 1, 2, 6], "ai_prefix": [2, 6], "get_format_instruct": [2, 6], "pars": [2, 6], "verbos": [2, 3, 4, 6, 9], "prompt": [0, 1, 2, 3, 4, 11], "prompts_cn": [0, 1, 2], "salesgptapi": [0, 1, 2], "do": [2, 9], "stage": [0, 1, 2, 3, 4], "templat": [0, 1, 2], "customprompttemplatefortool": [0, 1, 2, 11], "format": [2, 3, 6, 11], "tools_gett": [2, 11], "tool": [0, 1, 2, 3], "get_tool": [0, 1, 2, 12], "setup_knowledge_bas": [0, 1, 2, 12], "version": [0, 1, 2], "content": 1, "class": [3, 4, 5, 6, 9, 11], "list": [3, 4, 11], "str": [3, 4, 6, 9, 11, 12], "base": [3, 4, 5, 6, 9, 11], "basemodel": [], "classvar": [], "configdict": [], "configur": [], "model": 3, "should": [3, 4, 5, 6], "dictionari": 3, "conform": [], "pydant": [], "config": [], "dict": [3, 4, 11], "fieldinfo": 3, "annot": 3, "requir": 3, "true": [3, 4, 5, 9], "metadata": [3, 4], "about": [], "field": [], "defin": [], "map": 11, "name": [3, 4, 5, 6, 11], "thi": [0, 3, 4, 5], "replac": [], "__fields__": [], "from": 3, "v1": [], "async": [3, 9], "req": [], "memori": [3, 4], "basememori": [3, 4], "none": [3, 4, 6, 9, 11, 12], "callback": [3, 4], "basecallbackhandl": [3, 4], "basecallbackmanag": [3, 4], "callback_manag": [3, 4], "bool": [3, 4, 6, 9], "tag": [3, 4], "ani": [0, 3, 4, 5, 11], "1": 3, "introduct": 3, "start": [3, 5], "convers": [3, 4], "introduc": 3, "yourself": 3, "your": 3, "compani": 3, "Be": 3, "polit": 3, "respect": 3, "while": 3, "keep": 3, "tone": 3, "profession": 3, "greet": 3, "welcom": 3, "alwai": 3, "clarifi": 3, "reason": 3, "why": 3, "you": [3, 4], "ar": [0, 3, 4, 5], "call": 3, "nonetyp": 3, "agentexecutor": [], "retrievalqa": 3, "2": 3, "qualif": 3, "qualifi": 3, "prospect": 3, "confirm": 3, "thei": 3, "right": 3, "person": 3, "talk": 3, "regard": 3, "product": [3, 12], "servic": 3, "ensur": 3, "have": [0, 3], "author": 3, "make": 3, "purchas": 3, "decis": 3, "3": [3, 12], "valu": 3, "proposit": 3, "briefli": 3, "explain": 3, "how": [3, 6], "can": 3, "benefit": 3, "focu": 3, "uniqu": 3, "sell": [3, 4], "point": 3, "set": 3, "apart": 3, "competitor": 3, "4": 3, "need": 3, "analysi": 3, "ask": 3, "open": 3, "end": [3, 5], "question": 3, "uncov": 3, "": 3, "pain": 3, "listen": 3, "carefulli": 3, "respons": [3, 4], "take": 3, "note": 3, "5": [3, 12], "solut": 3, "present": 3, "address": 3, "6": 3, "object": [3, 9], "handl": 3, "mai": [3, 5], "prepar": 3, "provid": 3, "evid": 3, "testimoni": 3, "support": 3, "claim": 3, "7": 3, "close": 3, "sale": [3, 4], "propos": 3, "next": [3, 4], "could": 3, "demo": 3, "trial": 3, "meet": 3, "maker": 3, "summar": 3, "what": 3, "ha": 3, "been": 3, "discuss": 3, "reiter": 3, "8": 3, "It": [3, 5], "time": [3, 5], "i": [3, 5, 12], "noth": 3, "els": 3, "said": 3, "gpt": [3, 12], "turbo": [3, 12], "0613": 3, "fals": [3, 4, 5, 6], "ted": 3, "lasso": 3, "busi": 3, "develop": 3, "repres": 3, "sleep": 3, "haven": 3, "premium": 3, "mattress": 3, "custom": 3, "most": 3, "comfort": 3, "experi": 3, "possibl": 3, "we": [0, 3, 12], "offer": 3, "rang": 3, "high": 3, "qualiti": 3, "pillow": 3, "bed": 3, "accessori": 3, "design": 3, "our": 3, "mission": 3, "help": 3, "peopl": 3, "achiev": 3, "better": 3, "night": 3, "them": 3, "best": 3, "believ": 3, "essenti": 3, "overal": 3, "health": 3, "well": 3, "being": 3, "commit": 3, "optim": 3, "except": 3, "find": 3, "out": 3, "whether": 3, "look": 3, "via": 3, "bui": 3, "premier": 3, "control": 3, "arg": [3, 5, 11], "kwarg": [3, 11], "asynchron": 3, "execut": [3, 5], "input": [3, 11], "singl": 3, "expect": [], "onli": [], "one": [], "param": [], "contain": [], "all": [], "specifi": 5, "return_only_output": [], "return": [5, 11], "output": [3, 6], "If": [3, 5], "new": [], "kei": 3, "gener": [3, 4], "both": [], "default": 3, "us": 3, "These": [], "addit": 3, "pass": [3, 11], "dure": [], "construct": [], "runtim": [], "propag": [], "other": [], "string": [3, 11, 12], "option": 3, "associ": [], "include_run_info": [], "includ": [], "info": 5, "A": [3, 11], "llm": [3, 4, 6], "tenac": 3, "retri": 3, "complet": 3, "stream": 3, "manipul": 3, "chunk": 3, "downstream": 3, "applic": 3, "classmethod": [3, 4], "chatlitellm": [3, 4], "initi": 3, "human_input": [3, 9], "properti": 3, "baseprompttempl": 4, "runnabl": 4, "promptvalu": 4, "basemessag": 4, "text": [4, 6, 12], "output_pars": [4, 11], "basellmoutputpars": 4, "return_final_onli": 4, "llm_kwarg": 4, "llmchain": 4, "utter": [3, 4], "use_custom_prompt": 4, "custom_prompt": 4, "an": [3, 4], "ai": [4, 6], "me": 4, "pencil": 4, "get": [3, 4], "analyz": [3, 4], "which": [3, 4], "move": 4, "record": 5, "determin": [3, 5], "log": 5, "otherwis": [3, 5], "deem": 5, "appropri": 5, "modifi": 5, "place": 5, "func": 5, "decor": [3, 5], "function": [3, 5], "taken": 5, "agentoutputpars": 6, "instruct": 6, "agentact": 6, "agentfinish": 6, "action": 6, "finish": 6, "config_path": 9, "max_num_turn": 9, "int": 9, "10": [], "input_vari": 11, "input_typ": 11, "baseoutputpars": 11, "partial_vari": 11, "callabl": [5, 11], "stringprompttempl": 11, "argument": [3, 11], "exampl": 11, "variable1": 11, "foo": 11, "product_catalog": 12, "assum": 12, "catalog": 12, "simpli": 12, "inform": 13, "red": [], "just": 0, "begun": 0, "build": 0, "websit": 0, "still": 0, "activ": 0, "work": 0, "suggest": 0, "improv": 0, "readabl": 0, "desir": 0, "pleas": 0, "contact": 0, "chemik": 0, "bit": 0, "github": 0, "more": [], "add": [], "toctre": [], "maxdepth": [], "caption": [], "type": [], "variabl": 3, "sequenc": 4, "tupl": 3, "ellipsi": [], "extra": [], "deprec": [], "sinc": [], "0": [], "ainvok": [], "instead": [], "method": 3, "implement": 3, "yet": 3, "length": 3, "arbitrari": 3, "keyword": 3, "rais": [], "notimplementederror": 3, "current": 3, "indic": 3, "librari": 3, "case": 3, "failur": 3, "creat": 3, "_create_retry_decor": 3, "appli": 3, "_completion_with_retri": 3, "actual": 3, "The": [3, 5], "languag": 3, "result": 3, "fail": 3, "after": [3, 5], "maximum": 3, "number": 3, "_acal": 3, "empti": 3, "flag": 3, "histori": 3, "join": 3, "each": 3, "entri": 3, "separ": 3, "newlin": 3, "charact": 3, "id": 3, "also": 3, "print": 3, "retriev": 3, "correspond": 3, "final": 3, "process": 3, "human": 3, "append": 3, "ad": 3, "user": 3, "begin": 3, "end_of_turn": 3, "overridden": 3, "subclass": 3, "extract": 3, "data": 3, "up": 3, "found": 3, "seed": 3, "clear": 3, "reset": 3, "_call": 3, "befor": 5, "calcul": 5, "level": 5, "given": 3, "instanc": 3, "check": 3, "knowledg": 3, "executor": 3, "enabl": 3, "api": 0, "doc": [], "raw": [], "html": [], "div": [], "wy": [], "menu": [], "href": [], "http": [], "vercel": [], "app": [], "btn": [], "primari": [], "do_stream": [2, 9], "initialize_ag": [2, 9], "customagentexecutor": 3, "20": 9}, "objects": {"": [[2, 0, 0, "-", "salesgpt"]], "salesgpt": [[3, 0, 0, "-", "agents"], [4, 0, 0, "-", "chains"], [5, 0, 0, "-", "logger"], [6, 0, 0, "-", "parsers"], [7, 0, 0, "-", "prompts"], [8, 0, 0, "-", "prompts_cn"], [9, 0, 0, "-", "salesgptapi"], [10, 0, 0, "-", "stages"], [11, 0, 0, "-", "templates"], [12, 0, 0, "-", "tools"], [13, 0, 0, "-", "version"]], "salesgpt.agents": [[3, 1, 1, "", "SalesGPT"]], "salesgpt.agents.SalesGPT": [[3, 2, 1, "", "acall"], [3, 2, 1, "", "acompletion_with_retry"], [3, 2, 1, "", "astep"], [3, 3, 1, "", "company_business"], [3, 3, 1, "", "company_name"], [3, 3, 1, "", "company_values"], [3, 3, 1, "", "conversation_history"], [3, 3, 1, "", "conversation_purpose"], [3, 3, 1, "", "conversation_stage_dict"], [3, 3, 1, "", "conversation_stage_id"], [3, 3, 1, "", "conversation_type"], [3, 3, 1, "", "current_conversation_stage"], [3, 2, 1, "", "determine_conversation_stage"], [3, 2, 1, "", "from_llm"], [3, 2, 1, "", "human_step"], [3, 4, 1, "", "input_keys"], [3, 3, 1, "", "knowledge_base"], [3, 3, 1, "", "model_name"], [3, 4, 1, "", "output_keys"], [3, 2, 1, "", "retrieve_conversation_stage"], [3, 3, 1, "", "sales_agent_executor"], [3, 3, 1, "", "sales_conversation_utterance_chain"], [3, 3, 1, "", "salesperson_name"], [3, 3, 1, "", "salesperson_role"], [3, 2, 1, "", "seed_agent"], [3, 3, 1, "", "stage_analyzer_chain"], [3, 2, 1, "", "step"], [3, 3, 1, "", "use_tools"]], "salesgpt.chains": [[4, 1, 1, "", "SalesConversationChain"], [4, 1, 1, "", "StageAnalyzerChain"]], "salesgpt.chains.SalesConversationChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.chains.StageAnalyzerChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.logger": [[5, 1, 1, "", "TimeFilter"], [5, 5, 1, "", "time_logger"]], "salesgpt.logger.TimeFilter": [[5, 2, 1, "", "filter"]], "salesgpt.parsers": [[6, 1, 1, "", "SalesConvoOutputParser"]], "salesgpt.parsers.SalesConvoOutputParser": [[6, 3, 1, "", "ai_prefix"], [6, 2, 1, "", "get_format_instructions"], [6, 2, 1, "", "parse"], [6, 3, 1, "", "verbose"]], "salesgpt.salesgptapi": [[9, 1, 1, "", "SalesGPTAPI"]], "salesgpt.salesgptapi.SalesGPTAPI": [[9, 3, 1, "", "USE_TOOLS"], [9, 2, 1, "", "do"], [9, 2, 1, "", "do_stream"], [9, 2, 1, "", "initialize_agent"]], "salesgpt.templates": [[11, 1, 1, "", "CustomPromptTemplateForTools"]], "salesgpt.templates.CustomPromptTemplateForTools": [[11, 2, 1, "", "format"], [11, 3, 1, "", "template"], [11, 3, 1, "", "tools_getter"]], "salesgpt.tools": [[12, 5, 1, "", "get_tools"], [12, 5, 1, "", "setup_knowledge_base"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"welcom": 0, "salesgpt": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "": 0, "document": 0, "indic": 0, "tabl": 0, "run": [], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "run_api": [], "packag": 2, "submodul": 2, "agent": 3, "chain": 4, "logger": 5, "parser": 6, "prompt": 7, "prompts_cn": 8, "salesgptapi": 9, "stage": 10, "templat": 11, "tool": 12, "version": 13, "content": [0, 2], "note": [], "paramet": 3, "rais": 3, "return": 3}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Welcome to SalesGPT\u2019s documentation!": [[0, "welcome-to-salesgpt-s-documentation"]], "Contents:": [[0, null], [2, null]], "Indices and tables": [[0, "indices-and-tables"]], "salesgpt": [[1, "salesgpt"]], "salesgpt package": [[2, "salesgpt-package"]], "Submodules": [[2, "submodules"]], "Module contents": [[2, "module-salesgpt"]], "salesgpt.agents module": [[3, "module-salesgpt.agents"]], "Parameters": [[3, "parameters"], [3, "id1"], [3, "id3"]], "Raises": [[3, "raises"], [3, "id2"]], "Returns": [[3, "returns"], [3, "id4"]], "salesgpt.chains module": [[4, "module-salesgpt.chains"]], "salesgpt.logger module": [[5, "module-salesgpt.logger"]], "salesgpt.parsers module": [[6, "module-salesgpt.parsers"]], "salesgpt.prompts module": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn module": [[8, "module-salesgpt.prompts_cn"]], "salesgpt.salesgptapi module": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages module": [[10, "module-salesgpt.stages"]], "salesgpt.templates module": [[11, "module-salesgpt.templates"]], "salesgpt.tools module": [[12, "module-salesgpt.tools"]], "salesgpt.version module": [[13, "module-salesgpt.version"]]}, "indexentries": {"module": [[2, "module-salesgpt"], [3, "module-salesgpt.agents"], [4, "module-salesgpt.chains"], [5, "module-salesgpt.logger"], [6, "module-salesgpt.parsers"], [7, "module-salesgpt.prompts"], [8, "module-salesgpt.prompts_cn"], [9, "module-salesgpt.salesgptapi"], [10, "module-salesgpt.stages"], [11, "module-salesgpt.templates"], [12, "module-salesgpt.tools"], [13, "module-salesgpt.version"]], "salesgpt": [[2, "module-salesgpt"]], "salesgpt (class in salesgpt.agents)": [[3, "salesgpt.agents.SalesGPT"]], "acall() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acall"]], "acompletion_with_retry() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acompletion_with_retry"]], "astep() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.astep"]], "company_business (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_business"]], "company_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_name"]], "company_values (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_values"]], "conversation_history (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_history"]], "conversation_purpose (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_purpose"]], "conversation_stage_dict (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_dict"]], "conversation_stage_id (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_id"]], "conversation_type (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_type"]], "current_conversation_stage (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.current_conversation_stage"]], "determine_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.determine_conversation_stage"]], "from_llm() (salesgpt.agents.salesgpt class method)": [[3, "salesgpt.agents.SalesGPT.from_llm"]], "human_step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.human_step"]], "input_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.input_keys"]], "knowledge_base (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.knowledge_base"]], "model_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.model_name"]], "output_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.output_keys"]], "retrieve_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.retrieve_conversation_stage"]], "sales_agent_executor (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_agent_executor"]], "sales_conversation_utterance_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_conversation_utterance_chain"]], "salesgpt.agents": [[3, "module-salesgpt.agents"]], "salesperson_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_name"]], "salesperson_role (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_role"]], "seed_agent() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.seed_agent"]], "stage_analyzer_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.stage_analyzer_chain"]], "step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.step"]], "use_tools (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.use_tools"]], "salesconversationchain (class in salesgpt.chains)": [[4, "salesgpt.chains.SalesConversationChain"]], "stageanalyzerchain (class in salesgpt.chains)": [[4, "salesgpt.chains.StageAnalyzerChain"]], "from_llm() (salesgpt.chains.salesconversationchain class method)": [[4, "salesgpt.chains.SalesConversationChain.from_llm"]], "from_llm() (salesgpt.chains.stageanalyzerchain class method)": [[4, "salesgpt.chains.StageAnalyzerChain.from_llm"]], "salesgpt.chains": [[4, "module-salesgpt.chains"]], "timefilter (class in salesgpt.logger)": [[5, "salesgpt.logger.TimeFilter"]], "filter() (salesgpt.logger.timefilter method)": [[5, "salesgpt.logger.TimeFilter.filter"]], "salesgpt.logger": [[5, "module-salesgpt.logger"]], "time_logger() (in module salesgpt.logger)": [[5, "salesgpt.logger.time_logger"]], "salesconvooutputparser (class in salesgpt.parsers)": [[6, "salesgpt.parsers.SalesConvoOutputParser"]], "ai_prefix (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.ai_prefix"]], "get_format_instructions() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.get_format_instructions"]], "parse() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.parse"]], "salesgpt.parsers": [[6, "module-salesgpt.parsers"]], "verbose (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.verbose"]], "salesgpt.prompts": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn": [[8, "module-salesgpt.prompts_cn"]], "salesgptapi (class in salesgpt.salesgptapi)": [[9, "salesgpt.salesgptapi.SalesGPTAPI"]], "use_tools (salesgpt.salesgptapi.salesgptapi attribute)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.USE_TOOLS"]], "do() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do"]], "do_stream() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do_stream"]], "initialize_agent() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.initialize_agent"]], "salesgpt.salesgptapi": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages": [[10, "module-salesgpt.stages"]], "customprompttemplatefortools (class in salesgpt.templates)": [[11, "salesgpt.templates.CustomPromptTemplateForTools"]], "format() (salesgpt.templates.customprompttemplatefortools method)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.format"]], "salesgpt.templates": [[11, "module-salesgpt.templates"]], "template (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.template"]], "tools_getter (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.tools_getter"]], "get_tools() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_tools"]], "salesgpt.tools": [[12, "module-salesgpt.tools"]], "setup_knowledge_base() (in module salesgpt.tools)": [[12, "salesgpt.tools.setup_knowledge_base"]], "salesgpt.version": [[13, "module-salesgpt.version"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["index", "salesgpt/modules", "salesgpt/salesgpt", "salesgpt/salesgpt.agents", "salesgpt/salesgpt.chains", "salesgpt/salesgpt.logger", "salesgpt/salesgpt.parsers", "salesgpt/salesgpt.prompts", "salesgpt/salesgpt.prompts_cn", "salesgpt/salesgpt.salesgptapi", "salesgpt/salesgpt.stages", "salesgpt/salesgpt.templates", "salesgpt/salesgpt.tools", "salesgpt/salesgpt.version"], "filenames": ["index.rst", "salesgpt/modules.rst", "salesgpt/salesgpt.rst", "salesgpt/salesgpt.agents.rst", "salesgpt/salesgpt.chains.rst", "salesgpt/salesgpt.logger.rst", "salesgpt/salesgpt.parsers.rst", "salesgpt/salesgpt.prompts.rst", "salesgpt/salesgpt.prompts_cn.rst", "salesgpt/salesgpt.salesgptapi.rst", "salesgpt/salesgpt.stages.rst", "salesgpt/salesgpt.templates.rst", "salesgpt/salesgpt.tools.rst", "salesgpt/salesgpt.version.rst"], "titles": ["Welcome to SalesGPT\u2019s documentation!", "salesgpt", "salesgpt package", "salesgpt.agents module", "salesgpt.chains module", "salesgpt.logger module", "salesgpt.parsers module", "salesgpt.prompts module", "salesgpt.prompts_cn module", "salesgpt.salesgptapi module", "salesgpt.stages module", "salesgpt.templates module", "salesgpt.tools module", "salesgpt.version module"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": 0, "run": [], "run_api": [], "messagelist": [], "conversation_histori": [2, 3, 9], "human_sai": [], "model_config": [], "model_field": [], "chat_with_sales_ag": [], "say_hello": [], "packag": 1, "submodul": 1, "agent": [0, 1, 2, 4, 6], "acal": [2, 3], "acompletion_with_retri": [2, 3], "astep": [2, 3], "company_busi": [2, 3], "company_nam": [2, 3], "company_valu": [2, 3], "conversation_purpos": [2, 3], "conversation_stage_dict": [2, 3], "conversation_stage_id": [2, 3], "conversation_typ": [2, 3], "current_conversation_stag": [2, 3], "determine_conversation_stag": [2, 3], "from_llm": [2, 3, 4], "human_step": [2, 3], "input_kei": [2, 3], "knowledge_bas": [2, 3], "model_nam": [2, 3, 9, 12], "output_kei": [2, 3, 4], "retrieve_conversation_stag": [2, 3], "sales_agent_executor": [2, 3], "sales_conversation_utterance_chain": [2, 3], "salesperson_nam": [2, 3], "salesperson_rol": [2, 3], "seed_ag": [2, 3], "stage_analyzer_chain": [2, 3], "step": [2, 3], "use_tool": [2, 3, 9], "chain": [0, 1, 2, 3], "salesconversationchain": [0, 1, 2, 3, 4], "stageanalyzerchain": [0, 1, 2, 3, 4], "logger": [0, 1, 2], "timefilt": [0, 1, 2, 5], "filter": [2, 5], "time_logg": [0, 1, 2, 5], "parser": [0, 1, 2, 4], "salesconvooutputpars": [0, 1, 2, 6], "ai_prefix": [2, 6], "get_format_instruct": [2, 6], "pars": [2, 6], "verbos": [2, 3, 4, 6, 9], "prompt": [0, 1, 2, 3, 4, 11], "prompts_cn": [0, 1, 2], "salesgptapi": [0, 1, 2], "do": [2, 9], "stage": [0, 1, 2, 3, 4], "templat": [0, 1, 2], "customprompttemplatefortool": [0, 1, 2, 11], "format": [2, 3, 6, 11], "tools_gett": [2, 11], "tool": [0, 1, 2, 3], "get_tool": [0, 1, 2, 12], "setup_knowledge_bas": [0, 1, 2, 12], "version": [0, 1, 2], "content": 1, "class": [3, 4, 5, 6, 9, 11], "list": [3, 4, 11], "str": [3, 4, 6, 9, 11, 12], "base": [3, 4, 5, 6, 9, 11, 12], "basemodel": [], "classvar": [], "configdict": [], "configur": [], "model": 3, "should": [3, 4, 5, 6, 12], "dictionari": 3, "conform": [], "pydant": [], "config": [], "dict": [3, 4, 11], "fieldinfo": 3, "annot": 3, "requir": 3, "true": [3, 4, 5, 9], "metadata": [3, 4], "about": [], "field": [], "defin": [], "map": 11, "name": [3, 4, 5, 6, 11], "thi": [0, 3, 4, 5], "replac": [], "__fields__": [], "from": 3, "v1": [], "async": [3, 9], "req": [], "memori": [3, 4], "basememori": [3, 4], "none": [3, 4, 6, 9, 11, 12], "callback": [3, 4], "basecallbackhandl": [3, 4], "basecallbackmanag": [3, 4], "callback_manag": [3, 4], "bool": [3, 4, 6, 9], "tag": [3, 4], "ani": [0, 3, 4, 5, 11], "1": 3, "introduct": 3, "start": [3, 5], "convers": [3, 4], "introduc": 3, "yourself": 3, "your": 3, "compani": 3, "Be": 3, "polit": 3, "respect": 3, "while": 3, "keep": 3, "tone": 3, "profession": 3, "greet": 3, "welcom": 3, "alwai": 3, "clarifi": 3, "reason": 3, "why": 3, "you": [3, 4], "ar": [0, 3, 4, 5], "call": [3, 12], "nonetyp": 3, "agentexecutor": [], "retrievalqa": 3, "2": 3, "qualif": 3, "qualifi": 3, "prospect": 3, "confirm": 3, "thei": 3, "right": 3, "person": 3, "talk": 3, "regard": 3, "product": [3, 12], "servic": 3, "ensur": 3, "have": [0, 3], "author": 3, "make": 3, "purchas": 3, "decis": 3, "3": [3, 9, 12], "valu": 3, "proposit": 3, "briefli": 3, "explain": 3, "how": [3, 6], "can": 3, "benefit": 3, "focu": 3, "uniqu": 3, "sell": [3, 4], "point": 3, "set": 3, "apart": 3, "competitor": 3, "4": 3, "need": 3, "analysi": 3, "ask": 3, "open": 3, "end": [3, 5], "question": 3, "uncov": 3, "": 3, "pain": 3, "listen": 3, "carefulli": 3, "respons": [3, 4], "take": 3, "note": 3, "5": [3, 9, 12], "solut": 3, "present": 3, "address": 3, "6": 3, "object": [3, 9], "handl": 3, "mai": [3, 5], "prepar": 3, "provid": 3, "evid": 3, "testimoni": 3, "support": 3, "claim": 3, "7": 3, "close": 3, "sale": [3, 4], "propos": 3, "next": [3, 4], "could": 3, "demo": 3, "trial": 3, "meet": 3, "maker": 3, "summar": 3, "what": 3, "ha": 3, "been": 3, "discuss": 3, "reiter": 3, "8": 3, "It": [3, 5], "time": [3, 5], "i": [3, 5, 12], "noth": 3, "els": 3, "said": 3, "gpt": [3, 9, 12], "turbo": [3, 9, 12], "0613": 3, "fals": [3, 4, 5, 6], "ted": 3, "lasso": 3, "busi": 3, "develop": 3, "repres": 3, "sleep": 3, "haven": 3, "premium": 3, "mattress": 3, "custom": [3, 12], "most": 3, "comfort": 3, "experi": 3, "possibl": 3, "we": [0, 3, 12], "offer": 3, "rang": 3, "high": [3, 12], "qualiti": 3, "pillow": 3, "bed": 3, "accessori": 3, "design": 3, "our": 3, "mission": 3, "help": 3, "peopl": 3, "achiev": 3, "better": 3, "night": 3, "them": 3, "best": 3, "believ": 3, "essenti": 3, "overal": 3, "health": 3, "well": 3, "being": 3, "commit": 3, "optim": 3, "except": 3, "find": 3, "out": 3, "whether": 3, "look": 3, "via": 3, "bui": 3, "premier": 3, "control": 3, "arg": [3, 5, 11], "kwarg": [3, 11], "asynchron": 3, "execut": [3, 5], "input": [3, 11], "singl": [3, 12], "expect": [], "onli": [], "one": 3, "param": [], "contain": [], "all": [], "specifi": 5, "return_only_output": [], "return": [5, 11], "output": [3, 6], "If": [3, 5], "new": [], "kei": 3, "gener": [3, 4, 12], "both": [], "default": 3, "us": 3, "These": [], "addit": 3, "pass": [3, 11], "dure": [], "construct": [], "runtim": [], "propag": [], "other": [], "string": [3, 11, 12], "option": 3, "associ": [], "include_run_info": [], "includ": 12, "info": 5, "A": [3, 11], "llm": [3, 4, 6], "tenac": 3, "retri": 3, "complet": 3, "stream": 3, "manipul": 3, "chunk": 3, "downstream": 3, "applic": 3, "classmethod": [3, 4], "chatlitellm": [3, 4], "initi": 3, "human_input": [3, 9], "properti": 3, "baseprompttempl": 4, "runnabl": 4, "promptvalu": 4, "basemessag": 4, "text": [4, 6, 12], "output_pars": [4, 11], "basellmoutputpars": 4, "return_final_onli": 4, "llm_kwarg": 4, "llmchain": 4, "utter": [3, 4], "use_custom_prompt": 4, "custom_prompt": 4, "an": [3, 4, 12], "ai": [3, 4, 6], "me": 4, "pencil": 4, "get": [3, 4], "analyz": [3, 4], "which": [3, 4], "move": 4, "record": 5, "determin": [3, 5], "log": 5, "otherwis": [3, 5], "deem": 5, "appropri": 5, "modifi": 5, "place": 5, "func": 5, "decor": [3, 5], "function": [3, 5], "taken": 5, "agentoutputpars": 6, "instruct": 6, "agentact": 6, "agentfinish": 6, "action": 6, "finish": 6, "config_path": 9, "max_num_turn": 9, "int": 9, "10": [], "input_vari": 11, "input_typ": 11, "baseoutputpars": 11, "partial_vari": 11, "callabl": [5, 11], "stringprompttempl": 11, "argument": [3, 11], "exampl": [9, 11], "variable1": 11, "foo": 11, "product_catalog": [9, 12], "assum": 12, "catalog": 12, "simpli": 12, "inform": 13, "red": [], "just": 0, "begun": 0, "build": 0, "websit": 0, "still": 0, "activ": 0, "work": [0, 12], "suggest": 0, "improv": 0, "readabl": 0, "desir": 0, "pleas": 0, "contact": 0, "chemik": 0, "bit": 0, "github": 0, "more": [], "add": 3, "toctre": [], "maxdepth": [], "caption": [], "type": [], "variabl": [], "sequenc": 4, "tupl": [], "ellipsi": [], "extra": [], "deprec": [], "sinc": [], "0": [], "ainvok": [], "instead": [], "method": 3, "implement": [], "yet": [], "length": [], "arbitrari": [], "keyword": 3, "rais": [], "notimplementederror": [], "current": 3, "indic": 3, "librari": 3, "case": 3, "failur": 3, "creat": 3, "_create_retry_decor": 3, "appli": 3, "_completion_with_retri": 3, "actual": 3, "The": [3, 5], "languag": 3, "result": 3, "fail": 3, "after": [3, 5], "maximum": 3, "number": 3, "_acal": 3, "empti": 3, "flag": 3, "histori": 3, "join": 3, "each": 3, "entri": 3, "separ": 3, "newlin": 3, "charact": 3, "id": 3, "also": 3, "print": 3, "retriev": 3, "correspond": 3, "final": 3, "process": 3, "human": 3, "append": 3, "ad": 3, "user": 3, "begin": 3, "end_of_turn": 3, "overridden": 3, "subclass": 3, "extract": 3, "data": 3, "up": 3, "found": 3, "seed": 3, "clear": 3, "reset": 3, "_call": 3, "befor": 5, "calcul": 5, "level": [5, 12], "given": 3, "instanc": 3, "check": 3, "knowledg": 3, "executor": 3, "enabl": 3, "api": [0, 12], "doc": [], "raw": [], "html": [], "div": [], "wy": [], "menu": [], "href": [], "http": [], "vercel": [], "app": [], "btn": [], "primari": [], "do_stream": [2, 9], "initialize_ag": [2, 9], "customagentexecutor": 3, "20": 9, "completion_bedrock": [0, 1, 2, 12], "generate_calendly_invitation_link": [0, 1, 2, 12], "generate_stripe_payment_link": [0, 1, 2, 12], "get_mail_body_subject_from_queri": [0, 1, 2, 12], "get_product_id_from_queri": [0, 1, 2, 12], "send_email_tool": [0, 1, 2, 12], "send_email_with_gmail": [0, 1, 2, 12], "adetermine_conversation_stag": [2, 3], "overrid": 3, "temporarili": 3, "state": 3, "either": 3, "messag": [3, 12], "sample_product_catalog": 9, "txt": 9, "model_id": 12, "system_prompt": 12, "max_token": 12, "1000": 12, "anthrop": 12, "claud": 12, "queri": 12, "calendli": 12, "invit": 12, "link": 12, "stripe": 12, "payment": 12, "product_price_id_mapping_path": 12, "send": 12, "email": 12, "email_detail": 12, "env": 12, "gmail_mail": 12, "gmail_app_password": 12, "correctli": 12}, "objects": {"": [[2, 0, 0, "-", "salesgpt"]], "salesgpt": [[3, 0, 0, "-", "agents"], [4, 0, 0, "-", "chains"], [5, 0, 0, "-", "logger"], [6, 0, 0, "-", "parsers"], [7, 0, 0, "-", "prompts"], [8, 0, 0, "-", "prompts_cn"], [9, 0, 0, "-", "salesgptapi"], [10, 0, 0, "-", "stages"], [11, 0, 0, "-", "templates"], [12, 0, 0, "-", "tools"], [13, 0, 0, "-", "version"]], "salesgpt.agents": [[3, 1, 1, "", "SalesGPT"]], "salesgpt.agents.SalesGPT": [[3, 2, 1, "", "acall"], [3, 2, 1, "", "acompletion_with_retry"], [3, 2, 1, "", "adetermine_conversation_stage"], [3, 2, 1, "", "astep"], [3, 3, 1, "", "company_business"], [3, 3, 1, "", "company_name"], [3, 3, 1, "", "company_values"], [3, 3, 1, "", "conversation_history"], [3, 3, 1, "", "conversation_purpose"], [3, 3, 1, "", "conversation_stage_dict"], [3, 3, 1, "", "conversation_stage_id"], [3, 3, 1, "", "conversation_type"], [3, 3, 1, "", "current_conversation_stage"], [3, 2, 1, "", "determine_conversation_stage"], [3, 2, 1, "", "from_llm"], [3, 2, 1, "", "human_step"], [3, 4, 1, "", "input_keys"], [3, 3, 1, "", "knowledge_base"], [3, 3, 1, "", "model_name"], [3, 4, 1, "", "output_keys"], [3, 2, 1, "", "retrieve_conversation_stage"], [3, 3, 1, "", "sales_agent_executor"], [3, 3, 1, "", "sales_conversation_utterance_chain"], [3, 3, 1, "", "salesperson_name"], [3, 3, 1, "", "salesperson_role"], [3, 2, 1, "", "seed_agent"], [3, 3, 1, "", "stage_analyzer_chain"], [3, 2, 1, "", "step"], [3, 3, 1, "", "use_tools"]], "salesgpt.chains": [[4, 1, 1, "", "SalesConversationChain"], [4, 1, 1, "", "StageAnalyzerChain"]], "salesgpt.chains.SalesConversationChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.chains.StageAnalyzerChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.logger": [[5, 1, 1, "", "TimeFilter"], [5, 5, 1, "", "time_logger"]], "salesgpt.logger.TimeFilter": [[5, 2, 1, "", "filter"]], "salesgpt.parsers": [[6, 1, 1, "", "SalesConvoOutputParser"]], "salesgpt.parsers.SalesConvoOutputParser": [[6, 3, 1, "", "ai_prefix"], [6, 2, 1, "", "get_format_instructions"], [6, 2, 1, "", "parse"], [6, 3, 1, "", "verbose"]], "salesgpt.salesgptapi": [[9, 1, 1, "", "SalesGPTAPI"]], "salesgpt.salesgptapi.SalesGPTAPI": [[9, 2, 1, "", "do"], [9, 2, 1, "", "do_stream"], [9, 2, 1, "", "initialize_agent"]], "salesgpt.templates": [[11, 1, 1, "", "CustomPromptTemplateForTools"]], "salesgpt.templates.CustomPromptTemplateForTools": [[11, 2, 1, "", "format"], [11, 3, 1, "", "template"], [11, 3, 1, "", "tools_getter"]], "salesgpt.tools": [[12, 5, 1, "", "completion_bedrock"], [12, 5, 1, "", "generate_calendly_invitation_link"], [12, 5, 1, "", "generate_stripe_payment_link"], [12, 5, 1, "", "get_mail_body_subject_from_query"], [12, 5, 1, "", "get_product_id_from_query"], [12, 5, 1, "", "get_tools"], [12, 5, 1, "", "send_email_tool"], [12, 5, 1, "", "send_email_with_gmail"], [12, 5, 1, "", "setup_knowledge_base"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"welcom": 0, "salesgpt": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "": 0, "document": 0, "indic": 0, "tabl": 0, "run": [], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "run_api": [], "packag": 2, "submodul": 2, "agent": 3, "chain": 4, "logger": 5, "parser": 6, "prompt": 7, "prompts_cn": 8, "salesgptapi": 9, "stage": 10, "templat": 11, "tool": 12, "version": 13, "content": [0, 2], "note": [], "paramet": 3, "rais": 3, "return": 3}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Welcome to SalesGPT\u2019s documentation!": [[0, "welcome-to-salesgpt-s-documentation"]], "Contents:": [[0, null], [2, null]], "Indices and tables": [[0, "indices-and-tables"]], "salesgpt": [[1, "salesgpt"]], "salesgpt package": [[2, "salesgpt-package"]], "Submodules": [[2, "submodules"]], "Module contents": [[2, "module-salesgpt"]], "salesgpt.agents module": [[3, "module-salesgpt.agents"]], "Parameters": [[3, "parameters"], [3, "id1"], [3, "id3"]], "Returns": [[3, "returns"], [3, "id2"], [3, "id4"]], "Raises": [[3, "raises"]], "salesgpt.chains module": [[4, "module-salesgpt.chains"]], "salesgpt.logger module": [[5, "module-salesgpt.logger"]], "salesgpt.parsers module": [[6, "module-salesgpt.parsers"]], "salesgpt.prompts module": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn module": [[8, "module-salesgpt.prompts_cn"]], "salesgpt.salesgptapi module": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages module": [[10, "module-salesgpt.stages"]], "salesgpt.templates module": [[11, "module-salesgpt.templates"]], "salesgpt.tools module": [[12, "module-salesgpt.tools"]], "salesgpt.version module": [[13, "module-salesgpt.version"]]}, "indexentries": {"module": [[2, "module-salesgpt"], [3, "module-salesgpt.agents"], [4, "module-salesgpt.chains"], [5, "module-salesgpt.logger"], [6, "module-salesgpt.parsers"], [7, "module-salesgpt.prompts"], [8, "module-salesgpt.prompts_cn"], [9, "module-salesgpt.salesgptapi"], [10, "module-salesgpt.stages"], [11, "module-salesgpt.templates"], [12, "module-salesgpt.tools"], [13, "module-salesgpt.version"]], "salesgpt": [[2, "module-salesgpt"]], "salesgpt (class in salesgpt.agents)": [[3, "salesgpt.agents.SalesGPT"]], "acall() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acall"]], "acompletion_with_retry() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acompletion_with_retry"]], "adetermine_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.adetermine_conversation_stage"]], "astep() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.astep"]], "company_business (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_business"]], "company_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_name"]], "company_values (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_values"]], "conversation_history (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_history"]], "conversation_purpose (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_purpose"]], "conversation_stage_dict (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_dict"]], "conversation_stage_id (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_id"]], "conversation_type (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_type"]], "current_conversation_stage (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.current_conversation_stage"]], "determine_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.determine_conversation_stage"]], "from_llm() (salesgpt.agents.salesgpt class method)": [[3, "salesgpt.agents.SalesGPT.from_llm"]], "human_step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.human_step"]], "input_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.input_keys"]], "knowledge_base (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.knowledge_base"]], "model_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.model_name"]], "output_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.output_keys"]], "retrieve_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.retrieve_conversation_stage"]], "sales_agent_executor (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_agent_executor"]], "sales_conversation_utterance_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_conversation_utterance_chain"]], "salesgpt.agents": [[3, "module-salesgpt.agents"]], "salesperson_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_name"]], "salesperson_role (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_role"]], "seed_agent() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.seed_agent"]], "stage_analyzer_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.stage_analyzer_chain"]], "step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.step"]], "use_tools (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.use_tools"]], "salesconversationchain (class in salesgpt.chains)": [[4, "salesgpt.chains.SalesConversationChain"]], "stageanalyzerchain (class in salesgpt.chains)": [[4, "salesgpt.chains.StageAnalyzerChain"]], "from_llm() (salesgpt.chains.salesconversationchain class method)": [[4, "salesgpt.chains.SalesConversationChain.from_llm"]], "from_llm() (salesgpt.chains.stageanalyzerchain class method)": [[4, "salesgpt.chains.StageAnalyzerChain.from_llm"]], "salesgpt.chains": [[4, "module-salesgpt.chains"]], "timefilter (class in salesgpt.logger)": [[5, "salesgpt.logger.TimeFilter"]], "filter() (salesgpt.logger.timefilter method)": [[5, "salesgpt.logger.TimeFilter.filter"]], "salesgpt.logger": [[5, "module-salesgpt.logger"]], "time_logger() (in module salesgpt.logger)": [[5, "salesgpt.logger.time_logger"]], "salesconvooutputparser (class in salesgpt.parsers)": [[6, "salesgpt.parsers.SalesConvoOutputParser"]], "ai_prefix (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.ai_prefix"]], "get_format_instructions() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.get_format_instructions"]], "parse() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.parse"]], "salesgpt.parsers": [[6, "module-salesgpt.parsers"]], "verbose (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.verbose"]], "salesgpt.prompts": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn": [[8, "module-salesgpt.prompts_cn"]], "salesgptapi (class in salesgpt.salesgptapi)": [[9, "salesgpt.salesgptapi.SalesGPTAPI"]], "do() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do"]], "do_stream() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do_stream"]], "initialize_agent() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.initialize_agent"]], "salesgpt.salesgptapi": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages": [[10, "module-salesgpt.stages"]], "customprompttemplatefortools (class in salesgpt.templates)": [[11, "salesgpt.templates.CustomPromptTemplateForTools"]], "format() (salesgpt.templates.customprompttemplatefortools method)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.format"]], "salesgpt.templates": [[11, "module-salesgpt.templates"]], "template (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.template"]], "tools_getter (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.tools_getter"]], "completion_bedrock() (in module salesgpt.tools)": [[12, "salesgpt.tools.completion_bedrock"]], "generate_calendly_invitation_link() (in module salesgpt.tools)": [[12, "salesgpt.tools.generate_calendly_invitation_link"]], "generate_stripe_payment_link() (in module salesgpt.tools)": [[12, "salesgpt.tools.generate_stripe_payment_link"]], "get_mail_body_subject_from_query() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_mail_body_subject_from_query"]], "get_product_id_from_query() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_product_id_from_query"]], "get_tools() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_tools"]], "salesgpt.tools": [[12, "module-salesgpt.tools"]], "send_email_tool() (in module salesgpt.tools)": [[12, "salesgpt.tools.send_email_tool"]], "send_email_with_gmail() (in module salesgpt.tools)": [[12, "salesgpt.tools.send_email_with_gmail"]], "setup_knowledge_base() (in module salesgpt.tools)": [[12, "salesgpt.tools.setup_knowledge_base"]], "salesgpt.version": [[13, "module-salesgpt.version"]]}}) \ No newline at end of file diff --git a/api-website/conf.py b/api-website/conf.py index e400eb38..3286a628 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -14,6 +14,11 @@ import sys sys.path.insert(0, os.path.abspath("..")) # Source path +# Load environment variables from .env file in the parent directory +from dotenv import load_dotenv +load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env')) +# Load GTAG_API from the .env file +GTAG_API = os.getenv("GTAG_API", "") # -- Project information ----------------------------------------------------- @@ -28,23 +33,18 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -<<<<<<< HEAD extensions = ['sphinx.ext.autodoc', #"sphinxcontrib.googleanalytics", #'sphinxcontrib.gtagjs' ] -#googleanalytics_id = "GTM-NX3SZD79" - -#gtagjs_ids = ['GTM-NX3SZD79'] - -GOOGLE_TAG_MANAGER_SNIPPET = """ +GOOGLE_TAG_MANAGER_SNIPPET = f""" - +}})(window,document,'script','dataLayer',{GTAG_API}); """ @@ -58,12 +58,9 @@ def setup(app): templates_path = ['_templates'] -======= -extensions = ["sphinx.ext.autodoc"] -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] ->>>>>>> 2ebf6b7e8f2cecc5d42775c72d004d428912a2fe + + # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 22e6843d..1e8e8698 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -3,6 +3,11 @@ // (when paired with `@ts-check`). // There are various equivalent ways to declare your Docusaurus config. // See: https://docusaurus.io/docs/api/docusaurus-config +const dotenv = require('dotenv'); +dotenv.config({ path: '../.env' }); + +const GTAG_DOC = process.env.GTAG_DOC; +const GTMAN_DOC = process.env.GTMAN_DOC; import {themes as prismThemes} from 'prism-react-renderer'; @@ -59,11 +64,11 @@ const config = { customCss: './src/css/custom.css', }, gtag: { - trackingID: 'G-EP3BJCDSBW', + trackingID: GTAG_DOC, anonymizeIP: true, }, googleTagManager: { - containerId: 'GTM-W7H24KQZ', + containerId: GTMAN_DOC, }, }), ], From fb7154246e3834f7c45ae0ba1192ac4e28d33cb0 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 15:09:49 +0200 Subject: [PATCH 23/47] web improvements v1 --- website/docusaurus.config.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 1e8e8698..403b67c4 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -3,8 +3,10 @@ // (when paired with `@ts-check`). // There are various equivalent ways to declare your Docusaurus config. // See: https://docusaurus.io/docs/api/docusaurus-config -const dotenv = require('dotenv'); -dotenv.config({ path: '../.env' }); + +// Removed dotenv require and config as it's causing module not found error +// const dotenv = require('dotenv'); +// dotenv.config({ path: '../.env' }); const GTAG_DOC = process.env.GTAG_DOC; const GTMAN_DOC = process.env.GTMAN_DOC; From 9648bc8ca1196a2befe238143db71e00949bdb56 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 16:02:10 +0200 Subject: [PATCH 24/47] web improvements v2 --- api-website/conf.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index 3286a628..a5fc934c 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -15,10 +15,10 @@ sys.path.insert(0, os.path.abspath("..")) # Source path # Load environment variables from .env file in the parent directory -from dotenv import load_dotenv -load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env')) +#from dotenv import load_dotenv +#load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env')) # Load GTAG_API from the .env file -GTAG_API = os.getenv("GTAG_API", "") +GTAG_API = os.environ.get("GTAG_API", "") # -- Project information ----------------------------------------------------- From 9ca2a4b1fe0a8ad7a3645b5f9927b685f7d81d60 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 16:17:31 +0200 Subject: [PATCH 25/47] web improvements v3 --- api-website/conf.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index a5fc934c..9b0c1304 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -44,11 +44,10 @@ 'gtm.start': new Date().getTime(),event:'gtm.js'}});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); -}})(window,document,'script','dataLayer',{GTAG_API}); +}})(window,document,'script','dataLayer','{GTAG_API}'); """ - # 2. Create a setup() function if you don't already have one. # (If you do, just add to your existing setup() function.) def setup(app): From 12d54343765ba33f6aa4227f6c22621cc6ba54c2 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 16:30:54 +0200 Subject: [PATCH 26/47] web improvements v4 --- api-website/conf.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index 9b0c1304..f2290235 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -38,16 +38,22 @@ #'sphinxcontrib.gtagjs' ] -GOOGLE_TAG_MANAGER_SNIPPET = f""" +static_before = """ - +})(window,document,'script','dataLayer','""" + +dynamic_part = f"{GTAG_API}" + +static_after = """'); """ +GOOGLE_TAG_MANAGER_SNIPPET = static_before + dynamic_part + static_after + # 2. Create a setup() function if you don't already have one. # (If you do, just add to your existing setup() function.) def setup(app): From cb9aab467b29bec22c5ab306a0dcd95c396b9b50 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 16:36:14 +0200 Subject: [PATCH 27/47] web improvements v5 --- api-website/conf.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index f2290235..e9d0a2d7 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -38,22 +38,16 @@ #'sphinxcontrib.gtagjs' ] -static_before = """ +GOOGLE_TAG_MANAGER_SNIPPET = """ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); """ -GOOGLE_TAG_MANAGER_SNIPPET = static_before + dynamic_part + static_after - # 2. Create a setup() function if you don't already have one. # (If you do, just add to your existing setup() function.) def setup(app): @@ -61,12 +55,8 @@ def setup(app): # the `body` into the html inside a From f12633909d2d6de713298315dd0f31a099b6c189 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 16:50:46 +0200 Subject: [PATCH 29/47] web improvements v7 --- api-website/conf.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api-website/conf.py b/api-website/conf.py index a3533ebb..286fdea6 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -34,10 +34,12 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.autodoc', - #"sphinxcontrib.googleanalytics", + "sphinxcontrib.googleanalytics", #'sphinxcontrib.gtagjs' ] +googleanalytics_id = "G-N73Z2D8W81" + GOOGLE_TAG_MANAGER_SNIPPET = """ - -""" - -# 2. Create a setup() function if you don't already have one. -# (If you do, just add to your existing setup() function.) def setup(app): - # 3. Tell Sphinx to add your JS code. Sphinx will insert - # the `body` into the html inside a + """ +googleanalytics_id = "G-VH1ZNBVHSP" + def setup(app): - - app.add_javascript("https://www.googletagmanager.com/gtag/js?id=GTM-TTQZ3ZJ9") - app.add_javascript("google_analytics_tracker.js") -""" + app.add_js_file(None, body=GTAG_JS) + #app.add_javascript("https://www.googletagmanager.com/gtag/js?id=GTM-TTQZ3ZJ9") + #app.add_javascript("google_analytics_tracker.js") + templates_path = ['_templates'] # List of patterns, relative to source directory, that match files and From 3464f39a478bd7fcd68acbe6952e72de449dd2d1 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 17:39:58 +0200 Subject: [PATCH 38/47] web improvements v10.5 --- api-website/conf.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index 72800710..36e8f63e 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -38,15 +38,13 @@ #'sphinxcontrib.gtagjs' ] GTAG_JS = """ - - - + + + """ googleanalytics_id = "G-VH1ZNBVHSP" From e928e17e42682088dbc08f9cdf3ede34cb81f736 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 17:45:57 +0200 Subject: [PATCH 39/47] web improvements v10.6 --- api-website/conf.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index 36e8f63e..e5606294 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -34,9 +34,14 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.autodoc', - 'sphinxcontrib.googleanalytics', - #'sphinxcontrib.gtagjs' + #'sphinxcontrib.googleanalytics', + 'sphinxcontrib.gtagjs' ] + +gtagjs_ids = [ + 'GTM-NX3SZD79', +] + GTAG_JS = """ + + + + + Index — SalesGPT documentation @@ -20,13 +39,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/googleanalytics/README.html b/api-website/_build/html/googleanalytics/README.html new file mode 100644 index 00000000..b986d993 --- /dev/null +++ b/api-website/_build/html/googleanalytics/README.html @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + Google Analytics extension for Sphinx — SalesGPT documentation + + + + + + + + + + + + + + + + + + + + + + + +
                + + +
                + +
                +
                +
                + +
                +
                +
                +
                + +
                +

                Google Analytics extension for Sphinx

                +
                +
                author:
                +

                Domen Kožar <domen@dev.si>

                +
                +
                +
                +

                About

                +

                This extensions allows you to track generated html files +with Google Analytics web service.

                +
                +

                Installing from sphinx-contrib checkout

                +

                Checkout googleanalytics sphinx extension:

                +
                $ git clone https://github.com/sphinx-contrib/googleanalytics
                +
                +
                +

                Change into the googleanalytics directory:

                +
                $ cd googleanalytics
                +
                +
                +

                Install the module:

                +
                $ python setup.py install
                +
                +
                +
                +
                +

                Enabling the extension in Sphinx

                +

                Just add sphinxcontrib.googleanalytics to the list of extensions in the conf.py +file. For example:

                +
                extensions = ['sphinxcontrib.googleanalytics']
                +
                +
                +
                +
                +

                Configuration

                +

                For now one optional configuration is added to Sphinx. It can be set in +conf.py file:

                +
                +
                googleanalytics_id <string>:
                +
                UA id for your site, example::

                googleanalytics_id = ‘UA-123-123-123’

                +
                +
                +
                +
                googleanalytics_enabled <bool>:

                True by default, use it to turn off tracking.

                +
                +
                +
                +
                +
                + + +
                +
                +
                + +
                + +
                +

                © Copyright 2024, Filip-Michalsky.

                +
                + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
                +
                +
                + + + +
                +
                + + + + \ No newline at end of file diff --git a/api-website/_build/html/index.html b/api-website/_build/html/index.html index 38b1c6f0..2e117d64 100644 --- a/api-website/_build/html/index.html +++ b/api-website/_build/html/index.html @@ -3,6 +3,25 @@ + + + + + + + Welcome to SalesGPT’s documentation! — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/objects.inv b/api-website/_build/html/objects.inv index bf03955a7b8e17c58990dc0b5f01874aa5a8a3cb..3cc4c344cc3e01e1225be633122b008cf680890f 100644 GIT binary patch delta 1115 zcmV-h1f=_y3B?JJd4G}{ClG+|dJ0m>b>;Z#+t$W*`QVDmyHz<-Xr?9MWdQTD*7%gy z$m``v!q1F$^aIEe%Ecu^_t(%3P4}!O4D?zWB>Q)rXe|TuJJQ48oAJkdV>e!Gzpfpagx=HXalkq%)5i|9xttStJdKJ5MvZwS_5^^oOEyl z>aKSZu?^Km#Dj4QytGOR4Y$IF^M+g6nA=*Q?XCExmsP!Em2xAATUp7-|8eaB6F7_izIN?23h z1^%6)@N&zu6((>P#ju6Ox(ry+EfK%Bd~4i|A-r+B+7QZX8*^^g&PwI*PSHxRs%U^V z2B2C@L!Ks_u>J?A`fje6IIIS2gkaaa>0y7RGBygO%YWEmJ}m5Ea$Fxq=cS9m@r>i) z*Nv_$Z+xhKjwOlG?vNBbHAtmhH45wwp7=AoPKz*}_uC%)C#Z8mu~e|4+wx7m*v1+R zUJ2C^gMZygGs*@Z>q6)*HW#LE1$WtCc~&=&vEc5dEH?0iROYxu0o?HONKP;f8-EZ< z3$%&kS-9P!aliPKKf_1lbCB~^6heI|))j0DNOu!D<qD*bCEKR&W_@AQg`ob82NVUZFb@e&;u~e)^ zrvOPK(|S8=<*@WaClP5ou{O+`cr6Xlp<)vJS}$hV`xOW}p`Nx79;7^dmzdFkT9P{E h>@0VhveA+1$OfXC&3@L3V^Qxh&M$nT_zy(!B1^UDLd*aF delta 1069 zcmV+|1k(G(36}|wd4G=EHV}aCehL=tb=~BeTd+Wi9Euvq0zDG6G`88LM3z6BRZe}4 zzFwcC{E@Wu4@t$Qb6IG~;WyOGa5y6?!a(hXMq>ET@zyXv?~ob?f1MuI2i>us!~DZ9 z=wUTakUjKT6;=nK5@h|w{r}tM$;D+}vAQkbNl(v%9lqe0N7R;H0^aI`+Wp}N71Q4wy-5L#b&^_tk z4%ipM4Ak9kj*45%2On*n*7VBjc+6$xcGYtN03dsdXJ>158?)g^+t&O-Xsd{ScEe5Q1hT=xo zH-WpSD7@S=w)_P4qZnSHF*XBMG)urAZQp2nVo2ZEw>l8o*H&iDuB?{I?v2rsv#Mx- zHaMV~Pko*yJz>K)koC=6F>x3LSaZ&9xzqjomCD#4lz%Q`$9cc8$0%GMC*!4y+8Di@ zxiqU6>CV|7M_9cS^tF7Fuhy{# zjdxsjM1Nx&X<8a@V^wh7)$088z2G(*Y!`I{84dPaiedvlN@c<&2;in)MzVrw*z`aI zEzly#MY#FW__+C;kKr@&66Ct&1y^5-wFR35(%pqld#Wj6^cyTHAqq-d>Mw;;5K4PY zLnj!~Mb0d@0JVNJwlnWGKK`D@(NA1HO_f7B7Jp9ET)|(5j8m{|1wE5kIVIFk=Kf-v zP{*t928ELoa?bWT(~kDj(O0@Hw30W^#hWzZUI5wyVLJ_N8x1?&w`{Pt#tYS<4Pmse z#Y#7qMg;%6>`+<=yF!b;q zO`~2MeRhwlH?fvCPAHQ26PP`KfHX(b1@qrO|0-l9jf-l3YJOT-y%&^;;bEExwBN&P z1hvs@VcBM|3AR68JsTptvWoYAIu|I@=zr?Wh8Nc!{ZKLwBSD&Hd)2K{ooJpFb*t!f zVc6^{)j{RKQI~~I7bd}DW0D0&T?sl}m;_H9OO_m0u;^@Qnmv}cd3IFYqO+wXwySxU z;HQ!oT>>PP#I(}hX!TP>GmA6EzH!t%5Re_7<|b0*S6 nC(Dx5DW7J!aXLk3OD8rE*&L3uRu~KGzJ&RWOBDYD%clNMGQtqQ diff --git a/api-website/_build/html/py-modindex.html b/api-website/_build/html/py-modindex.html index dce4ae42..b9eb2efa 100644 --- a/api-website/_build/html/py-modindex.html +++ b/api-website/_build/html/py-modindex.html @@ -2,6 +2,25 @@ + + + + + + + Python Module Index — SalesGPT documentation @@ -20,13 +39,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/modules.html b/api-website/_build/html/salesgpt/modules.html index cb24eaea..333a9141 100644 --- a/api-website/_build/html/salesgpt/modules.html +++ b/api-website/_build/html/salesgpt/modules.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.agents.html b/api-website/_build/html/salesgpt/salesgpt.agents.html index 707a16b9..a00d79f2 100644 --- a/api-website/_build/html/salesgpt/salesgpt.agents.html +++ b/api-website/_build/html/salesgpt/salesgpt.agents.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.agents module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.chains.html b/api-website/_build/html/salesgpt/salesgpt.chains.html index d97b8096..7bd989fd 100644 --- a/api-website/_build/html/salesgpt/salesgpt.chains.html +++ b/api-website/_build/html/salesgpt/salesgpt.chains.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.chains module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.html b/api-website/_build/html/salesgpt/salesgpt.html index f85cc16c..889a6799 100644 --- a/api-website/_build/html/salesgpt/salesgpt.html +++ b/api-website/_build/html/salesgpt/salesgpt.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt package — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.logger.html b/api-website/_build/html/salesgpt/salesgpt.logger.html index 786eb3ff..89382399 100644 --- a/api-website/_build/html/salesgpt/salesgpt.logger.html +++ b/api-website/_build/html/salesgpt/salesgpt.logger.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.logger module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.parsers.html b/api-website/_build/html/salesgpt/salesgpt.parsers.html index e71da579..14b658f5 100644 --- a/api-website/_build/html/salesgpt/salesgpt.parsers.html +++ b/api-website/_build/html/salesgpt/salesgpt.parsers.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.parsers module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.prompts.html b/api-website/_build/html/salesgpt/salesgpt.prompts.html index a44b3f08..79b9f850 100644 --- a/api-website/_build/html/salesgpt/salesgpt.prompts.html +++ b/api-website/_build/html/salesgpt/salesgpt.prompts.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.prompts module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html b/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html index 3f8459cf..f1cb501c 100644 --- a/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html +++ b/api-website/_build/html/salesgpt/salesgpt.prompts_cn.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.prompts_cn module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html b/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html index 866e66e6..bd7ff8ff 100644 --- a/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html +++ b/api-website/_build/html/salesgpt/salesgpt.salesgptapi.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.salesgptapi module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.stages.html b/api-website/_build/html/salesgpt/salesgpt.stages.html index 0b3868c5..7272c285 100644 --- a/api-website/_build/html/salesgpt/salesgpt.stages.html +++ b/api-website/_build/html/salesgpt/salesgpt.stages.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.stages module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.templates.html b/api-website/_build/html/salesgpt/salesgpt.templates.html index 4cb04514..aadab80b 100644 --- a/api-website/_build/html/salesgpt/salesgpt.templates.html +++ b/api-website/_build/html/salesgpt/salesgpt.templates.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.templates module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.tools.html b/api-website/_build/html/salesgpt/salesgpt.tools.html index c7dad912..30f481c2 100644 --- a/api-website/_build/html/salesgpt/salesgpt.tools.html +++ b/api-website/_build/html/salesgpt/salesgpt.tools.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.tools module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/salesgpt/salesgpt.version.html b/api-website/_build/html/salesgpt/salesgpt.version.html index 921763cf..59574327 100644 --- a/api-website/_build/html/salesgpt/salesgpt.version.html +++ b/api-website/_build/html/salesgpt/salesgpt.version.html @@ -3,6 +3,25 @@ + + + + + + + salesgpt.version module — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/search.html b/api-website/_build/html/search.html index 71374236..4633bb08 100644 --- a/api-website/_build/html/search.html +++ b/api-website/_build/html/search.html @@ -2,6 +2,25 @@ + + + + + + + Search — SalesGPT documentation @@ -21,13 +40,15 @@ +})(window,document,'script','dataLayer','GTM-NX3SZD79'); + + diff --git a/api-website/_build/html/searchindex.js b/api-website/_build/html/searchindex.js index 4a4c5d5c..effa7ebf 100644 --- a/api-website/_build/html/searchindex.js +++ b/api-website/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["index", "salesgpt/modules", "salesgpt/salesgpt", "salesgpt/salesgpt.agents", "salesgpt/salesgpt.chains", "salesgpt/salesgpt.logger", "salesgpt/salesgpt.parsers", "salesgpt/salesgpt.prompts", "salesgpt/salesgpt.prompts_cn", "salesgpt/salesgpt.salesgptapi", "salesgpt/salesgpt.stages", "salesgpt/salesgpt.templates", "salesgpt/salesgpt.tools", "salesgpt/salesgpt.version"], "filenames": ["index.rst", "salesgpt/modules.rst", "salesgpt/salesgpt.rst", "salesgpt/salesgpt.agents.rst", "salesgpt/salesgpt.chains.rst", "salesgpt/salesgpt.logger.rst", "salesgpt/salesgpt.parsers.rst", "salesgpt/salesgpt.prompts.rst", "salesgpt/salesgpt.prompts_cn.rst", "salesgpt/salesgpt.salesgptapi.rst", "salesgpt/salesgpt.stages.rst", "salesgpt/salesgpt.templates.rst", "salesgpt/salesgpt.tools.rst", "salesgpt/salesgpt.version.rst"], "titles": ["Welcome to SalesGPT\u2019s documentation!", "salesgpt", "salesgpt package", "salesgpt.agents module", "salesgpt.chains module", "salesgpt.logger module", "salesgpt.parsers module", "salesgpt.prompts module", "salesgpt.prompts_cn module", "salesgpt.salesgptapi module", "salesgpt.stages module", "salesgpt.templates module", "salesgpt.tools module", "salesgpt.version module"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": 0, "run": [], "run_api": [], "messagelist": [], "conversation_histori": [2, 3, 9], "human_sai": [], "model_config": [], "model_field": [], "chat_with_sales_ag": [], "say_hello": [], "packag": 1, "submodul": 1, "agent": [0, 1, 2, 4, 6], "acal": [2, 3], "acompletion_with_retri": [2, 3], "astep": [2, 3], "company_busi": [2, 3], "company_nam": [2, 3], "company_valu": [2, 3], "conversation_purpos": [2, 3], "conversation_stage_dict": [2, 3], "conversation_stage_id": [2, 3], "conversation_typ": [2, 3], "current_conversation_stag": [2, 3], "determine_conversation_stag": [2, 3], "from_llm": [2, 3, 4], "human_step": [2, 3], "input_kei": [2, 3], "knowledge_bas": [2, 3], "model_nam": [2, 3, 9, 12], "output_kei": [2, 3, 4], "retrieve_conversation_stag": [2, 3], "sales_agent_executor": [2, 3], "sales_conversation_utterance_chain": [2, 3], "salesperson_nam": [2, 3], "salesperson_rol": [2, 3], "seed_ag": [2, 3], "stage_analyzer_chain": [2, 3], "step": [2, 3], "use_tool": [2, 3, 9], "chain": [0, 1, 2, 3], "salesconversationchain": [0, 1, 2, 3, 4], "stageanalyzerchain": [0, 1, 2, 3, 4], "logger": [0, 1, 2], "timefilt": [0, 1, 2, 5], "filter": [2, 5], "time_logg": [0, 1, 2, 5], "parser": [0, 1, 2, 4], "salesconvooutputpars": [0, 1, 2, 6], "ai_prefix": [2, 6], "get_format_instruct": [2, 6], "pars": [2, 6], "verbos": [2, 3, 4, 6, 9], "prompt": [0, 1, 2, 3, 4, 11], "prompts_cn": [0, 1, 2], "salesgptapi": [0, 1, 2], "do": [2, 9], "stage": [0, 1, 2, 3, 4], "templat": [0, 1, 2], "customprompttemplatefortool": [0, 1, 2, 11], "format": [2, 3, 6, 11], "tools_gett": [2, 11], "tool": [0, 1, 2, 3], "get_tool": [0, 1, 2, 12], "setup_knowledge_bas": [0, 1, 2, 12], "version": [0, 1, 2], "content": 1, "class": [3, 4, 5, 6, 9, 11], "list": [3, 4, 11], "str": [3, 4, 6, 9, 11, 12], "base": [3, 4, 5, 6, 9, 11, 12], "basemodel": [], "classvar": [], "configdict": [], "configur": [], "model": 3, "should": [3, 4, 5, 6, 12], "dictionari": 3, "conform": [], "pydant": [], "config": [], "dict": [3, 4, 11], "fieldinfo": 3, "annot": 3, "requir": 3, "true": [3, 4, 5, 9], "metadata": [3, 4], "about": [], "field": [], "defin": [], "map": 11, "name": [3, 4, 5, 6, 11], "thi": [0, 3, 4, 5], "replac": [], "__fields__": [], "from": 3, "v1": [], "async": [3, 9], "req": [], "memori": [3, 4], "basememori": [3, 4], "none": [3, 4, 6, 9, 11, 12], "callback": [3, 4], "basecallbackhandl": [3, 4], "basecallbackmanag": [3, 4], "callback_manag": [3, 4], "bool": [3, 4, 6, 9], "tag": [3, 4], "ani": [0, 3, 4, 5, 11], "1": 3, "introduct": 3, "start": [3, 5], "convers": [3, 4], "introduc": 3, "yourself": 3, "your": 3, "compani": 3, "Be": 3, "polit": 3, "respect": 3, "while": 3, "keep": 3, "tone": 3, "profession": 3, "greet": 3, "welcom": 3, "alwai": 3, "clarifi": 3, "reason": 3, "why": 3, "you": [3, 4], "ar": [0, 3, 4, 5], "call": [3, 12], "nonetyp": 3, "agentexecutor": [], "retrievalqa": 3, "2": 3, "qualif": 3, "qualifi": 3, "prospect": 3, "confirm": 3, "thei": 3, "right": 3, "person": 3, "talk": 3, "regard": 3, "product": [3, 12], "servic": 3, "ensur": 3, "have": [0, 3], "author": 3, "make": 3, "purchas": 3, "decis": 3, "3": [3, 9, 12], "valu": 3, "proposit": 3, "briefli": 3, "explain": 3, "how": [3, 6], "can": 3, "benefit": 3, "focu": 3, "uniqu": 3, "sell": [3, 4], "point": 3, "set": 3, "apart": 3, "competitor": 3, "4": 3, "need": 3, "analysi": 3, "ask": 3, "open": 3, "end": [3, 5], "question": 3, "uncov": 3, "": 3, "pain": 3, "listen": 3, "carefulli": 3, "respons": [3, 4], "take": 3, "note": 3, "5": [3, 9, 12], "solut": 3, "present": 3, "address": 3, "6": 3, "object": [3, 9], "handl": 3, "mai": [3, 5], "prepar": 3, "provid": 3, "evid": 3, "testimoni": 3, "support": 3, "claim": 3, "7": 3, "close": 3, "sale": [3, 4], "propos": 3, "next": [3, 4], "could": 3, "demo": 3, "trial": 3, "meet": 3, "maker": 3, "summar": 3, "what": 3, "ha": 3, "been": 3, "discuss": 3, "reiter": 3, "8": 3, "It": [3, 5], "time": [3, 5], "i": [3, 5, 12], "noth": 3, "els": 3, "said": 3, "gpt": [3, 9, 12], "turbo": [3, 9, 12], "0613": 3, "fals": [3, 4, 5, 6], "ted": 3, "lasso": 3, "busi": 3, "develop": 3, "repres": 3, "sleep": 3, "haven": 3, "premium": 3, "mattress": 3, "custom": [3, 12], "most": 3, "comfort": 3, "experi": 3, "possibl": 3, "we": [0, 3, 12], "offer": 3, "rang": 3, "high": [3, 12], "qualiti": 3, "pillow": 3, "bed": 3, "accessori": 3, "design": 3, "our": 3, "mission": 3, "help": 3, "peopl": 3, "achiev": 3, "better": 3, "night": 3, "them": 3, "best": 3, "believ": 3, "essenti": 3, "overal": 3, "health": 3, "well": 3, "being": 3, "commit": 3, "optim": 3, "except": 3, "find": 3, "out": 3, "whether": 3, "look": 3, "via": 3, "bui": 3, "premier": 3, "control": 3, "arg": [3, 5, 11], "kwarg": [3, 11], "asynchron": 3, "execut": [3, 5], "input": [3, 11], "singl": [3, 12], "expect": [], "onli": [], "one": 3, "param": [], "contain": [], "all": [], "specifi": 5, "return_only_output": [], "return": [5, 11], "output": [3, 6], "If": [3, 5], "new": [], "kei": 3, "gener": [3, 4, 12], "both": [], "default": 3, "us": 3, "These": [], "addit": 3, "pass": [3, 11], "dure": [], "construct": [], "runtim": [], "propag": [], "other": [], "string": [3, 11, 12], "option": 3, "associ": [], "include_run_info": [], "includ": 12, "info": 5, "A": [3, 11], "llm": [3, 4, 6], "tenac": 3, "retri": 3, "complet": 3, "stream": 3, "manipul": 3, "chunk": 3, "downstream": 3, "applic": 3, "classmethod": [3, 4], "chatlitellm": [3, 4], "initi": 3, "human_input": [3, 9], "properti": 3, "baseprompttempl": 4, "runnabl": 4, "promptvalu": 4, "basemessag": 4, "text": [4, 6, 12], "output_pars": [4, 11], "basellmoutputpars": 4, "return_final_onli": 4, "llm_kwarg": 4, "llmchain": 4, "utter": [3, 4], "use_custom_prompt": 4, "custom_prompt": 4, "an": [3, 4, 12], "ai": [3, 4, 6], "me": 4, "pencil": 4, "get": [3, 4], "analyz": [3, 4], "which": [3, 4], "move": 4, "record": 5, "determin": [3, 5], "log": 5, "otherwis": [3, 5], "deem": 5, "appropri": 5, "modifi": 5, "place": 5, "func": 5, "decor": [3, 5], "function": [3, 5], "taken": 5, "agentoutputpars": 6, "instruct": 6, "agentact": 6, "agentfinish": 6, "action": 6, "finish": 6, "config_path": 9, "max_num_turn": 9, "int": 9, "10": [], "input_vari": 11, "input_typ": 11, "baseoutputpars": 11, "partial_vari": 11, "callabl": [5, 11], "stringprompttempl": 11, "argument": [3, 11], "exampl": [9, 11], "variable1": 11, "foo": 11, "product_catalog": [9, 12], "assum": 12, "catalog": 12, "simpli": 12, "inform": 13, "red": [], "just": 0, "begun": 0, "build": 0, "websit": 0, "still": 0, "activ": 0, "work": [0, 12], "suggest": 0, "improv": 0, "readabl": 0, "desir": 0, "pleas": 0, "contact": 0, "chemik": 0, "bit": 0, "github": 0, "more": [], "add": 3, "toctre": [], "maxdepth": [], "caption": [], "type": [], "variabl": [], "sequenc": 4, "tupl": [], "ellipsi": [], "extra": [], "deprec": [], "sinc": [], "0": [], "ainvok": [], "instead": [], "method": 3, "implement": [], "yet": [], "length": [], "arbitrari": [], "keyword": 3, "rais": [], "notimplementederror": [], "current": 3, "indic": 3, "librari": 3, "case": 3, "failur": 3, "creat": 3, "_create_retry_decor": 3, "appli": 3, "_completion_with_retri": 3, "actual": 3, "The": [3, 5], "languag": 3, "result": 3, "fail": 3, "after": [3, 5], "maximum": 3, "number": 3, "_acal": 3, "empti": 3, "flag": 3, "histori": 3, "join": 3, "each": 3, "entri": 3, "separ": 3, "newlin": 3, "charact": 3, "id": 3, "also": 3, "print": 3, "retriev": 3, "correspond": 3, "final": 3, "process": 3, "human": 3, "append": 3, "ad": 3, "user": 3, "begin": 3, "end_of_turn": 3, "overridden": 3, "subclass": 3, "extract": 3, "data": 3, "up": 3, "found": 3, "seed": 3, "clear": 3, "reset": 3, "_call": 3, "befor": 5, "calcul": 5, "level": [5, 12], "given": 3, "instanc": 3, "check": 3, "knowledg": 3, "executor": 3, "enabl": 3, "api": [0, 12], "doc": [], "raw": [], "html": [], "div": [], "wy": [], "menu": [], "href": [], "http": [], "vercel": [], "app": [], "btn": [], "primari": [], "do_stream": [2, 9], "initialize_ag": [2, 9], "customagentexecutor": 3, "20": 9, "completion_bedrock": [0, 1, 2, 12], "generate_calendly_invitation_link": [0, 1, 2, 12], "generate_stripe_payment_link": [0, 1, 2, 12], "get_mail_body_subject_from_queri": [0, 1, 2, 12], "get_product_id_from_queri": [0, 1, 2, 12], "send_email_tool": [0, 1, 2, 12], "send_email_with_gmail": [0, 1, 2, 12], "adetermine_conversation_stag": [2, 3], "overrid": 3, "temporarili": 3, "state": 3, "either": 3, "messag": [3, 12], "sample_product_catalog": 9, "txt": 9, "model_id": 12, "system_prompt": 12, "max_token": 12, "1000": 12, "anthrop": 12, "claud": 12, "queri": 12, "calendli": 12, "invit": 12, "link": 12, "stripe": 12, "payment": 12, "product_price_id_mapping_path": 12, "send": 12, "email": 12, "email_detail": 12, "env": 12, "gmail_mail": 12, "gmail_app_password": 12, "correctli": 12}, "objects": {"": [[2, 0, 0, "-", "salesgpt"]], "salesgpt": [[3, 0, 0, "-", "agents"], [4, 0, 0, "-", "chains"], [5, 0, 0, "-", "logger"], [6, 0, 0, "-", "parsers"], [7, 0, 0, "-", "prompts"], [8, 0, 0, "-", "prompts_cn"], [9, 0, 0, "-", "salesgptapi"], [10, 0, 0, "-", "stages"], [11, 0, 0, "-", "templates"], [12, 0, 0, "-", "tools"], [13, 0, 0, "-", "version"]], "salesgpt.agents": [[3, 1, 1, "", "SalesGPT"]], "salesgpt.agents.SalesGPT": [[3, 2, 1, "", "acall"], [3, 2, 1, "", "acompletion_with_retry"], [3, 2, 1, "", "adetermine_conversation_stage"], [3, 2, 1, "", "astep"], [3, 3, 1, "", "company_business"], [3, 3, 1, "", "company_name"], [3, 3, 1, "", "company_values"], [3, 3, 1, "", "conversation_history"], [3, 3, 1, "", "conversation_purpose"], [3, 3, 1, "", "conversation_stage_dict"], [3, 3, 1, "", "conversation_stage_id"], [3, 3, 1, "", "conversation_type"], [3, 3, 1, "", "current_conversation_stage"], [3, 2, 1, "", "determine_conversation_stage"], [3, 2, 1, "", "from_llm"], [3, 2, 1, "", "human_step"], [3, 4, 1, "", "input_keys"], [3, 3, 1, "", "knowledge_base"], [3, 3, 1, "", "model_name"], [3, 4, 1, "", "output_keys"], [3, 2, 1, "", "retrieve_conversation_stage"], [3, 3, 1, "", "sales_agent_executor"], [3, 3, 1, "", "sales_conversation_utterance_chain"], [3, 3, 1, "", "salesperson_name"], [3, 3, 1, "", "salesperson_role"], [3, 2, 1, "", "seed_agent"], [3, 3, 1, "", "stage_analyzer_chain"], [3, 2, 1, "", "step"], [3, 3, 1, "", "use_tools"]], "salesgpt.chains": [[4, 1, 1, "", "SalesConversationChain"], [4, 1, 1, "", "StageAnalyzerChain"]], "salesgpt.chains.SalesConversationChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.chains.StageAnalyzerChain": [[4, 2, 1, "", "from_llm"]], "salesgpt.logger": [[5, 1, 1, "", "TimeFilter"], [5, 5, 1, "", "time_logger"]], "salesgpt.logger.TimeFilter": [[5, 2, 1, "", "filter"]], "salesgpt.parsers": [[6, 1, 1, "", "SalesConvoOutputParser"]], "salesgpt.parsers.SalesConvoOutputParser": [[6, 3, 1, "", "ai_prefix"], [6, 2, 1, "", "get_format_instructions"], [6, 2, 1, "", "parse"], [6, 3, 1, "", "verbose"]], "salesgpt.salesgptapi": [[9, 1, 1, "", "SalesGPTAPI"]], "salesgpt.salesgptapi.SalesGPTAPI": [[9, 2, 1, "", "do"], [9, 2, 1, "", "do_stream"], [9, 2, 1, "", "initialize_agent"]], "salesgpt.templates": [[11, 1, 1, "", "CustomPromptTemplateForTools"]], "salesgpt.templates.CustomPromptTemplateForTools": [[11, 2, 1, "", "format"], [11, 3, 1, "", "template"], [11, 3, 1, "", "tools_getter"]], "salesgpt.tools": [[12, 5, 1, "", "completion_bedrock"], [12, 5, 1, "", "generate_calendly_invitation_link"], [12, 5, 1, "", "generate_stripe_payment_link"], [12, 5, 1, "", "get_mail_body_subject_from_query"], [12, 5, 1, "", "get_product_id_from_query"], [12, 5, 1, "", "get_tools"], [12, 5, 1, "", "send_email_tool"], [12, 5, 1, "", "send_email_with_gmail"], [12, 5, 1, "", "setup_knowledge_base"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"welcom": 0, "salesgpt": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "": 0, "document": 0, "indic": 0, "tabl": 0, "run": [], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "run_api": [], "packag": 2, "submodul": 2, "agent": 3, "chain": 4, "logger": 5, "parser": 6, "prompt": 7, "prompts_cn": 8, "salesgptapi": 9, "stage": 10, "templat": 11, "tool": 12, "version": 13, "content": [0, 2], "note": [], "paramet": 3, "rais": 3, "return": 3}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Welcome to SalesGPT\u2019s documentation!": [[0, "welcome-to-salesgpt-s-documentation"]], "Contents:": [[0, null], [2, null]], "Indices and tables": [[0, "indices-and-tables"]], "salesgpt": [[1, "salesgpt"]], "salesgpt package": [[2, "salesgpt-package"]], "Submodules": [[2, "submodules"]], "Module contents": [[2, "module-salesgpt"]], "salesgpt.agents module": [[3, "module-salesgpt.agents"]], "Parameters": [[3, "parameters"], [3, "id1"], [3, "id3"]], "Returns": [[3, "returns"], [3, "id2"], [3, "id4"]], "Raises": [[3, "raises"]], "salesgpt.chains module": [[4, "module-salesgpt.chains"]], "salesgpt.logger module": [[5, "module-salesgpt.logger"]], "salesgpt.parsers module": [[6, "module-salesgpt.parsers"]], "salesgpt.prompts module": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn module": [[8, "module-salesgpt.prompts_cn"]], "salesgpt.salesgptapi module": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages module": [[10, "module-salesgpt.stages"]], "salesgpt.templates module": [[11, "module-salesgpt.templates"]], "salesgpt.tools module": [[12, "module-salesgpt.tools"]], "salesgpt.version module": [[13, "module-salesgpt.version"]]}, "indexentries": {"module": [[2, "module-salesgpt"], [3, "module-salesgpt.agents"], [4, "module-salesgpt.chains"], [5, "module-salesgpt.logger"], [6, "module-salesgpt.parsers"], [7, "module-salesgpt.prompts"], [8, "module-salesgpt.prompts_cn"], [9, "module-salesgpt.salesgptapi"], [10, "module-salesgpt.stages"], [11, "module-salesgpt.templates"], [12, "module-salesgpt.tools"], [13, "module-salesgpt.version"]], "salesgpt": [[2, "module-salesgpt"]], "salesgpt (class in salesgpt.agents)": [[3, "salesgpt.agents.SalesGPT"]], "acall() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acall"]], "acompletion_with_retry() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.acompletion_with_retry"]], "adetermine_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.adetermine_conversation_stage"]], "astep() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.astep"]], "company_business (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_business"]], "company_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_name"]], "company_values (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.company_values"]], "conversation_history (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_history"]], "conversation_purpose (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_purpose"]], "conversation_stage_dict (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_dict"]], "conversation_stage_id (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_stage_id"]], "conversation_type (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.conversation_type"]], "current_conversation_stage (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.current_conversation_stage"]], "determine_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.determine_conversation_stage"]], "from_llm() (salesgpt.agents.salesgpt class method)": [[3, "salesgpt.agents.SalesGPT.from_llm"]], "human_step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.human_step"]], "input_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.input_keys"]], "knowledge_base (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.knowledge_base"]], "model_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.model_name"]], "output_keys (salesgpt.agents.salesgpt property)": [[3, "salesgpt.agents.SalesGPT.output_keys"]], "retrieve_conversation_stage() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.retrieve_conversation_stage"]], "sales_agent_executor (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_agent_executor"]], "sales_conversation_utterance_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.sales_conversation_utterance_chain"]], "salesgpt.agents": [[3, "module-salesgpt.agents"]], "salesperson_name (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_name"]], "salesperson_role (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.salesperson_role"]], "seed_agent() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.seed_agent"]], "stage_analyzer_chain (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.stage_analyzer_chain"]], "step() (salesgpt.agents.salesgpt method)": [[3, "salesgpt.agents.SalesGPT.step"]], "use_tools (salesgpt.agents.salesgpt attribute)": [[3, "salesgpt.agents.SalesGPT.use_tools"]], "salesconversationchain (class in salesgpt.chains)": [[4, "salesgpt.chains.SalesConversationChain"]], "stageanalyzerchain (class in salesgpt.chains)": [[4, "salesgpt.chains.StageAnalyzerChain"]], "from_llm() (salesgpt.chains.salesconversationchain class method)": [[4, "salesgpt.chains.SalesConversationChain.from_llm"]], "from_llm() (salesgpt.chains.stageanalyzerchain class method)": [[4, "salesgpt.chains.StageAnalyzerChain.from_llm"]], "salesgpt.chains": [[4, "module-salesgpt.chains"]], "timefilter (class in salesgpt.logger)": [[5, "salesgpt.logger.TimeFilter"]], "filter() (salesgpt.logger.timefilter method)": [[5, "salesgpt.logger.TimeFilter.filter"]], "salesgpt.logger": [[5, "module-salesgpt.logger"]], "time_logger() (in module salesgpt.logger)": [[5, "salesgpt.logger.time_logger"]], "salesconvooutputparser (class in salesgpt.parsers)": [[6, "salesgpt.parsers.SalesConvoOutputParser"]], "ai_prefix (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.ai_prefix"]], "get_format_instructions() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.get_format_instructions"]], "parse() (salesgpt.parsers.salesconvooutputparser method)": [[6, "salesgpt.parsers.SalesConvoOutputParser.parse"]], "salesgpt.parsers": [[6, "module-salesgpt.parsers"]], "verbose (salesgpt.parsers.salesconvooutputparser attribute)": [[6, "salesgpt.parsers.SalesConvoOutputParser.verbose"]], "salesgpt.prompts": [[7, "module-salesgpt.prompts"]], "salesgpt.prompts_cn": [[8, "module-salesgpt.prompts_cn"]], "salesgptapi (class in salesgpt.salesgptapi)": [[9, "salesgpt.salesgptapi.SalesGPTAPI"]], "do() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do"]], "do_stream() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.do_stream"]], "initialize_agent() (salesgpt.salesgptapi.salesgptapi method)": [[9, "salesgpt.salesgptapi.SalesGPTAPI.initialize_agent"]], "salesgpt.salesgptapi": [[9, "module-salesgpt.salesgptapi"]], "salesgpt.stages": [[10, "module-salesgpt.stages"]], "customprompttemplatefortools (class in salesgpt.templates)": [[11, "salesgpt.templates.CustomPromptTemplateForTools"]], "format() (salesgpt.templates.customprompttemplatefortools method)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.format"]], "salesgpt.templates": [[11, "module-salesgpt.templates"]], "template (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.template"]], "tools_getter (salesgpt.templates.customprompttemplatefortools attribute)": [[11, "salesgpt.templates.CustomPromptTemplateForTools.tools_getter"]], "completion_bedrock() (in module salesgpt.tools)": [[12, "salesgpt.tools.completion_bedrock"]], "generate_calendly_invitation_link() (in module salesgpt.tools)": [[12, "salesgpt.tools.generate_calendly_invitation_link"]], "generate_stripe_payment_link() (in module salesgpt.tools)": [[12, "salesgpt.tools.generate_stripe_payment_link"]], "get_mail_body_subject_from_query() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_mail_body_subject_from_query"]], "get_product_id_from_query() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_product_id_from_query"]], "get_tools() (in module salesgpt.tools)": [[12, "salesgpt.tools.get_tools"]], "salesgpt.tools": [[12, "module-salesgpt.tools"]], "send_email_tool() (in module salesgpt.tools)": [[12, "salesgpt.tools.send_email_tool"]], "send_email_with_gmail() (in module salesgpt.tools)": [[12, "salesgpt.tools.send_email_with_gmail"]], "setup_knowledge_base() (in module salesgpt.tools)": [[12, "salesgpt.tools.setup_knowledge_base"]], "salesgpt.version": [[13, "module-salesgpt.version"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["googleanalytics/README", "index", "salesgpt/modules", "salesgpt/salesgpt", "salesgpt/salesgpt.agents", "salesgpt/salesgpt.chains", "salesgpt/salesgpt.logger", "salesgpt/salesgpt.parsers", "salesgpt/salesgpt.prompts", "salesgpt/salesgpt.prompts_cn", "salesgpt/salesgpt.salesgptapi", "salesgpt/salesgpt.stages", "salesgpt/salesgpt.templates", "salesgpt/salesgpt.tools", "salesgpt/salesgpt.version"], "filenames": ["googleanalytics/README.rst", "index.rst", "salesgpt/modules.rst", "salesgpt/salesgpt.rst", "salesgpt/salesgpt.agents.rst", "salesgpt/salesgpt.chains.rst", "salesgpt/salesgpt.logger.rst", "salesgpt/salesgpt.parsers.rst", "salesgpt/salesgpt.prompts.rst", "salesgpt/salesgpt.prompts_cn.rst", "salesgpt/salesgpt.salesgptapi.rst", "salesgpt/salesgpt.stages.rst", "salesgpt/salesgpt.templates.rst", "salesgpt/salesgpt.tools.rst", "salesgpt/salesgpt.version.rst"], "titles": ["Google Analytics extension for Sphinx", "Welcome to SalesGPT\u2019s documentation!", "salesgpt", "salesgpt package", "salesgpt.agents module", "salesgpt.chains module", "salesgpt.logger module", "salesgpt.parsers module", "salesgpt.prompts module", "salesgpt.prompts_cn module", "salesgpt.salesgptapi module", "salesgpt.stages module", "salesgpt.templates module", "salesgpt.tools module", "salesgpt.version module"], "terms": {"index": 1, "modul": [0, 1, 2], "search": 1, "page": 1, "run": [], "run_api": [], "messagelist": [], "conversation_histori": [3, 4, 10], "human_sai": [], "model_config": [], "model_field": [], "chat_with_sales_ag": [], "say_hello": [], "packag": 2, "submodul": 2, "agent": [1, 2, 3, 5, 7], "acal": [3, 4], "acompletion_with_retri": [3, 4], "astep": [3, 4], "company_busi": [3, 4], "company_nam": [3, 4], "company_valu": [3, 4], "conversation_purpos": [3, 4], "conversation_stage_dict": [3, 4], "conversation_stage_id": [3, 4], "conversation_typ": [3, 4], "current_conversation_stag": [3, 4], "determine_conversation_stag": [3, 4], "from_llm": [3, 4, 5], "human_step": [3, 4], "input_kei": [3, 4], "knowledge_bas": [3, 4], "model_nam": [3, 4, 10, 13], "output_kei": [3, 4, 5], "retrieve_conversation_stag": [3, 4], "sales_agent_executor": [3, 4], "sales_conversation_utterance_chain": [3, 4], "salesperson_nam": [3, 4], "salesperson_rol": [3, 4], "seed_ag": [3, 4], "stage_analyzer_chain": [3, 4], "step": [3, 4], "use_tool": [3, 4, 10], "chain": [1, 2, 3, 4], "salesconversationchain": [1, 2, 3, 4, 5], "stageanalyzerchain": [1, 2, 3, 4, 5], "logger": [1, 2, 3], "timefilt": [1, 2, 3, 6], "filter": [3, 6], "time_logg": [1, 2, 3, 6], "parser": [1, 2, 3, 5], "salesconvooutputpars": [1, 2, 3, 7], "ai_prefix": [3, 7], "get_format_instruct": [3, 7], "pars": [3, 7], "verbos": [3, 4, 5, 7, 10], "prompt": [1, 2, 3, 4, 5, 12], "prompts_cn": [1, 2, 3], "salesgptapi": [1, 2, 3], "do": [3, 10], "stage": [1, 2, 3, 4, 5], "templat": [1, 2, 3], "customprompttemplatefortool": [1, 2, 3, 12], "format": [3, 4, 7, 12], "tools_gett": [3, 12], "tool": [1, 2, 3, 4], "get_tool": [1, 2, 3, 13], "setup_knowledge_bas": [1, 2, 3, 13], "version": [1, 2, 3], "content": 2, "class": [4, 5, 6, 7, 10, 12], "list": [0, 4, 5, 12], "str": [4, 5, 7, 10, 12, 13], "base": [4, 5, 6, 7, 10, 12, 13], "basemodel": [], "classvar": [], "configdict": [], "configur": [], "model": 4, "should": [4, 5, 6, 7, 13], "dictionari": 4, "conform": [], "pydant": [], "config": [], "dict": [4, 5, 12], "fieldinfo": 4, "annot": 4, "requir": 4, "true": [0, 4, 5, 6, 10], "metadata": [4, 5], "about": [], "field": [], "defin": [], "map": 12, "name": [4, 5, 6, 7, 12], "thi": [0, 1, 4, 5, 6], "replac": [], "__fields__": [], "from": 4, "v1": [], "async": [4, 10], "req": [], "memori": [4, 5], "basememori": [4, 5], "none": [4, 5, 7, 10, 12, 13], "callback": [4, 5], "basecallbackhandl": [4, 5], "basecallbackmanag": [4, 5], "callback_manag": [4, 5], "bool": [0, 4, 5, 7, 10], "tag": [4, 5], "ani": [1, 4, 5, 6, 12], "1": 4, "introduct": 4, "start": [4, 6], "convers": [4, 5], "introduc": 4, "yourself": 4, "your": [0, 4], "compani": 4, "Be": 4, "polit": 4, "respect": 4, "while": 4, "keep": 4, "tone": 4, "profession": 4, "greet": 4, "welcom": 4, "alwai": 4, "clarifi": 4, "reason": 4, "why": 4, "you": [0, 4, 5], "ar": [1, 4, 5, 6], "call": [4, 13], "nonetyp": 4, "agentexecutor": [], "retrievalqa": 4, "2": 4, "qualif": 4, "qualifi": 4, "prospect": 4, "confirm": 4, "thei": 4, "right": 4, "person": 4, "talk": 4, "regard": 4, "product": [4, 13], "servic": [0, 4], "ensur": 4, "have": [1, 4], "author": [0, 4], "make": 4, "purchas": 4, "decis": 4, "3": [4, 10, 13], "valu": 4, "proposit": 4, "briefli": 4, "explain": 4, "how": [4, 7], "can": [0, 4], "benefit": 4, "focu": 4, "uniqu": 4, "sell": [4, 5], "point": 4, "set": [0, 4], "apart": 4, "competitor": 4, "4": 4, "need": 4, "analysi": 4, "ask": 4, "open": 4, "end": [4, 6], "question": 4, "uncov": 4, "": 4, "pain": 4, "listen": 4, "carefulli": 4, "respons": [4, 5], "take": 4, "note": 4, "5": [4, 10, 13], "solut": 4, "present": 4, "address": 4, "6": 4, "object": [4, 10], "handl": 4, "mai": [4, 6], "prepar": 4, "provid": 4, "evid": 4, "testimoni": 4, "support": 4, "claim": 4, "7": 4, "close": 4, "sale": [4, 5], "propos": 4, "next": [4, 5], "could": 4, "demo": 4, "trial": 4, "meet": 4, "maker": 4, "summar": 4, "what": 4, "ha": 4, "been": 4, "discuss": 4, "reiter": 4, "8": 4, "It": [0, 4, 6], "time": [4, 6], "i": [0, 4, 6, 13], "noth": 4, "els": 4, "said": 4, "gpt": [4, 10, 13], "turbo": [4, 10, 13], "0613": 4, "fals": [4, 5, 6, 7], "ted": 4, "lasso": 4, "busi": 4, "develop": 4, "repres": 4, "sleep": 4, "haven": 4, "premium": 4, "mattress": 4, "custom": [4, 13], "most": 4, "comfort": 4, "experi": 4, "possibl": 4, "we": [1, 4, 13], "offer": 4, "rang": 4, "high": [4, 13], "qualiti": 4, "pillow": 4, "bed": 4, "accessori": 4, "design": 4, "our": 4, "mission": 4, "help": 4, "peopl": 4, "achiev": 4, "better": 4, "night": 4, "them": 4, "best": 4, "believ": 4, "essenti": 4, "overal": 4, "health": 4, "well": 4, "being": 4, "commit": 4, "optim": 4, "except": 4, "find": 4, "out": 4, "whether": 4, "look": 4, "via": 4, "bui": 4, "premier": 4, "control": 4, "arg": [4, 6, 12], "kwarg": [4, 12], "asynchron": 4, "execut": [4, 6], "input": [4, 12], "singl": [4, 13], "expect": [], "onli": [], "one": [0, 4], "param": [], "contain": [], "all": [], "specifi": 6, "return_only_output": [], "return": [6, 12], "output": [4, 7], "If": [4, 6], "new": [], "kei": 4, "gener": [0, 4, 5, 13], "both": [], "default": [0, 4], "us": [0, 4], "These": [], "addit": 4, "pass": [4, 12], "dure": [], "construct": [], "runtim": [], "propag": [], "other": [], "string": [0, 4, 12, 13], "option": [0, 4], "associ": [], "include_run_info": [], "includ": 13, "info": 6, "A": [4, 12], "llm": [4, 5, 7], "tenac": 4, "retri": 4, "complet": 4, "stream": 4, "manipul": 4, "chunk": 4, "downstream": 4, "applic": 4, "classmethod": [4, 5], "chatlitellm": [4, 5], "initi": 4, "human_input": [4, 10], "properti": 4, "baseprompttempl": 5, "runnabl": 5, "promptvalu": 5, "basemessag": 5, "text": [5, 7, 13], "output_pars": [5, 12], "basellmoutputpars": 5, "return_final_onli": 5, "llm_kwarg": 5, "llmchain": 5, "utter": [4, 5], "use_custom_prompt": 5, "custom_prompt": 5, "an": [4, 5, 13], "ai": [4, 5, 7], "me": 5, "pencil": 5, "get": [4, 5], "analyz": [4, 5], "which": [4, 5], "move": 5, "record": 6, "determin": [4, 6], "log": 6, "otherwis": [4, 6], "deem": 6, "appropri": 6, "modifi": 6, "place": 6, "func": 6, "decor": [4, 6], "function": [4, 6], "taken": 6, "agentoutputpars": 7, "instruct": 7, "agentact": 7, "agentfinish": 7, "action": 7, "finish": 7, "config_path": 10, "max_num_turn": 10, "int": 10, "10": [], "input_vari": 12, "input_typ": 12, "baseoutputpars": 12, "partial_vari": 12, "callabl": [6, 12], "stringprompttempl": 12, "argument": [4, 12], "exampl": [0, 10, 12], "variable1": 12, "foo": 12, "product_catalog": [10, 13], "assum": 13, "catalog": 13, "simpli": 13, "inform": 14, "red": [], "just": [0, 1], "begun": 1, "build": 1, "websit": 1, "still": 1, "activ": 1, "work": [1, 13], "suggest": 1, "improv": 1, "readabl": 1, "desir": 1, "pleas": 1, "contact": 1, "chemik": 1, "bit": 1, "github": [0, 1], "more": [], "add": [0, 4], "toctre": [], "maxdepth": [], "caption": [], "type": [], "variabl": [], "sequenc": 5, "tupl": [], "ellipsi": [], "extra": [], "deprec": [], "sinc": [], "0": [], "ainvok": [], "instead": [], "method": 4, "implement": [], "yet": [], "length": [], "arbitrari": [], "keyword": 4, "rais": [], "notimplementederror": [], "current": 4, "indic": 4, "librari": 4, "case": 4, "failur": 4, "creat": 4, "_create_retry_decor": 4, "appli": 4, "_completion_with_retri": 4, "actual": 4, "The": [4, 6], "languag": 4, "result": 4, "fail": 4, "after": [4, 6], "maximum": 4, "number": 4, "_acal": 4, "empti": 4, "flag": 4, "histori": 4, "join": 4, "each": 4, "entri": 4, "separ": 4, "newlin": 4, "charact": 4, "id": [0, 4], "also": 4, "print": 4, "retriev": 4, "correspond": 4, "final": 4, "process": 4, "human": 4, "append": 4, "ad": [0, 4], "user": 4, "begin": 4, "end_of_turn": 4, "overridden": 4, "subclass": 4, "extract": 4, "data": 4, "up": 4, "found": 4, "seed": 4, "clear": 4, "reset": 4, "_call": 4, "befor": 6, "calcul": 6, "level": [6, 13], "given": 4, "instanc": 4, "check": 4, "knowledg": 4, "executor": 4, "enabl": 4, "api": [1, 13], "doc": [], "raw": [], "html": 0, "div": [], "wy": [], "menu": [], "href": [], "http": 0, "vercel": [], "app": [], "btn": [], "primari": [], "do_stream": [3, 10], "initialize_ag": [3, 10], "customagentexecutor": 4, "20": 10, "completion_bedrock": [1, 2, 3, 13], "generate_calendly_invitation_link": [1, 2, 3, 13], "generate_stripe_payment_link": [1, 2, 3, 13], "get_mail_body_subject_from_queri": [1, 2, 3, 13], "get_product_id_from_queri": [1, 2, 3, 13], "send_email_tool": [1, 2, 3, 13], "send_email_with_gmail": [1, 2, 3, 13], "adetermine_conversation_stag": [3, 4], "overrid": 4, "temporarili": 4, "state": 4, "either": 4, "messag": [4, 13], "sample_product_catalog": 10, "txt": 10, "model_id": 13, "system_prompt": 13, "max_token": 13, "1000": 13, "anthrop": 13, "claud": 13, "queri": 13, "calendli": 13, "invit": 13, "link": 13, "stripe": 13, "payment": 13, "product_price_id_mapping_path": 13, "send": 13, "email": 13, "email_detail": 13, "env": 13, "gmail_mail": 13, "gmail_app_password": 13, "correctli": 13, "domen": 0, "ko\u017ear": 0, "dev": 0, "si": 0, "allow": 0, "track": 0, "file": 0, "web": 0, "googleanalyt": 0, "git": 0, "clone": 0, "com": 0, "chang": 0, "directori": 0, "cd": 0, "python": 0, "setup": 0, "py": 0, "sphinxcontrib": 0, "conf": 0, "For": 0, "now": 0, "googleanalytics_id": 0, "ua": 0, "site": 0, "123": 0, "googleanalytics_en": 0, "turn": 0, "off": 0}, "objects": {"": [[3, 0, 0, "-", "salesgpt"]], "salesgpt": [[4, 0, 0, "-", "agents"], [5, 0, 0, "-", "chains"], [6, 0, 0, "-", "logger"], [7, 0, 0, "-", "parsers"], [8, 0, 0, "-", "prompts"], [9, 0, 0, "-", "prompts_cn"], [10, 0, 0, "-", "salesgptapi"], [11, 0, 0, "-", "stages"], [12, 0, 0, "-", "templates"], [13, 0, 0, "-", "tools"], [14, 0, 0, "-", "version"]], "salesgpt.agents": [[4, 1, 1, "", "SalesGPT"]], "salesgpt.agents.SalesGPT": [[4, 2, 1, "", "acall"], [4, 2, 1, "", "acompletion_with_retry"], [4, 2, 1, "", "adetermine_conversation_stage"], [4, 2, 1, "", "astep"], [4, 3, 1, "", "company_business"], [4, 3, 1, "", "company_name"], [4, 3, 1, "", "company_values"], [4, 3, 1, "", "conversation_history"], [4, 3, 1, "", "conversation_purpose"], [4, 3, 1, "", "conversation_stage_dict"], [4, 3, 1, "", "conversation_stage_id"], [4, 3, 1, "", "conversation_type"], [4, 3, 1, "", "current_conversation_stage"], [4, 2, 1, "", "determine_conversation_stage"], [4, 2, 1, "", "from_llm"], [4, 2, 1, "", "human_step"], [4, 4, 1, "", "input_keys"], [4, 3, 1, "", "knowledge_base"], [4, 3, 1, "", "model_name"], [4, 4, 1, "", "output_keys"], [4, 2, 1, "", "retrieve_conversation_stage"], [4, 3, 1, "", "sales_agent_executor"], [4, 3, 1, "", "sales_conversation_utterance_chain"], [4, 3, 1, "", "salesperson_name"], [4, 3, 1, "", "salesperson_role"], [4, 2, 1, "", "seed_agent"], [4, 3, 1, "", "stage_analyzer_chain"], [4, 2, 1, "", "step"], [4, 3, 1, "", "use_tools"]], "salesgpt.chains": [[5, 1, 1, "", "SalesConversationChain"], [5, 1, 1, "", "StageAnalyzerChain"]], "salesgpt.chains.SalesConversationChain": [[5, 2, 1, "", "from_llm"]], "salesgpt.chains.StageAnalyzerChain": [[5, 2, 1, "", "from_llm"]], "salesgpt.logger": [[6, 1, 1, "", "TimeFilter"], [6, 5, 1, "", "time_logger"]], "salesgpt.logger.TimeFilter": [[6, 2, 1, "", "filter"]], "salesgpt.parsers": [[7, 1, 1, "", "SalesConvoOutputParser"]], "salesgpt.parsers.SalesConvoOutputParser": [[7, 3, 1, "", "ai_prefix"], [7, 2, 1, "", "get_format_instructions"], [7, 2, 1, "", "parse"], [7, 3, 1, "", "verbose"]], "salesgpt.salesgptapi": [[10, 1, 1, "", "SalesGPTAPI"]], "salesgpt.salesgptapi.SalesGPTAPI": [[10, 2, 1, "", "do"], [10, 2, 1, "", "do_stream"], [10, 2, 1, "", "initialize_agent"]], "salesgpt.templates": [[12, 1, 1, "", "CustomPromptTemplateForTools"]], "salesgpt.templates.CustomPromptTemplateForTools": [[12, 2, 1, "", "format"], [12, 3, 1, "", "template"], [12, 3, 1, "", "tools_getter"]], "salesgpt.tools": [[13, 5, 1, "", "completion_bedrock"], [13, 5, 1, "", "generate_calendly_invitation_link"], [13, 5, 1, "", "generate_stripe_payment_link"], [13, 5, 1, "", "get_mail_body_subject_from_query"], [13, 5, 1, "", "get_product_id_from_query"], [13, 5, 1, "", "get_tools"], [13, 5, 1, "", "send_email_tool"], [13, 5, 1, "", "send_email_with_gmail"], [13, 5, 1, "", "setup_knowledge_base"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"welcom": 1, "salesgpt": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "": 1, "document": 1, "indic": 1, "tabl": 1, "run": [], "modul": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "run_api": [], "packag": 3, "submodul": 3, "agent": 4, "chain": 5, "logger": 6, "parser": 7, "prompt": 8, "prompts_cn": 9, "salesgptapi": 10, "stage": 11, "templat": 12, "tool": 13, "version": 14, "content": [1, 3], "note": [], "paramet": 4, "rais": 4, "return": 4, "googl": 0, "analyt": 0, "extens": 0, "sphinx": 0, "about": 0, "instal": 0, "from": 0, "contrib": 0, "checkout": 0, "enabl": 0, "configur": 0}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Google Analytics extension for Sphinx": [[0, "google-analytics-extension-for-sphinx"]], "About": [[0, "about"]], "Installing from sphinx-contrib checkout": [[0, "installing-from-sphinx-contrib-checkout"]], "Enabling the extension in Sphinx": [[0, "enabling-the-extension-in-sphinx"]], "Configuration": [[0, "configuration"]], "Welcome to SalesGPT\u2019s documentation!": [[1, "welcome-to-salesgpt-s-documentation"]], "Contents:": [[1, null], [3, null]], "Indices and tables": [[1, "indices-and-tables"]], "salesgpt": [[2, "salesgpt"]], "salesgpt package": [[3, "salesgpt-package"]], "Submodules": [[3, "submodules"]], "Module contents": [[3, "module-salesgpt"]], "salesgpt.agents module": [[4, "module-salesgpt.agents"]], "Parameters": [[4, "parameters"], [4, "id1"], [4, "id3"]], "Returns": [[4, "returns"], [4, "id2"], [4, "id4"]], "Raises": [[4, "raises"]], "salesgpt.chains module": [[5, "module-salesgpt.chains"]], "salesgpt.logger module": [[6, "module-salesgpt.logger"]], "salesgpt.parsers module": [[7, "module-salesgpt.parsers"]], "salesgpt.prompts module": [[8, "module-salesgpt.prompts"]], "salesgpt.prompts_cn module": [[9, "module-salesgpt.prompts_cn"]], "salesgpt.salesgptapi module": [[10, "module-salesgpt.salesgptapi"]], "salesgpt.stages module": [[11, "module-salesgpt.stages"]], "salesgpt.templates module": [[12, "module-salesgpt.templates"]], "salesgpt.tools module": [[13, "module-salesgpt.tools"]], "salesgpt.version module": [[14, "module-salesgpt.version"]]}, "indexentries": {"module": [[3, "module-salesgpt"], [4, "module-salesgpt.agents"], [5, "module-salesgpt.chains"], [6, "module-salesgpt.logger"], [7, "module-salesgpt.parsers"], [8, "module-salesgpt.prompts"], [9, "module-salesgpt.prompts_cn"], [10, "module-salesgpt.salesgptapi"], [11, "module-salesgpt.stages"], [12, "module-salesgpt.templates"], [13, "module-salesgpt.tools"], [14, "module-salesgpt.version"]], "salesgpt": [[3, "module-salesgpt"]], "salesgpt (class in salesgpt.agents)": [[4, "salesgpt.agents.SalesGPT"]], "acall() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.acall"]], "acompletion_with_retry() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.acompletion_with_retry"]], "adetermine_conversation_stage() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.adetermine_conversation_stage"]], "astep() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.astep"]], "company_business (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.company_business"]], "company_name (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.company_name"]], "company_values (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.company_values"]], "conversation_history (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.conversation_history"]], "conversation_purpose (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.conversation_purpose"]], "conversation_stage_dict (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.conversation_stage_dict"]], "conversation_stage_id (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.conversation_stage_id"]], "conversation_type (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.conversation_type"]], "current_conversation_stage (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.current_conversation_stage"]], "determine_conversation_stage() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.determine_conversation_stage"]], "from_llm() (salesgpt.agents.salesgpt class method)": [[4, "salesgpt.agents.SalesGPT.from_llm"]], "human_step() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.human_step"]], "input_keys (salesgpt.agents.salesgpt property)": [[4, "salesgpt.agents.SalesGPT.input_keys"]], "knowledge_base (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.knowledge_base"]], "model_name (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.model_name"]], "output_keys (salesgpt.agents.salesgpt property)": [[4, "salesgpt.agents.SalesGPT.output_keys"]], "retrieve_conversation_stage() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.retrieve_conversation_stage"]], "sales_agent_executor (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.sales_agent_executor"]], "sales_conversation_utterance_chain (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.sales_conversation_utterance_chain"]], "salesgpt.agents": [[4, "module-salesgpt.agents"]], "salesperson_name (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.salesperson_name"]], "salesperson_role (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.salesperson_role"]], "seed_agent() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.seed_agent"]], "stage_analyzer_chain (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.stage_analyzer_chain"]], "step() (salesgpt.agents.salesgpt method)": [[4, "salesgpt.agents.SalesGPT.step"]], "use_tools (salesgpt.agents.salesgpt attribute)": [[4, "salesgpt.agents.SalesGPT.use_tools"]], "salesconversationchain (class in salesgpt.chains)": [[5, "salesgpt.chains.SalesConversationChain"]], "stageanalyzerchain (class in salesgpt.chains)": [[5, "salesgpt.chains.StageAnalyzerChain"]], "from_llm() (salesgpt.chains.salesconversationchain class method)": [[5, "salesgpt.chains.SalesConversationChain.from_llm"]], "from_llm() (salesgpt.chains.stageanalyzerchain class method)": [[5, "salesgpt.chains.StageAnalyzerChain.from_llm"]], "salesgpt.chains": [[5, "module-salesgpt.chains"]], "timefilter (class in salesgpt.logger)": [[6, "salesgpt.logger.TimeFilter"]], "filter() (salesgpt.logger.timefilter method)": [[6, "salesgpt.logger.TimeFilter.filter"]], "salesgpt.logger": [[6, "module-salesgpt.logger"]], "time_logger() (in module salesgpt.logger)": [[6, "salesgpt.logger.time_logger"]], "salesconvooutputparser (class in salesgpt.parsers)": [[7, "salesgpt.parsers.SalesConvoOutputParser"]], "ai_prefix (salesgpt.parsers.salesconvooutputparser attribute)": [[7, "salesgpt.parsers.SalesConvoOutputParser.ai_prefix"]], "get_format_instructions() (salesgpt.parsers.salesconvooutputparser method)": [[7, "salesgpt.parsers.SalesConvoOutputParser.get_format_instructions"]], "parse() (salesgpt.parsers.salesconvooutputparser method)": [[7, "salesgpt.parsers.SalesConvoOutputParser.parse"]], "salesgpt.parsers": [[7, "module-salesgpt.parsers"]], "verbose (salesgpt.parsers.salesconvooutputparser attribute)": [[7, "salesgpt.parsers.SalesConvoOutputParser.verbose"]], "salesgpt.prompts": [[8, "module-salesgpt.prompts"]], "salesgpt.prompts_cn": [[9, "module-salesgpt.prompts_cn"]], "salesgptapi (class in salesgpt.salesgptapi)": [[10, "salesgpt.salesgptapi.SalesGPTAPI"]], "do() (salesgpt.salesgptapi.salesgptapi method)": [[10, "salesgpt.salesgptapi.SalesGPTAPI.do"]], "do_stream() (salesgpt.salesgptapi.salesgptapi method)": [[10, "salesgpt.salesgptapi.SalesGPTAPI.do_stream"]], "initialize_agent() (salesgpt.salesgptapi.salesgptapi method)": [[10, "salesgpt.salesgptapi.SalesGPTAPI.initialize_agent"]], "salesgpt.salesgptapi": [[10, "module-salesgpt.salesgptapi"]], "salesgpt.stages": [[11, "module-salesgpt.stages"]], "customprompttemplatefortools (class in salesgpt.templates)": [[12, "salesgpt.templates.CustomPromptTemplateForTools"]], "format() (salesgpt.templates.customprompttemplatefortools method)": [[12, "salesgpt.templates.CustomPromptTemplateForTools.format"]], "salesgpt.templates": [[12, "module-salesgpt.templates"]], "template (salesgpt.templates.customprompttemplatefortools attribute)": [[12, "salesgpt.templates.CustomPromptTemplateForTools.template"]], "tools_getter (salesgpt.templates.customprompttemplatefortools attribute)": [[12, "salesgpt.templates.CustomPromptTemplateForTools.tools_getter"]], "completion_bedrock() (in module salesgpt.tools)": [[13, "salesgpt.tools.completion_bedrock"]], "generate_calendly_invitation_link() (in module salesgpt.tools)": [[13, "salesgpt.tools.generate_calendly_invitation_link"]], "generate_stripe_payment_link() (in module salesgpt.tools)": [[13, "salesgpt.tools.generate_stripe_payment_link"]], "get_mail_body_subject_from_query() (in module salesgpt.tools)": [[13, "salesgpt.tools.get_mail_body_subject_from_query"]], "get_product_id_from_query() (in module salesgpt.tools)": [[13, "salesgpt.tools.get_product_id_from_query"]], "get_tools() (in module salesgpt.tools)": [[13, "salesgpt.tools.get_tools"]], "salesgpt.tools": [[13, "module-salesgpt.tools"]], "send_email_tool() (in module salesgpt.tools)": [[13, "salesgpt.tools.send_email_tool"]], "send_email_with_gmail() (in module salesgpt.tools)": [[13, "salesgpt.tools.send_email_with_gmail"]], "setup_knowledge_base() (in module salesgpt.tools)": [[13, "salesgpt.tools.setup_knowledge_base"]], "salesgpt.version": [[14, "module-salesgpt.version"]]}}) \ No newline at end of file diff --git a/api-website/_templates/layout.html b/api-website/_templates/layout.html index d4682304..e9fac110 100644 --- a/api-website/_templates/layout.html +++ b/api-website/_templates/layout.html @@ -244,9 +244,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', '{{ theme_analytics_id }}', { - 'anonymize_ip': {{ 'true' if theme_analytics_anonymize_ip|tobool else 'false' }}, - }); + gtag('config', 'GTM-NX3SZD79'); {%- endif %} From 4a15b78f1c24920e446c3d3083fa1ad00e663901 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 17:59:48 +0200 Subject: [PATCH 42/47] web improvements v10.9 --- api-website/_templates/layout.html | 4 ++-- api-website/conf.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api-website/_templates/layout.html b/api-website/_templates/layout.html index e9fac110..f48d3a3d 100644 --- a/api-website/_templates/layout.html +++ b/api-website/_templates/layout.html @@ -236,9 +236,9 @@ {#- Do not conflict with RTD insertion of analytics script #} {%- if not READTHEDOCS %} - {%- if theme_analytics_id %} + {%- if GTAG_API %} - + + + + + + + + + — SalesGPT documentation + + + + + + + + + + + + + + + + + + + + + + + +
                + + +
                + +
                +
                +
                +
                  +
                • + +
                • +
                • +
                +
                +
                +
                +
                + +
                +
                +
                + +
                + +
                +

                © Copyright 2024, Filip-Michalsky.

                +
                + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
                +
                +
                + + + +
                +
                + + + + \ No newline at end of file diff --git a/api-website/_templates/layout.html b/api-website/_templates/layout.html index 35ee7785..5b00805c 100644 --- a/api-website/_templates/layout.html +++ b/api-website/_templates/layout.html @@ -236,15 +236,17 @@ {#- Do not conflict with RTD insertion of analytics script #} {%- if not READTHEDOCS %} - {%- if GTAG_API %} + {%- if theme_analytics_id %} - + {%- endif %} @@ -253,4 +255,4 @@ {%- block footer %} {% endblock %} - + \ No newline at end of file diff --git a/api-website/conf.py b/api-website/conf.py index d484c103..b2d4a32a 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -81,3 +81,5 @@ def setup(app): html_css_files = [ "custom.css", # add your custom CSS file here ] + +html_additional_pages = {'layout': '../_templates/layout.html'} From 4b6941cef7c55c371cb014087a19ec018822ee04 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Thu, 2 May 2024 18:23:00 +0200 Subject: [PATCH 45/47] web improvements v10.13 --- api-website/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/api-website/conf.py b/api-website/conf.py index b2d4a32a..2e6eeb64 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -38,6 +38,7 @@ 'sphinxcontrib.gtagjs' ] +theme_analytics_id = 'GTM-NX3SZD79' GTAG_API = 'GTM-NX3SZD79' gtagjs_ids = [ 'GTM-NX3SZD79', From 05d4b2d815177af5b52feccd7ae4d82d4de6c923 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Wed, 8 May 2024 14:33:30 +0200 Subject: [PATCH 46/47] oprava analytiky --- api-website/conf.py | 50 +++++++++++---------------------------------- 1 file changed, 12 insertions(+), 38 deletions(-) diff --git a/api-website/conf.py b/api-website/conf.py index 2e6eeb64..f840dc61 100644 --- a/api-website/conf.py +++ b/api-website/conf.py @@ -12,21 +12,17 @@ # import os import sys - -sys.path.insert(0, os.path.abspath("..")) # Source path -# Load environment variables from .env file in the parent directory -#from dotenv import load_dotenv -#load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env')) -# Load GTAG_API from the .env file -GTAG_API = os.environ.get("GTAG_API", "") +sys.path.insert(0, os.path.abspath('..')) #Source path # -- Project information ----------------------------------------------------- -project = "SalesGPT" -copyright = "2024, Filip-Michalsky" -author = "Filip-Michalsky" +project = 'SalesGPT' +copyright = '2024, Filip-Michalsky' +author = 'Filip-Michalsky' +import os +googleanalytics_id = os.getenv('googleanalytics_id') # -- General configuration --------------------------------------------------- @@ -34,38 +30,18 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.autodoc', - 'sphinxcontrib.googleanalytics', - 'sphinxcontrib.gtagjs' + 'sphinxcontrib.googleanalytics' ] -theme_analytics_id = 'GTM-NX3SZD79' -GTAG_API = 'GTM-NX3SZD79' -gtagjs_ids = [ - 'GTM-NX3SZD79', -] -GTAG_JS = """ - - - -""" -googleanalytics_id = "G-VH1ZNBVHSP" - -def setup(app): - app.add_js_file(None, body=GTAG_JS) - app.add_js_file(None, body="https://www.googletagmanager.com/gtag/js?id=GTM-NX3SZD79") - app.add_js_file(None, body="google_analytics_tracker.js") +# Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # -- Options for HTML output ------------------------------------------------- @@ -73,14 +49,12 @@ def setup(app): # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = "sphinx_rtd_theme" +html_theme = 'sphinx_rtd_theme' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] +html_static_path = ['_static'] html_css_files = [ - "custom.css", # add your custom CSS file here + 'custom.css', # add your custom CSS file here ] - -html_additional_pages = {'layout': '../_templates/layout.html'} From 024806aa4eb5e15bb11605f946df6b96f5d97d50 Mon Sep 17 00:00:00 2001 From: chemik-bit Date: Wed, 8 May 2024 18:12:57 +0200 Subject: [PATCH 47/47] CHANGELOG UPDATE --- .env.example | 4 +++- CHANGELOG.txt | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index c76bdef4..0e714680 100644 --- a/.env.example +++ b/.env.example @@ -11,7 +11,6 @@ CONFIG_PATH=examples/example_agent_setup.json PRODUCT_CATALOG=examples/sample_product_catalog.txt PRODUCT_PRICE_MAPPING=examples/example_product_price_id_mapping.json - #Gmail API config for sending emails GMAIL_APP_PASSWORD=xx GMAIL_MAIL=yy @@ -24,3 +23,6 @@ PAYMENT_GATEWAY_URL=https://agent-payments-gateway.vercel.app/payment CALENDLY_API_KEY=xx CALENDLY_EVENT_UUID=yy +#Enable local api startup +ENVIRONMENT=development + diff --git a/CHANGELOG.txt b/CHANGELOG.txt index eaf387b4..9989b9c5 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,11 @@ Updates to the SalesGPT project: Building the world's best AI Sales Agents and virtual workers. +May 8, 2024 +--------------- +Version 0.1.3 +- SalesGPT has analytics tracking built into documentation for improved understanding of important features and update necessities +- Added option for local frontend startup with ENVIRONMENT variable + March 22, 2024 --------------- Version 0.1.2