<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dhiraj Patra</title>
    <description>The latest articles on DEV Community by Dhiraj Patra (@dhirajpatra).</description>
    <link>https://dev.to/dhirajpatra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F173652%2Fb1d67ead-1741-415e-8441-9397ff1d5184.jpg</url>
      <title>DEV Community: Dhiraj Patra</title>
      <link>https://dev.to/dhirajpatra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhirajpatra"/>
    <language>en</language>
    <item>
      <title>Comparative Analysis of GPU Server Offerings</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Sat, 31 May 2025 00:42:28 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/comparative-analysis-of-gpu-server-offerings-97g</link>
      <guid>https://dev.to/dhirajpatra/comparative-analysis-of-gpu-server-offerings-97g</guid>
      <description>&lt;p&gt;Comparative Analysis of GPU Server Offerings: Autonomous Brainy vs. DigitalOcean GPU Droplets&lt;br&gt;
The rapid evolution of artificial intelligence (AI) and machine learning (ML) has driven demand for high-performance computing solutions. This report compares two prominent offerings in this space: Autonomous Inc.'s Brainy, an on-premise workstation, and DigitalOcean's GPU Droplets, a cloud-based infrastructure service. By analyzing their hardware capabilities, pricing models, target audiences, and operational advantages, this study identifies critical differences and gaps in their offerings.&lt;/p&gt;

&lt;p&gt;Hardware Specifications and Performance&lt;br&gt;
Autonomous Brainy: Desktop Petaflop Power&lt;br&gt;
Brainy leverages NVIDIA RTX 4090 GPUs, configured in clusters of 2 to 8 units, to deliver over 1 petaflop of AI performance. Each RTX 4090 provides 24 GB of GDDR6X memory, enabling the system to handle models with up to 70 billion parameters. The workstation is optimized for both training and inference, supporting full forward and backward passes with autodiff, making it ideal for fine-tuning large language models (LLMs) and computer vision tasks.&lt;/p&gt;

&lt;p&gt;Brainy’s architecture emphasizes local data processing, reducing latency and enhancing data privacy by minimizing reliance on cloud infrastructure. However, the RTX 4090, while powerful, is a consumer-grade GPU lacking the specialized tensor cores and higher memory bandwidth of data-center-grade GPUs like the H100.&lt;/p&gt;

&lt;p&gt;DigitalOcean GPU Droplets: Cloud Scalability&lt;br&gt;
DigitalOcean’s GPU Droplets utilize NVIDIA H100 GPUs, each featuring 80 GB of HBM3 memory and 640 tensor cores designed for AI workloads. Configurations scale from single-GPU instances to clusters of 8 GPUs, with options for NVIDIA H100x8 setups offering 640 GB of pooled memory. The H100’s architecture supports Hopper-based parallelism, enabling faster training times for large models compared to the RTX 4090.&lt;/p&gt;

&lt;p&gt;GPU Droplets include dual NVMe storage disks: a 720 GB boot disk for OS and frameworks, and a 5 TB scratch disk for data staging. This cloud-based model eliminates upfront hardware costs but introduces latency due to data transmission over networks.&lt;/p&gt;

&lt;p&gt;Key Comparison&lt;/p&gt;

&lt;p&gt;Feature Autonomous Brainy   DigitalOcean GPU Droplets&lt;br&gt;
GPU Model   NVIDIA RTX 4090 (24 GB) NVIDIA H100 (80 GB)&lt;br&gt;
Max GPUs/Instance   8   8&lt;br&gt;
Memory Pooling  No  Yes (H100x8: 640 GB)&lt;br&gt;
Tensor Cores    3rd Gen (Ampere)    4th Gen (Hopper)&lt;br&gt;
Theoretical AI Perf 1+ petaflops    3.9 petaflops (H100x8)&lt;/p&gt;

&lt;p&gt;Pricing and Cost Efficiency&lt;br&gt;
Autonomous Brainy: Capital Expenditure Model&lt;br&gt;
Brainy requires an upfront investment starting at $5,000 for a 2-GPU configuration, with higher-tier models reaching $20,000+ for 8 GPUs. Autonomous positions this as a cost-saving alternative to cloud services, claiming users can reduce expenses within the first year compared to platforms like RunPod. For example, a 8-GPU Brainy system priced at $20,000 would break even against DigitalOcean’s H100x8 ($23.92/hour) after approximately 836 hours (35 days) of continuous use.&lt;/p&gt;

&lt;p&gt;DigitalOcean GPU Droplets: Pay-as-You-Go Flexibility&lt;br&gt;
DigitalOcean charges $3.39/hour for a single H100 and $23.92/hour for an 8-GPU H100x8 configuration. This model suits short-term or variable workloads, as users avoid capital expenditure. However, sustained usage beyond 6–12 months becomes cost-prohibitive compared to Brainy’s one-time fee.&lt;/p&gt;

&lt;p&gt;Cost Scenarios&lt;/p&gt;

&lt;p&gt;Short-Term (1 Month): DigitalOcean’s H100x8 costs ~$17,242 (720 hours), whereas Brainy’s 8-GPU system is $20,000.&lt;/p&gt;

&lt;p&gt;Long-Term (1 Year): DigitalOcean reaches ~$206,899, while Brainy remains at $20,000.&lt;/p&gt;

&lt;p&gt;Target Audiences and Use Cases&lt;br&gt;
Autonomous Brainy: On-Premise Research and Development&lt;br&gt;
Brainy caters to research institutions, AI startups, and enterprises requiring full control over data and hardware. Its local processing capabilities are ideal for sensitive workloads in healthcare, finance, or defense, where data sovereignty is critical. The workstation’s ability to fine-tune 70B-parameter models makes it suitable for organizations developing proprietary LLMs.&lt;/p&gt;

&lt;p&gt;DigitalOcean GPU Droplets: Scalable Cloud Development&lt;br&gt;
GPU Droplets target developers and startups needing rapid scalability without infrastructure investments. The service supports use cases like training diffusion models, running inference for chatbots, and large-scale data analytics. DigitalOcean’s integration with managed Kubernetes and GenAI platforms simplifies deployment for teams lacking DevOps expertise.&lt;/p&gt;

&lt;p&gt;Operational Advantages and Limitations&lt;br&gt;
Autonomous Brainy&lt;br&gt;
Strengths:&lt;/p&gt;

&lt;p&gt;Data Privacy: Local processing ensures compliance with GDPR, HIPAA, and other regulations.&lt;/p&gt;

&lt;p&gt;Latency Reduction: Eliminates cloud transmission delays for real-time inference.&lt;/p&gt;

&lt;p&gt;Long-Term Savings: Lower TCO for multi-year projects.&lt;/p&gt;

&lt;p&gt;Limitations:&lt;/p&gt;

&lt;p&gt;Outdated Hardware: RTX 4090 lacks H100’s tensor core advancements and memory bandwidth.&lt;/p&gt;

&lt;p&gt;Scalability Ceiling: Limited to 8 GPUs per workstation, restricting model size beyond 70B parameters.&lt;/p&gt;

&lt;p&gt;DigitalOcean GPU Droplets&lt;br&gt;
Strengths:&lt;/p&gt;

&lt;p&gt;Latest GPUs: H100’s 4th-gen tensor cores accelerate mixed-precision training.&lt;/p&gt;

&lt;p&gt;Elastic Scaling: Spin up hundreds of GPUs temporarily for hyperparameter tuning.&lt;/p&gt;

&lt;p&gt;Ecosystem Integration: Pre-configured with PyTorch, TensorFlow, and Hugging Face.&lt;/p&gt;

&lt;p&gt;Limitations:&lt;/p&gt;

&lt;p&gt;Data Transfer Costs: Moving large datasets to/from the cloud incurs bandwidth fees.&lt;/p&gt;

&lt;p&gt;Shared Tenancy Risks: No dedicated GPU guarantees, potentially affecting performance.&lt;/p&gt;

&lt;p&gt;Strategic Gaps and Market Opportunities&lt;br&gt;
Autonomous Brainy’s Missing Elements&lt;br&gt;
Lack of Cloud Hybridity: No option to burst into the cloud during peak demand.&lt;/p&gt;

&lt;p&gt;Inferior GPU Architecture: RTX 4090 lags behind H100 in memory and parallelism, limiting LLM training efficiency.&lt;/p&gt;

&lt;p&gt;DigitalOcean’s Shortcomings&lt;br&gt;
No On-Premise Solution: Unable to serve industries requiring local data processing.&lt;/p&gt;

