ADVANCED Python AI Agent Tutorial - Using RAG

Поделиться
HTML-код
  • Опубликовано: 14 май 2024
  • In this video, I will be showing you how to create an artificial intelligence agent that will be able to use all of the tools that we provide it with. That's right, we will create and AI agent & give it various tools for it to use selectively based on the task at hand.
    Note: This video refers to llamaindex version 0.9. On Feb 12th, 2024 llamaindex version 0.10 was released which is mostly the same but has some added functionality :)
    🎞 Video Resources 🎞
    Check out Llama Index: www.llamaindex.ai/
    Llama Index Docs: docs.llamaindex.ai/en/stable/
    Population Dataset: www.kaggle.com/datasets/joebe...
    Llama Hub: llamahub.ai/
    Code in this video: github.com/techwithtim/Python...
    ⏳ Timestamps ⏳
    00:00 | Overview
    00:27 | Project Demos
    03:54 | Understanding Agents & RAG
    06:29 | Installation/Setup
    09:00 | Data Sources
    13:18 | Querying Pandas Data
    19:17 | Building Agent Capabilities
    29:18 | Querying Unstructured Data
    39:38 | Next Steps
    Hashtags
    #PythonAI
    #TechWithTim
    #AICoding

Комментарии • 225

  • @loggerboy9325
    @loggerboy9325 3 месяца назад +151

    Just a tip for whoever is following along.The code, from llama_index.query_engine needs to be llama_index.core.query_engine.

    • @shashankshukla6691
      @shashankshukla6691 3 месяца назад +11

      How did you figured that out bro ? 😮❤
      Btw thanks alot

    • @Al_Miqdad_
      @Al_Miqdad_ 3 месяца назад

      why

    • @shashankshukla6691
      @shashankshukla6691 3 месяца назад

      @@Al_Miqdad_ because llama_index.query_engine doesn't works, unless you add .core

    • @martyallen6931
      @martyallen6931 3 месяца назад +3

      i love you

    • @loggerboy9325
      @loggerboy9325 3 месяца назад

      @@shashankshukla6691 looked up the llama documentation

  • @PeacefulHarmonyMusicHealing
    @PeacefulHarmonyMusicHealing Месяц назад +11

    Guys!
    The llama-index package format has changed, try importing this way and it should work:
    from llama_index.core.query_engine import ...
    Like so everyone can see!

  • @sadiqkhawaja7019
    @sadiqkhawaja7019 2 месяца назад +17

    Detailed, no-nonense, topical. One of the best coding channels on youtube. Always looking forward to a new video.

  • @hypo30cal
    @hypo30cal 8 дней назад +2

    If you are running this blindly without using Tim's requirements file, please note that due to security `from llama_index.query_engine import PandasQueryEngine` is no longer the right import, try pip installing `llama-index-experimental` and then using the PandasQueryEngine class from `from llama_index.experimental.query_engine import PandasQueryEngine`.
    This is for py3.10. Finally, the PromptTemplate class is now at `from llama_index.core import PromptTemplate`. The documentation will really help though.
    Thanks Tim.

  • @ReDoG129
    @ReDoG129 2 месяца назад +7

    This channel is a Godsend, which instilled the fundamentals of Python within me, which helped me to obtain a certification in robotics. You never cease to amaze me. 😊

  • @josephabuo6027
    @josephabuo6027 3 месяца назад +13

    5 mins into the video and I am already excited about the future!

    • @TechWithTim
      @TechWithTim  3 месяца назад +2

      For sure it’s super cool!

  • @Al_Miqdad_
    @Al_Miqdad_ 3 месяца назад +2

    thank you very much for your feedback ❤❤❤❤

  • @amanaggarwal4061
    @amanaggarwal4061 2 месяца назад +1

    one of the best videos on internet regarding AI agents

  • @ayanjawaid2251
    @ayanjawaid2251 3 месяца назад

    Tim we need more content like this or a course... and as always awesome work ❤

  • @myanghua
    @myanghua 2 месяца назад +1

    This is the gold standard for this kind of coding tutorials.💯 I hope more RUclipsrs would be like him. Please keep up the good work.

  • @mushinart
    @mushinart 2 месяца назад +1

    Amazing video ,tim ...i always wanted a fast an ld easy way to understand llamaindex...now I can build my own project fast ... Thanks a million brother

  • @myslates2854
    @myslates2854 2 месяца назад

    Tim you saved my day, you are awesome. I will write in details later how, but for now thanks for the brilliant working code

  • @LeonardoGomez-lk5ei
    @LeonardoGomez-lk5ei 2 месяца назад

    I second that, the RAG toolkit is amazing.

  • @rodrigogazcon506
    @rodrigogazcon506 2 месяца назад

    Thanks for sharing Tim.

  • @suryapratap3622
    @suryapratap3622 Месяц назад

    awesome great explanation i spended days to read the docs i know the efforts you in to generate this content, thanks

  • @alexsischin2107
    @alexsischin2107 3 месяца назад

    Thank you for the video. It is interesting and clear

  • @inocentesantiago3194
    @inocentesantiago3194 2 месяца назад

    This looks like a helpful tutorial, hope I can learn something!

  • @mahmoudabuzamel7038
    @mahmoudabuzamel7038 10 дней назад

    Great tutorial Tim!

  • @juanbetancourt5106
    @juanbetancourt5106 2 месяца назад

    Thank you Tim.

  • @mariamanuel2795
    @mariamanuel2795 2 месяца назад

    Very informative video!

  • @damianaguila7841
    @damianaguila7841 2 месяца назад

    Thanks for sharing.

  • @pauloseixas5452
    @pauloseixas5452 3 месяца назад

    Alright let's go i'll get all hyped up regardless of what will come of it Thanks Tim

  • @omghosal3301
    @omghosal3301 2 месяца назад +6

    For windows if './ai/bin/activate' doesn't work then use ' ./ai/Scripts/activate' , that would do the trick^^

  • @AbelMartinez-xb3gl
    @AbelMartinez-xb3gl 2 месяца назад

    Excited to experiment more.

  • @srinivasguptha9538
    @srinivasguptha9538 2 месяца назад

    I love to see you used venv. I find it more practical than other alternatives.

  • @harmansavla7510
    @harmansavla7510 3 месяца назад

    Love your content❤

  • @saravanannatarajan6515
    @saravanannatarajan6515 2 месяца назад

    Best explanation using coding , hats off bro

  • @enkhbaatardorjsuren9427
    @enkhbaatardorjsuren9427 2 месяца назад

    Brilliant!

  • @philippechassany7279
    @philippechassany7279 2 месяца назад +6

    To add context in order to refer to previous response like "save the response to my notes", you can add
    context = " ".join([f"role: {exchange['role']} content: {exchange['content']}" for exchange in st.session_state.messages])
    response = agent.query(context + "
    " + prompt)

  • @brandonhernandezvillantes2937
    @brandonhernandezvillantes2937 2 месяца назад

    Nice one Tim!

  • @user-kw4ph2cz8q
    @user-kw4ph2cz8q 23 дня назад

    This is great wow ...🎉i can think of a lot of ideas now for this ...but please guys play safe on this... like wiring your complex project to the net..dev opps are very important regarding that...😅otherwise this is great...❤❤great content Tim..

  • @seanh1591
    @seanh1591 2 месяца назад +3

    Hi Tim - Thanks so much for the video. Great job!!! Would you be able to address not using OpenAI (model, agent) but rather using an open source LLMs?

  • @initkloud
    @initkloud Месяц назад

    Hi Tim,
    Thank you for creating this video; it's really informative.
    Would it be possible for you to create a video on LLM that pulls data from Confluence space or pages and generates a response based on it?

  • @yuvrajkukreja1248
    @yuvrajkukreja1248 3 месяца назад +14

    More ai video 😊 awesome working

  • @user-op1ru7nx9j
    @user-op1ru7nx9j 2 месяца назад

    Appreciate you sharing your skills, super helpful for noobs like me.

  • @leonvanzyl
    @leonvanzyl 2 месяца назад

    @Tim Excellent video.
    The reason the app wasn't able to save the note (end of video) is because you need to include chat memory / history. The llm has no view of the previous messages.

  • @PedorEmilo
    @PedorEmilo 2 месяца назад

    So RAG stands for Really Awesome Guidance, nice.

  • @kayodedaniel6174
    @kayodedaniel6174 3 месяца назад +1

    Thanks for the information @internetMadeCoder but i have a question i struggle at learning programming languages which makee it frustrating and make the process feel tiring i went online and there something when am learning from the video it seems pretty easy and but when i want to use it to try and solve maybe exercises it feels difficult and also forget of what i learnt the previous days and also how do i work on this and be able to learn better what caan u advice me to do

  • @chymoney1
    @chymoney1 2 месяца назад

    This is really cool stuff awesome video

  • @user-ez9st6xt1h
    @user-ez9st6xt1h 2 месяца назад

    This is amazing. Can you create a next video on automation script generation and Sql query generation(for complex schema) using Rag or AI agents. ( but use open source models.)

  • @user-ki6un6ut2g
    @user-ki6un6ut2g 28 дней назад

    Great Topic! It would be awesome if you extend this example with crewai

  • @tinellixavier8022
    @tinellixavier8022 3 месяца назад

    I have maybe beginner question coming, I wonder if it is possible to make and IA agent that can use both the normal model trained on his dataset, our RAG with provided data source as in this course plus internet search and compile these source in the output ?

  • @vrajmalvi7194
    @vrajmalvi7194 Месяц назад

    @TechWithTim can you make a video on how do you go thorough any documentation, what is your mindset where you start, and what flow do you follow. Please and Thank you :)

  • @tylerpeterson420
    @tylerpeterson420 3 месяца назад

    Your vid quality is legit what's your setup?

  • @BorisHrzenjak
    @BorisHrzenjak 2 месяца назад +1

    great stuff, even though I had to bail on the pdf part because I got some weird stuff going on, it said I have no openai api key and stuff, battled with it for two days and figured out that the code works without that part so... no pdf for me, but everything else works fine :)
    I will definitely play around with llama-index more

    • @sonalithakur8234
      @sonalithakur8234 2 месяца назад

      can you please tell how you build the project without open ai key?... I am facing the issue in this only

    • @BorisHrzenjak
      @BorisHrzenjak 2 месяца назад

      @@sonalithakur8234I didn't build it without an api_key. I removed the part of code that was meant to read pdf because it was giving me problems.

    • @_c_v
      @_c_v 2 месяца назад

      Yeah same problem for me did anyone figure it out?

    • @mbasemhassen2947
      @mbasemhassen2947 Месяц назад

      I think that the issue was that the function was not called in openai section so for me, the issue was model was not being used for instance in the 5 or 7 line of code in main the code which ends with input openai is not working because this is not a function which is why the model section near the end was not working so if you want this code to run that I think function needs to be defined for it

  • @SivaMahadevan-ny7vm
    @SivaMahadevan-ny7vm Месяц назад

    This tutorial is super helpful. Thanks Tim. I was able to get the app working. when I ask a question about canada or population, Agent is able to answer the question by looking at the PDF, CSV etc.. But when I ask a question like "what is solar eclipse", the agent is still able to answer the question. How can I prevent it from happening ? I just want answers that are available in the documents.

  • @pntra1220
    @pntra1220 2 месяца назад

    Hi Tim, first of all, great tutorial! I wanted to ask you if you know if it's possible or efficient to use llama index to do RAG over 300k pages of pdfs. I've been researching and a lot of people say that I will have to fine tune the embeddings models and use one from hugging face. Also to make the results better, use metadata. However, I am wondering if using llama index is the correct approach or if I will need to create my own RAG system. Thank you for taking the time to read this.

  • @prakhars962
    @prakhars962 3 месяца назад +1

    in next 5 years they can write research papers, if you just give your idea and results. this is mindblowing.

  • @varungonsalves6249
    @varungonsalves6249 2 месяца назад

    Hi There, Great video. I was wondering if this same method would work but the llm was loaded in via llama instead of using openai llm?

  • @user-fp2yd4wj9o
    @user-fp2yd4wj9o 3 месяца назад

    Great video, just one question: What would I have to do if I wanted to use open-source tools instead of the openAI API? Thanks.

  • @khalifarmili1256
    @khalifarmili1256 17 дней назад

    Lots of Thanks in the comments section but i owe you another one, THANKS A LOT !!

  • @malekmot
    @malekmot 3 месяца назад

    Awesome! Hey Tim, can you tell me what theme and font are you using for vscode?

  • @ahmadsaud3531
    @ahmadsaud3531 2 месяца назад +4

    Thanks, Tim. I've noticed that many of the RAG examples available on RUclips primarily focus on enhancing the model using PDFs, CSVs, or plain text. However, in practice, a significant portion of business data is stored in relational databases, such as Oracle or SQL Server. Could you provide an example demonstrating how RAG can be applied to data from relational databases?

    • @ahmadsaud3531
      @ahmadsaud3531 2 месяца назад

      Hi Tim, i am waiting for your answer please

    • @arnav3674
      @arnav3674 Месяц назад

      @@ahmadsaud3531 did you get the answer ?

    • @ahmadsaud3531
      @ahmadsaud3531 Месяц назад

      @@arnav3674 not yet

    • @ahmadsaud3531
      @ahmadsaud3531 Месяц назад

      @@arnav3674 not yet

  • @neilpayne8244
    @neilpayne8244 Месяц назад

    Thanks for the great vid. i tried following along but getting too many import errors. i also tried building a new virtual env, then installed the modules from your requirements.txt mentioned in this thread, and that also now doesnt work (llama_index tries to load pkg_resources which is not found).

  • @malikanaser8251
    @malikanaser8251 10 дней назад

    Hi man, you are the best, I wish if it was about extracting data from text or pdf and also harnessing data from agents LLM to store it in KG and make LLM query from it, all the video I watched about that were poor and not a practical solution, either they doesn't work or poor result or use paid software or don't accumulate data in the KG database with no duplicate... Man you are the one for this project, if you did it I unsure you your channel will be on fire.

  • @user-xb9hi6xb1w
    @user-xb9hi6xb1w 3 месяца назад

    Nice

  • @egericke123
    @egericke123 Месяц назад +1

    It doesn't save a note using the previous prompt because I think it is lost. I think you are calling a new instance of the model each time you give a new prompt. So you would have to update or append prompt outside the while loop to get it to remember the entire conversation... But I could definitely be wrong, just my intuition :P

  • @madhudson1
    @madhudson1 6 дней назад

    what are your thoughts on using some of the open source LLMs for this, via Ollama?

  • @krishnak3532
    @krishnak3532 2 месяца назад +2

    Hey Tim,
    Can you make a video with mistral model locally loaded rather than using openai API key.

  • @sdkfeldfwerer6751
    @sdkfeldfwerer6751 Месяц назад +1

    Can I use it with my git repos (js, ts on nodejs)? It would be great to build custom, local copilot for coding.

  • @xspydazx
    @xspydazx 12 дней назад

    Question : once loading a vector store , how can we output a dataset from the store to be used as a fine tuning object ?

  • @bhasadish
    @bhasadish 2 месяца назад

    if you pass context history with the new prompt only then would it be able to save to note. Passing context history to LLM is an integral part of any RAG otherwise it looses context.

  • @mejia414
    @mejia414 2 месяца назад

    muy buen video pregunta como hago para que la salida este en formato pandas o dict o list ?

  • @stephenbonifacio3846
    @stephenbonifacio3846 2 месяца назад +4

    not sure how long ago this was recorded but the correct import for pandasquery engine as of the latest version of llama-index is:
    from llama_index.core.query_engine import PandasQueryEngine

  • @ANG747
    @ANG747 2 месяца назад

    Makes me want to build my own AI chatbot.

  • @swetarajan1781
    @swetarajan1781 2 месяца назад

    Thank you for the video! Did anyone face the issue where the query engine returns only the pandas code and not the pandas output?

  • @najiibrashiidabdi5014
    @najiibrashiidabdi5014 24 дня назад

    Hi! Tim, can i choose different llm

  • @izzhamburhan9518
    @izzhamburhan9518 2 месяца назад

    is this tutorial one of the RAG application also

  • @adamabdullah6789
    @adamabdullah6789 2 месяца назад

    sory for basic question. can we make it into api that can be consumed ? thanks

  • @jeremyham764
    @jeremyham764 Месяц назад

    what text editor theme is he using?

  • @frricbc4442
    @frricbc4442 2 месяца назад

    can i make it use microsoft access and use the features in it? like using formulas curating huge amount of data is that possible?

  • @vibhorbisht4122
    @vibhorbisht4122 2 месяца назад

    I know this could sound stupid I am new to this field, but instead of giving data in pdf or csv form can we retrieve data from website?

  • @cematilkan8553
    @cematilkan8553 2 месяца назад

    I wonder how we can use local LLMs like ollama or mistral using your code.

  • @Hello_-_-_-_
    @Hello_-_-_-_ 2 месяца назад

    Cool video. Random question, are you ever going to move out of Canada? I know a few that have tried but there are too many hoops.

    • @TechWithTim
      @TechWithTim  2 месяца назад

      Yes I’m currently living in Dubai

  • @cclementson1986
    @cclementson1986 23 дня назад

    Perhaps extend this to a web based interactive chat that allows a user to choose between different LLM models like the new llama 3 vs chatgpt

  • @KumR
    @KumR 2 месяца назад

    Is this similar to Langchain agents?

  • @shillowcollins6392
    @shillowcollins6392 2 месяца назад

    I think this is way easier than the Langchain framework

  • @is_adjekofori
    @is_adjekofori 2 месяца назад

    Langchain or llama index, which is ideal

  • @TanzerTel
    @TanzerTel 2 месяца назад +1

    in case if you see this error --ImportError: cannot import name 'OpenAI' from 'llama_index.llms' (unknown location)-- do this --from llama_index.llms.openai import OpenAI--
    and for error. --ImportError: cannot import name 'note_engine' from 'note_engine' (/Users/macbookpro/AIAgent/note_engine.py)--
    change this. if not os.path.exist(note_file): to this if not os.path.isfile(note_file):

  • @theuser810
    @theuser810 Месяц назад +1

    For me, the agent keeps using the wrong column:
    df[df['Country'] == 'Canada']['Population']
    despite there being no column named population

  • @mallunightmares5845
    @mallunightmares5845 29 дней назад

    How to build a Autonomous RAG LLM Agent with Function Calling that is connected with External REST API like Microsoft Graph API ? Can You make a video on this ?

  • @rohithdon2621
    @rohithdon2621 20 дней назад

    tim please put about LLM . what is rag how it work

  • @vdzneladze1
    @vdzneladze1 2 месяца назад +2

    Hi guys, I encounted with the following eroor message:
    from llama_index import PromptTemplate
    ImportError: cannot import name 'PromptTemplate' from 'llama_index' (unknown location)
    Please advise

    • @stevenzusack9668
      @stevenzusack9668 2 месяца назад +4

      'llama_index' should be 'llama_index.core' for both the import and the pip install. At least, that's what worked for me. So, the pip install is 'pip install llama-index.core pypdf python-dotenv pandas' and the import is 'from llama_index.core.query_engine import PandasQueryEngine'

    • @ryansumbele3552
      @ryansumbele3552 Месяц назад +1

      @@stevenzusack9668 thank you for your response, this just worked for me

  • @zazbhai5802
    @zazbhai5802 3 месяца назад +1

    Bruh Can You Make A oop series for c++ please

  • @saisreekarsunku9022
    @saisreekarsunku9022 27 дней назад +1

    there is no query engine in my llama_index it not importing

  • @thelifehackerpro9943
    @thelifehackerpro9943 2 месяца назад

    Openai free key has limit, any other free model we can use?

  • @user-wf5er3eo8v
    @user-wf5er3eo8v 2 месяца назад

    i am using Azure open AI. The agent some how does not work and give "openai.NotFoundError: Error code: 404 - {'error': {'code': '404', 'message': 'Resource not found'}}". All the credentials API, endpoint, were stored in .env file.
    Any solution or workaround for this?

  • @arshadsafi8317
    @arshadsafi8317 2 месяца назад +1

    Everything is great except a few things. Idk why but the llama_index libraries used in the video has to be cahnged slightly for instance :"from llama_index.core.agent import ReActAgent" instead of "from llama_index.agent import ReActAgent", same with the prompts file ('from llama_index import PromptTemplate' won't work idk why still). Aprt from that, am I the only one who is getting error 429 and I havent used had a singel usage (according to the openai api usage page). HELP NEEDED!

    • @TheFeanture
      @TheFeanture 2 месяца назад

      openai.RateLimitError: Error code: 429
      same problems
      not working for me. do you found solution?

    • @TheFeanture
      @TheFeanture 2 месяца назад

      for me. CSV file was to long. i just deleted everything after Canada. now it is working

    • @arshadsafi8317
      @arshadsafi8317 2 месяца назад

      @@TheFeanture The problem was actually in the Openai account. Unforetunately when you sign up for a chat gpt account at the same time you receive that $5 free cedit. I had my account my nearly two years and it was expired (3 months limit for the $5). Solution: create a new openai account, with a new phone number.

    • @mikkelchristensen4237
      @mikkelchristensen4237 Месяц назад

      Did you figure out what the updated version of 'from llama_index import PromptTemplate' is?

    • @wolfofthelight5690
      @wolfofthelight5690 28 дней назад

      @@mikkelchristensen4237 from llama_index.core import PromptTemplate

  • @user-hb8xc1qv6e
    @user-hb8xc1qv6e 2 месяца назад

    note-engine is not available what the alternative for it

  • @noa2427
    @noa2427 Месяц назад

    I have import errors and there is no StorageCintext, Vector StoreIndex

  • @lonridgway2728
    @lonridgway2728 День назад

    how did it know to correct your typo of the word language at the end?

  • @OliverWatts-tq8nr
    @OliverWatts-tq8nr 22 дня назад

    Can this be done without using openai?

  • @PeterPan-hs5tu
    @PeterPan-hs5tu 2 месяца назад

    first of all, thank you so much for the wonderful tutorial, as i m doing the follow through, i kept running into “ no module named ‘dotenv’ “. but i notice that my packages are all installed into lib/python3.11/site-packages directory instead of the bin folder. so i can not proceed the next step after that. wondering where i need to adjust? 🤔

    • @TechWithTim
      @TechWithTim  2 месяца назад +1

      Did you activate the virtual environment?

    • @PeterPan-hs5tu
      @PeterPan-hs5tu 2 месяца назад

      @@TechWithTim yup a little (ai) is added in front of the name inside the terminal

    • @TechWithTim
      @TechWithTim  2 месяца назад

      try using pip and then if that doesnt work use pip3 instead@@PeterPan-hs5tu

    • @PeterPan-hs5tu
      @PeterPan-hs5tu 2 месяца назад

      @@TechWithTimyou mean when i install using pip command via terminal instead of pip3?

    • @PeterPan-hs5tu
      @PeterPan-hs5tu 2 месяца назад

      @@TechWithTimI have been using the following command in terminal “pip3 install llama-index pypdf python-dotenv pandas” and as soon as the command finished installing, the notice popped up telling me the new release of pip available: 22.3.1 -> 24.0
      so i tried upgrade it it didn’t work, i have also tried not upgrade still does not work 😢

  • @thelittlenuttree
    @thelittlenuttree Месяц назад

    I was getting the python expression rather than the actual value as my output, any ideas why (although what I dont understand is thats what the instructions ask for - so why isnt this the correct output anyway?)
    > Pandas Output: df[df['Country'] == 'Canada']['Population2023'].values[0]

    • @thelittlenuttree
      @thelittlenuttree Месяц назад

      discovered the problem: WARNING:llama_index.core.query_engine.pandas.output_parser:Python version must be >= 3.9 in order to use the default output processor, which executes the Python query. Instead, we will return the raw Python instructions as a string.

  • @perpektodimagkamali4529
    @perpektodimagkamali4529 2 месяца назад

    the installing in the terminal doesn't work on my computer

  • @philippechassany7279
    @philippechassany7279 2 месяца назад

    How to force llamindex to answer in the same language than the question is?

  • @Laxobigging
    @Laxobigging 2 месяца назад

    Why is it that every time I try to follow a video in vscode using python, there is always some bullshit I encounter during the install process which takes 30 minutes to try and figure out the answer to? Is coding always this ridiculous?

  • @paulmurphy9358
    @paulmurphy9358 3 месяца назад

    For learning purposes with no need for any paid accounts, how about a GPT4ALL version?

    • @paulmurphy9358
      @paulmurphy9358 3 месяца назад

      I'm just starting to learn about LLMs, so this may not be a good idea, but I think what you'd be able to do is have the agent try out different models or runs of the same model and then try to evaluate the results and start to learn which foundation model is best for which types of tasks and with it all running locally, you can experiment without having to create a bunch of paid accounts.

  • @HypeDigitalyAI
    @HypeDigitalyAI Месяц назад

    Very interesting video...we have just landed a big client that has thousand of documents.
    Would it be possible for you to help us with this project man, or at least offer your expertise on some consulting session ?

    • @TechWithTim
      @TechWithTim  Месяц назад

      You can find my business email on my about page, send me an email

  • @OsvaldoNava-cz8iz
    @OsvaldoNava-cz8iz 2 месяца назад

    Let me know if you ever need a volunteer for any future projects.