&lt;p&gt;Limited GPU Variety: No support for AMD MI300X or Grace Hopper Superchips.&lt;/p&gt;

&lt;p&gt;Conclusion and Recommendations&lt;br&gt;
Autonomous Brainy excels in secure, long-term AI development but risks obsolescence due to its consumer-grade GPUs. DigitalOcean GPU Droplets offer cutting-edge hardware and elasticity but suffer from recurring costs and data privacy concerns.&lt;/p&gt;

&lt;p&gt;Recommendations:&lt;/p&gt;

&lt;p&gt;Autonomous should adopt data-center GPUs (e.g., H100) to remain competitive.&lt;/p&gt;

&lt;p&gt;DigitalOcean should introduce bare-metal GPU servers for hybrid cloud deployments.&lt;/p&gt;

&lt;p&gt;Researchers handling sensitive data should choose Brainy, while startups prioritizing agility should opt for GPU Droplets.&lt;/p&gt;

&lt;p&gt;This bifurcation reflects broader market trends: on-premise solutions for compliance-driven sectors and cloud services for scalable, short-term projects. Future innovations in CXL memory pooling7 and autonomous vehicle data frameworks may further differentiate these offerings.&lt;/p&gt;

&lt;p&gt;Comparative Analysis of Autonomous Brainy and DigitalOcean GPU Droplets: Performance, Accessibility, and Strategic Fit&lt;br&gt;
The AI hardware landscape is bifurcating into on-premise workstations and cloud-based solutions, each addressing distinct operational needs. This report provides a granular comparison between Autonomous Inc.'s Brainy workstation and DigitalOcean's GPU Droplets, evaluating their technical architectures, cost structures, deployment workflows, and ecosystem integrations. By incorporating recent benchmarking data and developer tooling insights, we identify critical trade-offs for enterprises and researchers.&lt;/p&gt;

&lt;p&gt;Hardware Architectures and Model Support&lt;br&gt;
Autonomous Brainy: Desktop-Scale AI Acceleration&lt;br&gt;
Brainy employs NVIDIA RTX 4090 GPUs in multi-GPU configurations (2–8 units), delivering 1.1 petaflops of FP32 performance. Each GPU contains 24 GB GDDR6X memory with 1 TB/s bandwidth, supporting models up to 70 billion parameters3 The workstation uses PCIe Gen5 interconnects, achieving 128 GB/s peer-to-peer transfer rates between GPUs—critical for distributed training tasks like fine-tuning Llama 3.1-8B.&lt;/p&gt;

&lt;p&gt;However, the RTX 4090's consumer-grade architecture lacks FP8 tensor cores and transformer engine optimizations, resulting in 38% slower inference times compared to H100 on Llama 3.1-70B. Brainy compensates with local NVMe storage (up to 16 TB) for dataset caching, reducing I/O bottlenecks during preprocessing.&lt;/p&gt;

&lt;p&gt;DigitalOcean GPU Droplets: Cloud-Native H100 Clusters&lt;br&gt;
DigitalOcean's H100 instances provide 3.9 petaflops (FP8) per 8-GPU cluster, leveraging NVIDIA's Hopper architecture with 4th-gen tensor cores Each H100 offers 80 GB HBM3 memory at 3 TB/s bandwidth, enabling training of 405B-parameter models through NVLink memory pooling The platform supports dynamic scaling via Kubernetes, allowing burst capacity for hyperparameter tuning.&lt;/p&gt;

&lt;p&gt;Key Hardware Comparison&lt;/p&gt;

&lt;p&gt;Metric  Brainy (RTX 4090x8) DigitalOcean (H100x8)&lt;br&gt;
FP32 Performance    1.1 PFLOPS  2.6 PFLOPS&lt;br&gt;
Memory Bandwidth    1 TB/s per GPU  3 TB/s per GPU&lt;br&gt;
Interconnect    PCIe Gen5 (128 GB/s)    NVLink 4.0 (900 GB/s)&lt;br&gt;
Max Model Size  70B parameters  405B parameters&lt;/p&gt;

&lt;p&gt;Pricing Models and Total Cost of Ownership&lt;br&gt;
Brainy: Capital Expenditure with Long-Term Savings&lt;br&gt;
Autonomous offers Brainy at $5,000 (2-GPU) to $20,000 (8-GPU), including 3-year hardware warranty. For continuous usage scenarios, the break-even point against DigitalOcean's H100x8 ($23.92/hr) occurs at 836 hours. Over a 3-year lifecycle, Brainy's TCO reaches $24,000 (including power), versus $629,376 for equivalent cloud usage.&lt;/p&gt;

&lt;p&gt;DigitalOcean: Elastic Pricing with Hidden Costs&lt;br&gt;
While H100 instances start at $3.39/hour, data transfer fees apply at $0.01/GB for egress1 Training Llama 3.1-405B requires ~500 TB of data transfers, adding $5,000 per project. However, spot instances offer 60% discounts for fault-tolerant workloads.&lt;/p&gt;

&lt;p&gt;Cost Scenario: Llama 3.1 Fine-Tuning&lt;/p&gt;

&lt;p&gt;Component   Brainy  DigitalOcean&lt;br&gt;
Hardware Acquisition    $20,000 $0&lt;br&gt;
30-Day Training $240 (power)    $17,242 (720 GPU-hours)&lt;br&gt;
Data Transfer   $0  $5,000&lt;br&gt;
Total   $20,240 $22,242&lt;/p&gt;

&lt;p&gt;Deployment Workflows and Developer Experience&lt;br&gt;
Brainy: On-Premise Setup with Local Optimization&lt;br&gt;
The workstation ships pre-installed with:&lt;/p&gt;

&lt;p&gt;Ubuntu 24.04 LTS with NVIDIA CUDA 12.4&lt;/p&gt;

&lt;p&gt;Docker images for PyTorch 2.3 and TensorFlow 2.16&lt;/p&gt;

&lt;p&gt;JupyterLab with Llama 3.1-8B demo notebooks&lt;/p&gt;

&lt;p&gt;Developers can clone repositories directly via 10 GbE LAN, achieving 9.4 GB/s transfer speeds from local NAS systems. However, integrating cloud-based MLOps tools like Weights &amp;amp; Biases requires manual VPN configuration.&lt;/p&gt;

&lt;p&gt;DigitalOcean: One-Click AI Model Deployment&lt;br&gt;
DigitalOcean's ecosystem simplifies LLM deployment:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
Pre-configured droplets include:&lt;/p&gt;

&lt;p&gt;Hugging Face TGI v1.4 with FlashAttention-2&lt;/p&gt;

&lt;p&gt;Optimized transformers 4.40 for FP8 quantization&lt;/p&gt;

&lt;p&gt;Prometheus/Grafana monitoring stack The platform's API enables automatic scaling:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
Ecosystem Integration and Tooling&lt;br&gt;
Brainy: NVIDIA Inception Program Benefits&lt;br&gt;
As an Inception member, Autonomous provides:&lt;/p&gt;

&lt;p&gt;Free access to NVIDIA DLI courses on CUDA optimization&lt;/p&gt;

&lt;p&gt;Early access to RTX 5000-series driver betas&lt;/p&gt;

&lt;p&gt;On-site support from NVIDIA-certified engineers&lt;/p&gt;

&lt;p&gt;Developers report 18% throughput gains using Brainy's custom CUDA kernels for MoE models. However, the platform lacks native integration with Hugging Face Hub, requiring manual model downloads.&lt;/p&gt;

&lt;p&gt;DigitalOcean: Full MLOPs Pipeline Automation&lt;br&gt;
The Hugging Face integration enables:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
Advanced features include:&lt;/p&gt;

&lt;p&gt;Automatic model quantization with 8-bit FP8&lt;/p&gt;

&lt;p&gt;CI/CD pipelines for A/B testing model variants&lt;/p&gt;

&lt;p&gt;VPC peering with AWS/Azure for hybrid deployments1&lt;/p&gt;

&lt;p&gt;Strategic Gaps and Recommendations&lt;br&gt;
Brainy's Limitations&lt;br&gt;
No Cloud Bursting: Cannot scale beyond local GPU count&lt;/p&gt;

&lt;p&gt;Inferior Toolchain: Missing Hugging Face Enterprise support&lt;/p&gt;

&lt;p&gt;GPU Generation Lag: RTX 4090 vs. H100's FP8 acceleration&lt;/p&gt;

&lt;p&gt;DigitalOcean's Shortcomings&lt;br&gt;
Data Gravity Costs: Expensive egress for large datasets&lt;/p&gt;

&lt;p&gt;No On-Prem Option: Impossible for air-gapped deployments&lt;/p&gt;

&lt;p&gt;Shared Tenancy Risks: No dedicated GPU guarantees&lt;/p&gt;

&lt;p&gt;Recommendations&lt;/p&gt;

&lt;p&gt;Autonomous should partner with Hugging Face for native hub integration&lt;/p&gt;

&lt;p&gt;DigitalOcean needs bare-metal H100 offerings for regulated industries&lt;/p&gt;

&lt;p&gt;Researchers handling PHI/PII should choose Brainy, while startups prefer cloud&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
Autonomous Brainy delivers cost-effective AI development for sensitive, long-term projects but lags in cutting-edge model support. DigitalOcean GPU Droplets provide unmatched scalability for frontier models like Llama 3.1-405B, albeit with operational complexity. Enterprises must weigh data sovereignty requirements against the need for elastic infrastructure in selecting between these paradigms.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Django Kafka</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:16:15 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/django-kafka-3lh7</link>
      <guid>https://dev.to/dhirajpatra/django-kafka-3lh7</guid>
      <description>&lt;p&gt;How to develop a basic outline of an end-to-end Python application using Django, Django Rest Framework (DRF), and Apache Kafka. Below is an example demo application code to get you started:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="c1"&gt;# 1. Set up Django project
&lt;/span&gt;
&lt;span class="c1"&gt;# Create a Django project
&lt;/span&gt;
&lt;span class="n"&gt;django&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;admin&lt;/span&gt; &lt;span class="n"&gt;startproject&lt;/span&gt; &lt;span class="n"&gt;myproject&lt;/span&gt;



&lt;span class="c1"&gt;# Create a Django app
&lt;/span&gt;
&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;startapp&lt;/span&gt; &lt;span class="n"&gt;myapp&lt;/span&gt;



&lt;span class="c1"&gt;# 2. Install required packages
&lt;/span&gt;
&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;django&lt;/span&gt; &lt;span class="n"&gt;djangorestframework&lt;/span&gt; &lt;span class="n"&gt;kafka&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;



&lt;span class="c1"&gt;# 3. Configure Kafka
&lt;/span&gt;
&lt;span class="c1"&gt;# Assuming Kafka is running locally on default ports
&lt;/span&gt;


&lt;span class="c1"&gt;# 4. Configure Django settings.py
&lt;/span&gt;
&lt;span class="c1"&gt;# Add 'rest_framework' and 'myapp' to INSTALLED_APPS
&lt;/span&gt;
&lt;span class="c1"&gt;# Configure Kafka settings if necessary
&lt;/span&gt;


&lt;span class="c1"&gt;# 5. Define Django models in models.py (in myapp)
&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto_now_add&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__str__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;



&lt;span class="c1"&gt;# 6. Define DRF serializers in serializers.py (in myapp)
&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;serializers&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MessageSerializer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serializers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelSerializer&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;

        &lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;created_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;



&lt;span class="c1"&gt;# 7. Define DRF views in views.py (in myapp)
&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;viewsets&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.serializers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MessageSerializer&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MessageViewSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;viewsets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelViewSet&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;queryset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;serializer_class&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MessageSerializer&lt;/span&gt;



&lt;span class="c1"&gt;# 8. Configure Django URLs in urls.py (in myapp)
&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework.routers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultRouter&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.views&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MessageViewSet&lt;/span&gt;



&lt;span class="n"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DefaultRouter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MessageViewSet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;

    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;

&lt;span class="p"&gt;]&lt;/span&gt;



&lt;span class="c1"&gt;# 9. Produce messages to Kafka (producer.py)
&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;kafka&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;KafkaProducer&lt;/span&gt;



&lt;span class="n"&gt;producer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KafkaProducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bootstrap_servers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost:9092&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;send_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;producer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;my-topic&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;



&lt;span class="c1"&gt;# Example usage:
&lt;/span&gt;
&lt;span class="nf"&gt;send_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello Kafka!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;span class="c1"&gt;# 10. Consume messages from Kafka (consumer.py)
&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;kafka&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;KafkaConsumer&lt;/span&gt;



&lt;span class="n"&gt;consumer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KafkaConsumer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;my-topic&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bootstrap_servers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost:9092&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%s:%d:%d: key=%s value=%s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

                                          &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

                                          &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;



&lt;span class="c1"&gt;# 11. Run Django server
&lt;/span&gt;
&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;runserver&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup will provide you with a basic Django project integrated with Django Rest Framework and Kafka. You can extend it further based on your application requirements. Let me know if you need more detailed explanations or assistance with any specific part! &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Python Kafka</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:15:57 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/python-kafka-291d</link>
      <guid>https://dev.to/dhirajpatra/python-kafka-291d</guid>
      <description>&lt;p&gt;Developing Microservices with Python, REST API, Nginx, and Kafka (End-to-End)&lt;br&gt;
Here's a step-by-step guide to developing microservices with the mentioned technologies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define Your Microservices:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Break down Functionality: Identify distinct functionalities within your application that can be independent services. These services should have well-defined APIs for communication.&lt;br&gt;
Example: If you're building an e-commerce application, separate services could manage user accounts, products, orders, and payments.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Develop Python Microservices with RESTful APIs:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Choose a Python framework: Popular options include Flask, FastAPI, and Django REST Framework.&lt;br&gt;
Develop each microservice as a separate Python application with clearly defined endpoints for API calls (GET, POST, PUT, DELETE).&lt;br&gt;
Use libraries like requests for making API calls between services if needed.&lt;br&gt;
Implement data persistence for each service using databases (e.g., PostgreSQL, MongoDB) or other storage solutions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setup Nginx as a Reverse Proxy:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nginx acts as a single entry point for external traffic directed to your application.&lt;br&gt;
Configure Nginx to route incoming requests to the appropriate microservice based on the URL path.&lt;br&gt;
You can use tools like uvicorn (with ASGI frameworks) or gunicorn (with WSGI frameworks) to serve your Python applications behind Nginx.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Implement Communication with Kafka:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Producers: Use Kafka producer libraries for Python (e.g., confluent-kafka-python) to send messages (events) to specific Kafka topics relevant to your application's needs.&lt;br&gt;
Consumers: Each microservice can subscribe to relevant Kafka topics to receive events published by other services. Implement consumer logic to react to these events and update its data or perform actions accordingly.&lt;br&gt;
Kafka acts as a decoupling mechanism, allowing services to communicate asynchronously and avoid tight coupling.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build and Deploy:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Containerization: Consider containerizing your Python applications using Docker for easier deployment and management.&lt;br&gt;
Orchestration: Use container orchestration tools like Docker Swarm or Kubernetes to manage scaling and deployment across multiple servers (if needed).&lt;br&gt;
Example Workflow:&lt;/p&gt;

&lt;p&gt;User sends a request to Nginx.&lt;br&gt;
Nginx routes the request based on the URL path to the appropriate microservice.&lt;br&gt;
Microservice processes the request, interacts with its database/storage, and generates a response.&lt;br&gt;
If necessary, the microservice publishes an event to a Kafka topic.&lt;br&gt;
Other microservices subscribed to that topic receive the event and react accordingly, updating data or performing actions.&lt;br&gt;
The response from the original microservice is sent back through Nginx to the user.&lt;br&gt;
Additional Considerations:&lt;/p&gt;

&lt;p&gt;Configuration Management: Tools like Consul or Etcd can be used to manage configuration settings for microservices and Kafka.&lt;br&gt;
Logging and Monitoring: Implement logging and monitoring solutions (e.g., Prometheus, Grafana) to track performance and troubleshoot issues.&lt;br&gt;
Security: Secure your API endpoints and consider authentication and authorization mechanisms. Explore libraries like python-jose for JWT (JSON Web Token) based authentication.&lt;br&gt;
Resources:&lt;/p&gt;

&lt;p&gt;Flask Tutorial: &lt;a href="https://palletsprojects.com/p/flask/" rel="noopener noreferrer"&gt;https://palletsprojects.com/p/flask/&lt;/a&gt;&lt;br&gt;
FastAPI Tutorial: &lt;a href="https://github.com/tiangolo/full-stack-fastapi-template" rel="noopener noreferrer"&gt;https://github.com/tiangolo/full-stack-fastapi-template&lt;/a&gt;&lt;br&gt;
Django REST Framework Tutorial: &lt;a href="https://www.django-rest-framework.org/tutorial/quickstart/" rel="noopener noreferrer"&gt;https://www.django-rest-framework.org/tutorial/quickstart/&lt;/a&gt;&lt;br&gt;
Nginx Configuration Guide: &lt;a href="https://docs.nginx.com/nginx/admin-guide/web-server/web-server/" rel="noopener noreferrer"&gt;https://docs.nginx.com/nginx/admin-guide/web-server/web-server/&lt;/a&gt;&lt;br&gt;
Confluent Kafka Python Client: &lt;a href="https://docs.confluent.io/platform/current/clients/api-docs/confluent-kafka-python.html" rel="noopener noreferrer"&gt;https://docs.confluent.io/platform/current/clients/api-docs/confluent-kafka-python.html&lt;/a&gt;&lt;br&gt;
Remember: This is a high-level overview. Each step involves further research and configuration based on your specific requirements.&lt;/p&gt;

&lt;p&gt;While you can't directly implement a full-fledged Kafka-like system in pure Python due to its distributed nature and complex features, you can create a multithreaded event bus using libraries or build a basic version yourself. Here are two approaches:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using a Third-Party Library:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Libraries: Consider libraries like kombu (built on top of RabbitMQ) or geventhub (&lt;a href="https://docs.readthedocs.io/" rel="noopener noreferrer"&gt;https://docs.readthedocs.io/&lt;/a&gt;) that provide multithreaded message queues with features like publishers, subscribers, and concurrency handling. These libraries handle the low-level details, allowing you to focus on the event bus logic.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Building a Basic Event Bus:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a basic implementation to illustrate the core concepts:&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
from queue import Queue&lt;br&gt;
from threading import Thread&lt;/p&gt;

&lt;p&gt;class EventBus:&lt;br&gt;
  def &lt;strong&gt;init&lt;/strong&gt;(self):&lt;br&gt;
    self.subscribers = {}  # Dictionary to store subscribers for each topic&lt;br&gt;
    self.event_queue = Queue()  # Queue to hold events&lt;/p&gt;

&lt;p&gt;def subscribe(self, topic, callback):&lt;br&gt;
    """&lt;br&gt;
    Subscribes a callback function to a specific topic.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Args:
    topic: The topic to subscribe to.
    callback: The function to be called when an event is published to the topic.
"""
if topic not in self.subscribers:
  self.subscribers[topic] = []
self.subscribers[topic].append(callback)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def publish(self, topic, event):&lt;br&gt;
    """&lt;br&gt;
    Publishes an event to a specific topic.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Args:
    topic: The topic to publish the event to.
    event: The event data to be sent to subscribers.
"""
self.event_queue.put((topic, event))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def run(self):&lt;br&gt;
    """&lt;br&gt;
    Starts a thread to handle event processing from the queue.&lt;br&gt;
    """&lt;br&gt;
    def process_events():&lt;br&gt;
      while True:&lt;br&gt;
        topic, event = self.event_queue.get()&lt;br&gt;
        for callback in self.subscribers.get(topic, []):&lt;br&gt;
          callback(event)  # Call each subscriber's callback with the event&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;event_thread = Thread(target=process_events)&lt;br&gt;
event_thread.start()&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Example usage&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;def callback1(event):&lt;br&gt;
  print("Callback 1 received event:", event)&lt;/p&gt;

&lt;p&gt;def callback2(event):&lt;br&gt;
  print("Callback 2 received event:", event)&lt;/p&gt;

&lt;p&gt;event_bus = EventBus()&lt;br&gt;
event_bus.subscribe("my_topic", callback1)&lt;br&gt;
event_bus.subscribe("my_topic", callback2)&lt;br&gt;
event_bus.publish("my_topic", {"data": "This is an event!"})&lt;br&gt;
event_bus.run()  # Start the event processing thread&lt;br&gt;
Explanation:&lt;/p&gt;

&lt;p&gt;EventBus Class:&lt;/p&gt;

&lt;p&gt;subscribers: Dictionary to store lists of callback functions for each topic.&lt;br&gt;
event_queue: Queue to hold events published to different topics.&lt;br&gt;
subscribe: Registers a callback function for a specific topic.&lt;br&gt;
publish: Adds an event to the queue with the corresponding topic.&lt;br&gt;
run: Creates a separate thread to process events from the queue. The thread loops, retrieves events from the queue, and calls the registered callback functions for the matching topic with the event data.&lt;br&gt;
Example Usage:&lt;/p&gt;

&lt;p&gt;Defines two callback functions (callback1 and callback2) to be called when an event is published.&lt;br&gt;
Creates an EventBus instance.&lt;br&gt;
Subscribes both callbacks to the topic "my_topic".&lt;br&gt;
Publishes an event to "my_topic" with some data.&lt;br&gt;
Starts the event processing thread using run().&lt;br&gt;
This is a basic multithreaded event bus. For a fully-fledged system, you'd need to consider additional features:&lt;/p&gt;

&lt;p&gt;Thread Safety: Implement synchronization mechanisms like locks to ensure safe access to shared resources (e.g., the queue) from multiple threads.&lt;br&gt;
Error Handling: Handle potential errors like queue full exceptions or exceptions raised by subscriber callbacks.&lt;br&gt;
Serialization/Deserialization: If events contain complex data structures, consider using libraries like pickle or json to serialize them before sending and deserialize them on the receiving end.&lt;br&gt;
Remember, this is a simplified example. Consider exploring the libraries mentioned earlier for more robust event bus implementations in Python.&lt;/p&gt;

&lt;p&gt;You can search for more articles and tutorials here on this blog.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Steps to Create Bot</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:15:37 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/steps-to-create-bot-1obf</link>
      <guid>https://dev.to/dhirajpatra/steps-to-create-bot-1obf</guid>
      <description>&lt;p&gt;Photo by Kindel Media at pexel&lt;/p&gt;

&lt;p&gt;If you want to develop a ChatBot with Azure and OpenAi in a few simple steps. You can follow the steps below.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design and Requirements Gathering:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Define the purpose and functionalities of the chatbot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gather requirements for integration with Azure, OpenAI, Langchain, Promo Engineering, Document Intelligence System, KNN-based question similarities with Redis, vector database, and Langchain memory.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Azure Setup:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create an Azure account if you don't have one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up Azure Functions for serverless architecture.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Request access to Azure OpenAI Service.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;OpenAI Integration:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Obtain API access to OpenAI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrate OpenAI's GPT models for natural language understanding and generation into your chatbot.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Langchain Integration:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Explore Langchain's capabilities for language processing and understanding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrate Langchain into your chatbot for multilingual support or specialized language tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Implement Langchain memory for retaining context across conversations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Promo Engineering Integration:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Understand Promo Engineering's features for promotional content generation and analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrate Promo Engineering into your chatbot for creating and optimizing promotional messages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Document Intelligence System Integration:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Investigate the Document Intelligence System's functionalities for document processing and analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrate Document Intelligence System for tasks such as extracting information from documents or providing insights.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Development of Chatbot Logic:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Develop the core logic of your chatbot using Python.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Utilize Azure Functions for serverless execution of the chatbot logic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Implement KNN-based question similarities using Redis for efficient retrieval and comparison of similar questions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Integration Testing:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Test the integrated components of the chatbot together to ensure seamless functionality.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Azure AI Studio Deployment:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Deploy LLM model in Azure AI Studio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create an Azure AI Search service.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect Azure AI Search service to Azure AI Studio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add data to the chatbot in the Playground.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add data using various methods like uploading files or programmatically creating an index.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Azure AI Search service to index documents by creating an index and defining fields for document properties.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Deployment and Monitoring:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Deploy the chatbot as an App.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the App in Azure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up monitoring and logging to track performance and user interactions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Continuous Improvement:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Collect user feedback and analyze chatbot interactions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Iterate on the chatbot's design and functionality to enhance user experience and performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/Azure-Samples/azureai-samples" rel="noopener noreferrer"&gt;https://github.com/Azure-Samples/azureai-samples&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Github Action</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:15:18 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/github-action-2fpe</link>
      <guid>https://dev.to/dhirajpatra/github-action-2fpe</guid>
      <description>&lt;p&gt;Photo by Aleksandr Neplokhov at pexel&lt;/p&gt;

&lt;p&gt;GitHub&lt;br&gt;
Explore&lt;br&gt;
Let’s first clarify the difference between workflow and CI/CD and discuss what GitHub Actions do.&lt;/p&gt;

&lt;p&gt;Workflow:&lt;/p&gt;

&lt;p&gt;A workflow is a series of automated steps that define how code changes are built, tested, and deployed.&lt;br&gt;
Workflows can include various tasks such as compiling code, running tests, and deploying applications.&lt;br&gt;
Workflows are defined in a YAML file (usually named .github/workflows/workflow.yml) within your repository.&lt;br&gt;
They are triggered by specific events (e.g., push to a branch, pull request, etc.).&lt;br&gt;
Workflows are not limited to CI/CD; they can automate any process in your development workflow&lt;br&gt;
CI/CD (Continuous Integration/Continuous Deployment):&lt;/p&gt;

&lt;p&gt;CI/CD refers to the practice of automating the process of integrating code changes, testing them, and deploying them to production.&lt;br&gt;
Continuous Integration (CI) focuses on automatically building and testing code changes whenever they are pushed to a repository.&lt;br&gt;
Continuous Deployment (CD) extends CI by automatically deploying code changes to production environments.&lt;br&gt;
CI/CD pipelines ensure that code is consistently tested and deployed, reducing manual effort and minimizing errors.&lt;br&gt;
GitHub Actions:&lt;/p&gt;

&lt;p&gt;GitHub Actions is a feature within GitHub that enables you to automate workflows directly from your GitHub repository.&lt;br&gt;
Key advantages of using GitHub Actions for CI/CD pipelines include:&lt;br&gt;
Simplicity: GitHub Actions simplifies CI/CD pipeline setup. You define workflows in a YAML file within your repo, and it handles the rest.&lt;br&gt;
Event Triggers: You can respond to any webhook on GitHub, including pull requests, issues, and custom webhooks from integrated apps.&lt;br&gt;
Community-Powered: Share your workflows publicly or access pre-built workflows from the GitHub Marketplace.&lt;br&gt;
Platform Agnostic: GitHub Actions works with any platform, language, and cloud provider&lt;br&gt;
In summary, GitHub Actions provides a flexible and integrated way to define workflows, including CI/CD pipelines, directly within your GitHub repository. It’s a powerful tool for automating tasks and improving your development process! 😊&lt;/p&gt;

&lt;p&gt;GitLab&lt;br&gt;
Explore&lt;br&gt;
GitHub Actions, Jenkins, and GitLab CI/CD are all popular tools for automating software development workflows, but they serve different purposes and have distinct features. Let’s briefly compare them:&lt;/p&gt;

&lt;p&gt;GitHub Actions:&lt;/p&gt;

&lt;p&gt;Event-driven CI/CD tool integrated with GitHub repositories.&lt;br&gt;
Workflow files are written in YAML.&lt;br&gt;
Provides free runners hosted on Microsoft Azure for building, testing, and deploying applications.&lt;br&gt;
Has a marketplace with pre-made actions for various tasks.&lt;br&gt;
Beginner-friendly and easy to set up1.&lt;br&gt;
Well-suited for startups and small companies.&lt;br&gt;
Jenkins:&lt;/p&gt;

&lt;p&gt;Established CI/CD tool with extensive community support.&lt;br&gt;
Requires manual setup and maintenance on custom servers.&lt;br&gt;
Uses Groovy scripts for defining pipelines.&lt;br&gt;
Offers flexibility for complex scripting and custom configurations.&lt;br&gt;
Suitable for larger organizations with specific requirements2.&lt;br&gt;
GitLab CI/CD:&lt;/p&gt;

&lt;p&gt;Integrated with GitLab repositories.&lt;br&gt;
Uses .gitlab-ci.yml files for defining pipelines.&lt;br&gt;
Provides shared runners or allows self-hosted runners.&lt;br&gt;
Strong integration with GitLab features.&lt;br&gt;
Well-suited for teams using GitLab for source control and project management.&lt;br&gt;
Will GitHub Actions “kill” Jenkins and GitLab? Not necessarily. Each tool has its strengths and weaknesses, and the choice depends on your specific needs, existing workflows, and team preferences. Some organizations even use a combination of these tools to cover different use cases3. Ultimately, it’s about finding the right fit for your development process4. 😊&lt;/p&gt;

&lt;p&gt;You can see one Github Action implemented for the demo here hope this will help to start. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Pytest with Django</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:14:53 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/pytest-with-django-3d9b</link>
      <guid>https://dev.to/dhirajpatra/pytest-with-django-3d9b</guid>
      <description>&lt;p&gt;Steps and code to set up Django Rest Framework (DRF) test cases with database mocking.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up Django and DRF&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Install Django and DRF:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;django djangorestframework

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a Django project and app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
django-admin startproject projectname

&lt;span class="nb"&gt;cd &lt;/span&gt;projectname

python manage.py startapp appname

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Define Models, Serializers, and Views&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;models.py (appname/models.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TextField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;serializers.py (appname/serializers.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;serializers&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ItemSerializer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serializers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelSerializer&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;

        &lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__all__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;views.py (appname/views.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;viewsets&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.serializers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ItemSerializer&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ItemViewSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;viewsets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelViewSet&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;queryset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;serializer_class&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ItemSerializer&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;urls.py (appname/urls.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework.routers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultRouter&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.views&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ItemViewSet&lt;/span&gt;



&lt;span class="n"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DefaultRouter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ItemViewSet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;

    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;

&lt;span class="p"&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;projectname/urls.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;



&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;

    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;admin/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;api/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;appname.urls&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;

&lt;span class="p"&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Migrate Database and Create Superuser
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
python manage.py makemigrations appname

python manage.py migrate

python manage.py createsuperuser

python manage.py runserver

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Write Test Cases&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;tests.py (appname/tests.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework.test&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;APITestCase&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.serializers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ItemSerializer&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ItemTests&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;APITestCase&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;setUp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Item 1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Description 1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Item 2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Description 2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_get_items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;item-list&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;serializer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ItemSerializer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;many&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_200_OK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;serializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_create_item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;item-list&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Item 3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Description 3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_201_CREATED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Item 3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_update_item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;item-detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pk&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Updated Item 1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Updated Description 1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_200_OK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;refresh_from_db&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Updated Item 1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_delete_item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;item-detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pk&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_204_NO_CONTENT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run Tests
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
python manage.py &lt;span class="nb"&gt;test&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup provides a basic Django project with DRF and test cases for CRUD operations using the database. The test cases mock the database operations, ensuring isolation and consistency during testing.&lt;/p&gt;

&lt;p&gt;Now diving into some more feature tests with Mock, patch etc.&lt;/p&gt;

&lt;p&gt;Here are steps and code to write Django Rest Framework (DRF) test cases using mocking and faking features for scenarios like credit card processing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up Django and DRF&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Install Django and DRF:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;django djangorestframework

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a Django project and app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
django-admin startproject projectname

&lt;span class="nb"&gt;cd &lt;/span&gt;projectname

python manage.py startapp appname

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Define Models, Serializers, and Views&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;models.py (appname/models.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Payment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;card_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;card_holder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;expiration_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DecimalField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_digits&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;decimal_places&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;serializers.py (appname/serializers.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;serializers&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Payment&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PaymentSerializer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serializers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelSerializer&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Payment&lt;/span&gt;

        &lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__all__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;views.py (appname/views.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;viewsets&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Payment&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.serializers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PaymentSerializer&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PaymentViewSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;viewsets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelViewSet&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;queryset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;serializer_class&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PaymentSerializer&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;urls.py (appname/urls.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework.routers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultRouter&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.views&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PaymentViewSet&lt;/span&gt;



&lt;span class="n"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DefaultRouter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payments&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PaymentViewSet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;

    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;

&lt;span class="p"&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;projectname/urls.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;



&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;

    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;admin/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;api/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;appname.urls&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;

&lt;span class="p"&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Migrate Database and Create Superuser
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
python manage.py makemigrations appname

python manage.py migrate

python manage.py createsuperuser

python manage.py runserver

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Write Test Cases with Mocking and Faking&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;tests.py (appname/tests.py):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework.test&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;APITestCase&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;unittest.mock&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;patch&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Payment&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.serializers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PaymentSerializer&lt;/span&gt;



&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PaymentTests&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;APITestCase&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;setUp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;card_number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;4111111111111111&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;card_holder&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;John Doe&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;expiration_date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;12/25&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;100.00&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Pending&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="nd"&gt;@patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;appname.views.PaymentViewSet.create&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_create_payment_with_mock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mock_create&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;mock_create&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;return_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment&lt;/span&gt;



        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payment-list&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_201_CREATED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;card_number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;card_number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;



    &lt;span class="nd"&gt;@patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;appname.views.PaymentViewSet.perform_create&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_create_payment_fake_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mock_perform_create&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fake_perform_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serializer&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

            &lt;span class="n"&gt;serializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Success&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



        &lt;span class="n"&gt;mock_perform_create&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;side_effect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fake_perform_create&lt;/span&gt;



        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payment-list&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_201_CREATED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Success&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_get_payments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payment-list&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;payments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;serializer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PaymentSerializer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;many&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_200_OK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;serializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="nd"&gt;@patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;appname.views.PaymentViewSet.retrieve&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_get_payment_with_mock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mock_retrieve&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;mock_retrieve&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;return_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment&lt;/span&gt;



        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payment-detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pk&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_200_OK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;card_number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;card_number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;



    &lt;span class="nd"&gt;@patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;appname.views.PaymentViewSet.update&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_update_payment_with_mock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mock_update&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;mock_update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;return_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment&lt;/span&gt;

        &lt;span class="n"&gt;updated_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;updated_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Completed&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;



        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payment-detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pk&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;updated_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_200_OK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Completed&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



    &lt;span class="nd"&gt;@patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;appname.views.PaymentViewSet.destroy&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_delete_payment_with_mock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mock_destroy&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;mock_destroy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;return_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;



        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payment-detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pk&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTP_204_NO_CONTENT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assertEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run Tests
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
python manage.py &lt;span class="nb"&gt;test&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup uses &lt;code&gt;unittest.mock.patch&lt;/code&gt; to mock the behavior of various viewset methods in DRF, allowing you to simulate different responses without hitting the actual database or external services.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Run LLaMA in Your Laptop</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:14:29 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/how-to-run-llama-in-your-laptop-3id3</link>
      <guid>https://dev.to/dhirajpatra/how-to-run-llama-in-your-laptop-3id3</guid>
      <description>&lt;p&gt;The LLaMA open model is a large language model that requires significant computational resources and memory to run. While it's technically possible to practice with the LLaMA open model on your laptop, there are some limitations and considerations to keep in mind:&lt;/p&gt;

&lt;p&gt;You can find details about this LLM model here&lt;/p&gt;

&lt;p&gt;Hardware requirements: The LLaMA open model requires a laptop with a strong GPU (Graphics Processing Unit) and a significant amount of RAM (at least 16 GB) to run efficiently. If your laptop doesn't meet these requirements, you may experience slow performance or errors.&lt;/p&gt;

&lt;p&gt;Model size: The LLaMA open model is a large model, with over 1 billion parameters. This means that it requires a significant amount of storage space and memory to load and run. If your laptop has limited storage or memory, you may not be able to load the model or may experience performance issues.&lt;/p&gt;

&lt;p&gt;Software requirements: To run the LLaMA open model, you'll need to install specific software and libraries, such as PyTorch or TensorFlow, on your laptop. You'll also need to ensure that your laptop's operating system is compatible with these libraries.&lt;/p&gt;

&lt;p&gt;That being said, if you still want to try practicing with the LLaMA open model on your laptop, here are some steps to follow:&lt;/p&gt;

&lt;p&gt;Option 1: Run the model locally&lt;/p&gt;

&lt;p&gt;Install the required software and libraries (e.g., PyTorch or TensorFlow) on your laptop.&lt;/p&gt;

&lt;p&gt;Download the LLaMA open model from the official repository (e.g., Hugging Face).&lt;/p&gt;

&lt;p&gt;Load the model using the installed software and libraries.&lt;/p&gt;

&lt;p&gt;Use a Python script or a Jupyter Notebook to interact with the model and practice with it.&lt;/p&gt;

&lt;p&gt;Option 2: Use a cloud service&lt;/p&gt;

&lt;p&gt;Sign up for a cloud service that provides GPU acceleration, such as Google Colab, Amazon SageMaker, or Microsoft Azure Notebooks.&lt;/p&gt;

&lt;p&gt;Upload the LLaMA open model to the cloud service.&lt;/p&gt;

&lt;p&gt;Use the cloud service's interface to interact with the model and practice with it.&lt;/p&gt;

&lt;p&gt;Option 3: Use a containerization service&lt;/p&gt;

&lt;p&gt;Sign up for a containerization service, such as Docker or Kubernetes.&lt;/p&gt;

&lt;p&gt;Create a container with the required software and libraries installed.&lt;/p&gt;

&lt;p&gt;Load the LLaMA open model into the container.&lt;/p&gt;

&lt;p&gt;Use the container to interact with the model and practice with it.&lt;/p&gt;

&lt;p&gt;Keep in mind that even with these options, running the LLaMA open model on your laptop may not be the most efficient or practical approach. The model's size and computational requirements may lead to slow performance or errors.&lt;/p&gt;

&lt;p&gt;If you're serious about practicing with the LLaMA open model, consider using a cloud service or a powerful desktop machine with a strong GPU and sufficient memory.&lt;/p&gt;

&lt;p&gt;Python code with NVIDIA api:&lt;/p&gt;

&lt;p&gt;from openai import OpenAI&lt;/p&gt;

&lt;p&gt;client = OpenAI(&lt;/p&gt;

&lt;p&gt;base_url = "&lt;a href="https://integrate.api.nvidia.com/v1" rel="noopener noreferrer"&gt;https://integrate.api.nvidia.com/v1&lt;/a&gt;",&lt;/p&gt;

&lt;p&gt;api_key = "$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC"&lt;/p&gt;

&lt;p&gt;)&lt;/p&gt;

&lt;p&gt;completion = client.chat.completions.create(&lt;/p&gt;

&lt;p&gt;model="meta/llama3-70b-instruct",&lt;/p&gt;

&lt;p&gt;messages=[{"role":"user","content":"Can i practice LLM open model from my laptop?"}],&lt;/p&gt;

&lt;p&gt;temperature=0.5,&lt;/p&gt;

&lt;p&gt;top_p=1,&lt;/p&gt;

&lt;p&gt;max_tokens=1024,&lt;/p&gt;

&lt;p&gt;stream=True&lt;/p&gt;

&lt;p&gt;)&lt;/p&gt;

&lt;p&gt;for chunk in completion:&lt;/p&gt;

&lt;p&gt;if chunk.choices[0].delta.content is not None:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print(chunk.choices[0].delta.content, end="")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Rollback in Microservices</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:14:08 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/rollback-in-microservices-pp0</link>
      <guid>https://dev.to/dhirajpatra/rollback-in-microservices-pp0</guid>
      <description>&lt;p&gt;I'd be glad to explain microservice application rollback for e-commerce, incorporating best practices and addressing potential challenges:&lt;/p&gt;

&lt;p&gt;Understanding Rollback Requirements in E-commerce&lt;/p&gt;

&lt;p&gt;Transactional Consistency: When a failure occurs during an update spanning multiple microservices (e.g., order placement involving product inventory, user account, and payment), consistent rollback across all affected services is crucial.&lt;br&gt;
Partial Success Scenarios: If some microservices succeed but others fail (e.g., payment goes through but inventory update fails), a mechanism to undo completed operations and handle partial rollbacks is essential.&lt;br&gt;
Data Integrity: Rollback strategies should maintain data integrity by preventing data inconsistencies or data loss.&lt;br&gt;
Rollback Techniques for E-commerce Microservices&lt;/p&gt;

&lt;p&gt;Compensating Transactions: &lt;/p&gt;

&lt;p&gt;Each microservice implements a compensating transaction that reverses its actions if the overall transaction fails.&lt;br&gt;
Example (Order Placement):&lt;br&gt;
Order service: Create an order record (compensate: delete order).&lt;br&gt;
Inventory service: Reduce stock (compensate: increase stock).&lt;br&gt;
Payment service: Capture payment (compensate: refund payment).&lt;br&gt;
Pros: Flexible, independent service development.&lt;br&gt;
Cons: Requires careful design and implementation for all microservices.&lt;br&gt;
Event Sourcing and CQRS (Command Query Responsibility Segregation): &lt;/p&gt;

&lt;p&gt;Events represent state changes in the system.&lt;br&gt;
CQRS separates read (queries) and write (commands) operations.&lt;br&gt;
Rollback involves replaying events from a persistent store (e.g., event database) up to the failure point, potentially with compensating actions.&lt;br&gt;
Pros: Strong consistency, audit trails, scalability for reads.&lt;br&gt;
Cons: Increased complexity, potential performance overhead.&lt;br&gt;
Messaging with Idempotency: &lt;/p&gt;

&lt;p&gt;Use asynchronous messaging queues for communication between microservices.&lt;br&gt;
Design messages to be idempotent (producing the same effect even if processed multiple times).&lt;br&gt;
In case of failures, replay messages to retry operations.&lt;br&gt;
Pros: Loose coupling, fault tolerance, potential for message deduplication.&lt;br&gt;
Cons: Requires additional infrastructure and message design considerations.&lt;br&gt;
Circuit Breakers and Timeouts: &lt;/p&gt;

&lt;p&gt;Implement circuit breakers to automatically stop sending requests to a failing microservice.&lt;br&gt;
Set timeouts for microservice calls to prevent hanging requests.&lt;br&gt;
When a failure occurs, the client initiates rollback or retries as appropriate.&lt;br&gt;
Pros: Fault isolation, prevent cascading failures.&lt;br&gt;
Cons: Requires configuration and tuning for effective behavior.&lt;br&gt;
Choosing the Right Technique&lt;/p&gt;

&lt;p&gt;The optimal technique depends on your specific e-commerce application's requirements and complexity. Consider:&lt;/p&gt;

&lt;p&gt;Transaction patterns&lt;br&gt;
Data consistency needs&lt;br&gt;
Microservice development complexity&lt;br&gt;
Performance requirements&lt;br&gt;
Additional Considerations&lt;/p&gt;

&lt;p&gt;Rollback Coordination: Designate a central coordinator (e.g., saga pattern) or distributed consensus mechanism to orchestrate rollback across services if necessary.&lt;br&gt;
Rollback Testing: Thoroughly test rollback scenarios to ensure data consistency and proper recovery.&lt;br&gt;
Monitoring and Alerting: Monitor application and infrastructure health to detect failures and initiate rollbacks proactively.&lt;br&gt;
Example Code (Illustrative - Replace with Language-Specific Code)&lt;/p&gt;

&lt;p&gt;Compensating Transaction (Order Service):&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
def create_order(self, order_data):&lt;br&gt;
    try:&lt;br&gt;
        # Create order record&lt;br&gt;
        # ...&lt;br&gt;
        return order_id&lt;br&gt;
    except Exception as e:&lt;br&gt;
        self.compensate_order(order_id)&lt;br&gt;
        raise e  # Re-raise to propagate the error&lt;/p&gt;

&lt;p&gt;def compensate_order(self, order_id):&lt;br&gt;
    # Delete order record&lt;br&gt;
    # ...&lt;br&gt;
Event Sourcing (Order Placement Example):&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
def place_order(self, order_data):&lt;br&gt;
    # Create order event&lt;br&gt;
    event = OrderPlacedEvent(order_data)&lt;br&gt;
    # Store event in persistent store&lt;br&gt;
    self.event_store.save(event)&lt;br&gt;
Remember to tailor the code to your specific programming language and framework.&lt;/p&gt;

&lt;p&gt;By effectively implementing rollback strategies, you can ensure the resilience and reliability of your e-commerce microservices architecture, even in the face of failures.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Local Copilot with SLM</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:13:45 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/local-copilot-with-slm-57ki</link>
      <guid>https://dev.to/dhirajpatra/local-copilot-with-slm-57ki</guid>
      <description>&lt;p&gt;Photo by ZHENYU LUO on Unsplash&lt;/p&gt;

&lt;p&gt;What is a Copilot?&lt;/p&gt;

&lt;p&gt;A copilot in the context of software development and artificial intelligence refers to an AI-powered assistant that helps users by providing suggestions, automating repetitive tasks, and enhancing productivity. These copilots can be integrated into various applications, such as code editors, customer service platforms, or personal productivity tools, to provide real-time assistance and insights.&lt;/p&gt;

&lt;p&gt;Benefits of a Copilot&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Increased Productivity:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Copilots can automate repetitive tasks, allowing users to focus on more complex and creative aspects of their work.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Real-time Assistance:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Provides instant suggestions and corrections, reducing the time spent on debugging and error correction.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Knowledge Enhancement:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Offers context-aware suggestions that help users learn and apply best practices, improving their skills over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Consistency:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Ensures consistent application of coding standards, style guides, and other best practices across projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What is a Local Copilot?&lt;/p&gt;

&lt;p&gt;A local copilot is a variant of AI copilots that runs entirely on local compute resources rather than relying on cloud-based services. This setup involves deploying smaller, yet powerful, language models on local machines. &lt;/p&gt;

&lt;p&gt;Benefits of a Local Copilot&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Privacy and Security:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Running models locally ensures that sensitive data does not leave the user's environment, mitigating risks associated with data breaches and unauthorized access.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Reduced Latency:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Local execution eliminates the need for data transmission to and from remote servers, resulting in faster response times.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Offline Functionality:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Local copilots can operate without an internet connection, making them reliable even in environments with limited or no internet access.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Cost Efficiency:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Avoids the costs associated with cloud-based services and data storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How to Implement a Local Copilot&lt;/p&gt;

&lt;p&gt;Implementing a local copilot involves selecting a smaller language model, optimizing it to fit on local hardware, and integrating it with a framework like LangChain to build and run AI agents. Here are the high-level steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model Selection:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Choose a language model that has 8 billion parameters or less.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Optimization with TensorRT:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Quantize and optimize the model using NVIDIA TensorRT-LLM to reduce its size and ensure it fits on your GPU.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Integration with LangChain:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Use the LangChain framework to build and manage the AI agents that will run locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Deployment:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Deploy the optimized model on local compute resources, ensuring it can handle the tasks required by the copilot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By leveraging local compute resources and optimized language models, you can create a robust, privacy-conscious, and efficient local copilot to assist with various tasks and enhance productivity.&lt;/p&gt;

&lt;p&gt;To develop a local copilot using smaller language models with LangChain and NVIDIA TensorRT-LLM, follow these steps:&lt;/p&gt;

&lt;p&gt;Step-by-Step Guide&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Set Up Your Environment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install Required Libraries:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ensure you have Python installed and then install the necessary libraries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
   pip &lt;span class="nb"&gt;install &lt;/span&gt;langchain nvidia-pyindex nvidia-tensorrt

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Prepare Your GPU:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make sure your system has an NVIDIA GPU and CUDA drivers installed. You'll also need TensorRT libraries which can be installed via the NVIDIA package index:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;nvidia-cuda-toolkit

   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;tensorrt

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Model Preparation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select a Smaller Language Model:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Choose a language model that has 8 billion parameters or less. You can find many such models on platforms like Hugging Face.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Quantize the Model Using NVIDIA TensorRT-LLM:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use TensorRT to optimize and quantize the model to make it fit on your GPU.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
   &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tensorrt&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;trt&lt;/span&gt;



   &lt;span class="c1"&gt;# Load your model here
&lt;/span&gt;
   &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_your_model_function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;



   &lt;span class="c1"&gt;# Create a TensorRT engine
&lt;/span&gt;
   &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

   &lt;span class="n"&gt;network&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_network&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

   &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OnnxParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;



   &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_model.onnx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

       &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;



   &lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build_cuda_engine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Integrate with LangChain&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set Up LangChain:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create a LangChain project and configure it to use your local model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
   &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LangChain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LanguageModel&lt;/span&gt;



   &lt;span class="c1"&gt;# Assuming you have a function to load your TensorRT engine
&lt;/span&gt;
   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load_trt_engine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;engine_path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

       &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;engine_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

           &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deserialize_cuda_engine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;



   &lt;span class="n"&gt;trt_engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_trt_engine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_model.trt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



   &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LocalLanguageModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LanguageModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

       &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

           &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;



       &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

           &lt;span class="c1"&gt;# Implement prediction logic using TensorRT engine
&lt;/span&gt;
           &lt;span class="k"&gt;pass&lt;/span&gt;



   &lt;span class="n"&gt;local_model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LocalLanguageModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trt_engine&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Develop the Agent:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use LangChain to develop your agent utilizing the local language model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
   &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;



   &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LocalCopilotAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

       &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

           &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;



       &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

           &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



   &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LocalCopilotAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;local_model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Run the Agent Locally&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute the Agent:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Run the agent locally to handle tasks as required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

       &lt;span class="n"&gt;user_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Enter your input here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

       &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

       &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By following these steps, you can develop a local copilot using LangChain and NVIDIA TensorRT-LLM. This approach ensures privacy and security by running the model on local compute resources.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Nvidia CUDA</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:13:20 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/nvidia-cuda-e9</link>
      <guid>https://dev.to/dhirajpatra/nvidia-cuda-e9</guid>
      <description>&lt;p&gt;CUDA&lt;/p&gt;

&lt;p&gt;Explore&lt;br&gt;
To install NVIDIA CUDA with your GeForce 940MX GPU and Intel Core i7 processor, follow these steps:&lt;/p&gt;

&lt;p&gt;Verify GPU Compatibility: First, ensure that your GPU (GeForce 940MX) is supported by CUDA. According to the NVIDIA forums, the 940MX is indeed supported1. You can also check the official NVIDIA specifications for the GeForce 940MX, which confirms its CUDA support2.&lt;/p&gt;

&lt;p&gt;System Requirements: To use CUDA on your system, you’ll need the following installed:&lt;/p&gt;

&lt;p&gt;A CUDA-capable GPU (which you have)&lt;br&gt;
A supported version of Windows (e.g., Windows 10, Windows 11)&lt;br&gt;
NVIDIA CUDA Toolkit (available for download from the NVIDIA website3)&lt;br&gt;
Download and Install CUDA Toolkit:&lt;/p&gt;

&lt;p&gt;Visit the NVIDIA CUDA Toolkit download page and select the appropriate version for your system.&lt;br&gt;
Follow the installation instructions provided on the page. Make sure to choose the correct version for your operating system.&lt;br&gt;
Test the Installation: After installation, verify that CUDA is working correctly:&lt;/p&gt;

&lt;p&gt;Open a command prompt or terminal.&lt;br&gt;
Run the following command to check if CUDA is installed:&lt;br&gt;
nvcc --version&lt;br&gt;
If you see version information, CUDA is installed successfully.&lt;br&gt;
Remember that CUDA enables parallel computing on GPUs, allowing you to harness their power for high-performance tasks. Good luck with your CUDA development! 😊&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sentiment Analysis with LangChain and LLM</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:12:47 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/sentiment-analysis-with-langchain-and-llm-4aib</link>
      <guid>https://dev.to/dhirajpatra/sentiment-analysis-with-langchain-and-llm-4aib</guid>
      <description>&lt;p&gt;Here's a quick guide on how to perform sentiment analysis and other tasks using LangChain, LLM (Large Language Models), NLP (Natural Language Processing), and statistical analytics.&lt;/p&gt;

&lt;p&gt;Sentiment Analysis with LangChain and LLM&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Required Libraries:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
   pip &lt;span class="nb"&gt;install &lt;/span&gt;langchain openai transformers

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Set Up OpenAI API:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
   &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;



   &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;your_openai_api_key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;LangChain for Sentiment Analysis:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
   &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.llms&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

   &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Chain&lt;/span&gt;



   &lt;span class="c1"&gt;# Initialize OpenAI LLM
&lt;/span&gt;
   &lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text-davinci-003&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



   &lt;span class="c1"&gt;# Define a function for sentiment analysis
&lt;/span&gt;
   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_sentiment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

       &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;

           &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze the sentiment of the following text: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

           &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;

       &lt;span class="p"&gt;)&lt;/span&gt;

       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;



   &lt;span class="c1"&gt;# Example usage
&lt;/span&gt;
   &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I love the new design of the website!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

   &lt;span class="n"&gt;sentiment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;analyze_sentiment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

   &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sentiment: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sentiment&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Additional NLP Tasks with LangChain and LLM&lt;/p&gt;

&lt;p&gt;Text Summarization&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarize_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;

        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize the following text: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;

    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;



&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;
&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your detailed article or document here.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;summary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;summarize_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summary: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Named Entity Recognition (NER)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_entities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;

        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extract the named entities from the following text: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;

    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;



&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;
&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OpenAI, founded in San Francisco, is a leading AI research institute.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;entities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extract_entities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Entities: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entities&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Statistical Analytics with NLP&lt;/p&gt;

&lt;p&gt;Word Frequency Analysis&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Counter&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;



&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;word_frequency_analysis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\w+&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="n"&gt;frequency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;frequency&lt;/span&gt;



&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;
&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;This is a sample text with several words. This text is for testing.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;frequency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;word_frequency_analysis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Word Frequency: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;frequency&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sentiment Score Aggregation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sentiment_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;sentiment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;analyze_sentiment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;positive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sentiment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;negative&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sentiment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;



&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;
&lt;span class="n"&gt;texts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I love this!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;This is bad.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;It&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s okay.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;scores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;sentiment_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;average_score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Average Sentiment Score: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;average_score&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more advanced uses and customization, refer to the &lt;a href="https://langchain.com/docs" rel="noopener noreferrer"&gt;LangChain documentation&lt;/a&gt; and the &lt;a href="https://beta.openai.com/docs/" rel="noopener noreferrer"&gt;OpenAI API documentation&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Airflow and Kubeflow Differences</title>
      <dc:creator>Dhiraj Patra</dc:creator>
      <pubDate>Fri, 31 May 2024 03:12:21 +0000</pubDate>
      <link>https://dev.to/dhirajpatra/airflow-and-kubeflow-differences-53g</link>
      <guid>https://dev.to/dhirajpatra/airflow-and-kubeflow-differences-53g</guid>
      <description>&lt;p&gt;photo by pixabay&lt;/p&gt;

&lt;p&gt;Here's a breakdown of the key differences between Kubeflow and Airflow, specifically in the context of machine learning pipelines, with a focus on Large Language Models (LLMs):&lt;/p&gt;

&lt;p&gt;Kubeflow vs. Airflow for ML Pipelines (LLMs):&lt;/p&gt;

&lt;p&gt;Core Focus:&lt;/p&gt;

&lt;p&gt;Kubeflow: Kubeflow is a dedicated platform for machine learning workflows. It provides a comprehensive toolkit for building, deploying, and managing end-to-end ML pipelines, including functionalities for experiment tracking, model training, and deployment.&lt;br&gt;
Airflow: Airflow is a general-purpose workflow orchestration platform. While not specifically designed for ML, it can be used to automate various tasks within an ML pipeline.&lt;br&gt;
Strengths for LLMs:&lt;/p&gt;

&lt;p&gt;Kubeflow:&lt;br&gt;
ML-centric features: Kubeflow offers built-in features specifically beneficial for LLMs, such as Kubeflow Pipelines for defining and managing complex training workflows, Kubeflow Notebook for interactive development, and KFServing for deploying trained models.&lt;br&gt;
Scalability: Kubeflow is designed to handle large-scale deployments on Kubernetes, making it suitable for training and running computationally expensive LLM models.&lt;br&gt;
Integration with TensorFlow/PyTorch: Kubeflow integrates seamlessly with popular deep learning frameworks like TensorFlow and PyTorch, commonly used for building LLMs.&lt;br&gt;
Airflow:&lt;br&gt;
Flexibility: Airflow's flexibility allows for integrating various tools and libraries needed for LLM pipelines, such as version control systems (e.g., Git) for code management and custom Python scripts for specific LLM training tasks.&lt;br&gt;
Scheduling and Monitoring: Airflow excels at scheduling tasks within the pipeline and monitoring their execution, ensuring timely execution and providing visibility into the training process.&lt;br&gt;
Considerations:&lt;/p&gt;

&lt;p&gt;Complexity: Kubeflow has a steeper learning curve due to its ML-specific features and reliance on Kubernetes. Airflow, however, might require additional customization for LLM workflows.&lt;br&gt;
Community and Resources: Kubeflow has a growing community focused on machine learning, but Airflow has a broader and more established user base. This can impact the availability of resources and support.&lt;br&gt;
Overall:&lt;/p&gt;

&lt;p&gt;Kubeflow is a strong choice if you prioritize a comprehensive, scalable, and ML-focused platform for building and managing LLM pipelines.&lt;br&gt;
Airflow is a viable option if you need a flexible and customizable workflow orchestration tool, especially if you already have an Airflow setup for other tasks and want to integrate LLM training within it.&lt;br&gt;
Additional Notes:&lt;/p&gt;

&lt;p&gt;Both Kubeflow and Airflow can be used with managed cloud services offered by major cloud providers (e.g., Google Cloud AI Platform, Amazon SageMaker) that simplify deployment and management of these platforms.&lt;br&gt;
There are also other platforms specifically designed for large language models, such as Hugging Face Transformers Hub, which offer functionalities for training, deploying, and sharing LLM models.&lt;br&gt;
The best choice between Kubeflow and Airflow depends on your specific needs, project complexity, and existing infrastructure. Consider the factors mentioned above to make an informed decision for your LLM pipeline.&lt;/p&gt;

&lt;p&gt;To know more about Airflow click here. To know more about Kubeflow click here.&lt;/p&gt;

&lt;p&gt;Hope this will help you. Also here my Github repo for some examples.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
